一.给ESP8266烧录带有MQTT协议的AT固件:
1. 乐鑫官方固件下载:
ESP-AT|乐鑫科技 (espressif.com.cn)https://www.espressif.com.cn/zh-hans/support/download/at?keys&field_type_tid%5B%5D=14 2.安信可官方固件下载:
安可信https://docs.ai-thinker.com/esp8266/sdk3.固件烧录工具:
开辟工具清单 | 安信可科技 (ai-thinker.com)https://docs.ai-thinker.com/%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B72
二.测试ESP8266的AT指令是否可以利用:
1.利用串口调试助手与ESP8266的RX,TX相连,在串口调试助手发以下命令举行测试:
AT:测试AT是否启动启动
AT+GMR:检察版本信息
AT+CMD?:查询当前固件支持的所有命令及命令类型
2.将串口的USART设置为如下(如果串口波特率为115200可以不用设置):
AT+UART_DEF=115200,8,1,0,3:设置串口的波特率、数据位、停止位、校验位、流控
三.初始化一个STM32的USART串口并将其RX,TX分别与ESP8266的TX,RX相连后
1.ESP8266初始化
- void ESP8266_Init(void)
- {
-
-
- ESP8266_Clear();
-
- printf( "0. AT\r\n");
- while(ESP8266_SendCmd("AT\r\n", "OK"))
- HAL_Delay(500);
-
- printf( "1. RST\r\n");
- ESP8266_SendCmd("AT+RST\r\n", "");
- HAL_Delay(500);
-
- ESP8266_SendCmd("AT+CIPCLOSE\r\n", "");
- HAL_Delay(500);
-
- printf( "2. CWMODE\r\n");
- while(ESP8266_SendCmd("AT+CWMODE=1\r\n", "OK"))
- HAL_Delay(500);
-
- printf( "3. AT+CWDHCP\r\n");
- while(ESP8266_SendCmd("AT+CWDHCP=1,1\r\n", "OK"))
- HAL_Delay(500);
-
- printf("4. CWJAP\r\n");
- while(ESP8266_SendCmd(ESP8266_WIFI_INFO, "GOT IP"))
- HAL_Delay(500);
-
- printf( "5. CIPSTART\r\n");
- // while(ESP8266_SendCmd(ESP8266_ONENET_INFO, "CONNECT"))
- // HAL_Delay(500);
-
- printf( "6. ESP8266 Init OK\r\n");
- }
复制代码 2.界说WIFI名称和密码:
- #define ESP8266_WIFI_INFO "AT+CWJAP="名称","密码"\r\n"
复制代码 3.连接WIFI:
- uint8_t atk_mw8266d_join_ap(char *ssid, char *pwd)
- {
- uint8_t ret;
- char cmd[64];
-
- sprintf(cmd, "AT+CWJAP="%s","%s"", ssid, pwd);
- ret = atk_mw8266d_send_at_cmd(cmd, "WIFI GOT IP", 10000);
- if (ret == ATK_MW8266D_EOK)
- {
- return ATK_MW8266D_EOK;
- }
- else
- {
- return ATK_MW8266D_ERROR;
- }
- }
复制代码 4.MQTT服务配置和连接:
- const char* ClintID="";//连接ID
- const char* username="";//连接的用户名
- const char* passwd="";//连接的密码
- const char* Url="";//连接的地址
- const char* pubtopic="";//订阅的位置
- const char* subtopic="";//发布的位置
- uint8_t atk_mw8266d_mqtt_user(void)//mqtt_user配置
- { char cmd[200];
- uint8_t ret;
-
- sprintf(cmd, "AT+MQTTUSERCFG=0,1,"%s","%s","%s",0,0,""\r\n",ClintID,username,passwd);
- ret = atk_mw8266d_send_at_cmd(cmd,"OK", 500);
- if (ret == ATK_MW8266D_EOK)
- {
- delay_ms(1000);
- return ATK_MW8266D_EOK;
- }
- else
- {
- return ATK_MW8266D_ERROR;
- }
- }
- uint8_t atk_mw8266d_mqtt_CONN(void)//mqtt连接
- { char cmd[200];
- uint8_t ret;
-
- sprintf(cmd, "AT+MQTTCONN=0,"%s",端口号,1\r\n",Url);
- ret = atk_mw8266d_send_at_cmd(cmd,"OK", 500);
- if (ret == ATK_MW8266D_EOK)
- {
- delay_ms(1000);
- return ATK_MW8266D_EOK;
- }
- else
- {
- return ATK_MW8266D_ERROR;
- }
- }
复制代码 5.订阅消息:
- uint8_t atk_mw8266d_mqtt_SUB(void)//mqtt订阅
- { char cmd[200];
- uint8_t ret;
- sprintf(cmd, "AT+MQTTSUB=0,"%s",1\r\n",subtopic);
- ret = atk_mw8266d_send_at_cmd(cmd,"OK", 500);
- if (ret == ATK_MW8266D_EOK)
- {
- delay_ms(1000);
- return ATK_MW8266D_EOK;
- }
- else
- {
- return ATK_MW8266D_ERROR;
- }
- }
复制代码 6.发布消息(发布的消息布局利用的是JSON):
- const char* func1="recycle";
- uint8_t re_atk_mw8266d_mqtt_pub(void)//mqtt发布
- { char cmd[500];
- uint8_t ret;
- func2=temp;//
- sprintf(cmd, "AT+MQTTPUB=0,"%s","{\\"%s\\":%d\\}",0,0\r\n",pubtopic,func1,100-(func2/20));
- ret = atk_mw8266d_send_at_cmd(cmd,"OK", 500);
- if (ret == ATK_MW8266D_EOK)
- {
- delay_ms(1000);
- return ATK_MW8266D_EOK;
- }
- else
- {
- return ATK_MW8266D_ERROR;
- }
- }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |