มาเล่น ESP8266 บน Arduino IDE กันเถอะ

Posted by | April 2, 2015 | Arduino, Embeded System | 2 Comments
esp8266-nodemcu-development-boards-from-tronixlabs-australia-

ESP8266 เป็นโมดุล System On Chip ที่มี ไมโครคอนโทรลเลอร์ Tensilica Xtensa LX3 processor และ Wifi มาให้ด้วย โดยตอนนี้ ESP8266 ออกมาหลากหลายรุ่นมากๆ อยู่ที่จะ Match ให้ถูกกับงาน จะใช้ กี่ GPIO จะใช้เสาแบบไหน แถมราคาในไทย อยู่ที่ 200-250 บาท ยิ่งหาเก่งๆ อาจจะถูกลงไปอีก ที่ผ่านมา ทางเลือกในการพัฒนาโปรแกรม มีหลายรูปแบบมากตั้งแต่

newchip

  • เริ่มแรกทางผมก็ใช้ 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

esp8266-nodemcu-development-boards-from-tronixlabs-australia-

บอร์ด 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 เลย

pinout

การใช้งาน  Arduino IDE สำหรับ ESP8266

  • ติดตั้ง USB2Serial เข้าไปโหลดได้ที่นี้ CH340 Driver
  • เข้าไป Download Arduino IDE ตัวใหม่ได้จาก Github
  • จากนั้น แตกไฟล์ จากได้ Arduino IDE 1.6.1 ที่ผ่านการโมดิฟายมาให้ครับ สำหรับ IDE ตัวนี้ ไม่ใช้ตัวมาตราฐานนะครับ แต่เป็นตัวที่จับมารวมกับ ESP SDK

ide

  • และเลือก Programmer เป็น esptools

ide2

โดยวิธีการ 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 ได้อัตโนมัติแล้วครับ

board_text

*** ปล ตอนนี้ทาง เจ้าของผลงาน กำลังจะแก้ไขส่วนนี้ให้ลองรับ Autoreset ได้แล้ว เราไม่ต้องมาแก้เองครับ ให้ดูไว้ Hack แบบผิวๆ ประมาณนี้ล่ะ

การใช้งานบอร์ด NodeMCU บน Arduino IDE

ข้อดีอีกอย่างหนึ่ง ของบอร์ด NodeMCU  บอร์ด มันจะมี Switch มาให้ 1 ตัว และ LED 2 ดวง ราคาประหยัด ยังมี ของแถมนิดหน่อยๆ อีก

NodeMCU_DEVKIT_V0.9

ทำให้ เราสามารถทดสอบบอร์ดด้วย ไฟกระพริบ กระพริบง่ายๆ แบบนี้เลย

// 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 แล้วเสียบเปิดโปรแกรมใหม่

About chang

ชื่อ “ช้าง” ส่วนมากเขาจะเรียกว่า “พี่ช้าง” แล้ว มีความสนใจทางเทคโนโลยีทางคอมพิวเตอร์ อิเล็กทรอนิกส์ และ หุ่นยนต์ เป็นทั้งนักคิด นักประดิษฐ์ ชอบทดลองเล่น จนเดี่ยวนี้รู้สึกว่าจะเล่นมากกว่ามืออาชีพไปสักแล้ว

  • Dedpong Satirathai

    บทความละเอียดดีครับถูกใจคนเข้าใจอะไรยากๆอย่างผม ขอบคุญครับ

  • Van Gino

    English please, I see two languages.