雲中樹莓派(2):將傳感器數據上傳到 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 中下載到的四個證書上傳到樹莓派中

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)

代碼很簡單,稍微解釋一下:

  • 利用 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 功能感覺還不是太全面,界面上能做的事情不多,權限管理有些復雜
  • 動手做,做了之后再分享,是一件蠻有意思的事情

參考鏈接:

歡迎大家關注我的個人公眾號:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM