สงวนลิขสิทธิ์ © 2018 KidBright.info : พัฒนาโดย ร้านไอโอเอ็กซ์ฮ๊อบ
MQTT
MQTT

MQTT

รายละเอียด (Description)

สร้างเมื่อ วันอังคารที่ 2 มิถุนายน พ.ศ.2563 15:12 น. • อัพเดทเมื่อ วันพุธที่ 3 มิถุนายน พ.ศ.2563 15:56 น. • โดย ร้านไอโอเอ็กซ์ฮ๊อบ

ปลั๊กอิน MQTT สำหรับโปรแกรม KidBrightIDE ใช้กับบอร์ด KidBright32 / OpenKB

MQTT เป็นโปรโตคอลที่นิยมใช้ด้าน IoT ใช้สำหรับการติดต่อสื่อสารระหว่างอุปกรณ์ เช่น สื่อสารระหว่างบอร์ด KidBright กับบอร์ด KidBright หรือระหว่าง KidBright กับโทรศัพท์มือถือ หรือระหว่าง KidBright กับคอมพิวเตอร์

ปลั๊กอินนี้เข้าควบคุมหลอดแอลอีดี IoT บนบอร์ด KidBright32 / OpenKB เมื่อเชื่อมต่อกับ MQTT Broker ได้ หลอดแอลอีดี IoT จะติดสว่าง

วีดีโอตัวอย่างการใช้งาน

ใช้บอร์ด OpenKB ควบคุมรีเลย์และแสดงค่าอุณหภูมิบนโทรศัพท์มือถือ

ใช้บอร์ด OpenKB ควบคุมรีเลย์และแสดงค่าอุณหภูมิบนโทรศัพท์มือถือ

การติดตั้ง

ดาวน์โหลดไฟล์ปลั๊กอินที่ด้านล่างของหน้านี้ จากนั้นเปิดโปรแกรม KidBrightIDE ขึ้นมา กดที่ Plugins เลือก Install Plugins จากนั้นรอติดตั้งปลั๊กอินซักครู่ แล้วโปรแกรม KidBrightIDE จะปิดแล้วเปิดใหม่อัตโนมัติ จากนั้นกดที่เมนู Plugins > MQTT จะมีบล็อกใหม่เพิ่มเข้ามาแล้ว

หมายเหตุ ปลั๊กอินนี้รองรับโปรแกรม KidBrightIDE เวอร์ชั่นล่าสุด

บล็อกที่มีให้ใช้งาน

ปลั๊กอิน MQTT มีบล็อกใช้งาน ดังนี้

MQTT Config

ใช้ตั้งค่าการเชื่อมต่อไปยัง MQTT Broker ซึ่งเป็นเซิร์ฟเวอร์กลางบนอินเตอร์เน็ต ใช้ส่งต่อข้อมูลจากอุปกรณ์ถึงอุปกรณ์ สามารถดูรายชื่อ MQTT Broker ฟรีได้ที่ # 10 Free Public MQTT Brokers(Private & Public)

พารามิเตอร์ที่จำเป็นต้องใส่ในบล็อกนี้คือ Host (ใช้บล็อกข้อความมาต่อ) ใช้กำหนดหมายเลข IP หรือโดเมนของ MQTT Broker ส่วนพารามิเตอร์ Port (ใช้บล็อกตัวเลขมาต่อ) เป็นหมายเลขพอร์ต TCP ของ MQTT Broker (มักเป็น 1883) ส่วนพารามิเตอร์ Client Id ใช้กำหนดชื่ออุปกรณ์ของตัวเอง กรณีใช้ NETPIE2020 จำเป็นต้องกำหนด Client Id ให้ตรงกับที่ผู้ให้บริการให้มา

MQTT on Connected

เป็นบล็อกที่ใช้ใส่บล็อกที่ต้องการให้ทำงานเมื่อเชื่อมต่อกับ MQTT Broker ได้สำเร็จ

MQTT is connected ?

ใช้ตรวจสอบว่าขณะนี้กำลังเชื่อมต่อกับ MQTT Broker อยู่หรือไม่ โดยให้ค่าเป็น true หรือ 1 เมื่อกำลังเชื่อมต่ออยู่ และให้ค่าเป็น false หรือ 0 เมื่อไม่ได้เชื่อมต่ออยู่

MQTT Publish

ใช้ส่งข้อมูล (Publish) ไปที่ Topic ที่ต้องการ โดยพารามิเตอร์ Topic คือ Topic ที่ต้องการ และ data คือข้อมูลที่ต้องการส่ง รองรับบล็อกข้อความ บล็อกตัวเลข

หมายเหตุ. กรณีใส่บล็อกตัวเลขลงในพารามิเตอร์ data ตัวเลขจะถูกแปลงเป็นข้อความแล้วจึงส่งออก

MQTT Subscribe

ใช้รับข้อมูลจาก Topic ที่ต้องการ รองรับ Topic แบบ Wildcard ทั้งแบบ Single Level และ Multi Level

