Week02 - Arduino IoTs – MQTT and Anto Interface

    สำหรับ week 2 นี้ เราจะมาทำการทดลองเกี่ยวกับการใช้งาน Anto และ Mqtt-cloud เป็น broker กันน่ะครับเราต้องมาทำความเข้าใจกันก่อนว่า IOT และ broker มันเกี่ยวข้องกันอย่างไร แล้ว Anto กับ Mqtt-cloud เนี่ยมันใช้ทำอะไรได้บ้าง ?

    IOT และ MQTT  มันคืออะไร?

    Message Queuing Telemetry Transport (MQTT) เป็นProtocol ที่ออกแบบมาเพื่อการเชื่อมต่อแบบ M2M (machine-to-machine) 
-    คืออุปกรณ์กับอุปกรณ์ สนับสนุนเทคโนโลยี iot (Internet of Things)
-    คือเทคโนโลยีที่อินเทอร์เน็ตเชื่อมต่อกับอุปกรณ์ต่าง ๆ เช่น โทรศัพท์มือถือ รถยนต์ โทรทัศน์ ตู้เย็น เข้ากับอินเทอร์เน็ตทำให้สามารถเชื่อมโยงสื่อสารกับอุปกรณ์ต่าง ๆ ได้ โดยผ่านเครือข่ายอินเทอร์เน็ต ซึ่งจะทำให้มนุษย์สามารถ ควบคุมอุปกรณ์ต่าง ๆ จากที่อื่นได้ เช่นการสั่งปิดเปิดไฟในบ้านจากที่อื่น ๆ

    เนื่องจากโปรโตคอลตัวนี้มีน้ำหนักเบา ออกแบบมาเพื่อใช้งานกับอุปกรณ์อิเล็กทรอนิกส์ขนาดเล็ก การรับส่งข้อมูลในเครื่อข่ายที่มีขนาดเล็ก แบนร์วิธต่ำ ใช้หลักการแบบ publisher / subscriber คล้ายกับหลักการที่ใช้ใน Web Service ที่ต้องใช้ Web Server เป็นตัวกลางระหว่างคอมพิวเตอร์ของผู้ใช้ แต่ MQTT จะใช้ตัวกลางที่เรียกว่า Broker เพื่อทาหน้าที่ จัดการคิว รับ - ส่ง ข้อมูลระหว่างอุปกรณ์ และทั้งในส่วนที่เป็น Publisher และ Subscriberปัจจุบันเทคโนโลยีที่กาลังมาแรงสาหรับนักพัฒนาด้าน Embedded

    IoT มีวิธีการทำงานอย่างไร ? 
        
องค์ประกอบหลักของ IoT จะมี 3 ส่วนคือ Broker, Publisher และ Subscriber. ซึ่งการรับและส่งข้อมูลนั้นมันจะส่งข้อมูลไปมาหากันนั้นจะส่งผ่านตัวกลางนั้นก็คือ Broker Server โดยตัวส่งนี้จะเรียกว่า Publisher ส่งข้อมูลขึ้นไปยัง Broker พร้อมระบุหัวข้อ (Topic) ที่ต้องการส่งข้อออกไป จากนั้นตัวรับซึ่งเรียกว่า Subscriber ถ้าหากตัวรับต้องการรับข้อมูลจากตัวส่งจะต้องทาการ Subscribe หัวข้อ Topic ของ Publisher นั้นๆ ผ่าน Broker เช่นกัน ลองดูความสัมพันธ์ ตามรูปน่ะครับ 


Server จะมีอยู่ด้วยกันหลายค่ายครับสาหรับที่ลิสมาด้านล่างนี้ครับ

Open Source MQTT Broker Server
 • Mosquitto 
• RSMB 
• ActiveMQ 
• Apollo
 • Moquette
 • Mosca
 • RabbitMQ

MQTT Client 
• Paho 
• Xenqtt 
• mqtt.js 
• node_mqtt_client
 • Ascoltatori 
• Arduino MQTT Client

Anto

Anto เป็นสื่อกลางในการสื่อสาร Anto ตั้งเซิร์ฟเวอร์ให้คุณใช้บริการฟรี เป็นเสมือนตัวกลางในการสื่อสารระหว่างสิ่งต่างๆบนโลกอินเตอร์เน็ตเช่น คุณต้องการสั่งงานบอร์ดไมโครคอลโทรลเลอร์ผ่านอินเตอร์เน็ตโดยใช้โทรศัพท์มือถือของคุณ เป็นต้น ซึ่งปัจจุบันระบบเรารองรับการติดต่อสื่อสารผ่าน HTTP, HTTPS, MQTT, MQTTS, Websocket ทำให้: ทีมของคุณไม่ต้องเสียเวลาในการติดตั้งและตั้งค่าเซิร์ฟเวอร์ รวมถึงคอยมาดูแลรักษาระบบ

