Pyboard 是一款功能強大的微控制器板,結合感測器和網路模組,非常適合用於建置物聯網應用,例如智慧溫室監控系統。本文將詳細說明如何使用 Pyboard 搭配 DHT22 溫濕度感測器、光敏電阻和濕度感測器,收集溫室內的環境資料,並透過 ESP8266 WiFi 模組將資料上傳至 ThingSpeak 雲端平臺,方便遠端監控。同時,系統也會將即時資料顯示在 OLED 螢幕上,提供現場監控功能。以下將逐步說明硬體連線、軟體設定、主程式碼解析,以及如何透過 WiFi 連線將資料上傳至 ThingSpeak。

智慧型溫室監測系統

本文將介紹如何使用 Pyboard 和各種感測器(包括 DHT22、LDR 和濕度感測器)建立一個智慧型溫室監測系統。這個系統可以監測溫度、濕度和光照度,並將資料上傳到 ThingSpeak 伺服器進行遠端監控。

硬體連線

首先,需要將各種感測器和 Pyboard 連線起來。以下是連線圖:

  • Y9:SCL
  • Y10:SDA
  • X1:Data
  • X2:Output of circuit
  • X3:Aout

軟體設定

要將資料上傳到 ThingSpeak 伺服器,需要先取得 API 金鑰。以下是取得 API 金鑰的步驟:

  1. 前往 ThingSpeak 伺服器,建立一個新的頻道。
  2. 點選「API Keys」標籤,取得唯一的 API 金鑰。
  3. 將 API 金鑰複製到 Pyboard 的主程式碼中。

主程式碼

以下是 Pyboard 的主程式碼:

from pyb import Pin
import pyb
import ssd1306
import machine
from machine import Pin
from micropython import const

import dht

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)

這個程式碼初始化了 OLED 顯示器和 I2C 介面,準備好與感測器進行通訊。

  • from pyb import Pin:匯入 Pyboard 的 Pin 類別,用於控制 GPIO 引腳。
  • import pyb:匯入 Pyboard 的模組,用於存取板載資源。
  • import ssd1306:匯入 SSD1306 的模組,用於控制 OLED 顯示器。
  • import machine:匯入 Machine 的模組,用於存取硬體資源。
  • from machine import Pin:匯入 Machine 的 Pin 類別,用於控制 GPIO 引腳。
  • from micropython import const:匯入 MicroPython 的 const 函式,用於定義常數。
  • import dht:匯入 DHT 的模組,用於存取溫度和濕度感測器。

以下是系統架構的圖表:

  flowchart TD
    A[Pyboard] --> B[OLED 顯示器]
    A --> C[DHT22 感測器]
    A --> D[LDR 感測器]
    A --> E[濕度感測器]
    B --> F[顯示資料]
    C --> G[讀取溫度和濕度]
    D --> H[讀取光照度]
    E --> I[讀取濕度]
    G --> J[上傳資料到 ThingSpeak]
    H --> J
    I --> J

這個圖表顯示了 Pyboard、OLED 顯示器、DHT22 感測器、LDR 感測器和濕度感測器之間的關係,以及資料如何被上傳到 ThingSpeak 伺服器。

  • Pyboard 是系統的核心,負責控制各種感測器和 OLED 顯示器。
  • OLED 顯示器用於顯示資料。
  • DHT22 感測器用於讀取溫度和濕度。
  • LDR 感測器用於讀取光照度。
  • 濕度感測器用於讀取濕度。
  • 資料被上傳到 ThingSpeak 伺服器進行遠端監控。

WiFi連線與溫濕度感測應用

概述

在這個範例中,我們將使用PyBoard和ESP8266 WiFi模組來建立WiFi連線,並使用DHT22溫濕度感測器來收集溫度和濕度資料。

硬體需求

  • PyBoard

  • ESP8266 WiFi模組

  • DHT22溫濕度感測器

WiFi連線設定

首先,我們需要設定WiFi連線。這可以透過以下步驟實作:

import pywifi

# 初始化WiFi模組
wifi = pywifi.ESP8266(1, 115200)

# 設定WiFi模式
wifi_mode = 3  # 3代表STA模式
wifi.set_mode(wifi_mode)

# 等待WiFi模組初始化完成
pyb.delay(50)
pyb.delay(50)

溫濕度感測

接下來,我們需要使用DHT22溫濕度感測器來收集溫度和濕度資料。

import dht

# 初始化DHT22溫濕度感測器
temp_hum = dht.DHT22(Pin('X1'))

