目录
MQTT(一)C#使用 MQTTnet 快速实现 MQTT 通信(文末有完整Demo下载)
MQTT(三)Python客户端+net客户端+net服务端 简单通信
参考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
在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(三)Python客户端+net客户端+net服务端 简单通信
-
C#的阿里物联网平台
阿里物联网平台(一)Windows系统+VS2017 模拟设备端接入
阿里物联网平台(二).net 实现移动端(WEB、HTML)与设备端通讯
-
落地项目