第一次接觸onenet平臺,所總結的不太全面,歡迎討論。首先,初始化esp8266模塊,特別提醒一下單片機使用的晶振最好是11.0952M,以減少數據誤差。本實驗波特率是設為9600。
程序在上傳的資料里,現在主要說onenet的報文封裝問題:
紅色字體的詳細內容請看上傳資料的總結,里面有講。
我使用的是第一種,以下是我寫的程序封裝:
捕獲.PNG (228.48 KB, 下載次數: 49)
下載附件
2018-6-9 17:15 上傳
最好將報文分段上傳,之前我是一堆上傳的,然后不成功,后來換了這種方式。
所有資料在上傳的文件里面,程序以及總結onenet的http協議的使用。
捕獲.PNG (17.18 KB, 下載次數: 45)
下載附件
2018-6-9 17:25 上傳
單片機源程序如下:
- #include <reg52.h>
- #include <intrins.h>
- #include "ds18b20.h"
- #define uint unsigned int
- #define uchar unsigned char
- /*******************************************************************
- 名稱:延時函數
- 作用:毫秒級延時,微妙級延時函數,為數據收發完成作等待.......
- ********************************************************************/
- void Delay20ms() //@11.0592MHz
- {
- unsigned char i, j, k;
- i = 1;
- j = 216;
- k = 35;
- do
- {
- do
- {
- while (--k);
- } while (--j);
- } while (--i);
- }
- void us_delay(uchar t)
- {
- while(t--);
- }
- void Delay_1s() //@12.000MHz
- {
- unsigned char i, j, k;
- i = 46;
- j = 153;
- k = 245;
- do
- {
- do
- {
- while (--k);
- } while (--j);
- } while (--i);
- }
- void Delay500ms() //@11.0592MHz
- {
- unsigned char i, j, k;
- i = 22;
- j = 3;
- k = 227;
- do
- {
- do
- {
- while (--k);
- } while (--j);
- } while (--i);
- }
- /********************************************************************
- 名稱:波特率發生器函數
- 作用:波特率發生器是T1定時器實現,
- ********************************************************************/
- void Uart_Init()//使用定時器1作為波特率發生器
- {
- SCON = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收
- TMOD = 0x22; // TMOD: timer 1, mode 2, 8-bit 重裝
- IP = 0X10; //將中斷優先級設置為高優先級
- TH1 = 0xfd;
- TL1 = 0Xfd; // TH1: 重裝值 9600 波特率 晶振 11.0592MHz
- TR1 = 1; // TR1: timer 1 打開
- ES = 1; //打開串口中斷
- EA = 1; //打開總中斷
- }
- /********************************************************************
- 名稱:串口發送函數
- 功能:MCU向其他與其連接的設備發送數據(此處是無線WIFI模塊ESP8266)
- ********************************************************************/
- void Send_Uart(uchar value)
- {
- ES=0; //關閉串口中斷
- TI=0; //清發送完畢中斷請求標志位
- SBUF=value; //發送
- while(TI==0); //等待發送完畢
- TI=0; //清發送完畢中斷請求標志位
- ES=1; //允許串口中斷
- }
- /********************************************************************
- 名稱:WIFI模塊設置函數
- 作用: 啟動模塊,以便可以實現無線接入和控制
- ********************************************************************/
- void Send_Str(uchar *puf) // 數組指針*puf指向字符串數組
- {
- while(*puf!='\0') //遇到空格跳出循環
- {
- Send_Uart(*puf); //向WIFI模塊發送控制指令。
- us_delay(5);
- puf++;
- }
- }
- void ESP8266_Config(void)
- {
- Send_Str("AT+CIPSTART=\"TCP\",\"183.230.40.34\",80\r\n");
- Delay500ms();
- Send_Str("AT+CIPMODE=1\r\n"); //????????,??OK/Link isbuilded,????
- Delay500ms();
- Send_Str("AT+CIPSEND\r\n"); //????,?????????????>,????????,?????20ms????,????2048??,????????++??????,??????????????????????
- Delay500ms();
- Send_Str("POST /devices/29464168/datapoints?type=3 HTTP/1.1\r\n");
- Delay20ms();
- Send_Str("api-key:wvQQgBnVNLk3zGI=Ft=4LV5hw6I=\r\n");
- Delay20ms();
- Send_Str("Host:api.heclouds.com\r\n");
- Delay20ms();
- Send_Str("Content-Length:16\r\n");
- Delay20ms();
- Send_Str("\r\n");
- Delay20ms();
- Send_Str("{\"ADC_1\":");
- Delay20ms();
- Send_Str(tempnum);//12.6 Delay20ms();
- Send_Str("}");
- Delay20ms();
- Send_Str("\r\n");
- Delay500ms();
-
- }
- /********************************************************************
- 名稱:主函數
- 作用:程序的執行入口
- ********************************************************************/
- void main()
- {
- Uart_Init();//使用獨立的波特率發生器
- Send_Str("AT+CWQAP\r\n");
- Delay_1s();
- Send_Str("AT+CWJAP=\"LUO\",\"*******luo\"\r\n");
- Delay_1s();
- Delay_1s();
- Delay_1s();
- while(1)
- {
- tempshow();
- ESP8266_Config();
- }
- }
- /*********************************************************************
- 名稱:串行通訊中斷
- ********************************************************************/
- void Uart_Interrupt() interrupt 4
- {
- if(RI)RI=0;
- if(TI)TI=0;
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
新建 360壓縮 ZIP 文件.zip
(554 KB, 下載次數: 153)
2018-6-9 17:25 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|