# 收集溫度和濕度資料
while True:
    # 重置WiFi模組
    rst_pyb = Pin('X11', Pin.OUT)
    rst_pyb.low()
    pyb.delay(20)
    rst_pyb.high()
    pyb.delay(500)

    # 測量溫度和濕度
    temp_hum.measure()

    # 等待2秒後再次測量
    pyb.delay(2000)

在上述程式碼中,我們使用了pywifi庫來控制WiFi模組,dht庫來控制DHT22溫濕度感測器。WiFi模組的模式被設定為STA模式,代表它將作為一個WiFi站點。DHT22溫濕度感測器被初始化並用於收集溫度和濕度資料。

  flowchart TD
    A[初始化WiFi模組] --> B[設定WiFi模式]
    B --> C[初始化DHT22溫濕度感測器]
    C --> D[收集溫度和濕度資料]
    D --> E[重置WiFi模組]
    E --> F[等待2秒後再次測量]

此圖表顯示了WiFi連線和溫濕度感測的流程。首先,WiFi模組被初始化和設定為STA模式。接下來,DHT22溫濕度感測器被初始化並用於收集溫度和濕度資料。然後,WiFi模組被重置,然後等待2秒後再次測量。

智慧型溫室監控系統

溫度與濕度感測

在智慧型溫室中,溫度和濕度是兩個非常重要的引數。以下是如何使用Python程式碼來讀取這些資料:

# 讀取溫度和濕度資料
temp = temp_hum.temperature()
hum = temp_hum.humidity()

光感應器與濕度感應器

除了溫度和濕度外,光照度和土壤濕度也是重要的引數。以下是如何使用Python程式碼來讀取這些資料:

# 讀取光感應器資料
LDR = pyb.ADC('X2')
Out1 = LDR.read()

# 讀取濕度感應器資料
Moisture = pyb.ADC('X3')
Out2 = Moisture.read()

# 計算土壤濕度百分比
mois = ((Out2 - 3700) * (100 - 1) / (1300- 3700) +1)

顯示資料於OLED螢幕

以下是如何使用Python程式碼來顯示這些資料於OLED螢幕:

# 顯示資料於OLED螢幕
oled.text("Tem: " + str(temp), 0, 10)
oled.text("Humidity:" + str(hum), 0, 20)
oled.text("Light:" + str(Out1), 0, 30)
oled.text("Moist-sense:" + str(Out2), 0, 40)
oled.text("Moisture %:" + str(mois), 0, 50)
oled.show()

連線Wi-Fi並傳送資料

以下是如何使用Python程式碼來連線Wi-Fi並傳送資料:

# 連線Wi-Fi
pyb.delay(1000)
Pyboard_wifi.start_connection(protocol='TCP',dest_ip='184.106.153.149', dest_port=80,debug=True)

  flowchart TD
    A[溫度與濕度感測] --> B[光感應器與濕度感應器]
    B --> C[顯示資料於OLED螢幕]
    C --> D[連線Wi-Fi並傳送資料]

上述程式碼是用於智慧型溫室監控系統的資料收集和顯示。首先,程式碼會讀取溫度和濕度資料,然後讀取光感應器和濕度感應器資料。接下來,程式碼會計算土壤濕度百分比,並顯示所有資料於OLED螢幕。最後,程式碼會連線Wi-Fi並傳送資料。這個系統可以用於監控溫室中的環境引數,並在必要時傳送警報或通知。

水產養殖監測系統

水產養殖是一種快速發展的食品生產方法,成功增加了魚類和貝類的生產,幫助滿足全球日益增長的人口需求。水產養殖是許多人生存的主要手段,是社會大眾的主要收入來源。然而,這種食品生產方式面臨著許多問題,包括成本增加、政府法規更加嚴格和水資源有限。這些困難使得開發更複雜的監測和餵養裝置成為必要,以提供緊密控制和長期生長條件。

水產養殖,也稱為水產養殖業,是指魚類、海藻、藻類和其他生物的繁殖、飼養和收穫。它也被描述為在受控水生環境中發展的繁殖物種。水產養殖是提供高品質蛋白質給人類的一種可靠且低影響的過程。

作者們已經使用物聯網(IoT)實作了水產養殖監測系統。設計的系統監測水溫、pH值、濁度和總溶解固體(TDS)等引數。

Pyboard與感測器介面

Pyboard與感測器的介面詳情如下:

  • Grove-pH感測器:檢測水的pH值
  • 濁度感測器:檢測水的濁度
  • TDS感測器:檢測水的總溶解固體
  • 溫度感測器(DS18B20):檢測水溫

