基于OneNet平臺(tái)的傳感器監(jiān)測(cè)使用說明(以dht11為例)
1. 將電話卡(SIM900A使用的是標(biāo)準(zhǔn)SIM卡,SIM800C使用的是micro-SIM卡,這里的“卡”指的是聯(lián)通、移動(dòng)卡,電信卡不支持)插入GPRS模塊后,上點(diǎn)啟動(dòng),會(huì)出現(xiàn)以下畫面,提示正在初始化連接,確保已退出其它連接
圖片1.png (128.78 KB, 下載次數(shù): 135)
下載附件
2018-11-9 00:45 上傳
2.連接OneNet平臺(tái),會(huì)出現(xiàn)以下畫面,表明正在連接Onenet平臺(tái)
圖片2.png (970.75 KB, 下載次數(shù): 114)
下載附件
2018-11-9 00:46 上傳
3.如果Onenet連接成功,LCD1602顯示屏上會(huì)顯示“Onenet Is Ready”,但是正常情況下“Onenet Is Ready”字樣會(huì)一閃而過,被后面的“Data Is Ready”很快覆蓋,所以如果長(zhǎng)期卡在”O(jiān)nenet Is Ready”表明傳感器的數(shù)據(jù)讀取出現(xiàn)了問題,請(qǐng)檢查傳感器是否完好。因此正常情況下,我們會(huì)看到以下畫面
圖片3.png (847.3 KB, 下載次數(shù): 114)
下載附件
2018-11-9 00:46 上傳
4.緊接著我們會(huì)看到上傳的進(jìn)度條顯示,像這樣(我共分為7步來標(biāo)識(shí)上傳進(jìn)度,具體每步所做工作參照代碼)
圖片4.png (626.65 KB, 下載次數(shù): 108)
下載附件
2018-11-9 00:46 上傳
圖片5.png (593.79 KB, 下載次數(shù): 110)
下載附件
2018-11-9 00:46 上傳
圖片6.png (747.15 KB, 下載次數(shù): 118)
下載附件
2018-11-9 00:46 上傳
出現(xiàn)“7 of 7”表明我們的數(shù)據(jù)上傳工作完成,我們將進(jìn)入下一步 5.判斷數(shù)據(jù)上傳是否成功,如果數(shù)據(jù)上傳成功,會(huì)出現(xiàn)“SEND OK”,如果上傳失敗,會(huì)出現(xiàn)“SEND FAIL”。當(dāng)然,上傳結(jié)果的判斷不能保證完全準(zhǔn)確,但是經(jīng)過測(cè)試在大多數(shù)情況下是準(zhǔn)確的,因?yàn)楦W(wǎng)絡(luò)情況有關(guān),有時(shí)不能成功檢測(cè)到成功的標(biāo)志。(就像原本有檢測(cè)是否連上網(wǎng)絡(luò)功能的,但是檢測(cè)太耗時(shí),故后面刪除了相關(guān)代碼) 6.最后,LCD1602會(huì)顯示本次上傳的傳感器數(shù)據(jù)值,像下圖
圖片7.png (773.79 KB, 下載次數(shù): 112)
下載附件
2018-11-9 00:46 上傳
以上就是基于OneNet平臺(tái)的傳感器監(jiān)測(cè)使用說明,以DHT11溫濕度傳感器為例,其它的操作方法類似 代碼: - //C庫(kù)
- #include <reg52.h>
- #include <stdio.h>
- #include <string.h>
- //硬件驅(qū)動(dòng)
- #include "lcd.h" //lcd1602
- #include "dht11.h" //dht11溫濕度傳感器
- //#define FOSC_110592M //看你使用的晶振是什么,選擇啟用的宏定義
- #define FOSC_12M
- #define DEVID "25336321"
- #define APIKEY "v5lJaPvQHj=qjBUSYmGOVnA5TX8="
- //以下用于保存單片機(jī)收到模塊發(fā)來的AT指令,通過這些指令單片機(jī)可以判斷模塊的狀態(tài)
- uchar GsmRcv[50] = {0};
- uchar GsmRcvAt[50] = {0};
- uchar GsmRcvCnt = 0;
- uchar GsmAtFlag = 0;
- Sensor_Structure Sensor_Data;
- void SerialInti()//串口初始化程序
- {
- TMOD=0x20;//定時(shí)器1操作模式2:8位自動(dòng)重載定時(shí)器
- #ifdef FOSC_12M //在這里根據(jù)晶振大小設(shè)置不同的數(shù)值初始化串口,
- //如果用的12M晶振的話裝下面兩種值都可以,但
- //個(gè)人推薦用6250,能有效減小誤碼率,保證對(duì)GPRS模塊返回信息的準(zhǔn)確判斷
- TH1=0xfb;//裝入初值,波特率6250
- TL1=0xfb;
- // TH1=0xf3;//裝入初值,波特率2400
- // TL1=0xf3;
- #else
- TH1=0xfd;//裝入初值,波特率9600
- TL1=0xfd;
- #endif //
-
- TR1=1;//打開定時(shí)器
- SM0=0;//設(shè)置串行通訊工作模式
- SM1=1;//(同上)在此模式下,定時(shí)器溢出一次就發(fā)送一個(gè)位的數(shù)據(jù)
- REN=1;//串行接收允許位(要先設(shè)置sm0sm1再開串行允許)
- EA=1;//開總中斷
- ES=1;//開串行口中斷
- }
- /*串行通訊中斷,收發(fā)完成將進(jìn)入該中斷*/
- void Serial_interrupt() interrupt 4
- {
- uchar i = 0;
- if(RI == 1) //收到信息
- {
- RI=0;//接收中斷信號(hào)清零,表示將繼續(xù)接收
-
- GsmRcv[GsmRcvCnt] = SBUF;
- GsmRcvCnt++;
- //收到了完整的AT指令,完整的AT指令是以0x0d 0x0a結(jié)尾的。故作此判斷,在接收的過程中是否收到0x0d 0x0a
- if(GsmRcv[GsmRcvCnt-2] == 0x0d && GsmRcv[GsmRcvCnt-1] == 0x0a && GsmRcvCnt >= 4)
- {
- //一旦收到0x0d 0x0a,就將數(shù)據(jù)保存起來。用戶主函數(shù)的判斷。
- for(i=0; i<GsmRcvCnt; i++)
- {
- GsmRcvAt[i] = GsmRcv[i];
- GsmRcv[i] = 0;
- }
- GsmRcvCnt = 0;
- GsmAtFlag = 1;//收到了完整的at指令,通過這個(gè)標(biāo)志位置1,這樣主函數(shù)就知道去判斷了。
-
- }
- else if(GsmRcvCnt >= 50)//因?yàn)閮?nèi)存有限,收到了50個(gè)字符還是沒有看到0x0a 0x0d的話,就重新開始接收吧。
- {
- GsmRcvCnt = 0;
- }
-
- }
- }
- void Uart1Send(uchar c)
- {
- SBUF=c;
- while(!TI);//等待發(fā)送完成信號(hào)(TI=1)出現(xiàn)
- TI=0;
- }
- //串行口連續(xù)發(fā)送char型數(shù)組,遇到終止號(hào)/0將停止
- void Uart1Sends(uchar *str)
- {
- while(*str!='\0')
- {
- SBUF=*str;
- while(!TI);//等待發(fā)送完成信號(hào)(TI=1)出現(xiàn)
- TI=0;
- str++;
- }
- }
- //延時(shí)函數(shù)大概是1s鐘,不過延時(shí)大的話不準(zhǔn)...
- void DelaySec(int sec)
- {
- uint i , j= 0;
- for(i=0; i<sec; i++)
- {
- for(j=0; j<65535; j++)
- {
- }
- }
- }
- //判斷是否上傳成功
- void OneNet_RevPro(unsigned char *GsmRcvAt)
- {
- if(strstr((char *)GsmRcvAt, "CLOSED"))
- {
- LcdWriteString("TCP CLOSED",strlen("TCP CLOSED"),0x80+0x40,0);
- }
- else
- {
- //這里用來檢測(cè)是否發(fā)送成功
- if(strstr((char *)GsmRcvAt, "succ"))
- {
- LcdWriteString("SEND OK",strlen("SEND OK"),0x80+0x40,0);
- }
- else
- {
- LcdWriteString("SEND FAIL",strlen("SEND FAIL"),0x80+0x40,0);
- }
- }
- }
- void main()
- {
- uchar i = 0;
- char xdata text[28];
- char xdata buf1[60];
- SerialInti(); //串口初始化
- LcdInit(); //LCD1602初始化
-
- GsmAtFlag = 0;
- while(GsmAtFlag == 0) //確保波特率同步良好
- {
- Uart1Sends("ATI\r\n");
- DelaySec(1);//延時(shí)1秒
- }
- GsmAtFlag = 0;
- while(1)
- {
- LcdWriteString("Init Connection",strlen("Init Connection"),0x80,1);
- Uart1Sends("AT+CIPCLOSE\r\n");
- DelaySec(1);
- Uart1Sends("AT+CIPSHUT\r\n");
- DelaySec(1);
- LcdWriteString("Connect Onenet",strlen("Connect Onenet"),0x80,1);
- Uart1Sends("AT+CLPORT=\"TCP\",\"2000\"\r\n");//發(fā)送指令指定本地端口
- DelaySec(1);
- Uart1Sends("AT+CIPSTART=\"TCP\",\"183.230.40.33\",\"80\"\r\n");//此處修改你建立服務(wù)器的IP,服務(wù)器端口號(hào)8080
- DelaySec(2);
- if(GsmAtFlag == 1 && strstr(GsmRcvAt, "CONNECT OK") )//檢測(cè)是否收到 CONNECT OK ,如果這連接成功
- {
- LcdWriteString("Onenet Is Ready",strlen("Onenet Is Ready"),0x80,1);
- Sensor_Data=DHT11_receive();
- LcdWriteString("Data Is Ready",strlen("Data Is Ready"),0x80,1);
- Uart1Sends("AT+CIPSEND\r\n");
- DelaySec(1);
- LcdWriteString("Start Upload",strlen("Start Upload"),0x80,1);
- memset(buf1, 0, sizeof(buf1));
- LcdWriteString("Schedule:",strlen("Schedule:"),0x80,1);
- sprintf(buf1,"POST /devices/%s/datapoints?type=3 HTTP/1.1\r\n",DEVID);
- LcdWriteString("1 of 7",strlen("1 of 7"),0x80+0x40,0);
- Uart1Sends(buf1);//向服務(wù)器發(fā)送數(shù)據(jù)
- DelaySec(1);
- memset(buf1, 0, sizeof(buf1));
- sprintf(buf1,"api-key:%s\r\n",APIKEY);
- LcdWriteString("2 of 7",strlen("2 of 7"),0x80+0x40,0);
- Uart1Sends(buf1);
- DelaySec(1);
- LcdWriteString("3 of 7",strlen("3 of 7"),0x80+0x40,0);
- Uart1Sends("Host:api.heclouds.com\r\n");
- DelaySec(1);
- memset(text, 0, sizeof(text));
- memset(buf1, 0, sizeof(buf1));
- strcpy(buf1, "{");
- memset(text, 0, sizeof(text));
- sprintf(text, "\"Temperature\":%f,",Sensor_Data.temp_l*0.01+Sensor_Data.temp_h);
- strcat(buf1, text);
- memset(text, 0, sizeof(text));
- sprintf(text, "\"Humidity\":%f",Sensor_Data.humi_l*0.01+Sensor_Data.humi_h);
- strcat(buf1, text);
- strcat(buf1, "}");
- memset(text, 0, sizeof(text));
- sprintf(text,"Content-Length:%d\r\n",strlen(buf1));
- LcdWriteString("4 of 7",strlen("4 of 7"),0x80+0x40,0);
- Uart1Sends(text);
- LcdWriteString("5 of 7",strlen("5 of 7"),0x80+0x40,0);
- Uart1Sends("\r\n");
- DelaySec(1);
- LcdWriteString("6 of 7",strlen("6 of 7"),0x80+0x40,0);
- Uart1Sends(buf1);
- DelaySec(1);
- LcdWriteString("7 of 7",strlen("7 of 7"),0x80+0x40,0);
- Uart1Send(0x1a);//以0x1a結(jié)束
- DelaySec(1);
- LcdWriteString("Upload Result:",strlen("Upload Result:"),0x80,1);
- while(GsmAtFlag==0);
- OneNet_RevPro(GsmRcv);
- DelaySec(6);
- }
-
- }
- }
復(fù)制代碼
0.png (45.57 KB, 下載次數(shù): 114)
下載附件
2018-11-9 01:07 上傳
全部資料51hei下載地址:
GSM +DHT11.zip
(88.47 KB, 下載次數(shù): 200)
2018-11-9 00:49 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|