Anto สร้าง Library/API ที่ใช้งานง่าย Anto สร้าง Library ในการเขียนโปรแกรมและสร้าง API ให้นักพัฒนาสามารถเข้าถึงใช้งานและพัฒนาต่อยอดได้อย่างง่ายดาย ยกตัวอย่าง คุณสามารถส่งค่าไปยัง server โดยใช้เพียงแค่หนึ่งคำสั่งเช่น Anto.DigitalUpdate(“led”,true); ทั้งนี้เพื่อความง่ายในการเขียนโปรแกรม ซึ่งปัจจุบันเราได้ทำ Library รองรับ ESP8266 (Nodemcu), Arudino แล้ว และกำลังพัฒนาเพื่อให้รองรับ Rasserby Pi และอื่นๆ ทำให้: ทีมของคุณพัฒนาได้อย่างรวดเร็วมากขึ้น ใช้เวลากับส่วนอื่นได้มากขึ้นเช่น การทำฮาร์ดแวร์-กลไก การออกแบบผลิตภัณฑ์ เรื่องติดต่อธุรกิจอื่น เป็นต้นครับ 

ขั้นตอนเตรียมพร้อม
1. ติดตั้ง Arduino IDE ที่รองรับ ESP8266
    • ดาว์โหลด และ ติดตั้ง Arduino IDE v1.6.9+
    • ทำให้ Arduino IDE ของเรารู้จักกับบอร์ด ESP8266 เข้าเมนู File > Preferences จากนั้นใส่               ข้อความว่า http://arduino.esp8266.com/stable/package_esp8266com_index.json
      ลงไปในช่อง Additional Board Manager URLs แล้วกดตกลง
    • Install lib โดยเข้าเมนู Tools > Boards Manager พิมพ์ในช่องค้นหาว่า esp8266
    • จากนั้นกดเลือก Install รอการติดตั้งสักครู่
2. ติดตั้ง Lib Anto และ สมัครสมาชิก Anto
    • ดาวน์โหลด Lib Anto (Ver. 0.5.2) แล้วแตกไฟล์ที่ดาวน์โหลด เปลี่ยนชื่อโฟลเดอร์เป็น AntoIO
    • วางโฟลเดอร์ AntoIO ไปไว้ที่ Documents > Arduino > Libraries
    • สมัครสมาชิกเป็นครอบครัว Anto กรอกข้อมูลให้ครบถ้วนแล้วกดยืนยันการสมัคร
    • Login เข้าสู่ระบบ

เริ่มต้นโปรเจค : ควบคุมหลอดไฟ LED ผ่าน Internet

    ในบทนี้เราจะพูดถึงตัวอย่างในการคุม การเปิด/ปิด หลอดไฟ LED ได้ง่ายๆผ่านอินเทอร์เน็ต และแน่นอนว่ามันทำงานผ่านเว็บบราวเซอร์ ดังนั้นคุณจะสามารถควบคุมหลอดไฟของคุณผ่าน smart phone ก็ได้ เพียงเปิดเว็บบราวเซอร์บน smart phone

สิ่งที่ต้องเตรียมพร้อม

  • จากเตรียมการเบื้องต้นสำหรับ Anto (คุณสามารถดูรายละเอียดได้ ที่นี่)
  • สัญญาณ WiFi ในการเชื่อมต่อ nodeMCU กับ Internet
  • Prototype Board
  • LED 3 ตัว ตัวต้านทาน
  • R 330(หรือ < 10k) 3ตัว
  • สายจัมป์


     ต่อมาเราจะมาดูกันที่ broker อีกตัวนึงน่ะครับนั่นคือ MQTT-Cloud
โดยปกติแล้ว MQTT จะสามารถใช้งานได้ก็ต่อเมื่อมีเซิฟเวอร์ตัวกลางเท่านั้น ซึ่งท่านสามารถติดตั้งบนเซิฟเวอร์ของตัวเองก็ได้ แต่ในบทความนี้จะเลือกใช้บริการเซิฟเวอร์ MQTT จากเว็บ CloudMQTT ซึ่งสามารถใช้งานได้ฟรี 10 การเชื่อมต่อ กรณีต้องการนำไปใช้งานจริงควรเผื่อจำนวนการเชื่อมต่อไว้มากๆหากนำไปใช้กับสาธาณะ

    ก่อนที่จะใช้งานได้ เราจำเป็นต้องมารู้ศัพท์ที่ใช้ และหลักการใช้งานกันก่อนครับ ก่อนอื่นเลย Username Password ที่ใช้ล็อกอินเข้าใช้งานโปรโตคอลจะมีอยู่ด้วยกัน 2 ระดับ คือ ระดับหัวหน้า และระดับผู้ดูแลห้อง (เป็นชื่อระดับที่ผมตั้งขึ้นเองเพื่อให้เข้าใจได้ง่าย) ข้อแตกต่างของ 2 ระดับนี้คือ

