STM32F1系列+ESP-12F(ESP-01S)连接阿里云的详细代码实现
联系作者Q:2456640595
一、实验硬件与平台
硬件平台:
1.STM32F103VET6开发板一块(其他STM32F1系列的也行)
2.ESP-01S模块一个(或者用ESP-12F)、
3.DHT11温湿度模块
软件平台:
1.Keil5标准库开发
2.阿里云物联网平台
3.阿里云WEB可视化界面
二、代码编写
1.先往ESP-12F(或ESP-01S)里烧录MQTT固件
可参考往期文章(1条消息) ESP8266-01S+MQTT+阿里云数据传输_esp826601s支持mqtt吗_二筒rrrr的博客-CSDN博客
2.话不多说,上代码
阿里云参数设置:
//WIFI名称
char WIFI_ID[20]="ErTong";
//WIFI密码
char WIFI_PASSWARD[20]="123456789";
//这里直接复制自己的信息即可,不需要修改
char UserName[100]="ESP32_Test&a1w9cjmCq1V";
char Password[100]="2B6E99F09198A23F810DED878895DE3037D814FA";
//这里由于字符串的转义字符问题,将Clientld差分成三个字符串方便转换
//请读者对着下面的示例进行转换
//比如:332211|securemode=3,signmethod=hmacsha1,timestamp=112233| 即可差分成下面三个字符串
char Clientld1[30]="332211|securemode=3";
char Clientld2[30]="signmethod=hmacsha1";
char Clientld3[30]="timestamp=112233|";
char ALY_Connect[100]="a1w9cjmCq1V.iot-as-mqtt.cn-shanghai.aliyuncs.com";
//设置阿里云属性上报的Topic类,和参数标识符
char Set_mqtt[60]="/sys/a1w9cjmCq1V/ESP32_Test/thing/event/property/post";
char Parameter_identifier1[20]="TEMP";
char Parameter_identifier2[20]="Humidity";
char Parameter_identifier3[20]="Light";
/********************************************************************************************************************************************/
连接阿里云:
USART3_SendString("AT+RST\r\n");
delay_ms(8000);
printf("%s\r\n",xUSART.USART3ReceivedBuffer);
USART3_SendString("AT+CWMODE=3\r\n"); //设置ESP8266的连接方式
delay_ms(8000);
printf("%s\r\n",xUSART.USART3ReceivedBuffer);
sprintf(strTem,"AT+CWJAP=\"%s\",\"%s\"\r\n",WIFI_ID,WIFI_PASSWARD);
USART3_SendString(strTem);
delay_ms(8000);
printf("%s\r\n",xUSART.USART3ReceivedBuffer);
sprintf(strTem,"AT+MQTTUSERCFG=0,1,\"NULL\",\"%s\",\"%s\",0,0,\"\"\r\n",UserName,Password);
USART3_SendString(strTem);
delay_ms(5000);
printf("%s\r\n",xUSART.USART3ReceivedBuffer);
sprintf(strTem,"AT+MQTTCLIENTID=0,\"%s\\,%s\\,%s\"\r\n",Clientld1,Clientld2,Clientld3);
USART3_SendString(strTem);
delay_ms(5000);
printf("%s\r\n",xUSART.USART3ReceivedBuffer);
sprintf(strTem,"AT+MQTTCONN=0,\"%s\",1883,1\r\n",ALY_Connect);
USART3_SendString(strTem);
delay_ms(10000);
printf("%s\r\n",xUSART.USART3ReceivedBuffer);
USART3_SendString("ATE0\r\n");
delay_ms(2000);
读取DHT11温湿度传感器和上报信息至阿里云:
//采集传感器数据
Temperature=DHT11_GetTemperature(GPIOE,GPIO_Pin_0);
Humidity=DHT11_GetHumidity(GPIOE,GPIO_Pin_0);
if (xTIM.TIM7Counter >= 1000) // 每1000ms执行一次
{
LED_BLUE_TOGGLE; // 蓝色LED 每1秒闪灭一次,以监察系统正常工作
printf("温度:%d,湿度:%d\r\n",Temperature,Humidity);
//通过ESP8266上报数据至阿里云
sprintf(Temp_aly,"AT+MQTTPUB=0,\"%s\",\"{\\\"method\\\":\\\"thing.service.property.set\\\"\\\,\\\"id\\\":\\\"2012934117\\\"\\\,\\\"params\\\":{\\\"%s\\\":%d\\\,\\\"%s\\\":%d\\\,\\\"%s\\\":%d}\\\,\\\"version\\\":\\\"1.0.0\\\"}\",1,0\r\n",Set_mqtt,Parameter_identifier1,Temperature,Parameter_identifier2,Humidity,Parameter_identifier3,(uint16_t)(Light));
USART3_SendString(Temp_aly);
xTIM.TIM7Counter = 0; // 计数清0,以执行下一次计数
}
3.函数讲解
函数USART3_SendString的作用为:向串口三发送字符串类型数据
函数sprintf为C语言中的基础函数,这里不做解释。若有疑惑,请读者自行百度。
函数delay_ms为延时函数。使用示例:delay_ms(1000)表示延时1S
函数printf已经重定义到串口一,将ESP-01S(或ESP-12F)返回的数据,通过STM32的串口一发送出去,方便调式。
STM32发送给ESP-01S(或ESP-12F)的字符串含义这里不做解释。详细请参考:
(1条消息) ESP8266-01S+MQTT+阿里云数据传输_esp826601s支持mqtt吗_二筒rrrr的博客-CSDN博客
4.初步效果
1.串口输出的信息如下:
2. DHT11的串口输出:
3.阿里云接受到的信息:
至此,预期结果全部实现。
三、可视化界面开发
如果觉得上述界面不好看,且不便于查看数据。
请移步至另一篇文章,该文主要阐述怎么配置阿里云可视化界面
传送门:
(1条消息) 零基础教你搭建阿里云物联网WEB可视化界面_二筒rrrr的博客-CSDN博客
希望文章能对大家有所帮助。谢谢大家!!!!
代码功能为DHT11温湿度数据上报和BH1750光照传感器数据上报。
如需要全套代码,请私信我。有偿提供服务。
Blaze my Future: 32的该怎么写啊
过青年: 烧录后需要重启ESP模块
二筒rrrr: 是发送数据太频繁吗
duduDovis: 博主你好,我向onenet发送数据会直接断联,过一会儿又重新连接,该怎么解决,AT+MQTTPUB=0,"$sys/a3pdFFvH57/imu_angle/thing/property/post","{\"id\":\"123\"\,\"params\":{\"IMU_Angle_Pitch\":{\"value\":16\}}}",0,0 OK +MQTTDISCONNECTED:0 +MQTTCONNECTED:0,1,"mqtts.heclouds.com","1883","",1
把康康揣进口袋里.: 连接串口失败是为啥啊