前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >智能家居之旅(5):Ai-WB2 使用HomeAssistant-C库接入HomeAssistant

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

原创
作者头像
安信可科技
发布2024-08-16 14:26:34
970
发布2024-08-16 14:26:34

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

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

我觉得有道理,所以昨天就把HomeAssistant-C 给做了一次大改,提升了耦合性,

目前仓库的master分支也可以支持Ai-WB2了,顺便再贴个库的链接:https://gitee.com/Ai-Thinker-Open/Ai-M6x_HomeAssistant-C现在,跟着我来试试吧!

一、获取Ai-WB2 SDKSDK

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

我推荐使用git来克隆SDK:

Linux 开发环境请参考:Ai-WB2系列模组linux开发环境搭建

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

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

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

二、获取HomeAssistant-CHomeAssistant-C

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

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

复制 “station”文件夹下的"bouffalo.mk"文件到"Ai-M6x_HomeAssistant-C" 下面:  

  1. 然后删除"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 cjsonINCLUDE_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

编译成功:

三、改代码开始运行

话不多说,直接复制:智能家居之旅,第三站: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);            break;        case HA_EVENT_MQTT_DISCONNECT:            HA_LOG_I("<<<<<<<<<<  HA_EVENT_MQTT_DISCONNECT\r\n");            break;        case HA_EVENT_MQTT_COMMAND_SWITCH:            HA_LOG_I("<<<<<<<<<<  HA_EVENT_MQTT_COMMAND_SWITCH\r\n");            // LOG_I("switch addr =%p", ha_dev->entity_switch->command_switch);            HA_LOG_I(" switch %s is %s\r\n", ha_dev->entity_switch->command_switch->name, ha_dev->entity_switch->command_switch->switch_state?"true":"flase");            int ret = homeAssistant_device_send_entity_state(CONFIG_HA_ENTITY_SWITCH, ha_dev->entity_switch->command_switch, ha_dev->entity_switch->command_switch->switch_state);            if (ret!=-1)HA_LOG_I("%s send entity suceess,state=%s\r\n", ha_dev->entity_switch->command_switch->name, ha_dev->entity_switch->command_switch->switch_state?"true":"flase");            break;        default:            break;    }}

3.3 修改需要连接的路由账号及密码

3.4 在获取到IP地址之后,启动HomeAssistant 连接在 "CODE_WIFI_ON_GOT_IP"事件下面添加: 

homeAssistant_device_start();homeAssistant_device_start();

烧录测试:make flash

结果:

我预测一下,会有人问:我不会Ai-WB2二次开发,能不能做个AT指令的链接库? |

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档