实验内容: zigbee终端节点采集温湿度、光敏数据,通过zigbee无线通道传输给协调器节点,协调器接收到数据后,一方面通过串口在PC机上显示,另一方面通过蓝牙模块发送给手机端显示。
本项目需要完成的主要工作如下: - 完成蓝牙模块的设置;
- 测试厂商提供的温湿度传感器例程,并将项目中从P07引脚采集信号,改为从P06引脚采集;
- 测试厂商提供的光敏传感器例程,并添加蓝牙模块,实现手机蓝牙串口助手APP通过蓝牙获取zigbee板上传的数据;
- 将温湿度、光敏传感器的采集例程合并到“实验4:zigbee无线数据传输”的项目中,以最终实现zigbee终端节点获取传感器数据,通过zigbee协议栈无线发送到协调器,协调器通过串口上传给PC侧的串口助手,同时通过蓝牙模块,上传给手机上的蓝牙串口助手APP。
提供的硬件设备: 每个盒子包括:zigbee板2个,CCdebuger1个,蓝牙模块1个,USB-TTL模块1个,温湿度传感器1个,光敏传感器1个,miniUSB线2根,D口USB线1根, 配套杜邦线 所需的文件: | | | | Texas Instruments one.rar | CC2530 Z-Stack源码及测试程序,老师提供 | | | CC DEBUGGER在win7 win10下的安装方法.rar | CC DEBUGER在64bit win7/10下的驱动,老师提供 | | | | | | | | | | | | |
本次实验需要安装IAR集成开发环境、CCDebuger仿真器驱动、通过USB-TTL模块设置蓝牙模块波特率、安装手机蓝牙助手 1.1 安装IAR集成开发环境,安装CCdebuger的驱动 请按照之前实验的步骤安装IAR开发环境、CCdebuger仿真器驱动。
1.2 安装手机蓝牙APP 自行从网上下载、安装。蓝牙助手有很多版本,设置及使用方法都基本相同。
1.3 蓝牙模块设置: 蓝牙模块与USB-TTL接口模块的接线如下表:
用杜邦线按上表引脚对应关系,连接蓝牙模块和USB-TTL模块,然后将USB-TTL模块插入PC机USB接口,如下图,在“计算机管理”窗口可看到多出一个USB转串口的设备(本图为串口5,COM5,每个usb口对应的串口不一样)。 
需要进入AT指令模式来设置蓝牙模块波特率、模块名(以免混淆)
AT模式波特率为38400,正常通信时波特率为9600 每条AT指令输入完成后,都必须按一下回车键,再点击串口助手上的发送按钮,才可发送 LED必须进入慢闪模式后方可进行AT指令测试 先按住HC05蓝牙模块上面的按键(复位键),再将USB-TTL模块插上PC机,等蓝牙模块上面的LED进入慢闪模式后(约1秒钟闪烁一次),即可进行AT命令测试: 
| 在串口助手的左侧窗口 1:选择串口号、波特率(AT模式波特率为38400,缺省的正常通信模式下波特率为9600) 2:在命令发送区,输入at(大小写都可以),然后回车,再用鼠标点击“发送”按钮,即可在接收区看到返回“OK”,表示串口调试助手与蓝牙间连接成功 |
测试连接成功后,在发送区输入命令(大小写不敏感):
| | | | | | | | | | | 设置蓝牙模块使用时的波特率为115200,停止位为1位,校验位为none | | | | 设置蓝牙模块的名字为fengb(建议设置为自己的名字拼音,免得相互冲突) |
设置完成后,拔下USB-TTL模块,再插回PC机,相当于重启蓝牙模块。此时,蓝牙模块上的状态灯处于快速闪烁状态。打开手机蓝牙,搜索附近可用设备,点击连接,即可看到该设备的名字(如刚才设置的为fengb),配对的pin码为:1234 输入后,即可实现手机蓝牙与蓝牙模块的连接。
本步骤提供终端节点分别单独采集温湿度传感器、光敏传感器的项目,用以熟悉采集程序的代码,并确认蓝牙模块、串口助手、手机蓝牙助手APP可正确使用。
Zigbee终端节点采集温湿度项目,改为P06引脚,可测试温湿度传感器、串口助手。
本项目采用粤嵌传感器测试代码,但由于厂商提供的温湿度传感器、光敏传感器都占用了P07引脚,因此,需要将原项目中温湿度传感器从P07引脚的数据输入,改为P06引脚的输入。 将老师提供的源码解压到D盘(注意路径上不要有中文,否则IAR会闪退)。 项目关键代码分析如下 
DHT11_Read_Data(buf)读取5个字节40bits的温湿度数据到buf数组中(具体原理可参见《ZigBee 开发实验指导书》第六章 温湿度实验),其中: buf[0]=8bit 湿度整数数据,buf[1]=8bit 湿度小数数据, buf[2]= 8bit温度整数数据,buf[3]=8bit 温度小数数据。 然后调用hexToAscall()函数将buf中的数据按字节转换为了ASCII码,并与说明信息一起拼接进rus字符串,最后调用uartSendString()函数打印到串口输出。
请仔细学习《ZigBee 开发实验指导书》第三章LED实验、第六章温湿度实验,找到修改、配置温湿度传感器IO控制器的方法。并按以下内容修改项目。
打开文件dht11.h,将引脚定义由P07改为P06:

