在之前各單元已經學習過如何利用 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 = "" # 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)
程式在Thonny執行畫面如下:當上列程式碼順利執行後,取得的溫溼度資料就會上傳到 Adafruit.IO 服務平台加以記錄,在 IO->FEED 頁籤畫面中即可看到已記錄的最後資料值與最後記錄時間。







