ESP8266 MQTT AT 指令详解与配置指南

需积分: 42 87 下载量 188 浏览量 更新于2024-09-09 2 收藏 144KB DOC 举报
"esp8266_mqtt_at指令手册" ESP8266 MQTT AT指令手册主要面向初学者,提供了关于如何使用ESP8266芯片进行MQTT通信的详细指南。ESP8266是一种经济实惠且功能强大的Wi-Fi模块,而MQTT是一种轻量级的发布/订阅消息协议,常用于物联网(IoT)设备之间的通信。 首先,要使用ESP8266进行MQTT通信,需要确保设备已经烧录了支持MQTT的固件,并连接到Wi-Fi热点。可以通过发送AT+CWJAP指令来连接热点,例如`AT+CWJAP="Honor 5C","wangllll"`,其中"Honor 5C"是热点名称,"wangllll"是密码。如果连接失败,可以使用`AT+RESTORE`指令恢复出厂设置,然后重新尝试连接。 ESP8266 MQTT AT指令基于标准的ESP8266 AT指令集,但仅专注于与MQTT相关的功能。这些指令都是大写的,以`\r\n`作为结束符,字符串参数需用双引号包围。默认波特率是9600,初始工作模式是Station模式,即ESP8266作为Wi-Fi客户端。 MQTT协议版本为3.1,若断开连接,设备将在5秒后尝试重连。不过,需要注意的是,ESP8266的MQTT AT固件不支持SSL加密,因为这将消耗大量内存,而ESP8266的内存有限。 在配置MQTT连接时,有以下几个关键的AT指令: 1. `AT+TTPORTHOST`: 用于设置MQTT服务器的端口号和地址。例如,`AT+TTPORTHOST=1883,"mqttshiyan.mqtt.iot.gz.baidubce.com"`,其中1883是MQTT的默认端口,"mqttshiyan.mqtt.iot.gz.baidubce.com"是服务器的IP地址或域名。 2. `AT+TTCLIENTID`: 用于设定设备的客户端ID,这必须是唯一的,最大长度为23个字符。例如,`AT+TTCLIENTID="MY111"`。 3. `AT+TTPASSWORD`: 设置MQTT服务器的登录密码,例如`AT+TTPASSWORD="yourpassword"`。 4. `AT+TTTOPIC`: 配置设备要订阅或发布的主题,例如`AT+TTTOPIC="mytopic"`。 5. `AT+TTQOS`: 设置质量服务(QoS)级别,这决定了消息传递的可靠性,可取0、1或2。 6. `AT+TTKEEPALIVE`: 设置心跳间隔时间,以保持与服务器的连接,如`AT+TTKEEPALIVE=60`表示每60秒发送一次心跳包。 7. `AT+TTCONNECT`: 连接到MQTT服务器,`AT+TTDISCONNECT`则断开连接。 8. `AT+TTSEND`: 发布消息到指定的主题,如`AT+TTSEND=<TOPIC>,<MESSAGE>`,<TOPIC>是主题,<MESSAGE>是消息内容。 9. `AT+TTRECEIVE`: 接收消息,通常在回调函数中处理。 由于ESP8266在MQTT AT透传模式下多用于由单片机或其他MCU控制,因此大部分查询操作建议在MCU端实现,以提高效率并减少对ESP8266资源的占用。 ESP8266 MQTT AT指令手册为开发者提供了一套完整的工具,用于配置ESP8266与MQTT服务器的连接,实现设备的无线数据传输,从而在IoT项目中发挥其潜力。

#ifndef _ESP8266_H_ #define _ESP8266_H_ #include "main.h" //C¿â #include <stdarg.h> #include <stdlib.h> #define SSID "WIFI" #define PASS "123456789" #define ProductKey "a1wDiNYFwS5" #define DeviceName "PillsCar" #define ClientId "123|securemode=3\\,signmethod=hmacsha1|" #define Password "6940E27041D06C047F31951986F328A11267240C" #define mqttHostUrl "a1wDiNYFwS5.iot-as-mqtt.cn-shanghai.aliyuncs.com" #define port "1883" #define Huart_wifi huart2 #define REV_OK 0 //½ÓÊÕÍê³É±êÖ¾ #define REV_WAIT 1 //½ÓÊÕδÍê³É±êÖ¾ #define DelayXms(x) HAL_Delay(x) extern unsigned char ESP8266_buf[1024]; extern unsigned short ESP8266_cnt; extern uint8_t uartwifi_value; //´®¿Ú2½ÓÊÕ»º´æ±äÁ¿ typedef struct{ //ʱ¼ä½á¹¹Ìå uint16_t year; uint8_t month; uint8_t day; uint8_t week; uint8_t hour; uint8_t minute; uint8_t second; }Time_Get; void ESP8266_init(void); //Á¬ÉÏÍøÂçÔò²»¼ÌÐøÁ¬½ÓÁË void Ali_MQTT_Publish(void); //Éϱ¨ÏûÏ¢ ½¨Òé1sÉÏ´«Ò»´ÎÊý¾Ý void Ali_MQTT_Publish_1(void); void Ali_MQTT_Publish_3(void); void Ali_MQTT_Publish_4(void); void Ali_MQTT_Publish_mode(void); void Ali_MQTT_Recevie(void); //½ÓÊÕÏûÏ¢ _Bool ESP8266_Status(void); //1-Á¬½Ó״̬ 0-¶Ï¿ª×´Ì¬ Time_Get ESP8266_Get_Time(void); //´®¿Ú»Øµ÷º¯ÊýʹÓ÷½·¨ //void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) //{ // if(huart->Instance == Huart_wifi.Instance)//´®¿Ú´¥·¢ÖÐ¶Ï // { // if(huart->Instance == Huart_wifi.Instance)//´®¿Ú´¥·¢ // { // HAL_UART_Receive_IT(&Huart_wifi, &uartwifi_value, 1); // if(ESP8266_cnt >= sizeof(ESP8266_buf)) ESP8266_cnt = 0; //·ÀÖ¹´®¿Ú±»Ë¢±¬ // ESP8266_buf[ESP8266_cnt++] = uartwifi_value; // } // } //} #endif

2023-06-02 上传