MQTT(五)EMQ開源MQTT消息服務器 + 樹莓派python客戶端 + H5客戶端

目錄

MQTT(一)C#使用 MQTTnet 快速實現 MQTT 通信(文末有完整Demo下載)

MQTT(二)在windows64位上安裝Python環境

MQTT(三)Python客戶端+net客戶端+net服務端 簡單通信

MQTT(四)樹莓派開機自動運行Python客戶端

MQTT(五)EMQ開源MQTT消息服務器


參考EMQ文檔:http://docs.emqtt.cn/zh_CN/latest/install.html#windows

一、Windows 服務器安裝

Windows 10平臺程序包下載: http://emqtt.com/downloads/latest/windows10

程序包下載解壓後,打開 Windows 命令行窗口,cd 到程序目錄。

控制檯模式啓動:

進入解壓目錄執行: bin\emqttd console (我的win10執行打開2次cmd才能啓動,沒有驗證是不是我電腦問題)

出現以下界面說明啓動成功

二、Web 管理控制檯(Dashboard)

EMQ 消息服務器啓動後,會默認加載 Dashboard 插件,啓動 Web 管理控制檯。用戶可通過 Web 控制檯,查看服務器運行狀態、統計數據、客戶端(Client)、會話(Session)、主題(Topic)、訂閱(Subscription)、插件(Plugin)。

控制檯地址: http://127.0.0.1:18083,默認用戶: admin,密碼:public

_images/dashboard.png

在Websocket菜單可以可以進行測試,登錄、訂閱, 查看從其他客戶端發來的消息

三、H5客戶端測試

頁面引用 jquery.js 和 mqttws31.js

連接服務器(30.77爲mqtt服務器ip)

<script>
    
    
    jQuery(function ($) {

        //mqtt連接服務
        mqttConnect();

    })

   /*
   * connect mqtt server
   * 2018.03.30 pw
   */
    function mqttConnect() {
        client = new Paho.MQTT.Client("172.16.30.77", Number(8083), "1234564");//建立客戶端實例

        client.connect({ onSuccess: onConnect });//連接服務器並註冊連接成功處理事件
        function onConnect() {
            console.log("onConnected");
            document.getElementById("testId").innerHTML = "onConnected";
            client.subscribe("/topic");//訂閱主題
        }
        client.onConnectionLost = onConnectionLost;//註冊連接斷開處理事件
        client.onMessageArrived = onMessageArrived;//註冊消息接收處理事件
    }

   /*
   *  mqtt斷開連接
   * 2018.03.30 pw
   */
    function onConnectionLost(responseObject) {
        if (responseObject.errorCode !== 0) {
            console.log("onConnectionLost:" + responseObject.errorMessage);
            console.log("連接已斷開");
        }
    }

   /*
   * mqtt 接收消息
   * 2018.03.30 pw
   */
    function onMessageArrived(message) {
        console.log("收到消息:" + message.payloadString);
        document.getElementById("testId").innerHTML = message.payloadString + "<br>" + document.getElementById("testId").innerHTML;
    }

   /*
   * mqtt發送消息
   * 2018.03.30 pw
   *
   * destination說明, "/deviceId"
   * item說明, 燈:light ,空氣進化器:air
   * 例: mqttSend("/01-001-0001", "light:0");
   */
    function mqttSend(destination, txt) {
        txt = txt.toString();
        if (txt != "") {
            message = new Paho.MQTT.Message(txt);
            message.destinationName = destination;
            client.send(message);
        }
    }


    /*
    * 手動控制 
    * 2017.09.21 pw
    */
    function control(checkbox) {

        switch (checkbox.name) {
            case "control1":
                //綠化噴灌
                if (checkbox.checked)
                    sendInstruction("control1", 1);//開
                else
                    sendInstruction("control1", 0);//關
                break;
            case "control2":
                //雨水淨化
                if (checkbox.checked)
                    sendInstruction("control2", 1);//開
                else
                    sendInstruction("control2", 0);//關
                break;
            case "control3":
                //模塊補水
                if (checkbox.checked)
                    sendInstruction("control3", 1);//開
                else
                    sendInstruction("control3", 0);//關
                break;
            case "control4":
                //模塊排水
                if (checkbox.checked)
                    sendInstruction("control4", 1);//開
                else
                    sendInstruction("control4", 0);//關
                break;
            default:
        }
    }

    /*
    * 發送指令 
    * 2017.09.21 pw
    */
    function sendInstruction(controlName,controlValue) {
        
        switch (controlName) {
            case "control1": //燈
                mqttSend("/01-001-0001", "light:"+controlValue);
                break;
            case "control2": //空氣進化器
                mqttSend("/01-001-0001", "air:"+controlValue);
                break;
            default:
                break;
        }

    }
