การใช้งาน NodeMCU ในการรับส่งข้อมูลระหว่าง Cloud Service ด้วย MQTT Protocol

Group: Cloud — Connection with NodeMCU
FRA641: Computer programming for robotics

ในโลกของ Internet of Things (IoT) นั้น การติดต่อสื่อสารระหว่างอุปกรณ์ (Things) กับ Cloud Service ถือได้ว่าเป็นอีกเรื่องที่ต้องให้ความสำคัญและต้องทำความเข้าใจกันนะครับ โดยครั้งนี้ผู้เขียนจะมาคุยเรื่องโปรโตคอลที่ใช้ในการสื่อสาร ซึ่งปัจจุบัน MQTT Protocol ได้รับความนิยมอย่างมากในการสื่อสารแบบ Machine to Machine (M2M) หรือมันก็คือ IoT นั้นแหระครับผม

MQTT (MQ Telemetry Transport) ถือว่าเป็นโปรโตคอลที่รันอยู่ Application Layer ตาม OSI Model โดยรันบน TCP/IP อีกที ดูรูปด้านล่างก็จะพอเห็นภาพน้าาา…. (นี่มันวิชาเดต้าคอมนี่น๋า…..)

สำหรับข้อดีของเจ้า MQTT คือมันถูกออกแบบมาให้รับส่งข้อมูลที่มีน้ำหนักเบามากเหมาะสมกับอุปกรณ์ต้นทาง ปลายทางที่ใช้พลังงานน้อยๆ ส่งได้ไกลๆ โดยใช้งานแบนด์วิดธ์อย่างมีประสิทธิภาพ และที่สำคัญมัน open source คราบ ไม่เสียค่าใช้จ่ายใดๆเลย

สำหรับข้อมูลเพิ่มเติม MQTT version 3.1 ตามข้อมูลด้านล่างเลยครับ
โมเดลในการสื่อสารของ MQTT ตามรูปด้านล่างจะประกอบด้วย 2 ส่วนคือ Broker กับ Client (Client ในรูปเป็นคือ Sensor, Laptop, Mobile)
www.hivemq.com

Broker

ทำหน้าที่เป็นตัวกลางในการรับส่งข้อมูลระหว่าง Client โดยมีวิธีการสร้างเส้นทาง (Routing) ด้วยหัวข้อ (Topic) โดยที่ Client ต้องทำการ Subscribe ใน Topic ที่ตัวเองต้องการ จากนั้น Broker ก็จะส่งข้อมูลทั้งหมดที่ถูก Publish ใน Topic นั้นๆให้ โดยที่ Client สื่อสารกันโดยที่ไม่รู้จักกัน ซึ่งถือเป็นข้อดีเมื่อต้องการขยายเครือข่ายก็สามารถดำเนินการได้ง่าย

และหน้าที่ที่สำคัญมากอีกอย่างของ broker คือรักษาความปลอดภัยของเครือข่าย เช่น การทำ Authorization และ Authentication ของ Client ครับ

ปัจจุบัน MQTT Broker เปิดให้ใช้งานหรือดัดแปลงอยู่หลายเจ้าด้วยกันตามด้านล่างนี้เลยครับ ในที่นี้จะเน้นเจ้าที่เป็นของคนไทย นั่นก็คือ NETPIE นั้นเองครับ

Client

เป็นได้ทั้ง Publisher หรือ Subscriber หรือ Publisher/Subscriber ในเวลาเดียวกัน ตัว Client จะต้องเป็นอุปกรณ์ที่สามารถรัน MQTT Client Library บน TCP/IP ได้ ซึ่งตัว Library เองจะมีขนาดเล็ก ติดตั้งง่าย ใช้ได้กับอุปกรณ์ที่มีทรัพยากรจำกัด เพราะการใช้โมเดล Publisher/Subscriber นั้นหน้าที่คิดคำนวณจะถูกผลักไปยัง Broker

Client จำเป็นที่จะต้องเปิดการเชื่อมต่อ TCP/IP ใว้ตลอดเวลาเพื่อที่ Broker จะสามารถส่งข้อมูลมาให้ได้ หากการเชื่อมต่อมีปัญหา Broker ก็จะเก็บข้อมูลนั้นใว้จนกว่า Client จะกลับมาออนไลน์อีกรอบ

MQTT Topics

จะมีการลักษณะแบบ Path ของ File เลยครับ คือจะสามารถแยกลำดับชั้นด้วยการเครื่องหมาย “/” เช่น fibo/floor3/room304/temperature ซึ่ง Client สามารถเลือกทำการ Publish, Subscribe เฉพาะ Topic หรือว่า Publisher/Subscriber หลายๆ Topic ในเวลาเดียวกันได้เลย โดยใช้ Wildcard

Single-Level Wildcard (+) ตัวอย่างเช่น fibo/floor3/+/temperature หมายถึงการขอเขียนหรือรับข้อมูล tamperature จากทุกๆห้องเลยใน fibo/floor3

Multi-Level Wildcard (#) ตัวอย่างเช่น fibo/floor3/# หมายถึงการขอเขียนหรือรับข้อมูลทั้งหมดที่มีใน Topic ที่ขึ้นต้นด้วย fibo/floor3

MQTT Control Packet

Command control packet ทั้งหมดที่ใช้ในการสื่อสารระหว่าง Broker กับ Client มีทั้งสิ้น 14 Command ดังตารางเลยครับ

https://netpie.io
สำหรับใครที่อยากแกะดูเนื้อความว่าแต่ละ Command มีอะไรบ้าง เชิญเข้าสู่แดนสนธยาด้านล่างครับ ซึ่งจะขอติดใว้ก่อนนาจา เด่วมา update ทีอีกที…..

ติดใว้ก่อนน้าาา….

ทดลองเล่น…

หลังจากพอเข้าใจการทำงานของ MQTT Protocol ไปบ้างแล้ว ก็ลองมาทดลองใช้งานจริงกับโปรเจค The black box โดยเลือกใช้งาน NETPIE (Cloud Platform) ที่มี Distributed MQTT Brokers อยู่

บทความที่เขียนนี้เป็นส่วนหนึ่งของโปรเจค The black box นะครับ หากผู้ที่หลงเข้ามาอ่าน ยังไม่ทราบวัตถุประสงค์ของโปรเจค แนะนำให้อ่านบทความก่อนหน้านะครับ ตามด้านล่างนี้เลย

โมเดลที่จะทดลองก็จะมี Client สองอันคือ NETPIE Freedoard (web base) และ NodeMCU โดยให้ทั้งสอง Subscribe ใน Topic เดียวกันคือ /TheBlackBox/ledStatus แล้วให้ NodeMCU publish ค่าของ ledStatus ออกไป

ทดลองกับโปรเจคกันเลย


Our team
I. Kraingkrai Kanjana-ekkarin II. Worasuchad Haomachai