日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

藍(lán)牙技術(shù)架起LabVIEW和Arduino之間無線溝通的橋梁

 P_LarT 2016-09-08

       在電腦上,我用Labview制作了一個酷界面,顯示著宜昌城區(qū)的室內(nèi)氣候,顯然溫度和濕度都比較宜人,原因是幾天的大雨。電腦屏幕前是Arduino溫濕度采樣器,采樣器左側(cè)部分是Arduino控制器,上面層疊著藍(lán)牙模塊,右側(cè)部分是DHT11溫濕度傳感器,傳感器把溫度和濕度通過藍(lán)牙上傳到了上位機(jī)Labview儀表盤中顯示出來。有了無線藍(lán)牙通信,PC機(jī)儀表面板與采樣器之間可以脫離開有線的束縛?,F(xiàn)在把采樣器拿到了5米以外的空間,對著DHT11傳感器,哈氣,一股潮濕的暖流向它襲來,再看電腦屏幕上的儀表盤指針行動起來了,溫濕度值同時開始上升。好玩!又一次親身體驗(yàn)到了科技的樂趣。

DF-Bluetooth V3模塊與PC機(jī)的藍(lán)牙連接

       這篇文章著重介紹DFRobot公司出品的Bluetooth模塊應(yīng)用。DF-BluetoothV3藍(lán)牙模塊采用獨(dú)特雙層板設(shè)計(jì),即美觀又防止靜電損壞模塊,設(shè)計(jì)兩個電源輸入口,寬電壓供電(3.5V~8V)和3.3V供電,可適用于各種場合。STATE和LINK指示燈清晰明亮,用于顯示模塊工作狀態(tài)和聯(lián)機(jī)狀態(tài)。自帶高效板載天線,信號質(zhì)量好發(fā)射距離更遠(yuǎn),透明串口協(xié)議,可與各種藍(lán)牙適配器、藍(lán)牙手機(jī)配對使用,人性化的設(shè)計(jì)為二次開發(fā)提供了便利。

   通過藍(lán)牙模塊DF-BluetoothV3,建立起PC機(jī)與Arduino單片機(jī)之間無線通信的流程圖如下。雙擊圖片,都可以放大觀看的,這樣看得清楚些!

 

圖2  PC機(jī)與Arduino單片機(jī)的無線通信的流程圖

    圖2中DF-BluetoothV3藍(lán)牙模塊,它可以層疊在Arduino控制器上,我蠻欣賞DFRobot公司的電路板層疊設(shè)計(jì)的理念,這樣可以把作品的電控部分集成在一起,為作品騰出了更多的創(chuàng)意空間。DFRobot中國官網(wǎng):http:///g4oQB。

把Arduino控制器和DHT11溫濕度傳感器用雙面膠帶粘在電池盒背面,再把電池盒的電源插頭插到Arduino UNO的電源插座里,給藍(lán)牙溫濕度采樣器供電,于是采樣器的硬件系統(tǒng)就這樣快速搭建完成了,如圖3所示。

 

    圖3 藍(lán)牙溫濕度采樣器

    廠家把DF-BluetoothV3藍(lán)牙模塊,默認(rèn)設(shè)置為從機(jī)模式,波特率為9600 b / s,通過AT指令可以修改波特率和主從機(jī)模式,將2個模塊分別設(shè)置為主模塊和從模塊后,2個模塊就可以自由配對進(jìn)行數(shù)據(jù)傳輸,非常適用于2個單片機(jī)之間的數(shù)據(jù)通訊。

