种地 发表于 2024-10-16 07:06:28

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

 一.给ESP8266烧录带有MQTT协议的AT固件:

     1.   乐鑫官方固件下载:
    ESP-AT|乐鑫科技 (espressif.com.cn)https://i-blog.csdnimg.cn/blog_migrate/19566fdf079fc55a650ba3e2791d037d.pnghttps://www.espressif.com.cn/zh-hans/support/download/at?keys&field_type_tid%5B%5D=14      2.安信可官方固件下载:
  安可信https://i-blog.csdnimg.cn/blog_migrate/19566fdf079fc55a650ba3e2791d037d.pnghttps://docs.ai-thinker.com/esp8266/sdk3.固件烧录工具:
开辟工具清单 | 安信可科技 (ai-thinker.com)https://i-blog.csdnimg.cn/blog_migrate/19566fdf079fc55a650ba3e2791d037d.pnghttps://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;
   
    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;
    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;
    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;
    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;
    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企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 基于STM32与ESP8266的AT命令实现利用MQTT协议与服务器实现订阅与上报数据