STM32作为一款高性能、低功耗的微控制器,广泛应用于物联网项目中。为了将STM32设备接入阿里云IoT平台,我们通常需要借助Wi-Fi模块实现网络通信。ESP-01S是一款常用的Wi-Fi模块,可以与STM32配合工作,实现与阿里云平台的连接。本教程将介绍如何连接STM32与ESP-01S,并烧录必要的固件,以完成与阿里云IoT平台的通信。
本教程的代码和库文件已经上传到百度网盘,链接如下:
链接: https://pan.baidu.com/s/1rukYXAGUM0jdLfH5_RYz7A?pwd=iy2s 提取码: iy2s
复制这段内容后打开百度网盘手机App,操作更方便哦
1.STM32开发板及相应的开发环境(项目中用到的是STM32F103C8T6、Keil5 MDK)。
2.ESP-01S Wi-Fi模块。
3.杜邦线若干,用于连接STM32与ESP-01S。
4.阿里云IoT平台账号及相应的产品、设备信息。
5.ESP-01S固件烧录工具,如Flash Download Tools。
具体可以参考我的上篇文章:
零基础 ESP-01S使用AT指令连接阿里云(含ESP-01S 固件烧录)
具体可以参考我的上一篇文章:
零基础搭建自己的阿里云物联网平台
将STM32的UART串口(通常为USART1或USART2)与ESP-01S的TX、RX引脚相连,确保交叉连接(即STM32的TX接ESP-01S的RX,STM32的RX接ESP-01S的TX)。
将ESP-01S的VCC引脚连接至STM32的3.3V电源输出,GND引脚连接至STM32的GND。
确保ESP-01S的CH_PD引脚连接至高电平(如3.3V),以使其处于工作状态。
本项目用到的是串口2,连接方式如下图所示:
ESP8266模块 STM32F103C8T6
RX -----> pA2
TX -----> pA3
GND -----> GND
VCC -----> 3.3V
#define post "/sys/a1smmmV6Xz0/device_klx/thing/event/property/post"
#define post_name "powerstate"
#define MQTT_set "AT+MQTTUSERCFG=0,1,\"NULL\",\"device_klx&a1smmmV6Xz0\",\"793f59febd0e9e504bd8ca860a3d15341403ba319c35e68fcd20d7c449c2fd09\",0,0,\"\""
#define MQTT_Client "AT+MQTTCLIENTID=0,\"a1smmmV6Xz0.device_klx|securemode=2\\,signmethod=hmacsha256\\,timestamp=1708652835434|\""
#define MQTT_Pass "AT+MQTTCONN=0,\"a1smmmV6Xz0.iot-as-mqtt.cn-shanghai.aliyuncs.com\",1883,1"
#define WIFI_Name "wxlzss"
#define WIFI_Pass "123456789"
void ESP8266_Init(void)
{
esp8266_send_cmd("AT+CWMODE=1","OK",50); //配置WiFi工作模式为Station模式:就是ESP8266模块去连接自己家的wifi,
//手机也连接自己家的wifi然后实现了手机和WiFi模块的通信,(自己家wifi相当于一个中介)
//让Wifi模块重启的命令
esp8266_send_cmd("AT+RST","ready",20);
delay_ms(1000);
//让模块连接上自己的路由
esp8266_send_cmd("AT+CWJAP=\"wxlzss\",\"123456789\"","WIFI GOT IP",300);
//AT+MQTTUSERCFG - 配置 MQTT 用户属性
esp8266_send_cmd(MQTT_set,"OK",100);
//配置 MQTT 客户端 ID
esp8266_send_cmd(MQTT_Client,"OK",100);
//连接指定 MQTT协议
esp8266_send_cmd(MQTT_Pass,"OK",300);
}
注意:这里会出现一个bug问题,会容易出现wifi模块一直卡死的问题(第一次连接wifi没问题,后面再调试会卡死上传不了数据,这是因为wifi模块发送一次AT指令后,H好像会自动连着WIFI)
我的解决办法:第一次烧录时候 esp8266_send_cmd("AT+CWJAP=“wxlzss”,“123456789"”,“WIFI GOT IP”,300); 然后再次烧录,注释掉这句话,就不会出现卡死的问题 有更好的解决办法的话可以说一下
/*****************************************************
*函数名称:ESP8266_Send(char *property,int Data)
*函数功能:向云端发送数据
*入口参数:char *property,int Data (属性)(数据)
*出口参数:void
*****************************************************/
void ESP8266_Send(char *property,int Data)
{
USART2_RX_STA=0;
u2_printf("AT+MQTTPUB=0,\"%s\",\"{\\\"params\\\":{\\\"%s\\\":%d}}\",1,0\r\n",post,property,Data);
}
应用例子:ESP8266_Send("LightLux"56);
void USART2_IRQHandler(void)
{
u8 Res;
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾)
{
Res =USART_ReceiveData(USART2);//(USART1->DR); //读取接收到的数据
if((USART2_RX_STA&0x8000)==0)//接收未完成
{
if(USART2_RX_STA&0x4000)//接收到了0x0d
{
if(Res!=0x0a)USART2_RX_STA=0;//接收错误,重新开始
else USART2_RX_STA|=0x8000; //接收完成了
}
else //没收到0X0D
{
if(Res==0x0d)USART2_RX_STA|=0x4000;
else
{
USART2_RX_BUF[USART2_RX_STA&0X3FFF]=Res ;
USART2_RX_STA++;
if(USART2_RX_STA>(USART2_MAX_RECV_LEN-1))USART2_RX_STA=0;//接收数据错误,重新开始接收
}
}
}
}
}
/*****************************************************
*函数名称:ESP8266_Received(void)
*函数功能:云端接收数据
*入口参数:char *property,int Data (属性)(数据)
*出口参数:void
{"id":1714985048108,"params":{"powerstate":0},"version":"1.0","method":"thing.event.property.post"}
*****************************************************/
void ESP8266_Received(char *PRO)
{
unsigned char *ret = 0;
char *property = 0;
unsigned char i;
if(PRO == NULL);
else if(USART2_RX_STA&0x8000) //串口2接收完一帧数据
{
ret = USART2_RX_BUF;
if(ret!=0)
{
property = strstr((const char *)ret,(const char *)PRO);
if(property!=NULL)
{
for(i=0;i<2;i++)
{
Property_Data[i] = *(property+12+i);
printf("接收到的数据为:%c\r\n",Property_Data[i]);
**加粗样式**
}
if(Property_Data[1] == '}')Property_Data[1]=0;
USART2_RX_STA = 0;
}
else
{
USART2_RX_STA = 0;
}
}
else
{
USART2_RX_STA = 0;
}
}
}
烧录两次即可
这个时候,平台设备已经在线了,设置的属性的值也会进行展示
通过本教程,我们全面解析了STM32连接阿里云IoT平台的实现过程,涵盖了从开发环境准备到硬件连接,再到代码编写与调试的各个环节。每一步都至关重要,确保了设备能够稳定接入并受控于云平台。本教程旨在帮助开发者顺利完成STM32与阿里云的连接与控制任务。
自此,关于阿里云的教程已经介绍了70%了,后面会介绍下微信小程序或者APP连接阿里云,通过阿里云的云产品流转来实现远程控制.以及通过4G DTU连接阿里云进行远程控制.
零基础 ESP-01S使用AT指令连接阿里云(含ESP-01S 固件烧录)
ESP8266 NodeMCU连接阿里云(从环境搭建到代码实现)
零基础搭建自己的阿里云物联网平台
最后,在编写过程中,我力求内容的准确与完整,但难免存在疏漏或不足之处。欢迎各位读者提出宝贵意见,共同进步。