AWS IOT实践,使用Raspberry pi接入AWS

Raspberry/Arduino与IOT 云平台

目前,AWS提供了Windows/Linux/Uinx等多个平台的IOT SDK帮助我们快速的接上AWS IOT云平台,支持的语言有很多,除了传统的偏底层的嵌入式语言C/C++ SDK满足资源有限的硬件设备外,也提供了Java,Python,NodeJs这类高级语言来简化开发,主要是运行在资源相对宽裕的硬件上。一般使用C/C++需要有专业的硬件功底并且需要一段时间来调试,比较耗费人力,所以经常国外的开源电子开发者喜欢走先用比较强大的硬件来快速验证IOT概念,然后逐步实现硬件裁剪节约硬件成本的开发流程。

相比于国内开源电子社区不活跃的现实,国外有一大批的非常成功开源电子项目可以供有关的爱好者研究。其中很出名的就是Raspberry PiArduino,这两种开源电子项目中,Raspberry Pi是非常强大的,主打高性能的IOT硬件开发,可以运行完整的Linux系统,最低都是ARM 1Ghz CPU和 512MB的内存起步,同时自带有线网卡,Wifi,蓝牙和HDMI显示接口,我们基本就可以认为Raspberry Pi就是一个ARM个人计算机,单个Raspberry Pi的发售价格一般都是35美元,大约人民币250左右;相反,Arduino硬件资源就差一些,但是依然比国内的绝大多数电子产品强大,基本上是很有名气的IC厂商的芯片做为主控,比如Intel X86 IOT芯片,ATMEL AVR 8Bit单片机芯片或者是ARM 32bit嵌入式芯片等,一般价格都在人民币50元左右甚至低到20元以下。主打的是贴近硬件价格合适和丰富的软件驱动库构成的生态体系。这两种硬件都有非常好的软硬件件开发体验,无数优质的软件工具包和开发教程,并且获得了所有大型的IOT云平台的支持,比如阿里云 IOT和AWS IOT一般就以这两种硬件做技术教程。

image

AWS IOT 接入Raspberry Pi

控制流程

我以自己以前的比较老旧的Raspberry Pi 1 B+为例子,演示怎么接入AWS IOT云平台,动态上报自己的CPU温度并根据上报的温度更新自己的设备影子。

工作流程是这样的:

  1. AWS IOT 控制台配置好接入口令等信息,先做为硬件设备赋权等准备工作
  2. 然后Rapsberry Pi 1B+(以后简称rpi1b),根据先前准备的赋权口令接入AWS IOT
  3. rpi1b读取自己的cpu温度,并作为设备影子的desired来上报,模拟客户端远程设置rpi1b的温度,(其实是实在没有其他的硬件或者传感器在身边,连LED灯都没有,只有用CPU温度演示了,不然至少可以做到远程开灯)
  4. AWS 接到设备影子的desired,当作客户端对rpi1b的控制操作,那么AWS IOT自动通知rpi1b做出回应
  5. rpi1b收到设备影子的desired变更,就马上将自己的收到的desired回复给AWS IOT。这样Echo自己的CPU温度完成一个完整的控制闭环

步骤

AWS IOT 操作

AWS 创建设备口令信息
image
下一步
image
下一步
image
下一步
image
下一步
image
下一步
image
下一步,下载AWS 提供的SDK包就行了。这里注意下英文,它提示我们先别关页面,下载完后按页面的步骤操作指令,并等待页面显示设备链接上后的回包
image

Windows 操作

传下载下来的压缩文件到树莓派上面,并解压
image

Raspberry Pi 操作

这里就是解压后运行python sdk代码
image

当然,rpi1b 我给它安装的是目前最新的Raspbain OS(基于Debian 10和Ubuntu同源,操作完全一样),期间需要pip安装AWS python 依赖包,基本上到这里就完成了。然后直接运行start.sh就可以在页面上看到rpi1b传到AWS IOT上的消息,这是刚才的页面就可以关了

由于我是在写这个博客前面就做好了测试,所以截图到这里就没有了,后续的start.sh启动脚本修改,python代码的修改的等细节的地方,由于很繁琐但是一般的python程序员都会自己排查问题,所以不再截图细讲

效果

image

我们可以看到设备影子里面,rpi1b上报的温度不断的在跳变,其中当前值略微滞后于期望值,符合实际的控制逻辑
image
image
rpi1b的一些后台的日志信息,方便程序员debug
image

到这里就结束了。代码我会后续的上传到SVN/git上供大家研究和验证