基于RT-Thread UIoT 快速入门ucloud-1(基于RT-Thread Studio)

置顶 精华 发表在 Others2020-3-26 17:33 [复制链接] 5 387

本文详细介绍如何在RT-Thread的基础上使用UCloud IoT软件包实现数据上云,以及设备远程控制。: ?) S# S9 Z7 B- k4 l# A# B  h2 C
4 d# n, l- f* X. {0 |
: r3 o* E- F4 N$ a: @: s
本教程分为两部分:第1部分 RT-Thread UIoT快速入门-采集温湿度数据上云  第2部分 RT-Thread UIoT快速入门-业务服务下发控制/ V! \* f; A- I0 X' m; |
4 J& m( m# t$ Z: H
$ \* p8 \% h+ ]) K  w
教程视频入口:https://www.bilibili.com/video/BV1S7411y7wL
; K% E/ E/ x, p! y% X3 C& F
& ^$ `  v( ?3 E, A1 G' ?% H3 L$ G+ f: ^
UCloud云服务与RT-Thread平台不做强绑定,大家可根据自身需求选择是否使用!通过此链接:https://passport.ucloud.cn/?invitation_code=C1xF974651066CB 注册并认证成为UCloud用户,客服将赠予150元云服务体验金(仅限通过本链接注册的用户)!
) q& W  R( y( V* V" P5 L- N7 u7 L* L, G+ i% Y5 P3 }+ m5 B

& Y/ E1 I% Z/ o& x* v+ e6 P  f% z
. W5 W( d( @2 E3 @( o准备工作:1 I, v/ Z1 q, Y% v, {8 m
1) 硬件:开发板STM32F767ZI-Nucleo,通信模块 EC20,温湿度传感器DHT11
2) 软件:RT-Thread Studio,UIoT物联网软件包
3) 云资源:注册UCloud账号(RT-Thread注册链接),开通UIoT物联网通信云平台,云主机1台
9 m: O! ]/ ]( l! |

, j# M. I* W9 u0 T环境搭建:
; T4 A3 ?/ V0 c0 K" A9 W4 v: m
5 f# \3 {( H  s9 i' l
-       系统框架
' g) @9 m- `0 b' V7 h
​​​​" ^; T8 c/ e, v8 M/ g/ ^7 ?, y

) g% ]5 q4 k3 K  k% L* j) G
-       搭建实拍
​​​​​​
# `1 ~+ q  F$ V0 Z
( g8 V0 X' u% d9 N" y% J

, D' u6 y1 r9 E/ R5 A温湿度采集(上行)详细教程:
1.  下载RT-Thread Studio (https://www.rt-thread.org/page/studio.html)
2.  安装软件并打开RT-Thread,登录RT-Thread Studio
3.  创建RT-Thread项目
​​5 \- d1 E: v5 Y
4.  选择UCloud UIoT软件包
​​
% H3 H! f2 U* e* n' ^, m
5.  参考文档【创建产品、创建设备(https://docs.ucloud.cn/iot/uiot-core/console_guide/product_device/create_products)】获取产品序列号ProductSN、设备序列号DeviceSN、设备密钥DeviceSecret,用于接入物联网平台
​​
2 \! ^2 c9 I  Z7 E
注:UCloud物联网通信云平台基于标准的MQTT协议具体参数的生成可以参考(https://docs.ucloud.cn/iot/uiot-core/device_develop_guide/deviceconnect/mqttconnect)。
! y- X4 g; {+ v. A. D4 e8 E0 g

& h# o: ~3 N$ ~5 T" y- S
6.  配置UIoT软件包
​​8 Q( E4 g. x) G- G% u: B5 Q
7.  配置AT软件包,配置AT模组EC20,(串口设备名称、电源引脚、接收缓存)
​​0 c0 C$ l0 C1 j) R& j" H9 q  a
8.  配置DHT11软件包
​​; `4 W! K  |1 \6 b* x. b
9.  其他配置
1)配置libc支持
​​5 K, w! m6 S) b/ s+ e# g
2)配置AT模组需要的
​​
# g5 v# O" s; O! a3 v. V

" W# W2 r$ ~& @1 u  Z( t
10. 保存上述配置
​​
' O8 P& ]7 i* d- A1 ~& b

+ e+ q9 f4 q; y( @5 a
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中
​​
2 `: {+ z1 |1 O+ w

6 f# T) E  z5 f4 A/ D
12.          修改mqtt_sample.c,添加DHT11读取温湿度,并通过Topic:/${ProductSN}/${DeviceSN}/upload/event  publish消息到Ucloud物联网云平台
- 添加头文件
​​$ @  q, v' S" @$ [$ k: @7 R
- 修改static int _publish_msg(void*client, msg_payload payload) 函数上报温湿度
​​
  _. l' n- |8 M7 Y3 y' F9 v
- 在static void mqtt_test_thread(void)函数中添加DHT11温湿度读取代码
​​​​​% m% y2 D+ T/ _7 s1 t: w  {
- 修改void mqtt_test_example (void),并创建一个头文件声明该函数
​​​​​: M7 h! r* a; X# I' X
注: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用于上下行通信。

2 K/ ~+ V/ Y$ u% B       -在main函数中调用void mqtt_test_example (void)
5 a/ ]3 X! b8 O2 R$ v​​# {0 S9 c. B; k
& D! Z9 l/ {# _- q, M" W; [6 G
   
5 E# h. V7 F0 @# j/ ^' r
13.编译并下载到目标开发板
​​
9 r* E9 r! O7 A
14.打开UIoT物联网日志功能,可以查看上行消息
: G; t0 Q' m. P

3 ~+ ^' s+ P( h: N
规则引擎转发到http server
-       准备httpserver,本例使用golang写一个监听8900,path为receive的http server,并将收到的数据打印
  1. -       package main& Y) C, x# K6 S( P  ^; |5 y

  2. 2 ~4 b9 U6 @  H) k

  3. 5 ~% G; k0 }% s

  4. 9 e, \. ^2 n( \' e5 ]' T8 K
  5. import (8 `  L3 h7 g/ V0 t; W

  6. * E+ N2 ^7 ]8 D$ g4 o5 K
  7. "encoding/hex") f4 p: u" p. E/ i
  8. $ B0 `! y  H5 M, ?% O+ u0 Q
  9. "fmt"/ Z4 E7 @% h. s3 b' H
  10. + b* ?# ]3 a' r0 m2 H5 J- C) `  f; D
  11. "io/ioutil"
    6 w5 s6 a2 r+ w  J0 @, r

  12. % b+ x. d4 u' Z  B, c
  13. "net/http"8 n' ^3 l8 g4 U7 s; i. q7 |
  14. & Y7 l. K( G+ K
  15. )
    5 k/ @. V5 Z) d$ z9 x) z8 o

  16. 5 }4 A3 d( o7 Z2 n# z& @: z( T
  17. & [4 c& T8 Z+ K+ q! J

  18. ! K) O( U! u, Q! ]% m
  19. func IndexHandler(w http.ResponseWriter, r *http.Request) {# T4 E( v& z/ l5 p4 ~! ]4 N
  20. & M8 o2 b' e! y
  21.    s,_ := ioutil.ReadAll(r.Body)9 _" O) b5 f2 T) c+ ~1 g0 V% A! W
  22. ; @3 _- p5 w1 E& U
  23.    //fmt.Println(time.Now().Local().String()+string(s))' s& q* M! F# i1 L
  24.   U) G% j" L, u+ D
  25.    hexdump := hex.Dump(s)
    & {8 Y% Y) p/ C

  26. 8 Q6 g( b( Y* q* j3 A
  27.    fmt.Print(hexdump)
    * H! y1 o& Y8 ?+ o
  28. 3 y7 r3 P, k' W& O0 I
  29. }
    9 Y3 N* |" `6 }" |% m% Z

  30. 2 M" F  z" i# A# S$ j+ T! |- c
  31. 2 D$ K  T8 p8 p: F$ l9 k
  32. 6 {. V- X' q/ x) b) m' l7 n! Z
  33. func main() {
    8 U4 q" y* I; `& h8 t2 \

  34. # u& ^) l# I5 ^0 a0 r; E( k
  35.    http.HandleFunc("/receive", IndexHandler)
    ; \  H2 A/ L. A) P; k7 W9 D/ s
  36. ! `6 V: d/ C7 @) O8 Q/ [
  37.    http.ListenAndServe(":8900", nil)
    5 v- l0 Z2 G, m4 k  p  S

  38. ; S5 N1 S) B2 }7 J( y! Y
  39. }/ B+ P3 Q6 `1 i
复制代码
8 j$ m0 y3 o; E% Q

( Y3 {8 e+ t1 J2 z' P
-       配置规则引擎
​​
: g/ g0 \) U$ j0 B7 f3 M

1 l6 w% i- G  ~% q  @) g$ _
-       后端业务服务器收到上行数据,与日志记录的相同

0 A+ k) F: @) G1 A- `" T9 N; k/ j" x
​​! }5 z$ ?& X3 F2 K
, v. J+ J1 q4 P! k! k
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 2020-3-27 09:11:18 | 显示全部楼层
厉害了,我的楼主  j) `5 o% e* X
使用道具 举报 回复
发表于 2020-3-27 14:38:14 | 显示全部楼层
iwillbeback008 发表于 2020-3-27 09:117 Q3 P3 X' f$ i: O7 D) x
厉害了,我的楼主

  }& S% T6 g& i5 J厉害的不是我 是ucloud~
使用道具 举报 回复
发表于 2020-3-27 15:54:34 | 显示全部楼层
XQQ 发表于 2020-3-27 14:38
( m' {; @' ]; r/ s+ p8 t: `2 `厉害的不是我 是ucloud~

; m- a8 p7 f$ s6 V/ ^# f/ a都厉害
使用道具 举报 回复
发表于 2020-3-28 09:30:28 | 显示全部楼层
很有意思,值得尝试
使用道具 举报 回复
发表于 4 天前 | 显示全部楼层
ucloud和阿里有啥区别?选择ucloud的好处在哪?
: T. c1 _$ w' n0 G* [, X$ D4 j
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

XQQ

  1. 35 主题
  2. 719 帖子
  3. 719 积分

Ta的主页 发消息

Archiver|手机版|小黑屋|RT-Thread开发者社区 ( 沪ICP备13014002号-1

有害信息举报电话:021-31165890 手机:18930558079

© 2006-2019 上海睿赛德电子科技有限公司

Powered by RT-Thread

快速回复 返回顶部 返回列表