ระดับหัวหน้า เปรียบได้กับผู้บริหาร หรือเจ้าของบริษัท มีสิทธิ์ที่จะฟัง และประกาศ ไปยังห้อง (Topic) ไหนก็ได้ที่มีการสร้างขึ้น ซึ่ง Username Password จะถูกกำหนดมาแล้ว หลังจากสมัครสมาชิกในระบบของ CloudMQTT จะมีประกาศในหน้าแรก
ระดับผู้ดูแลห้อง ระดับนี้มีสิทธิ์ที่จะฟังอย่างเดียว ประกาศอย่างเดียว หรือทั้งฟังและประกาศ ได้ในห้อง (Topic) ที่กำหนดไว้แล้วเท่านั้น ซึ่ง Username Password สามารถกำหนดได้เองโดยการสร้าง
ต่อมา ก็มาทำความรู้จักกับคำว่า Topic กันครับ คำนี้ผมจะขอใช้ว่าเป็น "ชื่อห้อง" น่าจะเข้าใจได้ง่ายกว่า ก่อนที่เราจะส่งข้อมูล หรือรอฟังข้อมูล เราจะต้องทราบชื่อห้องซะก่อนครับ เปรียบเสมือนว่าหากเราต้องการจะคุยกับกลุ่มไหน เราจำเป็นที่จะต้องรู้ชื่อกลุ่มซะก่อน ในทาง MQTT จะเรียกชื่อห้องว่า Topic ซึ่งสามารถกำหนดเป็นอะไรก็ได้ แต่โดยส่วนใหญ่จะกำหนดในลักษณะคล้าย Path เช่น /ESP/LED /ESP/TEMP และอื่นๆ การตั้ง ควรเป็นชื่อที่สื่อความหมาย และเข้าใจได้ง่ายด้วยครับ

พอร์ต (Port) ใน CloudMQTT จะแบ่งพอร์ตออกเป็น 3 ชนิด ดังนี้

Port เป็นพอร์ตที่โปรโตคอล MQTT ใช้งาน ใช้งานกับภาษาที่อยู่ในฝั่ง Back-end เช่น PHP C++ และภาษาอื่นๆที่ได้กล่าวไปแล้ว (พอร์ตที่จะให้ ESP8266 คือพอร์ตชนิดนี้)

SSL Port เป็นพอร์ตที่โปรโตคอล MQTT ใช้งาน แต่จะถูกใช้เมื่อต้องการเชื่อมต่อแบบ SSL ซึ่งผมแนะนำให้ใช้พอร์ตนี้หากอุปกรณ์รองรับ SSL (ESP8266 ไม่ค่อยจะรองรับ จึงไม่ได้ใช้)

Websockets Port (TLS only) เป็นพอร์ตที่ใช้กับหน้าเว็บ ซึ่งหน้าเว็บนั้นไม่รองรับโปรโตคอล MQTT หรือเชื่อมต่อ TCP โดยตรง แต่มีเทคโนโลยีเรียวทามที่ออกแบบมาสำหรับเว็บอยู่แล้ว ชื่อ WebSocket ในการที่จะส่งข้อมูลผ่านหน้าเว็บจะต้องคอนฟิกพอร์ตเป็นพอร์ตชนิดนี้

Connection limit เป็นการจำกัดจำนวนผู้เข้ามาเชื่อมต่อ (Clients) ในวินาทีนั้นๆ ตัวอย่างเช่น เปิดหน้าเว็บที่เชื่อมต่ออยู่ไว้ 2 หน้า และมี ESP8266 ที่เชื่อมต่ออีก 1 ตัว รวมแล้วจะนับเป็น 3 การเชื่อมต่อ หากใช้งานฟรีเซิฟเวอร์ MQTT จาก CloudMQTT จะถูกจำกัดไว้ที่ 10 การเชื่อมต่อ
การสมัคร MQTT Cloud
1. สร้าง CloudMQTT account ที่ https://www.cloudmqtt.com
2. plans เป็น Cute Cat

อันนี้เป็นตัวอย่าง CloundMQTT account ที่ผมสร้างเสร็จแล้วน่ะครับ



ถ้าเพื่อนสนใจทำ Project โดยใช้ MQTT-Cloud สามารถศึกษาได้ตามลิงค์นี้น่ะครับ








สำหรับเอกสารอ้างอิงหรือแหล่งข้อมูลเพิ่มเติมน่ะครับ


ความคิดเห็น