使用B-L475E-IOT01A探索套件连接AWS IOT平台 前言5 p3 j8 Y6 C9 ^: r* a) q' tST新近推出一款物联网套件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 。 ST官方提供了用户手册对该套件进行了详细介绍,但对于第一次接触物联网和AWS IOT平台的使用者来说,对于某些功能可能还是会不知道怎么下手。 所以笔者经过自己的尝试后,在本文中将一步步介绍如何连接到AWS IOT平台进行消息的发布订阅,和进行远程固件升级。 AWS 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)签署的证书。证书分配和激活后,保存在设备端。 * R! Y3 V. I/ \* u, H AWS IOT例程 B-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。 ' 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),并且将实例,策略与证书绑定。 Step1:申请一个免费的AWS账户 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 8 j: T6 c P8 Y. i/ }' t$ u* T, J 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 0 z; a/ k0 P1 Z" F6 H AWS IOT平台会产生一个设备证书和一组密钥对,在设备认证时使用。另外还需要下载AWS IOT的根证书(root CA)来进行对服务器的认证。所以这里需要将设备证书,密钥对,AWS IOT的根证书下载并保存在一个安全的地方(第3步)。6 e$ Y5 |* v1 z0 d5 K7 G( d1 C 最后点击Active激活设备证书。 Step4:接下来创建一个Policy并绑定到前面建立的证书。再将证书绑定到前面创建好的实例L475_Node。 Policy的内容规定了对哪些资源可以做哪些操作。可以填写Action和Resource ARN来一条一条的输入,也可以选择Advance mode一次性输入。如下图, / c2 ~7 W5 \1 @& Z: I; s8 H1 z 将下面的policy输入到上图5所指的位置。 * R8 L- j/ C% l $ ~% b/ l$ Q% ?4 o$ I* F8 V, }# v' T 创建好Policy后,接下来将其与前面创建的Certificate绑定。 将证书绑定到实例L475_Node, * G, d Q4 |' } Step5:完成上面的操作后,在Registry--->Things-->L475_Node下的Interact页面里可以看到服务器的地址。这个就是设备要连接的服务器的地址。需要通过串口助手写到Flash中。 * t2 w1 T8 g5 K, q6 z# s 运行AWS IOT例程 现在在云端的设置已经完成,接下来我们打开X-CUBE-AWS软件包中的B-L475E-IOT01对应的AWS例程(\Projects\B-L475E-IOT01\Applications\Cloud\AWS)。 Step1:编译工程,下载到L475探索套件。 , m' _9 d. \! p; W Step2: 复位运行程序,通过串口给WIFI模块配网。串口配置为:115200波特率,8位数据位,无奇偶校验,1位停止位。串口调试工具的具体配置见UM2178. 输入无线路由器的SSID和密码 . R4 g4 o9 k: ?! R6 E% h8 S Step3:输入AWS安全配置 按照串口提示,依次输入AWS的根证书,设备证书,设备私钥,服务器地址(在上一章节“创建AWS IOT安全证书”的Step5中记录下来的服务器地址)和设备名称(L745_Node)等。 如果网络连接没有问题,B-L475E-IOT01板子就会自动连接到AWS IOT平台,并发送消息了。在该例程里,设备的状态信息(板上的传感器数据)是发送到AWS的影子设备的主题:“$aws/things/L475_Node/shadow/update”。 “$”开头的主题是AWS IOT平台的系统保留主题。你也可以发送到自己定义的主题。 Step4: 运行AWS网页版客户端来订阅消息。按照下面的步骤打开网页版客户端。 ( a1 \: e1 i" I8 v! e 这个网页版的客户端连接到服务器的时候,自动订阅了实例的影子设备的主题“$aws/things/L475_Node/shadow/update/accepted”。只要设备有上传信息,这里都可以自动收到。 Step5: 通过网页版客户端控制板子上的LED灯。 在发布消息区,填写主题和发布的消息内容(JSON格式)# _0 K8 J; Z8 I3 o: e, a3 k1 F 控制LED灯的消息内容如下,修改”LED_value”的值,就可以控制板子上的LED灯亮灭了。2 h' y! a8 p8 q" }2 C! D6 g 远程固件升级 在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 ` 点击文件名,获取文件在服务器上的路径,见下图: 这里显示的是https的链接地址,但S3支持http,只需要将地址中的https改为http就可以用了。 在设备端操作,进行远程固件升级:2 Q, B u; k/ v" ]" G- x 复位板子,根据串口的提示。在“Firmware version management”阶段,根据提示,选择下载固件,并输入升级文件的URL地址。 + w9 l; j8 J& q+ l) O1 c) B - @( _3 _; B: Y+ A2 ] 前面介绍的是升级文件放在AWS的S3存储服务器上进行升级测试的方法。你也可以通过HTTP File Server来在本地模拟一个HTTP服务器来进行远程固件升级的测试。8 {1 d" V7 V8 D9 }6 ? } @: @$ Y5 }5 x$ M. k 参考文档 1. 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 3. 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这个板子整体工作起来,功耗大概多少? |