<一> 添加云平台产品和设备
进入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)); } }
结果图: