使用 Arduino IDE 編寫 ESP8266 NodeMCU 程式

最近整理電子零件,發現一塊朋友送贈的 ESP8266 NodeMCU
雖然 ESP8266 NodeMCU 並不是很新的開發板,但既然尋回一些工具,在下當然不會浪費

ESP8266 NodeMCU

外觀
見下文
ESP8266 NodeMCU 正面

見下文
使用 ESP8266MOD WiFi晶片

見下文
ESP8266 NodeMCU 使用 CP2102晶片 將 USB 訊號轉換成 UART ,類似 FT232RL

見下文
FLASH按鈕 是 ESP8266 NodeMCU 的 GP0引腳
按下時,為低電壓;沒有按下時,為高電壓

見下文
RST按鈕,是 ESP8266 NodeMCU 的 RST引腳

見下文
ESP8266 NodeMCU 背面,印著各引腳的用途

引腳
編號引腳方向功能
13V3提供 3.3V
2GND接地
3GP1輸入/輸出第1數碼引腳
4GP3輸入/輸出第3數碼引腳
5GP15~輸入/輸出第15數碼引腳,10位元PWM訊號
6GP13輸入/輸出第13數碼引腳
7GP12~輸入/輸出第12數碼引腳,10位元PWM訊號
8GP14~輸入/輸出第14數碼引腳,10位元PWM訊號
9GND接地
103V3提供 3.3V
11GP2輸入/輸出第2數碼引腳,對應 WiFi LED,低電壓時亮著
12GP0輸入/輸出第0數碼引腳,對應 FLASH按鈕,按下時為低電壓訊號
13GP4~輸入/輸出第4數碼引腳,10位元PWM訊號
14GP5輸入/輸出第5數碼引腳
15GP16輸入/輸出第16數碼引腳,對應 開發板LED,低電壓時亮著
16A0輸入第0類比引腳,10位元類比訊號
17NC空引腳
18NC空引腳
19GP10輸入/輸出第10數碼引腳
20GP9輸入/輸出第9數碼引腳
21MOSI輸入/輸出韌體 SPI 的 MOSI引腳
22SS輸入/輸出韌體 SPI 的 SS引腳
23MISO輸入/輸出韌體 SPI 的 MISO引腳
24SCK輸入/輸出韌體 SPI 的 SCK引腳
25GND接地
263V3提供 3.3V
27EN高電壓為使用最高供率運作;低電壓或不接駁為使用最低供率運作
28RST低電壓時重置裝置
29GND接地
30VIN接受 3V 至 9V

載入開發模組

見下文
在 Additional Boards Manager URLs 加入 https://arduino.esp8266.com/stable/package_esp8266com_index.json

見下文
見下文
在 Boards Manager 尋找 ESP8266 並安裝

見下文
Tools > Board 選擇 ESP8266 Boared > NodeMCU 1.0 (ESP-12E Module)

見下文
Upload Speed 選擇 57600

見下文
Port 選擇 ESP8266 NodeMCU 的連接埠

見下文
ESP8266 NodeMCU 有 2 個電路板 LED,分別是 GP2 及 GP16
可以修改 LED_BUILTIN 使 GP2 或 GP16

見下文
在 ESP8266MOD WiFi 模組旁的 LED 是 GP2

見下文
在 CP2102 模組旁的 LED 是 GP16

見下文
編寫程式測試
const byte LED_WIFI = 2;
const byte LED_BOARD = 16;

void setup() {
	pinMode(LED_WIFI, OUTPUT);
	pinMode(LED_BOARD, OUTPUT);
	digitalWrite(LED_WIFI, HIGH);
	digitalWrite(LED_BOARD, LOW);
}

void loop() {
	delay(500);
}

見下文
由於 ESP8166 NodeMCU 的 2個 LED 都是在低電壓時才亮著
所以 GP2 的 LED 設定為 HIGH 沒有亮著,而 GP16 的 LED 設定為 LOW 卻亮著

見下文
使用 FLASH按鈕 的效果
const byte FLASH = 0;
const byte LED_WIFI = 2;
const byte LED_BOARD = 16;

void setup() {
	pinMode(FLASH, INPUT);
	pinMode(LED_WIFI, OUTPUT);
	pinMode(LED_BOARD, OUTPUT);
	digitalWrite(LED_WIFI, HIGH);
	digitalWrite(LED_BOARD, LOW);
}

void loop() {
	bool flashed = digitalRead(FLASH);
	digitalWrite(LED_WIFI, flashed);
	digitalWrite(LED_BOARD, !flashed);
	delay(1);
}

補充資料

ESP8266 NodeMCU 的正面及背面雖然都印著引腳的名稱,但部分引腳的名稱並不相同
例如正面印著 D8 背面則印著 GP15 ,當使用 Arduino IDE 調用這支引腳時,使用
pinMode(D8, OUTPUT);


pinMode(15, OUTPUT);

結果都是相同

總結

將 ESP8266 NodeMCU 的開發模組載入到 Arduino IDE 後,編寫的內容及基本操作與 Arduino 完全相同
ESP8266 NodeMCU 具備 WiFi 功能,價錢亦不算昂貴,大約40港元,某些購物平台只是大約10港元
提供一個讓使用互動操作 FLASH按鈕(GP16) ,要進行互動操作時,不需要額外連接按鈕
雖然只有13支數碼引腳可以使用,但對於學習用途及製作簡單專案都足夠

但 ESP8266 NodeMCU 只有 3.3V 電源輸出,沒有提供 5V 電源輸出
如果接駁的裝置需要 5V 電源才能起動,便需要外接供電器,或使用升壓裝置

參考資料