作者:陸向陽
ESP8266是近期相當紅的平價Wi-Fi晶片(平價已經是含蓄用詞,日本話可能不只是安,已經是激安、爆安,安=便宜),但由於不同的板卡商做出不同的ESP8266子卡,甚至深圳安可信公司推出了12款以上的子卡,即ESP-01~13,另外還有ESP-12E、ESP-201等,一時間讓人眼花撩亂。
如果只用ESP8266的Wi-Fi無線介面、UART有線介面,則選用各子卡幾乎無差別,但怕就怕在希望想使用ESP8266的I/O接腳,用來輸入、輸出感測訊號,或開關繼電器等,此時不同的子卡就有別,因為有的子卡並沒有引出晶片的所有接腳(大陸叫管腳、引腳),買錯了就麻煩了,例如安可信的ESP-05、ESP-10完全沒有給GPIO接腳。
筆者也看了多款ESP8266子卡,最陽春的只引出兩個接腳供人使用,有的則很多,這引發筆者想了解整個ESP8266的GPIO配置,不過因為不同文件、不同資料,有些資料有些出入或需要花時間驗證,因此筆者姑且將本文稱為探索,以供交流討論。以下從三個角度來看看:
1.接腳數目
有的ESP8266 Datasheet寫有16支GPIO接腳,但仔細一算好像是17,即GPIO0~GPIO16,但這裡的17支不含第6腳位的TOUT接腳(Timer Out),此接腳之後成為ADC輸入接腳,安可信的ESP系列子卡,要到ESP-07才開始提供ADC接腳功能。
2. 所有GPIO接腳均為多工
摩爾定律讓晶片電路愈來愈小,電路功能可以愈設計愈複雜,但接腳數目卻很難對應增加,所以只好讓接腳多工化,事實上ESP8266上的UART介面(透過UART轉USB,或稱TTL轉USB線路與PC連接)就用了GPIO1、GPIO3腳位。
而GPIO0、GPIO2,理論上也是多工接腳,若規劃啟用SPI介面,則會動用到GPIO0,若規劃啟用I2S介面,則會動用到GPIO2,不過實務上很少如此用,多半當成一般GPIO供Maker自由運用。
接下來是GPIO4、GPIO5,GPIO4接腳另一功用是CLK_XTAL,是連接外部時脈產生器的輸出接腳,GPIO5則為內部RTC的對外輸出接腳,稱為CLK_RTC,多數狀況下這兩支接腳規劃成GPIO,而不用於時脈輸出,如ESP-12、ESP-12E、NodeMCU DevKit v0.9/1.0或樂鑫官方的ESP-WROOM-02。
至於GPIO6~11的6支接腳,實務上多半是規劃成SPI介面型態(其實也可以規劃配置成SD/SDIO介面)與外部SPI Flash串列傳輸型快閃記憶體連接,更簡單說就是連接ESP8266的韌體晶片,因此基本上Maker不能再動用了。
不過,有的板卡設計也沒有全用上6支接腳,即便規劃成SPI介面,也沒用上SPIHD(持留)、SPIWP(寫入保護)接腳,所以有的子卡是可以動用此兩接腳的(如ESP-12D),如此便獲得GPIO9、GPIO10。
另外ESP8266的GPIO12~15共4支接腳是可以規劃成高速SPI介面的,若不如此用則可以獲得4個GPIO接腳,最後加上GPIO16(若不當GPIO接腳則為深眠狀態的外部喚醒接腳),就是所有的接腳。
此外也可以規劃出I2C介面(GPIO2、GPIO14)、I2S介面(GPIO2/3/12/13/14/15),第二組UART介面(GPIO2、GPIO8)、紅外線遙控介面(GPIO5/12)等。
3. PWM接腳、按鈕與燈號
另外是有關PWM輸出腳位,有的資料顯示GPIO12/13/15可以規劃成PWM,但比較新的Datasheet似乎顯示為GPIO4/12/14/15,由3支變成4支,並且GPIO13改成GPIO14?
最後,也是可以把GPIO規劃成按鈕與燈號,例如GPIO13變成重新開機、重置按鈕(RESET/RST)輸入,而GPIO0變成Wi-Fi傳輸動作與否的狀態輸出燈號,GPIO12則變成UART傳輸動作與否的狀態輸出燈號。
雖然ESP8266接腳功能多,但筆者隱約感覺,後續的新板卡多只佔用6支連接韌體記憶體晶片的接腳,以及2支第一組UART的接腳(UART0),其餘的接腳多傾向釋放出來給人自由運用,這聽來應該是個利多,希望真的如此發展了。
以下是筆者整理出來的EPS8266接腳功能比較表,請參考指教。
- 創客積木M5Stack加入LLM戰局 - 2024/11/29
- MLPerf大語言模型、生成式AI測項觀察 - 2024/11/27
- Sony強力加持!樹莓派發表專屬AI攝影機 - 2024/10/28