本文介绍的主要是跟腾讯云的连接。
一、ESP8266烧录固件
1、AT指令开发
就是把ESP8266当作一个WIFI模块来使用。使用AT指令开发离不开固件包,使用不同的物联网平台需要烧录不同的固件包,这里使用串口进行烧录。
2、硬件准备
由于腾讯云的固件包需要2M以上的flash,而ESP8266-01系列只有1M,所以只能使用ESP8266-12系列或者ESP8266-07系列。
3、软件准备
腾讯云AT固件下载地址
AT串口使用UART0,默认的Tx为GPIO1,Rx为GPIO3,但烧录了在官网下载的腾讯云固件之后,用于通信的串口会被修改为UART1,即GPIO13和GPIO15。安信可提供了两个版本,下载地址:https://axk.coding.net/s/296d525b-cd31-427e-9d4c-ec3dca5a3d43,一般选择1_3的版本。
MQTT透传AT固件下载地址
Flash烧录工具
烧录界面:
二、腾讯云-物联网开发平台 IoT Explorer
1、新建产品与设备
物联网开发平台界面:点击产品控制台。
新建项目:
点击刚刚新建的项目,在项目下新建一个产品,各选项默认就行了。
点击新建的产品,直接来到设备调试页面,点击新建设备。
2、设备信息
点击新建好的设备,即可看到该设备的一系列信息,有三个有用的元素:产品ID、设备名称、设备密钥,称为三元素,ESP8266需要通过这三元素来连接到云端设备。
3、物模型
回到最开始的物模型页面,在这里可以为产品添加功能。
4、交互开发
配置完基本功能后,这一步需要为设备配置一个手机端的操作界面,这里需要切换到交互开发页面。
一般只需要配置前三个选项。
三、终端操作
可使用安信可提供的测试工具:IoTDev Tool
ESP8266需要使用到的指令:
1、连接WIFI
- AT+CWMODE=1:设置客户端模式
- AT+CWJAP=”WIFI名称”,”WIFI密码”:连接上WIFI
2、连接物联网设备
- AT+TCDEVINFOSET=1,”产品ID”,”设备名称”,”设备密钥”:设置平台信息,三元素
- AT+TCMQTTCONN=1,5000,240,1,1:配置连接服务器参数
- AT+TCMQTTDISCONN:断开服务器连接
3、订阅主题
物联网平台的主题格式为**$thing/down/property/{ProductID}/{DeviceName},**其中ProductID是产品ID,DeviceName是设备名称。
- AT+TCMQTTSUB=”主题”,0:订阅主题
- AT+TCMQTTUNSUB=”主题”:取消订阅主题
4、发布主题
物联网平台的主题格式为**$thing/up/property/{ProductID}/{DeviceName},**其中ProductID是产品ID,DeviceName是设备名称。
- AT+TCMQTTPUB=”主题”,0,”数据”:发布主题
四、JSON数据处理
1、分离出Topic和JSON数据
腾讯云下发的数据打印之后的数据:
代码如下:
/***********************************************
* @brief : ESP8266分离出Topic和CJSON
* @param : void
* @return: sub_data:分离出来的数据的地址
* @date : 2023.11.17
* @author: L
************************************************/
uint8_t *Eep8266GetData(void)
{
char* sub_ptr = NULL;
char* sub_data = NULL;
uint8_t i = 0;
sub_ptr = strstr((const char*)esp8266_buff,"$thing/down/property");//查找关键词
if(sub_ptr != NULL)
while(*sub_ptr++ != '\\"');//指针指向数据开始的地方
sub_ptr = strstr((const char*)esp8266_buff,"\\"method\\":\\"control\\"");//查找关键词
if(sub_ptr != NULL)
{
while(*sub_ptr != '}')//将整数据赋给sub_data
*(sub_data + i++) = *sub_ptr++;
*(sub_data + i) = '}';//结尾补上一个大括号
return ((uint8_t*)sub_data);//返回数据的地址
}
return NULL;
}
2、JSON数据处理
处理CJSON数据,可以去下载CJSON的库,只需要使用到cJSON.c和cJSON.h两个文件,下载连接:
JSON解析数据代码如下:
/***********************************************
* @brief : ESP8266分离出Topic和CJSON
* @param : sub_data:从下发的信息中分离出来的数据
* @return: 参数的值的地址
* @date : 2023.11.17
* @author: L
************************************************/
char* CjsonGetData(uint8_t* sub_data)
{
if(sub_data != NULL)
{
cJSON* cjson_temp = cJSON_Parse((const char*)sub_data);//新建一个CJSON对象,存储下发的所有数据
cJSON* cjson_params = cJSON_GetObjectItem(cjson_temp,"params");//params中也是一个CJSON的对象,取出这一部分
cJSON_Delete(cjson_temp);//已经不需要用到cjson_temp,删除对象
cJSON* cjson_data = cJSON_GetObjectItem(cjson_params,"dir");//找出需要的参数
cJSON_Delete(cjson_temp);//已经不需要用到cjson_params,删除对象
char* str = cjson_data->valuestring;//取出需要的值
cJSON_Delete(cjson_data);//删除对象
return str;//返回参数中的值
}
return NULL;
}