你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【实战经验】使用B-L475E-IOT01A探索套件连接AWS IOT平台

[复制链接]
zero99 发布时间:2017-5-31 11:22
使用B-L475E-IOT01A探索套件连接AWS IOT平台
前言5 p3 j8 Y6 C9 ^: r* a) q' t
ST新近推出一款物联网套件B-L475E-IOT01A,支持WIFI,蓝牙,SubG, NFC等多种无线连接方式。 而且因为它还支持Arduino接口,所以使用者也可以很方便的通过Arduino接口来扩展其他的无线连接模块,比如GSM模块。" v) o6 a' W+ Q; N0 y& ^' }
这块开发板使用的是ST低功耗MCU系列中的STM32L475这款芯片,拥有1Mbytes的Flash和128Kbytes的SRAM。板上还集成了64Mbits的Quad-SPI Flash。而且板上还搭载了多种传感器,比如温湿度传感器,高性能3轴磁力计,加速度传感器,陀螺仪,接近传感器和压力传感器等。便于开发者用来进行多种应用的演示。5 N4 N& Z8 ~* ~! ^% I, W3 ]
板子上还有两个数字全角度麦克风,所以用这块开发板,还可以实现语音控制的功能。4 |* N  z, r7 k7 v- e/ g
配合这个套件,ST还推出了基于Cube库的X-CUBE-AWS软件扩展包。提供了连接到AWS IOT平台,进行订阅消息和向云端发布消息的应用例程,远程固件升级的功能等。可以到ST官网下载, http://www.st.com/content/st_com/en/products/embedded-software/mcus-embedded-software/stm32-embedded-software/stm32cube-expansion-software/x-cube-aws.html
( P7 E) T5 a# q9 o( i" fST官方提供了用户手册对该套件进行了详细介绍,但对于第一次接触物联网和AWS IOT平台的使用者来说,对于某些功能可能还是会不知道怎么下手。
6 X& \) c9 E& u# H' `9 S6 b所以笔者经过自己的尝试后,在本文中将一步步介绍如何连接到AWS IOT平台进行消息的发布订阅,和进行远程固件升级。
! r. A" |- j. D( P# p
4 N% V' w! ~0 ~8 Y6 \, t4 l8 Q  b9 ~6 k2 YAWS IOT平台+ u. [8 Y( l1 H1 k2 ^0 Z
AWS的IOT平台支持各物联网设备之间通过MQTT,HTTP或者Websocket的方式进行双向的,安全的通信。借助AWS IOT,应用程序可以随时跟踪所有设备并与其通信,即使这些设备不在线。7 A" y6 O/ C1 _  r
在安全方面,AWS采取双向认证,除了对服务器的认证,AWS提供X.509数字证书来认证IOT设备。IOT设备可以使用AWS为其生成的证书,也可以用其他证书颁发机构(CA)签署的证书。证书分配和激活后,保存在设备端。
8 ^( _% X8 t- J3 S8 O" E" ?* R! Y3 V. I/ \* u, H
AWS IOT例程
" z8 v; M% Q& ?1 ]$ l1 s: EB-L475E-IOT01A对应的STM32 AWS IOT软件扩展包中的例程是基于MQTT的方式与AWS进行连接的,MQTT之下应用了mbedTLS中间件来建立安全连接。- V5 _( R1 a3 q: d% M
MQTT(Message Queuing Telemetry Transport)是一个轻量级的通信协议,为资源受限的网络客户端提供一种简单的方式进行消息的交互,在物联网有着广泛的应用。MQTT使用发布/订阅消息的模式,实现一对多消息分发。MQTT运行在TCP之上,基于客户端-服务器架构。在MQTT协议中,有三种角色:发布者(Publisher),代理(Broker),订阅者(Subscriber)。发布者和订阅者是客户端,一般的设备节点,手机APP都是客户端。代理是服务器,像AWS IOT,百度IOT等都是服务器。设备节点和手机APP向代理(AWS,百度云等)发送消息或者订阅消息。0 a; `3 I' [" \8 B  U
STM32 AWS IOT软件扩展包中的例程中,L475IOT探索套件通过MQTT连接到AWS IOT平台,向AWS IOT平台发布传感器数据。我们可以通过AWS IOT提供的网页客户端来订阅L475IOT探索套件发布的消息。在下面,将介绍如何一步步搭建并运行这个例程。' _$ l) r9 w* `1 T9 N  N
硬件连接方面很简单,将B-L475E-IOT01A板子通过ST-LINK接口连接到PC。PC上安装好一个串口调试工具,推荐用Tera Term。另外需要一个可以连接到外网的无线路由器, B-L475E-IOT01A将通过这个无线路由器上网,连接到AWS IOT平台。串口调试工具用来在首次运行时对B-L475E-IOT01A板子上的WIFI模块进行配网和进行AWS的安全配置等,并输出程序运行信息。具体可以参考ST官方文档UM2178。
. _/ K/ f# N; f5 L( `& r# Z0 W' i6 x6 q5 T, g- S3 r: p
创建AWS IOT安全证书( W, q2 _5 p7 `" |% T' b; r
在用L475IOT探索套件连接AWS IOT之前,需要先在AWS IOT平台上创建实例(Things),策略(Policy)和证书(Certificates),并且将实例,策略与证书绑定。
& o+ w# V6 ~, P$ w' YStep1:申请一个免费的AWS账户
/ x- q8 o$ R  I$ t* {Step2:登录AWS,进入AWS IoT控制台0 L' o# Y" x$ \2 t" R" S/ O7 B. W1 P
           选择注册“Registry”---->实例”Things“。在这一步,我们会新注册一个名为L475_Node的实例.9 k' a+ y9 r! f- [3 X- Y( w
21.jpg
- |( L4 w& u. U8 j: T6 c  P8 Y. i/ }' t$ u* T, J
22.jpg 6 A8 K1 N0 @: Q& }; q4 C

5 D; v; b; {3 A8 Z0 R0 ~6 L0 ^) D
23.jpg
8 N0 }3 z+ ?: |* w8 |6 y# e
/ e9 w3 Z: j0 \7 y! A      L475_Node已经注册完成,接下来需要创建设备证书。5 F9 g5 U% I: P, R8 Y2 W- |
      Step3: 在实例(Thing)L475_Node下,选择安全(Security)。按照下面的步骤创建并激活设备证书。* I& q/ ~, A% s9 ~
$ m! p9 }1 c. v. M/ x
24.jpg
! l3 ~0 z2 C3 K8 X- z' x' H0 z; a/ k0 P1 Z" F6 H
25.jpg
1 ^7 d4 `2 O3 p7 h$ o
) T5 p+ X7 F* i/ u2 j4 b% z+ A3 m3 e1 SAWS IOT平台会产生一个设备证书和一组密钥对,在设备认证时使用。另外还需要下载AWS IOT的根证书(root CA)来进行对服务器的认证。所以这里需要将设备证书,密钥对,AWS IOT的根证书下载并保存在一个安全的地方(第3步)。6 e$ Y5 |* v1 z0 d5 K7 G( d1 C
最后点击Active激活设备证书。
- g/ \" n* E7 Y. p0 i" h& GStep4:接下来创建一个Policy并绑定到前面建立的证书。再将证书绑定到前面创建好的实例L475_Node。
4 W9 r5 w- a1 f- t) {1 D, L
26.png / @% w# m- A% p9 |

1 U& j( B8 }% v6 J% }; s
27.jpg 2 Q* I/ M! T; ~2 L3 }

