本文详细介绍如何在RT-Thread的基础上使用UCloud IoT软件包实现数据上云,以及设备远程控制。
本教程分为两部分:第1部分 RT-Thread UIoT快速入门-采集温湿度数据上云 第2部分 RT-Thread UIoT快速入门-业务服务下发控制
教程视频入口:https://www.bilibili.com/video/BV1S7411y7wL
准备工作:
1) 硬件:开发板STM32F767ZI-Nucleo,通信模块 EC20,温湿度传感器DHT11
2) 软件:RT-Thread Studio,UIoT物联网软件包
3) 云资源:注册UCloud账号(RT-Thread注册链接),开通UIoT物联网通信云平台,云主机1台
环境搭建:
- 系统框架
- 搭建实拍
温湿度采集(上行)详细教程:
1. 下载RT-Thread Studio (https://www.rt-thread.org/page/studio.html)
2. 安装软件并打开RT-Thread,登录RT-Thread Studio
3. 创建RT-Thread项目
4. 选择UCloud UIoT软件包
5. 参考文档【创建产品、创建设备(https://docs.ucloud.cn/iot/uiot-core/console_guide/product_device/create_products)】获取产品序列号ProductSN、设备序列号DeviceSN、设备密钥DeviceSecret,用于接入物联网平台
注:UCloud物联网通信云平台基于标准的MQTT协议具体参数的生成可以参考(https://docs.ucloud.cn/iot/uiot-core/device_develop_guide/deviceconnect/mqttconnect)。
6. 配置UIoT软件包
7. 配置AT软件包,配置AT模组EC20,(串口设备名称、电源引脚、接收缓存)
8. 配置DHT11软件包
9. 其他配置
1)配置libc支持
2)配置AT模组需要的
10. 保存上述配置
11.修改dht11_sample.c,修改头文件‘drv_gpio.h’为’board.h’, 删除static void read_temp_entry(void *parameter)和static int dht11_read_temp_sample(void)函数,将读取温湿度的流程放到mqtt_sample.c中
12. 修改mqtt_sample.c,添加DHT11读取温湿度,并通过Topic:/${ProductSN}/${DeviceSN}/upload/event publish消息到Ucloud物联网云平台
- 添加头文件
- 修改static int _publish_msg(void*client, msg_payload payload) 函数上报温湿度
- 在static void mqtt_test_thread(void)函数中添加DHT11温湿度读取代码
- 修改void mqtt_test_example (void),并创建一个头文件声明该函数
注:mqtt_sample.c完成的工作包括:①监听MQTT Topic:/${ProductSN}/${DeviceSN}/upload/event ;②发送消息到MQTT Topic:/${ProductSN}/${DeviceSN}/upload/event。mqtt_sample.c中为了方便观察测试结果,使用的Topic同时具有发布&订阅权限,实际使用中建议参考【Topic管理】(https://docs.ucloud.cn/iot/uiot-core/console_guide/product_device/topic)分别定义发布、订阅权限的Topic用于上下行通信。
-在main函数中调用void mqtt_test_example (void)
13.编译并下载到目标开发板
14.打开UIoT物联网日志功能,可以查看上行消息
规则引擎转发到http server
- 准备httpserver,本例使用golang写一个监听8900,path为receive的http server,并将收到的数据打印
- - package main
- import (
- "encoding/hex"
- "fmt"
- "io/ioutil"
- "net/http"
- )
- func IndexHandler(w http.ResponseWriter, r *http.Request) {
- s,_ := ioutil.ReadAll(r.Body)
- //fmt.Println(time.Now().Local().String()+string(s))
- hexdump := hex.Dump(s)
- fmt.Print(hexdump)
- }
- func main() {
- http.HandleFunc("/receive", IndexHandler)
- http.ListenAndServe(":8900", nil)
- }
- 配置规则引擎
- 后端业务服务器收到上行数据,与日志记录的相同
UCloud云服务与RT-Thread平台不做强绑定,大家可根据自身需求选择是否使用!通过此链接:https://passport.ucloud.cn/?invitation_code=C1xF974651066CB 注册并认证成为UCloud用户,客服将赠予150元云服务体验金所有云服务均享85折(仅限通过本链接注册的用户)!