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

    【ESPHome 實作】HA 掛掉裝置照樣能動:on_boot、reboot_timeout 與本地備援邏輯

    [複製鏈接]

    !lvup!   100%

    386

    主題

    27

    回帖

    2200萬

    積分

    管理員

    積分
    22006063
    發表於 2026-9-21 13:14:51 | 顯示全部樓層 |閱讀模式
    這篇從「什麼都還沒買」開始,做到一個「拔掉網路線、關掉 Home Assistant,牆上的按鈕照樣能開燈」的裝置。

    每一步都有「你會看到什麼」。做完第三步能自己確認第三步成功了,才走第四步。

    這篇從「什麼都還沒買」開始,做到一個「拔掉網路線、關掉 Home Assistant,牆上的按鈕照樣能開燈」的裝置。

    做完這篇你會有什麼


    • 一個實體按鈕直接控制同一片板子上的繼電器,完全不經過 HA
    • 一組溫度超標自動關閉的本地保護邏輯,而且感測器壞掉時也會關
    • 一套你自己驗證過的「斷網測試」流程
    • 知道 `api: reboot_timeout` 那 15 分鐘到底在做什麼,以及什麼時候該設成 0


    為什麼要做這件事

    想像一個週末下午:


    • 你用 ESPHome 做了一個浴室燈開關,邏輯寫在 HA 的自動化裡
    • 你在升級 HA,或是 HA 的 SD 卡掛了
    • 家人按牆上的開關,燈不亮


    這時候沒有人會關心你的架構有多漂亮。

    ESPHome 最被低估的優勢就是:它本來就可以完全不依賴 HA。按鈕、感測器、繼電器都在同一片板子上,邏輯也可以寫在那片板子上。HA 的角色降級成「額外的控制介面和歷史紀錄」。

    ---

    第一步:買零件

    一套的總成本大約 350~500 元。括號裡是台灣賣場(蝦皮、露天、光華商場)常見的搜尋關鍵字。


    • ESP32 開發板 ×1(搜「ESP32 DevKit V1」或「ESP32-WROOM-32 開發板 38pin」,約 150~250 元)
    • 單路繼電器模組 5V ×1(搜「1路繼電器模組 5V 光耦」,約 40~80 元。一定要買有光耦隔離的版本)
    • 輕觸開關或按鈕 ×1(搜「6x6 輕觸開關」一包幾十顆約 50 元,或「自復位按鈕開關 12mm」約 20 元一顆)
    • DS18B20 溫度感測器 ×1(搜「DS18B20 防水探頭 不鏽鋼」,約 40~70 元。買防水探頭版通常已內含上拉電阻)
    • 4.7kΩ 電阻 ×1(搜「1/4W 金屬膜電阻包」,如果你的 DS18B20 是裸片就需要)
    • 麵包板 + 杜邦線(搜「麵包板 830 孔」約 50 元、「杜邦線 40pin 三色」約 80 元)
    • USB 電源供應器 5V/1A ×1


    為什麼選 DS18B20 而不是溫濕度模組

    這篇要示範「過熱保護」,DS18B20 有防水金屬探頭的版本,可以真的貼在會發熱的東西上(熱水管、散熱片),而溫濕度模組只能量空氣。而且它是單線協定,只佔一隻腳。

    為什麼一定要有光耦隔離的繼電器模組

    繼電器線圈斷電的瞬間會產生反向電壓(反電動勢),光耦把 ESP32 那一側和繼電器線圈那一側在電氣上分開,這個突波打不到 ESP32。沒有隔離的便宜模組會讓 ESP32 隨機重開,而且你會找很久都找不到原因。

    ---

    第二步:接線

    接按鈕(兩隻腳或四隻腳)

    6x6 的輕觸開關有四隻腳,但其實是兩組各自相通的:正對面的兩隻是一組。分不出來的話用三用電表的蜂鳴檔量,兩隻腳一直嗶的就是同一組(那兩隻不能用),按下去才嗶的才是你要的那一對。


    • 按鈕的一隻腳 → ESP32 的 GPIO13
    • 按鈕的另一隻腳(對角線那隻) → ESP32 的 GND


    不需要外接電阻 —— 設定檔裡會打開 ESP32 內建的上拉電阻。原理:平常那一腳被上拉到 3.3V(讀到 HIGH),按下去接通到 GND(讀到 LOW),所以設定要寫 `inverted: true`。

    接繼電器模組(三條線)


    • 繼電器模組的 VCC → ESP32 的 5V(VIN)
    • 繼電器模組的 GND → ESP32 的 GND
    • 繼電器模組的 IN(有的寫 S 或 SIG) → ESP32 的 GPIO12


    ⚠ 這一步只接控制側,負載那一側先不要接任何東西。這篇的驗證全部靠「聽繼電器有沒有喀一聲」和「看模組上的指示燈」,不需要真的接電器。

    接 DS18B20(三條線)

    防水探頭版通常是三條線:紅色 = VCC、黑色(或藍色)= GND、黃色(或白色)= DATA。


    • 紅線 → ESP32 的 3V3
    • 黑線 → ESP32 的 GND
    • 黃線 → ESP32 的 GPIO14
    • 另外,黃線和紅線之間要接一顆 4.7kΩ 電阻(在麵包板上跨接就好)


    那顆 4.7kΩ 是單線協定的上拉電阻。DS18B20 用同一條線雙向通訊,靠的是「平常被拉到高電位,要送 0 的時候把它拉到地」。沒有這顆電阻的話線路浮空,症狀是 ESPHome 完全掃不到任何感測器,而且不報錯。

    有些賣場的防水探頭已經在接頭裡內建了這顆電阻,多接一顆會變成 2.35kΩ(並聯),實務上還是能動。分不出來的話就接,接了比沒接保險。

    ⚠ 腳位為什麼選 12 / 13 / 14


    • 絕對不能用 GPIO6~11 —— 那六隻接內建的 SPI flash,接了會直接當機
    • GPIO34~39 只能輸入,而且沒有內建上下拉 —— 按鈕不能接在那裡(沒有上拉電阻,讀到的值會亂跳)
    • GPIO0 / 2 / 15 是 strapping pin,開機瞬間會被讀取。GPIO12 嚴格說也是(它影響 flash 電壓),但接繼電器模組的 IN 腳實務上沒問題,因為模組那一側是高阻抗輸入。不放心的話換 GPIO26 或 GPIO27


    接完先目視檢查


    • 繼電器模組的 VCC 接在 5V / VIN,不是 3V3(3.3V 驅動不了線圈,症狀是「軟體有反應但不會喀」)
    • DS18B20 的紅線接在 3V3,不是 5V
    • 4.7kΩ 那顆電阻跨在黃線和紅線之間,不是黃線和黑線之間


    ---

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

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

    本版積分規則

    延伸閱讀

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

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

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

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