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

Posted 易航科技eKingTech

tags:

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


今天带来云中树莓派(1):

将传感器数据上传到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。下面的代码中会用到。 

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

1.2 简单测试

安装代码库:

git clonehttps://github.com/adafruit/Adafruit_Python_DHT.gitcd 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 并利用Kibana进行展示

 

2. AWS IoT 实现

要实现的效果如下:

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

2.1 AWS IoT 配置

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

(1)创建 thing

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

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

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

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

(3)创建 policy

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

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

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

(5)创建一个 AWS ElasticSearch domain

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

 

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

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

操作的具体配置:

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

几个配置项:

  • 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 中下载到的四个证书上传到树莓派中

root@raspberrypi:/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 dhtfrom AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClientfrom time import sleepfrom 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 中进行测试,能够收到传上来的树莓派传感器数据

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

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

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

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 功能感觉还不是太全面,界面上能做的事情不多,权限管理有些复杂

  • 动手做,做了之后再分享,是一件蛮有意思的事情

参考链接:

  • http://techblog.calvinboey.com/raspberrypi-aws-iot-python/

  • https://cloudncode.blog/2017/11/07/make-your-first-iot-device-via-aws-iot-service-and-raspberry-pi/

  • https://www.jianshu.com/p/f31b90cc756f

  • https://docs.aws.amazon.com/zh_cn/iot/latest/developerguide/iot-sdk-setup.html

注:本文所有的图片皆来自互联网。

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

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

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

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

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

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

基础篇——树莓派通用引脚定义建议收藏