基于RT-Thread UIoT 快速入门-采集温湿度消息上云

原创
2020/04/08 13:57
阅读数 955

本文详细介绍如何在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,并将收到的数据打印
  1. -       package main
  2.  
  3.  
  4.  
  5. import (
  6.  
  7. "encoding/hex"
  8.  
  9. "fmt"
  10.  
  11. "io/ioutil"
  12.  
  13. "net/http"
  14.  
  15. )
  16.  
  17.  
  18.  
  19. func IndexHandler(w http.ResponseWriter, r *http.Request) {
  20.  
  21.    s,_ := ioutil.ReadAll(r.Body)
  22.  
  23.    //fmt.Println(time.Now().Local().String()+string(s))
  24.  
  25.    hexdump := hex.Dump(s)
  26.  
  27.    fmt.Print(hexdump)
  28.  
  29. }
  30.  
  31.  
  32.  
  33. func main() {
  34.  
  35.    http.HandleFunc("/receive", IndexHandler)
  36.  
  37.    http.ListenAndServe(":8900", nil)
  38.  
  39. }
复制代码


 

-       配置规则引擎
 
​​

 

-       后端业务服务器收到上行数据,与日志记录的相同
 

UCloud云服务与RT-Thread平台不做强绑定,大家可根据自身需求选择是否使用!通过此链接:https://passport.ucloud.cn/?invitation_code=C1xF974651066CB 注册并认证成为UCloud用户,客服将赠予150元云服务体验金所有云服务均享85折(仅限通过本链接注册的用户)!

 

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部