前言
好久没折腾过硬件了, 翻出了吃灰1年多的树莓派3B体验一下与 AWS IoT 物联网的联动, 参考官方文档:
https://docs.aws.amazon.com/iot/latest/developerguide/connecting-to-existing-device.html
AWS准备工作
AWS IoT 与硬件之间的通信依赖X.509证书进行加密并通过policy的策略进行限制, 所以需要先在AWS控制台做下面的准备工作:
创建policy
打开 Amazon IoT 控制台, 依次 Security - Policies - Create policy
分别添加 iot:Coonect
, iot:Receive
, iot:Publish
, iot:Subscribe
的Allow权限, 为了方便实验, resource就不做具体限制了, 直接*
通配
创建 thing
创建好policy后回到左侧导航栏 All devices - Things - Create things
因为实验就一台设备, 所以选择 Create single thing
起个名字, 注意这个名字后面是不能修改的, 其他保持默认设置继续
选择推荐的自动生成证书
勾选上刚才创建的policy继续
下载证书/密钥
分别下载生成的证书和密钥文件, 注意公钥和私钥文件只能在这个界面进行下载, 关了就没法再下载了, 需要重新生成新的.
一共有5个文件, 对应说明:
文件名 | 说明 |
---|---|
xxxx-certificate.pem | 设备证书, 用于与目标物理设备绑定 |
xxxx-private.pem | 私钥 |
xxxx-public.pem | 公钥 |
AmazonRootCA1.pem | Amazon trust services endpoint 根证书 (RSA 2048 bit) |
AmazonRootCA3.pem | Amazon trust services endpoint 根证书 (ECC 256 bit) |
本次实验中将会用到的是RSA 2048 bit
算法的AmazonRootCA1.pem
文件作为根证书, 同时还需要xxxx-certificate.pem
设备证书和xxxx-private.pem
私钥, 后面将会用到这三个文件. 都下载好后点击Done关闭弹窗.
再次回到左侧导航栏最底部 Settings, 复制 Endpoint 对应的网址到记事本后面会用到. IoT控制台的准备工作至此告一段落.
硬件准备工作
也不记得之前树莓派的TF卡里面有啥东西了, 直接用 Raspberry Pi Imager 重新刷了最新版本的 Raspberry Pi OS Lite (32-bit), 这个版本是基于 Debian 11 Bullseye 魔改的. SSH 连上开始下面的操作:
# 先替换国内镜像
sudo sed -i 's|raspbian.raspberrypi.org|mirrors.ustc.edu.cn/raspbian|g' /etc/apt/sources.list
sudo sed -i 's|//archive.raspberrypi.org|//mirrors.ustc.edu.cn/archive.raspberrypi.org|g' /etc/apt/sources.list.d/raspi.list
# 更新和安装依赖
sudo apt update
sudo apt upgrade -y
sudo apt install -y cmake libssl-dev git python3-pip
# 使用豆瓣pip镜像
pip config set global.index-url https://pypi.doubanio.com/simple
# 安装 AWS IoT Device SDK
cd ~
pip install awsiotsdk
git clone https://github.com/aws/aws-iot-device-sdk-python-v2.git
# github访问有困难可以用下面gitee上的镜像
# git clone https://gitee.com/mirrors_aws/aws-iot-device-sdk-python-v2.git
Hello IoT World
IoT 通信用到的是MQTT
协议1 下面的测试程序会用MQTT
库创建名为topic_1
的主题, 并发送10条消息到这个主题.
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。
首先将第一步在AWS控制台中生成的三个证书/密钥文件上传到树莓派~/certs
文件夹中, 方便后面操作重命名一下:
文件名 | 说明 |
---|---|
certificate.pem | 设备证书, 用于与目标物理设备绑定 |
private.pem | 私钥 |
AmazonRootCA1.pem | Amazon trust services endpoint 根证书 (RSA 2048 bit) |
/home/pi/certs/
├── AmazonRootCA1.pem
├── certificate.pem.crt
└── private.pem.key
调用aws-iot-device-sdk-python-v2
中自带的演示应用, 注意将your-iot-endpoint
替换为第一步在AWS控制台准备工作最后Settings中复制到记事本的那个网址
cd ~/aws-iot-device-sdk-python-v2/samples
python3 pubsub.py --topic topic_1 --ca_file ~/certs/AmazonRootCA1.pem --cert ~/certs/certificate.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint
成功输出下面信息:
回到 AWS IoT 控制台检查树莓派发送的消息, 左侧导航栏: MQTT test client - Topic filter 输入topic_1
- Subscribe, 订阅后再次在树莓派的SSH中执行上面的测试程序, 可以观察到控制台中同步接收到了传来的Hello World消息.
总结
本次实验只是进行了最基本的物理设备与 AWS IoT 互联并通过 MQTT 协议发送/接受消息, 对于实际应用场景而言使用到更多的会是商用级的硬件设备已经封装好了更简洁的配置界面, 整体思路而言其实是一样的, 主要就是在 AWS 控制台配置好policy, 定义/添加 thing, 创建证书并在设备上正确关联.文章来源:https://www.toymoban.com/news/detail-780951.html
-
MQTT协议介绍 https://www.runoob.com/w3cnote/mqtt-intro.html ↩︎文章来源地址https://www.toymoban.com/news/detail-780951.html
到了这里,关于树莓派 + AWS IoT 入门实验的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!