物联网工程关键技术应用 :实时监测环境的温度和光照强度电压

一、项目任务要求

  • 系统功能:实时监测环境的温度和光照强度
  • 系统组成:由zigbee硬件监测部分和pc监控软件两部分组成。
  • 硬件由三个zigbee设备组成,一个协调器,两个终端节点。其中一个终端节点每隔2S采集光照强度电压传给协调器,另外一个终端节点采集内部温度每隔1s传给协调器,无线通信方式为组播。协调器接收到两个终端节点的数据后通过串口转发给PC机。
  • PC机通过串口实时接受到协调器传过来的温度和光照强度电压,在界面上显示其值,并将数据写入数据库
  • 要求完成以下内容:
  • 三个zigbee设备的底层编程,组成无线网络,其中一个终端节点每隔2S采集光照强度电压传给协调器,另外一个终端节点采集内部温度每隔1s传给协调器,协调器接收到两个终端节点的数据后通过串口转发给PC机
  • 编写上位机程序实现:PC机通过串口实时接受到协调器传过来的温度和光照强度电压,在界面上显示其值,并将数据写入数据库
  • 要求完成以下内容:
  1. 三个zigbee设备的底层编程,组成无线网络,其中一个终端节点每隔2S采集光照强度电压传给协调器,另外一个终端节点采集内部温度每隔1s传给协调器,协调器接收到两个终端节点的数据后通过串口转发给PC机
  2. 编写上位机程序实现:PC机通过串口实时接受到协调器传过来的温度和光照强度电压,在界面上显示其值,并将数据写入数据库
  3. PC上位机程序动态显示温度和光照强度电压曲线(拓展,不做硬性要求),如:

4、编写报告,详细描述系统实现和关键代码分析,附带实现图片。

河池学院

课程项目报告

课程名称:  物联网工程关键技术应用  

班级:本科2020电子信息工程技术1班

组员姓名: 韦雄峰 覃少华 陈文贵 蒋文健                        

授课教师:           邱越           

2023628

目 录

  • 项目任务要求
  • 项目所用硬件模块
  • 项目程序流程

3.1 主程序流程图 4

3.2 温度测量流程图 5

3.3 事件处理流程图 6

四、关键功能函数代码

4.1 片内温度传感器数值采集........................................7

4.2 片外气体传感器电压值采集......................................8

4.3 无线传感器网络建立............................................9

4.4 无线数据发送与接收...........................................10

4.5 协调器数据串口发送...........................................11

五、项目实现效果

5.1 串口效果图......................................................................................................12

5.2硬件效果图........................................................................................................13

5.3温度折线图....................................................................................................14

六、项目总结

一、项目任务要求

  • 系统功能:实时监测环境的温度和光照强度
  • 系统组成:由zigbee硬件监测部分和pc监控软件两部分组成。
  • 硬件由三个zigbee设备组成,一个协调器,两个终端节点。其中一个终端节点每隔2S采集光照强度电压传给协调器,另外一个终端节点采集内部温度每隔1s传给协调器,无线通信方式为组播。协调器接收到两个终端节点的数据后通过串口转发给PC机。
  • PC机通过串口实时接受到协调器传过来的温度和光照强度电压,在界面上显示其值,并将数据写入数据库
  • 要求完成以下内容:
  • 三个zigbee设备的底层编程,组成无线网络,其中一个终端节点每隔2S采集光照强度电压传给协调器,另外一个终端节点采集内部温度每隔1s传给协调器,协调器接收到两个终端节点的数据后通过串口转发给PC机
  • 编写上位机程序实现:PC机通过串口实时接受到协调器传过来的温度和光照强度电压,在界面上显示其值,并将数据写入数据库
  • 要求完成以下内容:
  1. 三个zigbee设备的底层编程,组成无线网络,其中一个终端节点每隔2S采集光照强度电压传给协调器,另外一个终端节点采集内部温度每隔1s传给协调器,协调器接收到两个终端节点的数据后通过串口转发给PC机
  2. 编写上位机程序实现:PC机通过串口实时接受到协调器传过来的温度和光照强度电压,在界面上显示其值,并将数据写入数据库
  3. PC上位机程序动态显示温度和光照强度电压曲线(拓展,不做硬性要求),如:

4、编写报告,详细描述系统实现和关键代码分析,附带实现图片。

二、项目所用硬件模块

三个ZIGBEE模块,一个温度光照传感模块,两个实验平台。

三、项目程序流程

3.1主程序流程图

图 Z--Stack 系统运行流程图

3.2温度测量流程图

3.3事件处理流程图

4.1片内温度传感器数值采集

float T;

uint16 adcvalue;

float getTemp(void)

{

  ATEST = 0x01;

  TR0 = 0x01;

  

  ADCCON3 |= 0x0e;

  ADCCON3 &= 0x3f;

  ADCCON3 |= 0x30;

  ADCCON1 |= 0x30;

  ADCCON1 |= 0x40;

  

  while(!(ADCCON1 & 0x80));

  

  adcvalue = (uint16) ADCL;

  adcvalue |= (uint16) (ADCH << 8);

  adcvalue = adcvalue >> 2;

  

  T = adcvalue * 0.06229 - 303.3 - 25;

  

  return T;

}    

4.2片外气体传感器电压值采集

uint16 sensor_val;

