แนะนำสถาปัตยกรรมของ NodeMCU v.3

ในบทนี้จะเป็นการแนะนำบอร์ด NodeMCU v.3 ซึ่งเป็นไมโครคอนโทรลเลอร์หลักที่เลือกมานำเสนอในหนังสือเล่มนี้ โดยการประยุกต์ใช้อุปกรณ์ต่าง ๆ ที่นำเสนอในบทต่อ ๆ ไป ก็จะใช้บอร์ดนี้เป็นฐานในการเชื่อมต่อ

 

คุณสมบัติของ NodeMCU v.3

NodeMCU คือ แพลตฟอรมหนึ่งที่ใชชวยในการสรางโปรเจคอินเทอร์เน็ตของสรรพสิ่ง (Internet of Things, IoT) ที่ประกอบไปดวยตัวบอร์ด และ ซอฟต์แวร์ในตัว (Firmware) ที่เปนลักษณะโอเพ่นซอร์ส (open-source) ในตอนแรก ผู้ใช้จะต้องเขียนโปรแกรมดวยภาษา Lua เพื่อให้ใช้งาน NodeMCU ได แต่ต่อมาได้พัฒนาให้สามารถใช้ภาษา C ใน Arduino IDE เพื่อควบคุมได้ ทําใหใชงานไดงายขึ้น โดยบอร์ดนี้มาพรอมกับโมดูล WiFi (ESP8266) ซึ่งเปนหัวใจสําคัญในการใชเชื่อมตอกับอินเทอรเน็ต ตัวโมดูล WiFi (ESP8266) นั้นมีอยูดวยกันหลายรุน ตั้งแตเวอรชันแรกคือ ESP-01 จนในมีถึงเวอร์ชัน ESP-12 โดยโมดูลนี้ที่เป็นองค์ประกอบใน NodeMCU รุ่นแรกนั้นคือ ESP-12 และในเวอร์ชันต่อมา (NodeMCU v.2) นั้นจะใชโมดูล ESP-12E แทน ซึ่งในการใชงานโดยรวมนั้นจะไมแตกตางกันมากนัก แต่บอร์ดเวอร์ชัน 3 จะมีขนาดใหญ่ขึ้น NodeMCU นั้นมีลักษณะคลายกับ Arduino ตรงที่ มีพอรตขาเข้าหรืออินพุตพอร์ต (input port) และ พอร์ตขาออกหรือเอาต์พุตพอร์ต (output port) อยู่ในตัวเอง ทำให้เราสามารถเขียนโปรแกรมควบคุมอุปกรณต่าง ๆ ไดโดยตรง ไมตองทำผานชิปอื่น ๆ NodeMCU v.3 นี้สามารถทําอะไรไดหลายอยางมาก โดยเฉพาะงานที่เกี่ยวของกับ IoT ไมวาจะเป็น การทําเว็บเซิร์ฟเวอร์ขนาดเล็ก การควบคุมการเปดปดไฟผานเครือข่าย และอื่น ๆ อีกมากมาย ตัวบอร์ด NodeMCU v.3 แสดงดังรูปที่ 3.1

รูปที่ 3.2 แสดงตำแหน่งพินและขาของ NodeMCU v.3 โดยมีขาที่ใช้งานบ่อย ๆ คือขา GPIO (General Purpose Input/Output) หรือขา D0 – D12 ขา ADC (Analog to Digital) หรือขา A0 และ ขาไฟเลี้ยง (VUSB และ 3.3 V) และกราวด์ (Ground, GND)

 

1

 

รูปที่ 3.1 ภาพบอร์ด NodeMCU v.3

 

Ch03NodeMCU

รูปที่ 3.2 ตําแหนงพินและขาของ NodeMCU v.3

 

3

