接线图
在本设备中,四输入模块是插在zigbee板上的,这里有两种方式来进行使用:
这里的zigbee板如果通过zigbee进行无线通信,可以通过和内置在网关中的协调器进行通信,从而在网关上进行无线数据获取。注意,此时这块zigbee板子需要刷写相应的传感器的hex文件。
如果不通过zigbee进行通信,那么直接通过其串口获取数据。黑色zigbee板子下面是由rs232串口。这个直接通过串口线连接在电脑串口或者平板串口进行串口编程。注意,此时这块zigbee板子需要刷写相应的四通道独立的hex文件。我们这里主要描述的是这种方式。
刷写hex文件
使用CC Debugger通过USB数据线与计算机相连,通过10线的排线与CC2530实验板的调试接口相连。在与CC2530实验板相连时,要注意要让排线的1脚对应实验板上调试接口的1脚,即排线上的三角箭头要与实验板上的白色三角箭头对齐。
运行桌面上已经安装好了的SmartRF Flash Programmer,选择System-on-Chip选项卡,对实验板供电,按下CC Debugger上面的复位按钮,此时可以看到SmartRF Flash Programmer的设备列表区先生当前连接的单片机的信息,如下图所示。
单击Flash Image的选择按钮…,选择要烧写的下位机程序文件,这里由于只使用其板子上的串口,所以烧写四通道独立采集模块中的hex文件(这个文件在D:\software\感知层套件资料\02驱动\02zigee烧写文件夹中)。
单击下方的Perform actions按钮,开始对CC2530进行编程,动作过程中会有执行进度条显示,完成如下图:
由于这里无需组网,所以不需要运行配置参数软件。
通过串口调试助手了解数据格式
zigbee上传传感器数据为:
HEAD + LEN + CMD0 + CMD1 + ADRL + ADRH + DTYPEL+ DTYPEH + DLEN + REV +[SDATA] + CHK
HEAD:数据头, 固定为 0xfe
LEN:数据包长度, ADRL 开始到 CHK 前一个字节的字节数
CMD0:命令类型, 固定为 0x46
CMD1:命令类型, 固定为 0x87
ADRL:传输信息源节点的短地址低 8 位
ADRH:传输信息源节点的短地址高 8 位
DTYPEL:数据类型低位, 固定为 0x02
DTYPEH:数据类型高位, 固定为 0x00
DLEN: [SDATA] 的长度
REV:保留,固定为 0x00
SDATA:传感器发送的数据包,多字节
CHK:校验码,从 LEN 开始到 CHK 前一个字节的所有字节依次按字节异或的值
其中SDATA构成具体为:INTEMP + INVOL + PARADRL+ PARADRH + [SENSORDATA]
INTEMP: 内部温度
INVOL:内部电压
PARADRL:父节点短地址低字节
PARADRH:父节点短地址高字节
SENSORDATA:传感数据,多字节,允许没有,具体如下:
SENSORDATA传感数据的格式:LGTYPE+ SORL + SORH+ STYPE + SORDATA
LGTYPE: 逻辑类型,01---路由; 02---全功能节点;03---终端节点;
SORL: 传感器编号低位
SORH: 传感器编号高位
STYPE:传感器类型,具体见下表
SORDATA:传感数值,多字节, 具体见下表
从上面的分析可以看出,四输入模拟量通过串口,上传上来的数据的第18个字节为STYPE,应该是0x30,之后的第19、20字节应该是接线图中In1中的光照值,第21、22字节是接线图中的IN2中的温度值,第23、24字节是接线图中的In3中的湿度值。当然这些两字节的值还需要通过表格后面的相应公式转换为电流值,然后通过相应的量程转换为对应的实际值。
注意:通过串口调试助手观察这些数据时,需要选择波特率为38400
Android上的编程
方法一:使用厂商提供的类库
和以前的4150一样,加载libs,里面有相应的so文件和jar文件,配置androidstuido中的相关内容:
android{
……
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
}
编程中可以参考pdf中的jar文档。
这里可以给出一部分代码:
// 打开ZigBee串口和线程
public void openZigBee() {
int com = -1;
//打开串口 com代表设备com口,mode为接入模式 0为串口接入 1=usb接入,baudRate=波特率(波