Page 1 of 22
Week11 Raspberry Pi Check 4 of 5: MQTT
Test0: Concept IoT via MQTT http://www.10logic.com/technology/iot-
technology.html Broker, Publisher and Subscriber
Test1: Publisher from Raspberry Pi http://tosakunmeeting.blogspot.com/2015/05/
raspberry-pi-mqtt-1.html Send Temperature DS1820 from Raspberry Pi to
MQTT Broker
Test2: Subscriber from Raspberry Pi Subscribe to “test.mosquitto.org” read some
data from dashboard Set Condition from data to control Output
Test3: Set Broker on Raspberry Pi ลองเอา Raspberry Pi มาทำาเปน MQTT Broker (Mosquitto) {
http://www.sathittham.com/raspberry-pi/rpi-mqtt-broker/ }
Read This : http://thaiopensource.org/ ตดตงและใชงาน - mqtt-broker- กน /
ID__________ Name ___________________Date
Page 2 of 22
Read This : http://raspberry-pi-th.blogspot.com/2015/11/how-to-install-mosquitto-mqtt-broker-on.html
Page 3 of 22
Test0: Concept IoT via MQTThttp://www.10logic.com/technology/iot-
technology.htmlปจจบนเทคโนโลยทกำาลงมาแรงสำาหรบนกพฒนาดาน Embedded (ไม
ไดแคเฉพาะ Embedded อยางเดยวครบ) เปนเทคโนโลยทกลาวกนมากคงจะหนไมพน IoT ซงเปนเทคโนโลยใหมในยคนเลยกวาได แรงขนาดทวา Microsoft เอง กยงพอรต Windows 10 มาวงเลนบน Raspberry Pi แถมยงใจดตด IoT มาใหดวย ซงผมยงไมไดตามลงไปดวาใช Broker ตวไหน และม Library ใหใชงานมาดวยหรอไม? หรอไมผมกเขาใจผดเกยวกบมนครบถาผดพลาดกขออภยมานะทนดวยครบ.
IoT มนคออะไร พอคนดมหลายลงคอธบายไวมากมาย เชน Internet of Things เมอคอมพวเตอรเรมคยกนเองได , โลกแหง IoT มาถงแลว , IoT เทคโนโลยทธรกจตองร. ลองนกภาพดครบวาถาหากอปกรณสามารถสงงานไปมาหากนไดผาน www ไมวาจะเปน PC, Smart Phone หรอแมแตอปกรณขนาดเลกพวก Micro-Controller, PLC, HUB, Switch หรออะไรกแลวแตทมนสามารถตอระบบ Network ไมวามนจะอยทบาน ทโรงงาน ไร นา ฟารมโรงเรอน โรงงานอตสาหกรรมหรอทอนๆทมระบบเนตเวอรทเขาถง www ไดเราจะสามารถควบคมมนไดทงหมดทไหนกไดในโลกใบน
IoT ทำามวธการทำางานอยางไร องคประกอบหลกของ IoT จะม 3 สวนคอ Broker, Publisher และ Subscriber. ซงการรบและสงขอมลนนมนจะสงขอมลไปมาหากนนนจะสงผานตวกลางนนกคอ Broker Server โดยตวสงนจะเรยกวา Publisher สงขอมลขนไปยง Broker พรอมระบหวขอ(Topic) ทตองการสงขอออกไป จากนนตวรบซงเรยกวา Subscriber ถาหากตวรบตองการรบขอมลจากตวสงจะตองทำาการ Subscribe หวขอ Topic ของ Publisher นนๆ ผาน Broker เชนกน
Page 4 of 22
IoTจากรปภาพดานบนจะมตว Publisher ทำาการ Public ขอความ “Hello”
ใน Topic Device1 เมอและถาหากมคอมพวเตอร หรออปกรณอนๆทำาการ Subscribe หวขอ Topic Device1 เมอ Publisher ทำาการสงขอมลไปยง Topic อปกรณ Subscribe จะไดขอความ “Hello” เชนเดยวกน. กคลายๆกบทใชงานไลนทคยกนเปนกลมนนเลยครบ. ซงจะเหนขอความ “Hello” ในเวลาเดยวกนนนหมายความวาอปกรณใดๆททำาการ Subscribe Topic เดยวกนกจะไดขอความเดยวกนครบ
โปรโตคอลทใชสำาหรบรบและสงขอมลนนคอ MQTT ปจจบนถง Version 3. 1 ในทนจะมาทำาการทดลองสงขอมลกนตว Server จะมอยดวยกนหลายคายครบสำาหรบทลสมาดานลางนครบ
Open Source MQTT Broker Server Mosquitto RSMB ActiveMQ Apollo Moquette Mosca RabbitMQ
Client Paho Xenqtt mqtt.js
Page 5 of 22
node_mqtt_client Ascoltatori Arduino MQTT Client
สำาหรบ MQTT Broker Server ฟรทผมพอคนไดกมดงนครบ test.mosquitto.org broker.mqttdashboard.com
Step1a/3 กำ�หนดตว Subscribe สำาหรบเครองมสำาหรบทดสอบทจะทำาการสงขอมล(pub) และรบ
ขอมล(sub) กมอยดวยกนหลายตวครบเชน แตละเลอกมาใชงานสกตวหนง ในทนผมเลอกเปน plugin สำาหรบ chrome คอ MQTTLens
Page 6 of 22
Mqttlens
mqttlensเปด MQTTLens ขนมาจากนนปอนรายละเอยด เมอปอนรายละเอยดครบ
ใหคลกท CREATE CONNECTION Connection Name: test_MQTT อะไรกได
Hostname: test.mosquitto.org Port: 1883 default = 1883 Client ID: RXL77Nb ตามท MQTTLens ให
มา
mqttlens Subscribe: android@10logic
ในทนผมจะทำาการ Subscriber ท Topic ชอวา android@10logic
Page 7 of 22
Step2a/3: กำ�หนดตว Publisher Publisher ซงเปน App
สำาหรบ Android ทำาการ Public ขอความ Hello 10logic ไปยง Topic android@10logic เขาไปใน play store และคนคำาวา MyMQTT แลวตดตงลงบน Smart Phone ของเราครบ
MyMQTTเปด MyMQTT และเขาไปยงเมน Settings
Page 8 of 22
MyMQTT
MyMQTT
Page 9 of 22
Step3a/3: ทดสอบก�รทำ�ง�น MyMQTT
เมอผมใช Smart Phone ทมอยทำาการ Public ขอความ “Hello 10logic” ผาน MyMQTT แสดงผลตามรป
mqttlensจะเหนวาสามารถรบขอความ Hello 10logic ไดตามตวอยางดงภาพ เหน
ภาพกนแลวใชไหมครบ ทนเมอนกพฒนาตองการสงขอมลจากอปกรณ embedded สามารถสงขอมลขนมาไดเชนกน
Page 10 of 22
Test1: Publisher from Raspberry Pihttp://tosakunmeeting.blogspot.com/2015/05/raspberry-pi-
mqtt-1.htmlMQTT (http://mqtt.org/) ยอมาจาก Message Queue
Telemetry Transport เปน protocol การสอสารแบบหนง ทออกแบบมาเพอใชงานกบอปกรณอเลกทรอนกสขนาดเลก เชน Arduino Raspberry PI เปนตน ใชหลกการแบบ publisher / subscriber (pub/sub paradigm) ดงภาพ
คลายกบหลกการทใชใน Web Service ทตองใช Web Server เปนตวกลางระหวางคอมพวเตอรของผใช แต MQTT จะใชตวกลางทเรยกวา Broker เพอทำาหนาท จดการคว รบ - สง ขอมลระหวางอปกรณ และทงในสวนทเปน Publisher และ Subscriber
ขอมลใน MQTT จะใช Topic (นาจะเรยกวาหวขอ นะ) เปนตวอางองหลก ดงนนขอมลท Publisher จะสงออกไปยง Broker ตองม Topic กำากบไวเสมอ ทางฝาย Subscriber กจะอางถง Topic เพอใหไดขอมลทตองการ
วาไปแลวระบบจะเหมอนกบเราไปสมครเปนสมาชก (subscribe) นตยสารฉบบหนง ชอของนตยสารกเปรยบไดกบ topic และผผลตนตยสารกเปรยบไดกบ publisher เมอถงเวลาทนตยสารเสรจ ผผลตกใหตวกลาง (broker) นำานตยสารมาสงใหเราทบาน
รจกกบ MOSQUITTO
Page 11 of 22
MQTT เปนเพยง Protocol สอสาร ในการใชงานจรง จำาเปนตองม Software และ Hardware มารองรบ MOSQUITTO (http://mosquitto.org/) เปน Open source Message Broker ทสนบสนน MQTT การตดตง MOSQUITTO ไมใชเรองยาก แตในบทความนจะใช Broker ททาง MOSQUITTO เตรยมไวใหเพอในการเรยนรและทดสอบโดยไมเสยคาใชจายซงม URL คอ test.mosquitto.org (ศกษาขอมลการใหบรการเพมเตมไดท URL ดงกลาว)
MQTT Application ดวย PythonPaho project (http://www.eclipse.org/paho/) เปนโครงการ
พฒนา MQTT Library ซงมใหใชงานในหลายภาษารวมทง Python มชอเรยกวา paho-mqtt
Page 12 of 22
ตดตง paho-mqtt บน Raspberry PI (หรอ Linux )ทำาไดสองวธวธท 1. ในกรณทตดตง python setuptools (https://pypi.python.org/pypi/setuptools) ไวแลว ใชการตดตงผานคำาสง pip$ sudo pip install paho-mqtt
วธท 2. ตดตงจาก source code (https://www.eclipse.org/paho/clients/python/)git clone http://git.eclipse.org/gitroot/paho/org.eclipse.paho.mqtt.python.gitcd org.eclipse.paho.mqtt.python.gitsudo python setup.py install
เรมสร�งโปรแกรมอย�งง�ยเพอใหเขาใจหลกการทำางานเบองตน ผมจะใช Raspberry PI ทำาหนาท
เปนทง อปกรณฝง Publisher และ Subscriber บนเครองเดยวกน และใช test.mosquitto.org เปน Broker กจะมระบบครบตามสถาปตยกรรมทกลาวถงกอนหนา
Page 13 of 22
ตวอย�ง Code – test1_MQTT.py# test1_MQTT.pyimport paho.mqtt.client as mqttimport time
BROKER_PORT = 1883BROKER_HOST = "test.mosquitto.org" # Test host from mosquitto.orgKEEPALIVE = 60 #maximum period in seconds allowed between communicationTOPIC='tk/demo'
def on_connect(client,userdata,results): print "Connected with result "+str(results) client.subscribe(TOPIC,0) # subscribe to broker with topic def on_publish(client,userdata,mid): print "Message has been published with id = "+str(mid)
def on_message(client,userdata,msg): print "Incomming message is "+msg.topic +":"+msg.payload client = mqtt.Client() # Be generated when client receives CONNACK message from broker.client.on_connect = on_connect
# Be generated after client has published message to broker.client.on_publish = on_publish
# Be generated after message from broker arrived.client.on_message = on_message
client.connect(BROKER_HOST,BROKER_PORT,KEEPALIVE)client.loop_start()
while True: try : time.sleep(5) #option, do not need client.publish(TOPIC,"Hello") except KeyboardInterrupt : client.unsubscribe(TOPIC)
Page 14 of 22
client.disconnect() break
Page 15 of 22
คำ�อธบ�ย1. เรมตนดวยการนำาเอา mqtt library เขามาในโปรแกรมimport paho.mqtt.client as mqtt
2. กำาหนดคาตวแปรทสำาคญBROKER_PORT = 1883 #standard MQTT broker portBROKER_HOST = "test.mosquitto.org" # Test host from mosquitto.orgKEEPALIVE = 60 #maximum period in seconds allowed between communicationTOPIC='tk/demo' #any String could be used.
3. สรางตวแปรทเปนตวแทนของอปกรณของเราเพอใชสอสารกบ Broker ในโปรแกรมclient = mqtt.Client()
4. สราง Call back functions ซงเปนสวนของโปรแกรมทจะทำางานเม อม 3 เหตการณเกดขน ไดแก4.1 client.on_connect จะเกดขนหลงจาก client หรออปกรณของเราไดตดตอกบ Broker สำาเรจ 4.2 client.on_publish จะเกดขนหลงจาก client หรออปกรณของเราไดทำาการสงขอมล (publish) ไปยง Broker4.3 client.on_message จะเกดขนหลงจาก client หรออปกรณของเราไดรบขอมล (notify) จาก Broker
5. สรางการเชอมโยงไปยง Brokerclient.connect(BROKER_HOST,BROKER_PORT,KEEPALIVE)
6. ทำาการสงขอมลไปยง Brokerclient.loop_start() while True: try : time.sleep(5) #option, do not need. client.publish(TOPIC,"Hello") #send message "Hello" to broker except KeyboardInterrupt : client.unsubscribe(TOPIC) client.disconnect() break
กำาหนดใหอปกรณทำางานวนลปไปเรอย ๆ
ผลการเรยกใชงานบน Raspberry PI แสดงดงภาพขางลางน
Page 16 of 22
ดจาก Lens
Subscribe : tk/demo
อะไรททำ�ให MQTT น�สนใจในสงคมมนษยเราตองการการสอสารตลอดเวลา เรมจากระหวางมนษย
ดวยกน มนษยกบอปกรณอเลกทรอนกส และในยคนกำาลงจะมการสอสารระหวางอปกรณกบอปกรณ (Machine to Machine) ซง MQTT เปนสวนหนงททำาใหเกดขน
จดหลกท MQTT ตางจาก Web Service ถงแมจะใช TCP/IP เหมอนกน คอ MQTT สามารถนำามาใชกบอปกรณขนาดเลกหรอ embeded system ไดเพราะใชทรพยากรและพลงงานนอยกวา สามารถใชงานไดกบระบบโทรมาตร (telesensing) หรอระบบทไมตองการคนดแล (unattended) เชน ระบบการ
Page 17 of 22
แพทยฉกเฉนททมแพทยสามารถรบรขอมลผปวยในขณะทผปวย ยงอยระหวางการเดนทาง ระบบการดแลผปวยทางไกลหรอผสงอายทไมมคนดแลตลอดเวลา ระบบการจดสงสนคาทผรบสามารถรบรการเดนทางของสนคาทสงซอ ได ระบบจดการคลงสนคาทเรารวาสนคาเขา-ออก inventory อยางไร ระบบการปองกนภยพบตรทประชาชนทราบขอมลจรงจากการวดจรงไมใชจาก ขาวลอ ฯลฯ
Raspberry PI เปนอปกรณคอมพวเตอรทไดรบการพฒนามาจนมศกยภาพทดแทนการใชงานคอมพวเตอรตงโตะไดแลวในบางเรอง การนำาเอา Raspberry PI มาสรางเปนตวกลางหรอศนยกลางการควบคมอปกรณยอย ๆ จงเปนเรองทเปนไปไดและใชตนทนตำา บทความนมวตถประสงคเพอจะชประเดนตรงนครบ
Page 18 of 22
Test2: Subscriber from Raspberry Pi
จากการทดลองของโปรแกรม test1_MQTT.py def on_message(client,userdata,msg): print "Incomming message is "+msg.topic +":"+msg.payload
ขอมลทอานจาก Broker จะเกบท msg.payload เราจะ publish ขอความบางอยางและให Raspberry Pi subscribe และอานขอความจากนนใชฟงกชน find string คนหาขอความ
คาทไดจาก find String คอ ตำาแหนงทพบขอความ (ในการทดสอบ คอ 0)
เมอพบขอความเรากจะทำางานตามทตองการdef on_message(client,userdata,msg): print "Incomming message is "+msg.topic +":"+msg.payload if (msg.payload.find("Pk007_On")==0): print "Digital Output On" if (msg.payload.find("Pk007_Off")==0): print "Digital Output Off"
เมอสงขอความจาก MQTTLens
ผลการทำางาน
Page 19 of 22
Page 20 of 22
ปรบแกใหตอวงจรภายนอกกบ LED จำานวน 2 ตว
On LED_1 ดวยขอความ _________
Off LED_1 ดวยขอความ _________
On LED_2ดวยขอความ _________
Off LED_2 ดวยขอความ _________
โปรแกรมททำาการทดสอบในการควลคม LED ทงสองตว
< เตมใหผมดวย Font = TH Krub 14>
Page 21 of 22
Test3: Set Broker on Raspberry Pi
< เตมใหผมดวย Font = TH Krub 14>
Page 22 of 22
Read This
1. http://tosakunmeeting.blogspot.com/2015/05/ raspberry-pi-mqtt-1.html
2. https://www.eclipse.org/paho/clients/python/ 3. http://thaiopensource.org/
%E0%B8%95%E0%B8%B4%E0%B8%94%E0%B8%95%E0%B8%B1%E0%B9%89%E0%B8%87%E0%B9%81%E0%B8%A5%E0%B8%B0%E0%B9%83%E0%B8%8A%E0%B9%89%E0%B8%87%E0%B8%B2%E0%B8%99-mqtt-broker-%E0%B8%81%E0%B8%B1%E0%B8%99/
4. http://docs.gadgetkeeper.com/display/docs/ Realtime+temperature+monitoring+with+Raspberry+Pi+and+MQTT+protocol
5. http://www.sathittham.com/raspberry-pi/rpi-mqtt- broker/
6. http://lelylan.github.io/lab-projects/raspberry-pi-light/ 7. http://www.switchdoc.com/2016/02/tutorial-installing-
and-testing-mosquitto-mqtt-on-raspberry-pi/8. http://blog.thingstud.io/recipes/how-to-make-your-
raspberry-pi-the-ultimate-iot-hub/9. https://rasspberrypi.wordpress.com/2012/09/16/
mosquitto-mqtt-on-raspberry-pi-broker-publish-and-subscribe-client/
10. http://docs.gadgetkeeper.com/display/docs/ Getting+Started