構建樹莓派溫濕度監測系統:從硬件到軟件的完整指南

在這里插入圖片描述

?作者簡介:2022年博客新星 第八。熱愛國學的Java后端開發者,修心和技術同步精進。
🍎個人主頁:Java Fans的博客
🍊個人信條:不遷怒,不貳過。小知識,大智慧。
💞當前專欄:Python案例分享專欄
?特色專欄:國學周更-心性養成之路
🥭本文內容:構建樹莓派溫濕度監測系統:從硬件到軟件的完整指南

文章目錄

    • 引言
      • 一、項目概述
      • 二、硬件準備
        • 1. 樹莓派
        • 2. DHT11溫濕度傳感器
        • 3. 顯示屏
        • 4. 蜂鳴器
        • 5. 按鍵
        • 6. 面包板和跳線
        • 7. 其他配件
      • 三、硬件連接
        • 1. 樹莓派的準備
        • 2. DHT11溫濕度傳感器連接
        • 3. 顯示屏連接
        • 4. 蜂鳴器連接
        • 5. 按鍵連接
        • 6. 整體連接示意圖
      • 四、軟件環境搭建
        • 1. 安裝操作系統
        • 2. 更新系統
        • 3. 安裝Python
        • 4. 安裝必要的庫
        • 5. 驗證庫安裝
        • 6. 編寫代碼
        • 7. 運行代碼
      • 五、代碼實現
        • 1. 導入必要的庫
        • 2. 設置GPIO引腳
        • 3. 初始化傳感器和顯示屏
        • 4. 定義報警閾值
        • 5. 讀取傳感器數據
        • 6. 顯示數據
        • 7. 按鍵輸入處理
        • 8. 主循環
        • 9. 完整代碼示例
      • 六、功能擴展
        • 1. 數據記錄與存儲
        • 2. 遠程監控與數據可視化
        • 3. 移動應用集成
        • 4. 增加傳感器類型
        • 5. 用戶界面優化
        • 6. 設備管理與維護
        • 7. 能源管理
    • 總結

引言

在現代社會,隨著科技的迅猛發展,物聯網(IoT)技術逐漸滲透到我們生活的方方面面。溫濕度監測作為物聯網應用中的一個重要領域,廣泛應用于智能家居、農業監控、環境保護等多個場景。溫度和濕度不僅影響我們的生活舒適度,還對農作物的生長、工業生產的質量以及環境的健康狀況起著至關重要的作用。

樹莓派作為一款功能強大且易于使用的單板計算機,因其靈活性和可擴展性,成為了許多DIY項目的首選平臺。在本項目中,我們將利用樹莓派搭建一個溫濕度監測系統,結合DHT11傳感器、顯示屏、蜂鳴器和按鍵,實現實時數據監測、顯示和報警功能。通過這個項目,不僅可以幫助我們更好地理解溫濕度的變化,還能為我們提供一個實踐物聯網技術的絕佳機會。

在接下來的內容中,我們將詳細介紹項目的硬件組成、軟件實現以及可能的功能擴展,帶你一步步構建屬于自己的溫濕度監測系統。無論你是物聯網的初學者還是有經驗的開發者,這個項目都將為你提供有價值的學習體驗。讓我們開始這段探索之旅吧!

一、項目概述

本項目的目標是創建一個溫濕度監測系統,能夠實時顯示環境的溫度和濕度,并在超過設定閾值時發出報警。用戶還可以通過按鍵來調整報警閾值。

二、硬件準備

在構建樹莓派溫濕度監測系統之前,首先需要準備好所需的硬件組件。每個組件在系統中都有其特定的功能,下面將詳細介紹每個硬件的特點、連接方式以及選擇建議。

1. 樹莓派

選擇建議

  • 推薦使用樹莓派3B、3B+或樹莓派4B。這些版本具有較強的處理能力和豐富的GPIO接口,適合進行各種物聯網項目。

功能

  • 樹莓派作為系統的核心控制單元,負責處理傳感器數據、控制顯示屏和蜂鳴器,并與用戶進行交互。

連接方式

  • 通過USB電源適配器為樹莓派供電,確保其正常運行。
2. DHT11溫濕度傳感器

選擇建議

  • DHT11是一款低成本、易于使用的數字溫濕度傳感器,適合初學者和小型項目。其測量范圍為0-50°C的溫度和20-90%的濕度。

