zoukankan      html  css  js  c++  java
  • 【RTThread】 RTThread上传DS18B20温度值到OneNet

    <一> 添加云平台产品和设备

    进入https://open.iot.10086.cn/ 官网 登入开发者中心。

     在全部产品中选择多协议接入,因为RT-Thread的软件包支持的时旧版MQTT,如果使用MQTT物联网套件需要修改RT-Thread软件包的部分内容,这里为了方便,使用的是旧版的MQTT,而且仅仅只是为了学习,新版与旧版也就差了一个鉴权信息的不同。新版需要计算。

    点击 添加产品

     填入对应的信息

    添加设备,需要填入相关信息。

    设备添加完成后如下,可以点击详情看一下设备信息:注意设备ID和鉴权信息,连接云时需要使用

    注意产品ID和Master-APIkey,连接云时需要使用。 

     

    至此,云平台这边已经设置完了,记住几个RT-Thread 的oneNet软件包需要的参数信息:设备ID,鉴权信息,产品ID,Master-APIKey

     <二> RT-Thread Studio 工程建立

    esp8266的联网可以参考日记ota升级,链接:https://www.cnblogs.com/Raowz/p/13276647.html中有这部分操作。

     在对应的参数栏中填入在云平台注册道德设备参数信息。

    此时,设备已经可以登录到oneNet云平台,编译下载到开发板上。

    测试如下:

    下面添加DS18B20测量的温度数据到oneNet:

    ds18b20的添加查看日记链接:https://www.cnblogs.com/Raowz/p/13131841.html

    需要修改一点代码。将测量的得到的温度通过邮箱发送给oneNet上传数据的线程。

     创建mb

     ds18b20发送mb。oneNet接收mb。

    static void read_temp_entry(void *parameter)
    {
        rt_device_t dev = RT_NULL;
        struct rt_sensor_data sensor_data;
        rt_size_t res;
        rt_err_t result ;
    
        rt_mailbox_t rb = (rt_mailbox_t)rt_object_find("temperature", RT_Object_Class_MailBox);
         if(RT_NULL == rb)
         {
             rt_kprintf("not exist %s mailbox \n","temperature");
             return;
    
         }
        dev = rt_device_find(parameter);
        if (dev == RT_NULL)
        {
            rt_kprintf("Can't find device:%s\n", parameter);
            return;
        }
    
        if (rt_device_open(dev, RT_DEVICE_FLAG_RDWR) != RT_EOK)
        {
            rt_kprintf("open device failed!\n");
            return;
        }
        rt_device_control(dev, RT_SENSOR_CTRL_SET_ODR, (void *)100);
    
        while (1)
        {
            res = rt_device_read(dev, 0, &sensor_data, 1);
            if (res != 1)
            {
                rt_kprintf("read data failed!size is %d\n", res);
                rt_device_close(dev);
                return;
            }
            else
            {
    
                result =  rt_mb_send(rb, (rt_ubase_t)sensor_data.data.temp);
                if(result != 0)
                {
                    rt_kprintf("rt_mb_send failed\n");
                    rt_device_close(dev);
                    rt_mb_delete(rb);
                    return;
                }else{
                    if (sensor_data.data.temp >= 0)
                    {
                        rt_kprintf("temp:%3d.%dC, timestamp:%5d\n",
                                   sensor_data.data.temp / 10,
                                   sensor_data.data.temp % 10,
                                   sensor_data.timestamp);
                    }
                    else
                    {
                        rt_kprintf("temp:-%2d.%dC, timestamp:%5d\n",
                                   abs(sensor_data.data.temp / 10),
                                   abs(sensor_data.data.temp % 10),
                                   sensor_data.timestamp);
                    }
    
                }
            }
            rt_thread_mdelay(7000);
        }
    }
    /* upload random value to temperature*/
    static void onenet_upload_entry(void *parameter)
    {
        int value = 0;
        rt_err_t result;
        char upload_buf[16] = {0};
        rt_mailbox_t rb = (rt_mailbox_t)rt_object_find("temperature", RT_Object_Class_MailBox);
        if(RT_NULL == rb)
        {
            rt_kprintf("not exist %s mailbox \n","temperature");
            return;
    
        }
        while (1)
        {
            result = rt_mb_recv(rb,(rt_ubase_t *) &value,  RT_WAITING_FOREVER);
            if(result != 0)
            {
                rt_kprintf("rt_mb_recv failed\n");
                rt_mb_delete(rb);
                return;
            }
    
            rt_sprintf(upload_buf, "%3d.%2dC",value/10,value%10);
            if (onenet_mqtt_upload_string("temperature", upload_buf) < 0)
            {
                LOG_E("upload has an error, stop uploading");
                break;
            }
            else
            {
                LOG_D("buffer : {\"temperature\":%s}", upload_buf);
            }
    
            rt_thread_delay(rt_tick_from_millisecond(5 * 1000));
        }
    }

    结果图:

     

  • 相关阅读:
    [OpenCV] Ptr类模板
    [OpenCV]Mat类详解
    [C++] Vector用法
    [OpeCV] highgui头文件
    c++中的.hpp文件
    【2017】KK English
    CMake Tutorial & Example
    [g2o]C++图优化库
    Teradata基础教程中的数据库试验环境脚本
    Oracle中对象权限与系统权限revoke
  • 原文地址:https://www.cnblogs.com/Raowz/p/13276570.html
Copyright © 2011-2022 走看看