找回密碼
 立即註冊
    查看: 140|回覆: 0

    【ESPHome 實作】Lambda 入門:三個完整可跑的例子(不會 C++ 也做得出來)

    [複製鏈接]

    !lvup!   100%

    386

    主題

    27

    回帖

    2200萬

    積分

    管理員

    積分
    22006063
    發表於 2026-9-21 13:07:13 | 顯示全部樓層 |閱讀模式
    ESPHome 的賣點是「不用寫程式」。但有些事 YAML 真的做不到,這時候要用 lambda —— 一小段嵌在 YAML 裡的 C++。

    網路上講 lambda 的文章幾乎都是「語法目錄」:列出一堆片段,看完還是不知道要放哪裡。

    這篇不那樣寫。三個例子,每一個都有零件、接線、一整份可以直接燒的設定檔、以及你會在日誌裡看到什麼。做完你手上會有一台真的在跑的東西,而不是一堆片段。

    零件、接線、一整份可以直接燒的設定檔、以及你會在日誌裡看到什麼

    做完這篇你會有什麼


    • 一台會算露點和體感溫度的溫濕度計(這兩個值沒有感測器直接量得到,只能算)
    • 一個把光敏電阻的電壓換算成百分比、判斷天黑了沒(含遲滯)、並輸出中文描述的感測器
    • 一片OLED 小螢幕,上面顯示溫濕度和露點(含中文字型怎麼弄)


    先說結論:九成的 lambda 只有一行
    1. lambda: return x * 2;
    複製代碼

    `x` 是進來的值、`return` 出去的就是結果。會了這個就會八成。

    ---

    第一步:買零件

    三個例子總共需要這些,大約四百元(假設你已經有 ESP32)。


    • ESP32 開發板 ×1(搜「ESP32 DevKit V1」或「ESP32-WROOM-32 開發板 38pin」,約 150~250 元)
    • AHT20 溫濕度模組 ×1(搜「AHT20 溫濕度感測器模組」,約 40~70 元)—— 例一、例三用
    • 光敏電阻 GL5528 ×5(搜「光敏電阻 5528」,一包約 30 元)—— 例二用
    • 10kΩ 電阻 ×5(搜「金屬皮膜電阻 10K 1/4W」,一包約 20 元)—— 例二用
    • 0.96 吋 OLED(SSD1306、I2C 四腳版) ×1(搜「0.96 OLED I2C 四腳 SSD1306」,約 80~150 元)—— 例三用
    • 麵包板 + 杜邦線(約 90 元)


    為什麼 OLED 要買「I2C 四腳」的

    SSD1306 模組有 I2C(四隻腳:VCC/GND/SCL/SDA)和 SPI(七隻腳)兩種。I2C 版可以跟 AHT20 共用同一組線,兩隻腳就搞定兩個裝置,接線簡單太多。SPI 版快一點,但這個用途完全不需要。

    為什麼光敏電阻選 GL5528

    它是最常見的型號,亮處約 1~10kΩ、暗處到 1MΩ 以上,搭配 10kΩ 電阻分壓剛好把整個範圍攤開在 0~3.3V 之間。買 GL5516(更靈敏)或 GL5537(比較鈍)也可以,但分壓電阻要跟著換。

    ---

    第二步:接線(三個例子共用一組線)

    第二步:接線(三個例子共用一組線)

    AHT20 和 OLED 共用 I2C(這是 I2C 的重點:可以掛很多裝置在同兩條線上)


    • AHT20 的 VIN → ESP32 的 3V3
    • AHT20 的 GND → ESP32 的 GND
    • AHT20 的 SDA → ESP32 的 GPIO21
    • AHT20 的 SCL → ESP32 的 GPIO22
    • OLED 的 VCC → ESP32 的 3V3
    • OLED 的 GND → ESP32 的 GND
    • OLED 的 SDA → ESP32 的 GPIO21(跟 AHT20 同一隻)
    • OLED 的 SCL → ESP32 的 GPIO22(跟 AHT20 同一隻)


    為什麼兩個裝置可以接同一隻腳而不會打架:I2C 上每個裝置有自己的位址。AHT20 是 0x38、SSD1306 是 0x3C(少數模組是 0x3D)。主控每次只叫一個。同一條匯流排上只要位址不重複,掛十幾個都可以。

    光敏電阻的分壓電路(三個元件,要接對)

    光敏電阻本身只是一顆「亮度會改變電阻值」的元件,ESP32 只會量電壓不會量電阻,所以要做成分壓電路把電阻變化轉成電壓變化。


    • ESP32 的 3V3 → 光敏電阻的一隻腳
    • 光敏電阻的另一隻腳 → 這個接點同時接兩個地方:ESP32 的 GPIO34,以及 10kΩ 電阻的一隻腳
    • 10kΩ 電阻的另一隻腳 → ESP32 的 GND


    光敏電阻沒有極性,兩隻腳可以對調。

    這個電路在做什麼(不是抄一個數字)

    分壓公式是 `V = 3.3 × R下 / (R上 + R下)`。這裡 R下 是固定的 10kΩ、R上 是光敏電阻:


    • 很亮(光敏電阻約 1kΩ)→ V = 3.3 × 10 / 11 ≈ 3.0V
    • 室內正常(約 10kΩ)→ V = 3.3 × 10 / 20 ≈ 1.65V
    • 昏暗(約 50kΩ)→ V = 3.3 × 10 / 60 ≈ 0.55V
    • 全黑(約 1MΩ)→ V ≈ 0.03V


    為什麼分壓電阻選 10kΩ 而不是 1kΩ 或 100kΩ:要讓「你最在乎的那個亮度範圍」落在電壓變化最劇烈的地方。室內判斷天黑沒天黑,光敏電阻大約在 5k~50kΩ 之間,選一顆同量級的固定電阻(10kΩ)就能把這段攤開到 0.5V~2.2V,解析度最好。選 1kΩ 的話整段都擠在 0.06V~0.5V,雜訊會蓋掉訊號。

    ⚠⚠ 為什麼一定是 GPIO34,不能隨便挑

    ESP32 的 ADC2(GPIO 0、2、4、12、13、14、15、25、26、27)跟 Wi-Fi 共用硬體。Wi-Fi 一啟動就把它佔走,讀出來是垃圾值或直接讀不到,而且完全不會報錯。

    要用 ADC1 的腳:GPIO 32、33、34、35、36、39。本篇用 34。

    (ESP32-S3、C3、C6 沒有這個限制。但最常見的 WROOM-32 有。)

    ---

    第三步:secrets.yaml
    1. wifi_ssid: "你家的Wi-Fi名稱"
    2. wifi_password: "你家的Wi-Fi密碼"
    3. ap_password: "至少八碼的備援密碼"
    4. api_key_lambdalab: "在 ESPHome 新增裝置時產生的那把 44 字元金鑰"
    複製代碼

    ---

    以下還有約 81% 的內容
    登入後即可閱讀完整教學

    登入繼續閱讀使用 Google 登入
    您需要登入後纔可以回帖 登入 | 立即註冊

    本版積分規則

    延伸閱讀

    加入惟家 LINE 群 QR Code加入惟家 LINE 群

    Archiver|手機版|惟家的智能論壇

    GMT+8, 2026-11-10 00:45 , Processed in 0.131055 second(s), 25 queries .

    快速回覆 返回頂部 返回列表