前言
之前所有寫的《智能家居之旅》帖子代碼都是基于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" 下面:
2. 然后刪除"Ai-M6x_HomeAssistant-C"的"bouffalo.mk"文件的所有內容,并添加以下內容:
COMPONENT_ADD_INCLUDEDIRS :=./HomeAssistant-C COMPONENT_SRCDIRS := ./HomeAssistant-C COMPONENT_OBJS := $(patsubst %.c,%.o, $(COMPONENT_SRCS))
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
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
編譯成功:
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 修改需要連接的路由賬號及密碼
3.4 在獲取到IP地址之后,啟動HomeAssistant 連接
在 "CODE_WIFI_ON_GOT_IP"事件下添加:
homeAssistant_device_start();
homeAssistant_device_start();
燒錄測試:make flash結果:
// 未完待續
我預測一下,會有人問:我不會Ai-WB2二次開發,能不能做個AT指令的鏈接庫?
-
Linux
+關注
關注
87文章
11292瀏覽量
209331 -
智能家居
+關注
關注
1928文章
9553瀏覽量
184941 -
開發環境
+關注
關注
1文章
225瀏覽量
16610
原文標題:?智能家居之旅(5):Ai-WB2 使用HomeAssistant-C庫接入HomeAssistant
文章出處:【微信號:安信可科技,微信公眾號:安信可科技】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論