标签:运行 环境 _id timestamp ice region 类型 默认 opera
云上树莓派(2):将传感器数据上传到AWS IoT 并利用Kibana进行展示
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。下面的代码中会用到。
安装代码库:
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)
测试结果:
要实现的效果如下:
在 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
操作的具体配置:
几个配置项:
(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 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)
代码很简单,稍微解释一下:
(4)运行代码,在 AWS IoT 中进行测试,能够收到传上来的树莓派传感器数据
(5)在 ElasticSearch 中也能看到数据统计
AWS ElasticSearch 默认内置了一个 Kibana,可以在 ES 的界面上看到其链接。打开该链接,然后做以下配置:
(1)配置 index pattern
配置的目的是让 Kibana 定位到 ES 中的某个或者某几个 index。这里就是用 homepi 这个index。
(2)配置 Virsualize,然后就可以看到图了
话说最近家里气温一直都在30度以上,本来以为晚上会低点的。湿度倒是有一些变化。
参考链接:
云上树莓派(2):将传感器数据上传到 AWS IoT 并利用Kibana进行展示
标签:运行 环境 _id timestamp ice region 类型 默认 opera
原文地址:https://www.cnblogs.com/sammyliu/p/9441096.html