實驗內(nèi)容:
zigbee終端節(jié)點采集溫濕度、光敏數(shù)據(jù),通過zigbee無線通道傳輸給協(xié)調(diào)器節(jié)點,協(xié)調(diào)器接收到數(shù)據(jù)后,一方面通過串口在PC機上顯示,另一方面通過藍牙模塊發(fā)送給手機端顯示。
本項目需要完成的主要工作如下:
提供的硬件設(shè)備:
每個盒子包括:zigbee板2個,CCdebuger1個,藍牙模塊1個,USB-TTL模塊1個,溫濕度傳感器1個,光敏傳感器1個,miniUSB線2根,D口USB線1根, 配套杜邦線
所需的文件:
名稱 | 說明 |
開發(fā)環(huán)境IAR EW8051-8.1帶注冊工具 | IAR開發(fā)環(huán)境 |
Texas Instruments one.rar | CC2530 Z-Stack源碼及測試程序,老師提供 |
gec-Zigbee-ccdebug仿真器驅(qū)動 | CC DEBUGER的驅(qū)動,老師提供 |
CC DEBUGGER在win7 win10下的安裝方法.rar | CC DEBUGER在64bit win7/10下的驅(qū)動,老師提供 |
CH341SER | Usb轉(zhuǎn)串口驅(qū)動,老師提供 |
UartAssist.exe | 串口助手,老師提供 |
手機藍牙助手 | 自行下載 |
DHT11.rar | 溫度傳感器測試項目,老師提供 |
LightSensor_P07.rar | 光敏傳感器測試項目,老師提供 |
本文件 | 實驗指導(dǎo)書 |
本次實驗需要安裝IAR集成開發(fā)環(huán)境、CCDebuger仿真器驅(qū)動、通過USB-TTL模塊設(shè)置藍牙模塊波特率、安裝手機藍牙助手
1.1 安裝IAR集成開發(fā)環(huán)境,安裝CCdebuger的驅(qū)動
請按照之前實驗的步驟安裝IAR開發(fā)環(huán)境、CCdebuger仿真器驅(qū)動。
1.2 安裝手機藍牙APP
自行從網(wǎng)上下載、安裝。藍牙助手有很多版本,設(shè)置及使用方法都基本相同。
1.3 藍牙模塊設(shè)置:
藍牙模塊與USB-TTL接口模塊的接線如下表:
藍牙模塊 | USB-TTL接口模塊 |
Rx | Rx |
Tx | Tx |
Vcc | 5v(由miniUSB供電,JTAG不提供5v) |
GND | GND |
En/State懸空 |
用杜邦線按上表引腳對應(yīng)關(guān)系,連接藍牙模塊和USB-TTL模塊,然后將USB-TTL模塊插入PC機USB接口,如下圖,在“計算機管理”窗口可看到多出一個USB轉(zhuǎn)串口的設(shè)備(本圖為串口5,COM5,每個usb口對應(yīng)的串口不一樣)。
需要進入AT指令模式來設(shè)置藍牙模塊波特率、模塊名(以免混淆)
AT模式波特率為38400,正常通信時波特率為9600
每條AT指令輸入完成后,都必須按一下回車鍵,再點擊串口助手上的發(fā)送按鈕,才可發(fā)送
LED必須進入慢閃模式后方可進行AT指令測試
先按住HC05藍牙模塊上面的按鍵(復(fù)位鍵),再將USB-TTL模塊插上PC機,等藍牙模塊上面的LED進入慢閃模式后(約1秒鐘閃爍一次),即可進行AT命令測試:
在串口助手的左側(cè)窗口 1:選擇串口號、波特率(AT模式波特率為38400,缺省的正常通信模式下波特率為9600) 2:在命令發(fā)送區(qū),輸入at(大小寫都可以),然后回車,再用鼠標(biāo)點擊“發(fā)送”按鈕,即可在接收區(qū)看到返回“OK”,表示串口調(diào)試助手與藍牙間連接成功 |
測試連接成功后,在發(fā)送區(qū)輸入命令(大小寫不敏感):
命令 | 接收區(qū)顯示 | 說明 | |
1 | AT+UART | +UART:9600,0,0 OK | 查看藍牙模塊當(dāng)前的波特率配置 |
2 | at+uart=115200,0,0 | OK | 設(shè)置藍牙模塊使用時的波特率為115200,停止位為1位,校驗位為none |
3 | at+name=fengb | 沒有顯示 | 設(shè)置藍牙模塊的名字為fengb(建議設(shè)置為自己的名字拼音,免得相互沖突) |
設(shè)置完成后,拔下USB-TTL模塊,再插回PC機,相當(dāng)于重啟藍牙模塊。此時,藍牙模塊上的狀態(tài)燈處于快速閃爍狀態(tài)。打開手機藍牙,搜索附近可用設(shè)備,點擊連接,即可看到該設(shè)備的名字(如剛才設(shè)置的為fengb),配對的pin碼為:1234
輸入后,即可實現(xiàn)手機藍牙與藍牙模塊的連接。
本步驟提供終端節(jié)點分別單獨采集溫濕度傳感器、光敏傳感器的項目,用以熟悉采集程序的代碼,并確認(rèn)藍牙模塊、串口助手、手機藍牙助手APP可正確使用。
Zigbee終端節(jié)點采集溫濕度項目,改為P06引腳,可測試溫濕度傳感器、串口助手。
本項目采用粵嵌傳感器測試代碼,但由于廠商提供的溫濕度傳感器、光敏傳感器都占用了P07引腳,因此,需要將原項目中溫濕度傳感器從P07引腳的數(shù)據(jù)輸入,改為P06引腳的輸入。
將老師提供的源碼解壓到D盤(注意路徑上不要有中文,否則IAR會閃退)。
項目關(guān)鍵代碼分析如下
DHT11_Read_Data(buf)讀取5個字節(jié)40bits的溫濕度數(shù)據(jù)到buf數(shù)組中(具體原理可參見《ZigBee 開發(fā)實驗指導(dǎo)書》第六章 溫濕度實驗),其中:
buf[0]=8bit 濕度整數(shù)數(shù)據(jù),buf[1]=8bit 濕度小數(shù)數(shù)據(jù),
buf[2]= 8bit溫度整數(shù)數(shù)據(jù),buf[3]=8bit 溫度小數(shù)數(shù)據(jù)。
然后調(diào)用hexToAscall()函數(shù)將buf中的數(shù)據(jù)按字節(jié)轉(zhuǎn)換為了ASCII碼,并與說明信息一起拼接進rus字符串,最后調(diào)用uartSendString()函數(shù)打印到串口輸出。
請仔細學(xué)習(xí)《ZigBee 開發(fā)實驗指導(dǎo)書》第三章LED實驗、第六章溫濕度實驗,找到修改、配置溫濕度傳感器IO控制器的方法。并按以下內(nèi)容修改項目。
打開文件dht11.h,將引腳定義由P07改為P06:
打開文件dht11.c,將P0端口寄存器進行對應(yīng)的設(shè)置:
保存并編譯,通過后,連接硬件,下載代碼。
Pin | 名稱 | 注釋 |
1 | VCC | 供電3-5.5V |
2 | DATA | 單總線,串行數(shù)據(jù) |
3 | NC | 懸空 |
4 | GND | 接地 |
注意: 串口號為從“設(shè)備管理器”中查到的USB轉(zhuǎn)串口的串口號 波特率為115200 |
(有可能有個別溫濕度傳感器已被燒掉,請在給測試系統(tǒng)上電后,用手指按住溫濕度傳感器感受是否有發(fā)燙現(xiàn)象,如果發(fā)燙則表明已燒掉,則立即斷電,取下溫濕度傳感器)
本階段測試通過后,表明可在zigbee開發(fā)板的P06端口,正確讀取到溫濕度傳感器的數(shù)據(jù)。打包保留測試通過的源碼為:DHT11_P06.rar
本項目采用粵嵌傳感器測試代碼,對應(yīng)源碼:LightSensor_P07.rar
光敏傳感器圖示如下:
將老師提供的源碼解壓到D盤(注意路徑上不要有中文,否則IAR會閃退)
項目關(guān)鍵代碼分析如下:
ADCH、ADCL:分別為ADC數(shù)據(jù)的高8位、低8位,在ioCC2530.h中定義。
對value乘以330,再右移15位(215=32768,近似于33000),相當(dāng)于將value除以100
在main.c中,調(diào)用函數(shù)getValue()得到的sensor_var除以了100,作為電壓的整數(shù)值,除以10再取余10,作為個位小數(shù)的值,取余10,作為十位小數(shù)的值。(為什么這么處理就不清楚了,廠商提供的數(shù)據(jù)手冊一直無法下載。。。)
編譯通過后,連接硬件,下載代碼。
Pin | 名稱 | 注釋 |
1 | VCC | 供電3-5.5V |
2 | GND | 接地 |
3 | Do | 數(shù)字信號輸出 |
4 | Ao | 模擬信號輸出 |
編譯、下載,全速運行后,可以在串口助手上看到電壓值的輸出。
注意: 串口號為從“設(shè)備管理器”中查到的USB轉(zhuǎn)串口的串口號 波特率為115200 |
完成此步驟,即可證明光敏傳感器、串口助手及對應(yīng)的測試程序工作正常。
下一步,將已完成設(shè)置的藍牙模塊接入zigbee板,并用手機連接該藍牙模塊,實現(xiàn)zigbee模塊到手機的數(shù)據(jù)傳輸。
此時,拔掉zigbee的CCdebuger和miniUSB連接,使zigbee板處于無電狀態(tài)。將藍牙模塊連接到zigbee板上。
藍牙模塊與zigbee板的接線:
藍牙模塊 | Zigbee板 |
Rx | P02 |
Tx | P03 |
Vcc | 5v |
GND | GND |
連接好連線后,用miniusb線給本zigbee板供電(此處必須由miniUSB給zigbee板供電,因為JTAG接口不提供5v)?上仍赑C上的串口助手軟件里可以看到光敏電壓的輸出。表明光敏傳感器工作正常。
藍牙模塊在“環(huán)境搭建”步驟已設(shè)置了模塊名(例子中為fengb)和波特率(115200),此時打開手機藍牙功能,打開手機上的藍牙助手APP,搜索周圍環(huán)境的藍牙模塊fengb,找到后點擊,進行配對,配對碼是“1234”,然后連接該藍牙設(shè)備,選中“字節(jié)流模式”,就可以在手機上的藍牙助手界面看到光敏電壓數(shù)據(jù)。
注意,有的藍牙助手上不能顯示中文,則需要在代碼中把打印語句中的中文該為英文即可。
藍牙助手APP選擇字節(jié)流模式 | 中文顯示(亂碼) |
改源碼中文為英文顯示 | PC串口助手同時顯示 |
本步驟分兩個環(huán)節(jié),一是zigbee終端節(jié)點采集溫濕度數(shù)據(jù)發(fā)送給協(xié)調(diào)器,一是zigbee終端節(jié)點采集光敏數(shù)據(jù)發(fā)送給協(xié)調(diào)器。代碼原型采用前一步驟中使用的代碼,并需根據(jù)要求進行修改。
本項目中,zigbee終端節(jié)點拿到溫濕度數(shù)據(jù)、光敏傳感器數(shù)據(jù)的所有操作,與原測試代碼都是相同的。區(qū)別在于拿到數(shù)據(jù)后,原測試代碼是直接輸出到串口打印,本項目需要發(fā)送到協(xié)調(diào)節(jié)點。這就需要分析我們做過的“基于zigbee協(xié)議棧的無線數(shù)據(jù)傳輸”實驗中,終端節(jié)點是怎么把數(shù)據(jù)發(fā)送到協(xié)調(diào)器的。
在stack源碼ZStack-CC2530-2.3.0-1.4.0中,SampleApp.c是提供給用戶進行應(yīng)用層編程的入口。其包含的函數(shù)SampleApp_SendPeriodicMessage()用以周期性發(fā)送數(shù)據(jù)(因此是終端節(jié)點調(diào)用該函數(shù))。
第440行為發(fā)送的數(shù)據(jù)長度,第441行為待發(fā)送的數(shù)據(jù)地址。上電后,該節(jié)點會周期性(5秒)發(fā)送data里的數(shù)據(jù)。
因此,我們只需要在這個函數(shù)里,把data換為從溫濕度傳感器、光敏傳感器處獲得的數(shù)據(jù)即可。
粵嵌的溫濕度傳感器測試代碼中(見DHT11-P06.rar),函數(shù)void SendTemp(void)調(diào)用函數(shù)DHT11_Read_Data(buf)讀取5個字節(jié)40bits的溫濕度數(shù)據(jù)到buf數(shù)組中(具體原理可參見《ZigBee 開發(fā)實驗指導(dǎo)書》第六章 溫濕度實驗),其中:
buf[0]=8bit 濕度整數(shù)數(shù)據(jù),buf[1]=8bit 濕度小數(shù)數(shù)據(jù),
buf[2]= 8bit溫度整數(shù)數(shù)據(jù),buf[3]=8bit 溫度小數(shù)數(shù)據(jù)。
然后調(diào)用hexToAscall()函數(shù)將buf中的數(shù)據(jù)按字節(jié)轉(zhuǎn)換為了ASCII碼,并與說明信息一起拼接進rus字符串,最后調(diào)用uartSendString()函數(shù)打印到串口輸出。
本步驟中,需要:
將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項目,在左側(cè)窗口的workplace下,選中項目“SampleAPP-EndDeviceEB-Pro”下的“App”條項,右鍵-?Add-? Add Files,將剛才拷貝過來的dht11.c、dht11.h等5個文件添加到項目中。
在dht11.c中:
屏蔽掉usart.h(因為dht11項目和zstack項目關(guān)于uart的實現(xiàn)有不同,索性屏蔽掉不用)
把所有調(diào)用uartSendString()的語句屏蔽。
在dht11.c文件末尾,添加新函數(shù)DHT11(u8 *T_H):
在dht11.c文件開始部分,添加對新函數(shù)DHT11的引用說明:
將原項目代碼:
修改為:
原項目代碼:
需要改為下面的內(nèi)容:
修改文件SampleApp.h:
在文件后半部分添加對DHT11的外部引用說明及DATALEN的宏定義說明:
修改完成后,保存。
將溫濕度傳感器接到zigbee開發(fā)板上(注意是P06,vcc,GND,這三個引腳),這塊zigbee板作為終端節(jié)點,采集傳感器數(shù)據(jù),并通過zigbee無線通道發(fā)送給協(xié)調(diào)器。
在IAR開發(fā)環(huán)境左側(cè)窗口的workplace下:
如下圖,此時溫度的整數(shù)部分為0x19,即27度。用手握住溫濕度傳感器,過一段時間后可以看到溫度數(shù)據(jù)緩慢上升。
打開手機藍牙,用藍牙助手APP連接藍牙模塊,選擇字節(jié)流方式,即可在手機藍牙助手上同時收到溫濕度信息。
至此,表明溫濕度數(shù)據(jù)可以從終端節(jié)點采集,發(fā)送到協(xié)調(diào)器,再由協(xié)調(diào)器通過藍牙模塊發(fā)送到手機上。
粵嵌的光敏傳感器測試代碼中(見LightSensor_P07.rar)。函數(shù)getValue()返回了16bit的電壓值,在在main.c中,又將調(diào)用getValue()得到的sensor_var除以了100,作為電壓的整數(shù)值,除以10再取余10,作為個位小數(shù)的值,取余10,作為十位小數(shù)的值。為什么這么處理就不清楚了
本步驟中,需要:
將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項目,在左側(cè)窗口的workplace下,選中項目“SampleAPP-EndDeviceEB-Pro”下的“App”條項,右鍵-?Add-? Add Files,將剛才拷貝過來的lightSensor.c/h等2個文件添加到項目中。
打開lightSensor.c,修改getValue()函數(shù):
改為:
并在lightSensor.c文件開頭處添加:
在SampleApp.h文件的后部添加:
此處將DATALEN改為了6
打開SampleApp.c,在函數(shù)SampleApp_SendPeriodicMessage()中,添加劃線的幾條語句:
修改完成后,保存。
將光敏傳感器接到zigbee終端節(jié)點開發(fā)板上,板子上之前已經(jīng)在P06端口連接了溫濕度傳感器。
在IAR開發(fā)環(huán)境左側(cè)窗口的workplace下:
藍牙模塊在2.2步驟設(shè)置成功后,手機上的藍牙助手應(yīng)能搜索到該藍牙模塊,連接上后選擇字節(jié)流方式,選擇16進制方式,應(yīng)可收到zigbee協(xié)調(diào)器發(fā)送上來的數(shù)據(jù),同時,在PC側(cè)的串口助手上,應(yīng)可看到相同的數(shù)據(jù)。
至此,本項目完成了從zigbee終端節(jié)點采集溫濕度、光敏數(shù)據(jù),通過zigbee無線通道傳輸給協(xié)調(diào)器節(jié)點,協(xié)調(diào)器接收到數(shù)據(jù)后,一方面通過串口在PC機上顯示,另一方面通過藍牙模塊發(fā)送給手機端顯示。
總體效果圖如下:
完整的Word格式文檔51黑下載地址:
指導(dǎo)書.doc
(3.14 MB, 下載次數(shù): 23)
歡迎光臨 (http://www.torrancerestoration.com/bbs/) | Powered by Discuz! X3.1 |