打开文件dht11.c,将P0端口寄存器进行对应的设置: 
保存并编译,通过后,连接硬件,下载代码。 - 用CCdebuger下载代码
- 用miniUSB接口线,连接PC机和zigbee开发板
- 将DTH11传感器连入zigbee开发板P06端口。该端口有3个引脚,VCC、GND、P06。其中VCC连接DTH的VCC,GND连接DTH的GND,P06连接DTH的DATA.
DTH11的引脚说明:
| 注意: 串口号为从“设备管理器”中查到的USB转串口的串口号 波特率为115200 |
(有可能有个别温湿度传感器已被烧掉,请在给测试系统上电后,用手指按住温湿度传感器感受是否有发烫现象,如果发烫则表明已烧掉,则立即断电,取下温湿度传感器) 本阶段测试通过后,表明可在zigbee开发板的P06端口,正确读取到温湿度传感器的数据。打包保留测试通过的源码为:DHT11_P06.rar 
本项目采用粤嵌传感器测试代码,对应源码:LightSensor_P07.rar 光敏传感器图示如下: 
将老师提供的源码解压到D盘(注意路径上不要有中文,否则IAR会闪退) 项目关键代码分析如下: 
ADCH、ADCL:分别为ADC数据的高8位、低8位,在ioCC2530.h中定义。 对value乘以330,再右移15位(215=32768,近似于33000),相当于将value除以100 
在main.c中,调用函数getValue()得到的sensor_var除以了100,作为电压的整数值,除以10再取余10,作为个位小数的值,取余10,作为十位小数的值。(为什么这么处理就不清楚了,厂商提供的数据手册一直无法下载。。。)
编译通过后,连接硬件,下载代码。 - 用CCdebuger下载代码
- 用miniUSB接口线,连接PC机和zigbee开发板
- 将光敏传感器连入zigbee开发板P07端口。该端口有3个引脚,VCC、GND、P07。其中VCC连接光敏传感器的VCC,GND连接光敏传感器的GND,P07连接光敏传感器的Do.
光敏传感器引脚说明:
编译、下载,全速运行后,可以在串口助手上看到电压值的输出。
| 注意: 串口号为从“设备管理器”中查到的USB转串口的串口号 波特率为115200 |
完成此步骤,即可证明光敏传感器、串口助手及对应的测试程序工作正常。 
下一步,将已完成设置的蓝牙模块接入zigbee板,并用手机连接该蓝牙模块,实现zigbee模块到手机的数据传输。 此时,拔掉zigbee的CCdebuger和miniUSB连接,使zigbee板处于无电状态。将蓝牙模块连接到zigbee板上。 蓝牙模块与zigbee板的接线:
连接好连线后,用miniusb线给本zigbee板供电(此处必须由miniUSB给zigbee板供电,因为JTAG接口不提供5v)。可先在PC上的串口助手软件里可以看到光敏电压的输出。表明光敏传感器工作正常。 
蓝牙模块在“环境搭建”步骤已设置了模块名(例子中为fengb)和波特率(115200),此时打开手机蓝牙功能,打开手机上的蓝牙助手APP,搜索周围环境的蓝牙模块fengb,找到后点击,进行配对,配对码是“1234”,然后连接该蓝牙设备,选中“字节流模式”,就可以在手机上的蓝牙助手界面看到光敏电压数据。
注意,有的蓝牙助手上不能显示中文,则需要在代码中把打印语句中的中文该为英文即可。
本步骤分两个环节,一是zigbee终端节点采集温湿度数据发送给协调器,一是zigbee终端节点采集光敏数据发送给协调器。代码原型采用前一步骤中使用的代码,并需根据要求进行修改。
本项目中,zigbee终端节点拿到温湿度数据、光敏传感器数据的所有操作,与原测试代码都是相同的。区别在于拿到数据后,原测试代码是直接输出到串口打印,本项目需要发送到协调节点。这就需要分析我们做过的“基于zigbee协议栈的无线数据传输”实验中,终端节点是怎么把数据发送到协调器的。
在stack源码ZStack-CC2530-2.3.0-1.4.0中,SampleApp.c是提供给用户进行应用层编程的入口。其包含的函数SampleApp_SendPeriodicMessage()用以周期性发送数据(因此是终端节点调用该函数)。 
第440行为发送的数据长度,第441行为待发送的数据地址。上电后,该节点会周期性(5秒)发送data里的数据。 因此,我们只需要在这个函数里,把data换为从温湿度传感器、光敏传感器处获得的数据即可。
粤嵌的温湿度传感器测试代码中(见DHT11-P06.rar),函数void SendTemp(void)调用函数DHT11_Read_Data(buf)读取5个字节40bits的温湿度数据到buf数组中(具体原理可参见《ZigBee 开发实验指导书》第六章 温湿度实验),其中: buf[0]=8bit 湿度整数数据,buf[1]=8bit 湿度小数数据, buf[2]= 8bit温度整数数据,buf[3]=8bit 温度小数数据。 然后调用hexToAscall()函数将buf中的数据按字节转换为了ASCII码,并与说明信息一起拼接进rus字符串,最后调用uartSendString()函数打印到串口输出。
本步骤中,需要: - 将DHT11-P06项目中的DHT11.c、DHT11.h加入到现有的ZStack-CC2530项目,并修改DHT11.c,以符合SampleApp_SendPeriodicMessage()函数的调用需求;
将DHT11-P06项目中的dht11.c, dht11.h,delay.c,delay.h,system.h五个文件拷贝到:
ZStack-CC2530-2.3.0-1.4.0\Projects\zstack\Samples\SampleApp-transfer data in 1 hour\Source目录下 打开SampleApp.eww项目,在左侧窗口的workplace下,选中项目“SampleAPP-EndDeviceEB-Pro”下的“App”条项,右键-?Add-? Add Files,将刚才拷贝过来的dht11.c、dht11.h等5个文件添加到项目中。
在dht11.c中: 屏蔽掉usart.h(因为dht11项目和zstack项目关于uart的实现有不同,索性屏蔽掉不用) 
把所有调用uartSendString()的语句屏蔽。 在dht11.c文件末尾,添加新函数DHT11(u8 *T_H): 
在dht11.c文件开始部分,添加对新函数DHT11的引用说明: 
- 修改SampleApp_SendPeriodicMessage()函数,在其中调用DHT11.c获取温湿度的函数,以期拿到温湿度数据。即,将原data数据,改换为调用温湿度获取函数,并将获得的数据通过AF_DataRequest()发送出去。
将原项目代码: 
修改为: 
- 修改void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )函数,原项目中是收到0-9这10个数字,将其转换为ASCII码后在串口打印输出。本项目中需要将接收到的数据直接从串口打印输出即可。
原项目代码: 
需要改为下面的内容: 
修改文件SampleApp.h: 在文件后半部分添加对DHT11的外部引用说明及DATALEN的宏定义说明: 
修改完成后,保存。 将温湿度传感器接到zigbee开发板上(注意是P06,vcc,GND,这三个引脚),这块zigbee板作为终端节点,采集传感器数据,并通过zigbee无线通道发送给协调器。 在IAR开发环境左侧窗口的workplace下: - 选择EndDeviceEB-Pro,编译,下载给zigbee终端节点;
- 选择CoordinateEB-Pro,编译,下载给zigbee协调器节点;
- 先用miniUSB线连接协调器节点,在PC机“设备管理”中可以看到新增的USB串口,比如为COM5. 在协调器上连接好蓝牙模块。
- 再用另一根miniUSB线连接终端节点。
- 打开PC上的串口助手,串口选COM5,波特率为115200,自动换行,16进制。
- 等几秒钟,应该可以看到串口助手上有数据成功接收。第1个字节为温度的整数部分,第2个字节为温度的小数部分,第3个字节为湿度的整数部分,第4个字节为湿度的小数部分.
如下图,此时温度的整数部分为0x19,即27度。用手握住温湿度传感器,过一段时间后可以看到温度数据缓慢上升。 