功能

  • 負責實時獲取環境的溫度和濕度數據,并將其傳輸給樹莓派進行處理。

連接方式

  • DHT11傳感器通常有三個引腳:
    • VCC:連接到樹莓派的5V引腳。
    • GND:連接到樹莓派的GND引腳。
    • DATA:連接到樹莓派的GPIO4引腳(可以根據需要選擇其他GPIO引腳,但需在代碼中進行相應修改)。
3. 顯示屏

選擇建議

  • 可以選擇LCD(如1602 LCD)或OLED顯示屏(如0.96寸OLED)。OLED顯示屏通常具有更好的對比度和視角,適合在不同光照條件下使用。

功能

  • 實時顯示溫濕度數據,便于用戶觀察和監控環境變化。

連接方式

  • LCD顯示屏通常需要多個引腳連接,包括電源引腳、數據引腳和控制引腳。OLED顯示屏則通常使用I2C接口,連接方式相對簡單:
    • VCC:連接到樹莓派的5V引腳。
    • GND:連接到樹莓派的GND引腳。
    • SDA:連接到樹莓派的SDA引腳(GPIO2)。
    • SCL:連接到樹莓派的SCL引腳(GPIO3)。
4. 蜂鳴器

選擇建議

  • 可以選擇有源蜂鳴器或無源蜂鳴器。有源蜂鳴器只需供電即可發聲,而無源蜂鳴器需要通過PWM信號控制音調。

功能

  • 當溫濕度超過設定閾值時,蜂鳴器發出報警聲,提醒用戶注意。

連接方式

  • 蜂鳴器通常有兩個引腳:
    • 正極:連接到樹莓派的GPIO18引腳。
    • 負極:連接到樹莓派的GND引腳。
5. 按鍵

選擇建議

  • 可以使用簡單的機械按鍵或薄膜按鍵。按鍵的選擇應考慮到使用的方便性和耐用性。

功能

  • 允許用戶通過按鍵輸入來調整報警閾值。

連接方式

  • 按鍵通常有兩個引腳:
    • 一端連接到樹莓派的GPIO17引腳。
    • 另一端連接到GND引腳。可以使用上拉電阻或樹莓派的內置上拉電阻。
6. 面包板和跳線

選擇建議

  • 面包板用于方便地連接各個組件,跳線則用于連接不同的引腳。

功能

  • 通過面包板和跳線,可以快速搭建電路,方便測試和修改。
7. 其他配件
  • 電源適配器:為樹莓派提供穩定的電源,建議使用5V/2.5A的電源適配器。
  • 外殼:可以為樹莓派和其他組件提供保護,防止損壞。
  • 散熱片:如果使用樹莓派4B,建議加裝散熱片以防止過熱。

三、硬件連接

在構建樹莓派溫濕度監測系統時,正確的硬件連接是確保系統正常運行的關鍵步驟。下面將詳細介紹各個組件的連接方式,包括樹莓派、DHT11溫濕度傳感器、顯示屏、蜂鳴器和按鍵的具體連接方法。

1. 樹莓派的準備

首先,確保樹莓派已安裝好操作系統(如Raspberry Pi OS),并且可以正常啟動。將樹莓派放置在一個穩定的工作臺上,并準備好所需的工具,如跳線、面包板等。

2. DHT11溫濕度傳感器連接

DHT11傳感器通常有三個引腳,分別是VCC、GND和DATA。連接步驟如下:

  • VCC引腳:將DHT11的VCC引腳連接到樹莓派的5V引腳(通常是引腳2或引腳4)。
  • GND引腳:將DHT11的GND引腳連接到樹莓派的GND引腳(引腳6、引腳9、引腳14、引腳20或引腳25中的任意一個)。
  • DATA引腳:將DHT11的DATA引腳連接到樹莓派的GPIO4引腳(引腳7)。

連接示意圖:

DHT11        樹莓派
-----------------------
VCC   ---->  5V (引腳2或引腳4)
GND   ---->  GND (引腳6)
DATA  ---->  GPIO4 (引腳7)
3. 顯示屏連接

根據選擇的顯示屏類型,連接方式會有所不同。以下是LCD和OLED顯示屏的連接方法:

LCD(1602 LCD)連接

  • VSS引腳:連接到樹莓派的GND引腳。
  • VDD引腳:連接到樹莓派的5V引腳。
  • VO引腳:連接到一個可調電位器的中間引腳,電位器的另一端連接到GND,另一端連接到5V(用于調節對比度)。
  • RS引腳:連接到樹莓派的GPIO17引腳(引腳11)。
  • RW引腳:連接到GND。
  • E引腳:連接到樹莓派的GPIO27引腳(引腳13)。
  • D0-D3引腳:可以不連接(使用4位模式)。
  • D4引腳:連接到樹莓派的GPIO22引腳(引腳15)。
  • D5引腳:連接到樹莓派的GPIO23引腳(引腳16)。
  • D6引腳:連接到樹莓派的GPIO24引腳(引腳18)。
  • D7引腳:連接到樹莓派的GPIO25引腳(引腳22)。

OLED顯示屏(I2C接口)連接

  • VCC引腳:連接到樹莓派的5V引腳。
  • GND引腳:連接到樹莓派的GND引腳。
  • SDA引腳:連接到樹莓派的SDA引腳(GPIO2,引腳3)。
  • SCL引腳:連接到樹莓派的SCL引腳(GPIO3,引腳5)。

連接示意圖(以OLED為例):

OLED          樹莓派
-----------------------
VCC   ---->  5V (引腳2或引腳4)
GND   ---->  GND (引腳6)
SDA   ---->  SDA (GPIO2,引腳3)
SCL   ---->  SCL (GPIO3,引腳5)
4. 蜂鳴器連接

蜂鳴器通常有兩個引腳,連接步驟如下:

  • 正極引腳:將蜂鳴器的正極引腳連接到樹莓派的GPIO18引腳(引腳12)。
  • 負極引腳:將蜂鳴器的負極引腳連接到樹莓派的GND引腳。

連接示意圖:

蜂鳴器      樹莓派
-----------------------
正極  ---->  GPIO18 (引腳12)
負極  ---->  GND (引腳6)
5. 按鍵連接

按鍵通常有兩個引腳,連接步驟如下:

  • 一端引腳:將按鍵的一端連接到樹莓派的GPIO17引腳(引腳11)。
  • 另一端引腳:將按鍵的另一端連接到樹莓派的GND引腳。

連接示意圖:

按鍵        樹莓派
-----------------------
一端  ---->  GPIO17 (引腳11)
另一端 ---->  GND (引腳6)
6. 整體連接示意圖

將所有組件連接在一起后,整個系統的連接示意圖如下:

樹莓派
-----------------------
5V   ----> DHT11 VCC
GND  ----> DHT11 GND
GPIO4 ----> DHT11 DATA5V   ----> OLED VCC
GND  ----> OLED GND
GPIO2 ----> OLED SDA
GPIO3 ----> OLED SCLGPIO18 ----> 蜂鳴器 正極
GND      ----> 蜂鳴器 負極GPIO17 ----> 按鍵 一端
GND      ----> 按鍵 另一端

四、軟件環境搭建

在構建樹莓派溫濕度監測系統之前,首先需要搭建合適的軟件環境。這一過程包括安裝操作系統、必要的庫和工具,以便能夠順利地進行編程和硬件控制。以下是詳細的步驟和說明。

1. 安裝操作系統

首先,確保樹莓派上安裝了Raspberry Pi OS(以前稱為Raspbian)。可以通過以下步驟進行安裝:

  • 下載操作系統鏡像
    訪問Raspberry Pi官方網站下載最新版本的Raspberry Pi OS鏡像。

  • 燒錄鏡像
    使用工具(如Balena Etcher或Raspberry Pi Imager)將下載的鏡像燒錄到SD卡中。插入SD卡后,選擇鏡像文件并選擇目標SD卡,點擊“燒錄”開始。

  • 首次啟動
    將燒錄好的SD卡插入樹莓派,連接顯示器、鍵盤和電源,啟動樹莓派。首次啟動時,系統會引導你完成基本設置,包括語言、時區和網絡配置。

2. 更新系統

在安裝完操作系統后,建議更新系統以確保所有軟件包都是最新的。打開終端,輸入以下命令:

sudo apt-get update
sudo apt-get upgrade

這將更新軟件包列表并升級已安裝的軟件包。

3. 安裝Python

