这篇文章是讲解esp8266使用AT指令连接腾讯云物联网平台的一些大致内容。
一般连接连接云平台都是使用MQTT协议,以下是MQTT协议的特点:
MQTT(Message Queuing Telemetry Transport)是一种轻量级的通信协议,用于在物联网和低带宽、高延迟或不稳定网络环境下进行传输。它被设计用于传输小型数据包,并且具有低能耗、低带宽占用和可靠性的特点。
MQTT协议基于发布-订阅模式,其中有两个角色:消息发布者和消息订阅者。发布者负责将消息发送到经纪人(Broker),而订阅者则通过订阅特定主题(Topic)来接收感兴趣的消息。
MQTT协议的核心思想是实现高效、可靠的消息传输。它采用了精简的消息头和二进制编码,使得传输的数据量很小,减少了网络带宽的占用。同时,MQTT支持消息的持久化和传输的可靠性保证,确保消息能够可靠地到达目标设备。
MQTT广泛应用于物联网、传感器网络和移动应用等场景,特别适用于资源受限的设备和网络环境。它提供了一种简单、可靠、灵活的通信方式,使得设备之间可以方便地进行数据交换和远程控制。
1.注册+登录腾讯云
2.进入控制台
点击产品->点击物联网->点击物联网开发平台
3.创建项目
1.新建项目
2.新建产品
3.产品配置
在自定义功能下选择新建自定义功能
设备开发和交互开发有需要的可以自行设置,我这里直接点击设备调试,然后点击新建设备,自己随便命个名。
4.设备调试
查看连接平台所需要的信息
4.下载腾讯云固件
在安信可官网下载并且烧录好腾讯云的固件。
5.串口助手调试
提供一个野火的多功能调试助手:
链接:https://pan.baidu.com/s/1Xsk3fW3BC1NiS0JBg-Ifpg
提取码:dd11
USB转串口与esp8266的连线:
3.3v连接vcc GND连接GND RX连接TX TX连接RX
1.AT指令测试
AT //测试是否启动 //1
AT+RST //重启复位
AT+TCMODULE //查看模块的软硬件信息
AT+GMR //查看版本信息
AT+CIFSR //查询连接信息
AT+CWMODE? //查询当前模式
AT+CWMODE=1 //设置为STA模式 //2
AT+CWJAP="xxs","123456789" //输入路由ssid和密码 3
AT+PING="baidu.com"
AT+TCDEVINFOSET=1,"产品ID","设备名称","密钥" 设置三元组//4
AT+TCMQTTCONN=1,5000,240,1,0 设置连接方式和连接时间//5
AT+TCMQTTSTATE? 获取mqtt的连接状态
AT+TCMQTTDISCONN 断开腾讯云连接
AT+TCMQTTSTATE? 查看客户端连接状态
AT+TCMQTTPUB="$thing/up/property/产品ID/设备名称",0,"{ \"method\": \"report\"\, \"clientToken\": \"clientToken-_fQtJii9W\"\, \"params\": { \"temp\": 50} }" 发布//6
AT+TCMQTTSUB="$thing/down/property/产品ID/设备名称",0 //订阅7
AT+TCMQTTUNSUB="$thing/down/property/产品ID/设备名称" //取消订阅主题//8
一般连接腾讯云只需要我在后面输入序号的AT指令(要注意点击发送新行按钮,且AT指令后面不能有空格,不然会导致返回错误)
到第五步我们就可以看到设备在线了
到第6步数据上发
这样我们可以在腾讯云看到数据更新了
到第7步数据下发,在腾讯云的设备调试下发指令
我们可以看到串口助手返回另一段json数据,至于数据的含义,请看腾讯端开发指南
我们也可以使用腾讯连连APP来查看数据,点击设备调试,点击二维码,使用腾讯连连小程序扫一扫
同时只要设备在线,用腾讯连连也可以实现数据的下发
6.STM32与云平台通信
#include "tcp.h"
#include "usart.h"
#include "esp8266.h"
#include "delay.h"
#include "key.h"
#include "stdio.h"
#include "string.h"
#include "stm32f10x.h"
#include "led.h"
volatile u8 TcpClosedFlag = 0;
void Tencent_AT(void)
{
uint8_t key=0;
ESP8266_Get_LinkStatus();
ESP8266_Get_MqttStatus();
while(ESP8266_Scan())
{
key=KEY_Scan(0); //得到键值
if(key)
{
switch(key)
{
case WKUP_PRES: //进入配网模式
//LED_ON();
ESP8266_Net_Mode_Choose(STA);
ESP8266_JoinAP(Direct_Connection);//这里使用了直连的方式,方便做调试,如需一键配网或者AP配网请自行更改参数值
break;
case KEY0_PRES:
ESP8266_restore();
break;
case KEY1_PRES:
break;
}
}
else
delay_ms(10);
};//配网步骤
ESP8266_Set_Device_Information();
ESP8266_Configure_MQTT_Connection_Parameters();
while(ESP8266_Scan1())
{
ESP8266_Subscribe_To_MQTT_Topic_Information();
};
}
oid ESP8266_restore(void)//发送恢复出厂默认指令初始化模块,清除WIFI模块的配网信息
{
ESP8266_Send_AT_Cmd("AT+RESTORE",1000);
}
void ESP8266_Disconnect_Ap(void)//断开与路由器的连接
{
ESP8266_Send_AT_Cmd("AT+CWQAP",1000);
}
void ESP8266_Disconnect_MQTT(void)//断开腾讯云连接
{
ESP8266_Send_AT_Cmd("AT+TCMQTTDISCONN",1000);
}
void ESP8266_Net_Mode_Choose(ENUM_Net_ModeTypeDef enumMode)//设置WIFI模式
{
switch ( enumMode )
{
case STA:
ESP8266_Send_AT_Cmd ( "AT+CWMODE=1", 2500 );
break;
case AP:
ESP8266_Send_AT_Cmd ( "AT+CWMODE=2", 2500 );
break;
case STA_AP:
ESP8266_Send_AT_Cmd ( "AT+CWMODE=3", 2500 );
break;
default:
break;
}
}
void ESP8266_JoinAP(Distribution_method method)//设置WIFI配网方式
{
char cCmd[50];
switch ( method )
{
case Direct_Connection://直连路由
sprintf ( cCmd, "AT+CWJAP=\"%s\",\"%s\"", STA_ssid, STA_passwd );
ESP8266_Send_AT_Cmd ( cCmd, 3000 );
break;
case SmartConfig://一键配网
ESP8266_Send_AT_Cmd ( "AT+TCSTARTSMART", 1000 );
break;
case SoftAP://AP配网
sprintf ( cCmd, "AT+TCSAP=\"%s\",\"%s\"", AP_ssid, AP_passwd );
ESP8266_Send_AT_Cmd ( cCmd, 1000 );
break;
default:
break;
}
}
uint8_t ESP8266_Get_LinkStatus(void)//获取联网状态
{
if(ESP8266_Send_AT_Cmd("AT+CIPSTATUS",500))
{
if(strstr(ESP8266_Fram_Record_Struct .Data_RX_BUF, "STATUS:2\r\n" ))
return 2;
else if ( strstr ( ESP8266_Fram_Record_Struct .Data_RX_BUF, "STATUS:3\r\n" ) )
return 3;
else if ( strstr ( ESP8266_Fram_Record_Struct .Data_RX_BUF, "STATUS:4\r\n" ) )
return 4;
else if ( strstr ( ESP8266_Fram_Record_Struct .Data_RX_BUF, "STATUS:5\r\n" ) )
return 5;
}
return 0;
}
uint8_t ESP8266_Get_MqttStatus(void)//获取MQTT连接状态
{
if(ESP8266_Send_AT_Cmd("AT+TCMQTTSTATE?",500))
{
if(strstr(ESP8266_Fram_Record_Struct .Data_RX_BUF, "+TCMQTTSTATE:1\r\n" ))
return 1;
}
return 0;
}
bool ESP8266_Set_Device_Information(void)//设置平台设备信息
{
char cCmd[120];
sprintf ( cCmd, "AT+TCDEVINFOSET=1,\"%s\",\"%s\",\"%s\"", ProductID, DeviceName, Devicesecret_Checksum );
return ESP8266_Send_AT_Cmd ( cCmd, 1000 );
}
bool ESP8266_Configure_MQTT_Connection_Parameters(void)//配置MQTT连接参数
{
return ESP8266_Send_AT_Cmd ( "AT+TCMQTTCONN=1,5000,240,1,0", 1000 );
}
bool ESP8266_Subscribe_To_MQTT_Topic_Information(void)//订阅MQTT主题信息
{
char cCmd[120];
sprintf ( cCmd, "AT+TCMQTTSUB=\"$thing/down/property/%s/%s\",0",ProductID,DeviceName );
return ESP8266_Send_AT_Cmd ( cCmd, 1000 );
}
bool ESP8266_Post_MQTT_Topic_Information(void)//发布MQTT主题信息
{
char cCmd[120];
sprintf ( cCmd, "AT+TCMQTTPUB =\"$thing/up/property/%s/%s\",0,\"%s\"",ProductID,DeviceName,data );
return ESP8266_Send_AT_Cmd ( cCmd, 1000 );
}
示例代码如下:
链接:https://pan.baidu.com/s/1m9YXi_bcpabUTNXPIdLX6A
提取码:dd11