直接上代码,先看软件包配置 RT_Thread_set
ting

这里需要注意的是:
1、AT_DEVICE的包配置,如下图,修改一下串口的缓冲区大小

2、onenet相应信息的填写,如下图

主/产品 API key 对应的是onenet里Master-API KEY
API 秘钥 对应的是onenet里access key
身份验证信息就是自己设置的身份验证信息
然后看代码
DHT11部分

自动初始化
static void read_temp_entry(void *parameter)
{
char result;
rt_device_t dev = RT_NULL;
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!
");
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
", res);
rt_device_close(dev);
return;
}
else
{
if (sensor_data.data.temp >= 0)
{
uint8_t temp = (sensor_data.data.temp & 0xffff) >> 0; // get temp
uint8_t humi = (sensor_data.data.temp & 0xffff0000) >> 16; // get humi
sensor_data.data.temp = temp;
sensor_data.data.humi = humi;
rt_kprintf("temp:%d, humi:%d
" ,temp, humi);
rt_mb_send(&data_box,&sensor_data);
}
}
rt_thread_delay(2000);
}
}
例程线程 例程线程里添加了邮箱发送,以及利用了RT-Thread自带的sensor框架,讲数据存储在sensor的数据结构中
int onenet_mqtt_init(void)
{
int result = 0;
if (init_ok)
{
LOG_D("onenet mqtt already init!");
return 0;
}
if (onenet_get_info() < 0)
{
result = -1;
goto __exit;
}
onenet_mqtt.onenet_info = &onenet_info;
onenet_mqtt.cmd_rsp_cb = RT_NULL;
if (onenet_mqtt_entry() < 0)
{
result = -2;
goto __exit;
}
__exit:
if (!result)
{
LOG_I("RT-Thread OneNET package(V%s) initialize success.", ONENET_SW_VERSION);
init_ok = RT_TRUE;
}
else
{
LOG_E("RT-Thread OneNET package(V%s) initialize failed(%d).", ONENET_SW_VERSION, result);
}
return result;
}
INIT_APP_EXPORT(onenet_mqtt_init);
将onenet_mqtt_init做成自动初始化
static void onenet_upload_entry(void *parameter)
{
int value = 0;
struct rt_sensor_data my_data;
while (1)
{
if(rt_mb_recv(&data_box, &my_data, RT_WAITING_FOREVER) == RT_EOK)
{
if (onenet_mqtt_upload_digit("temperature", (uint8_t)(my_data.data.temp)/10) < 0)
{
LOG_E("upload has an error, stop uploading");
break;
}
else
{
LOG_D("buffer : {"temperature":%d}",(uint8_t)(my_data.data.temp)/10);
}
if (onenet_mqtt_upload_digit("humi", (uint8_t)(my_data.data.humi)/10) < 0)
{
LOG_E("upload has an error, stop uploading");
break;
}
else
{
LOG_D("buffer : {"humi":%d}", (uint8_t)(my_data.data.humi)/10);
}
}
rt_thread_delay(rt_tick_from_millisecond(2 * 100));
}
}
修改cycle线程,接收邮箱信息,将油箱信息发送给onenet云。
原作者:jia868