路由联盟嵌入式

2-MQTT ubuntu window下测试

2020-07-02  本文已影响0人  Creator_Ly

在学习MQTT的代码之前,先使用ubuntu实际测试一遍,加深其使用场景和过程。

mosquitto是一个开源的轻量级的C实现,完全兼容了MQTT 3.1和MQTT 3.1.1,在嵌入式系统上比较常用,这边介绍ubuntu上的安装使用,后面openwrt上也是使用mosquitto。

1. ubuntu上面安装mqtt

  1. 引入mosquitto仓库并更新
$sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa
$sudo apt-get update
  1. 执行以下命令安装mosquitto包
$sudo apt-get install mosquitto
  1. 安装mosquitto开发包
$sudo apt-get install libmosquitto-dev
  1. 安装mosquitto客户端
$sudo apt-get install mosquitto-clients
  1. 查询mosquitto是否正确运行
$sudo service mosquitto status

2. 发布订阅测试

mosquitto安装完之后,有两个命令行工具,发布mosquitto_pub和订阅mosquitto_sub

mosquitto_pub 命令参数说明

1. -d 打印debug信息
2. -f 将指定文件的内容作为发送消息的内容
3. -h 指定要连接的域名 默认为localhost
4. -i 指定要给哪个clientId的用户发送消息
5. -I 指定给哪个clientId前缀的用户发送消息
6. -m 消息内容
7. -n 发送一个空(null)消息
8. -p 连接端口号
9. -q 指定QoS的值(0,1,2)
10. -t 指定topic
11. -u 指定broker访问用户
12. -P 指定broker访问密码
13. -V 指定MQTT协议版本
14. --will-payload 指定一个消息,该消息当客户端与broker意外断开连接时发出。该参数需要与--will-topic一起使用
15. --will-qos Will的QoS值。该参数需要与--will-topic一起使用
16. --will-retain 指定Will消息被当做一个retain消息(即消息被广播后,该消息被保留起来)。该参数需要与--will-topic一起使用
17. --will-topic 用户发送Will消息的topic

mosquitto_sub 命令参数说明

1. -c 设定‘clean session’为无效状态,这样一直保持订阅状态,即便是已经失去连接,如果再次连接仍旧能够接收的断开期间发送的消息。
2. -d 打印debug信息
3. -h 指定要连接的域名 默认为localhost
4. -i 指定clientId
5. -I 指定clientId前缀
6. -k keepalive 每隔一段时间,发PING消息通知broker,仍处于连接状态。 默认为60秒。
7. -q 指定希望接收到QoS为什么的消息 默认QoS为0
8. -R 不显示陈旧的消息
9. -t 订阅topic
10. -v 打印消息
11. --will-payload 指定一个消息,该消息当客户端与broker意外断开连接时发出。该参数需要与--will-topic一起使用
12. --will-qos Will的QoS值。该参数需要与--will-topic一起使用
13. --will-retain 指定Will消息被当做一个retain消息(即消息被广播后,该消息被保留起来)。该参数需要与--will-topic一起使用
14. --will-topic 用户发送Will消息的topic

先打开一个终端,ubuntu订阅local/test

ubuntu:~$ mosquitto_sub -t "local/test" -h 127.0.0.1 -p 1883 -d -i ubuntu_client1
Client ubuntu_client1 sending CONNECT
Client ubuntu_client1 received CONNACK (0)
Client ubuntu_client1 sending SUBSCRIBE (Mid: 1, Topic: local/test, QoS: 0, Options: 0x00)
Client ubuntu_client1 received SUBACK
Subscribed (mid: 1): 0

ubuntu发送

ubuntu:~$ mosquitto_pub -t "local/test" -m "{test:111}" -h 127.0.0.1 -p 1883 -d -i ubuntu_client2
Client ubuntu_client2 sending CONNECT
Client ubuntu_client2 received CONNACK (0)
Client ubuntu_client2 sending PUBLISH (d0, q0, r0, m1, 'local/test', ... (10 bytes))
Client ubuntu_client2 sending DISCONNECT
linye@linye-ubuntu:~$

mosquitto_pub的终端发送后,mosquitto_sub终端就会收到如下信息

Client ubuntu_client1 sending PINGREQ
Client ubuntu_client1 received PINGRESP
Client ubuntu_client1 received PUBLISH (d0, q0, r0, m0, 'local/test', ... (10 bytes))
{test:111}

3. window下使用python测试

ubuntu的和window下的python进行互相测试。ubuntu订阅local/test1,发布local/test2,python订阅local/test2,发布local/test1。

ubuntu下面有mqtt服务器

linye@ubuntu:~$ ps -aux | grep mos
mosquit+    815  0.0  0.0  37352  2644 ?        Ss   08:51   0:02 /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf

先打开一个终端,ubuntu订阅local/test1

ubuntu:~$ mosquitto_sub -t "local/test2" -h 127.0.0.1 -p 1883 -d -i ubuntu_client1
Client ubuntu_client1 sending CONNECT
Client ubuntu_client1 received CONNACK (0)
Client ubuntu_client1 sending SUBSCRIBE (Mid: 1, Topic: local/test, QoS: 0, Options: 0x00)
Client ubuntu_client1 received SUBACK
Subscribed (mid: 1): 0

python订阅local/test2,发布local/test1

#!/usr/bin/python3
# -*- coding:utf-8 -*-
# Author: ye.lin
# Time: 2019/10/21
# Describe:

import logging
import json
import paho.mqtt.client as mqtt
from paho.mqtt.client import Client


MQTTHOST = "192.168.62.128"
MQTTPORT = 1883
mqttClient: Client = mqtt.Client()


def logging_init():
    logging.basicConfig(  # filename="log/test.log", # 指定输出的文件
        level=logging.DEBUG,
        format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s')

    return True


# 连接MQTT服务器
def on_mqtt_connect():

    conn_result = mqttClient.connect(MQTTHOST, MQTTPORT, 15)
    logging.info(conn_result)
    mqttClient.loop_start()
    # mqttClient.loop_forever()


# publish 消息
def on_publish(topic, payload, qos):
    mqttClient.publish(topic, payload, qos)


# 消息处理函数
def on_message_come(lient, userdata, msg):
    print(msg.topic + " " + ":" + str(msg.payload))


# subscribe 消息
def on_subscribe():
    mqttClient.subscribe("local/test2", 1)
    mqttClient.on_message = on_message_come  # 消息到来处理函数


if __name__ == '__main__':
    logging_init()

    on_mqtt_connect()
    publish_data = {
        "test": "1111",
        "clientId": "XXXXX"
    }
    publist_result = on_publish("local/test1", json.dumps(publish_data), 0)
    logging.info(publist_result)
    on_subscribe()
    while True:
        pass

再打开一个终端,ubuntu发送local/test2

ubuntu:~$ mosquitto_pub -t "local/test2" -m "{test:111}" -h 127.0.0.1 -p 1883 -d -i ubuntu_client2
Client ubuntu_client2 sending CONNECT
Client ubuntu_client2 received CONNACK (0)
Client ubuntu_client2 sending PUBLISH (d0, q0, r0, m1, 'local/test', ... (10 bytes))
Client ubuntu_client2 sending DISCONNECT
linye@linye-ubuntu:~$

3. window下使用eclipse paho软件测试

window下可以使用eclipse paho软件测试mqtt通讯

官网可以下载:https://www.eclipse.org/paho/

具体使用就不介绍了,看页面就大概知道了。

上一篇下一篇

猜你喜欢

热点阅读