IoT Weekend: ควบคุมการเปิด/ปิดหลอดไฟด้วย LINE Bot ผ่าน Messaging API และ MQTT Protocol [ver. 2018] Part 3

สวัสดีกันอีกครั้งครับทุกท่าน สืบเนื่องจากตอนที่ 1 และตอนที่ 2 ที่โมได้นำทุกท่านเข้ามาสู่โลกของ Internet of Things โดยมีการนำ Messaging API ของทาง LINE เข้ามาประยุกต์ใช้ ในบทความนี้นะครับ โมจะพูดถึงการสร้าง IoT device ง่ายๆ จะพัฒนาบนสิ่งที่เรียกว่า Arduino ซึ่งจะเป็นตัวที่รับข้อความ (subscriber) จาก Messageing API และ MQTT Broker ที่โมได้พาทุกท่านสร้างในบทความที่แล้ว โดยจะพัฒนาด้วยภาษา C เพื่อนำไปควบคุมวงจร เปิด/ปิดหลอดไฟ

จากซีรีย์ของ Iot Weekend ที่ถูกแบ่งออกเป็น 3 Part เพื่อจะได้คลอบคลุมการทำงานทุกอย่าง โดยเริ่มจาก การตั้ง MQTT Server บน บน Heroku, ต่อด้วยการ สร้าง Bot ด้วย LINE DevTrail Account และจบท้ายด้วย สร้าง IoT Device กัน

และแล้วเราก็มาถึง Part ที่ 3 เราจะมาสร้าง IoT Device กัน มาสนุกกัน!!!

KeyWording จะได้พูดถึงในบทความนี้

Internet of Things, Arduino, ESP32, Microcontroller, GPIO, Basic Electronics, Development board, Embedded System, C Programming

อะไรคืออินเตอร์เน็ตของสรรพสิ่ง? (Internet of Things)

คร่าวๆ คือ เครือข่ายของวัตถุ อุปกรณ์ พาหนะ สิ่งปลูกสร้าง และสิ่งของอื่นๆ ที่มีวงจรอิเล็กทรอนิก ซอฟต์แวร์ เซ็นเซอร์ และการเชื่อมต่อกับสมองกลฝังตัวอยู่ และทำให้วัตถุเหล่านั้นสามารถเก็บบันทึกและแลกเปลี่ยนข้อมูลได้ อินเทอร์เน็ตของสรรพสิ่งทำให้วัตถุสามารถรับรู้สภาพแวดล้อมและถูกควบคุมได้จากระยะไกลผ่านโครงสร้างพื้นฐานเครือข่ายที่มีอยู่แล้ว (WiFi, Cellular)ทำให้เราสามารถผสานโลกทางกายภาพกับระบบคอมพิวเตอร์ได้ใกล้ชิดกันมากขึ้น

ตัวอย่างของ Internet of Things

ตัวอย่างการนำ Internet ไปติดกับสรรพสิ่งแล้วเกิดประโยชน์ที่น่าสนใจ เช่น

Smart Home — ลองคิดดูว่าถ้าเรามีอินเตอร์เน็ตอยู่ในรถและเครื่องใช้ไฟต่างๆทั่วบ้าน พอ GPS ในรถใกล้ถึงบ้านก็ส่งข้อมูลผ่านอินเตอร์เน็ตไปบอกประตูหน้าบ้านให้ปลดล็อกอัตโนมัติ หรือถ้าเราเดินออกไปจากบ้านแล้ว โทรศัพท์มือถือของเราก็ส่งข้อมูลไปบอกให้ใส่เปิดระบบเตือนภัย หรือส่งข้อมูลความเคลื่อนไหวในบ้านมาท่ีมือถือเราได้

ยังมีไอเดียอีกมากมายนับไม่ถ้วน ที่จะเราจะสามารถสร้างประโยชน์จากการที่สิ่งต่างๆเชื่อมต่อกันผ่านอินเตอร์เน็ตได้ มาถึงตรงนี้ น่าจะเข้าใจถึงเหตุผลที่เราควรเชื่อมต่อสิ่งต่างๆเข้าหากันด้วย Internet แล้วนะครับ

เครื่องมือที่ใช้ในการพัฒนา Internet of Things

โดยบอร์ดพัฒนาที่นิยมนำมาใช้ก็ได้แก่ Arduino ESP8266 (รู้จักกันดี ในชื่อ NodeMCU) หรือ ESP32

Nano32 Development Board

ทุกท่านคงสงสัย เจ้า Arduino คืออะไร????

มารู้จักกับ Arduino กันเถอะ

