2016年1月26日 星期二

如何在兩台RPI用wifi互相傳資料..... MQTT


先了解一下甚麼是MQTT

MQTT設計構想是採開放、簡單、輕量、易於實現同時支援離線訊息及訊息保留的功能。適用於受限制的環境,例如小頻寬、不穩定的網路或是資源有限的嵌入設備。其協定的特點如下:
1.使用發佈(Publish)/訂閱(Subscribe)訊息模式,提供一對多的訊息發佈。
2.使用 TCP/IP 提供網路連接。
3.具有多重QOS訊息傳輸,有三種用於訊息傳遞的服務品質::
4.使用網路頻寬小(2 bytes at minimum),減少通訊協定交換量。
5.使用 Last Will 和 Testament (最後留言)特性,可通知訂閱者用戶端與 MQTT 伺服器的連線異常中斷。




由上述的關係圖中,我們明白發佈者與訂閱者的中間需要一個平台,而這個平台最簡單的方式就是採用MQTT Broker

常見的MQTT Broker大致有Apache Apollo、HiveMQ、Mosca、Mosquitto、RabbitMQ、RSMB、...其比較如下表所示:
本篇文章的MQTT Broker則是採用Mosquitto,Mosquitto是一個實現了MQTT3.1協議的開源(BSD許可證)代理服務器,由MQTT協議創始人之一的Andy Stanford-Clark開發,它為我們提供了輕量級數據交換的解決方案。其官網為:http://mosquitto.org/,至目前為止他的最新版本為1.4。


先把兩台rpi 都燒錄好OS....這邊我發覺mosquitto 不支援  raspiban-jessie...

所以我改用  raspiban wheezy

接上wifi....

安裝必要的套件....

sudo apt-get install software-properties-common python-software-properties
sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa
sudo apt-get update
sudo apt-get install mosquitto mosquitto-clients python-mosquitto

先來個 Hello  的例子吧

接收端的RPI輸入
mosquitto_sub -d -t hello/world

傳輸端的RPI輸入
mosquitto_pub -d -t hello/world -m "Hello, MQTT. This is my first message."

然後你在接收端的RPI就會看到....."Hello, MQTT This ...."

接下來就是寫python 程式

先安裝必要的套件 screen

git clone git://git.eclipse.org/gitroot/paho/org.eclipse.paho.mqtt.python.git
cd org.eclipse.paho.mqtt.python
sudo python3 setup.py install
sudo python setup.py install
cd
sudo nano test3.py


寫一個 python 程式 test3.py.... run在接收端

import paho.mqtt.client as mqtt

def on_connect(client,userdata,flags,rc):
       print("connect with result code"+ str(rc))
       client.subscribe("hello world")

def on_message(client,userdata,msg):
      print(msg.topic+" "+str(msg.payload))
      message = str(msg.payload)
      if(message=="b'led")
             print("LED Yaaay")

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect("localhost",1883,60)
client.publish("hello/world","online")
client.loop_forever()

=======================================
sudo python3 test3.py


然後在傳輸端RPI 輸入
mosquitto_pub -d -t hello/world  "Led"

就會在接收端的RPI出現

LED Yaaay





[Create Screen Session]
sudo screen ­S [NAME]
[Re­attach/list Screen Session]
sudo screen ­r
[Re­attach to id Screen Session]
sudo screen ­r [id]








Reference : http://learn.linksprite.com/pcduino/linux-applications/how-to-install-mosquitto-mqtt-on-pcduino-ubuntu/
Reference : https://www.youtube.com/watch?v=OHEsy9oJEi0
Reference : http://mqtt.org/
Reference : http://cheng-min-i-taiwan.blogspot.tw/2015/03/raspberry-pimqtt-android.html
Reference : http://blog.maxkit.com.tw/2014/01/mqtt.html

沒有留言:

張貼留言