WeMos D1 mini(ESP8266) 開發板介紹

在前面文章有簡短介紹到 WeMos D1 開發板,本文將介紹 WeMos D1 mini。
以筆者的認知最初會有一些國外的公司原創了一些開發板,若受大眾歡迎,隨後便會有很多第三方仿製的相容板因運而生,事實上應都是克隆得一模一樣只是不打上該原創公司的 logo,如下圖筆者手上的 D1 mini。
WeMos (Lolin)D1 mini 的原創板可參考此連結。
ESP8266 單晶片本身是沒有 flash 的,所以原廠就有另外再提供 ESP8266 模組,其是由幾個部件組成的:ESP8266EX 單晶片,26M 晶振 crystal,4M 的 flash,1 顆 LED,以及天線所構成的 ESP8266 模組,名稱是 ESP8266MOD。而開發板就可直接採用這樣的模組。
使用開發板,我們首先關注的就是主晶片系統本身的規格,及其被引出的功能腳位。其次了解開發板所提供的電源,例如 3.3V,5V 等。再者了解其提供的週邊例如感知器,LED,七段顯示器,按鍵,或其他擴充部件或已驅動部件例如只要透過 I2C 就能顯示資料在 LCD 上或可直接驅動大電流馬達等。
因此本章就以 D1 mini 的功能腳位作為結束。(意思是指,使用一張開發板入門就是這麼樸實無華)
而我們下一章就會有強烈的實例援引這一點。


D1 mini 規格
ESP8266MOD
| 主晶片工作電壓 | 3.3V |
| 數位 I/O 數量 | 11 |
| 類比輸入 I/O 數量 | 1 |
| 時脈 | 80/160 MHz |
| Flash 容量 | 4MBytes |
Functional/General-Purpose IOs
| 板上腳位標示 | 對應軟體使用 | ESP8266 官方腳位定義 | 對應軟體使用 | 腳位說明 |
| TX | TXD | UART TXD | ||
| RX | RXD | UART RXD | ||
| A0 | A0 | Analog input, max 3.2V | ||
| D0 | D0 | GPIO16 | 16 | |
| D1 | D1 | GPIO5 | 5 | I2C SCL |
| D2 | D2 | GPIO4 | 4 | I2C SDA |
| D3 | D3 | GPIO0 | 0 | 10k Pull-up |
| D4 | D4 | GPIO2 | 2 | 10k Pull-up, BUILTIN_LED |
| D5 | D5 | GPIO14 | 14 | SPI SCK |
| D6 | D6 | GPIO12 | 12 | SPI MISO |
| D7 | D7 | GPIO13 | 13 | SPI MOSI |
| D8 | D8 | GPIO15 | 15 | 10k Pull-down, SPI CS |
| G | Ground | |||
| 5V | 5V | |||
| 3V3 | Vcc, 3.3V | |||
| RST | Reset |
其他
| Connection | microUSB |
| USB2TTL | CH340G |
| All I/Os | runs at 3.3V |
| 參考批發價 | 13 RMB |
D1-mini 腳位的在軟體中的使用/程式碼中的使用
請參考上面表格,在 ESP8266 官方的定義,即真正的定義,是例如“GPIO0”,“GPIO12”,“GPIO13”,等等此類標記來表示 GPIO 腳位,因而在程式碼中,便可使用 GPIO12 來代表 GPIO12 實體 pin,也可直接使用數字 12 來代表 GPIO12 實體 pin。然而,當我們在 Arduino IDE 中選擇某張開發板後,本例是 D1-mini,那麼便會有 D1-mini 所屬的含括檔被引入,額外地定義了開發板上印出的腳位名稱,例如腳位 D6 這個板上名稱,事實上是 GPIO12 所引出的,因此 D6 也就會在含括檔中被對應地定義出來。故,在程式碼中,我們可以使用 GPIO12,或 D6 或 12,都代表同一支腳位。
上述,只是為了說明方便。事實上含括檔中並沒有 GPIO12 這樣的定義,而只有 D6,或 12 來定義到 GPIO12。因此,程式碼中只能使用 D6,或 12。往後常會對某些既有的程式碼作 GPIO 對應的修改以適用到我們的板子上。故上述請特別留意。
Claude-code 補充 / 20260901
文中「功能腳位」表格已經如實列出 D3(GPIO0)、D4(GPIO2)標示「10k Pull-up」、D8(GPIO15)標示「10k Pull-down」,這其實是三支很關鍵、卻常被新手忽略原因的腳位——它們是 ESP8266 開機時的「strapping pin(開機模式選擇腳)」,補充說明一下為什麼、以及接線時該注意什麼。
為什麼 D3/D4/D8 要特別小心接線
ESP8266 開機瞬間會讀取 GPIO0、GPIO2、GPIO15 這三支腳的電位,決定要進入「正常開機(跑 flash 裡的韌體)」還是「燒錄模式」:GPIO0 開機時要是高電位、GPIO2 開機時也要是高電位、GPIO15 開機時要是低電位,三者同時滿足才會正常開機(這也是表格上分別標 pull-up/pull-up/pull-down 的原因——開發板內建的分壓電阻,就是為了讓這三支腳在沒外接任何東西時,開機能維持在正確電位)。
問題在於,往後接麵包板電路時,若在 D3/D4/D8 上外接了會把電位拉往錯誤方向的元件(例如接了一顆會把 GPIO0 拉低的按鍵,或接了會把 GPIO15 拉高的 LED/上拉電阻),板子就會在每次重置或斷電重開時卡在燒錄模式或直接開機失敗,症狀通常是「程式明明燒錄成功、但一斷電重開就沒反應」,很容易被誤以為是板子壞了或程式碼有問題,其實只是外接元件干擾了開機腳位的電位。之後文章系列若接到用麵包板實作的範例,接線前可以先對照這三支腳,優先把它們留給不影響開機電位的用途(或至少接線前後都實測一次斷電重開)。
D0(GPIO16)也是特例,但原因不同
表格上 D0 沒有標示任何 pull-up/down,這是因為 GPIO16 走的是獨立的 RTC 電源域,跟其他腳位不是同一組電路,因此不支援中斷(interrupt)、PWM、I2C 這些其他腳位常見的功能,能用的場合有限。但它有一個其他腳位都做不到的特殊用途:如果把 D0 用一條線外接到 RST 腳,搭配程式裡呼叫 ESP.deepSleep(),時間到了 D0 會自動拉低去觸發 RST,讓晶片從 deep sleep 中喚醒重開機——這是 ESP8266 省電應用(例如電池供電的感測器)常見的接法,之後系列若寫到低功耗/電池供電相關文章,會是實際用得到的知識點。
發佈留言