0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Ai-WB2使用HomeAssistant-C库接入HomeAssistant

安信可科技 来源:安信可科技 2024-06-15 14:00 次阅读

前言

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

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

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

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

现在,跟着我来试试吧!

01 获取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移植教程。

02 获取HomeAssistant-C

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

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

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

"Ai-M6x_HomeAssistant-C" 下面:

92d6ffda-2a37-11ef-a4c8-92fbcf53809c.png

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

COMPONENT_ADD_INCLUDEDIRS :=./HomeAssistant-C
COMPONENT_SRCDIRS := ./HomeAssistant-C
COMPONENT_OBJS := $(patsubst %.c,%.o, $(COMPONENT_SRCS))

92e6b8bc-2a37-11ef-a4c8-92fbcf53809c.png

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

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

92fc15b8-2a37-11ef-a4c8-92fbcf53809c.png

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

编译成功:

9312441e-2a37-11ef-a4c8-92fbcf53809c.png

03 改代码开始运行

话不多说,直接复制:《智能家居之旅,第三站: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
");
            //一定要加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
");


            break;
        case HA_EVENT_MQTT_COMMAND_SWITCH:
            HA_LOG_I("<<<<<<<<<<  HA_EVENT_MQTT_COMMAND_SWITCH
");
            // LOG_I("switch addr =%p", ha_dev->entity_switch->command_switch);
            HA_LOG_I(" switch %s is %s
", 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
", ha_dev->entity_switch->command_switch->name, ha_dev->entity_switch->command_switch->switch_state?"true":"flase");


            break;
        default:
            break;
    }
}

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

934c77f6-2a37-11ef-a4c8-92fbcf53809c.png

3.4 在获取到IP地址之后,启动HomeAssistant 连接

在 "CODE_WIFI_ON_GOT_IP"事件下添加:

homeAssistant_device_start();

 homeAssistant_device_start();

935ecafa-2a37-11ef-a4c8-92fbcf53809c.png

烧录测试:make flash结果:

937a9bfe-2a37-11ef-a4c8-92fbcf53809c.png

// 未完待续

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11356

    浏览量

    210781
  • 智能家居
    +关注

    关注

    1931

    文章

    9622

    浏览量

    186761
  • 开发环境
    +关注

    关注

    1

    文章

    232

    浏览量

    16752

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

