打印
[信息]

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

[复制链接]
1983|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
IOT, AWS, AC, ST, TE
本帖最后由 香水城 于 2017-8-11 14:13 编辑

使用B-L475E-IOT01A探索套件连接AWS IOT平台
前言
ST新近推出一款物联网套件B-L475E-IOT01A,支持WIFI,蓝牙,SubG, NFC等多种无线连接方式。 而且因为它还支持Arduino接口,所以使用者也可以很方便的通过Arduino接口来扩展其他的无线连接模块,比如GSM模块。
这块开发板使用的是ST低功耗MCU系列中的STM32L475这款芯片,拥有1Mbytes的Flash和128Kbytes的SRAM。板上还集成了64Mbits的Quad-SPI Flash。而且板上还搭载了多种传感器,比如温湿度传感器,高性能3轴磁力计,加速度传感器,陀螺仪,接近传感器和压力传感器等。便于开发者用来进行多种应用的演示。
板子上还有两个数字全角度麦克风,所以用这块开发板,还可以实现语音控制的功能。
配合这个套件,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平台
AWS的IOT平台支持各物联网设备之间通过MQTT,HTTP或者Websocket的方式进行双向的,安全的通信。借助AWS IOT,应用程序可以随时跟踪所有设备并与其通信,即使这些设备不在线。
在安全方面,AWS采取双向认证,除了对服务器的认证,AWS提供X.509数字证书来认证IOT设备。IOT设备可以使用AWS为其生成的证书,也可以用其他证书颁发机构(CA)签署的证书。证书分配和激活后,保存在设备端。

AWS IOT例程
B-L475E-IOT01A对应的STM32 AWS IOT软件扩展包中的例程是基于MQTT的方式与AWS进行连接的,MQTT之下应用了mbedTLS中间件来建立安全连接。
MQTT(Message Queuing Telemetry Transport)是一个轻量级的通信协议,为资源受限的网络客户端提供一种简单的方式进行消息的交互,在物联网有着广泛的应用。MQTT使用发布/订阅消息的模式,实现一对多消息分发。MQTT运行在TCP之上,基于客户端-服务器架构。在MQTT协议中,有三种角色:发布者(Publisher),代理(Broker),订阅者(Subscriber)。发布者和订阅者是客户端,一般的设备节点,手机APP都是客户端。代理是服务器,像AWS IOT,百度IOT等都是服务器。设备节点和手机APP向代理(AWS,百度云等)发送消息或者订阅消息。
STM32 AWS IOT软件扩展包中的例程中,L475IOT探索套件通过MQTT连接到AWS IOT平台,向AWS IOT平台发布传感器数据。我们可以通过AWS IOT提供的网页客户端来订阅L475IOT探索套件发布的消息。在下面,将介绍如何一步步搭建并运行这个例程。
硬件连接方面很简单,将B-L475E-IOT01A板子通过ST-LINK接口连接到PC。PC上安装好一个串口调试工具,推荐用Tera Term。另外需要一个可以连接到外网的无线路由器, B-L475E-IOT01A将通过这个无线路由器上网,连接到AWS IOT平台。串口调试工具用来在首次运行时对B-L475E-IOT01A板子上的WIFI模块进行配网和进行AWS的安全配置等,并输出程序运行信息。具体可以参考ST官方文档UM2178。

创建AWS IOT安全证书
在用L475IOT探索套件连接AWS IOT之前,需要先在AWS IOT平台上创建实例(Things),策略(Policy)和证书(Certificates),并且将实例,策略与证书绑定。
Step1:申请一个免费的AWS账户
Step2:登录AWS,进入AWS IoT控制台
           选择注册“Registry”---->实例”Things“。在这一步,我们会新注册一个名为L475_Node的实例.






      L475_Node已经注册完成,接下来需要创建设备证书。
      Step3: 在实例(Thing)L475_Node下,选择安全(Security)。按照下面的步骤创建并激活设备证书。