( K* @  r. T+ T) }8 I( Y- i2 W6 s$ }
28.jpg
0 a; |- G) [: t: H
4 }; J1 [; w1 y6 I) N7 ^7 bPolicy的内容规定了对哪些资源可以做哪些操作。可以填写Action和Resource ARN来一条一条的输入,也可以选择Advance mode一次性输入。如下图,
* l0 k& S: }% O$ r- v/ c2 ~7 W5 \1 @& Z: I; s8 H1 z
29.jpg
4 M; s' ^- L9 m. x
4 u6 a5 ?: `5 c6 Z+ T8 I0 c' r/ u将下面的policy输入到上图5所指的位置。
9 e5 W# {, m+ R/ K* V% r3 Z2 z
30.jpg
9 z, ^* N' `# D; p
31.jpg ! `5 g  _1 e: u" d: e  K
* R8 L- j/ C% l
$ ~% b/ l$ Q% ?4 o$ I* F8 V, }# v' T
创建好Policy后,接下来将其与前面创建的Certificate绑定。
: L/ s  U3 z& @" d" L
32.jpg
" I7 T4 i* W1 d+ [4 _- ?
3 x: l& M) Y$ N0 d2 Z4 n- I, E
33.jpg
7 [6 @" \: M! k' ?将证书绑定到实例L475_Node,
5 n7 ]4 D1 o, k* C$ `: T9 e
34.jpg
1 P3 D+ |) l. J% o' T
35.jpg 9 f. m  }3 s4 x8 u
* G, d  Q4 |' }
Step5:完成上面的操作后,在Registry--->Things-->L475_Node下的Interact页面里可以看到服务器的地址。这个就是设备要连接的服务器的地址。需要通过串口助手写到Flash中。
' y- X7 B8 `! h) y2 ^
36.jpg $ {9 q- V: c: I% P! w# l: m
* t2 w1 T8 g5 K, q6 z# s
运行AWS IOT例程
( Y2 ]' |" Q7 I' K5 k现在在云端的设置已经完成,接下来我们打开X-CUBE-AWS软件包中的B-L475E-IOT01对应的AWS例程(\Projects\B-L475E-IOT01\Applications\Cloud\AWS)。
8 P" I: X8 @! E/ y# @* ^$ rStep1:编译工程,下载到L475探索套件。
/ Y) V, f! g% ~$ R) W% _( ?- d4 s
37.jpg ( I$ C% `* h  u& t
, m' _9 d. \! p; W
Step2: 复位运行程序,通过串口给WIFI模块配网。串口配置为:115200波特率,8位数据位,无奇偶校验,1位停止位。串口调试工具的具体配置见UM2178.
, _- k) c1 X* q% _
38.jpg 9 i8 O/ `1 K- b
输入无线路由器的SSID和密码
+ ^* Y1 F" L7 T# n+ V" A
39.jpg
- M- y& F9 t  o  G( d. R4 g4 o9 k: ?! R6 E% h8 S
Step3:输入AWS安全配置
& |: `/ f  i- W5 ~按照串口提示,依次输入AWS的根证书,设备证书,设备私钥,服务器地址(在上一章节“创建AWS IOT安全证书”的Step5中记录下来的服务器地址)和设备名称(L745_Node)等。
' W& r0 M+ }! W* l  h如果网络连接没有问题,B-L475E-IOT01板子就会自动连接到AWS IOT平台,并发送消息了。在该例程里,设备的状态信息(板上的传感器数据)是发送到AWS的影子设备的主题:“$aws/things/L475_Node/shadow/update”。 “$”开头的主题是AWS IOT平台的系统保留主题。你也可以发送到自己定义的主题。
$ X8 ~  z8 v) X* x3 o
40.jpg
8 T! K3 @2 R% O" U
4 o* y& Z8 ]/ U) ^2 }Step4: 运行AWS网页版客户端来订阅消息。按照下面的步骤打开网页版客户端。
4 a& E0 Q7 G. P# @- a; H) O; k
41.jpg   f' \: |% |, Q4 A- t

. m1 @+ U: S( w4 ^+ |* W1 O
42.jpg 5 h$ Z2 ~2 m: l: T  {9 V4 D
( a1 \: e1 i" I8 v! e
43.jpg ) V( Z; f; X0 t" u9 A
这个网页版的客户端连接到服务器的时候,自动订阅了实例的影子设备的主题“$aws/things/L475_Node/shadow/update/accepted”。只要设备有上传信息,这里都可以自动收到。
! f- w4 z' `' S- r
33334.png
% W# E3 ]6 q! C  f1 m
& r2 n5 T8 l) U! w5 J* gStep5: 通过网页版客户端控制板子上的LED灯。
0 k' A9 u3 W. C: D  q+ C        在发布消息区,填写主题和发布的消息内容(JSON格式)# _0 K8 J; Z8 I3 o: e, a3 k1 F
72.png
, @3 h3 c( P, l& h/ s控制LED灯的消息内容如下,修改”LED_value”的值,就可以控制板子上的LED灯亮灭了。2 h' y! a8 p8 q" }2 C! D6 g
73.png
$ z3 c  b5 R3 P5 z6 v0 l
* N$ M1 K% X! m& C  z% _% ^- m远程固件升级
, {: j4 N) z( c在X-CUBE-AWS软件包里,B-L475E-IOT01的工程里面包括一个远程固件升级的例程,是用HTTP实现的。使用该例程中,升级文件以2K字节的大小下载烧写到Flash。所以要求HTTP服务器支持http/1.1和分段式下载(Progressive http download)。升级文件要求是IAR的sim(simple code file)格式,使用IAR可以直接生成。在软件包里并没有具体说明怎么将升级文件放到http server。这里我们利用AWS的S3来保存升级文件,然后用B-L475E-IOT01板子来测试远程升级的功能。0 ]9 ^! f5 {) R6 M) k% w2 j4 G
在AWS的S3里新建一个bucket,上传升级文件到这个bucket下,如下图(具体操作参考AWS的S3使用说明)  G- f& ^7 L" a( r1 `
47.jpg
: {/ t* j3 P4 W. U% Y$ [点击文件名,获取文件在服务器上的路径,见下图:
* M0 @0 c  U. c3 e& a! ~这里显示的是https的链接地址,但S3支持http,只需要将地址中的https改为http就可以用了。
% i+ Q5 |5 A. d
48.jpg , R% Q1 o7 F: A) x0 W

) z) Y* |8 Y5 f+ a在设备端操作,进行远程固件升级:2 Q, B  u; k/ v" ]" G- x
复位板子,根据串口的提示。在“Firmware version management”阶段,根据提示,选择下载固件,并输入升级文件的URL地址。
2 A  g: g& ]2 ~, L
49.jpg
1 s; I: k. R& B  m" w3 I) G. [' t5 W+ w9 l; j8 J& q+ l) O1 c) B
50.jpg 8 T3 ]! g9 P/ x
- @( _3 _; B: Y+ A2 ]
51.jpg
7 j  H' {) q6 ^  W6 z; Q% o& R