Raspberry Pi OS通常預裝了Python,但可以通過以下命令確認Python版本:

python3 --version

如果未安裝,可以使用以下命令安裝:

sudo apt-get install python3
4. 安裝必要的庫

為了與DHT11傳感器和顯示屏進行交互,需要安裝一些Python庫。以下是安裝步驟:

  • 安裝Adafruit_DHT庫
    該庫用于讀取DHT11傳感器的數據。可以通過以下命令安裝:

    sudo pip3 install Adafruit-DHT
    
  • 安裝RPi.GPIO庫
    該庫用于控制樹莓派的GPIO引腳。通常,RPi.GPIO庫已經預裝,但可以通過以下命令確認或安裝:

    sudo apt-get install python3-rpi.gpio
    
  • 安裝顯示屏庫
    如果使用OLED顯示屏,可以安裝Adafruit_SSD1306庫。對于LCD顯示屏,通常使用lcd庫。以下是安裝OLED顯示屏庫的命令:

    sudo pip3 install Adafruit-SSD1306
    

    對于LCD顯示屏,可能需要安裝RPLCD庫:

    sudo pip3 install RPLCD
    
  • 安裝I2C支持(如果使用I2C接口的顯示屏):
    確保I2C接口已啟用。可以通過raspi-config工具啟用I2C:

    sudo raspi-config
    

    在菜單中選擇“Interfacing Options”,然后選擇“I2C”,啟用它。完成后,重啟樹莓派。

5. 驗證庫安裝

在終端中輸入Python交互式環境,驗證庫是否成功安裝:

python3

然后嘗試導入庫:

import Adafruit_DHT
import RPi.GPIO as GPIO
import Adafruit_SSD1306  # 如果使用OLED
# 或者
from RPLCD import CharLCD  # 如果使用LCD

如果沒有錯誤提示,說明庫安裝成功。

6. 編寫代碼

在完成軟件環境搭建后,可以使用文本編輯器(如nano、vim或Thonny IDE)編寫Python代碼。創建一個新的Python文件,例如temp_humidity_monitor.py,并將后續的代碼邏輯寫入該文件。

nano temp_humidity_monitor.py
7. 運行代碼

在編寫完代碼后,可以通過以下命令運行Python腳本:

python3 temp_humidity_monitor.py

確保在運行代碼之前,所有硬件連接都已正確完成,并且樹莓派已正常啟動。

五、代碼實現

在完成硬件連接和軟件環境搭建后,接下來是實現溫濕度監測系統的核心部分——編寫代碼。本文將詳細闡述如何使用Python編寫代碼,以實現溫濕度的讀取、顯示、報警和用戶交互功能。

1. 導入必要的庫

首先,在代碼的開頭導入所需的庫。這些庫將幫助我們與DHT11傳感器、顯示屏和GPIO引腳進行交互。

import Adafruit_DHT
import RPi.GPIO as GPIO
import time
from Adafruit_SSD1306 import SSD1306_128_64  # 如果使用OLED
# from RPLCD import CharLCD  # 如果使用LCD
2. 設置GPIO引腳

接下來,設置GPIO引腳的模式和初始狀態。我們需要定義蜂鳴器和按鍵的引腳。

# GPIO設置
GPIO.setmode(GPIO.BCM)  # 使用BCM引腳編號
buzzer_pin = 18  # 蜂鳴器引腳
button_pin = 17  # 按鍵引腳
GPIO.setup(buzzer_pin, GPIO.OUT)  # 設置蜂鳴器引腳為輸出
GPIO.setup(button_pin, GPIO.IN, pull_up_down=GPIO.PUD_UP)  # 設置按鍵引腳為輸入,并啟用上拉電阻
3. 初始化傳感器和顯示屏

初始化DHT11傳感器和顯示屏。這里以OLED顯示屏為例,LCD顯示屏的初始化方式會有所不同。

sensor = Adafruit_DHT.DHT11  # 定義傳感器類型
dht_pin = 4  # DHT11數據引腳# 初始化OLED顯示屏
disp = SSD1306_128_64(rst=None)  # 創建顯示屏對象
disp.begin()  # 初始化顯示屏
disp.clear()  # 清空顯示屏
disp.display()  # 刷新顯示
4. 定義報警閾值

設置初始的溫濕度報警閾值,并定義一個函數來檢查報警條件。