รูปที่ 3.3 วงจรของบอรด NodeMCU v.3 (ภาพจาก https://github.com/nodemcu/nodemcu-devkit)

 

 

NodeMCU Base v.1

เพื่อความสะดวกในการใช้งาน NodeMCU ซึ่งเป็นบอร์ดขนาดเล็ก ผู้พัฒนาได้สร้าง NodeMCU Base ขึ้นเพื่อเป็นฐานสำหรับการเชื่อมต่อต่าง ๆ ดังแสดงในรูปที่ 3.4(ก) และมีลักษณะการใช้งาน ดังแสดงในรูปที่ 3.4(ข)

 

4

 

รูปที่ 3.4 (ก) บอรด NodeMCU Base Version 1.0 และ (ข) บอร์ด NodeMCU และ NodeMCU Base

 

 

การติดตั้งโปรแกรม Arduino IDE สำหรับ NodeMCU

การติดตั้งโปรแกรม Arduino IDE เป็นการติดตั้งโปรแกรมเพื่อใชในการเขียนโปรแกรมใหกับบอรด ESP8266 หรือบอรดอื่น ๆ ผานทาง Arduino IDE ซึ่งจะใช้หลักการของภาษา C/C++ ที่กล่าวถึงโดยย่อในบทที่ 2 การเชื่อมต่อกับบอร์ดนี้ทำได้ดวยวิธีการเดียวกับการเชื่อมต่อบอร์ด Arduino อื่น ๆ เพื่อใหการเขียนโปรแกรมมีความงายมากยิ่งขึ้น สำหรับผู้ที่คุ้นเคยกับบอร์ด Arduino อยู่ก่อนแล้ว ขั้นตอนการติดตั้งมีรายละเอียดดังต่อไปนี้

 

ดาวน์โหลดโปรแกรม

โปรแกรมที่เราใช้ในการทดสอบคือ Arduino IDE 1.8.8 IoT โดยโปรแกรมจะรองรับระบบปฏิบัติการ Windows, Mac OS X, Linux ทั้งแบบ 32 บิต และ 64 บิต ซึ่งเราสามารถดาวน์โหลดตัวติดตั้งไดจาก https://www.arduino.cc/en/main/software หรือ https://inex.co.th/shop/software-download รูปที่ 3.5 แสดงหน้าต่างดาวน์โหลด Arduino IDE ของเว็บบริษัท Inex สำหรับได้ติดตั้ง Arduino IDE (จาก arduino.cc) จะต้องทำการติดตั้ง Board Manager URL เพิ่มเติม และดาวน์โหลดส่วนขยายสำหรับ ESP8266 โดยมีรายละเอียดแสดงในภาคผนวก ก

 

5

 

รูปที่ 3.5 หน้าต่างดาวนโหลด Arduino IDE ที่มีส่วนขยาย IoT จาก https://inex.co.th/shop/software-download

 

สําหรับการติดตั้ง Arduino IDE บน Windows จะมีแบบใหเลือกทั้ง แตกไฟลใชไดเลย (ZIP file for non admin install) หรือ ติดตั้งเหมือนโปรแกรมอื่นทั่ว ๆ ไป คือ รันโปรแกรมติดตั้ง (Installer) หากดาวน์โหลดเรียบรอยแลวใหเปด Arduino 1.8.8_IoT_Setup ขึ้นมาดังรูปที่ 3.6 โดยเลือกติดตั้งโปรแกรมลงที่ C:\Arduino18 ดังรูปที่ 3.7

 

6

 

รูปที่ 3.6 หนาตางเริ่มตนการติดตั้งโปรแกรม Arduino IDE

 

7

 

รูปที่ 3.7 หนาตางเลือกโฟลเดอร์ที่ติดตั้งโปรแกรม Arduino IDE

 

 

เลือกติดตั้งบอร์ด ESP8266 ลงใน Arduino IDE

หลังจากเลือกติดตั้ง Arduino IDE แล้วก็ให้กดเลือกติดตั้งแบบ Full Installation with IoT ESP2866 ดังรูปที่ 3.8 จากนั้นก็เลือกติดตั้งไอคอนลงบน Start Menu และ เลือกติดตั้งโปรแกรม จากนั้นโปรแกรมจะถูกติดตั้งดังรูปที่ 3.9

 

8

 

รูปที่ 3.8 หนาตางแสดงการเลือกการติดตั้ง ESP2866 add-on

 

9

 

รูปที่ 3.9 หนาตางแสดงการติดตั้งโปรแกรม Arduino IDE

 

รอจนกวาจะติดตั้งโปรแกรม Arduino IDE เสร็จสิ้น จากนั้น จะมีหน้าต่างปรากฎขึ้น ให้ผู้ติดตั้งทําการติดตั้งไดรเวอร CP210x USB to UART โดยกดปุม Next ดังรูปที่ 3.10 และ อ่านและกดเลือกยอมรับ (accept) ข้อตกลงเรื่องไลเซนต์ จากนั้นไดเวอร์จะติดตั้งลงในคอมพิวเตอร์ และแสดงผลลัพธ์ดังแสดงในรูปที่ 3.11 จากนั้นเป็นการสิ้นสุดการติดตั้ง

สำหรับหน้าต่างเลือกติดตั้งไดเวอร์อื่น ๆ ที่อาจปรากฎขึ้นหลังติดตั้งโปรแกรม Arduino IDE นั้น ขอให้ผู้ติดตั้งเลือกติดตั้งไดเวอร์เหล่านั้นด้วย

หลังจากติดตั้งเสร็จ โปรแกรมจะให้เลือกลักษณะตั้งต้นของหน้าตาโปรแกรม ขอให้เลือก Arduino ดังรูปที่ 3.12

 

10

 

รูปที่ 3.10 หนาตางแสดงการติดตั้งไดเวอร์ CP210x USB to UART

 

11

 

รูปที่ 3.11 หนาตางแสดงการผลการติดตั้งไดเวอร์ CP210x USB to UART

 

1

 

รูปที่ 3.12 หน้าต่างแสดงตัวเลือกลักษณะตั้งต้นของบอร์ดสำหรับโปรแกรม Arduino IDE

 

 

การเริ่มต้นทดสอบโปรแกรม Arduino IDE

เลือกบอร์ดในโปรแกรม Arduino IDE

เมื่อติดตั้งโปรแกรม Arduino IDE ตามขั้นตอนในหัวข้อที่แล้วเสร็จสมบรูณแลว ขอให้เปดโปรแกรม Arduino 1.8.8 และทําการเลือกบอรด โดยที่เลือกที่เมนู Tools แลวเลือก Board: NodeMCU 1.0 (ESP-12E Module) ดังรูปที่ 3.13 เพื่อใชเขียนโปรแกรมควบคุม

 

1

 

รูปที่ 3.13 การเลือก Board: NodeMCU 1.0 (ESP-12E Module)
ในโปรแกรม
Arduino IDE

 

การเชื่อมต่อ NodeMCU v.3 กับคอมพิวเตอร์

ขอให้ตอสาย USB เขากับ NodeMCU แลวตอสาย USB อีกด้านเขาที่เครื่องคอมพิวเตอร หลังจากนั้นใหกําหนดชองทางเชื่อมตอโปรแกรม Arduino IDE กับ NodeMCU โดยเลือกที่ดูที่เมนู Tool >> Ports: สำหรับตัวอย่างนี้ NodeMCU ที่เชื่อมต่อ จะต่ออยู่ที่ COM3 ดังนั้นจึงเลือก Port เป็น COM3 ดังรูปที่ 3.14

 

1

 

รูปที่ 3.14 การเลือก Port ที่ติดต่อกันระหว่าง NodeMCU และโปรแกรม Arduino IDE

 

ขอให้ทําการทดลองอัปโหลดโปรแกรม โดยคลิกที่ปุม FigCh01Install (Upload) หรือไปที่เมนู Sketch >> Upload โดยขอให้สังเกตในขณะที่อัปโหลด LED ที่มุมข้าง ๆ ชิป ESP8266 (D4) จะกระพริบ และหน้าต่างข้อความด้านล่างของโปรแกรมจะแสดงเปอรเซ็นตการอัปโหลด รอจนการอัปโหลดจะเสร็จสิ้น หากไม่พบข้อความบอกความผิดพลาด (error message) ใด ๆ ก็แสดงว่าบอร์ด NodeMCU v.3 ติดต่อกับโปรแกรม Arduino IDE ได้สำเร็จดังรูปที่ 3.15

 

1

 

รูปที่ 3.15 รูปแสดงการอัปโหลดโปรแกรมลงสู่บอร์ด NodeMCU v.3

 

โครงสร้างโปรแกรม Arduino

ในการเขียนโปรแกรมสําหรับควบคุมบอรด NodeMCU v.3 ในการอบรมนี้เราจะตองเขียนโปรแกรมโดยใชภาษาของ Arduino (Arduino programming language) ซึ่งตัวภาษาของ Arduino เองก็นําเอาโอเพนซอรสโปรเจ็กต์ที่ชื่อ wiring มาพัฒนาตอ ภาษาของ Arduino แบงไดเปน 2 สวนหลักคือ

1. โครงสรางภาษา (structure) ตัวแปรและคาคงที่

2. ฟงกชัน (function)

ภาษา Arduino จะอางอิงวิธีการเขียนโปรแกรมตามภาษา C/C++ จึงอาจกลาวไดวาการเขียนโปรแกรมสําหรับบอร์ด Arduino (ซึ่งก็รวมถึงบอรด NodeMCU ด้วย) ก็คือการเขียนโปรแกรมภาษา C/C++ โดยเรียกใชฟงกชันและไลบรารีต่าง ๆ ที่ทางผู้พัฒนา ไดเตรียมไวใหแลวซึ่งสะดวกและ ทําใหผูที่ไมมีความรูดานไมโครคอนโทรลเลอรอยางลึกซึ้งสามารถเขียนโปรแกรมสั่งงานได โดยโปรแกรมภาษา Arduino มีสองสวนหลัก ๆ คือ ฟังก์ชัน setup() และ ฟังก์ชัน loop() ดังรูปที่ 3.16

เมื่อโปรแกรมที่เขียนถูกคอมไพล์ ก็จะมีการกำหนดตัวแปรต่าง ๆ ที่อยู่ด้านบนของโค้ดก่อนจะเข้าสู่ฟังก์ชัน setup() โดยการทำงานของโปรแกรมนั้นจะเริ่มที่ฟงกชัน setup() ซึ่งจะมีการรันคําสั่งในฟงกชันนี้เพียงครั้งเดียว ฟังก์ชันนี้อาจใชในการกําหนดคาเริ่มต้นต่าง ๆ ของการทํางาน สวนฟงกชัน loop() เปนสวนทํางานโปรแกรมจะทําคําสั่งในฟงกชันนี้อย่าง
ตอเนื่องกันตลอดเวลา โดยปกติคำสั่งในฟังก์ชัน
setup() จะใชกําหนดการตั้งค่าการทํางานของขาตาง ๆ ของบอร์ด รวมถึงกำหนดการสื่อสารแบบอนุกรมกับคอมพิวเตอร์

ฟงกชัน loop() เปนโคดหลักของโปรแกรมที่ทํางานซ้ำ ๆ เชน อานคาอินพุต ประมวลผล กำหนดค่าเอาตพุต ฯลฯ โดยสวนกําหนดคาเริ่มตนเชนตัวแปรจะตองเขียนที่สวนหัวของโปรแกรมกอนถึงตัวคำสั่ง เช่นเดียวกับการเขียนโปรแกรมในภาษา C/C++ โดยเราจะ
ตองคํานึงถึงตัวพิมพเล็ก-ใหญของชื่อตัวแปรและชื่อของฟงกชันด้วย คือจะต้องเขียนชื่อตัวแปรเหล่านี้ใหถูกตองตรงกันเสมอ สำหรับการอบรมนี้ เราจะเรียนรู้วิธีการและเทคนิคการเขียนโปรแกรม ภาษา
C/C++ ใน Arduino IDE ผ่านการทดลองในแต่ละการทดลอง

 

1

 

รูปที่ 3.16 (ก) ลักษณะโค้ดเริ่มต้นและ (ข) แผนผังการทำงานพื้นฐานของ Arduino