前言
基於RT-Thead,讓ESP8266能實現socket,下面只是簡單的應用,做了HTTP的POST和GET,socket接口已經寫好,讀者如果有興趣也可以基於此代碼實現MQTT和EDP等其他協議的應用,代碼放在GitHub,後面有工程代碼鏈接。
一、介紹
1、實現功能
通過esp8266 WiFi模塊對接OneNET,使用OneNET的HTTP協議,基於RT-Thread的AT device軟件包,實現POST數據流到OneNET雲平臺和從OneNET雲平臺GET數據流,使用Finsh/MSH測試命令進行測試。
2、軟硬件平臺
(1)STM32F103RET6、外部12M晶振
(2)ESP8266 WiFi模塊
(3)BH1750光照強度傳感器
(4)OneNET雲平臺
(5)RT-Thread物聯網操作系統
(6)RT-Thread AT device軟件包
二、Finsh/MSH測試命令說明
1、開機初始化
開機打印如下信息,可以看到初始化了socket組件、AT client組件(使用uart3)、ESP8266 WIFI連接熱點。
2、連接OneNET
連接的服務器地址和端口爲:183.230.40.33
,80
。
在連接之前,可以使用at_ping命令來ping一下這個地址:
ping通說明聯網正常和IP地址無誤,就可以連接OneNET了,可以先輸入esp8266
查看命令:
輸入esp8266 connect
連接OneNET HTTP服務器:
3、POST數據流到OneNET
在連接上OneNET之後,輸入esp8266 post
就可以POST數據流到OneNET:
(1)如果POST成功,在OneNET可以看到如下數據:
(2)如果POST失敗,例如:
那是因爲OneNET HTTP是短連接,在前面connect上之後,如果隔了一段時間沒進行數據交互就會主動端口斷開連接,這時候我們可以先輸入esp8266 close
斷開連接,再esp8266 connect
,然後重新esp8266 post
:
4、從OneNET GET數據流
(1)如果GET數據流成功,會得到數據流名稱和數據大小,例如light
的大小是432.5
:
(2)如果GET失敗,原因也是因爲OneNET HTTP是短連接,解決方法和前面類似:
5、斷開socket連接:
三、代碼移植說明
1、代碼在GitHub
https://github.com/sanjaywu/RT-Thread_ESP8266_OneNET
2、AT device的移植說明
http://packages.rt-thread.org/itemDetail.html?package=at_device
3、修改WiFi熱點賬號和名稱
(1)會ENV工具的,請使用ENV工具進行修改。
(2)不會ENV工具,打開rtconfig.h
,修改兩個地方:
#define AT_DEVICE_WIFI_SSID "MYWiFi"
#define AT_DEVICE_WIFI_PASSWORD "1234567890"
4、修改設備ID、APIKEY和數據流名稱
打開onenet_sample.c
,修改這三個地方:
#define DEVICE_ID "505619290"
#define API_KEY "SlxhH3MCLvuuvXJ0N=a14Yo6EAQ="
#define DATA_STREAM "light"
5、修改ESP8266連接的UART
(1)會ENV工具的,請使用ENV工具進行修改。
(2)不會ENV工具,打開rtconfig.h
,修改這個地方:
#define AT_DEVICE_NAME "uart3"
四、注意事項
打開工程打開這個: