【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 软件包的完整性。

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

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
缘起: RT_Thread是一款优秀的国产RTOS,我大概两年前就了解到了RT_Thread,但是本人从事是物联网嵌入式WIFI模块二次开发,当时RT_Thread还不支持直接对WIFI模块二次开发,仅支持MCU+AT指令方式控制WIFI模块间接连云(如ESP8266),近来了解到RT_Thread已经支持WIFI模块二次开发,目前支持联盛德W60x,RealTek的RTL8710系列,于是终于按捺不住内心的冲动,决定先从一个简单的RGB三色灯项目入手,深入自己物联网之旅。本项目仅支持中国移动onenet平台,之后会陆续增加各个主流云平台的支持。 RT_Thread简介 [RT-Thread](https://www.rt-thread.org)是一个集实时操作系统(RTOS)内核、中间件组件和开发者社区于一体的技术平台,由熊谱翔先生带领并集合开源社区力量开发而成,RT-Thread也是一个组件完整丰富、高度可伸缩、简易开发、超低功耗、高安全性的物联网操作系统。RT-Thread具备一个IoT OS平台所需的所有关键组件,例如GUI、网络协议栈、安全传输、低功耗组件等等。经过11年的累积发展,RT-Thread已经拥有一个国内最大的嵌入式开源社区,同时被广泛应用于能源、车载、医疗、消费电子等多个行业,累积装机量超过2亿台,成为国人自主开发、国内最成熟稳定和装机量最大的开源RTOS。 W60X简介 W60X系列Wi-Fi SoC芯片是由国内联盛德公司研发,目前要有W600和W601两款芯片,本项目采用W600,W600是一款支持多接口、多协议的无线局域网 IEEE802.11n(1T1R)的 SoC 芯片。适用于智能家 电、智能家居、无线音视频、智能玩具、医疗监护、工业控制等物联网应用领域。 (1) 为什么选择W600? 一次偶然的会议上,我了解到了W600的存在,号称在华为Hilink项目上,有客户使用esp8266没有通过华为的认证,而使用W600通过了华为认证,原来我以为在wifi性价比的道路上除了乐鑫ESP8266和瑞昱RTL8710,恐难有敌手,于是开始对W600另眼相看,便开始某宝疯狂搜索,发现了一款9.9元基于W600的[TB_01开发板](https://item.taobao.com/item.htm?spm=a230r.1.14.19... TB-01 是星通智联开发的一款基于联盛德 W600 的超小体积核心开发板,该开发板引出了芯片的所有IO,并且内置LDO和UART传输芯片,只需一根 Micro USB 数据线与电脑连接即可使用,支持一键下载,外设拥有5个环形LED和2颗按键,调试操作极其方便。 RGB_LED项目简介 本文是关于RGB三色灯项目,基于RT_Thread提供的onenet-v1.0.0 packages连接中国移动onenet平台,packages中支持http和mqtt两种方式连接onenet,本项目采用mqtt方式连接,同时修改数据上报逻辑,原有组件包是每次回复单个数据点的数据,修改后支持一次性上报所有数据点,同时调整mqtt数据上报处理逻辑,解决连续两次调用数据发送接口,仅有第一次发出去的问题。 文档 如下是相关的文档教程, 方便大家使用. [TB_01官方资料](http://docs.thingsturn.com/product/) [Keil下RT_Thread W600 开发环境配置](http://docs.thingsturn.com/development/soc/start/) [W600固件烧录指南](http://docs.thingsturn.com/application_note/downlo... github地址:https://github.com/solitary-sand/rt_thread_w600_ap... 作者:一叶孤沙 (qq 2985672336) QQ交流群:906015840 (备注:物联网项目交流)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

飘雪冰峰

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

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

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

打赏作者

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

抵扣说明:

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

余额充值