上一篇我們介紹了MQTT設(shè)備如何接入HomeAssistant(打卡智能家居之旅(2):設(shè)備接入HomeAssistant的方法),這一篇就給大家講一下Ai-M61/M62 開發(fā)板或者模組怎么通過編程來接入HomeAssistant。正式開始之前,我們先要確定擁有以下條件:
有一個(gè)Linux 系統(tǒng),推薦Ubunt20.04,能夠使用SSH進(jìn)行遠(yuǎn)程訪問
已經(jīng)搭建好的HomeAssistant 并且可以正常訪問(局域網(wǎng)或者公網(wǎng))
有一個(gè)MQTT服務(wù)器,并且可以連接
HomeAssistant 的MQTT集成已經(jīng)成功連接到MQTT 服務(wù)器
重中之重,有一塊帶有燈的Ai-M61/M62的開發(fā)板
確保自己已經(jīng)擁有以上條件,這次的帖子會(huì)從開發(fā)環(huán)境搭建開始講,一直到HomeAssistant 控制Ai-M61-Kit 開發(fā)板的藍(lán)燈,會(huì)有點(diǎn)長,請(qǐng)耐心看完。
1、開發(fā)環(huán)境搭建
很多同學(xué)可能疑惑,之前已經(jīng)有了開發(fā)環(huán)境搭建的帖子,為什么還要重新講?
因?yàn)檫@次的開發(fā)環(huán)境和之前的開發(fā)環(huán)境不一樣,雖然流程都差不多,但是有很多細(xì)節(jié)要注意的地方,為了大家都能夠跟著這次帖子順利點(diǎn)燈,還是重新講一遍比較好。
1.1 安裝依賴(適合沒有搭建過小安派開發(fā)環(huán)境的同學(xué),搭建過的請(qǐng)?zhí)^)
VScode登錄:
使用VScode 打開SSH 遠(yuǎn)程,如果不知道怎么連接請(qǐng)看:(四)零基礎(chǔ)開發(fā)小安派-Eyes-S1【入門篇】——Win下SSH連接Linux
1.2 Windows的PowerShell 的SSH 登錄:
在桌面摁住 鍵+鼠標(biāo)右鍵,選擇“在此處打開Powershell窗口”,然后在PowerShell 輸入指令:
ssh 用戶名@IP地址
例如:ssh [email protected]
回車輸入密碼即可登錄。
1.3 依賴安裝
登錄打開終端之后,手動(dòng)復(fù)制以下指令:
sudo apt-get install make gcc vim cmake git ninja-build -y
2、SDK克隆
因?yàn)楸举N主要面向國內(nèi)的同學(xué),所以git 首選使用gitee。
2.1 克隆SDK
找一個(gè)浪漫一點(diǎn)的路徑(這個(gè)很重要),運(yùn)行以下指令:
git clone https://gitee.com/Ai-Thinker-Open/AiPi-Open-Kits.git
成功如下:
2.2 拉取子模塊
使用指令進(jìn)入到SDK當(dāng)中,逐行運(yùn)行以下指令(一定要全部執(zhí)行成功):
cd AiPi-Open-Kits/
注意:git submodule update 就會(huì)開始更新倉庫的子模塊,時(shí)間會(huì)有點(diǎn)長,只要不報(bào)錯(cuò)都是正常的,耐心等待拉取完成:
2.3 設(shè)置SDK
使用指令把小安派的配置同步到SDK內(nèi)部,并設(shè)置編譯工具,逐行運(yùn)行以下指令(一定要全部執(zhí)行成功):
. update_sdk.sh . export.sh
成功如下:
2.4 編譯例程,驗(yàn)證SDK 是否搭建成功
逐行運(yùn)行以下指令(一定要全部執(zhí)行成功):
cd examples/blank/ make
編譯成功如下:
2.5 命令上燒錄測(cè)試程序
2.5.1 修改SDK的配置文件,實(shí)現(xiàn)先編譯再燒錄
推薦使用VScode 修改文件,在"AiPi-Open-Kits/bl61x_SDK/os這個(gè)路徑下找到:project.build打開project.build 之后,找到 第 55 行,先把 COM5 改成 : "/dev/ttyUSB0"。
picocom /dev/ttyUSB0 -b 2000000
改成的原因是,當(dāng)只有一個(gè)Ai-M61/M62開發(fā)板(或TTL工具)插入到ubuntu 中的時(shí)候,驅(qū)動(dòng)中會(huì)顯示 “/dev/ttyUSB0”,可以使用以下指令查看是否已經(jīng)插入:
ls /dev/ttyUSB*
運(yùn)行結(jié)果:
最后找到 找到 第 88 行,在"flash:" 后面加入:"build":
確保終端已經(jīng)在examples/blank/目錄,使用指令燒錄程序:
make flash
2.5.2 修改報(bào)錯(cuò)
這個(gè)時(shí)候肯定會(huì)報(bào)錯(cuò),而且一定是這樣的報(bào)錯(cuò)內(nèi)容:
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] - [Errno 2] No such file or directory: '/home/seahi/GDBS/AiPi-Open-Kits/examples/blank/../../bl61x_SDK/AiPi_bsp/board/bl616dk/config'/font?>
這時(shí)候,在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
然后把下面的內(nèi)容注釋掉(用# 號(hào)注釋):
[edata] filedir = ../../bl61x_SDK/AiPi_bsp/board/bl616dk/config/edata.bin address = 0x3e0000
修改后:
2.5.3 再次編譯燒錄 make flash
就能看到按鍵提示后,按一下開發(fā)板上的復(fù)位鍵就能燒錄:
2.6 命令行的log 查看
先安裝串口監(jiān)控工具:
sudo apt-get install picocom
安裝成功之后,使用指令:
picocom /dev/ttyUSB0 -b 2000000
運(yùn)行成功:
再按一次復(fù)位鍵之后,就能看到log了:
如果你也輸出了log,那恭喜你,現(xiàn)在只搭建好了開發(fā)環(huán)境,可以正式進(jìn)入下面的HomeAssistant 連接,?保持耐心?。
3、對(duì)接HomeAssistant
3.1 克隆對(duì)接例程
在終端使用 "cd" 指令進(jìn)入到 “example”目錄:
cd example
執(zhí)行克隆指令:
git clone https://gitee.com/Ai-Thinker-Open/HomeAssistant_example.git
成功如下:
你以為這樣就能直接編譯里面的例程了嗎?以我的風(fēng)格,怎么可能會(huì)這么簡(jiǎn)單。其實(shí)是這樣,我在做一個(gè)HomeAssistant的連接庫,例程會(huì)直接使用這個(gè)庫來連接HomeAssistant,為了確保各個(gè)例程使用的庫函數(shù)保持最新且一致,我不得不把庫以子模塊的形式存在于例程當(dāng)中。
所以,在還需要到例程倉庫里面拉取子模塊,逐行運(yùn)行以下指令(一定要全部執(zhí)行成功):
cd HomeAssistant_example/ git submodule init git submodule update
拉取成功:
3.2 新建連接程序
3.2.1 復(fù)制例程并且重命名
新建程序我建議直接復(fù)制原有的工程:HomeAssistant_basic,這個(gè)例程中有一個(gè)開關(guān)的實(shí)體,適合點(diǎn)燈,但是連接的服務(wù)器是安信可的MQTT服務(wù)器,只需要做一下簡(jiǎn)單的修改就可以實(shí)現(xiàn)連接了。你可以使用VS code 的復(fù)制粘貼功能(因?yàn)榇蠹叶家呀?jīng)知道了,所以我就不打算再講),也可以使用命令行 的"cp"指令(為了能夠正常運(yùn)行,建議命名和我的保持一致):
cp HomeAssistant_basic/ -r HomeAssistant_switch
復(fù)制結(jié)果如下:
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
如下:
一定要改好,不要再燒錄的時(shí)候回出錯(cuò)。
3.2.3 修改WiFi 連接
這個(gè)例程有一個(gè)簡(jiǎn)單的WiFi 連接,默認(rèn)連接的WiFi 是:
WiFi名稱:FAE@Seahi
備注:這個(gè)是筆者的路由器名稱和密碼,如果不修改的話,是不能正常連接網(wǎng)絡(luò)的。
VScode 找到 “HomeAssistant_example/HomeAssistant_switch/components/wifi”目錄下的“wifi_event.c”文件并打開,編輯界面找到 第 62 行 ,把:staWiFiConnect("FAE@Seahi", "fae12345678");里面的參數(shù)改成你自己的WiFi名稱和密碼,切記WiFi名稱一定是2.4GHz的:
staWiFiConnect(“WiFi名稱”, "密碼");
3.2.4 修改MQTT 配置
在例程當(dāng)中,MQTT配置使用的是默認(rèn)的MQTT參數(shù),這些默認(rèn)參數(shù)可以在 "Ai-M6x_HomeAssistant-C/HomeAssistant-C/"目錄中的 “homeAssistantDevConfig.h”文件中找到:
當(dāng)然,你可以直接修改配置文件里面相關(guān)宏定義,也可以在main.c 中修改參數(shù),所以就有兩種方法修改MQTT配置參數(shù)。
方法一:修改ha_device 結(jié)構(gòu)體參數(shù)
在 HomeAssistant_switch/main目錄中打開 main.c ,編輯頁下拉到第 75 行 ,回車添加以下內(nèi)容:
ha_device.mqtt_info.mqtt_clientID="Ai-M6X_Kit_Switch"; ha_device.mqtt_info.mqtt_host="你的服務(wù)器地址"; ha_device.mqtt_info.port=1883; ha_device.mqtt_info.mqtt_username="HomeAssistant_switch";
一定要記住,服務(wù)器地址要和HomeAssistant 上的MQTT連接的服務(wù)器地址保持一致,比如我的HomeAssistant 上MQTT連接的地址:
那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 相關(guān)宏定義(不推薦)
直接打開Ai-M6x_HomeAssistant-C/HomeAssistant-C/"目錄中的 “homeAssistantDevConfig.h”文件,然后修改宏定義后面的內(nèi)容。
不推薦的原因:homeAssistantDevConfig.h 文件是 HomeAssistant-C庫里面的內(nèi)置文件,一旦更新倉庫之后還需要重新配置一遍。你的程序就沒辦法按照之前的配置連接到正確的MQTT服務(wù)器上。
3.2.5 修改實(shí)體信息
原工程 HomeAssistant_basic 中的實(shí)體有個(gè)唯一的信息,它在你的HomeAssistant 中表示這個(gè)實(shí)體的ID,所以必須要修改,在 HomeAssistant_switch/main的main.c中找到第 38 行 ,把 .unique_id= "switch1"改成:
.unique_id = "switch_v1",
可以改成其他的數(shù)值,只要是確保唯一性就行,推薦使用MAC地址來賦值,像這樣:
static ha_sw_entity_t entity_sw1 = { .name = "開關(guān)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]);
然后就可以燒錄測(cè)試,查看連接狀況情況了,運(yùn)行:
cd HomeAssistant_switch
連接成功的LOG:
查看HomeAssistant 中的連接情況:
3.2.6 修改設(shè)備信息
當(dāng)然設(shè)備信息也是可以改的,只需要在MQTT 配置信息的下面加入以下配置:
ha_device.name="我的板子"; //設(shè)備名稱 ha_device.model="Ai-M61開發(fā)板";//模塊名稱 ha_device.manufacturer="取個(gè)名字真難";//產(chǎn)商名稱
添加之后如下:
重新燒錄上線之后,HomeAssistant 的設(shè)備信息:
4、控制一盞LED
4.1 GPIO驅(qū)動(dòng)編寫
我現(xiàn)在用的板子是AiPi-Eyes-DU 開發(fā)板,就按點(diǎn)亮RGB 的藍(lán)燈為例,RGB的藍(lán)燈接在了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);
實(shí)際代碼如下:
4.2 接收HomeAssistant 的控制指令并控制LED燈
在 main.c 中的第 29 行 ,ha_event_cb函數(shù),是庫中的HomeAssistant 事件回調(diào)函數(shù),當(dāng)我們?cè)贖omeAssistant 下發(fā)控制指令,會(huì)觸發(fā)回調(diào)。
控制燈的回調(diào)事件是:HA_EVENT_MQTT_COMMAND_SWITCH。
我們就在這個(gè)事件里,做點(diǎn)燈,在第 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);
結(jié)果如下:
燒錄驗(yàn)證:
4.3 在HomeAssistant 中加入開關(guān)按鈕
在概覽頁面選擇右上角的三個(gè)點(diǎn),然后選擇編輯儀表盤:
然后在右下腳選擇"添加卡片",在彈出里選擇"水平堆疊":
之后在水平堆疊卡片里選擇"實(shí)體"卡片:
接著在實(shí)體卡片里選擇"開關(guān)實(shí)體":
然后保存就行,在概覽中就多了一個(gè)開關(guān),這個(gè)就是控制開發(fā)板燈的開關(guān)。
5、添加更多開關(guān)實(shí)體
從 3.2.5 修改實(shí)體信息 這個(gè)小結(jié)可以知道,要添加多個(gè)開關(guān)實(shí)體,就在代碼需要定義多個(gè)開關(guān),而且開關(guān)的unique_id 必須保持唯一。創(chuàng)建完成之后,使用 "homeAssistant_device_add_entity" 函數(shù)進(jìn)行添加。下面就加多兩個(gè)開關(guān):
static ha_sw_entity_t entity_sw1 = { .name = "開關(guān)1", .icon = "mdi:power", .unique_id = "sw1", }; static ha_sw_entity_t entity_sw2 = { .name = "開關(guān)2", .icon = "mdi:power", .unique_id = "sw2", }; static ha_sw_entity_t entity_sw3 = { .name = "開關(guān)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);
這樣燒錄運(yùn)行之后,HomeAssistant 上的開發(fā)板這個(gè)設(shè)備就有三個(gè)開關(guān):
甩一個(gè)問題:
三個(gè)開關(guān)怎么識(shí)別只有開關(guān)1能控制藍(lán)燈?
審核編輯 黃宇
-
智能家居
+關(guān)注
關(guān)注
1933文章
9748瀏覽量
189594 -
SDK
+關(guān)注
關(guān)注
3文章
1065瀏覽量
47672 -
燒錄
+關(guān)注
關(guān)注
8文章
284瀏覽量
36157 -
MQTT
+關(guān)注
關(guān)注
5文章
669瀏覽量
23466
發(fā)布評(píng)論請(qǐng)先 登錄
求基于Cortex-M3與Android的智能家居控制系統(tǒng)解決方案
Ai-M61-32S(點(diǎn)燈)
三星Galaxy M62平板電腦再獲Wi-Fi認(rèn)證
高性能、低功耗、可驅(qū)屏,Ai-M61系列模組驅(qū)屏能力介紹

安信可Ai-M61/Ai-M62系列連接AWS亞馬遜云

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

基于Ai-M61模組打造一個(gè)智能魚缸水質(zhì)監(jiān)測(cè)系統(tǒng)
打卡智能家居之旅(2):設(shè)備接入HomeAssistant的方法

智能家居之旅(7):HomeAssistant開發(fā)板的RGB顏色

安信可Ai-M61/M62系列模組支持CAN接口了?

能和Ai-M61模組對(duì)話了?手搓一個(gè)ChatGPT 語音助手

評(píng)論