文章出处:【微信号:安信可科技,微信公众号:安信可科技】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    相关推荐

    Ai-WB2模组HTTP客户端POST请求方法

    需要准备的软硬件:Ai-WB2系列模组或者开发板,Type-C数据线。
    的头像 发表于 10-28 09:05 1831次阅读
    <b class='flag-5'>Ai-WB2</b>模组HTTP客户端POST请求方法

    Ai-WB2系列模组/开发板连接亚马逊云的方法介绍

    Ai-WB2系列模组/开发板一个
    的头像 发表于 01-13 15:11 1390次阅读
    <b class='flag-5'>Ai-WB2</b>系列模组/开发板连接亚马逊云的方法介绍

    飞腾派折腾初见成效,HomeAssistant顺利运行!

    ,提升易用性才能更好的使用。我们朋友在搞智能家居,前端时间还跟我沟通了一些关于智能家居控制主机的事情,他代理云起智能设备做智能家装项目,有时候客户会有些设备接入需求,HomeAssistant貌似
    发表于 11-09 11:37

    使用Tasmota和HomeAssistant自制Sonoff触控模块

    电子发烧友网站提供《使用Tasmota和HomeAssistant自制Sonoff触控模块.zip》资料免费下载
    发表于 07-21 09:54 2次下载
    使用Tasmota和<b class='flag-5'>HomeAssistant</b>自制Sonoff触控模块

    Ai-WB2模组与手机建立SPP连接,在UART-Bluetooth LE透传模式下传输数据

    需要准备的软硬件:Ai-WB2系列模组或者开发板,Type-C数据线,蓝牙调试助手。
    的头像 发表于 05-22 11:46 2009次阅读
    <b class='flag-5'>Ai-WB2</b>模组与手机建立SPP连接,在UART-Bluetooth LE透传模式下传输数据

    Ai-WB2系列模组中静态内存和动态内存的获取

    eclipse软件,bl_iot_sdk,Ai-WB2系列模组或者开发板,静态内存分析软件bouffalo_parse_tool-win32。
    的头像 发表于 09-18 09:48 587次阅读
    <b class='flag-5'>Ai-WB2</b>系列模组中静态内存和动态内存的获取

    Ai-WB2系列模组AT固件使用教程

    需要准备的软硬件:Ai-WB2系列模组或者开发板,Type-C数据线,安信可透传云服务器。
    的头像 发表于 09-24 11:19 3142次阅读
    <b class='flag-5'>Ai-WB2</b>系列模组AT固件使用教程

    安信可Ai-WB2系列模组基于TCP的MQTT连接服务器使用示例

    安信可Ai-WB2系列模组基于TCP的MQTT连接服务器使用示例
    的头像 发表于 10-16 10:21 1104次阅读
    安信可<b class='flag-5'>Ai-WB2</b>系列模组基于TCP的MQTT连接服务器使用示例

    Ai-WB2模组HTTP客户端HEAD和GET请求方法

    需要准备的软硬件:Ai-WB2系列模组或者开发板,Type-C数据线。
    的头像 发表于 10-21 16:37 697次阅读
    <b class='flag-5'>Ai-WB2</b>模组HTTP客户端HEAD和GET请求方法

    打卡智能家居之旅(2):设备接入HomeAssistant的方法

    Ai-WB2 或者Ai-M6x等模组)接入服务器必定要使用网络协议,而MQTT 是这些网络协议中最常用的。例如:阿里云的物联网平台,例如米家、鸿蒙等都有基于MQTT协议的接入方式,而
    的头像 发表于 06-07 09:36 1837次阅读
    打卡智能家居之旅(<b class='flag-5'>2</b>):设备<b class='flag-5'>接入</b><b class='flag-5'>HomeAssistant</b>的方法

    智能家居之旅(3):Ai-M61/M62 接入HomeAssistant 实现点灯

    上一篇我们介绍了MQTT设备如何接入HomeAssistant(打卡智能家居之旅(2):设备接入HomeAssistant的方法),这一篇就
    的头像 发表于 06-07 10:07 706次阅读
    智能家居之旅(3):<b class='flag-5'>Ai</b>-M61/M62 <b class='flag-5'>接入</b><b class='flag-5'>HomeAssistant</b> 实现点灯

    智能家居之旅(7):HomeAssistant开发板的RGB颜色

    上描述为 Light,HomeAssistant-C 上默认也是不开启的,所以需要在 homeAssistantDevConfig.h 当中把#define CONFI
    的头像 发表于 07-03 16:39 581次阅读
    智能家居之旅(7):<b class='flag-5'>HomeAssistant</b>开发板的RGB颜色

    如何用一块免费的PCB板完成2元USB小夜灯控制器?

    HomeAssistant的方法 智能家居之旅(3):Ai-M61/M62 接入HomeAssistant 实现点灯 智能家居之旅(4):神器在手,摸鱼我有!用Rd-01做个老板监视器
    的头像 发表于 07-30 10:33 377次阅读
    如何用一块免费的PCB板完成<b class='flag-5'>2</b>元USB小夜灯控制器?

    智能家居之旅(15):HA传感器采集主板低功耗设计的遭遇

    智能家居之旅(4):神器在手,摸鱼我有!用Rd-01做个老板监视器 智能家居之旅(5):Ai-WB2 使用HomeAssistant-C接入Ho
    的头像 发表于 09-05 10:27 464次阅读
    智能家居之旅(15):HA传感器采集主板低功耗设计的遭遇

    BW21-CBV-Kit如何接入HomeAssistant实时查看AI摄像头画面

    看过这么多关于 HomeAssistant 教程,应该有很多小伙伴已经搭建起自己的 HomeAssistant 了,HomeAssistant 还是很强大的,只要设备可以进行 RTSP 推流就可以在
    的头像 发表于 02-18 13:48 65次阅读
    BW21-CBV-Kit如何<b class='flag-5'>接入</b><b class='flag-5'>HomeAssistant</b>实时查看<b class='flag-5'>AI</b>摄像头画面