课程大纲
【第一章】:物联网简介(什么是物联网)
【第二章】:物联网十大应用场景
【第三章】:什么是MCU?
【第四章】:MCU的应用范围
【第五章】:我们要怎么入门MCU开发?
【第六章】:如何使用STM32Cube MX进行STM32的快速开发
【第七章】:ESP8266+MQTT上阿里云物联网平台实践(附源码)
STM32CubeMX AT指令实现MQTT协议并接入阿里云IOT平台 源码解析
优快云源代码下载
Github源代码下载
目录
效果展示

关于阿里云IOT平台如何配置请参考这篇博客,本篇只讲ESP8266 驱动和实现MQTT协议的核心代码:
ESP8266+MQTT上阿里云物联网平台实践(附源码)
1.单片机接入阿里云平台步骤解析
1.1 接入阿里云物联网平台步骤
//MQTT初始化函数
void ES8266_MQTT_Init(void)
{
uint8_t status=0;
//1.ESP8266初始化
if(ESP8266_Init())
{
user_main_info("ESP8266初始化成功!\r\n");
status++;
}
else Enter_ErrorMode(0);
//2.连接热点
if(status==1)
{
if(ESP8266_ConnectAP(WIFI_NAME,WIFI_PASSWD))
{
user_main_info("ESP8266连接热点成功!\r\n");
status++;
}
else Enter_ErrorMode(1);
}
//3.连接阿里云IOT服务器
if(status==2)
{
if(ESP8266_ConnectServer("TCP",MQTT_BROKERADDRESS,1883)!=0)
{
user_main_info("ESP8266连接阿里云服务器成功!\r\n");
status++;
}
else Enter_ErrorMode(2);
}
//4.登陆MQTT
if(status==3)
{
if(MQTT_Connect(MQTT_CLIENTID, MQTT_USARNAME, MQTT_PASSWD) != 0)
{
user_main_info("ESP8266阿里云MQTT登陆成功!\r\n");
status++;
}
else Enter_ErrorMode(3);
}
//5.订阅主题
if(status==4)
{
if(MQTT_SubscribeTopic(MQTT_SUBSCRIBE_TOPIC,0,1) != 0)
{
user_main_info("ESP8266阿里云MQTT订阅主题成功!\r\n");
}
else Enter_ErrorMode(4);
}
}
1.2 阿里云IOT平台订阅消息处理
订阅成功后,平台下发消息会通过串口透传出来,对消息进行处即可
//处理MQTT下发的消息
void deal_MQTT_message(uint8_t* buf,uint16_t len)
{
uint8_t data[512];
uint16_t data_len = len;
for(int i=0;i<data_len;i++)
{
data[i] = buf[i];
HAL_UART_Transmit(&huart2,&data[i],1,100);
}
memset(usart1_rxbuf,0,sizeof(usart1_rxbuf)); //清空接收缓冲
usart1_rxcounter=0;
//user_main_info("MQTT收到消息,数据长度=%d \n",data_len);
//查找是否是设置红灯
int i = GetSubStrPos((char*)data,"LEDR");
if( i>0 )
{
uint8_t ledr_status = data[i+6]-'0';
HAL_GPIO_WritePin(LED_R_GPIO_Port,LED_R_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(LED_G_GPIO_Port,LED_G_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(LED_B_GPIO_Port,LED_B_Pin,GPIO_PIN_SET);
if(ledr_status)
HAL_GPIO_WritePin(LED_R_GPIO_Port,LED_R_Pin,GPIO_PIN_RESET);
else
HAL_GPIO_WritePin(LED_R_GPIO_Port,LED_R_Pin,GPIO_PIN_SET);
}
//查找是否是设置绿灯
i = GetSubStrPos((char*)data,"LEDG");
if( i>0 )
{
uint8_t ledr_status = data[i+6]-'0';
HAL_GPIO_WritePin(LED_R_GPIO_Port,LED_R_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(LED_G_GPIO_Port,LED_G_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(LED_B_GPIO_Port,LED_B_Pin,GPIO_PIN_SET);
if(ledr_status)
HAL_GPIO_WritePin(LED_G_GPIO_Port,LED_G_Pin,GPIO_PIN_RESET);
else
HAL_GPIO_WritePin(LED_G_GPIO_Port,LED_G_Pin,GPIO_PIN_SET);
}
//查找是否是设置蓝灯
i = GetSubStrPos((char*)data,"LEDB");
if( i>0 )
{
uint8_t ledr_status = data[i+6]-'0';
HAL_GPIO_WritePin(LED_R_GPIO_Port,LED_R_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(LED_G_GPIO_Port,LED_G_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(LED_B_GPIO_Port,LED_B_Pin,GPIO_PIN_SET);
if(ledr_status)
HAL_GPIO_WritePin(LED_B_GPIO_Port,LED_B_Pin,GPIO_PIN_RESET);
else
HAL_GPIO_WritePin(LED_B_GPIO_Port,LED_B_Pin,GPIO_PIN_SET);
}
}
1.3 本地消息发布
调用MQTT发布消息驱动接口即可
//单片机状态上报
void STM32DHT11_StatusReport(void)
{
//获取温湿度信息
uint8_t temperature;
uint8_t humidity;
uint8_t get_times;
// 获取温湿度信息并用串口打印,获取十次,直到成功跳出
for(get_times=0;get_times<10;get_times++)
{
if(!dht11Read(&temperature, &humidity))//Read DHT11 Value
{
user_main_info("temperature=%d,humidity=%d \n",temperature,humidity);
break;
}
}
//上报一次数据
uint8_t led_r_status = HAL_GPIO_ReadPin(LED_R_GPIO_Port,LED_R_Pin) ? 0:1;
uint8_t led_g_status = HAL_GPIO_ReadPin(LED_G_GPIO_Port,LED_G_Pin) ? 0:1;
uint8_t led_b_status = HAL_GPIO_ReadPin(LED_B_GPIO_Port,LED_B_Pin) ? 0:1;</

本教程详细介绍了如何使用ESP8266模块和MQTT协议连接阿里云物联网平台,包括从ESP8266的初始化、连接Wi-Fi热点、建立与阿里云服务器的连接,到实现MQTT协议的全过程。同时,提供了完整的代码示例,涵盖AT指令驱动、MQTT协议实现等核心环节,帮助读者快速掌握单片机接入阿里云IoT平台的方法。
最低0.47元/天 解锁文章
1767





