如果涉及某种程度的计算,Raspberry Pi一直是开发基于IoT的应用程序的首选。凭借python的灵活性和强大的开发人员社区,使用Pi可以非常容易地收集,记录,分析或报告一组数据。在本教程中,我们将学习如何将Raspberry Pi与Amazon AWS服务融合在一起,以在线将数据发布到Internet。
在本教程中,我们将使用DHT11传感器读取“温度和湿度”值,然后连接到AWS IOT服务并使用AWS IOT SDK更新传感器值。然后可以在Amazon IOT控制台中可视化这些数据,以确保我们将数据发布到互联网上。
您还可以使用AWS Elastic Search Service提取这些传感器价位并将其存储在数据库中,然后使用Kibana Dashboard服务将传感器数据可视化为整洁的绘制图形。有趣吗?所以,让我们开始吧…
先决条件:
本教程假定您已经创建了免费的AWS帐户,并且了解有关AWS IoT服务的基础知识,例如创建事物,证书,策略以及使用它发布值。否则,请阅读以下教程。
- 使用MQTT.fx的Amazon AWS IOT入门
它还假设您知道如何将LCD和DHT11传感器连接到Raspberry Pi,并且已经在Pi上安装了用于执行此操作的库。如果没有,请继续以下教程。
- 将DHT11与Raspberry Pi接口
在以上教程的最后,您将在AWS-IOT上创建一个事物,并且还应该具有该事物的代理地址以及访问事物所需的证书。我们还假定您的Raspberry pi已经安装了操作系统,并已连接到Internet。有了这些功能后,我们就可以继续进行本教程。如果您不熟悉Raspberry Pi,请先阅读Raspberry pi入门。
在Raspberry Pi上安装适用于Python的AWS IOT设备SDK:
要在Pi上使用AWS服务,我们可以安装两个SDK之一。一个是使用JavaScript作为编程语言的JavaScript SDK,另一个是显然使用python作为编程语言的Python SDK。在这里,我们选择Python作为我们的SDK,因为我们对Python的理解比对JavaScript的适应性更高。
有关AWS IOT SDK的完整信息,请访问其GitHub页面。
步骤1:要在您的Pi上安装SDK,请打开终端,然后键入以下命令
git clone
步骤2:这应该已经在Pi上安装了 aws 目录,现在使用以下命令进入该目录。
CD AWS - IOT -device- SDK -python
步骤3:在目录中,使用下面的行安装安装文件
python setup.py安装
电路原理图:
在硬件方面,我们将Raspberry Pi连接到DHT11传感器和LCD屏幕。DHT11用于获取温度和湿度的值,LCD用于显示该值和调试信息。相同的电路图如下所示。
无论是LCD和DHT11传感器的作品与+ 5V电源,所以我们使用的树莓派的5V引脚功率两者。DHT11传感器的输出引脚上使用值1k的上拉电阻,如果使用模块,则可以避免使用该电阻。
将10k的微调电位计添加到LCD的Vee引脚,以控制LCD的对比度。除此之外,所有连接都非常简单。但是请记下您正在使用哪些GPIO引脚来连接这些引脚,因为我们的程序需要这样做。下表可以帮助您确定GPIO引脚号。
使用图表并根据电路图进行连接。我使用了一块面包板和跳线来建立连接。由于我使用了模块,因此将其直接连接到Raspberry Pi。我的硬件如下所示
对Raspberry Pi进行编程:
在我们的python程序中,我们必须读取温度和湿度的值,将其显示在LCD屏幕上,并将这两个值都发布到我们在上一教程中已经创建的Amazon IOT上。因此,请确保您已创建事物,并且具有所有三个密钥文件以及已创建事物的代理地址。
在我们的python程序中,我们必须链接三个密钥文件,以便Raspberry Pi可以访问发布关于我们事物的值。因此,将所有三个关键文件复制并粘贴到Raspberry pi的桌面上,因为我们在程序中将需要它们的路径地址。
该完整的Python程序可以在这个页面的底部找到,你可以根据你所创建的东西编辑代理地址和路径的目录后,使用该程序。进一步,下面我用小片段解释了该代码。
我们首先导入项目所需的库。三个主要库是AWS开发工具包,LCD库和DHT库,请确保已安装所有三个Pi。的 时间 和 日期时间 库将被默认安装。
从AWSIoTPythonSDK.MQTTLib导入AWSIoTMQTTClient#从AWS-IoT库 导入时间导入#要创建从日期时间导入日期,日期时间的延迟 #要获取日期和时间,将Adafruit_CharLCD作为LCD导入#导入LCD库导入Adafruit_DHT#导入传感器的DHT库
在下一行中,我们必须提供Thing详细信息,例如代理地址,客户名称以及证书和密钥文件的路径。在这里,我将客户端名称用作 new_Client ,可以使用您选择的相同名称或任何名称。代理地址应更改为您创建的事物的地址,路径目录也应根据您的事物进行更改。除了这两点,您无需在以下几行中进行任何更改。
myMQTTClient = AWSIoTMQTTClient(“ new_Client”) myMQTTClient.configureEndpoint(“ qwert1234567yuio89.iot.us-east-2.amazonaws.com”,8883) myMQTTClient.configureCredentials(“ / home / pi / Desktop / ESP32_Thing certificate / CA.pem”, “ / home / pi / Desktop / ESP32_Thing证书/private.pem.key"、"/home/pi/Desktop/ESP32_Thing证书 /certificate.pem.crt”)myMQTTClient.configureOfflinePublishQueueing(-1)#无限离线发布队列 myMQTTClient。 configureDrainingFrequency(2)# 消耗 :2 Hz myMQTTClient.configureConnectDisconnectTimeout(10)#10秒myMQTTClient.configureMQTTOperationTimeout(5)#5秒
接下来,我们必须指定连接的引脚详细信息。每个引脚的GPIO引脚号分配给其各自的名称。在这里,我们在引脚17上使用了DHT传感器,在4位模式下使用了LCD。相同的代码如下所示
sensor_name = Adafruit_DHT.DHT11#我们正在使用DHT11 sensor_pin = 17#传感器已连接至Pi lcd_rs上的 GPIO17 = 7 #LCD的RS已连接至PI上的GPIO 7 lcd_en = 8 #LCD的EN已连接至GPIO 8上PI lcd_d4 = 25#LCD的D4被连接到GPIO 25上PI lcd_d5 = 24#LCD的D5连接到GPIO 24上PI lcd_d6 = 23#LCD的D6被连接到GPIO 23上PI lcd_d7 = 18#的D7 LCD已连接至PI lcd_backlight = 0上的GPIO 18 #LED未连接,因此我们分配给0
然后,我们初始化LCD并在LCD屏幕上显示一则简短的介绍性消息。之后,我们将尝试使用上面输入的代理地址和密钥文件与AWS事物连接。如果连接成功,LCD将显示“ Connected to AWS Thing ”( 连接到AWS物品 ),或尝试10秒钟,如果连接失败,则将显示Error(错误)消息。如果收到错误消息,请确保已成功创建该事物并将其正确链接到代码。您始终可以返回上一教程,以查看是否已在AWS中正确创建了该事物。
如果time.time()<connecting_time:#尝试连接到AWS 10秒钟 myMQTTClient.connect() myMQTTClient.publish(“ DHT11 / info”,“ connected”,0) 打印“ MQTT客户端连接成功!” lcd.message('已连接到\ n AWS东西')#如果已连接,则 其他: 打印“错误:检查程序中的AWS详细信息” lcd.message('错误:\ n无效的信息')#如果未连接
成功建立连接后,我们进入无限 while 循环以将时间,温度和湿度的值发布为有效负载。此处的有效负载应始终为JSON格式的字符串。因此,首先我们要读取当前日期和时间,并使用以下几行将其保存在变量中
now = datetime.utcnow()#获取日期和时间 current_time = now.strftime('%Y-%m-%dT%H:%M:%SZ')#获取字符串格式的当前时间
然后,我们从DHT11传感器读取湿度和温度值,并将其显示在LCD屏幕上。可变的湿度和温度将分别保持湿度和温度的值
湿度,温度= Adafruit_DHT.read_retry(sensor_name,sensor_pin)#从传感器读取
并将相应的值保存在温度和湿度变量中
lcd.clear()#清除LCD屏幕上的 lcd.message('温度=%.1f C'%温度)#显示温度 lcd.message 的值('\ nHum =%.1f %%'%湿度)#显示Humidity time.sleep(2)#Wait 2秒钟,然后更新值
如前所述,有效载荷应采用带大括号的字符串形式,在将变量转换为字符串后,我们将日期,时间,温度和湿度值附加如下所示。
#以字符串格式准备 有效负载='{“ timestamp”:“'+ current_time +'”,“ temperature”:'+ str(温度)+',“湿度”:'+ str(湿度)+'}'
最后,一旦准备好有效负载,我们就必须将其发布到MQTT客户端。这可以通过使用 myMQTTclient.publish 命令来完成。在发布事物时,我们也应该给它起一个名字,在这里我将其命名为DHT11 / data,但是您可以随意命名。但是请确保记住名称,因为我们需要从事物中进行订阅才能查看数据。
通过Shell窗口测试python程序:
程序准备就绪后,请根据自己的选择启动它。我已经使用Python IDE在Shell窗口上启动程序。如果一切正常,则应该成功建立消息连接,并且所有有效负载都应显示在窗口上。您可以检查温度和湿度的值是否正确读取。有效负载将每5秒更新一次。Shell窗口如下所示
如果您有任何问题,请确保您提供了正确的密钥详细信息和代理地址,还请检查是否可以使用MQTT.fx软件将其连接。如果外壳显示MQTT Client连接成功并挂在那里,则表明DHT11传感器没有响应,请检查您是否已连接到正确的插针并且传感器可以正常工作。
加工:
启动程序并在Shell窗口上获得上述详细信息后,这意味着程序正在正确响应,并且值已上传到Amazon AWS服务器。您还可以注意到LCD显示屏检查是否每5秒显示一次已 发布到AWS-IoT ,如下所示。
我们可以进入MQTT.fx应用程序并订阅主题 DHT11 / data 。然后,我们应该能够获取Raspberry Pi发布的所有数据。此数据还将每5秒更新一次;您的MQTT屏幕如下所示
如您所见,以蓝色突出显示的是MQTT软件上正在接收的有效负载。您也可以观看下面的视频以了解项目的工作原理。从现在开始,我们就可以在Internet上存储数据了,我们可以将其与Amazon提供的其他工具(例如Elastic search和Lambda)一起使用,以将数据保存在数据库中或在图表上可视化。根据我们如何从数据中受益,还有更多的应用程序。
希望您理解本教程并喜欢构建类似的东西,如果在完成此过程中遇到任何问题,请将其发布在下面的评论部分或使用论坛获取技术帮助。