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

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

3天内不再提示

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

AIoT行业洞察 来源:AIoT行业洞察 作者:AIoT行业洞察 2024-06-07 10:07 次阅读

上一篇我们介绍了MQTT设备如何接入HomeAssistant(打卡智能家居之旅(2):设备接入HomeAssistant的方法),这一篇就给大家讲一下Ai-M61/M62 开发板或者模组怎么通过编程来接入HomeAssistant。正式开始之前,我们先要确定拥有以下条件:

有一个Linux 系统,推荐Ubunt20.04,能够使用SSH进行远程访问

已经搭建好的HomeAssistant 并且可以正常访问(局域网或者公网)

有一个MQTT服务器,并且可以连接

HomeAssistant 的MQTT集成已经成功连接到MQTT 服务器

重中之重,有一块带有灯的Ai-M61/M62的开发板

确保自己已经拥有以上条件,这次的帖子会从开发环境搭建开始讲,一直到HomeAssistant 控制Ai-M61-Kit 开发板的蓝灯,会有点长,请耐心看完。

1、开发环境搭建

很多同学可能疑惑,之前已经有了开发环境搭建的帖子,为什么还要重新讲?

因为这次的开发环境和之前的开发环境不一样,虽然流程都差不多,但是有很多细节要注意的地方,为了大家都能够跟着这次帖子顺利点灯,还是重新讲一遍比较好。

1.1 安装依赖(适合没有搭建过小安派开发环境的同学,搭建过的请跳过)

VScode登录:

使用VScode 打开SSH 远程,如果不知道怎么连接请看:(四)零基础开发小安派-Eyes-S1【入门篇】——Win下SSH连接Linux

1.2 Windows的PowerShell 的SSH 登录:

在桌面摁住 键+鼠标右键,选择“在此处打开Powershell窗口”,然后在PowerShell 输入指令:

ssh 用户名@IP地址

例如:ssh seahi@192.168.16.102

回车输入密码即可登录。

1.3 依赖安装

登录打开终端之后,手动复制以下指令:

sudo apt-get install make gcc vim cmake git ninja-build -y

2、SDK克隆

因为本贴主要面向国内的同学,所以git 首选使用gitee。

2.1 克隆SDK

找一个浪漫一点的路径(这个很重要),运行以下指令:

git clone https://gitee.com/Ai-Thinker-Open/AiPi-Open-Kits.git

成功如下:

wKgaomZia1mANAk5AAB7Npr4BoI85.jpeg

2.2 拉取子模块

使用指令进入到SDK当中,逐行运行以下指令(一定要全部执行成功):

cd AiPi-Open-Kits/

注意:git submodule update 就会开始更新仓库的子模块,时间会有点长,只要不报错都是正常的,耐心等待拉取完成:

wKgZomZia1uAIHjaAADPPIq1a6c91.jpeg

2.3 设置SDK

使用指令把小安派的配置同步到SDK内部,并设置编译工具,逐行运行以下指令(一定要全部执行成功):

. update_sdk.sh

. export.sh

成功如下:

wKgaomZia1yAMT2iAAEITYJG2I088.jpeg

2.4 编译例程,验证SDK 是否搭建成功

逐行运行以下指令(一定要全部执行成功):

cd examples/blank/

make

编译成功如下:

wKgZomZia1yALREIAACnqbxF0dU27.jpeg

2.5 命令上烧录测试程序

2.5.1 修改SDK的配置文件,实现先编译再烧录

推荐使用VScode 修改文件,在"AiPi-Open-Kits/bl61x_SDK/os这个路径下找到:project.build打开project.build 之后,找到 第 55 行,先把 COM5 改成 : "/dev/ttyUSB0"。

picocom /dev/ttyUSB0 -b 2000000

改成的原因是,当只有一个Ai-M61/M62开发板(或TTL工具)插入到ubuntu 中的时候,驱动中会显示 “/dev/ttyUSB0”,可以使用以下指令查看是否已经插入:

ls /dev/ttyUSB*

运行结果:

wKgaomZia12AWidJAAAiECqPNPQ02.jpeg

最后找到 找到 第 88 行,在"flash:" 后面加入:"build":

wKgZomZia16AMrNTAAAhPX6ykY047.jpeg

确保终端已经在examples/blank/目录,使用指令烧录程序:

make flash

2.5.2 修改报错

这个时候肯定会报错,而且一定是这样的报错内容:

Built target combine