ThingSpeak頻道配置

建立頻道後,點選“新頻道”按鈕,然後輸入頻道名稱和描述,如下圖所示。

程式碼實作

以下是水產養殖監測系統的程式碼實作:

import pyb
import time

# 定義感測器介面
pH_sensor = pyb.Pin('Y12', pyb.Pin.IN)
turbidity_sensor = pyb.Pin('Y11', pyb.Pin.IN)
TDS_sensor = pyb.Pin('X7', pyb.Pin.IN)
temperature_sensor = pyb.Pin('X8', pyb.Pin.IN)

# 定義ThingSpeak頻道
channel_id = 'YOUR_CHANNEL_ID'
api_key = 'YOUR_API_KEY'

while True:
    # 讀取感測器資料
    pH_value = pH_sensor.value()
    turbidity_value = turbidity_sensor.value()
    TDS_value = TDS_sensor.value()
    temperature_value = temperature_sensor.value()

    # 上傳資料到ThingSpeak
    pyb.send('GET /update?api_key=' + api_key + '&field1=' + str(pH_value) + '&field2=' + str(turbidity_value) + '&field3=' + str(TDS_value) + '&field4=' + str(temperature_value) + ' HTTP/1.0\r\nHost: api.thingspeak.com\r\n\r\n', debug=True)

    # 延遲1秒
    time.delay(1000)

物聯網水產養殖監測系統

水產養殖業是一個重要的產業,需要嚴格的環境控制和監測,以確保魚類和其他水生生物的健康和生長。物聯網技術可以用於水產養殖業的監測和控制,提高生產效率和品質。

獲取API金鑰

要將資料傳送到ThingSpeak,需要一個唯一的API金鑰。這個金鑰用於主Python程式碼中,將引數上傳到ThingSpeak伺服器。要獲取API金鑰,需要導航到剛剛建立的頻道下的“API金鑰”標題。

實作程式碼

以下是完整的程式碼(main.py):

import time
import ssd1306
import machine
from pyb import Pin
from micropython import const
import pyb
import onewire
import ds18x20

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)

import pywifi

while True:
    rst_pyb = Pin('X11', Pin.OUT)
    rst_pyb.low()
    pyb.delay(20)
    rst_pyb.high()
    pyb.delay(500)
    Pyboard_wifi = pywifi.ESP8266(1, 115200)

程式碼解釋

這個程式碼使用Pyboard和ESP8266 Wi-Fi模組,實作水產養殖業的監測和控制。程式碼包括以下部分:

  • 初始化oled顯示屏和Wi-Fi模組

  • 使用Pyboard和ESP8266 Wi-Fi模組,實作資料的收集和傳輸

  • import time:匯入時間模組,用於延遲和計時。

  • import ssd1306:匯入ssd1306模組,用於控制oled顯示屏。

  • import machine:匯入機器模組,用於控制Pyboard的硬體。

  • from pyb import Pin:匯入Pin類,用於控制Pyboard的引腳。

  • from micropython import const:匯入const函式,用於定義常數。

  • import pyb:匯入pyb模組,用於控制Pyboard的硬體。

  • import onewire:匯入onewire模組,用於控制onewire裝置。

  • import ds18x20:匯入ds18x20模組,用於控制ds18x20溫度感測器。

  • width = const(128):定義oled顯示屏的寬度。

  • height = const(64):定義oled顯示屏的高度。

  • ssd1306_scl = Pin('Y9', Pin.OUT_PP):定義oled顯示屏的SCL引腳。

  • ssd1306_sda = Pin('Y10', Pin.OUT_PP):定義oled顯示屏的SDA引腳。

  • i2c_ssd1306 = machine.I2C(scl=ssd1306_scl, sda=ssd1306_sda):建立I2C物件,用於控制oled顯示屏。

  • oled = ssd1306.SSD1306_I2C(width, height, i2c_ssd1306):建立oled顯示屏物件。

  • import pywifi:匯入pywifi模組,用於控制Wi-Fi模組。

  • while True:迴圈執行程式碼。

  • rst_pyb = Pin('X11', Pin.OUT):定義Pyboard的重置引腳。

  • rst_pyb.low():設定Pyboard的重置引腳為低電平。

  • pyb.delay(20):延遲20毫秒。

  • rst_pyb.high():設定Pyboard的重置引腳為高電平。

  • pyb.delay(500):延遲500毫秒。

  • Pyboard_wifi = pywifi.ESP8266(1, 115200):建立Wi-Fi模組物件。