# 初始閾值
threshold_temp = 30  # 溫度閾值
threshold_hum = 70   # 濕度閾值def check_alarm(temperature, humidity):if temperature > threshold_temp or humidity > threshold_hum:GPIO.output(buzzer_pin, GPIO.HIGH)  # 啟動蜂鳴器else:GPIO.output(buzzer_pin, GPIO.LOW)   # 關閉蜂鳴器
5. 讀取傳感器數據

定義一個函數來讀取DHT11傳感器的數據,并處理可能的讀取錯誤。

def read_sensor():humidity, temperature = Adafruit_DHT.read_retry(sensor, dht_pin)if humidity is not None and temperature is not None:return temperature, humidityelse:print("Failed to retrieve data from humidity sensor")return None, None
6. 顯示數據

定義一個函數來在OLED顯示屏上顯示溫濕度數據。

def display_data(temperature, humidity):disp.clear()  # 清空顯示屏disp.text(f'Temp: {temperature}C', 0, 0)  # 顯示溫度disp.text(f'Hum: {humidity}%', 0, 10)  # 顯示濕度disp.display()  # 刷新顯示
7. 按鍵輸入處理

定義一個函數來處理按鍵輸入,以便用戶可以調整報警閾值。

def adjust_threshold():global threshold_temp, threshold_humwhile True:if GPIO.input(button_pin) == GPIO.LOW:  # 檢測按鍵按下threshold_temp += 1  # 增加溫度閾值threshold_hum += 5    # 增加濕度閾值print(f'New Temp Threshold: {threshold_temp}C')print(f'New Humidity Threshold: {threshold_hum}%')time.sleep(1)  # 防止多次觸發
8. 主循環

在主循環中,讀取傳感器數據、檢查報警條件、顯示數據,并處理按鍵輸入。

try:while True:temperature, humidity = read_sensor()  # 讀取傳感器數據if temperature is not None and humidity is not None:print(f'Temperature: {temperature}°C, Humidity: {humidity}%')check_alarm(temperature, humidity)  # 檢查報警條件display_data(temperature, humidity)  # 顯示數據adjust_threshold()  # 調整閾值time.sleep(2)  # 每2秒讀取一次數據except KeyboardInterrupt:GPIO.cleanup()  # 清理GPIO設置
9. 完整代碼示例

將上述所有代碼整合在一起,形成完整的Python腳本:

import Adafruit_DHT
import RPi.GPIO as GPIO
import time
from Adafruit_SSD1306 import SSD1306_128_64  # 如果使用OLED# GPIO設置
GPIO.setmode(GPIO.BCM)
buzzer_pin = 18
button_pin = 17
GPIO.setup(buzzer_pin, GPIO.OUT)
GPIO.setup(button_pin, GPIO.IN, pull_up_down=GPIO.PUD_UP)sensor = Adafruit_DHT.DHT11
dht_pin = 4# 初始化OLED顯示屏
disp = SSD1306_128_64(rst=None)
disp.begin()
disp.clear()
disp.display()# 初始閾值
threshold_temp = 30
threshold_hum = 70def check_alarm(temperature, humidity):if temperature > threshold_temp or humidity > threshold_hum:GPIO.output(buzzer_pin, GPIO.HIGH)else:GPIO.output(buzzer_pin, GPIO.LOW)def read_sensor():humidity, temperature = Adafruit_DHT.read_retry(sensor, dht_pin)if humidity is not None and temperature is not None:return temperature, humidityelse:print("Failed to retrieve data from humidity sensor")return None, Nonedef display_data(temperature, humidity):disp.clear()disp.text(f'Temp: {temperature}C', 0, 0)disp.text(f'Hum: {humidity}%', 0, 10)disp.display()def adjust_threshold():global threshold_temp, threshold_humwhile True:if GPIO.input(button_pin) == GPIO.LOW:threshold_temp += 1threshold_hum += 5print(f'New Temp Threshold: {threshold_temp}C')print(f'New Humidity Threshold: {threshold_hum}%')time.sleep(1)try:while True:temperature, humidity = read_sensor()if temperature is not None and humidity is not None:print(f'Temperature: {temperature}°C, Humidity: {humidity}%')check_alarm(temperature, humidity)display_data(temperature, humidity)adjust_threshold()time.sleep(2)except KeyboardInterrupt:GPIO.cleanup()

