91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

在樹莓派上如何搭建智能家居網關

發布時間:2021-11-20 09:55:41 來源:億速云 閱讀:168 作者:小新 欄目:互聯網科技

這篇文章主要介紹了在樹莓派上如何搭建智能家居網關,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

所需組件

樹莓派 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.py
import json
import time

import smbus
from paho.mqtt import client as mqtt


# BH1750FVI config
DEVICE = 0x23  # Default device I2C address
POWER_DOWN = 0x00
POWER_ON = 0x01
RESET = 0x07
CONTINUOUS_LOW_RES_MODE = 0x13
CONTINUOUS_HIGH_RES_MODE_1 = 0x10
CONTINUOUS_HIGH_RES_MODE_2 = 0x11
ONE_TIME_HIGH_RES_MODE_1 = 0x20
ONE_TIME_HIGH_RES_MODE_2 = 0x21
ONE_TIME_LOW_RES_MODE = 0x23
bus = smbus.SMBus(1)

# MQTT broker config
broker = '127.0.0.1'
port = 1883
topic = '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_level


def connect_mqtt():
    client = mqtt.Client(client_id='light_01')
    client.connect(host=broker, port=port)
    return client


def 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.py
import paho.mqtt.client as mqtt
import RPi.GPIO as GPIO
import json


# MQTT broker config
broker = '127.0.0.1'
port = 1883
topic = '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:
        pass


def 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 燈同時也開啟和關閉。

在樹莓派上如何搭建智能家居網關

感謝你能夠認真閱讀完這篇文章,希望小編分享的“在樹莓派上如何搭建智能家居網關”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

黄浦区| 南平市| 涞源县| 农安县| 南宫市| 阿尔山市| 锡林郭勒盟| 红桥区| 永济市| 聂荣县| 读书| 萨嘎县| 龙川县| 安平县| 临海市| 富民县| 合肥市| 古浪县| 德化县| 合江县| 彰武县| 胶南市| 马山县| 息烽县| 抚顺市| 绥化市| 赤峰市| 宿迁市| 涟水县| 宝清县| 安徽省| 五台县| 定州市| 海淀区| 台北县| 嵩明县| 平阴县| 三明市| 涡阳县| 文成县| 昌吉市|