ESP8266 เป็นโมดุล System On Chip ที่มี ไมโครคอนโทรลเลอร์ Tensilica Xtensa LX3 processor และ Wifi มาให้ด้วย โดยตอนนี้ ESP8266 ออกมาหลากหลายรุ่นมากๆ อยู่ที่จะ Match ให้ถูกกับงาน จะใช้ กี่ GPIO จะใช้เสาแบบไหน แถมราคาในไทย อยู่ที่ 200-250 บาท ยิ่งหาเก่งๆ อาจจะถูกลงไปอีก ที่ผ่านมา ทางเลือกในการพัฒนาโปรแกรม มีหลายรูปแบบมากตั้งแต่
- เริ่มแรกทางผมก็ใช้ ESP8266 เป็นโมดุล Wifi ใช้ Arduino สั่งผ่าน AT Command ซึ่งก้อทำให้บทความ Micro WebServer จาก ESP8266 และ Arduino ซึ่งมันก้อทำงานได้บ้างครับ แต่ยังรู้สึกไม่ชัวส์ บางที่มันคุยกับ หลุด state ต้อง reset อย่างเดียว
- ต่อมา ทาง Forum ESP8266.com ก็ทำ SDK ESP8266 ขึ้นมาครับ แต่ใช้ยากไปนิด ต้องไปรันบน Ubuntu ด้วย ดูยุ่งยาก ไม่เหมาะ
- ไม่นานมานี้ ก็มี โปรเจค NodeMCU อีก ใช้ภาษา Lua คล้าย javascript อันนี้น่าสนใจดีครับ ไม่ต้อง flash ไม่ต้อง burn ชอบระบบมันนะครับ แต่ติดที่ภาษาไม่ค่อยคุ้นเคย แต่คนใช้ nodejs อาจจะชอบ
- และ ล่าสุดไม่กี่วันมานี้ เกิดโปรเจค Arduino IDE สำหรับ ESP8266
ตอนนี้ ที่โดนใจทางผม Arduino IDE สำหรับ ESP8266 ครับ เพราะ ความคุ้นเคย คุณสามารถใช้คำสั่งเดิมได้ ไม่ว่าจะเป็น digitalWrite ,digitalRead, delay, millis เห็นว่าใช้ Interupt ได้ด้วย แต่ยังไม่ได้ลอง และ คาดว่า จะได้ ไฟล์ firmware ที่ทำงานได้รวดเร็วกว่าด้วย เพราะคอมไพล์จาก gcc มาเลย และคาดว่าทางผมจะต่อยอดได้อีกหลายแนว
ตอนนี้ทาง ESP ได้ออกมาทั้งหมด 12 รุ่น หรือ อาจจะมากกว่านี้แล้ว โดยโปรเจคนี้ ออกมา support ESP8266 ทุกโมดุล ที่มีขาย หรือ จะเอา ESP-01 ที่หาง่ายๆมาใช้งานก้อใช้งานได้ ต้องทำวงจรนิดหน่อยครับจะมาเล่าให้ฟังตอนหลัง โชดดีที่ทางเรา นำ NodeMCU Devkit เข้ามา ผมเลยคิดว่า ถ้าเอามาใช้งาน จะสะดวกมากเลย
รู้จักบอร์ด NodeMCU Devkit
บอร์ด NodeMCU DevKit คือ โมดุล ESP8266(ESP-12) ที่รวม USB to Serial (CH340) ดังภาพ ฉะนั้นตัวบอร์ด จึงมี GPIO มากกว่าเดิม หน้าตาจะเหมือน arduino micro แต่ออกแนวกว้าง
- มี GPIO ถึง 10 ช่อง ผ่านจะทำ Smart plug นิ เปิดปิด ได้ 10 ช่องเลย
- มี ADC 10 bit 1 ช่อง
- มีช่องสื่อสารผ่าน อนุกรม Serial Tx,Rx
- รับรอง WIFI a/b/g
- ใช้ไฟ 3.3v, กินกระแสประมาณ 200mA
- รับรองการใช้งาน Auto Reset เสียบสายแล้วกด Upload ได้ เหมือน Arduino เลย
การใช้งาน Arduino IDE สำหรับ ESP8266
- ติดตั้ง USB2Serial เข้าไปโหลดได้ที่นี้ CH340 Driver
- เข้าไป Download Arduino IDE ตัวใหม่ได้จาก Github
- จากนั้น แตกไฟล์ จากได้ Arduino IDE 1.6.1 ที่ผ่านการโมดิฟายมาให้ครับ สำหรับ IDE ตัวนี้ ไม่ใช้ตัวมาตราฐานนะครับ แต่เป็นตัวที่จับมารวมกับ ESP SDK
- และเลือก Programmer เป็น esptools
โดยวิธีการ Upload ถ้าเราใช้ ESP Module อื่นๆ เราจะต้อง ต่อขา GPIO0 ลง ground ครับ แล้วก้อ Reset หรือ ก่อนจ่ายไฟเข้า ตัว ESP8266 จะเข้าโหมด bootloader ซึ่ง เหมือน มันเข้าโหมด Bootloader เราสามารถ Upload Sketch ได้แล้วล่ะครับ
Hack กันนิดหน่อย
สำหรับคนที่ใช้ NodeMCU เราสามารถทำให้ตัวบอร์ด NodeMCU ใช้กับ Arduino IDE ตัวนี้ได้เลย
- โดยเข้าไปแก้ไขไฟล์ ชื่อ board.txt ใน driectory [drive and folder]\arduino-1.6.1\hardware\esp8266com\esp8266
- และแก้ไขให้ esp01.upload.resetmethod จาก none เป็น ck แค่นี้เราก็ใช้งานได้แล้วครับ
- แค่นี้เราก็สามารถ Upload Sketch ได้อัตโนมัติแล้วครับ
*** ปล ตอนนี้ทาง เจ้าของผลงาน กำลังจะแก้ไขส่วนนี้ให้ลองรับ Autoreset ได้แล้ว เราไม่ต้องมาแก้เองครับ ให้ดูไว้ Hack แบบผิวๆ ประมาณนี้ล่ะ
การใช้งานบอร์ด NodeMCU บน Arduino IDE
ข้อดีอีกอย่างหนึ่ง ของบอร์ด NodeMCU บอร์ด มันจะมี Switch มาให้ 1 ตัว และ LED 2 ดวง ราคาประหยัด ยังมี ของแถมนิดหน่อยๆ อีก
ทำให้ เราสามารถทดสอบบอร์ดด้วย ไฟกระพริบ กระพริบง่ายๆ แบบนี้เลย
// the setup function runs once when you press reset or power the board void setup() { // initialize digital pin 13 as an output. pinMode(16, OUTPUT); } // the loop function runs over and over again forever void loop() { digitalWrite(16, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(16, LOW); // turn the LED off by making the voltage LOW delay(1000); // wait for a second }
ถ้าจะพอมีเวลา ก็ลอง Serial Monitor และ ตัวอย่างอื่นๆ ได้เลยครับ
ตัวอย่าง Button
// constants won't change. They're used here to // set pin numbers: const int buttonPin = 0; // the number of the pushbutton pin const int ledPin = 16; // the number of the LED pin // variables will change: int buttonState = 0; // variable for reading the pushbutton status void setup() { // initialize the LED pin as an output: pinMode(ledPin, OUTPUT); // initialize the pushbutton pin as an input: pinMode(buttonPin, INPUT); } void loop() { // read the state of the pushbutton value: buttonState = digitalRead(buttonPin); // check if the pushbutton is pressed. // if it is, the buttonState is HIGH: if (buttonState == HIGH) { // turn LED on: digitalWrite(ledPin, HIGH); } else { // turn LED off: digitalWrite(ledPin, LOW); } }
การใช้งาน NodeMCU บน Arduino IDE อาจจะมีความสับสนสักนิดนะครับ เนื่องจาก ในการคอมไพล์เลอร์ จะ base pin ตามขา GPIO ของไอซี แต่บอร์ด NodeMCU จะ Map pinOut เอง ในตอนนี้ทางเราต้องเข้าใจก่อนว่ามันจะเอา Label มาใช้งานไม่ได้นะครับ จะใช้งานขาต่างๆ ก็ ใส่เลขตามที่ผม Map ไว้ (ตอนนี้ทางผมมีแนวทาง Map แล้ว แต่ดูจาก code ต้องแก้ไขเยอะ รอเจ้าของโปรเจคทำออกมาดีกว่า)
NODEMCU | ESP8266 | |
D0 | GPIO16 | LED USER |
D1 | GPIO5 | |
D2 | GPIO4 | |
D3 | GPIO0 | BUTTON FLASH |
D4 | GPIO2 | |
D5 | GPIO14 | |
D6 | GPIO12 | |
D7 | GPIO13 | |
D8 | GPIO15 | |
D9 | GPIO13 | |
D10 | GPIO1 | LED ON ESP |
GND | ||
3V3 |
ส่งท้าย คงจบ การติดตั้ง การใช้งาน เท่านี้ก่อนนะครับ เดี่ยวจะเอามาบรรยายใหม่ ในเรื่องเกี่ยวกับ code
ปัญหาที่เจอบ่อยๆ node มันค้าง
- ใช้ถอดสายusb disconnect แล้วเสียบเปิดโปรแกรมใหม่
บทความละเอียดดีครับถูกใจคนเข้าใจอะไรยากๆอย่างผม ขอบคุญครับ
I see two languages.
English please, I see two languages.