找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5391|回复: 4
打印 上一主题 下一主题
收起左侧

基于DL-LN33无线网络的STM32环境监测系统设计资料与源码

[复制链接]
跳转到指定楼层
楼主
基于无线网络的环境监测系统

    系统主要包括了数据采集节点和环境管理计算机。采用STM32F103单片机和温度、湿度、光照强度等传感器组成节点环境采集系统;主计算机通过通过USB串口和zigbee无线模块组成数据处理系统。各个节点通过zigbee无线网络组网。如下图所示:

图1 环境无线监控系统示意图

节点系统:

     节点系统采用STM32F103单片机+温湿度传感器(DHT11DHT22)+光照强度传感器(TSL2561/BH1750)+无线模块(DL-LN33)。节点系统定时将数据采集并发给主机。

主机:

      主机由计算机和无线模块组成。数据采集到计算机后,通过可视化软件显示并记录于数据库。如下图所示:


图2 可视化软件

     可视化软件采用Visual Studio 2010开发。使用C#语言,windowsForm应用程序。软件主要涉及了串口通信,曲线图,sqlce数据库等。

样机视图如下:



图3 样机视图

通信协议:


序号

定义

内容

说明

备注

0

0xFE

帧头



1

0x0A

包长

数据长+4=10


2

0x90

源端口号



3

0x91

目的端口号



4

0xXX

远程地址L



5

0xXX

远程地址H



6

0xXX

温度数据

0~150,T=N-50;


7

0xXX

湿度数据

0~100


8、9

0xXXXX(H1,H2)

光强0

L=H1*250+H2,0<=H1,H2<=250

可见光+红外光

10、11

0xXXXX(H1,H2)

光强1

L=H1*250+H2,0<=H1,H2<=250

红外光

12

0xFF

帧尾




