【RT-Thread】 RT-Thread上传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));
    }
}

结果图:

 

猜你喜欢

转载自www.cnblogs.com/Raowz/p/13276570.html