ESP32
ESP32 เป็นชื่อของไอซีไมโครคอนโทรลเลอร์ที่รองรับการเชื่อมต่อ WiFi และ Bluetooth 4.2 BLE ในตัว ผลิตโดยบริษัท Espressif จากประเทศจีน โดยราคา ณ ที่เขียนบทความอยู่นี้ มีราคาไม่เกิน 500 บาท (บอร์ดพัฒนาสำเร็จรูป) โดยตัวไอซี ESP32 มีสเปคโดยละเอียด ดังนี้
ซีพียูใช้สถาปัตยกรรม Tensilica LX6 แบบ 2 แกนสมอง สัญญาณนาฬิกา 240MHz
มีแรมในตัว 512KB
รองรับการเชื่อมต่อรอมภายนอกสูงสุด 16MB
มาพร้อมกับ WiFi มาตรฐาน 802.11 b/g/n รองรับการใช้งานทั้งในโหมด Station softAP และ Wi-Fi direct
มีบลูทูธในตัว รองรับการใช้งานในโหมด 2.0 และโหมด 4.0 BLE
ใช้แรงดันไฟฟ้าในการทำงาน 2.6V ถึง 3V
ทำงานได้ที่อุณหภูมิ -40◦C ถึง 125◦C
นอกจากนี้ ESP32 ยังมีเซ็นเซอร์ต่าง ๆ มาในตัวด้วย ดังนี้
วงจรกรองสัญญาณรบกวนในวงจรขยายสัญญาณ
เซ็นเซอร์แม่เหล็ก
เซ็นเซอร์สัมผัส (Capacitive touch) รองรับ 10 ช่อง
รองรับการเชื่อมต่อคลิสตอล 32.768kHz สำหรับใช้กับส่วนวงจรนับเวลาโดยเฉพาะ
ขาใช้งานต่าง ๆ ของ ESP32 รองรับการเชื่อมต่อบัสต่าง ๆ ดังนี้
มี GPIO จำนวน 32 ช่อง
รองรับ UART จำนวน 3 ช่อง
รองรับ SPI จำนวน 3 ช่อง
รองรับ I2C จำนวน 2 ช่อง
รองรับ ADC จำนวน 12 ช่อง
รองรับ DAC จำนวน 2 ช่อง
รองรับ I2S จำนวน 2 ช่อง
รองรับ PWM / Timer ทุกช่อง
รองรับการเชื่อมต่อกับ SD-Card
นอกจากนี้ ESP32 ยังรองรับฟังก์ชั่นเกี่ยวกับความปลอดภัยต่าง ๆ ดังนี้
รองรับการเข้ารหัส WiFi แบบ WEP และ WPA/WPA2 PSK/Enterprise
มีวงจรเข้ารหัส AES / SHA2 / Elliptical Curve Cryptography / RSA-4096 ในตัว
ในด้านประสิทธิ์ภาพการใช้งาน ตัว ESP32 สามารถทำงานได้ดี โดย
รับ – ส่ง ข้อมูลได้ความเร็วสูงสุดที่ 150Mbps เมื่อเชื่อมต่อแบบ 11n HT40 ได้ความเร็วสูงสุด 72Mbps เมื่อเชื่อมต่อแบบ 11n HT20 ได้ความเร็วสูงสุดที่ 54Mbps เมื่อเชื่อมต่อแบบ 11g และได้ความเร็วสูงสุดที่ 11Mbps เมื่อเชื่อมต่อแบบ 11b
เมื่อใช้การเชื่อมต่อผ่านโปรโตคอล UDP จะสามารถรับ – ส่งข้อมูลได้ที่ความเร็ว 135Mbps
ในโหมด Sleep ใช้กระแสไฟฟ้าเพียง 2.5uA
จะเห็นได้ว่า ในราคาไม่ถึง 500 บาท (บอร์ดพัฒนาสำเร็จรูป) และโมดูลเปล่าราคาไม่ถึง 400 บาท สามารถให้ประสิทธิ์ภาพได้เกินราคา ด้วยเหตุนี้ ESP32 จึงเหมาะสำหรับนำมาใช้งานมาก ด้วยเหตุผลทางด้านราคา และประสิทธิ์ภาพที่ได้
ประวัติความเป็นมาของ ESP32
ก่อนที่ ESP32 จะได้ถือกำเนิดขึ้น ได้มีไอซีไมโครคอนโทรลเลอร์ที่มี WiFi ในตัว และทำราคาได้ถูกมาก ๆ ในขณะนั้น (เพียง $5 หรือประมาณ 200 บาท) ออกมาปฏิวัติโลกของระบบสมองกลฝังตัว นั่นก็คือไอซีเบอร์ ESP8266 ที่ผลิตโดยบริษัท Espressif จากประเทศจีน ในช่วงเริ่มแรก ไอซี ESP8266 สามารถทำงานได้โดยใช้การสื่อสารผ่าน UART เท่านั้น และพูดคุยสั่งงานผ่าน AT command ไม่สามารถอัพเดท หรือแก้ไขเฟิร์มแวร์ด้านในได้ แต่ต่อมาไม่นานบริษัท Espressifก็ได้ออกไอซีเวอร์ชั่นใหม่มา ในครั้งนี้สามารถที่จะอัพเดทเฟิร์มแวร์ได้ และเราสามารถลงไปเขียนเฟิร์มแวร์เองได้ โดยในขณะนั้น การเขียนเฟิร์มแวร์จะใช้ภาษา C เพียงอย่างเดียว และใช้ ESP8266 SDK เป็นชุดซอฟแวร์พัฒนา ด้วยความยากของการใช้งานภาษา C เพียงอย่างเดียว ทำให้ไม่ได้รับความนิยมเรื่องการพัฒนาเฟิร์มแวร์เองมากนัก
รูปที่ 1.2 โมดูล ESP8266 01 ผลิตโดยบริษัท Ai-Thinker หัวใจหลักคือไอซี ESP8266
หลังจากนั้นมาประมาณ 1 ปี ผู้ผลิตบอร์ด NodeMCU ได้พอร์ตตัว Runtime ภาษา Lua มาลงใน ESP8266 ทำให้ตัว ESP8266 สามารถเขียนโปรแกรมสั่งงานตรง ๆ ได้ง่ายขึ้นมาก รวมทั้งมีเสถียรภาพเพิ่มขึ้น และในขณะนี้เอง บอร์ด NodeMCU เป็นบอร์ดพัฒนา ESP8266 สำเร็จรูปเพียงบอร์ดเดียวในตลาด ที่มาพร้อมกับ USB to UART ทำให้ให้สามารถอัพโหลดเฟิร์มแวร์เข้า ESP8266 ได้ผ่าน USB โดยตรง นอกจากนี้ผู้พัฒนาบอร์ด NodeMCU ได้คิดค้นวงจรการเข้าโหมดอัพโหลดโปรแกรมอัตโนมัติ และตั้งชื่อว่า nodemcu ซึ่งภายหลังบอร์ดพัฒนาทุกรุ่น จะใช้วงจรแบบ nodemcu ในการเข้าโหมดอัพโหลดโปรแกรมอัตโนมัติ และด้วยเหตุผลที่บอร์ด NodeMCU เป็นบอร์ดพัฒนา ESP8266 บอร์ดแรกในท้องตลาด ทำให้ได้รับความนิยมมาก และหลังจากบริษัทในจีนต่าง ๆ ได้ลอกวงจร และลายปริ้นของ NodeMCU มาทำขายเองในราคาที่ถูก แล้วใช้ชื่อเดิมคือ NodeMCU จึงทำให้บอร์ด NodeMCU ได้รับความนิยมมากจนถึงปัจจุบัน
รูปที่ 1.3 ด้านซ้าย บอร์ด NodeMCU 0.9 และด้านขวา บอร์ด NodeMCU 1.0
หลังจากตัว Runtime ภาษา Lua ได้ถูกพอร์ตมาลง ESP8266 ได้ประมาณ 2 – 4 เดือน ทางชุมชนพัฒนา ESP8266 ที่ชื่อ ESP8266 Community Forum (www.esp8266.com) ได้ออกชุดไลบารี่ และคอมไพล์เลอร์สำหรับใช้กับโปรแกรม Arduino IDE มาในชื่อ Arduino core for ESP8266 WiFi chip ทำให้การพัฒนาเฟิร์มแวร์ของ ESP8266 นั้นง่ายขึ้นมาก ๆ โดยใช้การเขียนโปรแกรมแบบ Arduino ดังนั้นคนที่มีพื้นฐานการเขียนโปรแกรมลงบอร์ด Arduino เป็นอยู่แล้ว จึงมาเขียนเฟิร์มแวร์ลง ESP8266 โดยใช้โปรแกรม Arduino ได้ไม่ยาก และนอกจากนี้ ไลบารี่ต่าง ๆ ที่ใช้งานได้กับบอร์ด Arduino ยังสามารถนำมาใช้งานกับ ESP8266 ได้เลย ทำให้ ESP8266 ได้รับความนิยมสูงมากมาจนถึงขณะนี้
รูปที่ 1.4 หน้าเว็บหลักของชุดซอฟแวร์ Arduino core for ESP8266 WiFi chip อยู่บน GitHub
ด้วยความสำเร็จอย่างถึงที่สุดของไอซี ESP8266 ทำให้บริษัท Espressif ออกไอซีรุ่นถัดไปมา ในช่วงแรกใช้ชื่อว่า ESP31B เปิดให้ร้านค้าใหญ่ ๆ อย่าง Adafruit SparkFun และผู้สนใจบางส่วนได้ทดสอบ โดยในขณะนั้นได้มีการพัฒนาชุดซอฟแวร์ ESP32_RTOS_SDK ไปพร้อม ๆ กับการพัฒนาไอซี ESP31B ทำให้มีคนนำชุด ESP32_RTOS_SDK ไปพัฒนาลงโปรแกรม Arduino รอก่อนไอซีตัวจริงจะออก ในชื่อ Arduino core for ESP31B WiFi chip แต่หลังจากนั้นไม่นาน บริษัท Espressif ได้ยกเลิกการใช้ชุดซอฟแวร์พัฒนา ESP32_RTOS_SDK แล้วไปสร้างชุดพัฒนาใหม่ที่ชื่อ ESP-IDF แทน (แต่เมื่อไปเจาะลึก จะพบว่าภายในแทบจะลอก ESP32_RTOS_SDK มาทั้งหมด) จากนั้นจึงออกไอซี ESP32 ออกมาเป็นครั้งแรก
รูปที่ 1.5 ด้านหน้า และด้านหลังของโมดูล ESP31B-WROOM-03 ใช้ชิปไอซี ESP31B
ด้วยในอดีตที่ไอซี ESP8266 ได้ทำไว้ดีมาก จึงส่งผลให้ ESP32 ได้รับความสนใจอย่างมาก จนผลิตไม่ทันต่อความต้องการ โดยในช่วงแรก บริษัท Espressif ได้ให้ข่าวว่า จะผลิต ESP32 แบบโมดูลออกมาเพียงอย่างเดียว ในชื่อ ESP-WROOM-32 หลังจากนั้นไม่นาน บริษัท Ai-Thinker ได้ร่วมมือกับ Seeedstudio ผลิตโมดูล ESP3212 ขึ้นมา โดยมีสถานะเป็นพรีออเดอร์ แต่เมื่อถึงกำหนดส่งมอบ บริษัท Seeedstudio ได้เลื่อนการส่งมอบออกไป ด้วยปัญหาด้านการออกแบบลายวงจรของตัวโมดูลเอง ทาง Ai-Thinker จึงได้ยกเลิกการผลิต ESP3212 แล้วหันไปผลิต ESP32S แทน โดยลายวงจรเหมือนกับ ESP-WROOM-32 ทุกประการ แล้วจึงเริ่มส่งมอบสินค้าได้
รูปที่ 1.6 หน้าตาของโมดูล ESP3212 ที่ Ai-Thinker ร่วมกับ Seeedstudio ผลิตขึ้น
รูปที่ 1.7 หน้าตาของโมดูล ESP32S ที่ Seeedstudio ส่งมอบ
หลังจากสินค้า ESP32S ได้เริ่มส่งมอบ ทางทีมผู้พัฒนา Arduino core for ESP8266 WiFi chip ได้ถูกบริษัท Espressif ซื้อตัวมาทั้งหมด แล้วจ้างให้พัฒนาชุดไลบารี่และคอมไพล์เลอร์สำหรับ Arduino ในชื่อ Arduino core for ESP32 WiFi chip ทำให้การพัฒนาเป็นไปด้วยความรวดเร็วมากขึ้น ภายหลัง ผู้พัฒนา Arduino core for ESP31B WiFi chip ก็ถูกดึงตัวให้มาร่วมทีมพัฒนา Arduino core for ESP32 WiFi chip ด้วยเช่นเดียวกัน
การพัฒนา Arduino core for ESP32 WiFi chip จะทำไปควบคู่กับการพัฒนา ESP-DF โดยที่ ESP-IDF จะเป็นแกนหลัก เมื่อมีการเพิ่มฟิเจอร์ใหม่ ๆ ให้ ESP-IDF แล้ว จึงจะมีการเพิ่มใน Arduino core for ESP32 WiFi chip โดยที่ ESP-IDF รองรับการเขียนโปรแกรมแบบ Arduino เช่นเดียวกัน และรองรับทุกไลบารี่ที่ใช้ได้สำหรับ Arduino เพียงแต่ ESP-IDF ไม่มีโปรแกรม Editor โดยเฉพาะเท่านั้นเอง
รายชื่อผู้พัฒนาชุด ESP_IDF
ในฐานะของผู้ใช้งานเต็มรูปแบบ เราควรที่จะทำความรู้จักกับทีมผู้พัฒนากันบ้าง โดยชื่อที่ยกมานี้ เป็นชื่อที่ใช้ในเว็บ GitHub
Igrr (ผู้พัฒนาหลัก และเรามักได้ข่าวฟิเจอร์ใหม่ ๆ ของ ESP_IDF จากบัญชีทวิตเตอร์ของเขา)
Projectgus
Spritetm
Liuzfesp
TianHao-Espressif
wmy-espressif
heyinling
wujiangang
TimXia
Costaud
Krzychb
me-no-dev
รายชื่อผู้พัฒนาชุด Arduino core for ESP32 WiFi chip
เมื่อเข้าไปดูรายชื่อผู้พัฒนา Arduino core for ESP32 WiFi chip จะพบว่า มีผู้พัฒนาหลักอยู่เพียงรายเดียว อาจจะเพราะ ESP_IDF สามารถเขียนโค้ดแบบ Arduino ได้อยู่แล้ว การนำ ESP_IDF มาลง Arduino อาจไม่ใช่เรื่องยาก จึงไม่ต้องใช้นักพัฒนาที่มากมายนัก
me-no-dev (ผู้พัฒนาหลัก คนเดียวกับที่พัฒนาชุด Arduino core for ESP31B WiFi chip)
ชุดซอฟแวร์พัฒนา ESP32 อื่น ๆ
ตั้งแต่ยุคของ ESP8266 ที่ได้รับความนิยมสูงสุด ได้มีการพยายามนำตัว Runtime ของภาษาระดับสูงหลาย ๆ ตัวมาใช้ เพื่อให้คนที่คุ้นชินกับภาษาระดับสูงเหล่านั้น ได้มาใช้ ESP8266 ได้ง่ายมากยิ่งขึ้น เมื่อมาถึงยุค ESP32 ก็ได้มีการนำซอสโค้ดเดิมที่ทำไว้ มาดัดแปลงและใช้งานกับ ESP32 ด้วย
LuaNode
เป็นชื่อของชุดพัฒนา ESP32 ที่นำ Rumtime ของภาษา Lua มาลงใน ESP32 ทำให้ ESP32 ใช้ภาษา Lua ได้ พัฒนาโดยบริษัท DOIT ที่ทำบอร์ดพัฒนา ESP32 ในชื่อ DOIT ESP32 Development Board โดยความสามารถของ LuaNode คือรองรับคำสั่งที่ใช้บน Lua จริง ๆ แทบทุกคำสั่ง และรองรับการควบคุม WiFi เต็มรูปแบบ ดังนั้นหากผู้อ่านที่ใช้ภาษา Lua เป็นอยู่แล้ว ก็แนะนำให้ลองไปเล่นกันได้ครับ โดยรายละเอียดจะอยู่ที่ https://github.com/Nicholas3388/LuaNode
รูปที่ 1.8 หน้าตาบอร์ดพัฒนา DOIT ESP32 Development Board
MicroPython-ESP32
รูปที่ 1.9 โลโก้ของโครงการ MciroPython
ชุดพัฒนาที่พยายามสร้างตัว Runtime ของภาษา Python 3 บนไมโครคอนโทรลเลอร์ต่าง ๆ พัฒนาโดย MicroPython ก่อนหน้านี้เขาได้เปิดระดมทุนในเว็บ Kickstarter เพื่อนำ Python 3 มาลงใน ESP8266 แล้วประสบความสำเร็จอย่างมาก ทำให้โครงการสามารถอยู่มาได้เรื่อย ๆ จนสามารถนำภาษา Python 3 มาใช้บน ESP32 ได้สำเร็จ
Espruino on ESP32
รูปที่ 1.10 โลโก้ของโครงการ Espruino
เป็นชุดพัฒนาที่พยายามทำให้สามารถใช้ภาษา JavaScript ในการสั่งงานได้ โดยโครงการ Espruino ได้ทำตัว Runtime ขึ้นมาใช้กับ ESP32 และไมโครคอนโทรลเลอร์อื่น ๆ โครงการนอกจากจะพัฒนาตัวเฟิร์มแวร์ Runtime แล้ว ยังได้พัฒนา Espruino Web IDE ซึ่งเป็นโปรแกรม IDE แบบเว็บแอพพลิเคชั่นที่ใช้งานร่วมกับ Google Chrome ด้วย ในการติดตั้ง จะต้องติดตั้งผ่าน Chrome เว็บสโตร์ รองรับการเขียนโปรแกรมแบบ Text และภาษาบล็อก (Block)
รูปที่ 1.11 หน้า UI ของโปรแกรม Espruino Web IDE
ในขณะที่เขียนชุดบทความนี้ Espruino on ESP32 รองรับการควบคุม GPIO และบัสพื้นฐานอย่าง 1-wire I2C SPI DAC ADC UART และรองรับการใช้งาน WiFi แล้ว แต่ยังไม่รองรับการใช้งานบลูทูธ และการอัพโหลดโปรแกรมไร้สาย (Over-The-Air : OTA) หากสนใจ สามารถเข้าไปอ่านรายละเอียดได้ที่ http://www.espruino.com/ESP32
ภาษาของการเขียนโปรแกรมใช้งานArduino
“Arduino” เป็นแพลตฟอร์มที่ใช้ภาษา C / C++ ในการเขียนโปรแกรมสั่งงาน แต่การเขียนโปรแกรมในแพลตฟอร์ม Arduino นั้นจะง่าย และสามารถเข้าใจได้ นอกจากนี้ แพลตฟอร์มยังมีฟังก์ชั่นทำงานหลาย ๆ ที่อำนวยความสะดวกไว้ให้แล้ว เช่น ฟังก์ชั่นหน่วงเวลา ฟังก์ชั่นอินเตอร์รัพท์ ฟังก์ชั่นอ่านค่า GPIO ซึ่งในแพลตฟอร์มอื่น ๆ จะไม่มีการเตรียมฟังก์ชั่นไว้ให้ใช้งานได้สะดวกเท่ากับ Arduino
เว็บไซต์ที่ขาย จำหน่าย และบทความเกี่ยวกับ Arduino & ESP32
- https://www.mcucity.com
- https://www.arduinothai.com
- https://www.arduitronics.com
- http://robo-circuit.com
- https://www.arduinoall.com