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

    【ESPHome 實作】一個實體按鈕做四件事:接線、去彈跳、單擊雙擊長按

    [複製鏈接]

    !lvup!   100%

    386

    主題

    27

    回帖

    2200萬

    積分

    管理員

    積分
    22006063
    發表於 2026-9-21 13:07:04 | 顯示全部樓層 |閱讀模式
    一顆三塊錢的按鈕,可以做到單擊開燈、雙擊全屋關燈、長按調成夜燈、三擊執行離家模式。

    而且網路斷了、Home Assistant 掛了還是能用 —— 這是自己做開關相對於市售雲端開關最大的價值。

    這篇從買零件開始,每一步都有「你會看到什麼」。

    網路斷了、Home Assistant 掛了還是能用

    做完這篇你會有什麼


    • 一顆接在 ESP32 上、會去彈跳的實體按鈕
    • 單擊/雙擊/三擊/長按各自觸發不同動作
    • 一路繼電器,按鈕直接控制它(不經過 Wi-Fi 和 HA)
    • (加碼)一顆旋鈕,轉動可以調燈的亮度


    ---

    第一步:買零件

    只做按鈕的話,一百多塊就夠了(假設你已經有 ESP32)。

    基本款(只做按鈕)


    • ESP32 開發板 ×1(搜「ESP32 DevKit V1」或「ESP32-WROOM-32 開發板 38pin」,約 150~250 元)
    • 6×6mm 輕觸開關 ×10(搜「6x6 輕觸開關 按鍵開關」,一包約 30~50 元。買一包是因為很便宜而且容易弄丟)
    • 麵包板 + 杜邦線(搜「麵包板 830 孔」、「杜邦線 公對母 40pin」,約 90 元)


    要裝在牆上或面板上的話,改買這個


    • 16mm 金屬防水按鈕(瞬時型) ×1(搜「16mm 金屬按鈕 自復位」或「16mm 平頭按鈕 瞬間」,約 60~120 元)
    • ⚠ 一定要買「自復位/瞬時(Momentary)」,不要買「自鎖/保持(Latching)」。自鎖型按下去會卡住,ESPHome 會認為你一直壓著,多擊完全不能用


    想順便控制一盞燈的話(選配)


    • 一路 5V 繼電器模組(帶光耦隔離) ×1(搜「1路 繼電器模組 5V 光耦」,約 40~80 元)
    • ⚠ 一定要買有「光耦」(optocoupler,板上那顆四腳黑色小方塊,通常印 817)的版本。沒有光耦的話,繼電器線圈斷電瞬間產生的反電動勢(電感的特性,電壓可以高達幾十伏特)會直接打回 ESP32 的腳位


    想做旋鈕的話(加碼段用)


    • EC11 旋轉編碼器(帶按壓開關) ×1(搜「EC11 旋轉編碼器 帶開關」,約 30~60 元)


    為什麼是 6×6mm 輕觸開關

    它是最便宜、最好買、麵包板可以直接插的規格。缺點是手感差、不能裝在面板上 —— 所以只適合做原型。確認邏輯都對了之後,再換成 16mm 面板按鈕,設定檔一個字都不用改。

    ---

    第二步:接線(以及那個大家都會問的問題:要不要接電阻)

    輕觸開關有四隻腳,但其實只有兩組

    6×6mm 的輕觸開關有四隻腳,對角的兩隻是同一組、相鄰的兩隻不一定。看開關的正方形本體:


    • 同一「邊」的兩隻腳(間距比較近的)永遠是相通的
    • 按下去的時候,兩邊才會接通


    最保險的做法:插麵包板時,讓開關跨在中間的溝上,然後用對角的兩隻腳。對角一定是不同組,絕對不會接錯。

    沒把握的話用三用電表的導通檔量一下:按下去會嗶、放開不會嗶的那兩隻,就是對的。

    接法(只要兩條線)


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


    ⚠ 不用接電阻 —— 但你要知道為什麼

    沒有按鈕的時候,那隻腳是「浮空」的。浮空的腳會像天線一樣接收環境中的電磁雜訊,讀出來是隨機的 0 和 1。所以一定要有東西把它「定」在某個電位,這就是上拉/下拉電阻在做的事。

    ESP32 的 GPIO 內建了上拉電阻(大約 45kΩ),在設定裡打開就好,所以一般情況不用外接。設定裡的那三行:
    1.       mode:
    2.         input: true
    3.         pullup: true
    複製代碼

    意思是「這隻腳當輸入,而且打開內建上拉」。這樣:


    • 沒按 → 上拉電阻把腳位拉到 3.3V → 讀到 HIGH
    • 按下 → 按鈕把腳位直接接到 GND → 讀到 LOW


    所以「按下」是 LOW,跟直覺相反 —— 這就是為什麼設定裡要寫 `inverted: true`。

    `inverted: true` 的意思是「把讀到的電位反過來解讀」:LOW 當成「按下(on)」、HIGH 當成「放開(off)」。少了這一行,HA 裡會看到「平常是 on,按下去變 off」,所有的 `on_press` 都會在你放開的時候才觸發。

    ⚠ 什麼時候真的需要外接電阻(三種情況)


    • 用 GPIO34、35、36、39 的時候 —— 這四隻只能輸入,而且沒有內建上下拉電阻。要用就必須自己接一顆 10kΩ 電阻從腳位拉到 3.3V。這是最容易踩到的一條
    • 按鈕的線超過一公尺 —— 內建的 45kΩ 太弱,長線等於長天線,會收到雜訊而誤觸發。外接一顆 4.7kΩ 或 10kΩ 到 3.3V,把腳位「拉得更硬」
    • 旁邊有繼電器、變壓器、馬達 —— 同理,環境雜訊大就要把上拉做強一點


    外接的接法:`ESP32 的 3V3` → `10kΩ 電阻` → `GPIO13`(同時也是按鈕那隻腳)。設定裡的 `pullup: true` 可以留著,兩個並聯等效阻值更低,沒有壞處。

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

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

    本版積分規則

    延伸閱讀

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

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

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

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