stm32+esp32(8266)使用 HTTP连接到新版云平台

本功能对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请求通过串口发送

结果:

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值