แนะนำสถาปัตยกรรมของ 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)
รูปที่
3.1 ภาพบอร์ด NodeMCU v.3
รูปที่
3.2 ตําแหนงพินและขาของ NodeMCU v.3
รูปที่
3.3 วงจรของบอรด NodeMCU v.3 (ภาพจาก https://github.com/nodemcu/nodemcu-devkit)
NodeMCU Base v.1
เพื่อความสะดวกในการใช้งาน
NodeMCU
ซึ่งเป็นบอร์ดขนาดเล็ก ผู้พัฒนาได้สร้าง NodeMCU Base ขึ้นเพื่อเป็นฐานสำหรับการเชื่อมต่อต่าง ๆ ดังแสดงในรูปที่ 3.4(ก)
และมีลักษณะการใช้งาน ดังแสดงในรูปที่ 3.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 โดยมีรายละเอียดแสดงในภาคผนวก ก
รูปที่
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
รูปที่
3.6 หนาตางเริ่มตนการติดตั้งโปรแกรม
Arduino IDE
รูปที่
3.7 หนาตางเลือกโฟลเดอร์ที่ติดตั้งโปรแกรม Arduino
IDE
เลือกติดตั้งบอร์ด ESP8266 ลงใน Arduino IDE
หลังจากเลือกติดตั้ง Arduino IDE แล้วก็ให้กดเลือกติดตั้งแบบ
Full Installation with IoT ESP2866 ดังรูปที่ 3.8 จากนั้นก็เลือกติดตั้งไอคอนลงบน Start Menu และ
เลือกติดตั้งโปรแกรม จากนั้นโปรแกรมจะถูกติดตั้งดังรูปที่ 3.9
รูปที่
3.8 หนาตางแสดงการเลือกการติดตั้ง
ESP2866 add-on
รูปที่
3.9 หนาตางแสดงการติดตั้งโปรแกรม
Arduino IDE
รอจนกวาจะติดตั้งโปรแกรม Arduino IDE เสร็จสิ้น จากนั้น จะมีหน้าต่างปรากฎขึ้น ให้ผู้ติดตั้งทําการติดตั้งไดรเวอร CP210x USB to UART โดยกดปุม Next ดังรูปที่ 3.10 และ อ่านและกดเลือกยอมรับ (accept) ข้อตกลงเรื่องไลเซนต์ จากนั้นไดรเวอร์จะติดตั้งลงในคอมพิวเตอร์
และแสดงผลลัพธ์ดังแสดงในรูปที่ 3.11
จากนั้นเป็นการสิ้นสุดการติดตั้ง
สำหรับหน้าต่างเลือกติดตั้งไดรเวอร์อื่น ๆ ที่อาจปรากฎขึ้นหลังติดตั้งโปรแกรม Arduino IDE นั้น ขอให้ผู้ติดตั้งเลือกติดตั้งไดรเวอร์เหล่านั้นด้วย
หลังจากติดตั้งเสร็จ
โปรแกรมจะให้เลือกลักษณะตั้งต้นของหน้าตาโปรแกรม ขอให้เลือก Arduino ดังรูปที่ 3.12
รูปที่
3.10 หนาตางแสดงการติดตั้งไดรเวอร์ CP210x USB to
UART
รูปที่
3.11 หนาตางแสดงการผลการติดตั้งไดรเวอร์ CP210x USB to UART
รูปที่
3.12
หน้าต่างแสดงตัวเลือกลักษณะตั้งต้นของบอร์ดสำหรับโปรแกรม Arduino IDE
การเริ่มต้นทดสอบโปรแกรม
Arduino
IDE
เลือกบอร์ดในโปรแกรม
Arduino
IDE
เมื่อติดตั้งโปรแกรม Arduino IDE ตามขั้นตอนในหัวข้อที่แล้วเสร็จสมบรูณแลว
ขอให้เปดโปรแกรม Arduino 1.8.8
และทําการเลือกบอรด โดยที่เลือกที่เมนู Tools แลวเลือก Board: NodeMCU 1.0 (ESP-12E Module) ดังรูปที่ 3.13 เพื่อใชเขียนโปรแกรมควบคุม
รูปที่
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
รูปที่
3.14
การเลือก Port
ที่ติดต่อกันระหว่าง NodeMCU และโปรแกรม Arduino
IDE
ขอให้ทําการทดลองอัปโหลดโปรแกรม โดยคลิกที่ปุม (Upload) หรือไปที่เมนู Sketch
>> Upload โดยขอให้สังเกตในขณะที่อัปโหลด
LED ที่มุมข้าง ๆ ชิป ESP8266 (D4)
จะกระพริบ และหน้าต่างข้อความด้านล่างของโปรแกรมจะแสดงเปอรเซ็นตการอัปโหลด รอจนการอัปโหลดจะเสร็จสิ้น
หากไม่พบข้อความบอกความผิดพลาด (error message) ใด ๆ
ก็แสดงว่าบอร์ด NodeMCU v.3 ติดต่อกับโปรแกรม Arduino
IDE ได้สำเร็จดังรูปที่ 3.15
รูปที่
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 ผ่านการทดลองในแต่ละการทดลอง
รูปที่
3.16
(ก)
ลักษณะโค้ดเริ่มต้นและ (ข) แผนผังการทำงานพื้นฐานของ Arduino