# H4 f+ x( Q4 s+ F' [5 m1 o8 U
; W$ d+ |# W1 o0 E5 m2 k% H前面介绍的是升级文件放在AWS的S3存储服务器上进行升级测试的方法。你也可以通过HTTP File Server来在本地模拟一个HTTP服务器来进行远程固件升级的测试。8 {1 d" V7 V8 D9 }6 ?  }
  @: @$ Y5 }5 x$ M. k
参考文档
  f4 g. `0 G2 |  p* Z2 f1. UM2178—Getting started with X-CUBE-AWS Amazon web services IoT software expansion for STM32Cube+ \; B; A. r8 G1 Y; `- U4 s
2. UM2153-Discovery kit for IoT node, multi-channel communication with STM32L4
# T4 P6 |! E9 `( ^6 d0 M3. AWS IoT Developer Guide.9 `# E! w  M. Z* _  `
1 w' e/ v' q  X% `
* x# F4 n& N+ ~- |5 X' {3 j
使用B-L475E-IOT01A 探索套件连接AWS IOT平台.pdf (1.83 MB, 下载次数: 236)

评分

参与人数 1 ST金币 +1 收起 理由
talos + 1 很给力!

查看全部评分

收藏 5 评论2 发布时间:2017-5-31 11:22

举报

2个回答
suoma 回答时间:2017-5-31 20:55:31
这个套件多少钱?
torvalds66 回答时间:2017-11-22 12:08:45
B-L475E-IOT01A这个板子整体工作起来,功耗大概多少?

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版