在之前各單元已經學習過如何利用 ESP8266 MicroPython 網路HTTP傳輸 、 ESP8266 MicroPython 無線基地台連線、 Adafruit.IO 服務平台的申請使用,現在就來將這些相關學習串連起來。
[[DHT11溫濕度測量模組]]
* Supply voltage: 3.3 ~ 5.5V DC
* Output: single-bus digital signal
* Measuring range: Humidity 20-90% RH, Temperature 0 ~ 50 ℃
* Accuracy: Humidity + -5% RH, temperature + -2 ℃
* Resolution: Humidity 1% RH, temperature 1 ℃
* Long-term stability: <± 1% RH / Year
* Supply voltage: 3.3 ~ 5.5V DC
* Output: single-bus digital signal
* Measuring range: Humidity 20-90% RH, Temperature 0 ~ 50 ℃
* Accuracy: Humidity + -5% RH, temperature + -2 ℃
* Resolution: Humidity 1% RH, temperature 1 ℃
* Long-term stability: <± 1% RH / Year
【ESP8266】3.3V →【DHT11】VCC
【ESP8266】GND →【DHT11】GND
【ESP8266】D0 →【DHT11】DATA
取得 Adafruit.IO 金鑰 (AIO KEY)
當我們想把資料上傳到 Adafruit.IO 的 FEED 資料欄位時,除了必要的使用者名稱 Username 外還需要金鑰 Active Key,這是最基本的身分認證資訊。所以當我們要把資料上傳時就必須同時送上專屬的 Username 與 Active Key。請登入 Adafruit.IO 後點選 IO 頁籤->My Key 按鈕。
上傳資料的HTTP POST請求格式如下:
https://io.adafruit.com/api/{Username}/feeds/{feed_key}/data/data?X-AIO-Key={Active Key}
https://io.adafruit.com/api/{使用者名稱}/feeds/{Feeds key欄位值}/data?X-AIO-Key={金鑰}格式中的參數{Username}、{Active Key}請替換成正確的身分認證資訊 Username 與 Active Key,{feed_key}參數請使用 Feeds 的 key 欄位值,如下圖所示:
撰寫實驗程式如下:
from machine import Pin import dht, utime, urequests, network, ujson sensor = dht.DHT11(Pin(16)) #指定 Adafruit.IO 使用者名稱與金鑰 IO_USERNAME="{使用者名稱}" IO_KEY="{金鑰}" FEED1="wen-du" #溫度FEED資料欄位的key值 FEED2="shi-du" #濕度FEED資料欄位的key值 #設定網路連線帳號密碼 SSID = "程式在Thonny執行畫面如下:當上列程式碼順利執行後,取得的溫溼度資料就會上傳到 Adafruit.IO 服務平台加以記錄,在 IO->FEED 頁籤畫面中即可看到已記錄的最後資料值與最後記錄時間。" # WiFi名稱 PASSWORD = " " # WiFi密碼 #自訂無線基地台連線函式 def connect_wifi(ssid, passwd): sta = network.WLAN(network.STA_IF) sta.active(True) if not sta.isconnected(): print("連線中... \n") sta.connect(ssid, passwd) while not sta.isconnected(): pass print("連線成功... \n") #進行網路連線 connect_wifi(SSID, PASSWORD) try: while 1: sensor.measure() print("溫度: ", sensor.temperature()) print("溼度: ", sensor.humidity()) #建立與Adafruit.IO服務器間的標頭交換資訊,因為Adafruit IO 服務器會在標頭中查找 Adafruit IO Key headers = {'X-AIO-Key': IO_KEY, 'Content-Type': 'application/json'} #上傳溫度 url = "https://io.adafruit.com//api/v2/" url += IO_USERNAME #使用者名稱 url += "/feeds/" + FEED1 #寫入溫度資料的FEED Key url += "/data" data1= {"value": str(sensor.temperature())} #溫度 urequests.post(url,json=data1, headers=headers) #將資料寫雲端平台 #上傳濕度 url = "https://io.adafruit.com//api/v2/" url += IO_USERNAME #使用者名稱 url += "/feeds/" + FEED2 #寫入濕度資料的FEED Key url += "/data" data2 = {"value": str(sensor.humidity())} #濕度 urequests.post(url,json=data2, headers=headers) #將資料寫雲端平台 print("_______________") utime.sleep_ms(180000) #3分鐘後重複執行迴圈 except Exception as e: print(e)
沒有留言:
張貼留言