打开手机蓝牙,用蓝牙助手APP连接蓝牙模块,选择字节流方式,即可在手机蓝牙助手上同时收到温湿度信息。 至此,表明温湿度数据可以从终端节点采集,发送到协调器,再由协调器通过蓝牙模块发送到手机上。
- Zigbee终端节点采集光敏传感器数据并发送到协调器
粤嵌的光敏传感器测试代码中(见LightSensor_P07.rar)。函数getValue()返回了16bit的电压值,在在main.c中,又将调用getValue()得到的sensor_var除以了100,作为电压的整数值,除以10再取余10,作为个位小数的值,取余10,作为十位小数的值。为什么这么处理就不清楚了
本步骤中,需要: - 将LightSensor-P07项目中的LightSensor.c、LightSensor.h加入到现有的ZStack-CC2530项目,并修改lightSensor.c,以满足SampleApp_SendPeriodicMessage()函数的调用需求;
将LightSensor-P07项目中的lightSensor.c, lightSensor.h, 2文件拷贝到:
ZStack-CC2530-2.3.0-1.4.0\Projects\zstack\Samples\SampleApp-transfer data in 1 hour\Source目录下 打开SampleApp.eww项目,在左侧窗口的workplace下,选中项目“SampleAPP-EndDeviceEB-Pro”下的“App”条项,右键-?Add-? Add Files,将刚才拷贝过来的lightSensor.c/h等2个文件添加到项目中。
打开lightSensor.c,修改getValue()函数: 
改为: 
并在lightSensor.c文件开头处添加: 
在SampleApp.h文件的后部添加: 此处将DATALEN改为了6 
- 修改SampleApp_SendPeriodicMessage()函数,在其中调用LightSensor.c获取光敏电压的函数,以期拿到电压数据。即,将原data数据,改换为调用光敏电压获取函数,并将获得的数据通过AF_DataRequest()发送出去。
打开SampleApp.c,在函数SampleApp_SendPeriodicMessage()中,添加划线的几条语句: 
修改完成后,保存。 将光敏传感器接到zigbee终端节点开发板上,板子上之前已经在P06端口连接了温湿度传感器。 在IAR开发环境左侧窗口的workplace下: - 选择EndDeviceEB-Pro,编译,下载给zigbee终端节点;
- 选择CoordinateEB-Pro,编译,下载给zigbee协调器节点;
- 先用miniUSB线连接协调器节点,在PC机“设备管理”中可以看到新增的USB串口,比如为COM5. 在协调器上连接好蓝牙模块。
- 再用另一根miniUSB线连接终端节点。
- 打开PC上的串口助手,串口选COM5,波特率为115200,自动换行,16进制。
- 等几秒钟,应该可以看到串口助手上有数据成功接收。第1个字节为温度的整数部分,第2个字节为温度的小数部分,第3个字节为湿度的整数部分,第4个字节为湿度的小数部分.第5个字节为光敏电压的值
蓝牙模块在2.2步骤设置成功后,手机上的蓝牙助手应能搜索到该蓝牙模块,连接上后选择字节流方式,选择16进制方式,应可收到zigbee协调器发送上来的数据,同时,在PC侧的串口助手上,应可看到相同的数据。
至此,本项目完成了从zigbee终端节点采集温湿度、光敏数据,通过zigbee无线通道传输给协调器节点,协调器接收到数据后,一方面通过串口在PC机上显示,另一方面通过蓝牙模块发送给手机端显示。 总体效果图如下: 

完整的Word格式文档51黑下载地址:
指导书.doc
(3.14 MB, 下载次数: 23)
|