前言
之前所有寫的《智能家居之旅》帖子代碼都是基于Ai-M61來開發(fā)的,不少大佬跟我反饋說:
Ai-M61/62只用來連接MQTT太浪費(fèi)資源了,Ai-WB2更具性價(jià)比!
我覺得有道理,所以昨天就把HomeAssistant-C 給做了一次大改,提升了耦合性,目前倉庫的master分支也可以支持Ai-WB2了,順便再貼個(gè)庫的鏈接:
https://gitee.com/Ai-Thinker-Open/Ai-M6x_HomeAssistant-C
現(xiàn)在,跟著我來試試吧!
01 獲取Ai-WB2 SDK
SDK地址:https://gitee.com/Ai-Thinker-Open/Ai-Thinker-WB2
推薦使用git來克隆SDK:
Linux 開發(fā)環(huán)境請參考:Ai-WB2系列模組linux開發(fā)環(huán)境搭建Windows 開發(fā)環(huán)境請參考:【二次開發(fā)教程】Ai-WB2系列的eclipes搭建環(huán)境教程
務(wù)必先搭建好開發(fā)環(huán)境,并且能成功燒錄運(yùn)行。
我使用的是Linux 的開發(fā)環(huán)境,如果你已經(jīng)有Windows 的開發(fā)經(jīng)驗(yàn),也可以參考本貼來移植HomeAssistant-C ,歡迎分享你的Windows移植教程。
02 獲取HomeAssistant-C
HomeAssistant-C 只是一個(gè)連接庫,不能作為工程直接運(yùn)行,所以在獲取之前先找一個(gè)可運(yùn)行工程,我這里使用的是WiFi的連接例程:
cd Ai-Thinker-WB2/applications/wifi/station
1、復(fù)制 “station”文件夾下的"bouffalo.mk"文件到
"Ai-M6x_HomeAssistant-C" 下面:
2. 然后刪除"Ai-M6x_HomeAssistant-C"的"bouffalo.mk"文件的所有內(nèi)容,并添加以下內(nèi)容:
COMPONENT_ADD_INCLUDEDIRS :=./HomeAssistant-C COMPONENT_SRCDIRS := ./HomeAssistant-C COMPONENT_OBJS := $(patsubst %.c,%.o, $(COMPONENT_SRCS))
3.在"Makefile"文件添加以下內(nèi)容:
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
4. 在main.c 文件引用接口頭文件 :
#include "homeAssistantPort.h"
5. 修改使用Ai-WB2的宏定義
HomeAssistant-C 默認(rèn)使用了Ai-M6x 的接口,需要修改成Ai-WB2的,只在"homeAssistantPort.c"文件屏蔽掉"#define CONFIG_Ai_M6x",并添加"#define CONFIG_Ai_WB2":
#define CONFIG_Ai_WB2
完成這一步之后,就可以編譯了:
make -j32
編譯成功:
03 改代碼開始運(yùn)行
話不多說,直接復(fù)制:《智能家居之旅,第三站:Ai-M61/M62 接入HomeAssistant 實(shí)現(xiàn)點(diǎn)燈》中的測試代碼。
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服務(wù)器地址"; 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開發(fā)板"; //設(shè)備名稱 ha_device.model = "Ai-wb2開發(fā)板";//模塊名稱 ha_device.manufacturer = "取個(gè)名字真難";//產(chǎn)商名稱 homeAssistant_device_init(&ha_device, ha_event_cb);
3.2 并且在 main() 函數(shù)上面粘貼回調(diào)函數(shù)及內(nèi)容,這里定義了一個(gè)開關(guān)的實(shí)體:
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 = "開關(guān)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 修改需要連接的路由賬號及密碼
3.4 在獲取到IP地址之后,啟動(dòng)HomeAssistant 連接
在 "CODE_WIFI_ON_GOT_IP"事件下添加:
homeAssistant_device_start();
homeAssistant_device_start();
燒錄測試:make flash結(jié)果:
// 未完待續(xù)
我預(yù)測一下,會有人問:我不會Ai-WB2二次開發(fā),能不能做個(gè)AT指令的鏈接庫?
-
Linux
+關(guān)注
關(guān)注
87文章
11292瀏覽量
209323 -
智能家居
+關(guān)注
關(guān)注
1928文章
9553瀏覽量
184926 -
開發(fā)環(huán)境
+關(guān)注
關(guān)注
1文章
225瀏覽量
16609
原文標(biāo)題:?智能家居之旅(5):Ai-WB2 使用HomeAssistant-C庫接入HomeAssistant
文章出處:【微信號:安信可科技,微信公眾號:安信可科技】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論