ESP8266 กับ Arduino : เชื่อมต่อสายและอัพเดต ROM version ใหม่ (AT Command)

สวัสดีครับ

หลังจากที่ผมยำทดลองใช้ Arduinoเมื่อเทอมที่แล้ว ปิดเทอมนี้ หลังจากได้รับการอุดหนุน งปม. ปิดเทอมนี้ผมวางแผนว่าจะลองทำ IoT ต่อ (และมีบทความเป็นซีรีส์ตลอดปิดเทอมนี้นะครับ) นะครับ

วันนี้ขอเริ่มด้วยการเริ่มใช้ ESP8266 ครับ (ในที่นี้ผมจะใช้ ESP-12E พร้อม breakout นะครับเพื่อความขี้เกียจลองตัวอื่นสะดวกในการอธิบาย ESP version อื่นก็คิดว่าใช้แบบเดียวกันได้)

การเชื่อมต่อสาย

ผังการต่อสายวงจร ESP กับ Arduino

ผังการต่อสายวงจร ESP กับ Arduino

ในหลายบทความสอนมักจะแนะนำให้ใช้ FTDI Module นะครับเพราะเป็นอุปกรณ์เฉพาะทางกว่า แต่โดยส่วนตัวผมมองว่าในเมื่อ Arduino มี USB to TTL ในตัวแล้ว ก็น่าจะใช้แทนกันได้ ข้อสำคัญในการใช้งานมีแค่ 3 ข้อ คือต่อสายให้ถูก อย่าให้ Arduino sketch ไปยุ่งกับ Serial (วิธีที่ง่ายที่สุดคืออัพโหลด blink ลงตัว Arduinoก่อนนำไปใช้ ยกเว้นใครใช้ Arduino Mega สามารถใช้ UART ชุดอื่นแล้วทำ bypass ข้อมูลเอาก็ได้ครับ) และระวังเรื่อง Logic voltage เป็นอันใช้ได้ (ส่วนเรื่องต่อสายให้ถูกอันนี้ละไว้ในฐานที่เข้าใจนะครับ ต่อไม่ถูกยังไงก็ใช้ไม่ได้อยู่แล้วล่ะ :v )

ปัญหาสำคัญของการเชื่อมต่อก็คือ Digital logic voltage ไม่เท่ากันครับ Arduino จะใช้ที่ 5v แต่ ESP8266 หรือโมดูลสมัยใหม่มักรันที่ 3.3v การส่งข้อมูลจาก ESP ไปยัง Arduino มักไม่ค่อยมีปัญหาครับ เพราะ voltage ต่ำกว่า แต่พอส่งจาก Arduino ไป ESP นี่สิครับ เพราะ voltage สูงกว่าอาจจะทำให้ ESP พังได้ครับ เลยต้องต่อ Logic level converter อนุกรมระหว่างกัน โดยต่อแหล่งจ่ายไฟ 5v กราวน์ และสายข้อมูลจาก Arduino และต่อไฟ 3.3v (จะใช้ไฟจาก Arduino หรือแหล่งจ่ายภายนอกก็ได้ครับ ESP ปกติไม่ค่อยกินไฟมาก แต่ถ้าต่อแหล่งภายนอกอย่าลืมต่อกราวน์ร่วมนะครับ เพื่อให้ reference voltage เท่ากัน)และสายข้อมูลเข้า ESP ทั้งนี้ อย่าลืมต่อ Tx กับ Tx, Rx กับ Rx นะครับ

การต่อสายวงจร ESP กับ Arduino ที่ผมต่อจริง

การต่อสายวงจร ESP กับ Arduino ที่ผมต่อจริง

