當 Alexa 遇上 ESP8266 (二)
上回我把用 ESP8266 接受 Amazon Echo 控制所需要的軟體大致搞定後,就準備來做板子了。
我想做一塊板子,上面用 ESP8266 控制一個 relay 或 SSR,而且最好可以直接用 AC110V 供電,這樣就不用再煩惱數位電路的電源問題。
為了要供電,我去淘寶上找了這個模組:
這是一個 Hi-Link 做的 AC-DC 的隔離電源模組 HLK-PM01,拜現在交換式電源高頻化和零件進步之賜,這種 3W 左右的 AC-DC 模組小到可以直接插在板子上,而且它的 AC 輸入是 100-240V 全電壓的。
其實淘寶上還可以買到很多這種來路不明的 AC-DC 電源模組:
但它們的做工之粗糙,實在讓人很難放心用在自己的 project 中。Hi-Link 的模組有殼、有灌膠,雖然不知道裡面的電路板長什麼樣子,至少外觀讓人比較安心。
至於用來控制負載的裝置,典型的做法當然是用一顆 relay (繼電器),但我想既然這不是量產用的設計,用料可以豪華一點,我就決定放一顆 SSR 上去。
SSR 是固態繼電器 (solid state relay),它其實是一種半導體零件,跟 relay 一樣可以用小訊號控制大負載。大部分的 SSR 都是利用光耦合的原理運作: 在 SSR 內部有一個 LED,控制端的小訊號點亮這個 LED 後,會使一個光電二極體導通,而這個光電二極體上的訊號就可以用來控制更大的半導體元件去驅動更大的負載。以我需要的這種 DC 控制 AC 的 SSR 來說,負載側的半導體元件通常是雙向矽控整流管 (TRIAC)。
我去淘寶上找了這個 SSR:
這是一家叫固特控制的大陸廠商做的 SSR,非常便宜,我買的這顆 SAI4005D 可以控制 5A 的負載,一顆不到台幣 50 塊。同樣規格的日系 SSR 在光華商場一顆至少要三百塊。
便宜歸便宜,我拿到東西後測了一下,功能沒什麼問題,外觀也還 OK。有時候真的不知道大陸這些便宜的電子零件到底可以賺什麼。
這兩個關鍵零件到手後,就可以設計電路了。電路其實很簡單:
之前提過,由於模擬的 WeMo Switch 只是一個可以 on/off 的開關,ESP8266 也就只能輸出開和關兩個狀態,沒辦法再做更複雜的控制,因此我就只能用一支 ESP8266 的 GPIO 腳去控制 SSR。
跟據 SSR 的 datasheet,它的控制電壓是 3-15V,控制電流是 6-25mA。ESP8266 的 I/O 是 3.3V,因此可以推估流過 SSR 控制端的電流大概會比 6mA 多一點。ESP8266 的 digital fanout 能力是 12mA,理論上可以直接驅動 SSR,但我為了保險起見還是加了一顆 NPN 電晶體,並且用 5V 去驅動 SSR。
除了 SSR 跟 AC-DC 電源外,板子上就只有 3.3V 的穩壓器跟 ESP8266 本人。我沒有把燒錄電路做在上面,因為我手上有不少現成的 USB 轉 UART 線,可以直接用,只要把 RESET 跟 GPIO0 做成兩顆按鈕,就可以控制 ESP8266 進入燒錄狀態。
畫完之後覺得板子上的零件好少,有點孤單,又順手加了 I2C 的 OLED 模組接頭以及 DHT11/22 溫濕度感測器上去。
這是最後的 PCB layout:
這種複雜度的 PCB 真的沒什麼可以說的,唯一要注意的就是一次測跟二次側的隔離,以及 AC110V 兩端的 gap 要夠。
出好 Gerber,上淘寶敲了熟識的板廠,確認檔案沒問題、付了錢後,不到一個禮拜,電路板就在我桌上了。
如果是這種 1.6mm 厚、綠色防焊、沒有特殊 CNC 成形的板邊,10 片樣品只要人民幣 48 元含大陸國內運費,就算加上集運到台灣的運費,做一次還是不到三百塊台幣,差不多是我以前在台灣的樣品廠製作價格的十分之一。
再來就是裝配了。
雖然這些板廠都宣稱板子寄出來之前,都有用飛針測過,但偶爾還是會遇到板子有 open/short 的問題,如果零件已經焊上去才發現,就會很麻煩。因此我習慣一步一步地組裝,通常會先裝電源,確定各級電源都有出來後,再裝主要的 IC 或其它的大零件。
這是全部裝好的樣子。
然後就可以用 USB-UART 轉接線把程式燒錄進去。我沒有加上用 UART 的 RTS 跟 DTR 控制 RESET 和 GPIO0 的自動燒錄電路,因此要燒錄前要先按著 GPIO0 的按鈕,再按下 RESET,讓 ESP8266 進入 UART 燒錄模式,Arduino IDE 才能把 binary 燒進去。
這條 USB-UART 的轉接線還可以供應 5V 的電源,因此燒錄時板子不需要另外供電。而且我還可以用它供電,先確定程式運作沒有問題,再從 AC-DC 模組供電。
我找了一個 AC 插頭,把它焊到 JP2 (AC) 上,再找了一個插座,把它焊到 JP1 (load) 上。
這裡有個不好的示範: 我用的線太細了。
這顆 SSR 可以過 5A 的電流,因此至少要用到 AWG20 的線才安全,但我手上一時沒有那麼粗的線,就抓了 AWG24 的線來用。這線雖然比較細,絕緣倒是沒有問題,它可以耐到 300V。
我再拿了一顆 USB 的充電器,插上一個 USB LED 當作負載。
一切就緒後,插上 AC 插頭,板子活了過來。確定它連上跟 Echo 所連接的同一個 WiFi 後,對著 Echo 說:
“Alexa! Discover devices.”
這時 Echo 就會在網路上透過 UDP multicast 開始尋找它認得的裝置。
在 ESP8266 的 UART 上可以看到 fauxmo 吐出來的 debug message:
這是 fauxmo 透過 HTTP over UDP 回應 Echo 的答案,裡面包含 setup.xml 這個檔案的 URL。從最後一行可以看到,fauxmo 將自己偽裝成一個 Belkin 的 Wemo Switch,以便讓 Echo 認得。
如果 Echo 有正確找到裝置,它會用語音告訴你它找到幾個新的裝置,以及它們叫什麼名字。同時在 Alex App 上的 Smart Home 功能之下,也能看到這些裝置。
我在程式碼中把這個裝置的名字設成 “Magic Bird”,因此在這裡就會看到這個名字。
#define DEVICE_NAME "Magic Bird" fauxmo.addDevice(DEVICE_NAME); // add device
裝置的名字最好不要取得太奇怪,免得你唸的跟 Alexa 想的不一樣,它聽不懂,就沒辦法控制。至於 Alexa 會怎麼解讀這個名字的讀音,在下完 discover devices 的指令之後,它會把找到的裝置名稱用它認為的方法唸一遍,你可以藉由這個方法確認該怎麼叫,Alexa 才聽得懂。
像 “Magic Bird” 這樣的名字由於都是英文的常用字,讀音沒有什麼模糊的空間,因此多半不會有問題。但剛剛有個很皮的實習生叫我把它設成 “Angelababy” 試試看。由於 “Angelababy” 這個字不是一個正規的英文單字,Alexa 只能用拼音規則去解讀它的讀音,因此造成它認為的重音和我們習慣唸的重音不一樣,辨識率就很低。
裝置找到之後,只要對著 Echo 說:
“Alexa, turn Magic Bird on!”
ESP8266 就會把 GPIO14 拉起來,打開 SSR,讓 AC 導通到插座上。
完工!
***
就在我辛辛苦苦選零件、畫電路圖、畫 layout、把電路板洗出來、組裝好之後沒多久,我在淘寶上看到這個東西:
這東西叫 “Sonoff Wi-Fi smart switch”,是一個可以用 Wi-Fi 控制的 AC 開關,有附一個手機用的 app。我看到某些論壇上有人在討論這東西,說它是用 ESP8266 做的,便買了兩顆回來看看。
把殼拆掉後是這個樣子:
板子上有顆 ESP8266 (在背面),一組 AC-DC 電源,以及一顆 10A 的 relay。它根本就和我設計的板子一模一樣,我突然覺得我畫板子畫這麼辛苦幹嘛,早知道有這個東西就買回來燒就好了. ESP8266 要重燒 firmware 是非常簡單的事,只要找到 UART、RESET、和 GPIO0 的接腳就可以燒錄了.
最後我只能告訴自己,至少我用的是 SSR,比 Sonoff 上用的 relay 要可靠、壽命長得多…
***
程式碼及 PCB 的 Gerber 檔我放在 GitHub 上了。想複製的人可以參考這裡。
我想學習使用ESP8266 是否可以教導我呢?
市面上相關書籍相當多,也有大量的網站資料可以供參考,建議你先搜集一下資料,了解自己需要什麼,再擬定學習的方向和計畫
您好,因為正致力homekit物聯方面的規劃,無意間拜讀到您的作品,覺得挺好的,就瀏覽了一下部落格, 可以得見是一個被某個好奇就忍不住會手癢即知即行的人。個人見解創業在一個風口起飛後要持續的實力來維持,基本有了還弄得出現金流.我個人也拉大提琴.
我只想要做門禁開關 (單純switcj)
不要 110V 輸出
可用 Sonoff 改嗎?
Sonoff 的控制接點跟電源接在一起,不能當乾接點用。如果只需要乾接點,可以用 Sonoff Mini
我是把繼電器開關側電源端銅箔刮除切斷, 應該就變成單純switch