在工业、农业物联网布线场景中以MODBUS类型为主,样品提供MODBUS类型传感器硬件和软件快速接入方案,并将传感器数据上传到阿里云物联网平台,在云端table store数据库存储,在datav数据大屏上可视化展现。git
样品主要特性github
应用场景数据库
MODBUS传感器数据通过下面数据流json
MODBUS传感器->AliOS Things(uData)->阿里云物联网平平台->OTS规则引擎->TABLESTORE->DATAV数据大屏markdown
数据大屏地址
https://datav.aliyun.com/share/b2eed2f4627cf281022bbb4f23c2b568app
developerkit开发板上TTL串口RX,TX,GND(白线,灰线,黑线)分别链接转换板的RX,TX,GND。
转换板上485 A,B两个端口链接到485集线器A,B端子上(红线,橙线)框架
传感器的485 A,B端口(黄线和绿线)链接到485集线器上,电源和地(红线和黑线)接到电源接口上。
阿里云
将developerkit、ttl转485转换板USB供电,传感器和485集线器12V电源供电,至此硬件连线完毕。操作系统
AliOS Things提供一套传感器uData框架,将MODBUS传感器抽象驱动节点,经过vfs接口open,read操做。
AliOS Things还提供MODBUS协议库,MODBUS传感器驱动调用MODBUS库接口读取传感器数据。3d
代码托管在github上地址: https://github.com/alibabayf/AliOS_modbus
分支weather
git clone https://github.com/alibabayf/AliOS_modbus git checkout weather
代码编译
aos make uDataapp@developerkit
MODBUS传感器驱动添加经过下面配置表修改
device/sensor/drv/sensor_drv_conf.h
const modbus_sensor_t modbus_sensors[] = { { "KunLunHaiAn", "JHFS-W1", "wind speed", dev_windspeed_path, TAG_DEV_WINDSPD, SENSOR_OPEN, 0X30, 0x002A, 1, 0, 50 }, { "KunLunHaiAn", "JHFX-W1", "wind direction", dev_winddirection_path, TAG_DEV_WINDDIR, SENSOR_OPEN, 0X31, 0x002A, 1, 0, 50 }, { "KunLunHaiAn", "JHYL-W1", "current precipitation", dev_rainfall_path, TAG_DEV_RAIN, SENSOR_OPEN, 0X32, 0x0002, 1, 0, 50 }, { "KunLunHaiAn", "JHYL-W1", "today precipitation", dev_todayrainfall_path, TAG_DEV_TODAYRAIN, SENSOR_OPEN, 0X32, 0x0001, 1, 0, 50 }, };
modbus_sensor_t 中分别指厂商名,型号,名称,设备节点路径,传感器类型,驱动是否支持,从设备地址,寄存器地址,寄存器数量,是否数据反转,读数据超时时间。
大部分参数已经配置好了,须要开发者修改的是用户本身设置的传感器从设备地址和驱动是否支持。本例中以JHFS-W一、JHFX-W一、JHYL-W1这三款传感器为例,能够获取到风速、风向、总降水、当日降水量等数据。
在文件framework/uData/service/service_process.c中注册四类传感器服务
case UDATA_SERVICE_WINDSPD: ret = udata_std_service_register(type); break; case UDATA_SERVICE_WINDDIR: ret = udata_std_service_register(type); break; case UDATA_SERVICE_RAIN: ret = udata_std_service_register(type); break; case UDATA_SERVICE_TODAYRAIN: ret = udata_std_service_register(type); break;
修改framework/protocol/linkkit/iotkit/sdk-encap/imports/iot_import_product.h中四元组信息,为云端建立设备后得到
#define PRODUCT_KEY "a1N9KL6USIp" #define PRODUCT_SECRET "Voaf7vWI0Ioki4k3GSNP5QeEr8zeJinG" #define DEVICE_NAME "shanghaiT3" #define DEVICE_SECRET "Voaf7vWI0Ioki4k3GSNP5QeEr8zeJinG"
文件example/uDataapp/uData-example.c
订阅四类传感器数据
ret = uData_subscribe(UDATA_SERVICE_WINDSPD); ret = uData_subscribe(UDATA_SERVICE_WINDDIR); ret = uData_subscribe(UDATA_SERVICE_RAIN); ret = uData_subscribe(UDATA_SERVICE_TODAYRAIN);
example中拿到传感器数据会按照下面json格式发送给云端。
{"WINDSPD":xxx,"WINDDIR":xxx,"RAIN":xxx,"TODAYRAIN":xxx}
阿里云物联网平台建立产品
https://cn.aliyun.com/product/iot?spm=5176.cniot.loT.1.40721ba6VeAQwS
在建立的产品中定义新Topic类
生成的三元组信息须要和设备端一致。
用于解析topic收到的json payload。
https://cn.aliyun.com/product/ots?spm=5176.cniot.cloudEssentials.78.19b81ba6dHx6op
设置time为主键,为字符串
> 实例、数据表、主键和 3.5和3.6中建立的实例、数据表、主键对应。
阿里云数据大屏地址
https://data.aliyun.com/visual/datav?spm=5176.7968328.dataTechnology.6.69631232y6lNwp
左侧提供一些模板供参考
建立一个仪表盘组件
以风向数据为例,用getRange操做方式指定“direction”从后往前查找,“limit”:1 查找最新的一个数据。将WINDDIR字段值给value
至此就能够实现风向数据实时更新。