esda开发平台为产品上线提供动力。本文将基于esda开发平台,通过拖拽、连线方式,10分钟快速搭建一个i2c数据采集监测业务,为客户产品开发、部署、上线缩短周期。
简介
i2c 是一种串行通信总线,只需sck、sda两根双向i/o线即可在连接到总线上的设备之间传送信息。因其所需引脚少,可扩展性强,数据传输速率快等,所以现被广泛使用于ic间的通讯。在各种嵌入式应用场景中,使用i2c总线通信的传感器也有很多。比如 eeprom、温湿度传感器、流量传感器、压力传感器等。
esda 平台在使用i2c总线通信时只需要通过拖拽节点、连线绘制流图,即可实现从i2c从机读取数据,大大的简化了开发流程,缩短了项目开发周期,为客户产品抢占市场提供先机。
本文基于esda开发平台,mpc_zc1作为i2c主机设备,定时从tps02rah从机设备中去读取温度寄存器的值,并将采集到的温度值上传到zws云端,实现温度实时监控功能,该实验主要用了到timer、fscript、i2c_master_read、log和zws节点,具体实现请见下文。
i2c相关节点介绍
i2c外设共有3个几点,分别是i2c_master、i2c_master_read和i2c_master_write节点。i2c_master节点主要用来配置i2c的设备名称以及设备参数,i2c_master_read节点主要用于读取从机设备的数据,i2c_master_write节点主要用于向从机设备写入数据。
1. i2c_master_write节点
i2c主机向从机设备写数据,可配置从机相关的设备信息和通信参数。
1.1 属性
名称(name) :节点名称,用于索引查找本节点;显示名称(displayname) :用于画布上显示的名称;主机配置(i2c master config) :绑定一个i2c主机的配置节点;从机地址(slave address) :从机设备的地址;地址位数(address bits) :从机的地址位数,由于7位寻址和10位寻址是兼容的所以可以在同一个i2c总线上同时使用7位和10位两种不同模式的设备,可配为7位(7 bits);10位(10 bits);是否忽略从机应答(whether to ignore the slave ack signal):可配:忽略从机应答(ignore);不忽略从机应答(do not ignore);从机设备寄存器地址位宽(subaddressbitwidth) :可配:do not set sub-address表示不设置从机的寄存器地址宽度;1 bytes sub-address表示从机具有1字节(8位)的寄存器地址宽度;2 bytes sub-address表示从机具有2字节(16位)的寄存器地址宽度;4 bytes sub-address表示从机具有4字节(32位)的寄存器地址宽度;从机设备寄存器地址(subaddress):从机设备子地址(寄存器地址)。注意从机设备寄存器地址位宽为0则不能设置从机子地址。1.2 输入
payload :输入数据流,存放需要写入的数据。此节点接收如下类型的数据:binary type(二进制类型) ; wbuffer object type(指针类型) ; string type(字符串类型);
payloadlength : 需要写入的数据长度,单位字节;
subaddress : 从机设备子地址(寄存器地址)。注意从机设备寄存器地址位宽为0则不能设置从机子地址。1.3 输出
sink类型节点一般并不具备数据输出。
2. i2c_master_read节点
i2c主机向从机设备中读数据:对从机的设备地址等进行输入/配置,最后将从机中读取到数据和长度等信息进行输出。
2.1 属性
名称(name) :节点名称,用于索引查找本节点;
显示名称(displayname) :用于画布上显示的名称;
主机配置(i2c master config) :绑定一个i2c主机的配置节点;
从机地址(slave address) :从机设备的地址;
地址位数(address bits) :从机的地址位数,可配为7位(7 bits);10位(10 bits);
是否忽略从机应答(whether to ignore the slave ack signal):可配:忽略从机应答(ignore);不忽略从机应答(do not ignore);
是否发送应答(whether send nak):当主机读取数据时主机是否发送给从机的应答ack信号; do not send表示不发送主机ack信号; send表示发送主机的ack信号;
从机设备寄存器地址位宽(subaddressbitwidth) :可配:do not set sub-address表示不设置从机的寄存器地址宽度;1 bytes sub-address表示从机具有1字节(8位)的寄存器地址宽度;2 bytes sub-address表示从机具有2字节(16位)的寄存器地址宽度;4 bytes sub-address表示从机具有4字节(32位)的寄存器地址宽度;
从机设备寄存器地址(subaddress):从机设备子地址(寄存器地址)。注意从机设备寄存器地址位宽为0则不能设置从机子地址。
2.2 输入
length : 读的数据长度,单位字节;
subaddress : 从机设备子地址(寄存器地址)。注意从机设备寄存器地址位宽为0则不能设置从机子地址;
2.3 输出
payload : 读缓冲区,用于存放接受读取到的数据,类型pointer.如果下一个节点为fscript,则可以使用rbuffer读取数据;
payloadlength : 读的数据长度,单位字节;
subaddress :从机设备子地址(寄存器地址)。注意从机设备寄存器地址位宽为0则没有从机子地址。3. i2c_master配置节点
i2c主机的通用配置。
3.1 属性
名称(name) : 节点名称,用于索引查找本节点,在某些aw_flow_designer的版本被隐藏起来了,只能通过点击i2c_master_read和i2c_master_write这两个节点主机配置去显现;
显示名称(displayname) :用于画布上显示的名称;
设备名(devname) :i2c主机设备路径名;
时钟频率(clock frequency) :i2c设备的sck时钟频率。
3.2 输入
config配置节点一般不具备数据输入。
3.3 输出
config配置节点一般不具备数据输出。
业务开发
1. 采集pt100的实时温度
mpc_zc1作为i2c主机设备,定时从tps02rah从机设备中去读取温度寄存器的值,并将采集到的温度值上传到zws云端,实现温度实时监控。
该实验主要用到timer、fscript、i2c_master_read、log和zws节点:
timer:timer节点用于定时触发采集pt100的温度;i2c_master_read:i2c_master_read节点主要用于从从机设备读取数据;fscript:fscript节点主要用于对tps02rah从机设备读取的数据进行转换处理和对i2c_master_read节点进行输入配置(配置要读取的字节长度);log:log对采集到的温度值进行打印显示;zws:zws节点将fscript节点输出温度值上报到zws云端。1.1 添加节点并连线周期性的去读取i2c从机tps02rah设备温度寄存器的值,将timer,fscript,i2c_master_read,log节点添加到画布中,并连线绘图。1.2 配置节点双击timer节点,打开属性面板设置定时周期(ms),周期性的去读取tps02的温度值。双击i2c_master_read的输入节点fscript,并查看tps02rah温度传感器的数据手册。得知tps02rah温度寄存器的值有6个字节,且数据传输顺序:先传输高字节后传输低字节,可知前3个字节存储通道1的温度测试结果,后3个字节存储通道2的温度测试结果。所以i2c_master_read节点的输入:fscript需读取两个通道6个字节的数据。其他的参数可在i2c_master_read节点的属性中配置。双击i2c_master_read节点,打开属性面板根据tps02rah的数据手册设置如下图所示,并点击i2c主机配置的铅笔图标去设置i2c主机设备路径名和时钟频率。双击i2c_master_read的输出消费者节点fscript,将读取到温度寄存器的两个通道温度根据下面的温度转换公式将温度输出并打印到log中。tps02arh的温度转换公式:两通道六字节数据,前三位字节数据对应通道 1,后三位字节数据对应通道 2,操作方法一样,取通道一数据分析如下:当 value≥223 时,即当前测量温度为负温度值:
当 value<223时, 即当前测量温度为正温度值:
i2c_master_read的输出消费者节点fscript的内容如下:
//将读取的6个uint8_t类型的数据打印rb = rbuffer_create(msg.payload, msg.payloadlength)
temperature1 = 0 //通道1的温度temperature2 = 0 //通道2的温度for (var i = 0; i 2){ temperature2 = temperature2 + (u32(d)<<(8*(5-i))); } temperature1 = temperature1 + (u32(d)<<(8*(2-i)));}if (temperature1 < 8388608) {//temperature<2^23正温度 msg.temperature1 = temperature1/8192} else {//负温度 msg.temperature1 = -(16777216 - temperature1)/8192}if (temperature2 < 8388608) { msg.temperature2 = temperature2/8192} else {//负温度 msg.temperature2 = -(16777216 - temperature2)/8192}msg.payload = join(,,channel 1:,msg.temperature1,channel 2:,msg.temperature2)
print(msg.payload)
1.3 下载验证
选择流图下载接口,并点击运行按钮。
完成流图下载,根据实物连线可知pt100连接的是通道1,随着手捂探头,可以看到channel 1( 通道1)的温度从27.67上升到30.23,因为channel 2(通道2)没有接pt100的探头所以数值保持850不变。
1.4 接入zws云端
登录:https://www.zlgcloud.com/按照 esda mpc-zc1应用:iot监测控制系统(一) 这篇文章中接入云端方法的介绍,在zws云端上为mpc-zc1添加新的数据点,如下图所示:添加通道1 的温度显示:
添加通道2 的温度显示:
在aw_flow designer画布中添加zws_iot_data_out节点并连线。
输入对应的三元组信息并选择正确的数据上报方式和目标键值对。
下载流图并观察云端设备列表的实时数据如下图所示。
兆科导热材料在电源领域的应用
好的电路方案能决定热电偶测温性能吗?
智能家居在不同人群中有哪些不一样的应用
确定电容额定电压:如何读懂电容外壳上的“密码”?
Snapchat将在2020年为顶级AR滤镜影响力创作者提供75万美元资金支持
【产品应用】基于 EsDA MPC-ZC1 快速实现 I2C采集监测
泛华测控推出PXI一体化机箱
元启未来:这些行业都被AI“影响”了
海信物联网中央空调引领行业新生态 为用户带来更便捷的空调解决方案
2011年中国LED市场 路灯应用占据首位
万用表浪涌电流什么意思?
三星note8什么时候上市?三星note8最新消息:note8即将问世,三星note8概念设计图曝光!大号的Galaxy 8?
数字信号控制器提供实时控制功能
学生党有什么游戏蓝牙耳机推荐?百元起低延迟游戏蓝牙耳机推荐
NV020C语音芯片在坐姿提示器的应用方案
Proximities RFID系统的腕带提升游客体验度
软件开发工程师的进阶之路
华硕GT-AC2900路由器体验 更有针对性的游戏加速及专属的绚丽电竞风格
乐视网IPO造假,被查实将面临退市
比亚迪半导体携明星产品亮相Demo Day