以下是Mermaid圖表,用於視覺化程式碼的執行流程:

  flowchart TD
    A[開始] --> B[初始化oled顯示屏]
    B --> C[初始化Wi-Fi模組]
    C --> D[迴圈執行程式碼]
    D --> E[設定Pyboard的重置引腳為低電平]
    E --> F[延遲20毫秒]
    F --> G[設定Pyboard的重置引腳為高電平]
    G --> H[延遲500毫秒]
    H --> I[建立Wi-Fi模組物件]
    I --> J[結束]

  • A[開始]:程式碼的開始。
  • B[初始化oled顯示屏]:初始化oled顯示屏。
  • C[初始化Wi-Fi模組]:初始化Wi-Fi模組。
  • D[迴圈執行程式碼]:迴圈執行程式碼。
  • E[設定Pyboard的重置引腳為低電平]:設定Pyboard的重置引腳為低電平。
  • F[延遲20毫秒]:延遲20毫秒。
  • G[設定Pyboard的重置引腳為高電平]:設定Pyboard的重置引腳為高電平。
  • H[延遲500毫秒]:延遲500毫秒。
  • I[建立Wi-Fi模組物件]:建立Wi-Fi模組物件。
  • J[結束]:程式碼的結束。

WiFi模式設定與感測器初始化

在這個範例中,我們首先設定WiFi模式為3,然後使用Pyboard_wifi.set_mode(wifi_mode)函式來設定WiFi模式。接下來,我們使用pyb.delay(50)函式來暫停程式執行50毫秒,以確保WiFi模式設定完成。

wifi_mode = 3
Pyboard_wifi.set_mode(wifi_mode)
pyb.delay(50)
pyb.delay(50)

LED燈控制

接下來,我們使用pyb.LED(4).on()函式來開啟藍色LED燈,然後使用pyb.delay(2000)函式來暫停程式執行2000毫秒。

pyb.LED(4).on()  # BLUE LED ON
pyb.delay(2000)

OLED顯示初始化

然後,我們使用oled.fill(0)函式來清除OLED顯示的內容。

oled.fill(0)

感測器初始化

我們初始化三個感測器:pH感測器、濁度感測器和TDS感測器。

adc = pyb.ADC('Y12')  # Ph sensor
adc1 = pyb.ADC('Y11')  # Turbidity sensor
val1 = adc1.read()

adc2 = pyb.ADC('X8')  # TDS sensor
val2 = adc2.read()

ds_pin = Pin('X7')  # temperature sensor

感測器資料讀取

我們使用read()函式來讀取感測器的資料。

val1 = adc1.read()
val2 = adc2.read()

溫度感測器初始化

我們初始化溫度感測器。

ds_pin = Pin('X7')  # temperature sensor

感測器資料統計

我們初始化一個變數sensorSum來儲存感測器的資料。

sensorSum = 0

感測器資料讀取迴圈

我們使用一個for迴圈來讀取感測器的資料。

for i in range(0, 50):

在這個範例中,我們使用了多個感測器來讀取環境的資料,包括pH值、濁度和TDS。我們使用pyb.ADC()函式來初始化感測器,然後使用read()函式來讀取感測器的資料。接下來,我們使用pyb.delay()函式來暫停程式執行,以確保感測器的資料被正確讀取。

  flowchart TD
    A[初始化WiFi模式] --> B[設定WiFi模式]
    B --> C[初始化感測器]
    C --> D[讀取感測器資料]
    D --> E[暫停程式執行]
    E --> F[顯示OLED內容]

此圖表展示了程式的執行流程,從初始化WiFi模式到顯示OLED內容。

物聯網感測器資料處理與顯示

感測器資料讀取與計算

在進行物聯網感測器資料處理時,首先需要讀取感測器的資料。以下是使用MicroPython在PyBoard上讀取感測器資料的範例:

import adc
import onewire
import ds18x20
import time

# 初始化感測器
adc_pin = ...  # ADC Pin
ds_pin = ...  # DS18B20 Pin

# 讀取感測器資料
sensorValue = adc.read()

# 計算感測器資料
sensorSum = sensorSum + sensorValue
sensorValue = sensorSum / 50

# 計算pH值
ph = 7 - 1000 * (sensorValue - 372) * 3.3/59.16/4095

# 計算濁度值
val1 = ...  # 濁度感測器值
scaled_value = (val1 - 60) * (0.2 - 5) / (2200 - 60) + 5

