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

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

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

第一步:添加DHT11软件包

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

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

第二步:修改main函数代码

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

rt_uint8_t temp;//存储DHT11的温度

rt_uint8_t humi;//存储DHT11的湿度

     然后将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数据的云端上传。

注:工程源码请关注微信公众号MCU学习笔记发送ESP8266获取

猜你喜欢

转载自blog.csdn.net/chanchairen/article/details/123631983