雙單片機(jī)藍(lán)牙通信的文章,《樂高8275科技套件B模型的Arduino電控改造(雙單片機(jī)藍(lán)牙通信)》,網(wǎng)址: http://www./zhang700309/blog/12-07/281931_aa45c.html 。

    如果僅是PC機(jī)與Arduino單片機(jī)的藍(lán)牙通信,就用出廠默認(rèn)設(shè)置即可,即從機(jī)模式,波特率為9600 b / s,所以不需要用AT指令進(jìn)行事先特別設(shè)置,對于兩個單片機(jī)之間主從機(jī)藍(lán)牙通信實(shí)驗(yàn),我會在今后的文章中介紹的。

    DF-BluetoothV3模塊有兩個撥碼開關(guān),1號開關(guān)LED Off是LINK燈的開關(guān),可以關(guān)閉LINK省電,撥到ON為開,撥到1端為關(guān);2號開關(guān)AT Mode是AT命令模式開關(guān),撥到ON,進(jìn)入AT命令模式,撥到2端,退出AT命令模式。在進(jìn)行PC機(jī)與Arduino單片機(jī)之間進(jìn)行藍(lán)牙無線通信實(shí)驗(yàn)前,仔細(xì)看圖4中藍(lán)牙模塊電路板的標(biāo)識文字,要把1號開關(guān)LED Off撥到ON,把2號開關(guān)AT Mode撥到2端。

       圖4  DF-BluetoothV3模塊的撥碼開關(guān)

    PC機(jī)與Arduino控制器之間進(jìn)行藍(lán)牙無線通信不僅需要DF-BluetoothV3模塊,而且還需要把藍(lán)牙適配器插在PC機(jī)USB插座里,市面上大多數(shù)藍(lán)牙適配器都可以與DF-BluetoothV3模塊成功配對。插上藍(lán)牙適配器,電腦會自動搜索新設(shè)備,安裝藍(lán)牙驅(qū)動,并映射出兩個COM串口,可以在設(shè)備管理器的“端口(COM和LPT)”目錄里,看到它們,這些不是我們需要的端口,但千萬不要把它們卸載了!

    使用藍(lán)牙適配器和DF-Bluetooth V3配對時,DF-Bluetooth V3必須設(shè)置為從機(jī)模式,藍(lán)牙適配器不需要驅(qū)動程序,配對密碼“1234”。 我用Windows XP自帶的藍(lán)牙組件“LINK”聯(lián)機(jī)DF-Bluetooth V3藍(lán)牙模塊,不成功。采用IVT BlueSoleil 1.6藍(lán)牙管理軟件聯(lián)機(jī)是成功的!IVT軟件請下載:http:///file/e7xrv2ou# IVT Bluesoleil 1.6.zip。

    安裝IVT BlueSoleil 1.6藍(lán)牙管理軟件時,它會讓您安裝藍(lán)牙設(shè)備驅(qū)動,還有多個藍(lán)牙虛擬串口,不管它,都安裝上,如下圖。

     圖5  IVT BlueSoleil軟件的藍(lán)牙虛擬串口安裝

    安裝完IVT軟件,然后我們用它一步步地把藍(lán)牙適配器與DF-Bluetooth V3藍(lán)牙模塊進(jìn)行聯(lián)機(jī)“LINK”。

   打開IVT BlueSoleil軟件,橘色的球體就是藍(lán)牙適配器,在黃色的球體上,點(diǎn)右鍵→搜索藍(lán)牙設(shè)備,這時軟件界面里會出現(xiàn)一個帶問號的Bluetooth V3圖標(biāo),它就是搜索到的DF-Bluetooth V3藍(lán)牙模塊。在Bluetooth V3圖標(biāo)上,點(diǎn)右鍵→配對,會出現(xiàn)“配對”對話框,要求填寫口令“1234”,填好后點(diǎn)確定,配對后藍(lán)牙硬件模塊的STATE指示燈會一閃一閃的。

    在Bluetooth V3 圖標(biāo)上,點(diǎn)右鍵→刷新服務(wù),IVT軟件界面的串口圖標(biāo)會高亮顯示,如圖6所示。接下來進(jìn)行最后一個“LINK”步驟,Bluetooth V3圖標(biāo)上,點(diǎn)右鍵→連接→藍(lán)牙串行端口服務(wù),隨之出現(xiàn) “快速連接”對話框,對話框顯示的串行端口就是聯(lián)機(jī)生成的串口號。聯(lián)機(jī)成功后,橘色的球體與Bluetooth V3圖標(biāo)之間有一條綠色虛線出現(xiàn),表示正在傳輸數(shù)據(jù)。同時DF-Bluetooth V3藍(lán)牙模塊的綠色“LINK”指示燈會持續(xù)點(diǎn)亮,指示聯(lián)機(jī)成功!

