前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >智能家居之旅(14):IoT Blufi配网工具新功能介绍

智能家居之旅(14):IoT Blufi配网工具新功能介绍

原创
作者头像
安信可科技
发布2024-09-05 14:23:37
680
发布2024-09-05 14:23:37
举报
文章被收录于专栏:智能家居学习

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

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

新功能介绍

新功能使用说明

数据格式

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

代码语言:javascript
复制
{
    "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。

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

数据解析

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

解析服务器地址
代码语言:javascript
复制
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);

解析端口号
代码语言:javascript
复制
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 的数据解析

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 新功能介绍
    • 新功能使用说明
      • 数据格式
        • 数据接收
          • 数据解析
            • 这些程序流程我就不解释,太简单了,不懂的话,自己去学一下 cjson 的数据解析
            相关产品与服务
            云开发 CloudBase
            云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档