单片机源程序如下:
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "sys.h"
  4. #include "key.h"
  5. #include "usart.h"
  6. #include "lcd.h"
  7. #include "spi.h"
  8. #include "flash.h"
  9. //#include "ds18b20.h"
  10. #include "timer.h"
  11. //#include"tls2561.h"
  12. #include "BH1750.h"
  13. #include"myiic.h"
  14. #include "DTH11.h"
  15.        
  16.   extern unsigned int timercount;                
  17. extern u8 timerProcess        ;
  18.   extern u8 receiveM;

  19. uint lux_out[2];
  20.          uint (*lux)[2]         ;
  21. int main(void)
  22. {         
  23.          int dis_data=0;
  24.          u8 Mm=0;
  25.                  u8 temperature=0;              
  26.         u8 humidity=0;  
  27.          uchar datao=0;
  28.     //u8 outdatabuff[13]={0xFE, 0x0A, 0x90, 0x91, 0x65,0x12 ,0x00,0x00,0,0,0,0,0xFF}         ;       
  29.                    u8 outdatabuff[13]={0xFE, 0x0A, 0x90, 0x91, 0x16,0x0D ,0x00,0x00,0,0,0,0,0xFF}         ;       
  30.         //  u8 outdatabuff[13]={0xFE, 0x0A, 0x90, 0x91, 0x65,0x12 ,0x00,0x00,0,0,0,0,0xFF}         ;       
  31. //         short temp;   
  32.         lux_out[0]=lux_out[1]=65535;
  33.         SystemInit(); //系统时钟设置
  34.         delay_init(72);             //延时初始化
  35.         NVIC_Configuration();
  36.         uart_init(115200);//串口1初始化
  37.         LED_Init();//LED初始化
  38. //        LCD_Init();//初始化液晶
  39.   Timerx_Init(5000,7199);//10Khz的计数频率,计数到5000为500ms
  40.         IIC_Init();       
  41.         delay_ms(5);
  42.          //        POINT_COLOR=RED;//设置字体为红色          
  43.         //LCD_ShowString(60,50,"Mini STM32");       
  44.         //LCD_ShowString(60,70,"DS18B20 TEST");       
  45.         //LCD_ShowString(60,90,"ATOM@ALIENTEK");
  46.         //LCD_ShowString(60,110,"2011/1/1");
  47.         //while(DS18B20_Init())//初始化DS18B20,兼检测18B20
  48.         //{
  49.                 //LCD_ShowString(60,130,"DS18B20 Check Failed!");
  50.                 //delay_ms(500);                  
  51.                 //LCD_ShowString(60,130,"Please Check!        ");
  52.                 //delay_ms(500);
  53.         //        LED0=!LED0;//DS0闪烁
  54.         //}
  55. //   LCD_ShowString(60,130,"DS18B20 Ready!     ");         
  56. //        POINT_COLOR=BLUE;//设置字体为蓝色          
  57. //        LCD_ShowString(60,150, "Temperate:   . C");         
  58.         LED1=0;
  59.         while(DHT11_Init())        //DHT11初始化       
  60.         {
  61.                
  62.                 delay_ms(100);
  63.                 LED0=!LED0;
  64.                 Mm++;
  65.                 if(Mm>10) break;
  66.                
  67.         }       
  68.   Mm=0;       
  69. //        TSL2561_Write(CONTROL,0x03); //设置TSL2561未开启状态
  70.         Init_BH1750();       //初始化BH1750
  71.         delay_ms(200);
  72.         Single_Write_BH1750(0x01);   // power on
  73. //        while(datao!=0x03)       
  74. //        {
  75. //               
  76. //                datao=TSL2561_Read(CONTROL);
  77. //                delay_ms(200);
  78. //                LED0=!LED0;
  79. //                Mm++;
  80. //                if(Mm>5) break;
  81. //        }
  82.         Mm=0;
  83. //        printf("TSL2561 Inial Success!\n");
  84. //        printf("%d\n",TSL2561_Read(CONTROL));       
  85.                 lux=(uint(*)[2])malloc(2*sizeof(uint));
  86.                                 if(!lux)
  87.                                 {
  88.                                 //        printf("malloc failed!/n");
  89.                                 }
  90.         while(1)
  91.         {          
  92.        
  93.                 if(timerProcess)
  94.                 {
  95.                         if(timercount%5==0)
  96.                         {                                                                                               
  97. //                                lux=Read_Light(); //读取光强
  98. //                                lux_out[0]=(*lux)[0];
  99. //                                lux_out[1]=(*lux)[1];
  100. //                        //        printf("Temp:%dHUM:%dGQ:%d,%d\n",temperature,humidity,(*lux)[0],(*lux)[1]);
  101. //                                free(lux);
  102.                        

  103.                         }
  104.                        
  105.                         if(timercount%10==0)
  106.                         {                                                                                               
  107.                         //        LED0=0;
  108.                                 //DHT11_Read_Data(&temperature,&humidity);                //读取温湿度值       
  109.                                
  110.                                 //LED0=0;
  111.                                 DHT11_Read_Data(&temperature,&humidity);                //读取温湿度值       
  112. //                                lux=Read_Light(); //读取光强
  113. //                                lux_out[0]=(*lux)[0];
  114. //                                lux_out[1]=(*lux)[1];
  115. //                                free(lux);
  116.                                 //        Single_Write_BH1750(0x01);   // power on
  117.          Single_Write_BH1750(0x11);   // H- resolution mode
  118.                                  // Delay_mms(800);            //延时180ms
  119.                                 delay_ms(800);
  120.                                 mread();       //连续读出数据,存储在BUF中
  121.                                  dis_data=BUF[0];
  122.         dis_data=(dis_data<<8)+BUF[1]; //合成数据
  123.         //        printf("Temp:%dHUM:%dGQ:%d,%d\n",temperature,humidity,lux_out[0],lux_out[1]);
  124.                                 if(temperature>100)temperature=100;
  125.                                 if(humidity>100)humidity=100;
  126.                                 outdatabuff[6]=temperature+50;
  127.                                 outdatabuff[7]=humidity;
  128. //                                outdatabuff[8]=(lux_out[0]/256)%256;
  129. //                                outdatabuff[9]=lux_out[0]%256;
  130. //                                outdatabuff[10]=(lux_out[1]/256)%256;
  131. //                                outdatabuff[11]=lux_out[1]%256;
  132.                                 outdatabuff[8]=(dis_data/250)%250;
  133.                                 outdatabuff[9]=dis_data%250;
  134.                                 //outdatabuff[10]=(lux_out[1]/256)%256;
  135.                                 //outdatabuff[11]=lux_out[1]%256;
  136.                                 LED1=!LED1;
  137.                                 for( Mm=0;Mm<13;Mm++)
  138.                                 {
  139.                                         USART1->DR=outdatabuff[Mm];
  140.                                         while((USART1->SR&0X40)==0);//等待发送结束
  141.                                 }       
  142.                                
  143.                                
  144.                         }               
  145.                         else
  146.                         {
  147.                         //        LED0=1;
  148.                         }
  149.                         timerProcess=0;
  150.                 }
  151.                 if(receiveM)
  152.                 {
  153.                        
  154.                         receiveM=0;
  155.                 }

  156.                
  157.         }       
  158. }

复制代码

所有资料51hei提供下载:
STM32F103C8_ZNYJC_GY30.zip (394.17 KB, 下载次数: 118)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:314648 发表于 2018-4-23 20:11 | 只看该作者
好厉害
回复

使用道具 举报

板凳
ID:314648 发表于 2018-4-24 09:29 | 只看该作者
大神,我想问一下,网页与底层程序的接口在哪。比如说我新增一个光敏模块,怎么在网页上显示出来?
回复

使用道具 举报

地板
ID:18591 发表于 2019-1-20 20:57 | 只看该作者

下载学习,谢谢分享
回复

使用道具 举报

5#
ID:262587 发表于 2019-1-31 21:09 | 只看该作者
楼主,这个好像只有单片机节点的程序,有没有主机节点的程序(上位机程序)?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表