树莓派 - MQTT

安装mosquitto

下载源代码包
wget http://mosquitto.org/files/source/mosquitto-1.5.tar.gz
解压
tar zxfv mosquitto-1.5.tar.gz
进入目录
cd mosquitto-1.5
编译
make
安装
sudo make install

安装问题

handle_connect.c:33:25: fatal error: uuid/uuid.h: No such file or directory
 #  include <uuid/uuid.h>

解决:

pi@raspberrypi:~/mosquitto-1.5 $ sudo apt-get install uuid-dev

找不到openssl/ssl.h
解决:sudo apt-get install libssl-dev

error while loading shared libraries: libmosquitto.so.1: cannot open shared object file: No such file or directory
解决:

sudo ln -s /usr/local/lib/libmosquitto.so.1 /usr/lib/libmosquitto.so.1
sudo ldconfig

在linux 虚拟机上也安装mosquitto, sudo apt install mosquitto

测试

这里写图片描述

在raspberryPi上运行mosquitto -v

pi@raspberrypi:~ $ mosquitto -v
1533737054: mosquitto version 1.5 starting
1533737054: Using default config.
1533737054: Opening ipv4 listen socket on port 1883.
1533737054: Opening ipv6 listen socket on port 1883.
1533737096: New connection from 192.168.0.197 on port 1883.
1533737096: New client connected from 192.168.0.197 as mosqpub|9828-ubuntu (c1, k60).
1533737096: No will message specified.
1533737096: Sending CONNACK to mosqpub|9828-ubuntu (0, 0)
1533737096: Received PUBLISH from mosqpub|9828-ubuntu (d0, q0, r0, m0, 'gpio', ... (20 bytes))
1533737096: Received DISCONNECT from mosqpub|9828-ubuntu
1533737096: Client mosqpub|9828-ubuntu disconnected.
1533737126: New connection from 192.168.0.197 on port 1883.
1533737126: New client connected from 192.168.0.197 as mosqsub|9829-ubuntu (c1, k60).
1533737126: No will message specified.
1533737126: Sending CONNACK to mosqsub|9829-ubuntu (0, 0)
1533737126: Received SUBSCRIBE from mosqsub|9829-ubuntu
1533737126:     gpio (QoS 0)
1533737126: mosqsub|9829-ubuntu 0 gpio
1533737126: Sending SUBACK to mosqsub|9829-ubuntu
1533737170: New connection from 192.168.0.197 on port 1883.
1533737170: New client connected from 192.168.0.197 as mosqpub|9832-ubuntu (c1, k60).
1533737170: No will message specified.
1533737170: Sending CONNACK to mosqpub|9832-ubuntu (0, 0)
1533737170: Received PUBLISH from mosqpub|9832-ubuntu (d0, q0, r0, m0, 'gpio', ... (20 bytes))
1533737170: Sending PUBLISH to mosqsub|9829-ubuntu (d0, q0, r0, m0, 'gpio', ... (20 bytes))
1533737170: Received DISCONNECT from mosqpub|9832-ubuntu
1533737170: Client mosqpub|9832-ubuntu disconnected.
1533737186: Received PINGREQ from mosqsub|9829-ubuntu
1533737186: Sending PINGRESP to mosqsub|9829-ubuntu
1533737228: New connection from 192.168.0.197 on port 1883.
1533737228: New client connected from 192.168.0.197 as mosqpub|9835-ubuntu (c1, k60).
1533737228: No will message specified.
1533737228: Sending CONNACK to mosqpub|9835-ubuntu (0, 0)
1533737228: Received PUBLISH from mosqpub|9835-ubuntu (d0, q0, r0, m0, 'gpio', ... (20 bytes))
1533737228: Sending PUBLISH to mosqsub|9829-ubuntu (d0, q0, r0, m0, 'gpio', ... (20 bytes))
1533737228: Received DISCONNECT from mosqpub|9835-ubuntu
1533737228: Client mosqpub|9835-ubuntu disconnected.
1533737235: New connection from 192.168.0.197 on port 1883.
1533737235: New client connected from 192.168.0.197 as mosqpub|9836-ubuntu (c1, k60).
1533737235: No will message specified.
1533737235: Sending CONNACK to mosqpub|9836-ubuntu (0, 0)
1533737235: Received PUBLISH from mosqpub|9836-ubuntu (d0, q0, r0, m0, 'gpio', ... (20 bytes))
1533737235: Sending PUBLISH to mosqsub|9829-ubuntu (d0, q0, r0, m0, 'gpio', ... (20 bytes))
1533737235: Received DISCONNECT from mosqpub|9836-ubuntu
1533737235: Client mosqpub|9836-ubuntu disconnected.
1533737246: Received PINGREQ from mosqsub|9829-ubuntu
1533737246: Sending PINGRESP to mosqsub|9829-ubuntu