步驟一:
步驟二:
步驟三:
步驟四:
步驟五:
步驟六:
      圖6  DF-Bluetooth V3藍(lán)牙模塊與藍(lán)牙適配器的聯(lián)機(jī)

圖6顯示,Windows 操作系統(tǒng)桌面右下角出現(xiàn)提示文字,“我的藍(lán)牙端口COM16(COM16)已與遠(yuǎn)程設(shè)備建立連接”,當(dāng)然您具體聯(lián)機(jī)操作,最后生成的串口號不一定是COM16,要記住您生成的串口號,這個虛擬出的藍(lán)牙串口號是PC機(jī)與Arduino控制器之間通信的唯一通道。這時再打開Windows設(shè)備管理器的“端口(COM和LPT)”目錄,您可以把多余的串行端口給卸載掉了,如圖。

     圖7 卸載多余的串行端口

    藍(lán)牙適配器與DF-Bluetooth V3藍(lán)牙模塊聯(lián)機(jī)成功后,生成了串口號COM16,現(xiàn)在就可以用RS232串口協(xié)議進(jìn)行無線通信,我感覺就像用RS232有線通信一樣,搞無線通信。

 藍(lán)牙虛擬測量儀上位機(jī)軟件設(shè)計(jì)

      現(xiàn)在談?wù)勏挛粰C(jī)Arduino控制器如何把DHT11傳感器的溫濕度,通過藍(lán)牙串口上傳到上位PC機(jī)的labview里,顯示在前面板上??梢钥纯次覟檫@個作品設(shè)計(jì)的Labview儀表盤,蠻酷的
     這個儀表盤外形控件看起來很棒,是Labview軟件自帶的嗎?不是,您需要下載“VI封裝管理器”軟件VIPM,VIPM是管理Labview附加組件的Labview官方軟件,Labview附加組件有些像Arduino第三方庫文件。我用這個軟件下載和安裝了一個金屬風(fēng)格控件庫組件。VIPM下載地址:http://www./vipm

    在Windows桌面上,點(diǎn)擊VIPM圖標(biāo),運(yùn)行程序。在其菜單欄的“Window”菜單項(xiàng)里,選擇Show LabVIEW Tools Network,如果這時您的電腦已經(jīng)連上了互聯(lián)網(wǎng),就會緊跟著出現(xiàn)一個更直觀的VI附加組件的介紹和安裝窗口。
    選擇Sort By為“Rating”,再一頁頁地翻看,找到下圖我用矩形框標(biāo)注的金屬風(fēng)格控件庫組件,點(diǎn)擊下載,并安裝。
    圖8 金屬風(fēng)格主題控件庫組件的下載     
    安裝完后,Labview的控件工具庫面板里就會出現(xiàn)這個金屬風(fēng)格的控件庫組件,控件包括:儀表盤、按鈕、開關(guān)、圖表等。有了這個控件庫組件,您再設(shè)計(jì)的人機(jī)交互面板是不是會比以前更酷,我喜歡通過某種“利器”放大自己能力的感覺。
   恩,現(xiàn)在我來做一個實(shí)驗(yàn),找出一個打火機(jī),要干嘛?別緊張!點(diǎn)火來“烤”DHT11溫濕度傳感器,猜猜電腦屏幕上的Labview儀表盤上溫度和濕度指針如何行動?看下圖。
    圖9 火烤試驗(yàn)下藍(lán)牙溫濕度測量儀前面板的溫濕度顯示

    看看,溫度上升到了50°C,而濕度被蒸發(fā)下降到了25%。夏日里,我們并不缺乏對溫度和濕度的定性感受,但如果能清晰直觀地觀測到定量值,相信對溫濕度,可以做到更加心里有數(shù),就如您隨時看手表,了解現(xiàn)在的時間幾點(diǎn)幾分了。

    Labview前面板的UI設(shè)計(jì)比較酷,但支撐它的后臺框圖程序,卻很簡單,花短短20分鐘來設(shè)計(jì)這個程序足以,初學(xué)者除外。

   藍(lán)牙溫濕度測量儀PC機(jī)儀表面板框圖程序如下:


   圖10 藍(lán)牙溫濕度測量儀的后臺框圖程序

     要編寫串口通信程序,不僅要具備Labview軟件,還必須另外安裝NI_VISA串口通訊協(xié)議驅(qū)動。安裝完NI_VISA,在框圖程序界面右擊鼠標(biāo),出現(xiàn)函數(shù)工具庫面板,再點(diǎn)擊“儀表I/O”→“串口”,就會出現(xiàn)串口函數(shù)VI子面板,如下圖。

      圖11 VISA串口函數(shù)VI子面板

    框圖程序是采用NI_VISA“串口”函數(shù)來訪問和控制串口的。VISA中的“串口”函數(shù)庫里包含如圖11所示的八個子函數(shù)VI。本設(shè)計(jì)用到的三個VISA串口子函數(shù)分別是VISA 配置串口、VISA讀取和VISA關(guān)閉。

    VISA 配置串口函數(shù)的作用是完成串口參數(shù)的初始化設(shè)置,包括了串口資源名稱,波特率,奇偶校驗(yàn)、數(shù)據(jù)比特、是否啟用終止符等,圖10中該函數(shù)連接了兩個輸入變量,它們分別連在串口資源名稱和波特率參數(shù)端子上,變量值由前面板上的相應(yīng)控件來設(shè)定,另外該函數(shù)在“是否啟用終止符”的端子上還連接了一個布爾常量,常量值為false,含義是不啟用終止符,其它輸入?yún)?shù)采用默認(rèn)值。VISA串口配置函數(shù)有兩個輸出端子,它的圖標(biāo)上面輸出端子輸出的是串口資源名稱,下面輸出端子輸出的是錯誤碼,輸出端子向下游函數(shù)傳遞信息。

    VISA讀取函數(shù)有三個輸入端子,圖中VISA讀取函數(shù)圖標(biāo)的上面輸入端子是前面VISA 配置串口函數(shù)傳遞的串口資源名稱,下面的輸入端子傳遞的是錯誤碼,意思是若前面的函數(shù)出錯了,會往這里輸入一個錯誤碼,然后繼續(xù)往下面?zhèn)鬟f,有錯誤碼出現(xiàn)時程序是不會工作的。中間輸入端子是每次從串口讀取的字符串字節(jié)數(shù),本文串口通信的字節(jié)數(shù)應(yīng)設(shè)置為2。

   圖10中VISA讀取函數(shù)包含在一個While循環(huán)結(jié)構(gòu)中,每20ms從串口讀取兩個字節(jié),并從該函數(shù)的中間輸出端子,以字符串的形式輸出。VISA讀取函數(shù)圖標(biāo)上面輸出端子輸出的是串口資源名稱,下面的輸出端子輸出的是錯誤碼,繼續(xù)向下游函數(shù)傳遞信息。在前面板按下“EXIT”按鈕,可結(jié)束While 循環(huán)。

    VISA關(guān)閉函數(shù)的作用是當(dāng)程序停止時,必須要把所用到的串口設(shè)備關(guān)閉,若不關(guān)閉,其他程序就不能使用該設(shè)備。

     從VISA讀取函數(shù)輸出的字符串,通過“字符串至字符數(shù)組轉(zhuǎn)換”函數(shù)把字符串轉(zhuǎn)換為字符數(shù)組,再通過“索引數(shù)組”函數(shù),把第0元素從字符數(shù)組取出,是濕度值,送到濕度儀表控件里顯示,把第1元素從字符數(shù)組取出,是溫度值,送到溫度儀表控件里顯示,于是您就看到了DHT11傳感器的溫濕度直觀地顯示在PC機(jī)屏幕的Labview前面板儀表上了!當(dāng)然對儀表控件還要通過屬性對話框進(jìn)行數(shù)據(jù)范圍和數(shù)據(jù)類型的設(shè)置。