AWS IOT平台会产生一个设备证书和一组密钥对,在设备认证时使用。另外还需要下载AWS IOT的根证书(root CA)来进行对服务器的认证。所以这里需要将设备证书,密钥对,AWS IOT的根证书下载并保存在一个安全的地方(第3步)。
最后点击Active激活设备证书。
Step4:接下来创建一个Policy并绑定到前面建立的证书。再将证书绑定到前面创建好的实例L475_Node。






Policy的内容规定了对哪些资源可以做哪些操作。可以填写Action和Resource ARN来一条一条的输入,也可以选择Advance mode一次性输入。如下图,



将下面的policy输入到上图5所指的位置。




创建好Policy后,接下来将其与前面创建的Certificate绑定。



将证书绑定到实例L475_Node,



Step5:完成上面的操作后,在Registry--->Things-->L475_Node下的Interact页面里可以看到服务器的地址。这个就是设备要连接的服务器的地址。需要通过串口助手写到Flash中。


运行AWS IOT例程
现在在云端的设置已经完成,接下来我们打开X-CUBE-AWS软件包中的B-L475E-IOT01对应的AWS例程(\Projects\B-L475E-IOT01\Applications\Cloud\AWS)。
Step1:编译工程,下载到L475探索套件。



Step2: 复位运行程序,通过串口给WIFI模块配网。串口配置为:115200波特率,8位数据位,无奇偶校验,1位停止位。串口调试工具的具体配置见UM2178.

输入无线路由器的SSID和密码



Step3:输入AWS安全配置
按照串口提示,依次输入AWS的根证书,设备证书,设备私钥,服务器地址(在上一章节“创建AWS IOT安全证书”的Step5中记录下来的服务器地址)和设备名称(L745_Node)等。
如果网络连接没有问题,B-L475E-IOT01板子就会自动连接到AWS IOT平台,并发送消息了。在该例程里,设备的状态信息(板上的传感器数据)是发送到AWS的影子设备的主题:“$aws/things/L475_Node/shadow/update”。 “$”开头的主题是AWS IOT平台的系统保留主题。你也可以发送到自己定义的主题。


Step4: 运行AWS网页版客户端来订阅消息。按照下面的步骤打开网页版客户端。





这个网页版的客户端连接到服务器的时候,自动订阅了实例的影子设备的主题“$aws/things/L475_Node/shadow/update/accepted”。只要设备有上传信息,这里都可以自动收到。



Step5: 通过网页版客户端控制板子上的LED灯。
        在发布消息区,填写主题和发布的消息内容(JSON格式)

控制LED灯的消息内容如下,修改”LED_value”的值,就可以控制板子上的LED灯亮灭了。


远程固件升级
在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板子来测试远程升级的功能。
在AWS的S3里新建一个bucket,上传升级文件到这个bucket下,如下图(具体操作参考AWS的S3使用说明)

点击文件名,获取文件在服务器上的路径,见下图:
这里显示的是https的链接地址,但S3支持http,只需要将地址中的https改为http就可以用了。


在设备端操作,进行远程固件升级:
复位板子,根据串口的提示。在“Firmware version management”阶段,根据提示,选择下载固件,并输入升级文件的URL地址。





前面介绍的是升级文件放在AWS的S3存储服务器上进行升级测试的方法。你也可以通过HTTP File Server来在本地模拟一个HTTP服务器来进行远程固件升级的测试。

参考文档
1. UM2178—Getting started with X-CUBE-AWS Amazon web services IoT software expansion for STM32Cube
2. UM2153-Discovery kit for IoT node, multi-channel communication with STM32L4
3. AWS IoT Developer Guide


  对应的PDF:使用B_L475E_IOT01A 探索套件连接AWS IOT平台
  更多实战经验请看:【ST MCU实战经验汇总贴


沙发
frognidie| | 2017-6-7 16:44 | 只看该作者
好复杂啊

使用特权

评论回复
板凳
吃萝卜的猴子| | 2017-7-21 15:48 | 只看该作者
我最近也在搞这玩意,不知道楼主有没有把AWS IOT移植到Linux平台下呢,交流交流,QQ403961587

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:意法半导体(中国)投资有限公司
简介:STM32技术专家

596

主题

17108

帖子

288

粉丝