【物联网】基于树莓派的物联网开发【21】——MQTT获取树莓派传感器数据广播实战

场景介绍

今天程序猫带领大家如何获取树莓派传感器温湿度数据,并用MQTT进行广播。

实现过程

启动MQTT服务

1、终端启动Mosquitto服务

sudo systemctl start mosquitto

2、设置服务开机自动启动

sudo systemctl enable mosquitto

硬件连接

树莓派4b连接GPIO引脚与DHT11传感器;

硬件只涉及树莓派、DHT11传感器。

DHT11的信号引脚连接树莓派的GPIO17, DHT11的Vdd(+)和GND引脚(-)分别连接树莓派的电源正极和GND引脚。

实现思路

1、通过树莓派GPIO来连接并控制DHT11传感器,获得温度,湿度数据;
2、使用MQTT将树莓派所获取的温度与湿度数据广播;
3、订阅MQTT服务器的广播获取湿度与温度数据;

链接MQTTX客户端

配置MQTT基础信息,填写ip地址,默认端口1883

如果连接成功,则会弹出已连接

添加订阅主题

配置主题名Topic

读取传感器数据并发送到MQTT

编写脚本代码sensor_demo.py

1、配置MQTT :服务器地址 ,端口号,主题

2、传感器引脚配置

3、读取传感器数据

4、向MQTT发送消息

bash 复制代码
import time
import board
import adafruit_dht
from datetime import datetime
import paho.mqtt.client as mqtt
import json

# MQTT配置
broker = "192.168.137.31"
port = 1883
topic = "DHT11_message"

# 传感器引脚配置
SENSOR_PIN = board.D17      # 使用CircuitPython标准命名(物理引脚11)

# SENSOR_PIN = board.GPIO17 # 替代:树莓派专用GPIO命名

# 初始化MQTT客户端
client = mqtt.Client()
client.connect(broker, port)

try:
    # 添加 use_pulseio=False 参数
    dhtDevice = adafruit_dht.DHT11(SENSOR_PIN, use_pulseio=False)

    print("传感器初始化成功,开始数据采集......")

    while True:
        try:
            # 读取温湿度数据
            temperature = dhtDevice.temperature
            humidity = dhtDevice.humidity

            # 检查有效读数
            if temperature is None or humidity is None:
                raise RuntimeError("读取到无效值")

            # 准备MQTT消息
            recDate = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
            msg = json.dumps({
                'Tem': temperature,
                'Hum': humidity,
                'Date': recDate
            })

            # 发送消息
            result = client.publish(topic, msg)
            if result[0] == mqtt.MQTT_ERR_SUCCESS:
                print(f"✓ [{recDate}] 发送成功: {msg}")
            else:
                print(f"✗ 发送失败,错误码: {result[0]}")

        except RuntimeError as e:
            print(f"传感器读取错误: {e}")
        except Exception as e:
            print(f"意外错误: {e}")

        time.sleep(10.0)  # 采集间隔10s

except KeyboardInterrupt:
    print("程序被用户终止")
except RuntimeError as e:
    print(f"初始化失败: {e}")
    exit(1)
finally:
    # 清理资源
    if 'dhtDevice' in locals():
        dhtDevice.exit()
    client.disconnect()
    print("资源已释放")

进入虚拟环境

树莓派终端输入命令:

bash 复制代码
source adafruit_env/bin/activate

运行脚本

控制台输入命令

bash 复制代码
python3  sensor_demo.py

控制台可以看到数据采集OK

订阅MQTT服务器的广播获取

打开MQTT客户端,看到接收消息成功。

相关推荐
2601_954526755 小时前
【硬核架构】打破 IT 与 OT 的数据孤岛!基于 Rust 异步协程的工业 IoT 网关重构,兼谈顶级自动化智能仪表厂家选型指南
物联网·架构·rust
厦门辰迈智慧科技6 小时前
露天矿山高边坡综合监测与预警体系解决方案
物联网·矿山监测·矿山高边坡监测·露天矿山监测
microrain6 小时前
从设备孤岛到智能协同:SagooIoT场景联动实战解析
物联网·golang·sagooiot
国科安芯7 小时前
空间机电一体化:AS32S601型抗辐射MCU在卫星推进与执行机构控制中的关键技术研究
单片机·嵌入式硬件·物联网·机器人·云计算
玩转4G物联网1 天前
FS800DTU 新品上线|免费使用 DMP 设备管理平台,支持远程批量配置 & OTA 升级
物联网·网络协议·tcp/ip·云平台·核心板·fs800dtu·iot管理平台
鉴生Eric1 天前
IoT基础设施产品商的未来:回归本质的三层能力
物联网
MetrixAeroCore1 天前
畜牧牛羊定位耳标物联网卡纽扣电池供电与休眠唤醒策略优化
物联网
MetrixAeroCore1 天前
执法记录仪实时图传物联网卡在群体性活动高并发下限速问题解决方案
物联网
智圣新创011 天前
存量团学系统效能跃升:智圣新创“青春科大”智慧团学平台二期升级的全周期建设参考
大数据·人工智能·物联网
liguojun20251 天前
智慧文体旅系统选哪家?豆米跳跳十年技术沉淀支持源码交付
java·大数据·人工智能·物联网·1024程序员节