六、功能擴展

在完成基本的溫濕度監測系統后,可以考慮對系統進行功能擴展,以提升其實用性、靈活性和用戶體驗。以下是一些可能的功能擴展建議:

1. 數據記錄與存儲

功能描述
將實時監測到的溫濕度數據記錄到文件或數據庫中,以便后續分析和查看歷史數據。

實現方法

  • 文件存儲:可以將數據以CSV格式存儲到本地文件中。每次讀取數據時,將溫濕度值和時間戳寫入文件。

    示例代碼:

    import csv
    from datetime import datetimedef log_data(temperature, humidity):with open('temperature_humidity_log.csv', mode='a') as file:writer = csv.writer(file)writer.writerow([datetime.now(), temperature, humidity])
    
  • 數據庫存儲:使用SQLite或MySQL等數據庫存儲數據,便于進行復雜查詢和分析。

    示例代碼(使用SQLite):

    import sqlite3# 創建數據庫連接
    conn = sqlite3.connect('sensor_data.db')
    c = conn.cursor()
    c.execute('''CREATE TABLE IF NOT EXISTS readings (timestamp TEXT, temperature REAL, humidity REAL)''')def log_data(temperature, humidity):c.execute("INSERT INTO readings (timestamp, temperature, humidity) VALUES (?, ?, ?)",(datetime.now(), temperature, humidity))conn.commit()
    
2. 遠程監控與數據可視化

功能描述
通過網絡將溫濕度數據上傳到云端,用戶可以通過網頁或手機應用進行遠程監控。

實現方法

  • 使用云服務:可以使用MQTT、HTTP API等協議將數據發送到云服務(如ThingSpeak、Adafruit IO等)。

    示例代碼(使用HTTP POST):

    import requestsdef send_data_to_cloud(temperature, humidity):url = 'https://api.thingspeak.com/update'params = {'api_key': 'YOUR_API_KEY','field1': temperature,'field2': humidity}response = requests.get(url, params=params)print(response.text)
    
  • 創建Web界面:使用Flask或Django等框架創建一個簡單的Web應用,實時顯示溫濕度數據和歷史記錄。

3. 移動應用集成

功能描述
開發一個移動應用,用戶可以通過手機實時查看溫濕度數據,并接收報警通知。

實現方法

  • 使用Firebase:將數據存儲在Firebase數據庫中,移動應用可以實時獲取數據。
  • 推送通知:使用Firebase Cloud Messaging(FCM)實現報警通知,用戶在手機上接收到溫濕度超標的警報。
4. 增加傳感器類型

功能描述
除了溫濕度傳感器外,可以增加其他類型的傳感器,如光照傳感器、氣體傳感器等,提供更全面的環境監測。

實現方法

  • 光照傳感器:使用光敏電阻或BH1750傳感器,讀取環境光照強度。
  • 氣體傳感器:使用MQ系列傳感器(如MQ-2、MQ-7等),監測空氣中的有害氣體濃度。
5. 用戶界面優化

功能描述
改善用戶界面,使其更加友好和直觀,提升用戶體驗。

實現方法

  • 圖形化界面:使用Tkinter或Pygame創建圖形化用戶界面,顯示實時數據和歷史記錄。
  • 多語言支持:為系統添加多語言支持,方便不同語言的用戶使用。
6. 設備管理與維護

功能描述
實現設備的遠程管理和維護功能,用戶可以通過界面進行設置和更新。

實現方法

  • 遠程配置:允許用戶通過Web界面或移動應用調整報警閾值、傳感器類型等設置。
  • 固件更新:實現OTA(Over-The-Air)更新功能,方便用戶更新系統固件。
7. 能源管理

功能描述
優化系統的能源管理,延長設備的使用壽命。

實現方法

  • 低功耗模式:在不需要實時監測時,進入低功耗模式,減少能源消耗。
  • 太陽能供電:考慮使用太陽能電池板為系統供電,適合戶外環境監測。

總結

