目的:希望能將各種感測器和制動器連上網路,再結合雲端資料儲存、分析以實驗各種智慧應用。
能感應環境(如溫度、震動),利用網路自動連結服務IFTTT,傳到line提醒。
能感應環境(如溫度),傳到網路上。
操作說明:
相關教學可參考
Thonny 是適用「初學者」的Python開發環境 https://thonny.org/
下載讓Thonny連線D1mini的驅動程式
https://www.wch.cn/downloads/CH341SER_EXE.html
硬體:D1 mini 開發板、震動感應器、杜邦線*3
軟體:Thonny、D1mini驅動程式、網路名稱及密碼、line帳號、IFTTT申請帳號
from machine import Pin
import time, network, urequests
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect("網路名稱", "網路密碼") # 連線 Wifi 設定
while not sta_if.isconnected():
pass
print("Wifi已連上")
# 感應器 16 號 (D8)腳位設定
shock = Pin(16, Pin.IN)
while True:
if shock.value() == 1:
print("感應到振動!") # 你想回報訊息設定
# 連線 IFTTT 服務發送簡訊通知,網址在ifttt複製 urequests.get("http://maker.ifttt.com/trigger/theft/json/with/key/bpaItSs4u89-rHpRO14KIH")
time.sleep(60) # 暫停 60 秒, 一分鐘只傳一次
網路自動連結服務IFTTT,讓感應器的觸動可以發line提醒
自動串聯多個服務,電子郵件、簡訊、社群軟體、地標和手機設定等等,讓當發生A事件,就自動執行B。
舉例:
當濕度過高,就打開智慧插座上的除濕機。
當溫度過高,就開啟風扇。
當快到家,就開燈。
這裡運用webhook連結line讓震動感應器啟動時回報line
打開手機line notify即可收到訊息。
將環保署環境資料開放平臺資料下載 https://data.epa.gov.tw/
本校最近的監測站每小時資料:https://data.epa.gov.tw/dataset/detail/AQX_P_254
可依照自己需求修改API參數:{api_url}/{dataset}?format={format}&offset={offset}&limit={limit}&api_key={api_key} ✓ 請替換欲下載資料集代碼, api_key =,加入會員後可取得api_key,請自行更換。
https://data.epa.gov.tw/api/v2/aqx_p_254 ?format=json&offset=0&limit=5&api_key=b962f523-3086-4b7c-bb12-03fec3e64f52
在Adafruit申請帳號 https://accounts.adafruit.com/
溫溼度網路顯示成果 https://io.adafruit.com/ljjh/feeds/temp-humi
##程式參考
from machine import Pin
import time
import network
from umqtt.robust import MQTTClient
import dht
sensor = dht.DHT11(Pin(0)) # 使用 D3 腳位取得溫溼度物件
client = MQTTClient(
client_id="wen-du",
server="io.adafruit.com", #連結上傳網站
user="ljjh", #在網站上申請使用者名稱
password="aio_atsg90g6OqsiW2mB4OKaL8aO", #在網站上取得密碼,請自行更改
ssl=False)
sta_if = network.WLAN(network.STA_IF) # 取得無線網路介面
sta_if.active(True) # 啟用無線網路
sta_if.connect('24-1F', '828132') # 連結無線網路,請自行更改
while not sta_if.isconnected(): # 等待無線網路連上
pass
print("connected")
client.connect()
while True:
sensor.measure()
temp_humi = "%2d℃/%2d%%" % (
sensor.temperature(),
sensor.humidity())
client.publish(
b"ljjh/feeds/temp_humi", #產生報告的網址
temp_humi.encode())
print(temp_humi)
time.sleep(30) #30秒收一次數據