</script>

H5發送消息後,控制檯收到消息

控制檯發送消息,H5頁面收到消息

四、樹莓派Python客戶端 和 H5客戶端測試

樹莓派安裝 paho-mqtt ,運行python代碼

pip install paho-mqtt

python代碼

#coding=utf-8
#!/usr/bin/python


import RPi.GPIO as GPIO 
import sys
import paho.mqtt.client as mqtt
import time

#LED begin

GPIO_LIGHT = 27 #燈,設置GPIO18爲電流輸出
GPIO_ARI = 22   #空氣過濾器,設置GPIO19爲電流輸出

GPIO.setmode(GPIO.BCM)   #設置GPIO模式,BCM模式在所有數碼派通用
GPIO.setup(GPIO_LIGHT, GPIO.OUT)   #設置GPIO18爲電流輸出
GPIO.setup(GPIO_ARI, GPIO.OUT)   #設置GPIO18爲電流輸出

#GPIO輸出

def on_gpio(gpioIndex,value):
    
    if value == 0:
        GPIO.output(gpioIndex, GPIO.LOW)   #GPIO18 輸出3.3V
    elif value == 1:
        GPIO.output(gpioIndex, GPIO.HIGH)    #GPIO18 輸出0V
   
    time.sleep(0.05)   #程序控制流程睡眠0.05秒

#LED end

#MQTT begin
#連接
def on_connect(client, userdata, flags, rc):
    print("Connected with result code "+str(rc)+'\n')

#接收消息
def on_message(client, userdata, msg):
    valueStr = bytes.decode(msg.payload)
    print(msg.topic+" " + valueStr + '\n')
    valueArr = valueStr.split(":",1) #valueArr[0]:項目 , valueArr[1]:值
    print(valueArr[0]+'\n')
    print(valueArr[1]+'\n')
    
    item = valueArr[0]
    value = valueArr[1]

    if item == "light":
        on_gpio(GPIO_LIGHT,int(value))
    elif item == "air":
        on_gpio(GPIO_ARI,int(value))
    

client1 = mqtt.Client()
client1.username_pw_set("admin", "public")   #username: marshal | password: 123456
client1._client_id = "/01-001-0001"        #客戶端id

client1.on_connect = on_connect
client1.on_message = on_message

#MQTT end


#HOST = "127.0.0.1"    #IP address of broker
HOST = "172.16.30.77"

client1.connect_async(HOST)

client1.loop_start()  #client1 runs a thread at background

time.sleep(1)

client1.subscribe("/01-001-0001")

i=0

while(True):

    i = i+1
    print(i)
    #client1.publish('/topic',i)  #發佈消息
    time.sleep(1)

    '''
    inputStr = input()
    if inputStr == "exit":
        sys.exit()
    '''


client1.loop_stop()

print("end")

樹莓派python客戶端接收到來自H5的消息


pw的其他原創文章導航

  • C#的MQTT系列

MQTT(一)C#使用 MQTTnet 快速實現 MQTT 通信(文末有完整Demo下載)

MQTT(二)在windows64位上安裝Python環境

MQTT(三)Python客戶端+net客戶端+net服務端 簡單通信

MQTT(四)樹莓派開機自動運行Python客戶端

MQTT(五)EMQ開源MQTT消息服務器

  • C#的阿里物聯網平臺

阿里物聯網平臺(一)Windows系統+VS2017 模擬設備端接入

阿里物聯網平臺(二).net 實現移動端(WEB、HTML)與設備端通訊

  • 落地項目

落地項目-智慧海綿城市

落地項目-智能焊機,鋼塑管行業物聯網應用


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章