副标题:AWS IoT设定手顺和树莓派mosquitto安装
看到AWS登录信用卡后可以免费使用1年的消息,正好手头有个树莓派3,看看能不能连动做点好玩的东西。
下面内容就是我初次使用AWS的云服务IoT,做了一个动态监控并邮件报警的小系统。
场景
树莓派作为一个消耗电力极少的微型计算机,可以作为很好的长时运行服务器。当然也包括监控用途。我想定的场景是,利用树莓派和USB摄像头,做成一个监控摄像头。如果监控的范围内有变动的话,截图上传到GoogleDrive,将截图地址发送给指定的Gmail邮箱。
需要有的硬件
- 树莓派 3B
- 作业用Macbook/PC
- USB摄像头
- 我使用的罗技 C370 USB摄像头。免安装驱动。最好买官方验证过的摄像头,可以绕过很多坑。
- 下面的手顺到今天还没有用到USB摄像头,可以先提前准备和测试。
1 整体概念
这篇文章里实现的是 mosquitto→AWS→Gmail(红框中内容)的流程。
AWS IoT流程概念图:下面按照这个流程图设定AWS。
2 AWS IoT配置
准备工作
注册AWS帐号
- 这个帐号跟amazon购物用的帐号不通用,请另外申请。注意,需要绑定信用卡。
正式作业
2-0 选择对应的服务。图标和名称如下
2-1 进入IoT设置页面。
※ 类型(type)暂时无视,不需要创建。
2-2 创建规则
点击 Add action创建规则对应的反应事件
2-3 创建规则对应的反应事件
这里做成发送通知邮件。
在下面页面登记MQTT需要的主题(Topic)和订阅者列表(Subscriptions)。
创建主题
创建完成的页面
点击 Public to topic 和 Create Subscription按钮,开始登记收听端列表(只创建一个测试用)
在弹出窗口中输入信息
邮箱会收到验证用邮件,点击链接通过验证
验证后,就变成下面的状态
此时进入之前规则制定窗口(主题创建的网页可以关掉),选择对应选项后,点击 Add action按钮
在下面页面,点击Create rule,完成创建
创建完成如下图
2-4 创建策略
- 可以简单理解成,把事务,规则,主题什么的配置在同一个文件中用于管理的一个方式。
-
需要注意的是,创建完成后,需要跟保证安全的CA证书,事务,主题绑定。
点击 Policies和Create a policy
创建后的策略
2-5 安全对策
AWS平台发行CA证书以及密钥,保证通信的安全性。
按照下图选择1 Certificates和点击2 Create a certificate 按钮
点击Create certificate 按钮
生成后的密钥下载页面。先下载保存在本地,最终会上传到Raspberry pi上。
证书情报查看页面,但是已经生成的密钥不能再检索。
证书生成完成后,就需要绑定事务和策略
首先选择 Attach policy
CA证书用同样的方式进行绑定。
接下来就是激活证书,使其可用。
点击下面页面中 Activate
提示已被激活
3 Raspberry Pi配置
Raspberry Pi 和AWS IoT之间的通信采用MQTT协议,请google自行学习。或者参照我的另一篇MQTT协议理解。
准备工作
Raspberry Pi 3 提前安装好raspbain系统。
开通SSH或者VNC,以便通过自己的macboook/PC操控
Raspberry Pi 设置
3-1 执行下面命令,按照MQTT客户端。
$ sudo apt-get install -y mosquitto-clients
3-2 做成作业目录。用来保存CA证书。
$ mkdir aws-iot && cd $_
3-3将本地保存的下面三个CA证书,上传到2中生成的文件夹中。
XXXX-certificate.pem.crt
XXXX-private.pem.key
rootCA.pem
※不包含XXXX-public.pem.key证书
※rootCA.pem如果丢失,可以从下面url下载
rootCA.pem下载
执行下面命令,分别把3个证书上传到aws-iot中
scp 本地文件路径 pi@192.168.0.X:/home/pi/aws-iot
3-4 执行pub命令,测试
mosquitto_pub --cafile rootCA.pem
--cert 发行证书前半部分-certificate.pem.crt
--key 发行key前半部分-private.pem.key
-h 服务地址前半部分.iot.ap-northeast-1.amazonaws.com
-p 8883 -q 1 -d
-t topic/sns
-m '{"message":"Raspberry Pi "}'
※ -m '{"message":"Raspberry Pi "}',最后"Raspberry Pi "部分会换成GoogleDrive的地址,此时内容可以随意。
★★★★★★★★★★★★
mosquitto_pub执行是坑最多最多的地方。以下几点需要注意!
要保证命令执行位置在aws-iot
-
确保mosquitto是最新。
- 现在最新版本是1.4.12
- 检查mosquitto_pub版本命令
mosquitto_pub --help | grep version
- 升级mosquitto_pub版本命令方法1
>$ sudo apt-get update
>$ sudo apt-get install mosquitto-clients- 升级mosquitto_pub版本命令方法2
GPG key安装
$ sudo wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key
$ sudo apt-key add mosquitto-repo.gpg.key
安装mosquitto-jessie.list
$ sudo wget http://repo.mosquitto.org/debian/mosquitto-jessie.list -O /etc/apt/sources.list.d/mosquitto-jessie.list
安装mosquitto
$ sudo apt-get update
$ sudo apt-get install mosquitto mosquitto-clients
-
Error: The connection was lost....发生的时候
- 确保AWS上的 事务,CA,策略 是绑定OK的,且CA是激活状态。
- 确保-h参数的主题名称和策略中的Resource匹配。最简单办法是Resource设置成* 。
降级mosquitto(估计用不着,网上找的解决方案记录一下)
查询已经安装的程序,顺便记住程序全名
apt list mosquitto*删除对应程序
apt-get –purge remove XXXX(第一步里面的名称)
重启系统
安装旧版本程序
然后下载代码,自己编译1.安装和使用注意点
1.1 安装
版本为mosquitto-1.4.5
下载源代码包
wget http://mosquitto.org/files/source/mosquitto-1.4.5.tar.gz
解压
tar zxfv mosquitto-1.4.5.tar.gz
进入目录
cd mosquitto-1.4.5
编译
make
安装
sudo make install
1.2 安装注意点
【1】编译找不到openssl/ssl.h
【解决方法】——安装openssl
sudo apt-get install libssl-dev
【2】编译过程找不到ares.h
sudo apt-get install libc-ares-dev
【3】编译过程找不到uuid/uuid.h
sudo apt-get install uuid-dev
【4】使用过程中找不到libmosquitto.so.1
error while loading shared libraries: libmosquitto.so.1: cannot open >shared object file: No such file or directory
【解决方法】——修改libmosquitto.so位置创建链接
sudo ln -s /usr/local/lib/libmosquitto.so.1 /usr/lib/libmosquitto.so.1
更新动态链接库
sudo ldconfig
【5】make: g++:命令未找到
【解决方法】
安装g++编译器
sudo apt-get install g++
★★★★★★★★★★★★
3-5 测试结果(gmail邮件)
到这一步为止,Raspberry Pi→ AWS IoT → SNS 已经疏通。
下一步
使用motion程序,进行动态监控和触发警报邮件