《手把手教你玩物联网》系列推文将介绍使用RT-Thread----小而美的物联网操作系统,制作一个室内温湿度数据采集,并实现终端采集数据上传物联网云平台onenet,实现云端远程数据监控功能。

      前面已经介绍了ESP8266的使用(手把手教你玩物联网(一)---ESP8266软件包的使用)、onenet云平台产品创建(手把手教你玩物联网(二)---onenet云平台产品创建),并且使用onenet软件包将终端接入了onenet云平台(手把手教你玩物联网(三)---对接onenet云端)。不过前面我们是模拟温湿度数据,把模拟数据发送到云端的。今天我们利用DHT11软件包实现环境温湿度的实时采集,并实时数据上传到onenet云平台。

第一步:添加DHT11软件包

    DHT11软件包添加方式同ESP8266软件添加一样,这里不再详细介绍。添加成功之后如下图所示。

onenet云平台最多可以接收几个数据 onenet云平台怎么用_物联网

    打开DHT11的配置项,选择开启dht11sample,按住control+s保存并推出。

onenet云平台最多可以接收几个数据 onenet云平台怎么用_单片机_02

第二步:修改main函数代码

打开main.c文件,如下图所示添加#define DHT11_DATA_PIN    3,DHT11的数据口接开发板的PE4。同时在main文件中添加两个全局变量:

rt_uint8_t temp;//存储DHT11的温度

rt_uint8_t humi;//存储DHT11的湿度

onenet云平台最多可以接收几个数据 onenet云平台怎么用_onenet云平台最多可以接收几个数据_03

     然后将dht11sample中的几个函数,拷贝到main文件中,并修改read_temp_entry函数,如下所示。最后在软件包配置页面关闭dht11sample.

static void read_temp_entry(void *parameter)
{
    rt_device_t dev = RT_NULL;
    struct rt_sensor_data sensor_data;
    rt_size_t res;
    rt_uint8_t get_data_freq = 1; /* 1Hz */
    dev = rt_device_find("temp_dht11");
    if (dev == RT_NULL)
    {
        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 *)(&get_data_freq));
    while (1)
    {
        res = rt_device_read(dev, 0, &sensor_data, 1);
        if (res != 1)
        {
            rt_kprintf("read data failed! result is %d\n", res);
            rt_device_close(dev);
            return;
        }
        else
        {
            if (sensor_data.data.temp >= 0)
            {
                temp = (sensor_data.data.temp & 0xffff) >> 0;      // get temp
                humi = (sensor_data.data.temp & 0xffff0000) >> 16; // get humi
                //rt_kprintf("temp:%d, humi:%d\n" ,temp, humi);
            }
        }
        rt_thread_delay(1000);
    }
}

     最后修改温湿度上传函数,将onenet_mqtt_upload_digit("temperature", temp)的上传参数由value改为temp和humi如下所示。下载编译程序到开发板。

/* upload random value to temperature*/
static void onenet_upload_entry(void *parameter)
{
    int value = 0;
    while (1)
    {
        //value = rand() % 100;
        if (onenet_mqtt_upload_digit("temperature", temp) < 0)
        {
            LOG_E("upload has an error, stop uploading");
            //break;
        }
        else
        {
            LOG_D("buffer : {\"temperature\":%d}", temp);
        }
        rt_thread_delay(1000);
        ///value = rand() % 100;
        if (onenet_mqtt_upload_digit("shidu", humi) < 0)
        {
            LOG_E("upload has an error, stop uploading");
            //break;
        }
        else
        {
            LOG_D("buffer : {\"shidu\":%d}", humi);
        }
        rt_thread_delay(rt_tick_from_millisecond(3 * 1000));
    }
}

第三步:运行效果

见连接

手把手教你玩物联网(四)---DHT11软件包 (qq.com)

通过上面可见,RT-Thread Studio可以很方便地实现物联网方面的开发。只是简单地通过RT-Thread Studio图形化配置就可以完成实现SHT11数据的云端上传。