ในบทนี้จะเป็นตัวอย่างของการใช้ ESP32 สร้างโครงงานต่าง ๆ เพื่อนำโครงงานเหล่านี้ไปพัฒนาต่อยอดเพื่อใช้งานจริงต่อไป ทั้งนี้โครงงานทั้งหมดในบทนี้ จะใช้พื้นฐานที่ได้เรียนรู้ในบทต่าง ๆ มาประยุกต์ใช้อุปกรณ์ต่าง ๆ และโค้ดฟังก์ชันต่าง ๆ ร่วมกันเพื่อสร้างโครงงานขึ้นมา ในแต่ละโครงงานจะมีการต่อวงจรระหว่างอุปกรณ์กับ ESP32 ที่แตกต่างกัน เนื่องจากแต่ละอุปกรณ์นั้นใช้บัส หรือวิธีการติดต่อสื่อสารที่แตกต่างกัน
ในบางโครงงานจะมีการใช้อุปกรณ์ใหม่ ๆ ที่ไม่มีในบทที่ผ่านมา ผู้เขียนจะขออธิบายการใช้งานอุปกรณ์เหล่านั้นคร่าว ๆ เพื่อให้ผู้อ่านได้เข้าใจในเบื้องต้น หากต้องการศึกษารายละเอียดของอุปกรณ์ต่าง ๆ เหล่านั้นสามารถค้นหารายละเอียดได้จากเว็บไซต์ของผู้ผลิต หรือจากเว็บไซต์สอนใช้งานต่าง ๆ ก็จะมีรายละเอียดการใช้งานที่ครบกว่า การนำอุปกรณ์เหล่านั้นมาใช้ในบทนี้จะเน้นเพื่อสร้างโครงงานออกมา ไม่ได้เน้นทำความเข้าใจในอุปกรณ์ต่อร่วมเหล่านั้นมากนัก
LINE เป็นแอพพลิเคชั่นแชทยอดนิยมในประเทศไทย ปัจจุบันเราได้เห็นการใช้งาน LINE ในรูปแบบต่าง ๆ มากขึ้น ทั้งการขายสินค้า การชำระเงิน การพูดคุยกันในหน่วยงาน ในโครงงานนี้จึงมุ่งเป้าหมายไปที่การใช้แอพพลิเคชั่น LINE เป็นส่วนหนึ่งของระบบ IoT โดยใช้ ESP32 เป็นแกนหลัก
ส่วนของ API หรือส่วนสำหรับนักพัฒนาได้มีการเปิดส่วนของ LINE Notify ขึ้นมาให้ใช้งานเพื่อให้นักพัฒนาได้ส่งการแจ้งเตือน ข้อความต่าง ๆ ผ่าน LINE ได้ง่ายขึ้น
สำหรับตัว LINE Notify นั้น ออกแบบมาเพื่อใช้สำหรับการแจ้งเตือนต่าง ๆ โดยเฉพาะ สามารถส่งข้อความเพื่อแจ้งเตือนไปยังกลุ่ม หรือบุคคลก็ได้ ทั้งนี้ LINE Notify จะมีข้อจำกัดการใช้งานอยู่ที่ จะสามารถใช้งานได้กับบุคคลเดียวเท่านั้น หรือกลุ่มเดียวเท่านั้น การติดต่อกับ LINE จะใช้โปรโตคอล HTTPS ในการติดต่อ และใช้สิ่งที่เรียกว่า Token เป็นรหัสผ่านเข้าไปขอส่งข้อความเข้า LINE ทั้งนี้ตัว LINE Notify จะแยกออกจากส่วน API อื่นของ LINE อย่างเด็ดขาด หมายความว่าการใช้งาน LINE Notify สามารถใช้งานได้ทั้งผู้ที่ไม่เคยใช้ API ของ LINE มาก่อน และผู้ที่เคยใช้ API ส่วนอื่น ๆ ของ LINE ก็สามารถใช้ LINE Notify ได้เช่นเดียวกัน
วงจรไฟฟ้า – การต่อวงจรจะเป็นวงจรเดียวกับที่ใช้ในหัวข้อ การใช้งาน PIR Motion Sensor เนื่องจากอุปกรณ์ที่ใช้โครงงานไม่ได้มีอะไรเพิ่มเติมจึงสามารถนำวงจรที่ใช้ทดลองมาใช้ทำโครงงานได้เลย ซึ่งวงจรมีดังนี้
เริ่มใช้งาน LINE Notify – การจะใช้งาน LINE Notify ได้นั้น จะต้องเพิ่มตัว LINE Notify เป็นเพื่อนก่อน โดยแสกน QR Code ด้านล่างนี้
จากนั้นเข้าไปขอ Token ที่ลิงค์ https://notify-bot.line.me/my/ เข้าสู่ระบบด้วยบัญชีของ LINE ให้เรียบร้อย
เมื่อเข้าสู่ระบบเรียบร้อยแล้ว ให้เข้าไปเลื่อนลงมาด้านล่างตรงคำว่า ออก Access Token (สำหรับผู้พัฒนา) ให้คลิกที่ปุ่ม ออก Token
ในช่องชื่อ Token ที่ต้องการ ชื่อนี้จะนำไปใช้เมื่อมีการส่งข้อความ เช่น กรอกไว้ว่า ESP32 ข้อความที่ได้รับจะเป็น ESP32:<ข้อความ> ส่วนช่องถัดมาให้เลือกว่าจะส่งข้อความแจ้งเตือนไปยังกลุ่ม หรือส่งให้เราคนเดียว เมื่อกรอกข้อมูลครบแล้ว ให้คลิกปุ่ม ออก Token
จากนั้น Token จะปรากฏขึ้นมา ให้เก็บ Token นี้ไว้ให้ดีเพราะจะต้องนำมาใส่ในโค้ดโปรแกรมภายหลัง
ในส่วนของ LINE จะมีข้อความแจ้งเตือนทุกครั้งที่ออก Token ใหม่ ทำให้สามารถมั่นใจเรื่องความปลอดภัยได้ระดับหนึ่ง
โค้ดโปรแกรม – เข้าไปคัดลอกโค้ดโปรแกรมมาอัพโหลดได้ที่ https://goo.gl/Axgzx4 แก้ไขส่วนของ WIFI_STA_NAME และ WIFI_STA_PASS ให้ถูกต้อง ส่วน LINE_TOKEN ให้แก้เป็น Token ที่ได้รับมา แล้วอัพโหลดลงบอร์ด NodeMCU-32S ได้เลย
หลังจากได้ทำตามขั้นข้างต้นจนครบแล้ว เมื่อ ESP32 สามารถเชื่อมต่อกับ WiFi ได้แล้ว การแจ้งเตือนจะเริ่มขึ้นทันที เมื่อสามารถตรวจจับการเคลื่อนไหวได้ในระยะตรวจจับ ที่ LINE จะมีข้อความส่งมาแจ้งเตือนให้ทราบทันที
ในโครงงานนี้จะเป็นการนำ MQTT มาเป็นสื่อการในการสื่อสาร และใช้แอพพลิเคชั่น MQTT Dash ในการสร้างหน้าควบคุมความสว่างของหลอดไฟ โดยหลอดไฟที่จะใช้ในโครงงานนี้เป็นหลอดใส้ธรรมดา และใช้ RobotDyn AC Light Dimmer Module เป็นตัวช่วยควบคุมความสว่างของหลอดไฟ
วงจรไฟฟ้า – วงจรที่ใช้จะเป็นแบบเดียวกับในหัวข้อ การควบคุมอุปกรณ์แบบขดลวดความร้อน ซึ่งสามารถต่อได้ดังนี้
เตรียม MQTT ให้พร้อม – การเตรียม MQTT จะต้องเตรียมส่วนของผู้ใช้ที่มีสิทธิ์เข้าถึงเส้นทางที่ต้องการ และเตรียมผู้ใช้สำหรับแอพ ฯ MQTT Dash ที่มีสิทธิ์เข้าถึงเส้นทางนั้นด้วย เรื่องของการใช้งาน MQTT สามารถย้อนกลับไปอ่านได้ที่หัวข้อ การเชื่อมต่อกับ MQTT
ตั้งค่าแอพ MQTT Dash – หลังจากสร้างการเชื่อมต่อในแอพ ฯ MQTT Dash แล้ว ให้สร้างวัตถุขึ้นมาใหม่ โดยเลือกเป็นชนิด Range/progress
ตรงส่วนของ Name สามารถตั้งชื่อวัตถุได้ตามที่ต้องการ ส่วนของ Topic ให้ตั้งไปในเส้นทางที่ผู้ใช้นี้ (ผู้ใช้ที่ใช้เชื่อมต่อในแอพ) มีสิทธิ์เข้าถึงได้ จากนั้นปุ่มรูปแผ่นดิสก์ได้เลย
ผลที่ได้คือจะมีวัตถุเพิ่มขึ้นมา
เมื่อกดที่กลางวัตถุ จะมีให้เลือกค่าที่ต้องการส่งไปในเส้นทางที่กำหนดไว้ สามารถใช้นิ้วลากเพื่อกำหนดค่าได้เลย จากนั้นกดปุ่ม SET เพื่อส่งค่า
หลังกดปุ่ม SET จะกลับมาหน้าหลักอัตโนมัติ และแสดงผลค่าที่ส่งไปล่าสุด
เมื่อเข้าไปดูในหน้า Websocket UI จะพบว่าสามารถส่งค่าที่ต้องการไปให้ได้แล้ว
โค้ดโปรแกรม – เข้าไปคัดลอกโค้ดโปรแกรมได้ที่ https://goo.gl/4CfE7N การแก้ไขจะแบ่งเป็นส่วน ๆ ดังนี้
หลังจากแก้ไขครบแล้ว สามารถอัพโหลดลงบอร์ด NodeMCU-32S ได้เลย
หลังจากที่ ESP32 สามารถเชื่อมต่อ WiFi ได้แล้ว หลอดไฟจะดับอยู่ เมื่อเข้าไปปรับค่าความสว่างในแอพ ฯ MQTT Dash จะพบว่าสามารถปรับค่าความสว่างได้ตามต้องการ
โครงงานนี้จะเป็นการประยุกต์ใช้ส่วนของโปรโตคอล HTTP ที่ได้เรียนรู้ไปแล้วในบทที่ผ่าน ๆ มา เพื่อติดต่อกับ Twitter ผ่าน IFTTT ตัว IFTTT นั้น เปรียบเสมือนกับเซิร์ฟเวอร์ตัวกลางที่คั่นระหว่างโค้ดโปรแกรมของเรา กับ API ของ Twitter เนื่องจากตัว API ของ Twitter มีความซับซ้อนในการใช้งานค่อนข้างมาก การใช้งานผ่าน ESP32 ไม่มีไลบรารี่ออกมาลองรับโดยตรง ดังนั้นการใช้ IFTTT มาเป็นตัวกลางที่จะรับข้อมูลจาก ESP32 ไปยัง Twitter ก็จะทำให้เราเขียนโค้ดได้ง่ายขึ้นมาก
รูปที่ 15.1 ผังการทำงานโดยรวมเมื่อใช้ IFTTT มาเกี่ยวข้อง
ท่านผู้อ่านอาจจะเคยเห็นแล้วว่า ใน Twitter จะมีผู้ใช้ที่ถูกสร้างขึ้นมาโดยเฉพาะเพื่อทวีตเวลา ในทุก ๆ ช่วงเวลาที่กำหนดไว้ โดยผู้ใช้เหล่านั้นถูกสร้างขึ้นมาโดยมนุษย์ แต่ทวีตเวลาด้วยบอท การทวีตเวลาแบบอัตโนมัติทุก ๆ 1 ชั่วโมง จะเป็นจุดประสงค์หลักของโครงงานนี้
รูปที่ 15.2 ตัวอย่างบัญชีทวีตเตอร์ที่ทวีตข้อความทุก ๆ 1 ชั่วโมง
เตรียมพร้อม IFTTTT – เข้าไปที่หน้าเว็บไซต์ https://ifttt.com/ จากนั้นคลิกที่ปุ่ม Sing in เพื่อเตรียมเข้าสู่ระบบ
จากนั้นเลือกว่าจะเข้าสู่ระบบของ IFTTT ด้วยบัญชีใด ระหว่าง Google หรือ Facebook เลือกกดปุ่มได้ตามที่ต้องการ จากนั้นทำตามขั้นตอนของการเข้าสู่ระบบนั้น ๆ ตามที่ได้เลือก
หลังจากเข้าสู่ระบบเรียบร้อยแล้ว ให้เข้าไปที่หน้าเว็บไซต์ https://goo.gl/iKyNCz แล้วคลิกที่ปุ่ม Turn ON
จากนั้นจะเข้ามาหน้าของยืนยันให้สิทธิ์เข้าถึงส่วนของ Twitter ให้กดปุ่ม Ok เพื่อยอมรับ
ระบบจะพามาที่เว็บไซต์ของ Twitter (กรณียังไม่ได้เข้าสู่ระบบ Twitter จะมีให้เข้าสู่ระบบก่อน) เพื่อขอใช้สิทธิ์ของ IFTTT เข้าใช้งานบางส่วนของบัญชีทวีตเตอร์นี้ ให้กดปุ่ม อนุญาตแอพ
จะแสดงข้อความแจ้งผลการยอมรับให้ IFTTT เข้ามาใช้งานได้ แล้วระบบจะกลับไปที่เว็บไซต์ของ IFTTT
หลังจากระบบพากลับมาหน้าของ IFTTT แล้ว ให้เลือนลงมาจนพบหัวข้อ Receive a web request ในช่อง Type your event name ให้กรอก post_tweet
เลื่อนลงมาที่หัวข้อ Post a tweet ที่ช่อง Tweet text ให้ลบข้อความออกทั้งหมด แล้วกรอกเป็น {{Value1}} จากนั้นกดปุ่ม Save เพื่อบันทึก
จากนั้นระบบจะกลับมาที่หน้าจัดการ ให้เข้าไปที่หน้าเว็บไซต์ https://goo.gl/KOZL52 จากนั้นดูในส่วนของ URL: ให้เก็บชุดข้อความด้านหลังสุดไว้ใส่ในโค้ด ซึ่งผู้เขียนขอเรียกว่า Token (ในรูปคือส่วนที่ทำแถบสีเหลือง)
โค้ดโปรแกรม – เข้าไปคัดลอกโค้ดโปรแกรมได้ที่ https://goo.gl/RDS1r6 แก้ไขส่วนของ WIFI_STA_NAME และ WIFI_STA_PASS ให้ถูกต้อง แก้ไข IFTTT_TOKEN ให้เป็น Token ที่ได้จาก IFTTT จากนั้นนำมาอัพโหลดลองบอร์ด NodeMCU-32S ได้เลย
ตัว ESP32 จะดึงเวลามาจาก NTP Server ในครั้งแรก จากนั้นนับเวลาต่อโดยใช้ RTC ภายใน เมื่อเวลาผ่านไปครบ 1 ชั่วโมง จะมีการส่งข้อความไปที่ IFTTT เพื่อช่วยส่งข้อมูลไปยัง Twitter ผลที่ได้คือมีข้อความปรากฏบน Twitter ทุก ๆ 1 ชั่วโมง
รูปที่ 15.3 ผลลัพธ์ที่ได้คือมีการทวีตข้อความทุก ๆ 1 ชั่วโมง
โครงงานนี้จะเป็นการประยุกต์ใช้ ESP32 จำนวน 2 ตัว เข้ามาคุยกัน โดยกำหนดให้ตัว EPS32 ที่ทำหน้าที่เป็นตัวรอรับการกดปุ่มให้ใช้ WiFi ในโหมด STA แทนด้วยชื่อ Slave และกำหนดให้ตัว ESP32 ที่ทำหน้าที่ส่งเสียง อยู่ในโหมด AP แทนด้วยชื่อ Master ให้ตัวที่เป็นปุ่มนั้นเข้ามาเชื่อมต่อ และรับ – ส่งข้อมูลกัน
การติดต่อสื่อสารระหว่างกันจะใช้โปรโตคอล TCP โดยตัว Slave จะทำหน้าที่เป็น Client เพื่อไปเชื่อมกับตัว Master ซึ่งทำเป็น Server เมื่อมีการกดปุ่มที่ตัว Slave จะมีการเชื่อมต่อกับ Master และส่งข้อมูลไปทันที
รูปที่ 15.4 ผังการทำโดยรวมของออดไร้สาย
วงจรไฟฟ้า – ต่อวงจรทั้งตัว Slave และ Master ได้ตามลำดับดังนี้
ให้สังเกตว่าที่ตัว Slave จะนำขา EN หรือขา RESET มาใช้ เนื่องจากในโปรแกรมจะไปใช้ Sleep Mode เพื่อประหยัดพลังงาน การใช้ Sleep Mode จะสามารถปลุกให้ ESP32 กลับมาทำงานได้โดยกดปุ่ม Reset และปุ่มที่ต่อเป็นวงจรเพิ่มขึ้นมาคือปุ่ม Reset นั่นเอง ส่วนที่ฝั่ง Master จะต่อบัสเซอร์แบบพาสซีฟไว้ที่ขา GPIO27
โค้ดโปรแกรม – จะแยกออกได้เป็น 2 ฝั่งดังนี้
เมื่อมีการกดปุ่มที่ Slave จะมีเสียงออกมาจากบัสเซอร์ที่ฝั่ง Master แต่จะมีหน่วงเวลาประมาณ 1 วินาทีเนื่องจากต้องรอตัว Master ตอบรับการเชื่อมต่อ แล้วจึงจะเริ่มการส่งข้อมูลผ่าน TCP ได้
ในบทนี้จะเป็นการนำ ESP32 มาทำเป็นโครงงานขนาดเล็ก ที่จะช่วยให้ผู้อ่านสามารถเข้าใจการใช้งาน ESP32 มากยิ่งขึ้น ทั้งนี้โครงงานต่าง ๆ อาจจะมีโค้ดที่อัพเดท และแก้ไขไปตามช่วงเวลา ผู้เขียนได้อาศัย GitHub เป็นเว็บโฮสสำหรับจัดเก็บโค้ดของโครงงานต่าง ๆ ผู้อ่านสามารถดูประวัติการแก้ไขโค้ดได้จากในหน้าเว็บไซต์ของ GitHub เอง