《手把手教你玩物联网》系列推文将介绍使用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数据的云端上传。