求助贴,刚接触msp不到一个月。请问论坛的大神,这个基于msp430 的无线数据采集监控,怎么个思路?谢谢++

2019-07-15 15:50发布

使用MSP430作为主控芯片组成数据采集监控系统,通过传感器采集温度、多种气体浓度,光照,湿度等信息,通过无线方式将数据上传到主控机,进行应急处理,同时通过将相关信息以短信形式发给管理人员。管理人员也可通过短信形式发送命令控制监控系统进行相应的紧急操作。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
18条回答
hobbye501
1楼-- · 2019-07-16 15:29
 精彩回答 2  元偷偷看……
xiaochang1
2楼-- · 2019-07-16 17:03
无线的话我没用过,你可以试试蓝牙或WIFI,买模块的时候应该会赠送代码的
xiaochang1
3楼-- · 2019-07-16 17:35
430的AD采集转换我有温度传感器的代码,其他的传感器你配置不同的IO引脚应按就差不多了
xiaochang1
4楼-- · 2019-07-16 20:34
//******************************************************************************
//                MSP430F149
//            -----------------
//        /||              XIN|-
//         | |                 | 32kHz
//         --|RST          XOUT|-
//           |                 |
//           |                 |
//           |           P5.3  |<----TEMP_DQ
//           |                 |
//

//******************************************************************************
#include <msp430x14x.h>
#include "DS18B20.h"

#define CPU_F ((double)8000000)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))

#define uchar unsigned char
#define uint unsigned int

                              //定义的变量,显示数据处理
//*************************************************************************
//                        DS18B20初始化
//*************************************************************************

unsigned char DS18B20_Reset(void)                //初始化和复位
{
  unsigned char i;
  DQ_OUT;
  DQ_CLR;
  delay_us(500);                                //延时500uS(480-960)
  DQ_SET;
  DQ_IN;
  delay_us(80);                                        //延时80uS
  i = DQ_R;
  delay_us(500);                                //延时500uS(保持>480uS)
       
  if (i)
  {
    return 0x00;
  }
  else
  {
    return 0x01;
  }
}

//*************************************************************************
//                        DS18B20读一个字节函数
//*************************************************************************
   
unsigned char ds1820_read_byte(void)
{
  unsigned char i;
  unsigned char value = 0;
  for (i = 8; i != 0; i--)
  {
    value >>= 1;
    DQ_OUT;
    DQ_CLR;
    delay_us(4);                                //*延时4uS       
    DQ_SET;
    DQ_IN;
    delay_us(10);                                //*延时10uS       
    if (DQ_R)
    {
      value|=0x80;               
    }
    delay_us(60);                                //*延时60uS       
  }
  return(value);
}

//*************************************************************************
//                        向18B20写一个字节函数
//*************************************************************************  

/*DS18B20字节写入函数*/
void ds1820_write_byte(unsigned char value)
{
  unsigned char i;
  for (i = 8; i != 0; i--)
  {
    DQ_OUT;
    DQ_CLR;
    delay_us(4);                          //延时4uS
    if (value & 0x01)
    {
      DQ_SET;               
    }
    delay_us(80);                          //延时80uS
    DQ_SET;                                  //位结束
    value >>= 1;       
  }
}
//*************************************************************************
//                                发送温度转换命令
//*************************************************************************

/*启动ds1820转换*/
void ds1820_start(void)
{
  DS18B20_Reset();
  ds1820_write_byte(0xCC);                  //勿略地址
  ds1820_write_byte(0x44);                  //启动转换
}

//*************************************************************************
//                                DS8B20读取温度信息
//*************************************************************************

unsigned int ds1820_read_temp(void)
{
  unsigned int i;
  unsigned char buf[9];
  unsigned int    temp_value;

  DS18B20_Reset();
  ds1820_write_byte(0xCC);                  //勿略地址
  ds1820_write_byte(0xBE);                  //读取温度
  for (i = 0; i < 9; i++)
  {
    buf[i] = ds1820_read_byte();       
  }
  i = buf[1];
  i <<= 8;
  i |= buf[0];
  temp_value=i;
  temp_value=(uint)(temp_value*0.625);    //不是乘以0.0625的原因是为了把小数点后一位数据也转化为可以显示的数据
                                          //比如温度本身为27.5度,为了在后续的数据处理程序中得到BCD码,我们先放大到275
                                          //然后在显示的时候确定小数点的位置即可,就能显示出27.5度了
  return temp_value;
}
化雨为云
5楼-- · 2019-07-16 20:39
化雨为云 发表于 2017-3-27 12:10
芯片的选择大家能给个建议吗?谢谢

好的,谢谢了!
化雨为云
6楼-- · 2019-07-17 02:03
 精彩回答 2  元偷偷看……

一周热门 更多>