ส่วนขาอื่นที่จำเป็นเพิ่มเติมก็มี CH_PD เพื่อสั่งให้วงจรทำงาน (ถ้าใช้ Breakout ให้ต่อแหล่งจ่าย 3.3V นะครับ เพราะตัว Vcc ของ Breakout เราต่อ 5V เนื่องจากตั้วนั้นจะมี Linear regulator ปรับไฟเป็น 3.3v ต่างหากนะครับ) และเส้นไฟ (หรือในภาพข้างบนต่อ DIP Switch เพื่อความสวยงาม) จากช่อง Reset เอาไว้เริ่ม ESP ใหม่ กับ GPIO0 ต่อเพื่อเริ่มเข้า mode bootloader เพื่ออัพเดต Firmware ทั้งสองเส้นนี้หากจะสั่งทำงานให้ต่อลงกราวน์นะครับ (ฝั่งไหนก็ได้ครับ เพราะเราต้องใช้กราวน์ร่วมอยู่แล้ว)

ต่อเสร็จเช็คให้แน่ใจว่าถูกต้อง เสร็จแล้วมาเริ่มส่วนต่อไปครับ คือ…

ทดลองสื่อสาร ESP ด้วย AT command

สิ่งที่จะทำต่อไปคือการตรวจสอบว่า ESP ที่เราใช้มีคุณลักษณะอย่างไรครับ

โปรแกรมที่เราจะใช้หลักๆ จะมี 2 ตัวครับ คือ ESPLorer เป็น Java Program อำนวยความสะดวกในการติดต่อกับ ESP เพราะมี UI ช่วย กับ Serial Monitor ในการติดต่อด้วยมือกรณี ESPLorer ทรยศคุยไม่รู้เรื่อง ในที่นี้ผมจะใช้ Arduino IDE นะครับเพราะขี้เกียจหาแครก/ตัวอื่นมันใช้ง่ายดี

ตอนนี้ปล่อยลอย RST กับ GPIO0 ก่อนนะครับ

เลือก COM port ที่ความเร็ว (ถ้าเป็นค่ามาจากโรงงาน) 115200 bps แล้วลอง AT ถ้าขึ้น OK ถือว่าสำเร็จขั้นหนึ่งแล้วครับ ถ้ายังไม่ขึ้น แนะนำให้ตรวจสอบสายไฟว่าเดินถูกต้อง ไม่สลับ Tx Rx ต่อกราวน์ร่วมแล้ว หรื่อถ้ายังไม่ได้ลองต่อ Capacitor สัก 200 uF ระหว่างแหล่งจ่ายไฟทั้ง 5v และ 3.3v กับกราวน์เพื่อทำให้ไฟเรียบขึ้น หรือถ้ายังไม่ได้อีก ลองหา ESP ตัวอื่นมาลองดูครับ

เสร็จแล้วลอง AT+GMR เพื่อดู version ถ้ายังใหม่อยู่จะใช้ทั้งอย่างนั้นก็ได้ครับ

เสร็จแล้วให้สั่ง AT+RST หรือเอา RST ต่อลงกราวน์สัก 1 วินาทีแล้วปล่อยลอยเพื่อสั่งรีสตาร์ท ESP จะเห็นว่ามีข้อมูลที่เราจำเป็น ได้แก่

  1. SPI Speed
  2. SPI Mode
  3. SPI Flash size & Map
ข้อมูลของ ESP-01 ที่ไดจากการสั่ง GMR และ RST

ข้อมูลของ ESP-01 ที่ไดจากการสั่ง GMR และ RST

ข้อมูลที่ได้จากการรีสตาร์ท ESP-12E บนโปรแกรม ESPlorer

ข้อมูลที่ได้จากการรีสตาร์ท ESP-12E บนโปรแกรม ESPlorer

จดค่าเหล่านี้ไว้นะครับ เพราะเราจะเอาไปใช้ในการตั้งค่าตอน  Flash ต่อไปครับ

อย่าลืมปิดการเชื่อมต่อ (Close port หรือปิดหน้าต่าง Serial กรณี Arduino IDE) ด้วยนะครับ

หา ROM ในการอัพเดต

เราสามารถหาไฟล์ ROM ได้จาก http://bbs.espressif.com/ โดยเข้าไปที่หน้า SDK โซน Download แล้วเลือกโหลด 2 ตัวครับ คือ

  1. SDK Release ให้ดูตัว NONO SDK เวอร์ชันล่าสุด
  2. AT Release ให้ดูตัวที่เวอร์ชันสัมพันธ์กับ SDK นะครับ
