เชื่อว่าหลาย ๆ ท่านที่เป็นลูกค้าของ IOXhop หรือคนที่ติดตามบทความมาโดยตลอด จะพบว่าผมจะเขียนบทความถึง ESP8266 อยู่บ่อยครั้ง เนื่องจากตัว ESP8266 นั้น มีความสามารถที่หลากหลาย โดยเฉพาะด้านการสื่อสารไร้สายผ่าน WiFi ซึ่งจะในขณะนี้จะมีเพียง ESP8266 เท่านั้น ที่สามารถทำราคาได้ถูก และมี WiFi มาในตัว ซึ่งตัวผมเอง และคิดว่าหลาย ๆ คน คงจะชื่นชอบเจ้าชิปไมโครคอนโทรลเลอร์ ESP8266 จนหยิบขึ้นมาใช้งานประจำเป็นแน่ครับ
ESP8266 ที่มากไปด้วยความสามารถ แต่กลับมี I/O ที่น้อยเหลือเกินครับ หากตัดบางช่องที่ใช้งานได้ไม่เต็มที่ อย่าง GPIO2 GPOI0 GPIO15 ที่ตอนบูตต้องเป็นสถานะ HIGH เสมอ ก็จะทำให้เหลือขา I/O ที่ใช้งานได้เต็มที่จริง ๆ น้อยลงไปอีก และนอกจากนี้ ขา ADC ก็กลับมีมาให้เพียงขาเดียวเท่านั้น เรียกได้ว่าค่อนข้าง "งก" พอสมควรเลยครับ
ในบทความนี้ผมจึงจะมาชวนทุกท่านไปลองใช้ Arduino ตัวเก่ง ที่เรา ๆ มีอยู่แล้ว มาเป็นตัวช่วยขยายพอร์ต I/O ให้กับ ESP8266 กันครับ โดยผ่านบัส I2C และใช้ไลบรารี่ที่ชื่อว่า MCUio ที่ทางร้าน IOXhop จัดทำขึ้นมาให้กับทุกท่าน โดยความสามารถของไลบรารี่นี้ จะรองรับการควบคุม I/O พื้นฐาน เช่น เซ็ตโหมด เซ็ตสถานะ อ่านค่าสถานะ อ่านค่าอนาล็อก ใช้ PWM และนอกจากนี้ยังสามารถใช้คำสั่งสำหรับสร้างสัญญาณความถี่เสียงเพื่อไปใช้กับบัสเซอร์ได้อีกด้วย เรียกว่าค่อนข้างครบ และใช้ความสามารถของ Arduino ได้เต็มที่เลยทีเดียว
เนื่องจากตอนนี้ไลบรารี่ MCUio ได้เริ่มพัฒนาได้ไม่นาน ขณะที่เขียนบทความนี้ยังรองรับเฉพาะบอร์ด Arduino รุ่นที่ใช้ชิป ATmega328p เท่านั้น โดยบอร์ดที่ใช้ ATmega328p มีดังนี้
นอกจากนี้ยังสามารถใช้งานได้กับ ATmega8 ด้วยครับ เนื่องจาก ATmega8 นั้น เหมือนกับ ATmega328p ทุกประการ เพียงแต่มีรอมน้อยกว่า แต่เพียงพอที่จะอัพโหลด Sketch ที่ไลบรารี่ MCUio จำเป็นต้องใช้แล้วครับ ส่วนบอร์ดรุ่นอื่น ๆ จะทะยอยอัพเดท แล้วออกไลบรารี่เวอร์ชั่นใหม่มาซัพพอร์ตเรื่อย ๆ รอติดตามกันได้นะครับ
เมื่อเตรียมบอร์ด Arduino เรียบร้อยแล้ว ให้เข้าไปก๊อบโค้ดที่ลิ้ง IOXhop_MCUio/Sketch/ATmega328_Arduino/ATmega328_Arduino.ino มาไว้ในโปรแกรม Arduino IDE และอัพโหลดลงบอร์ด Arduino ได้เลยครับ
กรณีที่ท่านต่อ ESP8266 เข้ากับอุปกรณ์อื่นผ่าน I2C แล้วตำแหน่งตรงกับ 0x08 พอดี ท่านสามารถเปลี่ยนตำแหน่งได้โดยแก้ตัวแปร devAddr ในบรรทัดที่ 7 ได้เลยครับ
เป็นเรื่องที่เรียกว่าอาจจะปกติ ในการเขียนโปรแกรมบนคอมพิวเตอร์ เรามักจะทดสอบด้วยการสร้างโปรแกรม Hello, world! แต่เนื่องจากในไมโครคอนโทรลเลอร์ไม่สามารถแสดงผลแบบนั้นได้ จึงนิยมใช้ตัวอย่างไฟกระพริบ ในการทดสอบโปรแกรมแทน
ในการเชื่อมต่อแบบ I2C ที่บอร์ด Arduino ใช้ชิป ATmega328p จะมีขา SCL อยู่ที่ขา A5 และขา SDA อยู่ที่ขา A4 แต่ที่ ESP8266 สามารถต่อ I2C ที่ขาใดก็ได้ แต่ค่าเริ่มต้น ขา SCL จะอยู่ที่ GPIO5 (D1 บนบอร์ด NodeMCU / WeMos D1 mini) และขา SDA จะอยู่ที่ GPIO4 (D2 บนบอร์ด NodeMCU / WeMos D1 mini) และแรงดันที่จ่ายให้บอร์ด Arduino สามารถต่อมาจาก ESP8266 ได้เลย แต่ควรใช้แรงดันให้ตรงกับที่บอร์ดต้องการ เช่น Arduino Uno R3 / Nano / Pro Mini 5V ควรจ่ายแรงดัน 5V และ Arduino Pro Mini 3.3V ควรจ่ายแรงดัน 3.3V (กรณีบอร์ด NodeMCU v1 จะไม่มีไดโอดกั้นที่ช่อง Vin จะสามารถดึงไฟ 5V จากตรงนั้นมาใช้ได้เลย ซึ่งไฟ 5V นี้ จะเข้ามาผ่านช่อง USB อีกที) เนื่องจากผมใช้ Arduino Nano ดังนั้น การเชื่อมต่อวงจรจะเป็นไปตามตารางด้านล่างนี้
NodeMCU | Arduino |
---|---|
Vin | 5V |
D1 | A5 |
D2 | A4 |
GND | GND |
การติดตั้งไลบรารี่ จะเหมือนกับการติดตั้งไลบรารี่ทั่ว ๆ ไป ซึ่งสามารถทำได้ดังนี้
ที่โปรแกรม Arduino ให้กดไปที่ File > Examples > IOXhop_MCUio > MCUio_Blink
จากนั้นเลือกบอร์ด เลือกพอร์ตให้ถูกต้อง (ผมใช้ NodeMCU จึงเลือกที่ NodeMCU 1.0) แล้วอัพโหลดได้เลยครับ
หลังจากอัพโหลดแล้ว ให้สังเกตุที่หลอด L บนบอร์ด Arduino จะกระพริบทุก ๆ 1 วินาทีแล้วครับ (ติดครึ่งวินาที และดับครึ่งวินาที)
บทความนี้เป็นบทความสั้น ๆ ที่จะมาแนะนำไลบรารี่เบื้องต้น หากต้องการดูตัวอย่างอื่น ๆ อีก สามารถดูได้ในวิดีโอในเพจ IOXhop ที่ด้านล่างนี้เลยครับ
ท่านสามารถอ่านรายละเอียดของฟังก์ชั่นต่าง ๆ ได้ในหน้า GitHub ของไลบรารี่ MCUio ได้เลยครับ สำหรับบทความนี้ผมก็ขอลาทุกท่านไปเพียงเท่านี้ แล้วพบกันใหม่ในบทความหน้า
~ สวัสดีครับ ~