使用STM32和安信可ESP8266 AT指令连接腾讯云平台

这篇文章是讲解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

物联沃分享整理
物联沃-IOTWORD物联网 » 使用STM32和安信可ESP8266 AT指令连接腾讯云平台

发表评论