เมื่อได้รับข้อมูลจาก Topic ที่กำหนด บล็อกที่อยู่ภายในบล็อกนี้จะถูกเรียกใช้ และสามารถดูชื่อ Topic เต็ม ๆ ได้โดยใช้บล็อก MQTT get topic และเรียกใช้ข้อมูลที่ส่งเข้ามาได้ด้วยบล็อก MQTT get payload ...

หมายเหตุ. บล็อก MQTT Subscribe ควรอยู่ในบล็อก MQTT is connected ? เพื่อให้เริ่มรับข้อมูลจาก Topic ได้ทันทีที่เชื่อมต่อ MQTT Broker ได้

MQTT get topic

ใช้ดู Topic ที่ส่งข้อมูลมา ต้องเรียกใช้งานภายในบล็อก MQTT Subscribe เท่านั้น

MQTT get payload number

ใช้อ่านข้อมูลที่ส่งเข้ามาในรูปแบบตัวเลข ต้องเรียกใช้งานภายในบล็อก MQTT Subscribe เท่านั้น

MQTT get payload text

ใช้อ่านข้อมูลที่ส่งเข้ามาในรูปแบบข้อความ ต้องเรียกใช้งานภายในบล็อก MQTT Subscribe เท่านั้น

ตัวอย่างการใช้งาน

ควบคุมรีเลย์และแสดงค่าอุณหภูมิบนโทรศัพท์มือถือ

ที่โปรแกรม KidBrightIDE หลังจากติดตั้งปลั๊กอิน MQTT แล้ว ให้ต่อบล็อกดังนี้

จากโค้ดโปรแกรมด้านบน อธิบายตามลำดับได้ดังนี้

  • ใช้บล็อก Write Output สั่งให้รีเลย์ที่ต่ออยู่ที่ขา OUT1 ไม่ทำงาน (รีเลย์ที่ใช้เป็นแบบ Active LOW ดังนั้นสั่ง off => on และสั่ง on => off)
  • ใช้บล็อก MQTT Config ตั้งค่าการเชื่อมต่อไปที่ MQTT Broker ฟรี ที่ mqtt.eclipse.org และพอร์ต 1883 กำหนดชื่ออุปกรณ์เป็น MyOpenKB
  • ใช้บล็อก MQTT on Connected เพื่อกำหนดบล็อกที่จะถูกเรียกเมื่อเชื่อมต่อกับ MQTT Broker ได้
    • ใช้บล็อก MQTT Subscribe กำหนดรับข้อมูลจาก Topic /openkb/out/1/set และกำหนดบล็อกที่จะถูกเรียกเมื่อได้รับข้อมูลมาจาก Topic ดังกล่าว
      • ใช้บล็อก if ตรวจสอบว่าข้อมูลที่ได้รับมา เป็น 1 หรือไม่ (1 = true) ถ้าใช่
      • ใช้บล็อก Write Output สั่งให้รีเลย์ที่ต่ออยู่ที่ขา OUT1 ทำงาน
      • ถ้าไม่
      • ใช้บล็อก Write Output สั่งให้รีเลย์ที่ต่ออยู่ที่ขา OUT1 ไม่ทำงาน
  • ใช้บล็อก Forever กำหนดบล็อกที่จะถูกให้เรียกทำงานตลอดเวลา
    • ใช้บล็อก MQTT Publish ส่งค่าอุณหภูมิไปที่ Topic /openkb/sensor/temp
    • ใช้บล็อก Delay หน่วงเวลาการส่งค่าอุณหภูมิ 5 วินาที

ตั้งค่าการเชื่อมต่อ WiFi ที่เมนู WiFi Config แล้วอัพโหลดโปรแกรมลงบอร์ด

หลังจากอัพโหลดโปรแกรมลงบอร์ด สังเกตหลอดแอลอีดี WiFi จะต้องติดสว่าง จากนั้นหลอดแอลอีดี IOT จะติดสว่าง แสดงว่าสามารถเชื่อมต่อกับ MQTT Broker ได้แล้ว และคาดว่าข้อมูลสามารถรับ-ส่งได้แล้ว

การทดสอบว่าบอร์ด KidBright32 / OpenKB สามารถรับ-ส่งข้อมูลได้หรือไม่ ให้ใช้เครื่องมือ MQTT Websocket Client ในการตรวจสอบ โดยเข้าไปใช้ได้ที่ http://www.hivemq.com/demos/websocket-client/

หลังจากเข้าไปใน MQTT Websocket Client แล้ว ให้กรอกข้อมูล Host ให้ตรงกับในโค้ด คือ mqtt.eclipse.org และใส่หมายเลขพอร์ตของ Web Sockets ซึ่งมักจะเป็น 80 หาก MQTT Broker ที่ใช้บริการมี Username และ Password ก็จำเป็นจะต้องใส่ Username และ Password ด้วย สำหรับ mqtt.eclipse.org ไม่มี จึงไม่ต้องใส่ จากนั้นกดปุ่ม Connect

เมื่อเชื่อมต่อได้แล้ว จะขึ้นข้อความ connected พร้อมย่อส่วนของ Connection

