千家信息网

在树莓派上如何搭建智能家居网关

发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,这篇文章主要介绍了在树莓派上如何搭建智能家居网关,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。所需组件树莓派 3b+ 以及更高版本树莓
千家信息网最后更新 2025年12月01日在树莓派上如何搭建智能家居网关

这篇文章主要介绍了在树莓派上如何搭建智能家居网关,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

所需组件

树莓派 3b+ 以及更高版本

树莓派3代B+ 型是一款基于 ARM 的微型计算机主板,以 SD/MicroSD卡进行存储,该主板提供 USB 接口和以太网接口,可以连接键盘、鼠标和网线,该主板具备 PC 的基本功能,同时树莓派集成了 Wi-Fi,蓝牙以及大量 GPIO,是智能家居网关的理想选择。

EMQ X Edge

智能家居设备之间通信协议有 MQTTWi-Fi蓝牙 等,其中 MQTT 协议 是基于发布/订阅模式的物联网通信协议,它简单易实现、支持 QoS、报文小。在本文中我们将使 MQTT 协议作为智能家居设备之间的通信协议。

由于 Raspberry Pi 内存以及处理能力有限,我们选择由 EMQ 开源的 EMQ X Edge 作为 MQTT broker,EMQ X Edge 是轻量级的物联网边缘计算消息中间件,支持部署在资源受限的物联网边缘硬件。

EMQ X Kuiper

智能家居设备之间数据传输格式不同,并且数据存在波动性,我们需要对设备上报的数据进行处理。在本文中我们将使用由 EMQ 开源的 EMQ X Kuiper 对智能家居设备数据进行边缘化处理,EMQ X Kuiper 是基于 SQL 的轻量级边缘流式消息处理引擎,可以运行在资源受限的边缘设备上。

通过实时分析智能家居设备的各类数据,可以实现对设备的即时状态管理与控制。

其他组件

  • BH1750FVI 光照强度传感器

  • LED

  • 330 Ω电阻

  • 面包板, 跳线若干

项目示意图

环境搭建

电路连接

树莓派配置

我们选择 raspbian 8 作为树莓派操作系统,并选择 python 3 作为项目编程语言

# 创建名为 smart-home-hubs 的项目目录mkdir ~/smart-home-hubs

EMQ X Edge 安装与运行

$ cd ~/smart-home-hubs# 下载软件包$ wget https://www.emqx.io/downloads/edge/v4.1.0/emqx-edge-raspbian8-v4.1.0.zip$ unzip emqx-edge-raspbian8-v4.1.0.zip$ cd ./emqx# 运行 EMQ X Edge$ ./bin/emqx start

EMQ X Kuiper 安装与运行

$ cd ~/smart-home-hubs# 下载软件包$ wget https://github.com/emqx/kuiper/releases/download/0.4.2/kuiper-0.4.2-linux-armv7l.zip$ unzip kuiper-0.4.2-linux-armv7l.zip$ mv kuiper-0.4.2-linux-armv7l ./kuiper$ cd ./kuiper# 创建 rules 目录,用来存放规则文件$ mkdir ./rules# 运行 EMQ X Kuiper$ ./bin/server

代码编写

BH1750FVI 光照传感器数据上传

编写代码读取并计算 BH1750FVI 传感器光照强度数据,并以 1次/秒 的频率将光照强度数据通过 MQTT协议 发布到 smartHomeHubs/light 主题上。

# gy30.pyimport jsonimport timeimport smbusfrom paho.mqtt import client as mqtt# BH1750FVI configDEVICE = 0x23  # Default device I2C addressPOWER_DOWN = 0x00POWER_ON = 0x01RESET = 0x07CONTINUOUS_LOW_RES_MODE = 0x13CONTINUOUS_HIGH_RES_MODE_1 = 0x10CONTINUOUS_HIGH_RES_MODE_2 = 0x11ONE_TIME_HIGH_RES_MODE_1 = 0x20ONE_TIME_HIGH_RES_MODE_2 = 0x21ONE_TIME_LOW_RES_MODE = 0x23bus = smbus.SMBus(1)# MQTT broker configbroker = '127.0.0.1'port = 1883topic = 'smartHomeHubs/light'def read_light():    data = bus.read_i2c_block_data(DEVICE, ONE_TIME_HIGH_RES_MODE_1)    light_level = round((data[1] + (256 * data[0])) / 1.2, 2)    return light_leveldef connect_mqtt():    client = mqtt.Client(client_id='light_01')    client.connect(host=broker, port=port)    return clientdef run():    mqtt_client = connect_mqtt()    while True:        light_level = read_light()        publish_msg = {'lightLevel': light_level}        mqtt_client.publish(            topic,            payload=json.dumps(publish_msg)        )        print(publish_msg)        time.sleep(1)if __name__ == "__main__":    run()

配置 EMQ X Kuiper 流处理规则

我们将在 EMQ X Kuiper 上创建名为 smartHomeHubs 的流,并配置规则对光照强度数据进行实时分析,以实现对 LED 灯的控制。