通過本項目,我們成功構建了一個基于樹莓派的溫濕度監測系統,利用DHT11傳感器、顯示屏、蜂鳴器和按鍵,實現了實時數據監測、顯示和報警功能。通過詳細的硬件連接和軟件實現步驟,用戶不僅能夠掌握物聯網技術的基本原理,還能提升動手能力和編程技能。此外,項目中提出的功能擴展建議,如數據記錄、遠程監控、移動應用集成等,進一步拓寬了系統的應用場景和實用性,為用戶提供了更全面的環境監測解決方案。希望本項目能夠激勵更多的開發者探索物聯網的無限可能,推動智能家居、農業監控和環境保護等領域的發展。無論是初學者還是有經驗的開發者,都能從中獲得寶貴的經驗和啟發。


??碼文不易,本篇文章就介紹到這里,如果想要學習更多Java系列知識點擊關注博主,博主帶你零基礎學習Java知識。與此同時,對于日常生活有困擾的朋友,歡迎閱讀我的第四欄目:《國學周更—心性養成之路》,學習技術的同時,我們也注重了心性的養成。

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/63159.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/63159.shtml
英文地址,請注明出處:http://en.pswp.cn/web/63159.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

28. Three.js案例-創建圓角矩形并進行拉伸

28. Three.js案例-創建圓角矩形并進行拉伸 實現效果 知識點 WebGLRenderer (WebGL渲染器) WebGLRenderer 是 Three.js 中用于渲染 3D 場景的主要渲染器。 構造器 WebGLRenderer( parameters : Object ) 參數類型描述parametersObject渲染器的配置參數,可選。 …

開源Java快速自測工具,可以調用系統內任意一個方法

java快速測試框架,可以調到系統內任意一個方法,告別寫單測和controller的困擾。 開源地址:https://gitee.com/missyouch/Easy-JTest 我們在開發時很多時候想要測試下自己的代碼,特別是service層或者是更底層的代碼,就…

004 QT常用控件Qwidget_上

文章目錄 前言控件概述QWidgetenable屬性geometry屬性windowTitle屬性windowlcon屬性 小結 前言 本文將會向你介紹常用的Qwidget屬性 控件概述 Widget 是 Qt 中的核心概念. 英文原義是 “?部件”, 我們此處把它翻譯為 “控件” . 控件是構成?個圖形化界面的基本要素. QWi…

Android 好的開源庫

1. 權限請求框架 GitHub - getActivity/XXPermissions: Android 權限請求框架,已適配 Android 14 2. 下載框架 GitHub - lingochamp/okdownload: A Reliable, Flexible, Fast and Powerful download engine.

Flash語音芯片相比OTP語音芯片的優勢

Flash語音芯片和OTP語音芯片是兩種常見的語音解決方案,在各自的應用領域中發揮著重要作用。本文?將介紹Flash語音芯片相比OTP(One-Time Programmable)語音芯片的顯著優勢?。 1?.可重復擦寫?:Flash語音芯片的最大特點是支持多次編程和擦除&#xff0c…

Android命令行工具--dumpsys

dumpsys 是一種在 Android 設備上運行的工具,可提供有關系統服務的信息。可以使用 Android 調試橋 (adb) 從命令行調用 dumpsys,獲取在連接的設備上運行的所有系統服務的診斷輸出。 此輸出通常比您想要的更詳細,因此請使用此頁面上的命令行選…

【深度學習】深刻理解Swin Transformer

Swin Transformer 是一種基于 Transformer 的視覺模型,由 Microsoft 研究團隊提出,旨在解決傳統 Transformer 模型在計算機視覺任務中的高計算復雜度問題。其全稱是 Shifted Window Transformer,通過引入分層架構和滑動窗口機制,S…

從零開始學習 sg200x 多核開發之 sophpi 編譯生成 fip.bin 流程梳理

本文主要介紹 sophpi 編譯生成 fip.bin 流程。 1、編譯前準備 sophpi 的基本編譯流程如下: $ source build/cvisetup.sh $ defconfig sg2002_wevb_riscv64_sd $ clean_all $ build_all $ pack_burn_image注: 需要在 bash 下運行clean_all 非必要可以不…

mysql客戶端命令

目錄 結束符 ; \g \G 中斷輸入 ctrl c 查看命令列表 help ? (\?) connect (\r) status (\s) delimiter (\d) exit (\q) quit (\q) tee (\T) ?編輯 notee (\t) prompt (\R) source (\.) system (\!) ?編輯 use (\u) help contents 結束符 ; \g \G 當我…

scala隱式函數

