美文网首页路由联盟嵌入式
2-MQTT ubuntu window下测试

2-MQTT ubuntu window下测试

作者: Creator_Ly | 来源:发表于2020-07-02 09:57 被阅读0次

    在学习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/

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

    相关文章

      网友评论

        本文标题:2-MQTT ubuntu window下测试

        本文链接:https://www.haomeiwen.com/subject/kqelqktx.html