发布 RT-Thread 软件包 bc28_mqtt

1、介绍

bc28_mqtt 是基于移远 BC28 模块 AT 固件的 MQTT 软件包,使用 UART 与 MCU 通信,目前实现了与阿里云物联网平台的连接。

从手册来看,BC35-G、BC28 和 BC95 的 AT 指令是兼容的,因此本软件包应该同时支持这三类模组。但是由于本人手上只有 BC28 模块,因此暂时无法验证,欢迎各位开发者参与验证。

GitHub 仓库:https://github.com/luhuadong/rtt-bc28-mqtt

1.1 特性

  • 支持掉线重连
  • 支持多实例
  • 线程安全

1.2 目录结构

名称 说明
docs 文档目录
examples 例子目录
inc 头文件目录
src 源代码目录

1.3 许可证

bc28_mqtt 软件包遵循 LGPL-2.1 许可,详见 LICENSE 文件。

1.4 依赖

  • RT-Thread 4.0+
  • AT 组件

2、获取 bc28_mqtt 软件包

使用 bc28_mqtt 软件包需要在 RT-Thread 的包管理器中选择它,具体路径如下:

RT-Thread online packages --->
    internet of things --->
        [*] BC28 MQTT: connect to Aliyun with Quectel BC28 model --->

保存配置参数后,使用 pkgs --update 命令更新包到 BSP 中。

3、使用 bc28_mqtt 软件包

3.1 版本说明

版本 说明
latest 目前支持 MQTT 连接阿里云物联网平台,将持续维护

目前处于公测阶段,建议开发者使用 latest 版本。

3.2 配置选项

目前有如下几个配置项:

配置项 数据类型 说明
AT client device name string AT Client 串口设备名称,如 uart3
Select baud rate int 串口波特率,可选 4800、9600、115200
Reset pin int BC28 复位引脚号
ADC pin int BC28 ADC 引脚号(暂时无效)
Product Key string 阿里云三元组信息
Device Name string 阿里云三元组信息
Device Secret string 阿里云三元组信息
Keep-alive time int MQTT 保活时间

4、API 说明

4.1 MQTT 功能接口

int bc28_mqtt_auth(void);
int bc28_mqtt_open(void);
int bc28_mqtt_close(void);
int bc28_mqtt_connect(void);
int bc28_mqtt_disconnect(void);
int bc28_mqtt_subscribe(const char *topic);
int bc28_mqtt_unsubscribe(const char *topic);
int bc28_mqtt_publish(const char *topic, const char *msg);

4.2 网络附着和去附着

int at_client_attach(void);
int at_client_deattach(void);

4.3 网络初始化接口

int bc28_init(void);
int build_mqtt_network(void);
int rebuild_mqtt_network(void);

5、应用示例

5.1 配置软件包

在 RT-Thread Env 环境下执行 pkgs --upgrade 更新软件包索引,在对应的 BSP 下执行 scons --menuconfig 配置 bc28_mqtt 软件包。

发布 RT-Thread 软件包 bc28_mqtt_第1张图片

5.2 示例代码

勾选上“Enable bc28_mqtt sample”,再编译工程时会增加一个 bc28_mqtt_sample 测试程序。为了顺利进行测试,需要事先搭建阿里云物联网平台的产品与设备,topic 可以根据您的实际情况进行修改。

static void bc28_mqtt_sample(void *parameter)
{
    if(RT_EOK != bc28_init())
    {
        rt_kprintf("init failed\n");
        return;
    }
    rt_kprintf("attach ok\n");

    while (RT_EOK != build_mqtt_network())
    {
        bc28_mqtt_close();
        rt_kprintf("rebuild mqtt network\n");
    }

    rt_kprintf("MQTT connect ok\n");

    /* user-code */
    char topic[256];
    rt_sprintf(topic, "%s/%s/user/hello", 
               PKG_USING_BC28_MQTT_PRODUCT_KEY, 
               PKG_USING_BC28_MQTT_DEVICE_NAME);

    bc28_mqtt_subscribe(topic);

    int cnt = 10;
    while (cnt--)
    {
        bc28_mqtt_publish(topic, "Hello, World!");
        rt_thread_mdelay(2000);
    }

    bc28_mqtt_close();
}

#ifdef FINSH_USING_MSH
MSH_CMD_EXPORT(bc28_mqtt_sample, BC28 MQTT sample);
#endif

你可能感兴趣的:(发布 RT-Thread 软件包 bc28_mqtt)