เปิดโลก iot ด้วย NodeMCU, มือใหม่ทำไมต้องลอง?
IoT หรือ Internet of Thing (อินเตอร์เน็ตในทุกสิ่ง) เป็นกระแสร้อนแรงมาสักพักแล้ว ผู้กำลังเริ่มต้นหลายๆคนก็อาจจะอยากจะลองสร้างโปรเจคเพื่อเชื่อมต่ออุปกรณ์ในชีวิตประจำวันเข้ากับอินเตอร์เน็ตดูบ้าง แต่คำถามก็คือเราจะเริ่มต้นจากตรงไหนดี?
ซึ่งสำหรับมือใหม่ (หรือผู้ที่ชำนาญแล้วก็ตาม) ถ้าจะพูดถึงบอร์ด iot ที่ครบเครื่องและราคาย่อมเยาผมเชื่อว่าคงหนีไม่พ้น NodeMCU แน่นอน เนื่องจากในบอร์ดเดียวนี้สามารถรองรับ input output ที่หลากหลายอีกทั้งยังมีโมดูล WiFi ในตัวเพื่อเชื่อมต่อกับอินเทอร์เน็ต ราคาก็ยังถูกกว่ากาแฟไฮโซร้านดังแค่แก้วเดียวเสียอีก (ราคาบอร์ดประมาณ 70 - 80 บาท) เรียกได้ว่าอดคาเฟอีนแค่เพียงมื้อเดียว ก็นำมาซื้อกุญแจเพื่อเปิดประตูเข้าสู่โลก iot ได้แล้ว ☕
โดยในบทความนี้ผมก็จะกล่าวถึงประวัติความเป็นมาของ NodeMCU, เปรียบเทียบข้อแตกต่างของรุ่นต่างๆในตลาด และ ยกตัวอย่างการเขียนโปรแกรมง่ายๆให้ไฟกระพริบบนบอร์ด ผู้เริ่มต้นสามารถทำตามได้สบายๆ เพื่อใช้เป็นพื้นฐานในการทำโปรเจคที่ซับซ้อนต่อไป
ประวัติความเป็นมาของ NodeMCU
จริงๆแล้ว NodeMCU เริ่มต้นจากการนำชิปตระกูล ESP-12 เช่น ESP-8266 ที่มีความสามารถในการเชื่อมต่อสัญญาณอินเตอร์เน็ต มาทำงานร่วมกับ firmware ที่ใช้ Lua script เป็นหลัก ซึ่งในช่วงนั้นก็ถือว่า “ว้าว” แล้วนะครับ เนื่องจากสามารถนำเอา ESP-8266 ที่ต่อเน็ตได้มาพัฒนาเป็น iot project ได้เลยโดยไม่ต้องพึ่งพาไมโครคอนโทรลเลอร์ และเนื่องด้วยความเป็น Hardware Open Source ของ Arduino ทำให้ผู้ผลิตเจ้าต่างๆ สามารถนำไปต่อยอดพัฒนามาเรื่อยๆจนกลายเป็นบอร์ด NodeMCU หลากหลายเวอร์ชั่น ให้เราได้เลือกใช้ในปัจจุบัน
เปรียบเทียบ NodeMCU รุ่นต่างๆ ซื้ออะไร เลือกใช้ยังไงให้เหมาะสม
NodeMCU ที่เราเห็นกันส่วนใหญ่จะมีทั้งรุ่นที่ใช้ชิป ESP8266
และรุ่นที่ใช้ชิป ESP32
ซึ่งบางทีก็เรียกว่า “NodeMCU ESP32” หรือ “NodeMCU-32S” นอกจากนั้นผู้ผลิตแบรนด์ต่างๆก็ทำ NodeMCU ออกมาในหน้าตาและสเปกต่างกันไป เวลาเราเลือกซื้อจึงต้องดูให้ดีว่ามันใช้ชิปตัวไหน, มี USB-to-Serial Chip อะไร, หรือมีรูปแบบ Pin Layout อย่างไรบ้าง
- Usb-to-Serial: มีหน้าที่ในการสื่อสารแบบ serial เช่นคอมพิวเตอร์สื่อสารผ่าน USB ตอนอัพโหลดโปรแกรมลงบอร์ด ส่วนใหญ่จะมี 2 รุ่นคือ ch340 และ cp2120 ซึ่งเป็นรุ่นมาตรฐานไม่ค่อยแตกต่างกันเท่าไหร่แต่หากไปเจอบอร์ดที่มีชิปนอกเหนือจาก 2 รุ่นนี้ให้ระวังเรื่อง driver ที่ support ในเครื่องคอมพิวเตอร์และให้ดูความเร็ว ถ้าได้ตั้งแต่ 115200 bauds rate ก็ถือว่าโอเคแล้ว
- ชิปสื่อสารประมวลผลหลัก: แบ่งออกเป็น
ESP-8266
และ ESP32
โดยรุ่นหลังจะเร็ว แรง และแพงกว่า แถมพ่วงการสื่อสารผ่านบลูทูธมาให้ ตามปกติแล้วถ้าเป็น project ที่ไม่ซับซ้อน เช่น การเปิดปิดสวิตช์ไฟผ่าน wifi หรือ การรับค่าเซ็นเซอร์จากสวิทช์เพื่อแสดงผลบนเว็บไซต์, ESP-8266
ก็ถือว่าเหลือๆแล้ว แต่ถ้าต้องการ stream ข้อมูล หรือใช้การประมวลผลที่เร็วขึ้น ESP32
ก็อาจจะเป็นตัวเลือกที่ดีกว่า - จำนวน pin และขนาดบอร์ด: ให้ประเมินว่าโปรเจคของเราจำเป็นต้องใช้ input output เพื่อต่อกับอุปกรณ์เท่าไหร่ แล้วอยากได้ขนาดบอร์ดขนาดไหนเพื่อพัฒนา project
ตารางด้านล่างนี้คือการสรุปสเปกของบอร์ดยอดนิยมในตระกูล NodeMCU และ ESP32 พร้อมระบุขนาดบอร์ด (โดยประมาณ) เพื่อช่วยเป็นแนวทางเวลาไปเลือกซื้อครับ:
รุ่นบอร์ด | ชิป & ขนาดบอร์ด | GPIO & USB-to-Serial | จุดเด่น & เหมาะกับงาน |
---|
NodeMCU V1 | ESP8266 (ESP-12) 50 × 24 mm | ~9–11 GPIO (บางขาใช้ร่วมกับฟังก์ชันอื่น) CH340 (บางรุ่น) | รุ่นแรกสุด ประหยัดพลังงาน แต่ภาคจ่ายไฟยังไม่เสถียร เหมาะกับ: ผู้เริ่มต้นที่อยากทดลองโปรเจกต์เล็ก ๆ |
NodeMCU V2 (Amica) | ESP8266 (ESP-12E) 48 × 26 mm | ~9–11 GPIO (พัฒนาจาก V1) CP2102 / CH340 | ปรับปรุงภาคจ่ายไฟ & USB-to-Serial ให้ดีขึ้น ใส่ Breadboard ได้ง่าย เหมาะกับ: งาน IoT ทั่วไป, มือใหม่ที่ต้องการเสถียรภาพ |
NodeMCU V3 (LoLin) | ESP8266 (ESP-12E) 58 × 31 mm | ~9–11 GPIO (เหมือน V2 แต่บอร์ดกว้างกว่า) CH340 | เสถียรขึ้นอีก มีพอร์ต Micro USB ใช้ง่าย แต่เสียบบน Breadboard เหลือพื้นที่น้อย เหมาะกับ: โปรเจกต์ Wi-Fi ทั่วไป, ไม่เน้นขยาย Pin มาก |
NodeMCU-32S (ESP32) | ESP32-WROOM-32 58 × 28 mm | ~26–30 GPIO (ขึ้นกับผู้ผลิต) CP2102 / CH340 | ซีพียูแรงขึ้น มี Bluetooth รองรับ Wi-Fi + BT Dual-mode เหมาะกับ: โปรเจกต์ IoT ขั้นสูง, งานที่ต้องการประมวลผลเร็ว หรือใช้ Bluetooth |
💡 หมายเหตุ: ขนาดที่ระบุเป็นค่าประมาณตามโมดูลมาตรฐาน ซึ่งอาจต่างกันเล็กน้อยขึ้นอยู่กับผู้ผลิต ถ้าเจอชื่อรุ่นที่แปลกไป เช่น “NodeMCU-32S Dev Kit” หรือ “NodeMCU ESP32S” ให้รู้ไว้ว่าส่วนใหญ่ก็คือ ESP32 เหมือนกัน แต่ต่างกันตรงแบรนด์หรือดีไซน์
ขาสัญญาณของ NodeMCU V3 (LoLin)
ในส่วนนี้ผมจะเลือกเอา NodeMCU V3 ESP-8266 (LoLin) มาเป็นตัวอย่างนะครับ เนื่องจากเป็นบอร์ดที่ราคาถูกและความสามารถเพียงพอที่จะช่วยให้เราพัฒนาโปรเจค iot กับอุปกรณ์ง่ายๆที่ใช้ในชีวิตประจำวันได้
โดยผมจะเรียกตามสกรีนบนบอร์ด (D0, D1, D2...) พร้อมเทียบกับ GPIO (General Purpose Input Output) จริงของ ESP8266 ที่เราจะนำมาใช้อ้างอิงในตอนเขียนโปรแกรม
ขาพาวเวอร์ (Power Pins)
3V
: ขาจ่ายไฟเลี้ยง 3.3V เพื่อนำไปเป็น high input หรือเพื่อต่ออุปกรณ์ภายนอกที่ใช้กระแสไม่มากนักอย่างเช่น LED
VIN
: ไฟขาเข้า (5V) จากแหล่งจ่ายภายนอกใช้สำหรับจ่ายไฟให้ตัวบอร์ด ถ้าเราใช้หม้อแปลงจ่ายไฟผ่านพอร์ต USB แล้วก็ไม่จำเป็นจะต้องจ่ายไฟเข้าขานี้
GND
: ขากราวด์ทั้งหมดที่อยู่ในบอร์ดเป็น common ground เพื่อให้กระแสไฟฟ้าไหลครบวงจร
ขาดิจิทัล (Digital I/O Pins)
ขาเหล่านี้เป็นขาที่เราจะเลือกนำมาใช้ต่อกับอุปกรณ์ของเราเพื่อที่จะรับสัญญาณหรือส่งสัญญาณ HIGH หรือ LOW เพื่อแสดงสถานะเปิดปิด โดยที่ขาเหล่านี้จะขึ้นต้นด้วย D แล้วตามด้วยตัวเลข มีทั้งหมด 9 ขาตั้งแต่ D0
ถึง D8
โดยในที่นี้จะมี ขา D3
D4
และ D8
ที่มีเงื่อนไขพิเศษตอนบูต (Boot Mode) ที่เราต้องทำความเข้าใจและออกแบบวงจรให้เหมาะสม ยกตัวอย่างเช่น ขา D3 ตอนบูตจะต้องเป็นสัญญาณ HIGH ดังนั้นในตอนเริ่มบูต ขานี้ไม่ควรต่อกับสวิตซ์ที่ปิดอยู่ เนื่องจากจะทำให้ไฟครบวงจรและไหลลง GND และค่าสถานะของขาเป็น LOW ซึ่งจะทำให้บอร์ดทำงานผิดพลาดตอนบูต
TX (GPIO1)
และ RX (GPIO3)
ใช้สื่อสารกับ Serial Monitor แต่ก็สามารถประยุกต์ใช้เป็น Digital I/O ได้เช่นกัน (ว่าง่ายๆก็คือถ้าเราไม่ได้จะใช้การสื่อสารแบบ serial ก็สามารถนำขาทั้ง 2 นี้มาใช้เป็น Digital I/O ได้)
ขาอะนาล็อก (Analog Pin)
A0
: รองรับแรงดันสูงสุดประมาณ 0–3.3V ใช้อ่านสัญญาณจากเซนเซอร์แบบอนาล็อกได้ 1 ช่อง
ขาพิเศษ (Special Pins)
EN
: Enable Pin ถ้าดึงลง GND จะปิดการทำงานของบอร์ด (ปกติผูกกับ 3.3V ผ่านตัว`ต้านทาน)
RST
: Reset Pin ถ้าดึงลง GND จะรีเซ็ตบอร์ดใหม่ (ปกติผูกกับ 3.3V ผ่านตัวต้านทาน)
ขาของระบบภายใน (ขาต้องห้าม)
SD0-SD3
, CMD
, CLK
มักเป็นขาสำคัญที่ใช้ติดต่อกับ Flash ภายในตัว ESP8266 เอง ซึ่งส่วนใหญ่จะใช้ในการ debug ขั้นสูงหรือเพื่อการเปลี่ยนแปลง firmware ภายในบอร์ด ซึ่งส่วนใหญ่แล้วขาเหล่านี้ เราไม่ควรไปแตะต้องมันเลย เนื่องจากถ้าทำอะไรผิดพลาดจะสามารถทำให้บอร์ดเสียหายและไม่สามารถนำมาใช้ได้อีก ยกเว้นแต่เราจะรู้ว่าเราทำอะไรอยู่จริงๆ
ตารางสรุปการใช้งานขาทั้งหมดของ NodeMCU ESP-8266
ตารางข้างล่างเป็นการสรุปการใช้งานของขาต่างๆในบอร์ด โดยผมจะใส่สัญลักษณ์ของไอคอนกำกับเพื่อแสดงลักษณะดังนี้
✅ปลอดภัย → GPIO เหล่านี้สำหรับงานทั่วไปได้เลย เราควรเลือกใช้ขาเหล่านี้ก่อนถ้ายังมีเหลืออยู่
⚠️ ควรระวัง → อาจมีผลต่อการบูต หรือมีฟังก์ชันพิเศษ ต้องทำความเข้าใจและใช้อย่างระมัดระวัง
❌ไม่ควรใช้ → ขาเชื่อมต่อกับหน่วยความจำแฟลช อาจทำให้บอร์ดทำงานผิดปกติ เราไม่ควรแตะต้องขาพวกนี้เลย
ขา (Label & GPIO) | สถานะบูต | หมายเหตุ |
---|
⚠️ D0 (GPIO16) | - | ใช้เป็นขาปลุกจาก Deep Sleep; ไม่รองรับ PWM หรือ I²C |
✅ D1 (GPIO5) | - | ใช้งานทั่วไปได้ |
✅ D2 (GPIO4) | - | ใช้งานทั่วไปได้ |
⚠️ D3 (GPIO0) | HIGH | ต้องอยู่ HIGH ขณะบูต; หากดึง LOW บูตเข้าโหมดแฟลช |
⚠️ D4 (GPIO2) | HIGH | มี LED on-board; ควรหลีกเลี่ยงการดึง LOW ขณะบูต |
✅ D5 (GPIO14) | - | ใช้งานทั่วไปได้ |
✅ D6 (GPIO12) | - | ใช้งานทั่วไปได้ |
✅ D7 (GPIO13) | - | ใช้งานทั่วไปได้ |
⚠️ D8 (GPIO15) | LOW | ต้องอยู่ LOW ขณะบูต มิฉะนั้นบอร์ดอาจไม่บูต |
⚠️ RX (GPIO3) ✅ | - | ขารับข้อมูล (UART); ใช้เป็น GPIO ได้แต่ควรหลีกเลี่ยง |
⚠️ TX (GPIO1) ✅ | - | ขาส่งข้อมูล (UART); ใช้เป็น GPIO ได้แต่ควรหลีกเลี่ยง |
❌ SD0 (GPIO11) | - | ใช้สำหรับ SPI Flash (MOSI); ไม่ควรใช้เป็น I/O ทั่วไป |
❌ SD1 (GPIO8) | - | ใช้สำหรับ SPI Flash (MISO); ไม่ควรใช้เป็น I/O ทั่วไป |
❌ SD2 (GPIO9) | - | เชื่อมต่อกับแฟลชภายใน; ไม่แนะนำให้ใช้งาน |
❌ SD3 (GPIO10) | - | เชื่อมต่อกับแฟลชภายใน; ไม่แนะนำให้ใช้งาน |
❌ CMD (GPIO6) | - | ใช้เป็น SPI Flash Chip Select (CS); ไม่ควรใช้เป็น I/O |
❌ CLK (GPIO7) | - | ใช้เป็น SPI Flash Clock (SCK); ไม่ควรใช้เป็น I/O |
สรุปการเลือกใช้ขาสัญญาณของ NodeMCU v3 ESP-8266
แนะนำให้ใช้ขา D1 D2 D5 D6 D7 ก่อน หมดแล้วค่อยไปใช้ RX TX หากไม่จำเป็นต้องสื่อสารผ่าน serial กับอุปกรณ์ภายนอก หลังจากนั้นถ้ายังไม่พอ จึงค่อยพิจารณาขา D0 D3 D4 D8 แต่ว่าจะต้องไปทำความเข้าใจก่อนว่าขาเหล่านี้มีเงื่อนไขในการใช้อย่างไร
ส่วนขา SD0-SD3 CLK CMD เราไม่ควรไปแตะต้องมัน
เริ่มต้นเขียนโปรแกรมลงบนบอร์ด NodeMCU
หลังจากเข้าใจ concept หมดแล้ว ตอนนี้ก็ได้เวลามาเริ่มเขียนโปรแกรมลงบน NodeMCU กันได้แล้วครับ
1. ดาวน์โหลด Arduino IDE
ก่อนอื่นให้เราไปยังเว็บไซต์ของ Arduino และทำการดาวน์โหลด Arduino IDE มา install ลงที่เครื่องเราก่อน ดาวน์โหลดได้ที่ Official website ของ Arduino ตามลิงค์นี้ได้เลยครับ
หลังจาก install เสร็จ เปิดโปรแกรมขึ้นมา ก็จะได้หน้าตาประมาณนี้เลย
2. จัดสรรค์ environment สำหรับ NodeMCU v3 ESP-8266
ก่อนที่เราจะทำการเริ่มเขียนโปรแกรม เราต้องจัดการให้ IDE รู้จักกันกับ ESP-8266 ก่อนโดยให้ทำตามดังนี้
เสร็จเรียบร้อยแล้วให้เราทำการติดตั้ง library ของ ESP-8266 โดยการไปที่
- “Tools” > “Manage libraries…”
- หา “ESP8266 และกด Install”
หลังจากติดตั้ง ESP8266 เรียบร้อยแล้ว ขั้นตอนต่อไปให้ไปทำการเลือก NodeMCU บอร์ดและทำการตั้งค่าต่างๆให้ถูกต้อง
- ไปทึ่ Tools > Board > ESP8266 และเลือก NodeMCU 1.0 (ESP-12E Module)
ตั้งค่าต่างๆให้ถูกต้องดังนี้
- Upload Speed:
115200
- CPU Frequency:
80 MHz
- Flash Size:
4M (32Mb)
- Flash Mode:
DIO
- Port: เลือกพอร์ต usb ที่ต่อกับ NodeMCU (เช่น
/dev/ttyUSB0
สำหรับ Linux หรือCOM3
สำหรับ Windows)
3. Upload program ไฟกระพริบ (LED Blink)
หลังจากที่เราจัดการ environment ของ Arduino IDE เพื่อให้สามารถรองรับการเขียนโปรแกรมเข้าสู่บอร์ด NodeMCUv3 ESP8266 เรียบร้อยแล้ว ตอนนี้ก็ถึงเวลาลองอัพโหลดโปรแกรมแรกของเรากันได้แล้วครับ
โดยโปรแกรมที่ผมเลือกมาจะมีอยู่แล้วในตัวอย่างของ Arduino IDE ซึ่งเป็นโปรแกรมที่ใช้ในการทำไฟกระพริบ โดยที่เราจะใช้ LED ที่มีอยู่แล้วบนบอร์ดของเรา
อันดับแรกเลยอย่าลืมต่อ USB จากคอมพิวเตอร์มายังบอร์ดเราก่อน
หลังจากนั้นให้ไปที่ “File > Examples > 01.Basics > Blink” ตามรูปข้างล่างได้เลย
ที่นี้เราก็จะได้โค้ดของไฟกระพริบมาใช้แล้วครับ
4 pinMode(LED_BUILTIN, OUTPUT);
9 digitalWrite(LED_BUILTIN, HIGH);
11 digitalWrite(LED_BUILTIN, LOW);
อธิบายโปรแกรม
จาก source code ข้างบนเราจะเห็นได้ว่าจะมีฟังก์ชันหลักอยู่ 2 ฟังก์ชันได้แก่
setup()
- ฟังก์ชันนี้รันแค่ครั้งเดียวตอนบูต ส่วนใหญ่จะใช้ในการ set up ค่าต่างๆ ในโค้ดของเราจะเป็นการกำหนดว่าให้เซตขาของ led ในบอร์ดให้เป็น output เพื่อให้เรากำหนดค่าจากในตัวโปรแกรมได้loop()
- สำหรับฟังก์ชันนี้จะถูกรันซ้ำไปเรื่อยๆหลังจากฟังก์ชัน setup() ได้รันไปแล้ว ในโค้ดของเราจะเป็นการส่งค่า HIGH ไปยัง LED และทำการหน่วงเวลา 1 วินาที (1000ms) แล้วจึงทำการส่งค่า LOW ไปที่ LED หน่วงเวลาอีก 1 วินาที วนซ้ำไปเรื่อยๆ ทำให้เราเห็นเป็นไฟกระพริบ นั่นเองครับ
💡 หมายเหตุ: LED_BUILDIN
เป็นตัวแปรที่ไว้เก็บค่า GPIO
ของ internal LED ซึ่งสำหรับบอร์ดของเราจะเป็นขา 4 หรือ D4
ซึ่งก็คือ GPIO02
เราสามารถกำหนดค่าไปตรงๆโดยไม่ผ่านตัวแปร LED_BUILDIN
ได้เช่นกัน ตัวอย่างเช่น
pinMode(D4, OUTPUT);
pinMode(2, OUTPUT);
ผลลัพธ์ที่ได้จะออกมาเหมือนกัน
อัพโหลดโปรแกรมลงบอร์ด
ขั้นตอนสุดท้ายหลังจากเราเข้าใจโปรแกรมแล้ว ก็ได้เวลาอัพโหลดโปรแกรมเข้า NodeMCU เพื่อดูผลลัพธ์ครับ ให้เราคลิกไอคอนที่เป็นรูปลูกศรชี้ไปทางขวา ตามรูปข้างล่างเลย
โปรแกรมจะทำการคอมพายและอัพโหลดโปรแกรมของเราเข้า NodeMCU ให้รอจนกว่าคอนโซลจะขึ้นว่า “hash of data verified” และ “hard resetting via RTS pin” (ซึ่งแปลได้ว่ากำลังเซ็ตขา RTS เพื่อให้บอร์ดทำการ reboot)
เท่านี้เราก็จะได้เห็นไฟกระพริบวิบวับๆอยู่บนบอร์ด ตามโปรแกรมที่ตั้งไว้แล้ว ใครอยากได้กระพริบเร็วหรือช้าก็สามารถทดลองเปลี่ยนค่าหน่วงเวลาในโปรแกรมได้ครับ
สรุปส่งท้าย
NodeMCU เป็นบอร์ด IoT ที่ใช้งานง่าย ราคาย่อมเยา และเหมาะสำหรับทั้งมือใหม่และผู้ที่ต้องการพัฒนาโครงการ IoT ขนาดเล็ก ด้วยความสามารถในการเชื่อมต่อ Wi-Fi ในตัว รองรับการเขียนโค้ดผ่าน Arduino IDE และมี GPIO ให้ใช้งานหลากหลาย
ในบทความนี้ เราได้เรียนรู้เกี่ยวกับ ประเภทของ NodeMCU, แนวทางการเลือกซื้อ, การใช้งาน GPIO, การติดตั้ง Arduino IDE, และ การทดลองเขียนโค้ด Blink LED ซึ่งเป็นก้าวแรกในการเข้าสู่โลกของ IoT
หวังว่าผู้อ่านคงได้ความรู้ไม่มากก็น้อย และสามารถนำไปประยุกต์ใช้พัฒนาโปรเจกต์ IoT ของตัวเองได้ง่ายขึ้นครับ 🚀✨
สอบถาม ติชม เสนอแนะ ได้ที่ช่อง comment ด้านล่างเลยครับ