基于無線網絡的環境監測系統
0.jpg (43.31 KB, 下載次數: 89)
下載附件
2018-4-20 16:35 上傳
系統主要包括了數據采集節點和環境管理計算機。采用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 | 幀尾 |
|
|
單片機源程序如下:
- #include "led.h"
- #include "delay.h"
- #include "sys.h"
- #include "key.h"
- #include "usart.h"
- #include "lcd.h"
- #include "spi.h"
- #include "flash.h"
- //#include "ds18b20.h"
- #include "timer.h"
- //#include"tls2561.h"
- #include "BH1750.h"
- #include"myiic.h"
- #include "DTH11.h"
-
- extern unsigned int timercount;
- extern u8 timerProcess ;
- extern u8 receiveM;
-
- uint lux_out[2];
- uint (*lux)[2] ;
- int main(void)
- {
- int dis_data=0;
- u8 Mm=0;
- u8 temperature=0;
- u8 humidity=0;
- uchar datao=0;
- //u8 outdatabuff[13]={0xFE, 0x0A, 0x90, 0x91, 0x65,0x12 ,0x00,0x00,0,0,0,0,0xFF} ;
- u8 outdatabuff[13]={0xFE, 0x0A, 0x90, 0x91, 0x16,0x0D ,0x00,0x00,0,0,0,0,0xFF} ;
- // u8 outdatabuff[13]={0xFE, 0x0A, 0x90, 0x91, 0x65,0x12 ,0x00,0x00,0,0,0,0,0xFF} ;
- // short temp;
- lux_out[0]=lux_out[1]=65535;
- SystemInit(); //系統時鐘設置
- delay_init(72); //延時初始化
- NVIC_Configuration();
- uart_init(115200);//串口1初始化
- LED_Init();//LED初始化
- // LCD_Init();//初始化液晶
- Timerx_Init(5000,7199);//10Khz的計數頻率,計數到5000為500ms
- IIC_Init();
- delay_ms(5);
- // POINT_COLOR=RED;//設置字體為紅色
- //LCD_ShowString(60,50,"Mini STM32");
- //LCD_ShowString(60,70,"DS18B20 TEST");
- //LCD_ShowString(60,90,"ATOM@ALIENTEK");
- //LCD_ShowString(60,110,"2011/1/1");
- //while(DS18B20_Init())//初始化DS18B20,兼檢測18B20
- //{
- //LCD_ShowString(60,130,"DS18B20 Check Failed!");
- //delay_ms(500);
- //LCD_ShowString(60,130,"Please Check! ");
- //delay_ms(500);
- // LED0=!LED0;//DS0閃爍
- //}
- // LCD_ShowString(60,130,"DS18B20 Ready! ");
- // POINT_COLOR=BLUE;//設置字體為藍色
- // LCD_ShowString(60,150, "Temperate: . C");
- LED1=0;
- while(DHT11_Init()) //DHT11初始化
- {
-
- delay_ms(100);
- LED0=!LED0;
- Mm++;
- if(Mm>10) break;
-
- }
- Mm=0;
- // TSL2561_Write(CONTROL,0x03); //設置TSL2561未開啟狀態
- Init_BH1750(); //初始化BH1750
- delay_ms(200);
- Single_Write_BH1750(0x01); // power on
- // while(datao!=0x03)
- // {
- //
- // datao=TSL2561_Read(CONTROL);
- // delay_ms(200);
- // LED0=!LED0;
- // Mm++;
- // if(Mm>5) break;
- // }
- Mm=0;
- // printf("TSL2561 Inial Success!\n");
- // printf("%d\n",TSL2561_Read(CONTROL));
- lux=(uint(*)[2])malloc(2*sizeof(uint));
- if(!lux)
- {
- // printf("malloc failed!/n");
- }
- while(1)
- {
-
- if(timerProcess)
- {
- if(timercount%5==0)
- {
- // lux=Read_Light(); //讀取光強
- // lux_out[0]=(*lux)[0];
- // lux_out[1]=(*lux)[1];
- // // printf("Temp:%dHUM:%dGQ:%d,%d\n",temperature,humidity,(*lux)[0],(*lux)[1]);
- // free(lux);
-
- }
-
- if(timercount%10==0)
- {
- // LED0=0;
- //DHT11_Read_Data(&temperature,&humidity); //讀取溫濕度值
-
- //LED0=0;
- DHT11_Read_Data(&temperature,&humidity); //讀取溫濕度值
- // lux=Read_Light(); //讀取光強
- // lux_out[0]=(*lux)[0];
- // lux_out[1]=(*lux)[1];
- // free(lux);
- // Single_Write_BH1750(0x01); // power on
- Single_Write_BH1750(0x11); // H- resolution mode
- // Delay_mms(800); //延時180ms
- delay_ms(800);
- mread(); //連續讀出數據,存儲在BUF中
- dis_data=BUF[0];
- dis_data=(dis_data<<8)+BUF[1]; //合成數據
- // printf("Temp:%dHUM:%dGQ:%d,%d\n",temperature,humidity,lux_out[0],lux_out[1]);
- if(temperature>100)temperature=100;
- if(humidity>100)humidity=100;
- outdatabuff[6]=temperature+50;
- outdatabuff[7]=humidity;
- // outdatabuff[8]=(lux_out[0]/256)%256;
- // outdatabuff[9]=lux_out[0]%256;
- // outdatabuff[10]=(lux_out[1]/256)%256;
- // outdatabuff[11]=lux_out[1]%256;
- outdatabuff[8]=(dis_data/250)%250;
- outdatabuff[9]=dis_data%250;
- //outdatabuff[10]=(lux_out[1]/256)%256;
- //outdatabuff[11]=lux_out[1]%256;
- LED1=!LED1;
- for( Mm=0;Mm<13;Mm++)
- {
- USART1->DR=outdatabuff[Mm];
- while((USART1->SR&0X40)==0);//等待發送結束
- }
-
-
- }
- else
- {
- // LED0=1;
- }
- timerProcess=0;
- }
- if(receiveM)
- {
-
- receiveM=0;
- }
-
- }
- }
復制代碼
所有資料51hei提供下載:
STM32F103C8_ZNYJC_GY30.zip
(394.17 KB, 下載次數: 118)
2018-4-20 11:11 上傳
點擊文件名下載附件
單片機節點源碼 下載積分: 黑幣 -5
|