基于RT-Thread的AT device实现ESP8266 通过socket对接OneNET进行POST和GET

时间:2024-04-12 10:00:02

前言

基于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连接热点。
基于RT-Thread的AT device实现ESP8266 通过socket对接OneNET进行POST和GET

2、连接OneNET

连接的服务器地址和端口为:183.230.40.3380

在连接之前,可以使用at_ping命令来ping一下这个地址:
基于RT-Thread的AT device实现ESP8266 通过socket对接OneNET进行POST和GET
ping通说明联网正常和IP地址无误,就可以连接OneNET了,可以先输入esp8266查看命令:
基于RT-Thread的AT device实现ESP8266 通过socket对接OneNET进行POST和GET
输入esp8266 connect连接OneNET HTTP服务器:
基于RT-Thread的AT device实现ESP8266 通过socket对接OneNET进行POST和GET

3、POST数据流到OneNET

在连接上OneNET之后,输入esp8266 post就可以POST数据流到OneNET:
基于RT-Thread的AT device实现ESP8266 通过socket对接OneNET进行POST和GET
(1)如果POST成功,在OneNET可以看到如下数据:
基于RT-Thread的AT device实现ESP8266 通过socket对接OneNET进行POST和GET
(2)如果POST失败,例如:
基于RT-Thread的AT device实现ESP8266 通过socket对接OneNET进行POST和GET
那是因为OneNET HTTP是短连接,在前面connect上之后,如果隔了一段时间没进行数据交互就会主动端口断开连接,这时候我们可以先输入esp8266 close断开连接,再esp8266 connect,然后重新esp8266 post
基于RT-Thread的AT device实现ESP8266 通过socket对接OneNET进行POST和GET

4、从OneNET GET数据流

(1)如果GET数据流成功,会得到数据流名称和数据大小,例如light的大小是432.5
基于RT-Thread的AT device实现ESP8266 通过socket对接OneNET进行POST和GET(2)如果GET失败,原因也是因为OneNET HTTP是短连接,解决方法和前面类似:
基于RT-Thread的AT device实现ESP8266 通过socket对接OneNET进行POST和GET

5、断开socket连接:

基于RT-Thread的AT device实现ESP8266 通过socket对接OneNET进行POST和GET

三、代码移植说明

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"

四、注意事项

打开工程打开这个:
基于RT-Thread的AT device实现ESP8266 通过socket对接OneNET进行POST和GET