本功能对stm32单片机操作的很少,只需要设置以下串口,并通过串口发送出去一些指令和数据。主要是获取post请求。
云平台的设置很多教程都有,这里不在介绍。
一、使用 postman测试并获取请求格式
1.从官网获取请求格式
在官方文档中有http请求的格式:
注意参数 类型 和 说明 ,后面用得到。
使用POSTMAN组建POST请求
1.写入请求地址:
组成:Address+URL(http报文格式就是这样)
2.添加请求 参数
参数有topic和protocol,我们属于属性上报。
pid改为自己的 产品id,device-name就是自己设备名称
3.写入头部 参数
在Header中添加token和Content-Type
token计算:token算法
官方提供 了Token算法,需要将products后的改为自己的产品iD,devices后的改为自己设备的名称
accessKey改为设备密钥,运行就可以得到token
4.接下来要写入请求体,也就是要发送 的 数据:
在 body中选择raw、JSON格式
数据体格式 :humi和 temp是自己设备设置的参数
{"id":"123","version":"1.0","params":{"humi":{"value":12},"temp":{"value":8}}}
到这里就完成了post请求的组建,刚才添加的参数都会自动添加到post请求中。在postman中可以看到最终效果:
点击发送就可以实现数据的上传:
二、STM32+ESP32(8266)实现数据上传:
其实最主要的难点就是获取上述的post请求。获得请求后,我们需要通过函数将请求组合起来:
//使用该函数就能实现post请求的组成,需要提供token,要上传的数据。根据自己 获得的 postman请求来适当调整
char request[500];
char* createPostRequest(const char* token, int humiValue, int tempValue) {
// 构建POST请求的主体部分
char jsonBody[128]; // 假设JSON主体不会超过128字节
snprintf(jsonBody, sizeof(jsonBody),
"{"
"\"id\":\"123\","
"\"version\":\"1.0\","
"\"params\":{"
"\"humi\":{\"value\":%d},"
"\"temp\":{\"value\":%d}"
"}"
"}\r\n", humiValue, tempValue);
// 构建POST请求
sprintf(request,
"POST /fuse/http/device/thing/property/post?topic=$sys/iAF55xi6p2/test/thing/property/post&protocol=HTTPS HTTP/1.1\r\n"
"Host: open.iot.10086.cn\r\n"
"token: %s\r\n"
"Content-Type: application/json\r\n"
"Content-Length: %d\r\n"
"\r\n"
"%s",
token, strlen(jsonBody),jsonBody);
return request;
}
使用esp32(esp8266)连接云平台:
其实就是使用stm32的串口与wifi模块的串口连接,通过stm32串口来发送AT指令给wifi模块,具体的设置就是初始化stm32的串口就可以,详细的操作相信大家应该可以做到。
AT指令顺序:
AT //测试是否连接成功
AT+CWMODE=1 //设置 station模式
AT+CWJAP="wifiname","passwd" //连接wifi
AT+CIPMUX=0
//AT+CIPSSLSIZE=4096 //如果是8266,可能需要设置 这个缓存 我使用的是esp32,不用 设置
AT+CIPSTART="SSL","open.iot.10086.cn",443//连接云平台,由于仅支持https,所以需要SSL连接,普通的tcp设置不行
AT+CIPMODE=1 //透传
AT+CIPSEND //发送数据
之后就可以将组成的post请求通过串口发送
结果: