【12月原创】利用ART-PI 向 ONENET 上传甲醛浓度信息

【12月原创】利用ART-PI 向 ONENET 上传甲醛浓度信息

前言

上篇文章《【12月原创】 ART-PI 连接 ONENET 物联网平台》介绍了如何使用 ART-PI 连接 ONENT物联网平台。这篇文章接着分享一下如何使用 rt-thread 提供的 onenet 软件包来向 onenet 平台上传甲醛浓度信息。

关于甲醛检测仪的设计说明请参考《【12月原创】基于ART-PI的智能甲醛检测仪》。

onenet 软件包说明

在 onenet 软件包中,提供了非常详细的说明文档,相关的api 都已经在 api.md文档中有详细的介绍。

onenet-packet-doc.png

这里只介绍使用到的两个 API.

OneNET 初始化

int onenet_mqtt_init(void);

OneNET 初始化函数,需要在使用 OneNET 功能前调用。

参数描述
返回
0成功
-1获得设备信息失败
-2mqtt 客户端初始化失败

mqtt 上传数字到 OneNET

rt_err_t onenet_mqtt_upload_digit(const char *ds_name, const double digit);

利用 mqtt 向 OneNET 平台发送数字数据。

参数描述
ds_name数据流名称
digit要上传的数字
返回
0上传成功
-5内存不足

onenet 软件包中提供有mqtt协议上传数字mqtt协议上传字符串mqtt协议上传二进制文件 等接口,这是使用上传数字接口即可。

代码

在 原有甲醛检测仪的基础上,添加 onenet 数据上传线程部分代码,其中甲醛浓度值通过消息队列的方式从甲醛传感器数据读取线程中获取。

#include <rtthread.h>
#include <rtdevice.h>
#include "drv_common.h"
#include "onenet.h"

#define NET_READY_TIME_OUT       (rt_tick_from_millisecond(10 * 1000))

rt_thread_t onenet_update_thread=RT_NULL;


static rt_sem_t net_ready = RT_NULL;
extern struct rt_messagequeue onenet_mq;


extern void wlan_autoconnect_init(void);

/* onenet 数据上传线程函数 */
static void onenet_mqtt_update_data_entry(void *parameter)
{
    uint16_t gas_ppb ;
    float gas_f;
    float gas_mg_m3;
    char float_str[10];
    char update_count=0;



    rt_thread_delay(rt_tick_from_millisecond(15 * 1000));//等待 wifi 连接成功 网络正常


	/* OneNET 连接初始化 */
    rt_kprintf("start init onenet mqtt \n");
    if(onenet_mqtt_init()<0)
    {
        rt_kprintf("onenet_mqtt_init failed\n");
    }
    else {
        rt_kprintf("onenet_mqtt_init finished\n");
    }


    while(1)
    {
        if (rt_mq_recv(&onenet_mq, &gas_ppb, sizeof(gas_ppb), RT_WAITING_FOREVER) == RT_EOK) //读取消息队列
        {
            update_count++;
            if(update_count>4)
            {
                update_count=0;
                gas_f = (float)(gas_ppb/1000.0);
                gas_mg_m3 = gas_f * 0.74666;


                rt_memset(float_str, 0, sizeof(float_str));
                sprintf(float_str, "%.3f",gas_mg_m3);


                if (onenet_mqtt_upload_digit("hcho", gas_mg_m3) < 0)
                {
                    rt_kprintf("upload has an error\n");
                }
                else
                {
                    rt_kprintf("HCHO: %s mg/m3\n", float_str);
                }
            }
        }
        rt_thread_mdelay(5);
    }
}


int onenet_mqtt_task(void)
{
    rt_err_t result = RT_EOK;

    /*初始化 wifi 自动连接*/
    wlan_autoconnect_init();
    /* 使能 wifi 自动连接 */
    rt_wlan_config_autoreconnect(RT_TRUE);

    rt_thread_delay(rt_tick_from_millisecond(3* 1000));


	/* 创建 onenet 数据上传线程 */
    if(onenet_update_thread)
    {
        rt_kprintf("onenet_update_thread is created\n");
        return -1;
    }
    onenet_update_thread = rt_thread_create("onenet", onenet_mqtt_update_data_entry, RT_NULL, 2*1024, 26, 5);
    /* 创建成功则启动线程 */
    if (onenet_update_thread != RT_NULL)
    {
        rt_thread_startup(onenet_update_thread);
    }
    else
    {
        rt_kprintf("onenet_update_thread create error\n");
    }

    return 0;

}

INIT_APP_EXPORT(onenet_mqtt_task);

效果

onenet-hcho-data.png

结束

使用 onenet 软件包上传数据到 onenet 还是比较简单的,这得益于 onenet 软件包的完整性。

至此,已经可以完成一个传感器联网并上传数据了,接着就该考虑如何利用这些数据来执行一些任务了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飘雪冰峰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值