我计划使用 Pico 和 Home Assistant 创建一个智能中心,以实现家庭自动化,并使用 Zigbee、蓝牙
转发: Pico Smart Home: Home Assistant and Raspberry Pi Pico for Smart Living
项目介绍
PICO智能家居
1. 简介
我计划使用 Pico 和 Home Assistant 创建一个智能中心,以实现家庭自动化,并使用 Zigbee、蓝牙、IR 和其他功能与其他 HA 设备集成。
这次我想介绍一下环境搭建的基本方面。
我将使用 Arduino 作为开发工具,使用 Raspberry Pi Pico 板作为硬件。 此外,我将利用 Pico Bricks 开发套件来集成各种类型的设备。 Pico Bricks 使用方便,无需单独购买和连接组件。 它还提供了一种添加和集成其他设备的简单方法。
Pico Bricks 和 Home Assistant RP2040 都使用 Pico W,这是一款基于 Wi-Fi 的板。 但是,如果您想使用有线以太网,则可以将其更改为 W5100S-EVB-Pico 板 (WIZnet)。 该板提供对有线以太网连接的支持。
2. 家庭助理设置
- 安装家庭助理
由于Linux是首选操作系统,因此如果您想在Windows PC上设置服务器,则需要使用虚拟机。 Home Assistant官方网站提供了必要的文件和手册,允许您根据自己的具体环境进行配置。
我正在使用 VMware 进行虚拟化。
对于 VMware,下页提供了包含图像的详细教程。 请参阅它以获取指导。
安装完成后看到提示就说明安装成功了!
*屏幕上显示的 IP 地址将被设置为 MQTT Broker IP。
我们尝试在浏览器中输入 http://homeassistant.local:8123/ 来访问该页面。
- 添加用户
现在,让我们继续添加用户帐户。 此处设置的用户 ID 和密码将直接用于 MQTT 通信。
[设置>人员>用户>添加用户] http://homeassistant.local:8123/config/users
如果您没有看到“用户”选项卡,请转到“配置文件设置”,然后选择“启用高级模式”
[配置文件>高级模式>启用] http://homeassistant.local:8123/profile
- MQTT 设置
接下来,转到附加商店,搜索 MQTT,然后添加 Mosquitto 代理。
[附加>附加商店] http://homeassistant.local:8123/hassio/store
3. Arduino设置
- 适用于 W5100S-EVB-Pico 的 Arduino
设置 W5100S-EVB-Pico 的环境。 请按照本网站的说明进行操作
W5100S-EVB-Pico with the Arduino IDE
让我们使用 Arduino 库管理器安装必要的库。 在此步骤中,我们将安装 Home Assistant 和 MQTT 库。
[草图>包含库>管理库>家庭助理集成]
[草图>包含库>管理库>MQTTPubSubClient]
完成这些步骤后,您应该具备基本功能。 当您继续开发时,请确保安装一路上可能需要的任何其他库。
4. LED开关控制
让我们使用此示例进行简单的基本功能测试。https://github.com/wiznetmaker/RP2040-HAT-HOMEASSISTANT-C/blob/main/examples/led_switch/led_switch.ino
现在基本设置已完成,让我们验证基本功能。 您可以参考下页的 Arduino 示例来获取指导。
W5100-EVB-Pico: GitHub - WIZnet-ArduinoEthernet/Ethernet: [WIZnet Modified] Ethernet Library for Arduino
- 设置MQTT信息
输入 Home Assistant MQTT 通信所需的信息。
#define BROKER_ADDR IPAddress(192, 168, 11, 103)
#define BROKER_USERNAME "scarlet_pico"
#define BROKER_PASSWORD "1234"
- 以太网信息
另外,请提供W5100S的控制引脚信息。
请注意,Pico Bricks 的引脚 20 用于蜂鸣器功能,因此如果您想使用蜂鸣器功能,请相应修改引脚设置和硬件
#define ETH_SPI_CS_PIN 17
#define ETH_RESET_PIN 20
- 硬件信息
另请配置 LED 和按钮引脚
#define LED_PIN 7
#define BUTTON_PIN 10
如果您想更改按钮检查时间,请修改下面的'define'语句。 当前按钮检查时间设置为 0.1 秒。
#define DEBOUNCE_TIME 100
- 家庭助理设备信息
让我们在 Home Assistant 中注册该设备。 完成编码并且系统正常运行后,它将自动注册在家庭助理页面上。 此处,HASwitch 的参数(在本例中为scalet_pico_led)是唯一ID。
HAMqtt HA_mqtt(client, device);
HASwitch led("scalet_pico_led");
注册一个回调函数,以便在订阅 MQTT 消息时执行命令。
led.onCommand(onSwitchCommand);
led.setName("Scarlet Pico LED");
从Arduino编译并上传固件,并在Home Assistant页面检查设备是否注册成功。 在设备信息页面上,您应该看到设备的配置名称和唯一 ID。
[设置 > 设备和服务 > 实体] http://homeassistant.local:8123/config/entities
当您点击该图标时,将显示开关屏幕,当您移动开关时,LED 将亮起。
这涵盖了基本功能。 事实上,我已经完成了开发,可以根据按钮输入控制 LED 并将其与 Home Assistant 集成。 但是,附加配置似乎存在问题,因为 Home Assistant 上的设备注册无法正常工作。 让我根据剩余的信息提供一个概述。 我将在下一个项目中再次解释它。
- 使用按钮控制 LED
将 LED 配置为根据自动化页面中的按钮操作闪烁
[设置 > 自动化和场景 > 创建自动化]
http://homeassistant.local:8123/config/automation/dashboard
在触发器配置中,选择【设备】,然后选择打开配置的按钮开关。
在操作配置中,选择[设备],然后选择打开配置的LED开关。
以下是将 Pico 上的按钮用作切换按钮的代码。
buttonState = digitalRead(BUTTON_PIN);
if (buttonState == HIGH && lastButtonState == LOW) {
ledState =! ledState;
setLedStateButton(ledState);
}
lastButtonState = buttonState;
LED 状态通过 MQTT Publish 发送。 LED 控制仅通过 Home Assistant 开关完成。 该按钮仅用作输入设备。 这种方法确保即使添加额外的设备,控制状态也不会发生冲突。
文件