實驗內容: 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)
2020-4-7 21:52 上傳
點擊文件名下載附件
|