การเริ่มต้นใช้งาน ESP8266 ผ่านทาง Arduino IDE (ตอนที่ 2 – การใช้งานขา GPIO บน ESP8266)
- ติดตั้ง Arduino IDE กับ ESP8266 พร้อม flash โปรแกรม
- การใช้งานขา GPIO บน ESP8266
ตอนที่ 2 – การใช้งานขา GPIO บน ESP8266
ในการใช้งาน GPIO บน ESP8266 สามารถปรับโหมด ได้หลากหลายโหมด เช่น Digital Input/Output , Analog Input(ADC)/Output(PWM) รวมไปถึงการสื่อสาร ในรูปแบบต่าง ๆ เช่น I2C หรือ SPI เป็นต้น
บทความตอนนี้ จะมีกล่าวถึงการใช้งาน Digital : Input/Output, Analog : Input(ADC)/Output(PWM)
ก่อนอื่น มาคลายความสงสัยกันก่อน ว่า GPIO คืออะไร ? … GPIO ย่อมาจาก General Purpose Input/Output เรียกเป็นภาษาไทยง่ายๆว่า พอร์ตเอนกประสงค์ ที่เป็นได้ทั้ง อินพุต และ เอาต์พุต คือเราสามารถควบคุม คอนโทรลให้เป็นลอจิก “1” หรือ ลอจิก “0” ได้ ตามใจชอบ โดยที่จะสามารถควบคุมได้แต่ละ pin เหมือนไมโครคอนโทรลเลอร์ทั่วไป
1. มารู้จักโมดูล ESP8266 ที่มีขายและ ใช้งานทั่วไปๆ กันก่อนเลยครับ
โมดูลที่นิยมใช้งานทั่วไป ๆ ของ ESP8266 มีอยู่ 2 รุ่น ได้แก่ ESP8266-01 และ ESP8266-12 ทั้งตัวมีเสา กับไม่มีเสา ซึ่งเป็นสิ้งค้าของบริษัท AI-THINKER
ESP8266-01
โมดูล ESP8266-01 รุ่นนี้ มีขาใช้งาน 8 ขา ใช้แรงดันไฟฟ้ากระแสตรง 3.3 โวลต์ มีขา GPIO 2 ขา และขาการสื่อสารแบบ UART คือ TX และ RX
ESP8266-12
โมดูล ESP8266-12 รุ่นนี้ มีขาใช้งาน 16 ขา ใช้แรงดันไฟฟ้ากระแสตรง 3.3 โวลต์ มีขา GPIO 9 ขา, มีขา ADC 1 ขา, มีขาการสื่อสารแบบ UART , ในขา GPIO จะมีขาใช้งานในการสื่อสารอื่นแฝงอยู่ทั้งแบบ I2C และ SPI
จะเห็นได้ว่าภายในโมดูล ESP8266 จะประกอบไปด้วย ชิพไมโครคอนโทรลเลอร์ และ ชิพที่ใช้สำหรับการเชื่อมต่อ WIFI นั่นหมายถึงเราจะสามารถใช้งาน ไมโครคอนโทรลเลอร์ที่สามารถต่อ WIFI ได้นั่นเอง
2. มารู้จัก break out board สำหรับ โมดูล ESP8266 กันต่อเลยครับ
break out board สำหรับ โมดูล ESP8266 ที่นิยมใช้งานทั่วไป ๆ มีอยู่หลายรุ่นเลยทีเดียว เช่น บอร์ด DW.mini.ESP8266 ของ Deaware, บอร์ด NodeMCU ของ Seeedstudio เป็นต้น
บอร์ด DW.mini.ESP8266 ของ Deaware
ตารางขาใช้งาน GPIO ของโมดูล ESP8266-12
บอร์ด NodeMCU Development ของ Seeedstudio
บอร์ด NodeMCU V1 ของ Seeedstudio
ซึ่ง break out board สำหรับ โมดูล ESP8266 ในแต่ละบริษัทที่ผลิตออกมานั้นล้วนแต่มีวัตถุประสงค์เพื่อ อำนวยความสะดวกสะบายในการต่อใช้งาน ให้กับผู้ใช้งาน ทั้งสิ้น ในบางรุ่นอาจจะมี ไม่โครคอนโทรลเลอร์เพิ่มเข้ามาซึ่งจะช่วยในการประมวลผล หรือช่วยในการสื่อสาร นั่นเอง
สำหรับ การเริ่มต้นใช้งาน ESP8266 ผ่าน Arduino IDE สามารถตามอ่านได้จากตอนที่ 1 >> Click
ในการทดสอบ ผมขออณุญาติใช้ บอร์ด DW.mini.ESP8266 ของ Deaware ในการ Demo บทความในครั้งนี้ครับ ในบอร์ดรุ่น อื่น ๆ นั้น สามารถหาอ่านข้อมูลเพิ่มเติมได้ที่แหล่งข้อมูลดีดี ข้างล่างบทความได้เลย
3. การใช้งาน Digital I/O ของ ESP8266 สามารถใช้งานคำสั่ง digitalWrite, digitalRead ได้เช่นเดียวกับการใช้งาน Digital I/O ของ Arduino โดยกำหนดหมายเลขของ Pin ที่ต้องการใช้งาน
ตัวอย่างการต่อวงจร Digital Output
ตัวอย่างโปรแกรม Digital Output
จาก Code ตัวอย่าง จะใช้ขา GPIO1 ซึ่งเป็นขาที่ใช้สื่อสารกับ Serial Port โดยตรง แบบ UART จะมี LED สีน้ำเงิน ต่ออยู่เพื่อแสดงสถานะ การส่งข้อมูล (หากใช้งานขา GPIO1 จะไม่สามารถใช้งาน Serial Port ได้) การทำงานของ โปรแกรมคือ LED บนบอร์ด DW.mini.ESP8266 จะกระพริบ ทุกๆ 1 วินาที เหมือนกับตัวอย่าง Example : Blink บน Arduino IDE
ตัวอย่างการต่อวงจร Digital Input
ตัวอย่างโปรแกรม Digital Input
จาก โปรแกรมตัวอย่าง Digital Output จะเพิ่ม ปุ่ม (botton) เข้ามาเพื่อรับค่า Digital Input ที่มี ลอจิก “0” กับ ลอจิก “1” โดยมีตัวต้านทานต่อแบบ Pull Down อยู่ จะทำให้ สวิทต์ มีสภาวะการทำงานแบบ Active HIGH การทำงานของโปรแกรม หากมีการกด ปุ่ม (botton) ไฟ LED บนบอร์ด จะติด และหากปล่อย ปุ่ม (botton) ไฟ LED บนบอร์ด ก็จะดับ
วีดีโอสาธิต การทดลอง Digital I/O ของ ESP8266
4. การใช้งาน Analog I/O (ADC) และ (PWM) ของ ESP8266 สามารถใช้งานคำสั่ง analogWrite, analogRead ได้เช่นเดียวกับการใช้งาน Analog I/O ของ Arduino เลยครับ
ตัวอย่างการต่อวงจร Analog Input (ADC)
*** ขา ADC ของ ESP8266 สามารถรับแรงดันได้สูงสุด 1V ความละเอียด 10 บิต ที่ 1023
ตัวอย่างโปรแกรม Analog Input (ADC)
จาก โปรแกรมตัวอย่าง Analog Input (ADC) เป็นการอ่านค่า ระดับแรงดันที่ตกคร่อม ตัวต้านทานเปลี่ยนค่าตามแสง (LDR) โดยต่อแบบ แบ่งแรงดันที่แหล่งจ่าย 3.3V ใช้ตัวต้านทาน (R 220กิโลโอห์ม) เป็นตัวแบ่งแรงดันไม่ให้แรงดันมาตกคร่อม (LDR) มากจนเกินไป ซึ่ง LDR มีค่าความต้านทานสูงสุด ที่ 100 กิโลโอห์ม จะมีแรงดันสูงสุดตกคร่อม (LDR) ประมาณ 1V และต่อขาสัญญาณไปเข้าขา ADC ของ ESP8266 ซึ่งขา ADC มีขื่อคือขา A0 และปริ้นค่าออกทาง Serial Port.
ตัวอย่างการต่อวงจร Analog Output (PWM) ความถี่ปกติ 1KHz
ตัวอย่างโปรแกรม Analog Output (PWM) ความถี่ปกติ 1KHz
โปรแกรม Random RGB หรือ mood lamp ซึ่งจะเปลี่ยน ค่า Duti cycle ไปเรื่อยๆ ความละเอียด 10 บิต ที่ 1023 แรงดัน 0-3.3V และมีความถี่ PWM 1KHz
วีดีโอสาธิต การทดลอง Analog I/O (ADC) และ (PWM)
5. ขา GPIO บน ESP 8266 ที่ใช้สำหรับ สือสารข้อมูล ในรูปแบบต่าง ๆ เช่น I2C, SPI และ UART เป็นต้น
บทความที่เกี่ยวข้อง
- การสื่อสารแบบ SPI กับ จอ 2.8″ TFT Adafruit
- การสื่อสารแบบ SPI กับ SD Card
- การสื่อสารแบบ SPI กับ Hardware SPI
- การสื่อสารแบบ I2c กับจอ Liquid Crystal LCD Modules
- การสื่อสารแบบ I2c กับจอOLED 128*64
ขอบคุณ แหล่งข้อมูลดีดี
- https://github.com/esp8266/Arduino
- https://github.com/deaware/dwminiesp_firmware_support
- https://github.com/nodemcu/nodemcu-firmware
ขอบคุณบอร์ด
dw.mini.ESP8266 ของ Deaware
NodeMCU ของ Seeedstudio
อ่านแล้วเข้าใจว่า GPIO บน ESP8266 สามารถปรับโหมดเป็น Analog Input (ADC) ได้ใช่มั้ยครับ รบกวนสาธิตการใช้งานได้มั้ยครับ ผมต้องการใช้รับค่าจาก Analog Sensors มากกว่า 1 ตัวครับ
เท่าที่ทราบ GPIO ของ ESP8266 ***ไม่สามารถปรับโหมดเป็น Analog Input ครับ ถ้าหากต้องการรับค่า Analog มากกว่า 1 ตัวต้องใช้ IC Analog Read มาต่อเพิ่ม ที่มีการสื่อสารแบบต่าง ๆ เช่น i2c spi เป็นต้นครับ หรือขยับไปใช้ ชิพ ESP ตัวใหญ่อย่าง ESP-WROOM-32 ซึ่งก็มีคนทำบอร์ดสำเร็จขายอยู่เหมือนกันครับผม