การทดสอบ เริ่มจาก Subscribe ไปที่ Topic /openkb/sensor/temp เพื่อดูว่ามีค่าอุณหภูมิส่งมาหรือไม่ โดยกดปุ่ม Add New Topic Subscription

ช่อง Topic ใส่ /openkb/sensor/temp แล้วกดปุ่ม Subscribe

สังเกตตรง Subscriptions จะมี /openkb/sensor/temp ขึ้นมาแล้ว รอซักครู่ จะมีค่าอุณหภูมิแสดงขึ้นมาในส่วนของ Messages

ทดลองควบคุมการทำงานของรีเลย์ โดยทดลองส่งข้อความ (Publish) ไปที่ Topic /openkb/out/1/set โดยใส่ /openkb/out/1/set ในช่อง Topic จากนั้นใส่เลข 1 ลงในช่อง Message จากนั้นกดปุ่ม Publish รีเลย์จะทำงาน

ทดสอบอีกครั้งโดยเปลี่ยน Message เป็น 0 แล้วกด Publish รีเลย์จะตัดการทำงาน

เป็นอันจบการทดสอบเชื่อมต่อกับ MQTT แล้ว

ขั้นตอนต่อมาคือการตั้งค่าแอพพลิเคชั่นบนโทรศัพท์มือถือ ให้ส่งข้อมูลไปยังบอร์ด KidBright / OpenKB

ดาวน์โหลดแอพพลิเคชั่น Mqtt Dashboard จาก Google Play

เปิดแอพพลิเคชั่นขึ้นมา กดที่ปุ่ม Add first broker

จะแสดงหน้าต่าง Edit broker ขึ้นมา ให้ใส่ข้อมูลดังนี้

  • Broker - กำหนดเป็นอะไรก็ได้ ตัวอย่างกำหนดเป็น MQTT
  • tcp://.... - กำหนดเป็น Host ของ MQTT Broker
  • 1883 - กำหนดพอร์ตของ MQTT Broker
  • กดปุ่มบันทึก

กรณี MQTT Broker ต้องใช้ Username Password ให้กดตรง Broker Protection จะมีให้กรอก Username Password ขึ้นมา

qOthID.png

จากนั้นแอพจะพามาหน้าหลักของบอร์ด ให้กดปุ่ม + เพื่อเริ่มเพิ่มวัตถุที่ต้องการให้แสดงผลในบอร์ด

กดเลือกประเภทวัตถุเป็นแบบ Standaed

กดเลือกวัตถุเป็น Button เพื่อทำปุ่มสำหรับเปิดรีเลย์

แอพจะแสดงหน้า Edit tile ขึ้นมา ให้กรอกข้อมูลดังนี้

  • Tile name กรอกชื่อของวัตถุ ตัวอย่างกำหนดให้วัตถุนี้เมื่อกดแล้วจะทำให้รีเลย์ทำงาน จึงกำหนดเป็น ON
  • Publish topic กำหนด topic ที่ต้องการส่งข้อความไปเมื่อกดที่วัตถุนี้ ตัวอย่างต้องการควบคุมรีเลย์จึงใส่ /openkb/out/1/set
  • Payload กำหนดข้อความที่ต้องการส่ง ตัวอย่างกำหนดเป็น 1

จากนั้นกดเครื่องหมาย ? เพื่อเปลี่ยนสีและไอค่อนของวัตถุนี้

เลือกสีและไอค่อนของวัตถุตามต้องการ ตัวอย่างเลือกสีเขียว และไอค่อนเป็นรูปหลอดไฟ จากนั้นกด Save

แอพจะพากลับมาหน้า Edit tile ให้กด Paint card background เพื่อกำหนดให้ใส่สีในพื้นหลังของวัตถุ แล้วกดปุ่มรูปแผ่นดิสก์เพื่อบันทึก

แอพจะพากลับมาหน้าหลัก พร้อมแสดงวัตถุ ON ที่ได้สร้างขึ้นใหม่

สร้างวัตถุ OFF ขึ้นมาโดยทำตามขั้นตอนเดิม แต่เปลี่ยน Payload เป็น 0 แทน ส่วน Topic กำหนดเป็น /openkb/out/1/set เช่นเดิม

สร้างวัตถุแสดงผลค่าอุณหภูมิที่วัดได้ โดยเลือกชนิดของวัตถุเป็น Text

กรอก Subscribe topic เป็น /openkb/sensor/temp แล้วกดตรง Enable publishing ให้เครื่องหมายติ๊กถูกหายไป

กำหนดสีและไอค่อนตามต้องการ กดปุ่มรูปแผ่นดิสก์เพื่อบันทึก

แอพจะพากลับมาหน้าหลัก ทดลองกดปุ่ม ON จะพบว่ารีเลย์ทำงาน และกดปุ่ม OFF รีเลย์จะหยุดทำงาน และที่วัตถุ Temp จะแสดงค่าอุณหภูมิที่วัดได้ออกมา อัพเดทค่าทุก ๆ 5 วินาที

เวอร์ชั่น (Version)

MQTT Plugin V1.0

ความคิดเห็น (Comment)

x

ตัวอย่างบล็อก