# 計算TDS值
val2 = ...  # TDS感測器值
V = val2 * (3.3 / 4095.0)
tdsValue = (133.42 / V * V * V - 255.86 * V * V + 857.39 * V) * 0.5

# 讀取DS18B20溫度感測器資料
ds_sensor = ds18x20.DS18X20(onewire.OneWire(ds_pin))
roms = ds_sensor.scan()

# 讀取溫度資料
for rom in roms:
    a = ds_sensor.read_temp(rom)

感測器資料顯示

在讀取感測器資料後,需要將資料顯示在OLED螢幕上。以下是使用MicroPython在PyBoard上顯示感測器資料的範例:

import oled

# 初始化OLED螢幕
oled = oled.OLED(...)

# 顯示感測器資料
oled.text("Ph:" + str(ph), 0, 0)
oled.text("Turbidity:" + str(scaled_value), 0, 10)
oled.text("TDS:" + str(tdsValue), 0, 20)
oled.text("Temp " + str(a), 0, 30)

# 更新OLED螢幕
oled.show()

# 暫停1秒
time.sleep(1)

網路連線

在顯示感測器資料後,需要將資料傳送到伺服器。以下是使用MicroPython在PyBoard上建立網路連線的範例:

import Pyboard_wifi

# 初始化網路連線
Pyboard_wifi.start_connection(protocol='TCP', dest_ip='184.106.153.149', dest_port=80, debug=True)
  flowchart TD
    A[讀取感測器資料] --> B[計算感測器資料]
    B --> C[顯示感測器資料]
    C --> D[網路連線]
    D --> E[傳送資料]

以上程式碼範例展示瞭如何使用MicroPython在PyBoard上讀取感測器資料、計算感測器資料、顯示感測器資料和建立網路連線。這些步驟是物聯網感測器資料處理與顯示的基本流程。

FoG 和 Cloud Computing 的整合:Jetson Nano 的應用

隨著物聯網(IoT)技術的發展,邊緣計算(Edge Computing)和雲端計算(Cloud Computing)已成為兩個密不可分的技術。邊緣計算可以實作資料的即時處理和分析,而雲端計算可以提供更強大的計算能力和資料儲存空間。這篇文章將介紹如何使用 Jetson Nano 進行 FoG(Fog Computing)和雲端計算的整合。

FoG Computing 的概念

FoG Computing 是一種新的計算模式,它結合了邊緣計算和雲端計算的優點。FoG Computing 的目的是在邊緣裝置上進行資料的預處理和分析,然後將結果傳送到雲端進行進一步的處理和儲存。這種模式可以實作更快速的資料處理和分析,同時也可以減少雲端計算的負載。

Jetson Nano 的介紹

Jetson Nano 是 NVIDIA 推出的的一款小型計算機,它具有強大的計算能力和低功耗的特點。Jetson Nano 可以用於各種應用,包括計算機視覺、機器學習和邊緣計算。

FoG 和 Cloud Computing 的整合

使用 Jetson Nano 進行 FoG 和雲端計算的整合,可以實作以下幾個步驟:

  1. 資料收集:使用 Jetson Nano 收集資料,例如影像、影片或感測器資料。
  2. 資料預處理:使用 Jetson Nano 進行資料的預處理和分析,例如影像處理、物體偵測等。
  3. 資料傳送:將預處理的資料傳送到雲端進行進一步的處理和儲存。
  4. 雲端計算:使用雲端計算平臺進行資料的進一步處理和分析,例如使用機器學習演算法進行資料分析。
  5. 結果傳回:將結果傳回到 Jetson Nano,然後使用結果進行相應的動作。

智慧型溫室與水產養殖監控系統正經歷著從單點監控到物聯網整合的快速演進。本文展示的根據Pyboard和ESP8266的方案,驗證了低功耗微控制器結合無線通訊技術在實際場景中的可行性。藉由整合溫度、濕度、光照、pH值、濁度等多種感測器,系統能有效收集環境資料,並透過ThingSpeak平臺實作遠端監控和資料分析。然而,目前系統的資料處理能力受限於Pyboard的硬體效能,且程式碼的模組化程度和錯誤處理機制仍有待加強。未來發展方向應著重於邊緣計算的匯入,例如整合Jetson Nano等平臺,在本地進行初步資料處理和分析,降低資料傳輸量並提升系統響應速度。同時,匯入更穩健的通訊協議和安全機制也至關重要。玄貓認為,隨著感測器技術的進步和邊緣計算的普及,智慧農業監控系統將朝向更精細化、智慧化和自動化的方向發展,為農業生產帶來更高的效率和更低的成本。