หน้า List รายการ Release

หน้า List รายการ Release

เข้าไปแล้วให้ลงไปที่ท้ายกระทู้หลัก จะมีไฟล์  .zip ให้ดาวน์โหลดแล้วแตกไฟล์ลงมาครับ (อย่าลืมอ่านข้อมูลใน Important link ดูก่อนนะครับ)

ส่วน Flash Download Tool ให้เข้าไปดูในส่วน Tools แล้วเลือก Flash Download Tool ครับ แตกไฟล์แล้วใช้ได้เลยเช่นกันครับครับ

Flash ROM ลงจริงๆ ล่ะ

ผมแนะนำว่าให้ลง ROM ทั้งสองตัวเลยนะครับทั้ง SDK และ AT นะครับ ป้องกันปัญหา SDK เข้ากันไม่ได้

ให้ลองหา README.md ในโฟลเดอร์ bin/at ดูครับ ในนั้นจะบอกไฟล์ที่ต้องใช้ในการ flash ให้เทียบค่าจากที่ได้ตอนรีสตาร์ทจากส่วน Boot mode นะครับ

รายการไฟล์ที่ต้องใช้ในการอัพโหลด

รายการไฟล์ที่ต้องใช้ในการอัพโหลด

เปิดโปรแกรม Flash Download Tool ขึ้นมา จะพบหน้าต่างตั้งค่าต่างๆ ให้ตั้งค่าตามที่จดมาเลยครับ อ้อ! อย่าลืมเลือก COM port และ Baudrate ตามที่ ESP ใช้นะครับ

การตั้งค่ากรณี ESP-12E

การตั้งค่ากรณี ESP-12E ถ้าเป็นรุ่นอื่นให้ปรับค่าตามที่ได้จาก RST command

ก่อนจะลั่นกดปุ่ม Start ให้ต่อ GPIO0 กับกราวน์คาไว้แล้วสั่ง RST สักทีหนึ่งนะครับเพื่อให้ ESP เข้าโหมดอัพโหลด Firmware เสร็จแล้วกด Start ส่วนใหญ่ถ้าต่อถูกก็ใช้ได้เลยครับ แต่ถ้าขึ้น Error พวก chip sync error หรือ Device ID error ให้ลองเช็คสาย CH_PD ว่าต่อไฟ 3.3v RST ลอยอยู่ GPIO0 ต่อกับกราวน์หรือไม่ หรือถ้าขึ้น COM Fail ให้หาโปรแกรมที่เปิด Serial คาไว้ ปิดให้เรียบร้อยนะครับ

ถ้าอัพโหลดได้จะขึ้นหน้าต่างประมาณนี้

ขณะกำลังอัพเดต Firmware

ขณะกำลังอัพเดต Firmware

หานมมาจิบรอสักแปป ก็เป็นอันเสร็จครับ

หน้าจอเมื่ออัพโหลด Firmware สำเร็จ

หน้าจอเมื่ออัพโหลด Firmware สำเร็จ

เย้! อัพโหลดผ่านแล้ว Yaruki Zero - Yes!

สั่งรีสตาร์ทสักทีหนึ่งแล้วลอง AT+GMR สักทีเพื่อเช็ค Version ดูครับ

Firmware Version เมื่ออัพเดตแล้ว

Firmware Version เมื่ออัพเดตแล้ว

คราวหน้าผมจะลองเอาฟ้าใสมาควบคุมไฟดูครับ

มีอะไรสงสัยสอบถามมาได้ที่ Comment เช่นเคยครับ

อ้างอิง

http://www.allaboutcircuits.com/projects/update-the-firmware-in-your-esp8266-wi-fi-module/

http://www.esp8266.com/viewtopic.php?f=6&t=6260

http://www.arduinoall.com/article/สอน-วิธี-ใช้งาน-arduino-wi-fi-module-esp8266