云上树莓派:将传感器数据上传到 AWS IoT 并利用Kibana进行展示

Posted sammyliu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了云上树莓派:将传感器数据上传到 AWS IoT 并利用Kibana进行展示相关的知识,希望对你有一定的参考价值。

 

云上树莓派(1):环境准备

云上树莓派(2):将传感器数据上传到AWS IoT 并利用Kibana进行展示

 

1. 传感器安装及配置

1.1 DHT22 安装

DHT22 是一款温度与湿度传感器,它有3个针脚,左边的第一个引脚(#1)为3-5V电源,第二个引脚(#2)连接到数据输入引脚,最右边的引脚(#4)接地。

技术分享图片

而树莓派3B 一共有40个针脚(GPIO,General Purpose I/O Ports,通用输入/输出端口),只需要将传感器的3个引脚接入板子上的合适引脚即可。我的连接是 1 - 01,2 - 07, 4 - 09。注意 DHT22的数据引脚连接的GPIO编号为 07名称为 GPIO04。下面的代码中会用到。 

技术分享图片

1.2 简单测试

安装代码库:

git clonehttps://github.com/adafruit/Adafruit_Python_DHT.git
cd Adafruit_Python_DHT
sudo apt-get update
sudo apt-get install build-essential python-dev
sudo python setup.py install

简单的python测试代码:

import Adafruit_DHT as dht
import time

while True:
time.sleep(2.5)
h,t = dht.read_retry(dht.DHT22, 4) #这里的 4 就指的是 GPIO04
print Temp = %.1f"C, Humidity = %.1f%%RH % (t, h)

测试结果:

技术分享图片

 

2. AWS IoT 实现

要实现的效果如下:

技术分享图片

2.1 AWS IoT 配置

在 https://ap-southeast-1.console.aws.amazon.com/iot/home?region=ap-southeast-1#/thinghub 上做如下操作。

(1)创建 thing

技术分享图片

(2)创建 thing 的证书,并下载

技术分享图片

技术分享图片

(3)创建 policy

技术分享图片

policy 负责授权,上面的配置表示对所有资源都允许所有 aws iot 操作。

(4)将 policy 附加给第二步中创建的证书,将 thing 也附加给证书。

(5)创建一个 AWS ElasticSearch domain

技术分享图片

 

(6)创建一条 rule,将树莓派传上来的数据导入 ElasticSearch

技术分享图片

操作的具体配置:

技术分享图片

几个配置项:

  • ID:ES 中每个文档的_id,这里使用自动生成的uuid
  • 索引:保存树莓派文档的索引,取名为 homepi,它是一个逻辑命名空间
  • 类型:索引下面的一个 type,表示对应树莓派的数据

2.2 树莓派中的配置

(1)安装 AWS IoT device python SDK

   git clone https://github.com/aws/aws-iot-device-sdk-python
   cd aws-iot-device-sdk-python/
   python setup.py install

(2)将 2.1 中下载到的四个证书上传到树莓派中

[email protected]:/home/pi/awsiot# ls -lt
total 16
-rw-r--r-- 1 pi pi 1758 Aug  6 10:26 VeriSign-Class3-Public-Primary-Certification-Authority-G5.pem
-rw-r--r-- 1 pi pi 1220 Aug  6 09:46 aec2731afd-certificate.pem.crt
-rw-r--r-- 1 pi pi 1679 Aug  6 09:46 aec2731afd-private.pem.key
-rw-r--r-- 1 pi pi  451 Aug  6 09:46 aec2731afd-public.pem.key

(3)编写代码

import RPi.GPIO as GPIO
import Adafruit_DHT as dht
from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient
from time import sleep
from datetime import date, datetime
 
# initialize GPIO
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.cleanup()
 
# AWS IoT certificate based connection
myMQTTClient = AWSIoTMQTTClient("123afhlss411")
myMQTTClient.configureEndpoint("*************.iot.ap-southeast-1.amazonaws.com", 8883)
myMQTTClient.configureCredentials("/home/pi/awsiot/VeriSign-Class3-Public-Primary-Certification-Authority-G5.pem", "/home/pi/awsiot/aec2731afd-private.pem.key", "/home/pi/awsiot/aec2731afd-certificate.pem.crt")
myMQTTClient.configureOfflinePublishQueueing(-1)  # Infinite offline Publish queueing
myMQTTClient.configureDrainingFrequency(2)  # Draining: 2 Hz
myMQTTClient.configureConnectDisconnectTimeout(10)  # 10 sec
myMQTTClient.configureMQTTOperationTimeout(5)  # 5 sec
 
#connect and publish
myMQTTClient.connect()
myMQTTClient.publish("homepi/dht22", "connected", 0)
 
#loop and publish sensor reading
while 1:
    now = datetime.utcnow()
    now_str = now.strftime(%Y-%m-%dT%H:%M:%SZ) #e.g. 2016-04-18T06:12:25.877Z
    h,t = dht.read_retry(dht.DHT22, 4) #07 引脚的名称是 GPIO04
    print Temp = %.1f"C, Humidity = %.1f%%RH % (t, h)
    payload = { "timestamp": " + now_str + ","temperature":  + "{:.2f}".format(t)+ ,"humidity": + "{:.2f}".format(h) +  }
    print payload
    myMQTTClient.publish("homepi/dht22", payload, 0)
    sleep(10)

代码很简单,稍微解释一下:

  • 利用 AWS IoT device sdk 创建和 AWS IoT Core 的 MQTT 连接
  • 利用 DHT22 sdk 每隔10秒从传感器获取温度和湿度数据
  • 利用 AWS IoT device sdk 将数据发到 MQTT topic

(4)运行代码,在 AWS IoT 中进行测试,能够收到传上来的树莓派传感器数据

技术分享图片

(5)在 ElasticSearch 中也能看到数据统计

技术分享图片

2.3 配置 Kibana

AWS ElasticSearch 默认内置了一个 Kibana,可以在 ES 的界面上看到其链接。打开该链接,然后做以下配置:

(1)配置 index pattern

配置的目的是让 Kibana 定位到 ES 中的某个或者某几个 index。这里就是用 homepi 这个index。

技术分享图片

(2)配置 Virsualize,然后就可以看到图了

技术分享图片

话说最近家里气温一直都在30度以上,本来以为晚上会低点的。湿度倒是有一些变化。

3. 一点感受

  • github 是个好地方,大家分享的东西避免了大量重复造轮子的劳动
  • AWS free tier 是个好东西,做一些PoC测试基本上不用花钱,但是要注意得看清楚免费提供的资源的内容,否则钱不小心就花出去了,另外就是定期看看账单
  • AWS 文档实在太丰富了,一个文件动辄两三百页
  • AWS IoT 平台应该归类为 应用支持平台AEP(Application Enablement Platform),提供了设备接入(MQTT)、与AWS服务对接、数据分析、安全等内容。
  • AWS ElasticSearch 功能感觉还不是太全面,界面上能做的事情不多,权限管理有些复杂
  • 动手做,做了之后再分享,是一件蛮有意思的事情

 

 

参考链接:

 

以上是关于云上树莓派:将传感器数据上传到 AWS IoT 并利用Kibana进行展示的主要内容,如果未能解决你的问题,请参考以下文章

python+树莓派实现IoT(物联网)数据上传到服务器

腾云驾物—使用Azure IoT Hub接收树莓派传感数据展现到Power BI

云中树莓派:利用声音传感器控制Led灯

云上树莓派:环境准备

用树莓派实现环境监测自动上传微博

树莓派使用socket发送数据到PC,并存入数据库