Arduino คือ โครงการที่นำชิปวงจรควบคุมขนาดเล็ก (Microcontroller) ทางด้านอิเล็กทรอนิกส์ (มันคือสมองกลนั่นเอง) แบบต่างๆ มาสร้างบอร์ดสำหรับการพัฒนาฮาร์แวร์ (Hardware) เพื่อใช้ร่วมกันกับโปรแกรม (Software) ซึ่งถูกพัฒนาขึ้นบนภาษา C เจ้าบอร์ดพัฒนาตัวนี้ มีความสามารถมากกกก ขึ้นอยู่กับว่าเราจะนำมันไป สั่งงาน/ใช้งานในรูปแบบไหน ขึ้นอยู่กับการเขียนโปรแกรมของเรา

Fritzing

เรามาต่อวงจรทางไฟฟ้าและอิเล็กทรอนิกส์ง่ายๆกันดีกว่า

อุปกรณ์ที่ใช้ในครั้งนี้นะครับ

  1. Hardware
    - ESP32 / ESP8266
    - ตัวต้านทาน 330 ohm
    - หลอด LED สีแดง
  2. Arduino IDE (Download: https://www.arduino.cc/en/Main/Software)
  3. เครื่องคอมพร้อมสาย USB ไว้สำหรับ Upload Code ที่เราเขียน

เรามาเริ่มกันเลยดีกว่า!!!

ขั้นตอนแรก ดาว์นโหลดและติดตั้ง Arduino IDE ลงบนเครื่องคอมของเราก่อน: เข้าไปที่ arduino.cc

เลือก Software แล้วเลื่อนลงไป เลือกระบบปฏิบัติการของเครื่องคอม เพื่อทำการดาว์นโหลด

พอโหลดและติดตั้งเสร็จ เราได้หน้าตาแบบนี้

สิ่งที่เห็นอยู่บนหน้าจอของโปรแกรมก็คือพื้นที่ในการเขียนโค้ดหรือเรียกว่า Sketch โดยจะมี สองฟังชั่นหลักๆ ได้แก่ void setup() กับ void loop()

  • setup(): ฟังชั่นที่เอาไว้ประกาศค่าตัวแปรต่าง ขาดิจิตอลที่เราจะทำงานด้วย และการเรียกใช้ libraries ต่างที่จะใช้ในโปรแกรม ซึ่งจะกระทำเพียงครั้งเดียว ตอน เริ่มต้น Program หรือ Reset
  • loop(): Code อะไรก็ตามที่เขียนไว้ในฟังชั่นนี้ จะถูกกระทำซ้ำๆ จนกว่าจะมีการสั่งหยุดการทำงาน หรือ Reset

โมจะใช้ บอร์ด ESP32 ที่ชื่อว่า nano32 มาเป็นบอร์ดหลักในการพัฒนา

ก่อนที่จะเริ่มต้นโปแกรม เจ้า ESP32 ได้นั้น ต้องลง Arduino Cor for ESP32 กันก่อน

  • เมื่อทำการ Download เรียบร้อยให้เข้าไปที่
    ~.\Documents\Arduino\hardware\espressif\esp32 กรณี ถ้าไม่มี folder ตั้งแต่ espressif ก็สามารถสร้าง folder ขึ้นมาได้ไปจนถึง folder esp32 จากนั้นทำการ Extract ไฟล์ arduino-esp32-master
  • Copy ข้อมูลภายใน folder arduino-esp32-master ไปวางใน ~.\Documents\Arduino\hardware\espressif\esp32
  • จากนั้นให้เข้าไปที่ ~.\Documents\Arduino\hardware\espressif\esp32\tools ดับเบิ้ลคลิ้กที่ไฟล์ get.py เพื่อเริ่มทำการติดตั้ง Library ESP32 ให้รอจนเสร็จแล้วโปรแกรมจะทำการปิดเอง
  • ทำการเปิดโปรแกรม Arduino IDE เข้าไปที่ Tools/Board/ ลองเช็คดูว่า Arduino IDE รองรับการใช้งานร่วมกับ ESP32 แล้วหรือไม่
    ถ้าเจอหัวข้อ ESP32 Arduino แสดงว่าสามารถใช้งานใด้ ESP32 ได้แล้ว
บอร์ดพัฒนาต่างๆที่ใช้ชิป ESP32

เมื่อติดตั้ง Arduino Core เสร็จเรียบร้อย สิ่งต่อมาที่ทำคือ ไปโหลด Profile กับ Libaries ของ DevBoard ที่จะใช้มาติดตั้ง

โดยเข้าไปที่ Tools/Board/Board Manager… ก็จะได้หน้าต่างอะไรประมาณนี้ขึ้นมา

กดติดตั้ง Libraries เข้าไปที่ Sketch/Include Library/Manage Libraries…

เรามาทดสอบว่าบอร์ดที่เรามี ทำงานได้ไหม?

ในโลกของ Hardware เนี่ย ถ้าตอนเราอยากจะรู้ว่า อุปกรณ์ที่เราซื้อมาเนี่ย โดยเฉพาะพวกบอร์ดพัฒนา ว่าทำงานได้หรือไม่ เราจะมีคำสั่งเบื้องต้นที่เรียกว่า Blink หรือไฟกระพริบ เปรียบเสมือน “Hello World” ในทางโลกของ Software

โดยเข้าไปที่ Files/Examples/01.Basics/Blink

โค้ดที่ได้ก็จะหน้าตาประมาณนี้

Q: อะไรคือ LED_BUILTIN?
A: LED_BUILTIN ในที่นี้คือหลอดไฟ LED ที่ฝังอยู่บนตัวบอร์ดเอง ซึ่งจะแตกต่างกันออกไปตามการออกแบบของผู้ผลิต เปรียบเสมือนค่าเริ่มต้น

เสียบสาย USB เข้าไปที่บอร์ด แล้วเข้าไป check ว่าเจ้า IDE เห็นบอร์ดหรือไม่ แล้วกดปุ่ม Upload

พอ Upload เสร็จแล้วก็จะปรากฏดังภาพ หลอดไฟของเราก็จะกระพริบ เป็นการบอกว่าบอร์ดของเราสามารถทำงานได้อย่างปกติ


ต่อไปเรามาเพิ่มความสามารถให้บอร์ดเราดีกว่า!!!

ตามโครงสร้างที่ได้วางเอาไว้

ขั้นต่อไปคือการ เขียนให้เจ้าอุกปรณ์ของเรา ไปรอรับฟังข้อมูลที่ถูกส่งจาก ChatBot ของเราเข้าไปยัง MQTT Broker (Subscriber)

เริ่มจากวงจรง่ายๆกันก่อน
ต่อ ตัวต้านทาน 330 ohm เข้ากับขา GPIO หลายเลข 2 (ย่อมาจาก General Purpose Input Output)

ต่อตัวต้านทานเข้ากับขั้วบวก (ขายาว) ของ LED

สุดท้าย ต่อขาขั้วลบ (ขาสั้น) ไปยัง GND ของ ESP32 เสร็จแล้ว!

หลังจากที่เราได้วงจรเบื้องต้นดังกล่าวแล้ว เราก็จะมาทำการเขียนโค้ด

  • ติดตัง Libraries ที่จำเป็นต่อการพัฒนา เช่น WiFi และ PubSubClient
Wifi library
PubSubClient library

เมื่อติดตั้ง Libraries ที่จำเป็นต่อการพัฒนา เช่น WiFi และ PubSubClient แล้ว เรามาเริ่มเขียนโค้คที่จะใช้ควบคุมกัน เรามาทำความเข้าใจกับ Code จุดสำคัญๆ

  • pinMode(2, OUTPUT): บอกอุปกรณ์ให้ ใช้ GPIO ขาหมายเลข 2 ให้เป็นตัวควบคุม
  • Wifi.begin(ssid, pasword): ให้อุปกรณ์ของเราไปเชื่อมต่อกับ internet ผ่านการเชื่อมต่อแบบ wifi
  • Client.setServer(mqtt_server, mqtt_port): เมื่อต่อ Wifi ได้แล้ว อุปกรณ์ของเราไปเชื่อมต่อกับ MQQTT Broker
  • Client.subscribe({topic}): ให้อุปกรณ์ของเราไปรับฟังข้อความที่ topic นี้ ใน mqtt server
  • digitalWrite(2, (msg == “LEDON” ? HIGH : LOW)) : ในส่วนนี้เป็นส่วน Logic ที่ทำการสั่งว่า เมื่อข้อความที่ไปรับมา ตรงกับที่เราตั้งไหวไหม ถ้าตรงให้เปิดหลอกไฟ แต่ถ้าไม่ตรงให้ปิดไฟ
Base Code

อย่าลืม เปลี่ยนค่าต่างๆ เช่น wifi ssid และ password ให้ตรงกับ Router ของทุกท่าน และใส่ค่าของ MQTT Brokerโมได้นำพาทุกท่านตั้งในบทความที่ 1 ให้ตรงกับที่เราตั้งไว้ใน MQTT Broker นะครับ (mqtt_server, mqtt_port, mqtt_user, mqtt_password และ topic)

set ค่าต่างๆของ Board ดังนี้

กด Upload Code

เมื่ออัพโหลดเสร็จเรียบร้อย เริ่มทดสอบกันได้เลย!!!

แค่นี้ทุกท่านก็จะได้ LINE ChatBot สามารถควบคุมการเปิดปิดหลอดไฟได้แล้ว เป็น IoT ง่ายๆที่ใครๆก็สามารถทำได้ และสามารถนำไปต่อยอด ควบคุมสิ่งต่างๆ

จบแล้ว ~ หวังว่าบทความนี้คงทำให้หลายๆคนเข้าใจวิธีการสร้าง LINE ChatBot เบื้องต้นเพื่อใช้ในการควบคุม IoT Device นะครับ

ย้อนกลับไปดูบทความที่แล้ว

Part 1 นำพาทุกท่านมาสร้าง MQTT Broker

Part 2 นำพาทุกท่านมาสร้าง LINE Bot ด้วย ภาษา Ruby