本篇文章將引導讀者運用 MicroPython,在 PyBoard 和 ESP32 等微控制器上,開發多個智慧裝置系統,包含智慧家庭自動化、智慧垃圾桶和工業環境監控。文章詳細介紹各系統的硬體架構、感測器連線方式,並提供 MicroPython 程式碼範例,包含 OLED 顯示控制、WiFi 連線設定和資料上傳至 ThingSpeak 雲端平台的實作細節。同時,也說明如何利用 Blynk 應用程式實作遠端控制家電功能,讓讀者能快速上手實作自己的智慧裝置應用。
智慧家庭自動化系統實作
本章節將介紹如何使用MicroPython在PyBoard和ESP32上實作智慧家庭自動化系統。我們將探討兩種不同的方法:第一種是使用PyBoard控制家電,第二種是使用ESP32透過Blynk應用程式實作遠端控制。
使用PyBoard控制家電
首先,我們需要連線PyBoard與開關和繼電器。連線方式如表4.1所示。
表4.1 PyBoard、開關和繼電器連線表
| PyBoard | 開關 | PyBoard | 繼電器 | PyBoard | OLED |
|---|---|---|---|---|---|
| X1 | SW1 | Y1 | R1 | 3.3 V | Vin |
| X2 | SW2 | Y2 | R2 | GND | GND |
| X3 | SW3 | Y3 | R3 | X9 | SCL |
| X4 | SW4 | Y4 | R4 | X10 | SDA |
接下來,我們需要在main.py檔案中輸入以下程式碼:
# 控制家電程式
import time
import ssd1306
import machine
from pyb import Pin
from micropython import const
# OLED設定
width = const(128)
height = const(64)
ssd1306_scl = Pin('X9', Pin.OUT_PP)
ssd1306_sda = Pin('X10', Pin.OUT_PP)
i2c_ssd1306 = machine.I2C(scl=ssd1306_scl, sda=ssd1306_sda)
oled = ssd1306.SSD1306_I2C(width, height, i2c_ssd1306)
# 輸入輸出設定
p_in1 = Pin('X1', Pin.IN, Pin.PULL_UP)
p_in2 = Pin('X2', Pin.IN, Pin.PULL_UP)
p_in3 = Pin('X3', Pin.IN, Pin.PULL_UP)
p_in4 = Pin('X4', Pin.IN, Pin.PULL_UP)
p_out1 = Pin('Y1', Pin.OUT, Pin.OUT_PP)
p_out2 = Pin('Y2', Pin.OUT_PP)
p_out3 = Pin('Y3', Pin.OUT_PP)
p_out4 = Pin('Y4', Pin.OUT_PP)
while True:
oled.fill(0)
if p_in1.value() == False:
p_out1.high()
oled.text('AC-ON', 0, 0)
oled.show()
else:
p_out1.low()
oled.text('AC-OFF', 0, 0)
oled.show()
# 其他家電控制邏輯...
time.sleep(0.5)
程式碼解析:
- 初始化OLED顯示屏並設定輸入輸出腳位。
- 在無窮迴圈中檢查輸入腳位的狀態,並根據狀態控制對應的繼電器。
- 更新OLED顯示屏上的狀態資訊。
使用ESP32和Blynk實作遠端控制
本文將介紹如何使用ESP32和Blynk應用程式實作遠端控制家電。
首先,需要安裝Thonny IDE並燒錄MicroPython韌體到ESP32中。
ESP32與繼電器連線表
| ESP32 | 繼電器 | ESP32 | OLED |
|---|---|---|---|
| 23 | R1 | 3V3 | VCC |
| 19 | R2 | GND | GND |
| 18 | R3 | D19 | SDA |
| 5 | R4 | D23 | SCL |
接下來,需要在Blynk應用程式中建立專案並設定按鈕控制。
Blynk應用程式設定步驟:
- 下載並安裝Blynk應用程式。
- 建立新專案並選擇ESP32裝置。
- 設定按鈕控制項,選擇對應的GPIO腳位。
然後,在boot.py檔案中輸入以下程式碼:
# boot.py檔案
ssid_ = "samsung" # 修改為你的WiFi SSID
wp2_pass = "qwerty123" # 修改為你的WiFi密碼
def do_connect():
import network
sta_if = network.WLAN(network.STA_IF)
if not sta_if.isconnected():
print('連線到網路...')
sta_if.active(True)
sta_if.connect(ssid_, wp2_pass)
while not sta_if.isconnected():
pass
print('網路設定:', sta_if.ifconfig())
do_connect()
在main.py檔案中輸入以下程式碼:
# main.py檔案
from machine import Pin, SoftI2C
from time import sleep
import network
import utime as time
from machine import Pin
import BlynkLibESP32 as BlynkLib
blynk = BlynkLib.Blynk("你的Auth Token")
while True:
blynk.run()
# 控制邏輯...
程式碼解析:
- 在
boot.py中設定WiFi連線。 - 在
main.py中使用Blynk函式庫實作遠端控制。
智慧電子垃圾桶的IoT實作
隨著物聯網(IoT)技術的發展,越來越多的應用被開發出來以改善我們的生活。智慧垃圾桶便是其中之一,它利用感測器和無線通訊技術,實作了垃圾桶狀態的即時監控和管理。在本章中,我們將介紹如何使用Pyboard和ESP8266 WiFi模組來建立一個智慧電子垃圾桶系統。
系統硬體架構
智慧垃圾桶系統主要由以下幾個部分組成:
- Pyboard:作為系統的主控板,負責讀取感測器的資料並控制WiFi模組。
- ESP8266 WiFi模組:提供WiFi連線功能,將垃圾桶的狀態上傳到ThingSpeak雲端平台。
- 接近感測器(FC-45):用於檢測垃圾桶的填充狀態。
- OLED顯示屏:用於顯示垃圾桶的當前狀態。
硬體連線
| ESP8266 Pin | 描述 | Pyboard Pin |
|---|---|---|
| VCC | 電源(3.3V) | 3.3V |
| GND | 接地 | GND |
| Rx | 接收來自其他裝置的序列資料 | Tx |
| Tx | 傳送序列資料到其他裝置 | Rx |
| CH_En | 晶片使能腳,連線到3.3V | 3.3V |
| GPIO 0 | 一般用途輸入輸出腳,未連線 | - |
| GPIO 2 | 一般用途輸入輸出腳,未連線 | - |
系統軟體實作
Step 1:設定ThingSpeak頻道
- 首先,需要在ThingSpeak網站上註冊帳號並建立一個新的頻道。
- 在頻道設定中,啟用一個欄位(Field),命名為「Bin status」,用於儲存垃圾桶的狀態。
Step 2:取得API Key
- 在ThingSpeak頻道設定中,找到「API Keys」選項卡。
- 複製Write API Key,這將用於在程式碼中上傳資料到ThingSpeak。
Step 3:組態ESP8266 WiFi模組
- 下載ESP8266 WiFi函式庫(pywifi)並將其複製到Pyboard中。
- 在程式碼中匯入pywifi函式庫,並設定WiFi連線引數。
程式碼實作
from pyb import Pin
import pyb
import ssd1306
import machine
from micropython import const
from machine import UART
import pywifi
# OLED顯示屏設定
width = const(128)
height = const(64)
ssd1306_scl = Pin('Y9', Pin.OUT_PP)
ssd1306_sda = Pin('Y10', Pin.OUT_PP)
i2c_ssd1306 = machine.I2C(scl=ssd1306_scl, sda=ssd1306_sda)
oled = ssd1306.SSD1306_I2C(width, height, i2c_ssd1306)
while True:
# 重置Pyboard
rst_pyb = Pin('X11', Pin.OUT)
rst_pyb.low()
pyb.delay(20)
rst_pyb.high()
pyb.delay(500)
# 設定ESP8266 WiFi模組
Pyboard_wifi = pywifi.ESP8266(1, 115200)
wifi_mode = 3
Pyboard_wifi.set_mode(wifi_mode)
pyb.delay(50)
Pyboard_wifi.connect(ssid='AndroidAP93E9', psk='uxbm0411')
pyb.delay(50)
# 顯示WiFi連線成功
oled.fill(0)
oled.text('WiFi Connected', 0, 0)
oled.show()
pyb.LED(4).on() # 藍色LED亮起
# 設定接近感測器輸入腳
p_in1 = Pin('X1', Pin.IN, Pin.PULL_UP)
p_in2 = Pin('X2', Pin.IN, Pin.PULL_UP)
p_in3 = Pin('X3', Pin.IN, Pin.PULL_UP)
# 建立TCP連線到ThingSpeak
Pyboard_wifi.start_connection(protocol='TCP', dest_ip='184.106.153.149', dest_port=80, debug=True)
# 讀取接近感測器狀態並更新OLED顯示
if p_in1.value() == True and p_in2.value() == True and p_in3.value() == True:
oled.text('Bin is Empty', 0, 10)
bin_status = '0'
oled.show()
elif p_in1.value() == False and p_in2.value() == True and p_in3.value() == True:
oled.text('Bin is less than Half', 0, 10)
bin_status = '33'
oled.show()
elif p_in1.value() == False and p_in2.value() == False and p_in3.value() == True:
oled.text('Bin is Half', 0, 10)
bin_status = '66'
oled.show()
elif p_in1.value() == False and p_in2.value() == False and p_in3.value() == False:
oled.text('Bin is Full', 0, 10)
bin_status = '100'
oled.show()
# 上傳垃圾桶狀態到ThingSpeak
Pyboard_wifi.send('GET https://api.thingspeak.com/update?api_key=HKFRK1JCH5BMOCQ8&field1=' + str(bin_status) + ' HTTP/1.0\r\nHost:192.168.43.176\r\n\r\n', debug=True)
pyb.delay(1000)
程式碼解密:
- 初始化OLED顯示屏:程式碼首先初始化了OLED顯示屏,設定了其解析度和I2C介面。
- 重置Pyboard和設定ESP8266:程式碼重置了Pyboard,並設定了ESP8266 WiFi模組的模式和連線引數。
- 讀取接近感測器狀態:程式碼讀取了三個接近感測器的狀態,並根據這些狀態更新了OLED顯示屏上的垃圾桶填充狀態。
- 上傳資料到ThingSpeak:程式碼使用ESP8266 WiFi模組將垃圾桶的狀態上傳到ThingSpeak雲端平台。
工業環境監測系統實作與 ThingSpeak 雲端整合應用
系統概述與重要性
工業環境監測對於保護人類健康與生態系統至關重要。隨著工業化程式的加速,環境汙染問題日益嚴重,因此建立有效的監測系統成為當務之急。本系統利用 Pyboard 開發板結合多種感測器,實作對工業環境引數的即時監測,並透過 ThingSpeak 雲端平台進行資料上傳與視覺化展示。
硬體組態與感測器介接
本系統採用 Pyboard 作為主控單元,結合以下感測器實作環境引數監測:
- DHT22:溫度與濕度監測
- MQ4:甲烷 (CH₄) 濃度檢測
- MQ2:丁烷濃度檢測
- CJMCU 6814:多氣體感測器(NH₃、NO₂、CO)
硬體連線組態
| Pyboard 引腳 | 感測器功能 | 用途 |
|---|---|---|
| X1 | DHT22 資料線 | 溫度與濕度偵測 |
| X2 | MQ4 類別比輸出 | 甲烷氣體偵測 |
| X3 | MQ2 類別比輸出 | 丁烷氣體偵測 |
| X4 | CJMCU 6814 NH₃ | 氨氣濃度偵測 |
| X5 | CJMCU 6814 NO₂ | 二氧化氮偵測 |
| X6 | CJMCU 6814 CO | 一氧化碳偵測 |
ThingSpeak 雲端頻道設定
- 建立新的 ThingSpeak 頻道並命名為「Industrial Environmental Monitoring」
- 設定七個欄位分別對應不同的環境引數:
- Field1:溫度
- Field2:濕度
- Field3:甲烷濃度
- Field4:丁烷濃度
- Field5:氨氣濃度
- Field6:二氧化氮濃度
- Field7:一氧化碳濃度
- 取得 API Key 用於資料上傳
系統實作程式碼解析
程式碼實作(main.py)
from pyb import Pin
import pyb
import ssd1306
import machine
from machine import Pin
from micropython import const
import dht
import pywifi
# OLED顯示設定
width = const(128)
height = const(64)
ssd1306_scl = Pin('Y9', Pin.OUT_PP)
ssd1306_sda = Pin('Y10', Pin.OUT_PP)
i2c_ssd1306 = machine.I2C(scl=ssd1306_scl, sda=ssd1306_sda)
oled = ssd1306.SSD1306_I2C(width, height, i2c_ssd1306)
# 感測器初始化
temp_hum = dht.DHT22(Pin('X1'))
while True:
# 重置 Pyboard WiFi 模組
rst_pyb = Pin('X11', Pin.OUT)
rst_pyb.low()
pyb.delay(20)
rst_pyb.high()
pyb.delay(500)
# WiFi 連線設定
Pyboard_wifi = pywifi.ESP8266(1, 115200)
wifi_mode = 3
Pyboard_wifi.set_mode(wifi_mode)
Pyboard_wifi.connect(ssid='AndroidAP93E9', psk='uxbm0411')
pyb.delay(50)
pyb.LED(4).on() # 藍色 LED 亮起表示連線成功
# 讀取感測器資料
temp_hum.measure()
temp = temp_hum.temperature()
hum = temp_hum.humidity()
MQ4 = pyb.ADC('X2') # 甲烷感測器
Out1 = MQ4.read()
MQ2 = pyb.ADC('X3') # 丁烷感測器
Out2 = MQ2.read()
NH3 = pyb.ADC('X4') # 氨氣感測器
Out3 = NH3.read()
NO2 = pyb.ADC('X5') # 二氧化氮感測器
Out4 = NO2.read()
CO = pyb.ADC('X6') # 一氧化碳感測器
Out5 = CO.read()
# OLED顯示第一頁資料
oled.text("Tem: " + str(temp), 0, 10)
oled.text("Humidity:" + str(hum), 0, 20)
oled.text("Methane:" + str(Out1), 0, 30)
oled.text("MQ2:" + str(Out2), 0, 40)
oled.show()
oled.fill(0)
pyb.delay(1000)
# OLED顯示第二頁資料
oled.text("NH3:" + str(Out3), 0, 10)
oled.text("NO2: " + str(Out4), 0, 20)
oled.text("CO:" + str(Out5), 0, 30)
oled.show()
pyb.delay(1000)
# 資料上傳至 ThingSpeak
Pyboard_wifi.start_connection(protocol='TCP', dest_ip='184.106.153.149', dest_port=80, debug=True)
Pyboard_wifi.send('GET https://api.thingspeak.com/update?api_key=7RZ93ORH43F2RYP7&field1=' +
str(temp) + '&field2=' + str(hum) + '&field3=' + str(Out1) + '&field4=' +
str(Out2) + '&field5=' + str(Out3) + '&field6=' + str(Out4) + '&field7=' + str(Out5) +
' HTTP/1.0\r\nHost: 192.168.43.176\r\n\r\n', debug=True)
pyb.delay(1000)
程式碼重點解析:
- 感測器資料讀取:程式中透過 DHT22 感測器讀取溫濕度資料,並使用 ADC 介面讀取各氣體感測器的類別比輸出值。
- OLED顯示控制:使用 SSD1306 OLED顯示屏分兩頁顯示環境監測引數,確保資訊清晰呈現。
- WiFi連線與資料上傳:透過 ESP8266 WiFi模組將監測資料上傳至 ThingSpeak 平台,實作遠端監控。
系統運作結果展示
執行 main.py 程式後,系統會將工業環境引數即時顯示在 OLED螢幕上,同時將資料上傳至 ThingSpeak雲端平台,如圖4.15所示。