AliOS Things+阿里云 10分钟搭建智慧农业解决方案
1.1 样品介绍
在工业、农业物联网布线场景中以MODBUS类型为主,样品提供MODBUS类型传感器硬件和软件快速接入方案,并将传感器数据上传到阿里云物联网平台,在云端table store数据库存储,在datav数据大屏上可视化展示。
样品主要特性
- 本地支持MODBUS工业控制协议的传感器,有叶面湿度、叶面湿度、土壤含水率、土壤温度、土壤酸碱度、光照、二氧化碳含量、大气压力、PM2.5、PM10、风向、风速、降水量等。
- AliOS Things物联网操作系统
- 阿里云物联网平台
- 云端table Store数据库数据存储
- datav数据大屏实时数据和历史数据可视化展示
应用场景
- 气象监测
- 农业大棚监测
MODBUS传感器数据经过下面数据流
MODBUS传感器->AliOS Things(uData)->阿里云物联网平平台->OTS规则引擎->TABLESTORE->DATAV数据大屏
1.2 样品展示
数据大屏地址
https://datav.aliyun.com/share/b2eed2f4627cf281022bbb4f23c2b568
2 设备端侧搭建
2.1 环境准备
- Developerkit开发板一套
- ttl转485
- MODBUS传感器
- 485集线器(非必需)
2.2 设备连接
developerkit开发板上TTL串口RX,TX,GND(白线,灰线,黑线)分别连接转换板的RX,TX,GND。
转换板上485 A,B两个端口连接到485集线器A,B端子上(红线,橙线)
传感器的485 A,B端口(黄线和绿线)连接到485集线器上,电源和地(红线和黑线)接到电源接口上。
将developerkit、ttl转485转换板USB供电,传感器和485集线器12V电源供电,至此硬件连线完毕。
2.3 uData传感器框架
AliOS Things提供一套传感器uData框架,将MODBUS传感器抽象驱动节点,通过vfs接口open,read操作。
AliOS Things还提供MODBUS协议库,MODBUS传感器驱动调用MODBUS库接口读取传感器数据。
2.4 代码下载和修改
代码托管在github上地址: https://github.com/alibabayf/AliOS_modbus
分支weather
git clone https://github.com/alibabayf/AliOS_modbus
git checkout weather
代码编译
aos make uDataapp@developerkit
2.4.1 传感器驱动
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-W1、JHFX-W1、JHYL-W1这三款传感器为例,可以获取到风速、风向、总降水、当日降水量等数据。
2.4.2 uData service注册
在文件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;
2.4.3 四元组修改
修改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"
2.4.4 uDataapp-example
文件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}
3 云端配置
3.1 创建产品
阿里云物联网平台创建产品
https://cn.aliyun.com/product/iot?spm=5176.cniot.loT.1.40721ba6VeAQwS
在创建的产品中定义新Topic类
3.2 创建设备
生成的三元组信息需要和设备端一致。
3.3 创建规则引擎
3.4 编写规则引擎SQL语句
用于解析topic收到的json payload。
3.5 创建Table Store数据库实例
https://cn.aliyun.com/product/ots?spm=5176.cniot.cloudEssentials.78.19b81ba6dHx6op
3.6 创建Table Store数据表
设置time为主键,为字符串
3.7 编写规则转发数据目的地
> 实例、数据表、主键和 3.5和3.6中创建的实例、数据表、主键对应。
3.8 datav数据大屏添加数据
阿里云数据大屏地址
https://data.aliyun.com/visual/datav?spm=5176.7968328.dataTechnology.6.69631232y6lNwp
3.9 创建可视化大屏
左侧提供一些模板供参考
3.10 datav获取数据实例
创建一个仪表盘组件
以风向数据为例,用getRange操作方式指定“direction”从后往前查找,“limit”:1 查找最新的一个数据。将WINDDIR字段值给value
至此就可以实现风向数据实时更新。