Labview程序請下載:http:///file/an86rv29#藍(lán)牙虛擬溫濕度儀.zip

另外用修飾控件進(jìn)一步美化前面板。修飾控件的提取方法如圖。    

 

 

藍(lán)牙虛擬測量儀下位機(jī)軟件設(shè)計(jì) 

   費(fèi)了半天勁,寫完了Lavbiew上位機(jī)程序,接下來,下位機(jī)Arduino的程序如何設(shè)計(jì)?Arduino程序的任務(wù)有兩點(diǎn):一、把DHT11傳感器的溫濕度值采樣出來,處理成字節(jié)數(shù)據(jù);二、把濕度和溫度字節(jié)數(shù)據(jù)通過串口上傳給上位機(jī)。

   由于DHT11傳感器是采用單線制串行通訊的方法進(jìn)行采樣數(shù)據(jù)的,要配合時序,一位位從單條通訊線傳過來,再合成8位字節(jié),然后還要進(jìn)行校驗(yàn)和,所以廠家自帶程序,比較復(fù)雜冗長,看起來頭疼! 實(shí)際上有的時候,我們琢磨一個東西,可以大刀闊斧,沒必要轉(zhuǎn)牛角尖,所以從下面Arduino程序中,您找到所需的溫度值和濕度值,就行了,dht11_dat[2]為溫度值整數(shù)部分,dht11_dat[0]為濕度值整數(shù)部分,然后把濕度和溫度字節(jié)數(shù)據(jù)通過RS232通訊協(xié)議,上傳給PC機(jī)串口COM。

