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

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

[复制链接]
zero99 发布时间:2017-5-31 11:22
使用B-L475E-IOT01A探索套件连接AWS IOT平台
前言9 t2 o* b; V: `; W& i' g' i
ST新近推出一款物联网套件B-L475E-IOT01A,支持WIFI,蓝牙,SubG, NFC等多种无线连接方式。 而且因为它还支持Arduino接口,所以使用者也可以很方便的通过Arduino接口来扩展其他的无线连接模块,比如GSM模块。5 {. i, w# K1 ~5 S  G9 Q( Z
这块开发板使用的是ST低功耗MCU系列中的STM32L475这款芯片,拥有1Mbytes的Flash和128Kbytes的SRAM。板上还集成了64Mbits的Quad-SPI Flash。而且板上还搭载了多种传感器,比如温湿度传感器,高性能3轴磁力计,加速度传感器,陀螺仪,接近传感器和压力传感器等。便于开发者用来进行多种应用的演示。
! j- h2 w/ Z$ v/ e# e% G板子上还有两个数字全角度麦克风,所以用这块开发板,还可以实现语音控制的功能。
' Q9 ?* s: T% u' W2 \8 F配合这个套件,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  K" G; c: X# }2 u( u
ST官方提供了用户手册对该套件进行了详细介绍,但对于第一次接触物联网和AWS IOT平台的使用者来说,对于某些功能可能还是会不知道怎么下手。' [/ b% y! Y! ]# x4 J1 K
所以笔者经过自己的尝试后,在本文中将一步步介绍如何连接到AWS IOT平台进行消息的发布订阅,和进行远程固件升级。
; [4 B* f" f0 }
2 F/ ]" U; j: r( v4 d/ m# l; X2 jAWS IOT平台
# f' F8 J+ D" I7 [9 W# w5 wAWS的IOT平台支持各物联网设备之间通过MQTT,HTTP或者Websocket的方式进行双向的,安全的通信。借助AWS IOT,应用程序可以随时跟踪所有设备并与其通信,即使这些设备不在线。
8 }& n+ Y6 z8 J* j1 U0 k在安全方面,AWS采取双向认证,除了对服务器的认证,AWS提供X.509数字证书来认证IOT设备。IOT设备可以使用AWS为其生成的证书,也可以用其他证书颁发机构(CA)签署的证书。证书分配和激活后,保存在设备端。! o4 g5 W3 `6 f( B  t+ A  ~

8 e, e4 z$ ?4 mAWS IOT例程% e# d  r( X& q( {- V1 B
B-L475E-IOT01A对应的STM32 AWS IOT软件扩展包中的例程是基于MQTT的方式与AWS进行连接的,MQTT之下应用了mbedTLS中间件来建立安全连接。
: S" k; |7 F: |- cMQTT(Message Queuing Telemetry Transport)是一个轻量级的通信协议,为资源受限的网络客户端提供一种简单的方式进行消息的交互,在物联网有着广泛的应用。MQTT使用发布/订阅消息的模式,实现一对多消息分发。MQTT运行在TCP之上,基于客户端-服务器架构。在MQTT协议中,有三种角色:发布者(Publisher),代理(Broker),订阅者(Subscriber)。发布者和订阅者是客户端,一般的设备节点,手机APP都是客户端。代理是服务器,像AWS IOT,百度IOT等都是服务器。设备节点和手机APP向代理(AWS,百度云等)发送消息或者订阅消息。
% t# e+ v' e! qSTM32 AWS IOT软件扩展包中的例程中,L475IOT探索套件通过MQTT连接到AWS IOT平台,向AWS IOT平台发布传感器数据。我们可以通过AWS IOT提供的网页客户端来订阅L475IOT探索套件发布的消息。在下面,将介绍如何一步步搭建并运行这个例程。
$ f& r# A, h# o+ [. S3 M硬件连接方面很简单,将B-L475E-IOT01A板子通过ST-LINK接口连接到PC。PC上安装好一个串口调试工具,推荐用Tera Term。另外需要一个可以连接到外网的无线路由器, B-L475E-IOT01A将通过这个无线路由器上网,连接到AWS IOT平台。串口调试工具用来在首次运行时对B-L475E-IOT01A板子上的WIFI模块进行配网和进行AWS的安全配置等,并输出程序运行信息。具体可以参考ST官方文档UM2178。
6 Y3 `% K1 ?: M$ f
* G  F* S% x- j4 h创建AWS IOT安全证书
7 @' f/ c3 W& M1 f# m: i在用L475IOT探索套件连接AWS IOT之前,需要先在AWS IOT平台上创建实例(Things),策略(Policy)和证书(Certificates),并且将实例,策略与证书绑定。
; t, ]+ i3 c7 Q/ zStep1:申请一个免费的AWS账户
7 E2 ^, b! s4 E1 b( nStep2:登录AWS,进入AWS IoT控制台6 R# `1 _$ ^* V* a7 e
           选择注册“Registry”---->实例”Things“。在这一步,我们会新注册一个名为L475_Node的实例.5 y6 p, v9 e  H; g8 Z! a+ J# U
21.jpg
; |+ d% s) J  R3 o1 d8 ^  q9 N0 Z
1 i. e9 f& D; G- M5 D
22.jpg ' o  ]* q8 e$ {. {
; f/ y. ^( E% r
23.jpg
+ W- f/ f# R2 y
$ ?: U$ r3 k% L1 |3 x1 G' M      L475_Node已经注册完成,接下来需要创建设备证书。
' O* W7 x3 x5 @3 E" ^; Q& G8 L      Step3: 在实例(Thing)L475_Node下,选择安全(Security)。按照下面的步骤创建并激活设备证书。% M$ @/ Q, \8 Z" R0 u- N; i1 Z
, D4 x" D( f, O$ C  Y  L) x$ o6 c
24.jpg
4 v+ W+ I. ?# b) o5 [' U$ i! g, H8 }; ?) V4 p1 K1 O$ T1 o# A
25.jpg
" o, m) ~3 g7 Y. Y0 r
$ E# o8 Z( P0 a. XAWS IOT平台会产生一个设备证书和一组密钥对,在设备认证时使用。另外还需要下载AWS IOT的根证书(root CA)来进行对服务器的认证。所以这里需要将设备证书,密钥对,AWS IOT的根证书下载并保存在一个安全的地方(第3步)。
- T4 u  w1 f9 c. b3 i最后点击Active激活设备证书。
& _# V8 E* K1 u7 b5 |' T  [% UStep4:接下来创建一个Policy并绑定到前面建立的证书。再将证书绑定到前面创建好的实例L475_Node。0 ~6 l: o3 u% a6 A! {# a+ t% H
26.png $ L3 x6 \4 y8 j6 d. N
  O0 e1 C+ q, v  |5 b
27.jpg ' o" F9 B% H" D* D: R/ w
9 Z. Q! {" }" s6 h
28.jpg
9 q) a+ |5 ?* L' c- Q7 c1 X7 r2 I8 T- a# b4 a& |
Policy的内容规定了对哪些资源可以做哪些操作。可以填写Action和Resource ARN来一条一条的输入,也可以选择Advance mode一次性输入。如下图,
2 O& P+ d; U. c2 ?! p
& U+ h/ u4 F5 ?. I  F7 x
29.jpg ; H, F+ i3 z0 W" m% i' V
0 ]9 Y4 `& d- }+ ]& v
将下面的policy输入到上图5所指的位置。- u* `& z3 d; V  B: N) _1 a; o  \  B
30.jpg $ A% Y3 P2 c% q
31.jpg & v, ^0 f5 E. [. D$ c; z

& f7 q( [" O9 i$ l2 Z; G8 F8 l4 ?7 @" K, r
创建好Policy后,接下来将其与前面创建的Certificate绑定。2 |+ s5 W( v. x) [) s. q4 C$ N+ N
32.jpg
$ b1 U- q4 d4 j6 R: D% H7 H) m, p! V& p' N) _/ f3 O& u# ~
33.jpg
, b, A$ A, Z% l' H8 A/ y将证书绑定到实例L475_Node,% f, U$ Y1 a' k9 x4 u
34.jpg 7 o& r% Q' v5 F6 e: `8 y3 H6 {
35.jpg + [# u" f8 P8 R

- Y$ L  D. d' }! \, K  x) ]( EStep5:完成上面的操作后,在Registry--->Things-->L475_Node下的Interact页面里可以看到服务器的地址。这个就是设备要连接的服务器的地址。需要通过串口助手写到Flash中。
! k1 m% n3 T, @
36.jpg   n+ T( C( H5 S+ n# y( m

+ D0 S+ c( t4 f运行AWS IOT例程
* N" x0 Q" Y$ p4 A! \# q6 W, z! m* X现在在云端的设置已经完成,接下来我们打开X-CUBE-AWS软件包中的B-L475E-IOT01对应的AWS例程(\Projects\B-L475E-IOT01\Applications\Cloud\AWS)。
+ m4 G% g' p" a5 G  f+ [Step1:编译工程,下载到L475探索套件。! K4 o, F/ v3 S5 F: J4 i( I. S
37.jpg + b8 H' @. ?" e# [* W0 r

# U  {6 C, ]; Q9 v5 q1 QStep2: 复位运行程序,通过串口给WIFI模块配网。串口配置为:115200波特率,8位数据位,无奇偶校验,1位停止位。串口调试工具的具体配置见UM2178.6 x! Z; L( p" M! i
38.jpg . A7 c  q  Z1 S* O+ O
输入无线路由器的SSID和密码
, J$ K: e2 w4 q2 u
39.jpg
! F* D+ y! V1 n8 x: Y0 P. O/ c. h$ |2 \
Step3:输入AWS安全配置
: X2 Q' d) a( @. T! u' N2 E按照串口提示,依次输入AWS的根证书,设备证书,设备私钥,服务器地址(在上一章节“创建AWS IOT安全证书”的Step5中记录下来的服务器地址)和设备名称(L745_Node)等。
" f- T0 C3 [+ ~2 n如果网络连接没有问题,B-L475E-IOT01板子就会自动连接到AWS IOT平台,并发送消息了。在该例程里,设备的状态信息(板上的传感器数据)是发送到AWS的影子设备的主题:“$aws/things/L475_Node/shadow/update”。 “$”开头的主题是AWS IOT平台的系统保留主题。你也可以发送到自己定义的主题。
5 f4 I& E8 B4 }; i: x  D; O
40.jpg
3 C4 G9 S3 s0 N- G
. P# B! y9 I* S* s' qStep4: 运行AWS网页版客户端来订阅消息。按照下面的步骤打开网页版客户端。$ E1 V9 J' x; R
41.jpg
1 O& Q% _, B2 {& ]. ^8 {- e, d+ v4 a& [2 [* q4 |  R
42.jpg 1 `9 T. E( {& Z3 p4 O% K

  f2 u$ r/ z/ [6 p! o) E4 m9 M; |& e
43.jpg
+ S! w$ j, b9 D2 Y这个网页版的客户端连接到服务器的时候,自动订阅了实例的影子设备的主题“$aws/things/L475_Node/shadow/update/accepted”。只要设备有上传信息,这里都可以自动收到。# L1 c' `& `# z& G
33334.png 9 l, y1 k4 b% I( o, Z' n
  @2 p6 a8 U8 A  U- W# [" M& U
Step5: 通过网页版客户端控制板子上的LED灯。
7 m5 A$ |4 \2 k. ~        在发布消息区,填写主题和发布的消息内容(JSON格式)6 Y9 g7 R2 A2 O) ]6 x5 ^
72.png
1 P( i+ b* v4 o& V控制LED灯的消息内容如下,修改”LED_value”的值,就可以控制板子上的LED灯亮灭了。
1 E6 \5 c8 Z; W0 d7 k
73.png
! i( r& `+ z, m8 b  J. V$ s; z; ~, O& |4 I7 ]! }$ w
远程固件升级
2 m8 X+ L5 w# _2 a在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板子来测试远程升级的功能。
2 t0 J* E( F" v" R7 O在AWS的S3里新建一个bucket,上传升级文件到这个bucket下,如下图(具体操作参考AWS的S3使用说明)
) _  D$ J9 P; V) Z2 p7 a3 I
47.jpg
% Z: d1 O1 d& z+ Y) _点击文件名,获取文件在服务器上的路径,见下图:# S4 |3 e* k  [1 ^5 h3 v8 u
这里显示的是https的链接地址,但S3支持http,只需要将地址中的https改为http就可以用了。% O, g% o% n: x7 K% k8 K
48.jpg ( e) t+ B8 }- A; g
. l# ~# v- N1 T2 E2 D
在设备端操作,进行远程固件升级:
/ c: X" r+ G) J& P复位板子,根据串口的提示。在“Firmware version management”阶段,根据提示,选择下载固件,并输入升级文件的URL地址。/ d& P5 J( V) A
49.jpg
6 y. `8 J; V% B
3 n" c: y+ @# [
50.jpg ' C" {  l- S! O% a  z* R$ e
4 |' [* a1 c: Y. ?' \* \
51.jpg
) R9 R1 t5 V* m4 }  z
0 X! g  }2 h# s/ g. O
. {2 k' U# k% |% ]! k6 m- o' {
前面介绍的是升级文件放在AWS的S3存储服务器上进行升级测试的方法。你也可以通过HTTP File Server来在本地模拟一个HTTP服务器来进行远程固件升级的测试。
( g; {" [+ n8 ^# O- ]) m. S* t* H. |6 \6 ^; t$ x: K
参考文档
+ r# P1 p4 J+ T. c1. UM2178—Getting started with X-CUBE-AWS Amazon web services IoT software expansion for STM32Cube3 a' Q  M1 b+ L$ L- Z! N2 N+ n% G
2. UM2153-Discovery kit for IoT node, multi-channel communication with STM32L4' X2 `& [* L+ r4 ?
3. AWS IoT Developer Guide.
! F' S* f, \5 N5 J, D7 @
  _+ [" o# S1 U* {' P* F
% P" |# c2 h% |  V1 N 使用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 手机版