在PC机上分别开两个终端运行
mosquitto_sub -v -t gpio -h 192.168.0.135

mosquitto_pub -t gpio -h 192.168.0.135 -m "{\"pin\":17,\"value\":0}"

树莓派的IP地址为192.168.0.135.

发布者发布数据:

~$ mosquitto_pub -t gpio -h 192.168.0.197 -m "{\"pin\":17,\"value\":0}"
~$ mosquitto_pub -t gpio -h 192.168.0.135 -m "{\"pin\":17,\"value\":0}"
~$ mosquitto_pub -t gpio -h 192.168.0.135 -m "{\"pin\":17,\"value\":0}"

订阅者接收到数据:

~$ mosquitto_sub -v -t gpio -h 192.168.0.135
gpio {"pin":17,"value":0}
gpio {"pin":17,"value":0}
gpio {"pin":17,"value":0}

#
Reference
https://github.com/eclipse/mosquitto
https://blog.youkuaiyun.com/xukai871105/article/details/39255089

转载于:https://www.cnblogs.com/feiwatson/p/9478197.html

### 树莓派连接MQTT服务器的配置教程 树莓派可以作为物联网设备的核心控制器,用于连接到MQTT服务器以实现消息传递功能。以下是关于树莓派连接MQTT服务器的相关说明和示例代码。 #### 安装必要的软件包 为了使树莓派能够连接到MQTT服务器,需要安装`mosquitto-clients`以及Python中的`paho-mqtt`库。运行以下命令完成安装: ```bash sudo apt-get update sudo apt-get install mosquitto mosquitto-clients python3-pip pip3 install paho-mqtt ``` 以上命令会安装Mosquitto客户端工具集以及支持Python编程语言的Paho-MQTT库[^2]。 #### Python代码示例:连接至MQTT服务器并发布/订阅消息 下面是一个简单的Python脚本,展示如何让树莓派连接到指定的MQTT代理,并向特定主题发布消息或者监听来自某个主题的消息。 ```python import paho.mqtt.client as mqtt def on_connect(client, userdata, flags, rc): if rc == 0: print("Connected to broker") global connected # Use global variable connected = True # Signal connection else: print(f"Connection failed with code {rc}") def on_message(client, userdata, message): msg_payload = str(message.payload.decode("utf-8")) print(f"Message received: {msg_payload} from topic {message.topic}") broker_address="your_mqtt_broker_ip" port=1883 topic="test/topic" client = mqtt.Client() client.on_connect = on_connect #attach function to callback client.on_message = on_message #attach function to callback print("Connecting to broker", broker_address) client.connect(broker_address, port) client.loop_start() while not client.is_connected(): time.sleep(1) try: while True: value = input('Enter a message:') client.publish(topic,value) #publish except KeyboardInterrupt: client.disconnect() client.loop_stop() ``` 此段程序实现了基本的功能,包括建立与MQTT代理之间的TCP/IP通信链路、定义回调函数处理事件(如成功连接或接收新消息)、循环读取标准输入并向设定好的主题广播用户键入的内容等操作[^1]。 注意替换掉变量`broker_address`为你实际使用的MQTT服务提供商地址;同样也要调整好端口号(port),通常情况下默认为1883 (未加密传输) 或者8883 (TLS 加密)[^3]。 #### 常见问题排查指南 - 如果无法正常接入目标平台,请确认防火墙规则允许访问对应端口。 - 当遇到权限错误时,检查用户名密码认证机制是否被激活并且填写正确的凭证信息。 - 对于阿里云IoT套件这类特殊场景下需要注意其自定义Topic格式要求,比如需包含产品Key及DeviceName字段等等细节差异[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值