ESP8266 ถือเป็นโมดูล WiFi ยอดนิยมมากที่สุดในขนาดนี้ โดยมีความสามารถเป็นไมโครคอนโทรลเลอร์ที่มาพร้อมกับ WiFi ใช้ได้ทั้งในโหมด AP และ STA ในราคาโมดูลเปล่าเพียงร้อยกว่าบาทเท่านั้น ถือแม้ ESP32 จะออกมาใหม่แล้วในตอนนี้ แต่ ESP8266 ยังคงเหมาะสมที่นำมาใช้กับงานเล็ก ๆ อยู่เหมือนเดิม
ในบทความนี้จะเป็นการนำ ESP8266 มาใช้งานในโหมด AP และทดลองใช้การสื่อสารแบบเรียวทามผ่านโปรคอล TCP รวมถึงจะเป็นการทดลองใช้บอร์ด Witty Cloud สำหรับการพัฒนาอีกด้วย
รู้จักกับ RGB LED
ก่อนที่จะมาทดลองใช้งานกับ ESP8266 เราควรที่จะมาทำความรู้จักกับหลอด LED RGB กับก่อนครับ โดยหลอด RGB LED จะแบ่งได้ออกเป็น 2 ประเภท คือ
1. หลอด LED RGB ธรรมดา
สามารถผ่านรายละเอียดได้ในบทความเก่า Arduino กับการใช้งาน RGB LED
2. หลอด LED RGB แบบไอซี
เนื่องจากหลอด LED RGB แบบธรรมดานั้นต้องการขาควบคุมถึง 3 ขา ต่อ 1 ดวง ทำให่การนำมาต่อกันแล้วควบคุมให้แต่ละดวงมีสีต่างกันทำได้ยาก ทำให้ RGB LED แบบไอซีนิยมใช้งานกันมากกว่า แต่ข้อสีคือต้องมี Controller ในการวบคุม ซึ่งตัว Arduino เอง หรือ ESP8266 ก็ทำตัวเป็น Controller ได้
RGB LED แบบไอซีเบอร์ที่นิยมใช้งานกันในตอนนี้คือเบอร์ WS2812 โดยมีข้อดีคือใช้สายสัญญาณควบคุมเพียง 1 เส้น และสามารถต่อไปได้อีก โดยมีขั้ว DIO สำหรับจ่ายสัญญาณเข้า และมี DOUT สำหรับจ่ายสัญญาณออกไปให้ตัวถัดไป
WS2812 นิยมใช้งานมาก โดยมีการนำไปทำเป็นเส้นยาว ๆ นำไปติดบน PCB แบบเป็นแถวเรียง และแบบวงกลมอีกด้วย
LED RGB WS2812 แบบเส้น (ขอบคุณที่มา www.tweaktown.com)
LED RGB WS2812 แบบแถวเรียง (NeoPixel Stick)
LED RGB WS2812 แบบวงกลม (ขอบคุณที่มา www.adafruit.com)
การใช้งานโปรโตคอล TCP บน ESP8266
หากกลับไปดูในบทความเก่า การใช้งาน ESP8266 ในโหมด AP และการรับส่งข้อมูลผ่าน TCP ก็ได้ใช้โปรโตคอล TCP เช่นเดียว แต่ในบทความเก่านี้ได้ใช้วิธีเปิด Socket พอรับข้อมูลมาแล้วก็ปิด Socket ไปเลย เพื่อป้องกันอาการค้าง ซึ่ง ESP8266 ที่คุณภาพราคาจะมีปัญหานี้ในบางครั้ง (ให้สมมุติว่านำไปติดกับโดรนแล้ว ESP8266 ค้างในขณะที่โดรนกำลังบินอยู่จะเกิดอะไรขึ้น)
และเนื่องจากในบทความนี้ได้นำมาควบคุม LED RGB ซึ่งไม่มีส่วนใดที่หนีเราไปได้ กรณีที่ค้าง ก็สามารถกดปุ่น Reset ได้เลย ระบบก็กลับมาเป็นปกติ ดังนั้นในบทความนี้จะเลือกใช้การเชื่อมต่อแบบค้างไว้เลย กล่าวคือมีการเปิด Socket ค้างไว้ตลอดเวลา ทางฝั่ง ESP8266 สามารถตอบสนองต่อคำสั่งได้ทันทีโดยไม่ต้องรอการเชื่อมต่อใหม่
ในบทความเก่าหากลบบรรทัดที่ 26 ออก ก็จะสามารถใช้งานแบบเชื่อมต่อค้างไว้ได้เลย
ทดลองใช้ Witty Cloud
บอร์ด Witty Cloud ที่ทาง IOXhop พึ่งนำมาจัดจำหน่าย มีหลอด LED RGB แบบธรรมดาติดอยู่ในบอร์ดด้วย ทำให้ง่ายต่อการทดลองในครั้งนี้
ตัวหลอด LED RGB ที่ต่ออยู่บนบอร์ด Witty Cloud เป็นแบบคอมม่อนแคโทด และมีขาการต่อควบคุมแต่ละสีดังนี้
การควบคุมให้แต่ละสีมีความสว่างแตกต่างกันสามารถทำได้โดยใช้ฟังก์ชั่น analogWrite() ซึ่งเป็นฟังก์ชั่นสำหรับสร้างสัญญาณแบบ PWM โค้ดที่ได้จากในบทความเก่า เมื่อนำมารวมกันแล้วจึงเป็นไปตามด้านล่างนี้
การทดสอบสามารถทำได้เชื่อมต่อ WiFi ไปที่ SSID ชื่อ WiFi_xxx ใช้โปรแกรม hercules เชื่อมต่อไปที่ IP 192.168.4.1 และใส่พอร์ตเป็น 88 แล้วส่งข้อความในรูปแบบ
ค่าสีแดง,ค่าเขียว,ค่าสีน้ำเงิน
ผลที่ได้สีของหลอด LED จะเปลี่ยนไปตามค่าสีที่ส่งไป
ESP8266 + NeoPixel
ส่วน NeoPixel ที่ใช้ไอซีเบอร์ WS2812 ก็สามารถนำมาใช้งานได้เช่นเดียวกัน โดยจะต้องลงไลบารี่ NeoPixel ซึ่งทำได้โดยคลิกไปที่เมนู File > Include Library > Manage Libraries
ในช่องค้นหา ใส่ NeoPixel เลือก Adafruit NeoPixel แล้วกด Install ได้เลย (ในรูปได้ติดตั้งไว้แล้ว)
ก๊อบโค้ดด้านล่างไปอัพโหลด
ใช้โปรแกรม hercules ตามวิธีด้านบนในการทดสอบ
แนะนำแอพพลิเคชั่น ESPColor
ร้าน IOXhop ได้จัดทำแอพพลิเคชั่นสำหรับใช้งานร่วมกับโค้ดในบทความนี้ โดยสามารกดเชื่อมต่อ จากนั้นควบคุมสีได้เลย ตัวแอพพลิเคชั่นถูกอัพโหลดไว้บน Google Play แล้ว สามารถดาว์นโหลดได้โดยพิมพ์ในช่องค้นหาว่า EPSColor
ก่อนจะใช้งานแอพ ฯ จะต้องทำการเชื่อต่อ WiFi เข้ากับ ESP8266 เสียก่อน
เข้าไปที่แอพ ฯ กดที่ Connect แล้วหมุนวงกลม ก็จะสามารถควบคุม NeoPixel ได้ดังคลิปวีดีโอด้านล่างนี้