本文中我们将计算光照强度平均值,当平均光照强度 持续 5 秒 小于 55 时开启 LED(大于 55 时关闭 LED)。

  • 创建流

    $ cd ~/smart-home-hubs/kuiper$ ./bin/cli create stream smartHomeHubs '(lightLevel float) WITH (FORMAT="JSON", DATASOURCE="smartHomeHubs/light")'


  • 编写开启 LED 规则(./rules/onLed.rule)

    当持续 5 秒钟平均光照强度小于 55 时,向 smartHomeHubs/led 主题发送 "{\"status\": \"on\"}" 消息打开 LED。

    {   "sql":"SELECT avg(lightLevel) as avg_light from smartHomeHubs group by TUMBLINGWINDOW(ss, 5) having avg_light < 55;",   "actions":[      {         "mqtt":{            "server":"tcp://127.0.0.1:1883",            "topic":"smartHomeHubs/led",            "sendSingle":true,            "dataTemplate": "{\"status\": \"on\"}"         }      }   ]}


  • 编写关闭 LED 规则(./rules/offLed.rule)

    当持续 5 秒钟平均光照强度大于 55 时,向 smartHomeHubs/led 主题发送 "{\"status\": \"off\"}" 消息关闭 LED。

    {   "sql":"SELECT avg(lightLevel) as avg_light from smartHomeHubs group by TUMBLINGWINDOW(ss, 5) having avg_light > 55;",   "actions":[      {         "mqtt":{            "server":"tcp://127.0.0.1:1883",            "topic":"smartHomeHubs/led",            "sendSingle":true,            "dataTemplate": "{\"status\": \"off\"}"         }      }   ]}


  • 添加规则

    $ ./bin/cli create rule onLed -f ./rules/onLed.rule $ ./bin/cli create rule onLed -f ./rules/offLed.rule


  • 查看规则

    $  ./bin/cli show rules


LED 灯控制

编写代码连接到 EMQ X Edge,并订阅 smartHomeHubs/led 主题。监听订阅的 MQTT 消息内容,当 status 为 on 时打开 LED,当 status 为 off 时关闭 LED。

# led.pyimport paho.mqtt.client as mqttimport RPi.GPIO as GPIOimport json# MQTT broker configbroker = '127.0.0.1'port = 1883topic = 'smartHomeHubs/led'def on_connect(client, userdata, flags, rc):    print("Connecting to the MQTT broker...")    if rc == 0:        print("Connection success")    else:        print("Connected with result code "+str(rc))    client.subscribe(topic)def on_message(client, userdata, msg):    payload = json.loads(msg.payload)    led_status = payload.get('status')    gpio_status = GPIO.input(4)    if led_status == 'on' and gpio_status == 0:        GPIO.output(4, True)        print('LED on')    elif led_status == 'off' and gpio_status == 1:        GPIO.output(4, False)        print('LED off')    else:        passdef run():    # connect MQTT broker    client = mqtt.Client()    client.on_connect = on_connect    client.on_message = on_message    client.connect(broker, 1883, 60)    # set Raspberry Pi GPIO pin    GPIO.setmode(GPIO.BCM)    GPIO.setwarnings(False)    GPIO.setup(4, GPIO.OUT)    try:        client.loop_forever()    except KeyboardInterrupt:        GPIO.cleanup()if __name__ == "__main__":    run()

运行测试

  1. python gy30.py 获取光照数据,并将数据上报到 **smartHomeHubs/light ** 主题。

  1. python led.py 订阅 smartHomeHubs/led 主题,监听 LED 控制信息。

  1. 当我们手动降低或升高光照时,可以看到 LED 灯同时也开启和关闭。

感谢你能够认真阅读完这篇文章,希望小编分享的"在树莓派上如何搭建智能家居网关"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

光照 数据 智能 智能家居 家居 强度 设备 树莓 规则 主题 运行 消息 边缘 处理 篇文章 控制 订阅 选择 网关 主板 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 管理学试卷软件开发 网络技术四级激活码 网络安全攻防一体技术研究 超星数据库怎么样论文 有独立软件开发的金融公司 河南久凯网络技术有限公司 网络安全和信息化工作主要做法 监狱网络安全管理岗位视力要求 计信息网络安全责任书 彭水网络安全周 广告数据库有哪些 软件开发具体做什么 日照软件开发公司招聘 网络安全教育视频人物逼真学生 加强视频网络安全管理 软件开发公司带团队工资如何 世界一流的网络安全大学 怎样找到相关平台的数据库 服务端数据库读取过程 js使用哪些数据库 网络安全手抄报的内容和图片 华为服务器湖北渠道商云空间 关于软件开发中会用到的图 张店制造业软件开发价格 数据库下单时间 苏州企业软件开发售后服务 基于hodoop的数据库 息网络安全的三个时 简历软件开发项目描述怎么写 新疆办公软件开发
0