float volt;

float get_VL(void){

  sensor_val = get_adc();

  volt = (sensor_val * 3.3) / 8192;  

  return volt;

}

uint16 get_adc()

{

  uint32 value;  

  adc_init();                         

  ADCIF = 0;                           

 ADCCON3 = (0x80 | 0x10 | 0x00);  

  while(!ADCIF);                    

  value = ADCL;

  value = (((uint16)ADCH) << 8);  

  return (uint16) value;

}

void adc_init()

{

  APCFG |= 1;                 

  P0SEL |= (1 << (0));      

  P0DIR &= (1 << (0));    

}

4.3无线传感器网络建立

void SampleApp_SendPeriodicMessage( void )  //发送周期信息

{  //调用AF_DataRequest()函数将数据无线广播出去

  if ( AF_DataRequest( &SampleApp_Periodic_DstAddr, &SampleApp_epDesc,  //发送目的地址+端点地址和传送模式

                       SAMPLEAPP_PERIODIC_CLUSTERID,   //被Profile指定有效的集群号

                       1,  //发送数据长度

                       (uint8*)&SampleAppPeriodicCounter,  //发送数据的缓冲区

                       &SampleApp_TransID,  //任务ID号

                       AF_DISCV_ROUTE,  //有效位掩码的发送选项  传送跳数通常设置为AF_DEFAULT_RADIUS

                       AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )

  {

  }

  else

  {

    // Error occurred in request to send.

  }

}

4.4无线数据发送与接收

void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )  //无线数据接收函数

{

  uint16 flashTime;

  SAMEPLEAPP_TEMP temperatuer;

    uint8 asc_16[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

  uint16 temp;

  switch ( pkt->clusterId )  //判断簇ID

  {

    case SAMPLEAPP_PERIODIC_CLUSTERID:

      break;

    case SAMPLEAPP_FLASH_CLUSTERID: //收到组播数据

      osal_memcpy(&temperatuer,pkt->cmd.Data,sizeof(temperatuer));

      HalUARTWrite(0,(uint8*)&temperatuer,sizeof(temperatuer));

      HalUARTWrite(0,"\n",1);   

      break;

    case SAMPLEAPP_SERIAL_CLUSTERID: //无线串口发来的数据

      osal_memcpy(&temperatuer,pkt->cmd.Data,sizeof(temperatuer));

      HalUARTWrite(0, &pkt->cmd.Data[0],pkt->cmd.DataLength); //把无线串口数据上传PC机显示

      HalUARTWrite(0,"\n",1);  //发送换行符

      break;

  case SAMPLEAPP_P2P_CLUSTERID:  //接收到单播数据

   HalUARTWrite(0,"Rx:",3);      //提示接收到单播数据

   HalUARTWrite(0,pkt->cmd.Data,pkt->cmd.DataLength);  //串口输出接收到的数据

   HalUARTWrite(0,"\n",1);

   temp=pkt->srcAddr.addr.shortAddr;

    if(pkt->cmd.Data[0]==1) //路由器

      HalUARTWrite(0,"ROUTER ShortAddr:0x",20); //提示接收到数据

    if(pkt->cmd.Data[0]==2) //终端

      HalUARTWrite(0,"ENDDEVICE ShortAddr:0x",25); //提示接收到数据

        HalUARTWrite(0,&asc_16[temp/4096],1);

   HalUARTWrite(0,&asc_16[temp%4096/256],1);

   HalUARTWrite(0,&asc_16[temp%256/16],1);

   HalUARTWrite(0,&asc_16[temp%16],1);  //将短地址分解为ASCII码

   HalUARTWrite(0,"\n",1);

   break;

4.5协调器数据串口发送

 (void)shift;  // Intentionally unreferenced parameter

  

  if ( keys & HAL_KEY_SW_6 )

  {

    /* This key sends the Flash Command is sent to Group 1.

     * This device will not receive the Flash Command from this

     * device (even if it belongs to group 1).

     */

      #if defined(ZDO_COORDINATOR)  //协调器只接收数据

      #else

       SampleApp_SendFlashMessage(0); //路由器和终端才发送数据 以组播方式发送

      #endif

    

SampleApp_SendFlashMessage( SAMPLEAPP_FLASH_DURATION );

  }

五、项目实现效果

            

 5.1 串口效果图

5.2硬件效果图

5.3温度折线图

                      六、项目总结

通过这次的物联网期末项目综合实验,我们更加的深入了解ZIGBEE物联网编程,同时也认识很多模块,比如温度光照传感器模块,还有更加的了解熟练C#窗口编程,还有对IAR软件的熟练,还有对VS软件更加的熟练。

然后你就开始装逼了,这个项目说难不难说简单不简单,在完成这个项目经历了九九八十一难,刚开始时,遇到了许多困难合问题。比如遇到了就是串口助手显示不出,电压和温度,还有上位机,窗口编程,打开不了,就是,接收不到数据,等等。

通过这次实验我,明白了人多力量大的道理。单独的通过自己是完成不了这个实验的,可能是我的实力有限,但是我有好的队友,我们分工合作,我负责软件编程,有人负责硬件,也有人负责做PPT.....,分工明确很顺利进行,很快就完成了。我们一起这样才能更快更好的解决问题,总的来说,这次的收获还是非常不错的。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值