专栏名称: 安信可科技
全球领先的联网模组、智能家居等物联网硬件方案提供商。
目录
51好读  ›  专栏  ›  安信可科技

​智能家居之旅(5):Ai-WB2 使用HomeAssistant-C库接入HomeAssistant

安信可科技  · 公众号  · 硬件  · 2024-06-14 18:11

主要观点总结

文章介绍了如何将HomeAssistant-C进行改进以支持Ai-WB2,详细阐述了如何获取并配置Ai-WB2 SDK和HomeAssistant-C,以及如何修改代码开始运行。文章还包含了一些关于开发环境和移植教程的信息。

关键观点总结

关键观点1: Ai-WB2相较于Ai-M61/62的优势及接入HomeAssistant的意义

Ai-WB2更具性价比,将HomeAssistant-C改进以支持Ai-WB2能够更充分利用Ai-WB2的资源,实现更高效、更便捷的智能家居控制。

关键观点2: 获取和配置Ai-WB2 SDK的步骤

包括获取SDK地址、推荐使用git来克隆SDK、配置开发环境等具体步骤。

关键观点3: 如何获取和配置HomeAssistant-C

包括复制“station”文件夹下的文件、修改“bouffalo.mk”文件内容、在“Makefile”文件添加内容等步骤。

关键观点4: 如何修改代码开始运行

包括添加homeAssisatnt_device_t变量、回调函数定义以及修改需要连接的路由账号和密码等步骤。

关键观点5: 关于开发环境和移植教程的信息

提供了关于Linux和Windows开发环境的搭建教程,以及移植HomeAssistant-C到Windows的教程链接。


正文

前言


之前所有写的《智能家居之旅》帖子代码都是基于Ai-M61来开发的,不少大佬跟我反馈说:


Ai-M61/62只用来连接MQTT太浪费资源了,Ai-WB2更具性价比!


我觉得有道理,所以昨天就把HomeAssistant-C 给做了一次大改,提升了耦合性,目前仓库的 master 分支也可以支持Ai-WB2了,顺便再贴个库的链接:

https://gitee.com/Ai-Thinker-Open/Ai-M6x_HomeAssistant-C


现在,跟着我来试试吧!



0 1
获取Ai-WB2 SDK


SDK地址: https://gitee.com/Ai-Thinker-Open/Ai-Thinker-WB2


推荐使用git来克隆SDK:


Linux 开发环境请参考: Ai-WB2系列模组linux开发环境搭建 Windows 开发环境请参考: 【二次开发教程】Ai-WB2系列的eclipes搭建环境教程


务必先搭建好开发环境,并且能成功烧录运行。


我使用的是Linux 的开发环境,如果你已经有Windows 的开发经验,也可以参考本贴来移植 HomeAssistant-C ,欢迎分享你的Windows移植教程。


0 2
获取HomeAssistant-C

HomeAssistant-C 只是一个连接库,不能作为工程直接运行,所以在获取之前先找一个可运行工程,我这里使用的是WiFi的连接例程:


cd Ai-Thinker-WB2/applications/wifi/station


1、复制 “ station ”文件夹下的" bouffalo.mk "文件到

" Ai-M6x_HomeAssistant-C " 下面:



2. 然后删除" Ai-M6x_HomeAssistant-C "的" bouffalo.mk "文件的所有内容,并添加以下内容:


COMPONENT_ADD_INCLUDEDIRS :=./HomeAssistant-CCOMPONENT_SRCDIRS := ./HomeAssistant-CCOMPONENT_OBJS := $(patsubst %.c,%.o, $(COMPONENT_SRCS))



3.在"Makefile"文件添加以下内容:


INCLUDE_COMPONENTS += axk_common tcp_transport http-parser axk_tls axk_mqtt cjson INCLUDE_COMPONENTS += Ai-M6x_HomeAssistant-CEXTRA_COMPONENT_DIRS += $(PROJECT_PATH)/Ai-M6x_HomeAssistant-C



4. 在main.c 文件引用接口头文件 :


#include "homeAssistantPort.h"

5. 修改使用Ai-WB2的宏定义

HomeAssistant-C 默认使用了Ai-M6x 的接口,需要修改成Ai-WB2的,只在" homeAssistantPort.c "文件屏蔽掉" #define CONFIG_Ai_M6x ",并添加"#define CONFIG_Ai_WB2":


#define CONFIG_Ai_WB2


完成这一步之后,就可以编译了:


make -j32


编译成功:



0 3
改代码开始运行

话不多说,直接复制:《 智能家居之旅,第三站:Ai-M61/M62 接入HomeAssistant 实现点灯 中的测试代码。


3.1 在main.c 文件的第 172 行 下面添加:


static homeAssisatnt_device_t ha_device;    ha_device.mqtt_info.mqtt_clientID = "Ai-WB2_Kit_Switch";    ha_device.mqtt_info.mqtt_host = "mqtt服务器地址";    ha_device.mqtt_info.port = 1883;    ha_device.mqtt_info.mqtt_username = "HomeAssistant_switch";    ha_device.mqtt_info.mqtt_password = "12345678";
ha_device.name = "我的Ai-WB2开发板"; //设备名称 ha_device.model = "Ai-wb2开发板";//模块名称 ha_device.manufacturer = "取个名字真难";//产商名称

homeAssistant_device_init(&ha_device, ha_event_cb);


3.2 并且在 main() 函数上面粘贴回调函数及内容,这里定义了一个开关的实体:


void ha_event_cb(ha_event_t event, homeAssisatnt_device_t* ha_dev){    switch (event)    {        case HA_EVENT_MQTT_CONNECED:            HA_LOG_I("<<<<<<<<<<  HA_EVENT_MQTT_CONNECED\r\n");            //一定要加static            static ha_sw_entity_t entity_sw1 = {                 .name = "开关1",                 .icon = "mdi:power",                 .unique_id = "ai-wb2_sw1",            };
homeAssistant_device_add_entity(CONFIG_HA_ENTITY_SWITCH, &entity_sw1); homeAssistant_device_send_status(HOMEASSISTANT_STATUS_ONLINE); homeAssistant_device_send_entity_state(CONFIG_HA_ENTITY_SWITCH, &entity_sw1, 0






请到「今天看啥」查看全文