基于STM32与ESP8266的AT命令实现利用MQTT协议与服务器实现订阅与上报数据 ...

种地  金牌会员 | 2024-10-16 07:06:28 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 923|帖子 923|积分 2769

 一.给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初始化
  1. void ESP8266_Init(void)
  2. {
  3.        
  4.        
  5.         ESP8266_Clear();
  6.        
  7.         printf( "0. AT\r\n");
  8.         while(ESP8266_SendCmd("AT\r\n", "OK"))
  9.                 HAL_Delay(500);
  10.        
  11.         printf( "1. RST\r\n");
  12.         ESP8266_SendCmd("AT+RST\r\n", "");
  13.          HAL_Delay(500);       
  14.        
  15.   ESP8266_SendCmd("AT+CIPCLOSE\r\n", "");
  16.                 HAL_Delay(500);       
  17.        
  18.         printf( "2. CWMODE\r\n");
  19.         while(ESP8266_SendCmd("AT+CWMODE=1\r\n", "OK"))
  20.                 HAL_Delay(500);
  21.        
  22.         printf( "3. AT+CWDHCP\r\n");
  23.         while(ESP8266_SendCmd("AT+CWDHCP=1,1\r\n", "OK"))
  24.                 HAL_Delay(500);
  25.        
  26.         printf("4. CWJAP\r\n");
  27.         while(ESP8266_SendCmd(ESP8266_WIFI_INFO, "GOT IP"))
  28.                 HAL_Delay(500);
  29.        
  30.         printf( "5. CIPSTART\r\n");
  31. //        while(ESP8266_SendCmd(ESP8266_ONENET_INFO, "CONNECT"))
  32. //                HAL_Delay(500);
  33.        
  34.         printf( "6. ESP8266 Init OK\r\n");
  35. }
复制代码
2.界说WIFI名称和密码:
  1. #define   ESP8266_WIFI_INFO                "AT+CWJAP="名称","密码"\r\n"
复制代码
3.连接WIFI:
  1. uint8_t atk_mw8266d_join_ap(char *ssid, char *pwd)
  2. {
  3.     uint8_t ret;
  4.     char cmd[64];
  5.    
  6.     sprintf(cmd, "AT+CWJAP="%s","%s"", ssid, pwd);
  7.     ret = atk_mw8266d_send_at_cmd(cmd, "WIFI GOT IP", 10000);
  8.     if (ret == ATK_MW8266D_EOK)
  9.     {
  10.         return ATK_MW8266D_EOK;
  11.     }
  12.     else
  13.     {
  14.         return ATK_MW8266D_ERROR;
  15.     }
  16. }
复制代码
4.MQTT服务配置和连接:
  1. const char* ClintID="";//连接ID
  2. const char* username="";//连接的用户名
  3. const char* passwd="";//连接的密码
  4. const char* Url="";//连接的地址
  5. const char* pubtopic="";//订阅的位置
  6. const char* subtopic="";//发布的位置
  7. uint8_t atk_mw8266d_mqtt_user(void)//mqtt_user配置
  8. {                char cmd[200];
  9.     uint8_t ret;
  10.           
  11.     sprintf(cmd, "AT+MQTTUSERCFG=0,1,"%s","%s","%s",0,0,""\r\n",ClintID,username,passwd);
  12.     ret = atk_mw8266d_send_at_cmd(cmd,"OK", 500);
  13.     if (ret == ATK_MW8266D_EOK)
  14.     {
  15.         delay_ms(1000);
  16.         return ATK_MW8266D_EOK;
  17.     }
  18.     else
  19.     {
  20.         return ATK_MW8266D_ERROR;
  21.     }
  22. }
  23. uint8_t atk_mw8266d_mqtt_CONN(void)//mqtt连接
  24. {                char cmd[200];
  25.     uint8_t ret;
  26.                
  27.     sprintf(cmd, "AT+MQTTCONN=0,"%s",端口号,1\r\n",Url);
  28.     ret = atk_mw8266d_send_at_cmd(cmd,"OK", 500);
  29.     if (ret == ATK_MW8266D_EOK)
  30.     {
  31.         delay_ms(1000);
  32.         return ATK_MW8266D_EOK;
  33.     }
  34.     else
  35.     {
  36.         return ATK_MW8266D_ERROR;
  37.     }
  38. }
复制代码
5.订阅消息:
  1. uint8_t atk_mw8266d_mqtt_SUB(void)//mqtt订阅
  2. {                char cmd[200];
  3.     uint8_t ret;
  4.     sprintf(cmd, "AT+MQTTSUB=0,"%s",1\r\n",subtopic);
  5.     ret = atk_mw8266d_send_at_cmd(cmd,"OK", 500);
  6.     if (ret == ATK_MW8266D_EOK)
  7.     {
  8.         delay_ms(1000);
  9.         return ATK_MW8266D_EOK;
  10.     }
  11.     else
  12.     {
  13.         return ATK_MW8266D_ERROR;
  14.     }
  15. }
复制代码
6.发布消息(发布的消息布局利用的是JSON):
  1. const char* func1="recycle";
  2. uint8_t re_atk_mw8266d_mqtt_pub(void)//mqtt发布
  3. {                char cmd[500];
  4.     uint8_t ret;
  5.                 func2=temp;//
  6.     sprintf(cmd, "AT+MQTTPUB=0,"%s","{\\"%s\\":%d\\}",0,0\r\n",pubtopic,func1,100-(func2/20));
  7.     ret = atk_mw8266d_send_at_cmd(cmd,"OK", 500);
  8.     if (ret == ATK_MW8266D_EOK)
  9.     {
  10.         delay_ms(1000);
  11.         return ATK_MW8266D_EOK;
  12.     }
  13.     else
  14.     {
  15.         return ATK_MW8266D_ERROR;
  16.     }
  17.         }
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

种地

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表