1 定義 通常我們所說的隱式函數也稱為 隱式轉換,是使用 implicit 修飾的函數 作用: 可以通過一個隱式函數將一種類型轉變為另一種類型 隱式轉換有兩種應用場景: 類型轉換,隱式轉換為期望類型 類型增強 2 示例 ①:類…

Tomcat原理(4)——嘗試手動Servlet的實現

目錄 一、什么是Servlet 1.servlet的定義 2.servlet的結構 二、實現servlet的流程圖 三、具體實現代碼 1、server 2.實體類request&response 3.HttpServlet抽象類 4.再定義三個servlet進行測試 Tomcat原理(3)——靜&動態資源以及運行項…

Node.js內置模塊

1.內置模塊 Node.js的中文網參考手冊:https://nodejs.cn//api 幫助文檔 API文檔:查看對應的模塊,左邊是模塊,右邊是模塊的成員 源碼:https://github.com/nodejs/node/tree/main/lib 查看 例如: http.js 創建web服務器的模塊 -->進入源碼中,搜索…

【RAG實戰】RAG與大模型應用

1.1 大模型應用的方向:RAG 1.1.1 什么是RAG 1. 生成式AI 一種能夠生成各類內容的技術,包括文本、圖像、音頻和合成數據。自2022年底ChatGPT在全球范圍內推廣以來,基于Transformer解碼器結構的大模型已能在短時間內為用戶生成高質量的文本、…

基于DeepSpeed Chat詳解 PPO 算法中的actor_loss_fn及其核心參數

詳解 PPO 算法中的 actor_loss_fn 及其核心參數 1. 引言 在強化學習中,PPO(Proximal Policy Optimization,近端策略優化)算法是一種經典且高效的策略優化方法。它通過重要性采樣(Importance Sampling)和策…

D3 基礎1

D3 D3.js (Data-Driven Documents) 是一個基于 JavaScript 的庫&#xff0c;用于生成動態、交互式數據可視化。它通過操作文檔對象模型 (DOM) 來生成數據驅動的圖形。官方網站是 https://d3js.org/ <!DOCTYPE html> <html lang"en"><head><me…

基線檢查:Windows安全基線.【手動 || 自動】

基線定義 基線通常指配置和管理系統的詳細描述&#xff0c;或者說是最低的安全要求&#xff0c;它包括服務和應用程序設置、操作系統組件的配置、權限和權利分配、管理規則等。 基線檢查內容 主要包括賬號配置安全、口令配置安全、授權配置、日志配置、IP通信配置等方面內容&…

Python -- Linux中的Matplotlib圖中無法顯示中文 (中文為方框)

目的 用matplotlib生成的圖中文無法正常顯示 方法 主要原因: 沒找到字體 進入windows系統的C:\Windows\Fonts目錄, 復制自己想要的字體 粘貼到Linux服務器中對應python文件所處的文件夾內 設置字體: 設置好字體文件的路徑在需要對字體設置的地方設置字體 效果 中文正常顯…

快速理解類的加載過程

當程序主動使用某個類時&#xff0c;如果該類還未加載到內存中&#xff0c;則系統會通過如下三個步驟來對該類進行初始化&#xff1a; 1.加載&#xff1a;將class文件字節碼內容加載到內存中&#xff0c;并將這些靜態數據轉換成方法區的運行時數據結構&#xff0c;然后生成一個…

搭建 Elasticsearch 集群:完整教程

本文將詳細介紹如何在 Linux 環境下搭建一個 Elasticsearch 集群&#xff0c;涵蓋環境準備、配置優化、服務啟動等多個環節。 一、環境準備 創建安裝目錄 mkdir /es cd /es解壓 Elasticsearch 安裝包 tar -xzf elasticsearch-7.10.1-linux-x86_64.tar.gz -C /es配置環境變量 編…

寶塔-docker拉取寶塔鏡像,并運行寶塔鏡像

寶塔-拉取寶塔鏡像&#xff0c;并運行鏡像 第1步&#xff1a;查詢 docker search btpanel/baota此docker鏡像由堡塔安全官方發布&#xff0c;鏡像版本為寶塔面板9.2.0正式版和9.0.0_lts 穩定版&#xff0c;鏡像會隨著寶塔面板更新。 目前支持x86_64和arm架構可供下載使用 版本…