智能家居之旅,第十四站:安信可IOT Blufi配网工具新功能介绍

[复制链接]
查看421 | 回复9 | 2024-7-18 10:27:37 | 显示全部楼层 |阅读模式

安信可IOT 微信小程序

今天水一篇帖子,给大家介绍一下小程序配网工具-安信可IOT,昨天刚发布了新的版本,新增了服务器地址配置的功能。 可以说这个新功能,给我们带来了不少便利,特别是HomeAssistant固件使用这一块。 昨天(2024年7月17号)之前,安信可IOT小程序只能给大家提供配网程序,大家能够利用蓝牙功能给WiFi模块进行无线网络配置,但是随着DIY作品不断地更新,发现要给大家更加方便地使用固件地话,涉及TCP服务器和MQTT服务器地址配置只能通过AT指令来实现,在某些应用场合根本无法实现。

所以,就让前端工程师加了这个功能,在配网的时候,可以选择配置服务器地址

新功能介绍

新功能使用说明

image.png

数据格式

小程序下发的服务器配置数据是以json格式下发:

{
    "server_type":
    {
        "addr":"0.0.0.0",
        "port":"xxxxx"
    }
}
字段名 说明 示例
server_type 服务器类型 "tcp"
addr 服务器地址,支持IPV4地址和域名 "192.168.1.1"
port 服务器端口号 1883

例如:下发一个TCP服务器,地址为:192.168.3.1,端口号为:8888,则数据为:

{
   "tcp":
   {
       "addr":"192.168.3.1",
       "port":"8888"
   }
}

数据接收

数据接收就是设备端的了,但是前提是要使用Blufi 配网功能,在Ai-WB2的SDK(Ai-Thinker-WB2)当中,有Blufi的demo。

image.png

因为小程序下发的数据是通过Blufi的custom data(自定义数据)接口下发,在blufo demo当中的AXK_BLUFI_EVENT_RECV_CUSTOM_DATA事件,可以看到下发的服务器地址数据: image-1.png

数据解析

既然是json 数据,那只要引用cJSON.h 头文件,就能实现对服务器地址和端口号的解析,下面写了函数,大家做个参考

解析服务器地址

static char data_buff[128] = { 0 };

char* get_ip_addr_from_custom_data(const char* server_type, const char* custom_data)
{
    if (custom_data==NULL) {
        blog_error("custom_data is NULL");
        return NULL;
    }
    char* cjson_root = custom_data;
    cJSON* root = cJSON_Parse(cjson_root);

    if (root==NULL)
    {
        blog_error("%s is't json data", cjson_root);
        cJSON_Delete(root);
        return NULL;
    }
    cJSON* add_type = cJSON_GetObjectItem(root, server_type);
    if (add_type==NULL)
    {
        blog_error("%s not \"%s\" project ", cjson_root,server_type);
        cJSON_Delete(root);
        return NULL;
    }
    cJSON* addr = cJSON_GetObjectItem(add_type, "addr");
    if (addr==NULL)
    {
        blog_error("%s not \"addr\" project ", cjson_root);
        cJSON_Delete(root);
        return NULL;
    }
    memset(data_buff, 0, 128);
    strcpy(data_buff, addr->valuestring);
    cJSON_Delete(root);

    return data_buff;
}
函数说明 说明 示例
server_type 服务器类型,支持以下类型:tcp、udp和mqtt "tcp"
custom_data blufi 接收自定义数据 /
返回值:char* 返回服务器地址的指针 /

调用示例:

char* addr=get_ip_addr_from_custom_data("tcp",custom_data); printf("addr=%s\r\n",addr);

解析端口号

uint16_t get_port_from_custom_data(const char* server_type, const char* custom_data)
{
    if (custom_data==NULL) {
        blog_error("custom_data is NULL");
        return NULL;
    }
    char* cjson_root = custom_data;
    cJSON* root = cJSON_Parse(cjson_root);
    if (root==NULL)
    {
        blog_error("%s is't json data", cjson_root);
        cJSON_Delete(root);
        return NULL;
    }
    cJSON* add_type = cJSON_GetObjectItem(root, server_type);
    if (add_type==NULL)
    {
        blog_error("%s not \"%s\" project ", cjson_root,server_type);
        cJSON_Delete(root);
        return NULL;
    }
    cJSON* port_p = cJSON_GetObjectItem(add_type, "port");
    if (port_p==NULL)
    {
        blog_error("%s not \"port\" project ", cjson_root);
        cJSON_Delete(root);
        return NULL;
    }
    uint16_t port = atoi(port_p->valuestring);
    cJSON_Delete(root);
    return port;
}
函数说明 说明 示例
server_type 服务器类型,支持以下类型:tcp、udp和mqtt "tcp"
custom_data blufi 接收自定义数据 /
返回值:uint16_t 返回端口号,范围:0-65535 1883

调用示例:

uint16_t port=get_port_from_custom_data("tcp",custom_data); printf("port=%d\r\n",port);

这些程序流程我就不解释,太简单了,不懂的话,自己去学一下cjson的数据解析

本帖被以下淘专辑推荐:

回复

使用道具 举报

Francisliu | 2024-7-18 10:31:38 | 显示全部楼层
牛的不行
回复

使用道具 举报

业余菜狗 | 2024-7-18 10:31:41 来自手机 | 显示全部楼层
爱了爱了
回复

使用道具 举报

爱笑 | 2024-7-18 10:37:11 | 显示全部楼层
更新速度越来越快了
用心做好保姆工作
回复 支持 反对

使用道具 举报

IBelieve | 2024-7-18 14:17:24 | 显示全部楼层
点赞
回复

使用道具 举报

1084504793 | 2024-7-18 18:11:05 | 显示全部楼层
回复

使用道具 举报

iiv | 2024-7-21 18:44:23 | 显示全部楼层
莫哥🐮X
回复

使用道具 举报

WT_0213 | 2024-7-22 09:18:16 | 显示全部楼层
厉害
回复

使用道具 举报

bzhou830 | 2024-7-22 09:19:03 | 显示全部楼层
厉害
选择去发光,而不是被照亮
回复

使用道具 举报

USN | 2024-7-22 11:55:39 | 显示全部楼层
厉害
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则