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

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

     1.   乐鑫官方固件下载:
    ESP-AT|乐鑫科技 (espressif.com.cn)icon-default.png?t=O83Ahttps://www.espressif.com.cn/zh-hans/support/download/at?keys&field_type_tid%5B%5D=14      2.安信可官方固件下载:

  安可信icon-default.png?t=O83Ahttps://docs.ai-thinker.com/esp8266/sdk3.固件烧录工具:

开发工具清单 | 安信可科技 (ai-thinker.com)icon-default.png?t=O83Ahttps://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;
    }
	}

### 回答1: STM32使用ESP8266连接OneNET使用MQTT协议的步骤如下: 1. 首先,确保STM32ESP8266之间的硬件连接正确。将ESP8266的TX引脚连接到STM32的RX引脚,将ESP8266的RX引脚连接到STM32的TX引脚,并将GND引脚连接到共地。 2. 接下来,需要编写STM32的固件代码。首先,需要初始化串口通信接口,并将其配置为与ESP8266的通信接口相匹配。其次,需要配置STM32的GPIO引脚,将其用于控制ESP8266的工作模式切换(例如,将ESP8266切换到STA模式或AP模式)。然后,使用串口通信接口与ESP8266进行AT指令的交互,以设置ESP8266的连接参数和网络配置。最后,使用STM32MQTT库来实现与OneNET的连接和数据传输。 3. 在ESP8266上,需要使用AT指令配置ESP8266的网络连接和MQTT参数。可以使用AT+CWMODE指令将ESP8266切换到STA模式,并使用AT+CWJAP指令连接到WiFi网络。然后,使用AT+CIPSTART指令建立与OneNET的MQTT服务器的连接,并使用AT+CIPSEND指令发送MQTT消息。 4. 一旦STM32成功连接到OneNET的MQTT服务器,就可以使用STM32MQTT库来发送和接收数据。可以使用MQTT的发布(Publish)和订阅(Subscribe)功能,向OneNET发送数据或接收来自OneNET的数据。 总结来说,使用STM32连接到OneNET的MQTT服务器需要进行硬件连接和固件代码的编写,而ESP8266则需要使用AT指令配置网络连接和MQTT参数。之后,STM32可以使用MQTT库来实现与OneNET的数据传输。 ### 回答2: 要使用STM32ESP8266连接OneNet并使用MQTT协议,我们可以采取以下步骤: 1. 在STM32上配置串口通信:将STM32通过UART配置为与ESP8266进行串口通信的方式。设置合适的波特率、数据位、停止位和奇偶校验位等。 2. 连接ESP8266STM32:根据ESP8266的硬件连接方式(一般为串口连接),将ESP8266的TX线连接到STM32的RX线,将ESP8266的RX线连接到STM32的TX线。还需将ESP8266的VCC和GND引脚分别连接到STM32的电源线和地线。 3. 配置ESP8266连接OneNet:ESP8266需要连接到OneNet,并使用MQTT协议进行通信。通过AT指令,配置ESP8266的WiFi连接,设置SSID和密码。然后使用AT+CIPSTART指令连接到OneNet的MQTT服务器。 4. 配置STM32发送和接收数据:在STM32上配置串口发送和接收功能,以便与ESP8266进行通信。使用UART发送指令字节流给ESP8266并接收ESP8266的响应。 5. 使用MQTT协议与OneNet通信:在STM32上通过串口向ESP8266发送MQTT协议指令,例如建立连接(CONNECT),订阅主题(SUBSCRIBE),发布消息(PUBLISH),取消订阅(UNSUBSCRIBE)等。根据需求进行合适的MQTT操作。 6. 处理OneNet的响应和数据:在STM32上解析和处理来自OneNet的响应和数据。根据MQTT协议,您可以接收和解析来自OneNet的订阅消息。 通过以上步骤,您就可以在STM32使用ESP8266连接OneNet并使用MQTT协议进行通信和数据传输。 ### 回答3: STM32是一种常用的微控制器,而ESP8266是一种常用的Wi-Fi模块。这两者可以结合使用,通过使用MQTT协议连接到OneNet平台。 首先,我们需要在STM32上配置USART或SPI接口与ESP8266通信。然后,我们可以使用AT指令集来与ESP8266进行通信。通过发送相应的AT指令,我们可以实现ESP8266的Wi-Fi连接。这将使STM32具备互联网连接功能。 接下来,我们需要使用MQTT协议与OneNet平台进行连接。我们可以使用一个MQTT客户端库,例如MQTTFX或Paho,来处理MQTT通信。在STM32上,我们可以使用相应的库或手动实现MQTT协议来处理与OneNet的通信。 在连接OneNet之前,我们需要在OneNet平台上创建一个设备,并获取相应的设备ID和API密钥。这些信息将用于在我们的STM32代码中进行身份验证和连接。 一旦连接到OneNet,我们可以通过使用MQTT发布者/订阅者机制在设备和OneNet之间进行通信。我们可以发布传感器数据或接收来自OneNet的命令。这样,我们可以实现远程监控和控制功能。 在代码实现方面,我们需要处理与ESP8266的通信、MQTT协议的处理以及与OneNet的通信。我们可以使用适当的库和API来简化代码实现过程。 综上所述,通过将STM32ESP8266和OneNet相结合,使用MQTT协议进行通信,我们可以实现STM32与OneNet平台之间的连接和数据传输。这为物联网应用提供了一个便捷的方式,使得我们可以远程监控和控制STM32设备。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值