手把手教你完成STM32连接阿里云平台,代码开源
创作时间:
作者:
@小白创作中心
手把手教你完成STM32连接阿里云平台,代码开源
引用
CSDN
1.
https://m.blog.csdn.net/qq_42722796/article/details/143305283
本文将详细介绍如何使用STM32单片机连接阿里云平台,实现数据上传与接收。通过ESP32-01S模块作为WiFi通信桥梁,结合MQTT协议,可以轻松实现远程数据传输和控制功能。
一、概要
使用STM32单片机连接阿里云平台,实现数据上传与接收。
二、整体架构流程
项目 | 详细说明 |
|---|---|
主控 | STM32F103ZET6 |
通信 | 串口通信,波特率:115200、数据位:8、停止位:1、校验:None |
开发软件 | STM32CubeMX |
硬件 | ESP32-01S |
将ESP32-01S单片机串口连接到STM32串口二,使用AT指令控制WiFi模块,连接阿里云平台。
三、软件流程
3.1 STM32CubeMX生成基础软件
- 选择主芯片,这里选择STM32F103ZET6,可以根据实际情况选择其他型号。
- 配置调试口
这里需要配置为图中所示,使用STLink仿真器。 - 配置时钟
使用外部8M晶振,系统时钟为72M。 - 串口配置
配置串口,波特率115200,配置串口DMA。
3.2 ESP32-01S初始化及配置
使用AT指令控制ESP32-01S模块:
指令 | 说明 |
|---|---|
AT | 测试AT启动 |
AT+RST | 重启模块 |
AT+GMR | 查看版本信息 |
AT+CWJAP="WiFi名字","密码" | 连接WiFi |
AT+CWAUTOCONN=1 | 设置开机自动连入WiFi |
AT+CIPMUX=1 | 设置单连接 |
AT+CIOBAUD=115200 | 修改波特率 |
3.3 STM32软件实现
通过串口发送字符串实现AT指令发送:
void ESP8266_SendString(uint8_t *str,uint8_t len)
{
uint8_t i=0;
for(i=0;i<len;i++)
{
USART2->DR = *str;
str++;
HAL_Delay(1);
}
}
uint8_t ESP8266_SendCmd(uint8_t *cmd,uint8_t *res)
{
uint8_t num = 200;
ESP8266_Clear();
ESP8266_SendString(cmd,strlen((const char *)cmd));
while(num--)
{
if(strstr((const char*)esp_buff,(const char *)res)!=NULL)
{
ESP8266_Clear();
return 0;
}
HAL_Delay(10);
}
return 1;
}
连接WiFi和阿里云的示例代码:
#define WIFI_NAME "spx24"
#define WIFI_PASS "52xiaobai999"
void ESP8266_Init(void)
{
HAL_UART_Receive_DMA(&huart2,esp_buff,ESPBUFF_MAX_SIZE);
__HAL_UART_ENABLE_IT(&huart2,UART_IT_IDLE);
while(ESP8266_SendCmd("AT+RST\r\n", "ready"))
while(ESP8266_SendCmd("AT\r\n","OK")){}
while(ESP8266_SendCmd("AT+CWMODE=1\r\n","OK")){}
while(ESP8266_SendCmd("AT+CWJAP=\""WIFI_NAME"\",\""WIFI_PASS"\"\r\n","OK")){}
}
#define ALI_USERNAME "xxx&k1v5xYRUyUn"
#define ALICLIENTLD "xxx"
#define ALI_PASSWD "xxx"
#define ALI_MQTT_HOSTURL "xxx"
#define ALI_PORT "1883"
#define ALI_TOPIC_SET "/sys/k1v5xYRUyUn/xxx/thing/service/property/set"
#define ALI_TOPIC_POST "/sys/k1v5xYRUyUn/xxx/thing/event/property/post"
void Ali_Yun_Init(void)
{
while(ESP8266_SendCmd("AT+MQTTUSERCFG=0,1,\"NULL\",\""ALI_USERNAME"\",\""ALI_PASSWD"\",0,0,\"\"\r\n","OK")){}
HAL_Delay(10);
while(ESP8266_SendCmd("AT+MQTTCLIENTID=0,\""ALICLIENTLD"\"\r\n","OK")){}
while(ESP8266_SendCmd("AT+MQTTCONN=0,\""ALI_MQTT_HOSTURL"\",1883,1\r\n","OK")){}
Ali_Yun_Topic();
}
void Ali_Yun_Topic(void)
{
while(ESP8266_SendCmd("AT+MQTTSUB=0,\""ALI_TOPIC_SET"\",0\r\n","OK")){}
while(ESP8266_SendCmd("AT+MQTTSUB=0,\""ALI_TOPIC_POST"\",0\r\n","OK")){}
}
void Ali_Yun_Send(void)
{
uint8_t msg_buf[1024];
uint8_t params_buf[1024];
uint8_t data_value_buf[24];
uint16_t move_num = 0;
cJSON *send_cjson = NULL;
char *str = NULL;
int i=0;
cJSON *params_cjson = NULL;
memset(msg_buf,0,sizeof(msg_buf));
memset(params_buf,0,sizeof(params_buf));
memset(data_value_buf,0,sizeof(data_value_buf));
send_cjson = cJSON_CreateObject();
params_cjson = cJSON_CreateObject();
cJSON_AddNumberToObject(params_cjson,"temperature",temp_value++);
cJSON_AddNumberToObject(params_cjson,"Humidity",humi_value++);
cJSON_AddItemToObject(send_cjson, "params", params_cjson);
cJSON_AddItemToObject(send_cjson,"version",cJSON_CreateString("1.0.0"));
str = cJSON_PrintUnformatted(send_cjson);
for(i=0;*str!='\0';i++)
{
params_buf[i] = *str;
if(*(str+1)=='"'||*(str+1)==',')
{
params_buf[++i] = '\\';
}
str++;
move_num++;
}
str = str - move_num;
sprintf((char *)msg_buf,"AT+MQTTPUB=0,\""ALI_TOPIC_POST"\",\"%s\",0,0\r\n",params_buf);
ESP8266_SendCmd(msg_buf,"OK");
ESP8266_Clear();
cJSON_Delete(send_cjson);
if(str!=NULL)
{
free(str);
str = NULL;
}
}
四、技术细节
4.1 MQTT
MQTT(Message Queuing Telemetry Transport)是一种基于发布/订阅模式的轻量级通讯协议,构建于TCP/IP协议之上。MQTT协议传输的消息分为主题(Topic)和负载(payload)两部分:
- Topic:消息的类型
- payload:消息的内容
在本项目中,单片机上传数据时作为发布者,接收数据时作为订阅者。
cJson
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。语法规则包括:
- 数据在名称/值对中
- 数据由逗号分隔
- 花括号{}容纳对象
- 方括号[]容纳数组
小结
这是一个简单的STM32连接阿里云平台的实例,可以实现以下功能:
- 真实数据上传(如温湿度、GPS定位、烟雾等)
- 云平台下发指令控制设备(如开关灯、控制电机等)
- 编写App对接平台进行远程控制
- 通过云平台进行IAP升级
热门推荐
胃胀气怎么办?摆脱烦恼~轻松享受健康的肠胃生活
派币骗局揭秘:律师教你如何识破数字货币投资陷阱
美国读研生活费解析:住宿、餐饮、交通、医疗…都在这儿!
【油漆施工完全指南】从流程到价格估算,一文读懂油漆工程
生抽和味极鲜什么区别?六大维度详解,附优质产品推荐
一粒速效救心丸可治多种病,不只是心梗
兼职合同需要交社保吗?法律专家权威解读
大家所了解的兼职是劳动关系吗
【新旧文存】真诚的文字赤诚的心 — 张岱《自为墓志铭》的联想
市场运营职业规划指南
普高和职高学籍可互转,杭州发布高中阶段职普融通试点方案
镜片像差?揭秘眼镜片不清晰的原因!
不吃早餐?饭前喝汤?这8种饮食习惯很“伤胃”!
《有的人》:一首说尽做人道理的名诗
Nature Communications:Olink在肿瘤精准诊断中的研究进展
常言“苏湖熟天下足”,为何后来又换成了“湖广”?
超声检查胃是否有诊断价值
毫不逊色《狂飙》的6部悬疑剧,剧情紧凑让人眼前一亮
汽车座椅海绵塌陷处理小妙招
年平均增长率(CAGR):投资增长的关键指标及其计算方法解析
“佛山第一商圈”发展规划发布:4家总部、9家首店集中入驻
荞麦:坚韧生命的象征与健康饮食的瑰宝
主板BIOS如何关闭集成显卡模式
TFA卡片 | 一套全面且实用的情商工具
斗鱼的养殖方法和注意事项
深圳地铁实现外卡支付,境外乘客出行更便捷
老年手足皲裂:症状、成因与防治全攻略
轮胎应该如何安全运输?这种运输方式的成本如何核算?
二本B类学校排名全解析:如何选择最适合你的大学?
闯黄灯不罚款的情况及原因