下位機(jī)藍(lán)牙溫濕度采樣器Arduino程序:

#define DHT11_PIN 0  //DHT11連接在Arduino UNO 模擬端口PIN 0

byte read_dht11_dat()  //“讀取DHT11的溫濕度值”子函數(shù)

{

byte i = 0;

byte result=0;

for(i=0; i< 8; i++)

{

while(!(PINC & _BV(DHT11_PIN)));  // wait for 50us

delayMicroseconds(30);

if(PINC & _BV(DHT11_PIN))

result |=(1<<(7-i));

while((PINC & _BV(DHT11_PIN)));  // wait '1' finish   

}

return result;

}

//初始化

void setup()

{

   DDRC |= _BV(DHT11_PIN);

   PORTC |= _BV(DHT11_PIN);

   Serial.begin(9600);  //串口通訊啟動     

}

//主程序

void loop()

{

byte dht11_dat[5];//存儲從DHT11傳感器采樣的溫濕度值的數(shù)組

byte dht11_in;

byte i;

// start condition

// 1. pull-down i/o pin from 18ms

//啟動采樣

PORTC &= ~_BV(DHT11_PIN);

delay(18);

PORTC |= _BV(DHT11_PIN);

delayMicroseconds(40);

DDRC &= ~_BV(DHT11_PIN);

delayMicroseconds(40);

dht11_in = PINC & _BV(DHT11_PIN);

delayMicroseconds(80);

dht11_in = PINC & _BV(DHT11_PIN);

delayMicroseconds(80);

// 讀取來自DHT11傳感器的5個字節(jié)溫濕度值

        //第一個字節(jié)是濕度值整數(shù)部分,dht11_dat[0]

        //第二個字節(jié)是濕度值小數(shù)部分

        //第三個字節(jié)是溫度值整數(shù)部分,dht11_dat[2]

        //第四個字節(jié)是溫度值小數(shù)部分

        //第五個字節(jié)是校驗(yàn)值,可以判斷數(shù)據(jù)傳送是否正確

for (i=0; i<5; i++)

dht11_dat[i] = read_dht11_dat();


DDRC |= _BV(DHT11_PIN);

PORTC |= _BV(DHT11_PIN);

byte dht11_check_sum = dht11_dat[0]+dht11_dat[1]+dht11_dat[2]+dht11_dat[3];

//檢測校驗(yàn)值,判斷是否采樣出錯

/*if(dht11_dat[4]!= dht11_check_sum)

{

Serial.println("DHT11 checksum error");

}*/

       //把濕度值整數(shù)部分上傳上位機(jī)

        Serial.print(dht11_dat[0], BYTE);

       //把溫度值整數(shù)部分上傳上位機(jī)

       Serial.print(dht11_dat[2], BYTE);

       delay(500);//延時0.5s

}

Arduino程序請下載:http:///file/an86r28u#bluetooth-DHT11.zip

 與這篇文章相關(guān)的內(nèi)容:

我家的溫濕度測量計(jì) 》,http://www./zhang700309/blog/12-06/280255_7a0b3.html。
Labview無線遙控Arduino智能小車》,http://www./zhang700309/blog/11-11/233965_8b7d1.html 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多