./../../bl61x_SDK/os//tools/bflb_tools/bouffalo_flash_cube/BLFlashCommand-ubuntu --interface=uart --baudrate=2000000 --port=/dev/ttyUSB0 --chipname=bl616 --cpu_id= --config=flash_prog_cfg.ini

[10:22:46.164] - Serial port is /dev/ttyUSB0

[10:22:46.164] - ==================================================

[10:22:46.164] - [< font color="#ff0000" >Errno 2] No such file or directory: '/home/seahi/GDBS/AiPi-Open-Kits/examples/blank/../../bl61x_SDK/AiPi_bsp/board/bl616dk/config'< /font >

这时候,在blank(AiPi-Open-Kits/examples/blank) 例程的目录下打开 flash_prog_cfg.ini 文件,把 "filedir =./../bl61x_SDK/AiPi_bsp/board/bl616dk/config/Rx_boot2_*.bin" 改成:

filedir = ./build/build_out/boot2_*.bin

然后把下面的内容注释掉(用# 号注释):

[edata]

filedir = ../../bl61x_SDK/AiPi_bsp/board/bl616dk/config/edata.bin

address = 0x3e0000

修改后:

wKgaomZia16ANC2bAAAvb9E0-3023.jpeg

2.5.3 再次编译烧录 make flash

就能看到按键提示后,按一下开发板上的复位键就能烧录:

wKgZomZia1-AQYfyAACYTdKrLd849.jpeg

2.6 命令行的log 查看

先安装串口监控工具:

sudo apt-get install picocom

安装成功之后,使用指令:

picocom /dev/ttyUSB0 -b 2000000

运行成功:

wKgaomZia2CAc9KtAAB2zPNNL7I13.jpeg

再按一次复位键之后,就能看到log了:

wKgZomZia2GAewyOAAEMsvGLPvE37.jpeg

如果你也输出了log,那恭喜你,现在只搭建好了开发环境,可以正式进入下面的HomeAssistant 连接,❀保持耐心❀。

3、对接HomeAssistant

3.1 克隆对接例程

在终端使用 "cd" 指令进入到 “example”目录:

cd example

执行克隆指令:

git clone https://gitee.com/Ai-Thinker-Open/HomeAssistant_example.git

成功如下:

wKgaomZia2GAQqiHAACOn9CEsCc38.jpeg

你以为这样就能直接编译里面的例程了吗?以我的风格,怎么可能会这么简单。其实是这样,我在做一个HomeAssistant的连接库,例程会直接使用这个库来连接HomeAssistant,为了确保各个例程使用的库函数保持最新且一致,我不得不把库以子模块的形式存在于例程当中。

所以,在还需要到例程仓库里面拉取子模块,逐行运行以下指令(一定要全部执行成功):

cd HomeAssistant_example/

git submodule init

git submodule update

拉取成功:

wKgZomZia2KAY8NZAACPGR4vvFw89.jpeg

3.2 新建连接程序

3.2.1 复制例程并且重命名

新建程序我建议直接复制原有的工程:HomeAssistant_basic,这个例程中有一个开关的实体,适合点灯,但是连接的服务器是安信可的MQTT服务器,只需要做一下简单的修改就可以实现连接了。你可以使用VS code 的复制粘贴功能(因为大家都已经知道了,所以我就不打算再讲),也可以使用命令行 的"cp"指令(为了能够正常运行,建议命名和我的保持一致):

cp HomeAssistant_basic/ -r HomeAssistant_switch

复制结果如下:

wKgaomZia2KAEvN4AABLur2zGQI98.jpeg

3.2.2 修改烧录配置文件

打开 “HomeAssistant_switch” 下的 “flash_prog_cfg.ini” 文件,把第 26 行“filedir = ./build/build_out/HomeAssistant_basic_$(CHIPNAME)*.bin”改成:

filedir = ./build/build_out/HomeAssistant_switch_$(CHIPNAME)*.bin

如下:

wKgZomZia2OANaV8AAA5Q6Xah8o53.jpeg

一定要改好,不要再烧录的时候回出错。

3.2.3 修改WiFi 连接

这个例程有一个简单的WiFi 连接,默认连接的WiFi 是:

WiFi名称:FAE@Seahi

备注:这个是笔者的路由器名称和密码,如果不修改的话,是不能正常连接网络的。

VScode 找到 “HomeAssistant_example/HomeAssistant_switch/components/wifi”目录下的“wifi_event.c”文件并打开,编辑界面找到 第 62 行 ,把:staWiFiConnect("FAE@Seahi", "fae12345678");里面的参数改成你自己的WiFi名称和密码,切记WiFi名称一定是2.4GHz的:

staWiFiConnect(“WiFi名称”, "密码");

3.2.4 修改MQTT 配置

在例程当中,MQTT配置使用的是默认的MQTT参数,这些默认参数可以在 "Ai-M6x_HomeAssistant-C/HomeAssistant-C/"目录中的 “homeAssistantDevConfig.h”文件中找到:

wKgaomZia2SAc4xUAADw1ZT_6lA66.jpeg

当然,你可以直接修改配置文件里面相关宏定义,也可以在main.c 中修改参数,所以就有两种方法修改MQTT配置参数。

方法一:修改ha_device 结构体参数

在 HomeAssistant_switch/main目录中打开 main.c ,编辑页下拉到第 75 行 ,回车添加以下内容:

ha_device.mqtt_info.mqtt_clientID="Ai-M6X_Kit_Switch";

ha_device.mqtt_info.mqtt_host="你的服务器地址";

ha_device.mqtt_info.port=1883;

ha_device.mqtt_info.mqtt_username="HomeAssistant_switch";

一定要记住,服务器地址要和HomeAssistant 上的MQTT连接的服务器地址保持一致,比如我的HomeAssistant 上MQTT连接的地址:

wKgZomZia2SADcpSAABEx5hW6SM73.jpeg

那MQTT 配置就是这样:

ha_device.mqtt_info.mqtt_clientID="Ai-M6X_Kit_Switch";

ha_device.mqtt_info.mqtt_host="wx.ai-thinker.com";

ha_device.mqtt_info.port=1883;

ha_device.mqtt_info.mqtt_username="HomeAssistant_switch";

方法二:homeAssistantDevConfig.h 相关宏定义(不推荐)

直接打开Ai-M6x_HomeAssistant-C/HomeAssistant-C/"目录中的 “homeAssistantDevConfig.h”文件,然后修改宏定义后面的内容。

不推荐的原因:homeAssistantDevConfig.h 文件是 HomeAssistant-C库里面的内置文件,一旦更新仓库之后还需要重新配置一遍。你的程序就没办法按照之前的配置连接到正确的MQTT服务器上。

3.2.5 修改实体信息

原工程 HomeAssistant_basic 中的实体有个唯一的信息,它在你的HomeAssistant 中表示这个实体的ID,所以必须要修改,在 HomeAssistant_switch/main的main.c中找到第 38 行 ,把 .unique_id= "switch1"改成:

.unique_id = "switch_v1",

可以改成其他的数值,只要是确保唯一性就行,推荐使用MAC地址来赋值,像这样:

static ha_sw_entity_t entity_sw1 = {

.name = "开关1",

.icon = "mdi:power",

};

entity_sw1.unique_id = pvPortMalloc(16);

uint8_t STA_MAC[6] = { 0 };

aiio_wifi_sta_mac_get(STA_MAC);

sprintf(entity_sw1.unique_id, "sw_%02x%02x", STA_MAC[4], STA_MAC[5]);

然后就可以烧录测试,查看连接状况情况了,运行:

cd HomeAssistant_switch

连接成功的LOG:

wKgaomZia2WAAmedAABt8rvzQNM66.jpeg

查看HomeAssistant 中的连接情况:

wKgZomZia2WAC1A0AAMAIrJQrXs688.gif

3.2.6 修改设备信息

当然设备信息也是可以改的,只需要在MQTT 配置信息的下面加入以下配置:

ha_device.name="我的板子"; //设备名称

ha_device.model="Ai-M61开发板";//模块名称

ha_device.manufacturer="取个名字真难";//产商名称

添加之后如下:

wKgaomZia2aAdRPCAAB3UOg5xxY99.jpeg

重新烧录上线之后,HomeAssistant 的设备信息:

wKgZomZia2eAB9TPAABJ5NQoUUg12.jpeg

4、控制一盏LED

4.1 GPIO驱动编写

我现在用的板子是AiPi-Eyes-DU 开发板,就按点亮RGB 的蓝灯为例,RGB的蓝灯接在了GPIO15,跟着教程,写一份让GPIO15输出的代码:

struct bflb_device_s* gpio;//全局变量

gpio = bflb_device_get_by_name("gpio");

bflb_gpio_init(gpio, GPIO_PIN_15, GPIO_OUTPUT | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_0);

bflb_gpio_reset(gpio, GPIO_PIN_15);

实际代码如下:

wKgZomZia2iAVPZdAAB08eixss423.jpeg

4.2 接收HomeAssistant 的控制指令并控制LED灯

在 main.c 中的第 29 行 ,ha_event_cb函数,是库中的HomeAssistant 事件回调函数,当我们在HomeAssistant 下发控制指令,会触发回调。

控制灯的回调事件是:HA_EVENT_MQTT_COMMAND_SWITCH。

我们就在这个事件里,做点灯,在第 58 行 里加入:

if (ha_dev->entity_switch->command_switch->switch_state) {

bflb_gpio_set(gpio, GPIO_PIN_15);

}

else bflb_gpio_reset(gpio, GPIO_PIN_15);

结果如下:

wKgaomZia2mAG1_TAABkWlX3lGk16.jpeg

烧录验证:

wKgZomZia2qAAJO5AAgfu3967Ds010.gif

4.3 在HomeAssistant 中加入开关按钮

在概览页面选择右上角的三个点,然后选择编辑仪表盘:

wKgaomZia2yAE3NdAAAXjuMN_3866.jpeg

然后在右下脚选择"添加卡片",在弹出里选择"水平堆叠":

wKgaomZia2yAArH2AACue2TTFZI86.jpeg

之后在水平堆叠卡片里选择"实体"卡片:

wKgZomZia22AHiEFAAB8MiAhgYA34.jpeg

接着在实体卡片里选择"开关实体":

wKgaomZia22ARzlTAAB5AUWFrMw82.jpeg

然后保存就行,在概览中就多了一个开关,这个就是控制开发板灯的开关。

5、添加更多开关实体

从 3.2.5 修改实体信息 这个小结可以知道,要添加多个开关实体,就在代码需要定义多个开关,而且开关的unique_id 必须保持唯一。创建完成之后,使用 "homeAssistant_device_add_entity" 函数进行添加。下面就加多两个开关:

static ha_sw_entity_t entity_sw1 = {

.name = "开关1",

.icon = "mdi:power",

.unique_id = "sw1",

};

static ha_sw_entity_t entity_sw2 = {

.name = "开关2",

.icon = "mdi:power",

.unique_id = "sw2",

};

static ha_sw_entity_t entity_sw3 = {

.name = "开关3",

.icon = "mdi:power",

.unique_id = "sw3",

};

homeAssistant_device_add_entity(CONFIG_HA_ENTITY_SWITCH, &entity_sw1);

homeAssistant_device_add_entity(CONFIG_HA_ENTITY_SWITCH, &entity_sw2);

homeAssistant_device_add_entity(CONFIG_HA_ENTITY_SWITCH, &entity_sw3);

这样烧录运行之后,HomeAssistant 上的开发板这个设备就有三个开关:

wKgaomZia26AKFAPAAA5K0YcRtc26.jpeg

甩一个问题:

三个开关怎么识别只有开关1能控制蓝灯?


审核编辑 黄宇

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

    关注

    1928

    文章

    9556

    浏览量

    184958
  • SDK
    SDK
    +关注

    关注

    3

    文章

    1035

    浏览量

    45907
  • 烧录
    +关注

    关注

    8

    文章

    259

    浏览量

    35563
  • MQTT
    +关注

    关注

    5

    文章

    650

    浏览量

    22489
收藏 人收藏

    评论

    相关推荐

    【MiCOKit申请】智能家居

    装逼必有的,也是所有所谓智能家居的标配,初期只做简单的温湿度;2.智能电控,通过单独的智能配电盒(一排继电器就OK了)的接入实现家庭电闸的
    发表于 08-20 10:04

    求基于Cortex-M3与Android的智能家居控制系统解决方案

    网络技术进行搭建,最终实现通过手机对家居内部设备进行远程实时监控的目的。【关键词】智能家居 Cortex-M3 Android ZigBee智能家居
    发表于 08-05 07:57

    Ai-M61-32S(点灯

    Ai-M61-32S(点灯) 博主环境:win10 vscode 设备:usb数据线+Ai-M61-32S 工厂配置 首先vscode打开文件夹AiPi-Open-Kits,就会下图,该文
    发表于 11-21 09:11

    三星Galaxy M62平板电脑再获Wi-Fi认证

    继获得美国联邦通讯委员会(FCC)的认证之后,配备 7000 mAh 电池、支持 25W 快充的三星 Galaxy M62 平板电脑又拿到了 Wi-Fi 联盟的认证。认证信息表明该机的型号为
    的头像 发表于 01-21 16:29 2226次阅读

    高性能、低功耗、可驱屏,Ai-M61系列模组驱屏能力介绍

    Ai-M61系列是“WiFi 6+BLE5.3+Thread”高性能的嵌入式无线通信模组,该模组搭载BL618 芯片作为核心处理器,BL618 芯片系统包含带 FPU 和 DSP 的 32 位
    的头像 发表于 05-22 11:47 1513次阅读
    高性能、低功耗、可驱屏,<b class='flag-5'>Ai-M61</b>系列模组驱屏能力介绍

    Ai-M61/62系列的固件烧录指导

    本文介绍Ai-M61/62系列模组/开发板的固件烧录。
    的头像 发表于 07-02 11:23 1592次阅读
    <b class='flag-5'>Ai-M61</b>/<b class='flag-5'>62</b>系列的固件烧录指导

    安信可Ai-M61/Ai-M62系列连接AWS亚马逊云

    本文介绍Ai-M61/Ai-M62系列模组/开发板连接亚马逊云方法。 Ai-M61 系列模组(下称模组)是由深圳市安信可科技有限公司开发的 Wi-Fi6 蓝牙双模模组,搭载BL616芯片作为处理器
    的头像 发表于 02-04 15:51 866次阅读
    安信可<b class='flag-5'>Ai-M61</b>/<b class='flag-5'>Ai-M62</b>系列连接AWS亚马逊云

    安信可推出Wi-Fi 6+BLE5.3模组Ai-M62-M2-I

    随着Wi-Fi标准的演进,Wi-Fi6已走向大规模商用阶段。去年通过长期研发设计及反复打磨,安信可推出WiFi 6+BLE5.3+X模组——Ai-M61Ai-M62系列模组。今年再度上新Ai-M62-M2-I,小尺寸,Wi-F
    的头像 发表于 02-25 09:54 993次阅读
    安信可推出Wi-Fi 6+BLE5.3模组<b class='flag-5'>Ai-M62-M</b>2-I

    “WiFi 6+BLE5.3+Thread”,安信可Ai-M61系列模组选型

    Ai-M61系列是“WiFi 6+BLE5.3+Thread”高性能的嵌入式无线通信模组,该模组搭载BL618 芯片作为核心处理器,BL618 芯片系统包含带 FPU 和 DSP 的 32 位
    的头像 发表于 03-12 16:22 588次阅读
    “WiFi 6+BLE5.3+Thread”,安信可<b class='flag-5'>Ai-M61</b>系列模组选型

    基于Ai-M61模组打造一个智能鱼缸水质监测系统

    要保证合理的光照,水氧才能让小鱼顺利成长,这些对新手来说太难了!! 正好小安发现手头上的Ai-M61模组,可以打造一个智能鱼缸水质检测系统。来看看怎么做?   小安先查询了下产品的介绍: Ai-M61 系列模组是安信可科技开发的
    的头像 发表于 03-29 11:04 466次阅读

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

    上次我们在安装HomeAssistant的时候(打卡智能家居学习之旅(1):了解HomeAssistant),顺便把MQTT 集成安装好了。 为什么要装MQTT 集成呢?Wi-Fi 设
    的头像 发表于 06-07 09:36 1410次阅读
    打卡<b class='flag-5'>智能家居</b><b class='flag-5'>之旅</b>(2):设备<b class='flag-5'>接入</b><b class='flag-5'>HomeAssistant</b>的方法

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

    Ai-M61/62只用来连接MQTT太浪费资源了,Ai-WB2更具性价比!
    的头像 发表于 06-15 14:00 551次阅读
    <b class='flag-5'>Ai</b>-WB2使用<b class='flag-5'>HomeAssistant</b>-C库<b class='flag-5'>接入</b><b class='flag-5'>HomeAssistant</b>

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

    怎么上HomeAssistant,然后控制Ai-M61开发板的 RGB 灯的颜色,感觉这个项目用来控制家里的灯条就挺不错的。 彩灯实体创建 1.彩灯实体资源启用 彩灯实体在 HomeAssistant
    的头像 发表于 07-03 16:39 490次阅读
    <b class='flag-5'>智能家居</b><b class='flag-5'>之旅</b>(7):<b class='flag-5'>HomeAssistant</b>开发板的RGB颜色

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

    HomeAssistant的方法 智能家居之旅3):Ai-M61/M62
    的头像 发表于 07-30 10:33 278次阅读
    如何用一块免费的PCB板完成2元USB小夜灯控制器?

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

    智能家居之旅(1):了解HomeAssistant 智能家居之旅(2):设备接入
    的头像 发表于 09-05 10:27 381次阅读
    <b class='flag-5'>智能家居</b><b class='flag-5'>之旅</b>(15):HA传感器采集主板低功耗设计的遭遇