謝作如
Android手機(jī)雖然已經(jīng)附帶了多種傳感器,如方向、重力、距離、加速度等。并且早在Android2.3(gingerbread)系統(tǒng)中,Google就提供了11種傳感器供應(yīng)用層使用。但是,并非所有Android手機(jī)都把這些傳感器配齊了,如溫度、濕度、氣壓之類的傳感器就不常見。為了使Android手機(jī)能支持更多的應(yīng)用,越來越多的手機(jī)外設(shè)就涌現(xiàn)出來,可穿戴設(shè)備開發(fā)在短時(shí)間內(nèi)就成為了硬件開發(fā)方面的“時(shí)尚”。其實(shí),可穿戴設(shè)備的開發(fā)門檻并不高,通過Arduino,我們也可以初步體驗(yàn)Android的“可穿戴設(shè)備”的開發(fā)。
可穿戴設(shè)備指直接穿在身上,或是整合到用戶的衣服或配件的一種便攜式設(shè)備。手機(jī)可穿戴設(shè)備將會(huì)給我們的生活、感知帶來很大的轉(zhuǎn)變。但是,可穿戴設(shè)備中的傳感器未必一定是手機(jī)中所沒有的,如最近很流行的智能手環(huán),其核心傳感器就是加速度傳感器和陀螺儀,都是智能手機(jī)標(biāo)配的傳感器。我們選擇了溫度和濕度傳感器,通過Arduino將傳感器數(shù)值發(fā)送給Android手機(jī),以期通過這一項(xiàng)目來體驗(yàn)可穿戴設(shè)備和手機(jī)的信息互動(dòng)。
● 項(xiàng)目描述
本項(xiàng)目設(shè)計(jì)了一個(gè)簡(jiǎn)單的通訊協(xié)議,讓Arduino能通過藍(lán)牙將各種傳感器(以溫度和濕度傳感器為例)的信息傳輸?shù)紸ndroid手機(jī),并顯示出來。本項(xiàng)目的難度設(shè)計(jì)為中小學(xué)生都能完成,Arduino的程序我們選擇用ArduBlock編寫,而手機(jī)的程序由App Inventor編寫。這個(gè)項(xiàng)目的流程如圖1所示。
● 項(xiàng)目分析
1.協(xié)議設(shè)計(jì)
與本欄目上期文章《用Android控制Arduino小車》一樣,首先需要為Android和Arduino設(shè)計(jì)通訊協(xié)議。這個(gè)協(xié)議規(guī)定了數(shù)據(jù)的格式以及數(shù)據(jù)代表的意義。針對(duì)ArduBlock教育版和App Inventor的特點(diǎn),我設(shè)計(jì)了一個(gè)簡(jiǎn)單的通訊協(xié)議,各類數(shù)據(jù)的含義說明如表1。
因?yàn)锳pp Inventor沒有二進(jìn)制的數(shù)據(jù)處理能力,這個(gè)通訊協(xié)議只能使用字符形式傳送數(shù)值。雖然效率不高,但也通俗易懂。之所以采用6個(gè)字符,是因?yàn)锳rduino的A/d的轉(zhuǎn)換分辨率為10位,即0~1023之間,需要留下4個(gè)字符,第一個(gè)字符是為了標(biāo)識(shí)模擬傳感器的針腳。而第二個(gè)字符永遠(yuǎn)是1,并沒有實(shí)際作用,僅僅是因?yàn)樵贏rduBlock教育版可以使用“10000+傳感器值”的簡(jiǎn)單表達(dá)式來補(bǔ)足傳感器數(shù)值不足4位時(shí)需要補(bǔ)上的“0”。
另外,ArduBlock教育版的串口打印會(huì)自動(dòng)加上回車(這也是教育版為了簡(jiǎn)化積木模塊而犧牲其更多功能的無奈之舉),回車和換行剛好要占去2個(gè)字節(jié),實(shí)際一次傳輸?shù)氖?個(gè)字符(字節(jié))。
如果拋開這兩款軟件,我建議可以參照S4A的通訊協(xié)議,效率較高,2個(gè)字節(jié)就能完成一個(gè)傳感器數(shù)據(jù)的傳送。
2.設(shè)備選擇
雖然這是一個(gè)測(cè)試的項(xiàng)目,并非開發(fā)真正意義上的可穿戴設(shè)備產(chǎn)品,但我還是物色了一款體積較小的Arduino板子,做出“可穿戴”的感覺來。經(jīng)過比較,DFRobot公司推出的Bluno Nano主控板成了我的選擇。Bluno Nano集成了低功耗的藍(lán)牙4.0芯片,而且只有拇指大小,非常適合用來開發(fā)做可穿戴設(shè)備的原型(如下頁(yè)圖2)。
除了Bluno Nano主控板外,只有硬幣般大小的Microduino的產(chǎn)品也很適合做可穿戴設(shè)備的原型(如圖3)。
當(dāng)然,如果僅僅想測(cè)試Arduino和Android的連接,可以找任何一款藍(lán)牙模塊來實(shí)現(xiàn),具體可以參考本欄目的上期文章。至于溫度和濕度傳感器,網(wǎng)上可以選擇的店鋪很多,價(jià)格從幾元到十幾元不等,不再一一說明。
● 編程實(shí)現(xiàn)
1.Arduino程序
我們使用ArduBlock教育版來寫Arduino的代碼。ArduBlock教育版是一款經(jīng)過優(yōu)化的版本,界面清爽、分類清晰且命名規(guī)范,適合在中小學(xué)的課堂上使用。其串口輸出功能很簡(jiǎn)單,就一個(gè)“串口打印加回車”積木模塊,這一積木模塊和Arduino代碼的對(duì)應(yīng)關(guān)系如表2。
因?yàn)楸?設(shè)計(jì)的協(xié)議,我編寫了從串口輸出模擬端口A0和A1值的代碼,每隔300毫秒傳輸一次數(shù)據(jù)。其中用“10000+傳感器值”的簡(jiǎn)單表達(dá)式,補(bǔ)足了傳感器數(shù)值不足4位時(shí)需要添加的“0”。這樣加上回車換行,傳輸一個(gè)傳感器的數(shù)值剛好需要8個(gè)字節(jié)(如圖4)。
轉(zhuǎn)成Arduino代碼后為:
int _ABVAR_1_A0 = 0 ;
int _ABVAR_2_A1 = 0 ;
void setup()
{
Serial.begin(9600);
}
void loop()
{
_ABVAR_1_A0 = ( analogRead(0) + 10000 ) ;
_ABVAR_2_A1 = ( analogRead(1) + 10000 ) ;
Serial.print("0");
Serial.print(_ABVAR_1_A0);
Serial.println();
Serial.print("1");
Serial.print(_ABVAR_2_A1);
Serial.println();
delay( 300 );
}
注意:如果出現(xiàn)下載失敗的情況,請(qǐng)參照本欄目上期文章進(jìn)行相應(yīng)處理。
2.App Inventor程序
Android端App程序的主要功能是接收Arduino發(fā)送的數(shù)據(jù),然后顯示在屏幕上。代碼并不復(fù)雜,除了常見的Label、TextBox、Button外,還需要ListPicker、BluetoothClient這幾個(gè)必要的控件。因?yàn)橐獙?shí)時(shí)接收數(shù)據(jù),我還加上了Clock這一時(shí)間控件。具體界面如圖5所示。
App中所涉及控件的作用簡(jiǎn)要說明如表3。
接下來,我們可以開始編寫代碼了,其中給ListPicker1控件寫選擇藍(lán)牙設(shè)備的代碼。需要注意的是,這個(gè)控件僅能顯示手機(jī)已經(jīng)配對(duì)過的藍(lán)牙設(shè)備(如圖6)。
給Button1控件編寫Click事件,為了使程序更加完善,我添加了針對(duì)各種意外情況,會(huì)顯示不同提示的代碼(如圖7)。
Clock1控件的TimerEnabled屬性默認(rèn)值為false,當(dāng)連接了藍(lán)牙設(shè)備,TimerEnabled就修改為true。Clock1控件Timer事件代碼如圖8所示。
因?yàn)榇a篇幅過長(zhǎng),影響了截圖,這里我僅僅寫了一個(gè)傳感器。為了便于觀察,我將獲取的字符顯示在Label4上。
3.運(yùn)行測(cè)試
編譯為APK文件,然后安裝。App的運(yùn)行效果如圖9所示。Bluno Nano主控板上的藍(lán)牙默認(rèn)配對(duì)碼是1234,連接上后,就能看到傳送過來的數(shù)據(jù)了。
● 拓展應(yīng)用
在本項(xiàng)目中,Android僅僅將接收到的傳感器數(shù)據(jù)顯示出來,并沒有做進(jìn)一步的處理,也沒有根據(jù)傳感器信息,控制Arduino執(zhí)行相應(yīng)的動(dòng)作。一般來說,手機(jī)還要對(duì)可穿戴設(shè)備的數(shù)據(jù)進(jìn)行進(jìn)一步處理,并存儲(chǔ)在云服務(wù)器上,以便更加深入地進(jìn)行分析。例如,智能手環(huán)可以統(tǒng)計(jì)用戶每天的運(yùn)動(dòng)路徑、消耗卡路里和攝入熱量,也能根據(jù)事先的設(shè)定,通過振動(dòng)馬達(dá)來提醒用戶應(yīng)該運(yùn)動(dòng)或者休息了。結(jié)合本欄目上一期文章的內(nèi)容,相信讓中小學(xué)生實(shí)現(xiàn)這樣的功能并不會(huì)很難。
● 總結(jié)
本項(xiàng)目還可以應(yīng)用在某些特殊場(chǎng)合,如無線抄水電表,甚至也可以把Android作為Arduino的藍(lán)牙顯示屏來使用。藍(lán)牙4.0的功耗很低,應(yīng)用范圍很廣,Android手機(jī)結(jié)合Arduino后,功能將大大提高。從本質(zhì)上看,可穿戴設(shè)備和智能家居、物聯(lián)網(wǎng)并沒有太大的區(qū)別,App Inventor編程的價(jià)值就在于其和硬件結(jié)合緊密,讓學(xué)生們玩玩最新的技術(shù)吧。endprint
Android手機(jī)雖然已經(jīng)附帶了多種傳感器,如方向、重力、距離、加速度等。并且早在Android2.3(gingerbread)系統(tǒng)中,Google就提供了11種傳感器供應(yīng)用層使用。但是,并非所有Android手機(jī)都把這些傳感器配齊了,如溫度、濕度、氣壓之類的傳感器就不常見。為了使Android手機(jī)能支持更多的應(yīng)用,越來越多的手機(jī)外設(shè)就涌現(xiàn)出來,可穿戴設(shè)備開發(fā)在短時(shí)間內(nèi)就成為了硬件開發(fā)方面的“時(shí)尚”。其實(shí),可穿戴設(shè)備的開發(fā)門檻并不高,通過Arduino,我們也可以初步體驗(yàn)Android的“可穿戴設(shè)備”的開發(fā)。
可穿戴設(shè)備指直接穿在身上,或是整合到用戶的衣服或配件的一種便攜式設(shè)備。手機(jī)可穿戴設(shè)備將會(huì)給我們的生活、感知帶來很大的轉(zhuǎn)變。但是,可穿戴設(shè)備中的傳感器未必一定是手機(jī)中所沒有的,如最近很流行的智能手環(huán),其核心傳感器就是加速度傳感器和陀螺儀,都是智能手機(jī)標(biāo)配的傳感器。我們選擇了溫度和濕度傳感器,通過Arduino將傳感器數(shù)值發(fā)送給Android手機(jī),以期通過這一項(xiàng)目來體驗(yàn)可穿戴設(shè)備和手機(jī)的信息互動(dòng)。
● 項(xiàng)目描述
本項(xiàng)目設(shè)計(jì)了一個(gè)簡(jiǎn)單的通訊協(xié)議,讓Arduino能通過藍(lán)牙將各種傳感器(以溫度和濕度傳感器為例)的信息傳輸?shù)紸ndroid手機(jī),并顯示出來。本項(xiàng)目的難度設(shè)計(jì)為中小學(xué)生都能完成,Arduino的程序我們選擇用ArduBlock編寫,而手機(jī)的程序由App Inventor編寫。這個(gè)項(xiàng)目的流程如圖1所示。
● 項(xiàng)目分析
1.協(xié)議設(shè)計(jì)
與本欄目上期文章《用Android控制Arduino小車》一樣,首先需要為Android和Arduino設(shè)計(jì)通訊協(xié)議。這個(gè)協(xié)議規(guī)定了數(shù)據(jù)的格式以及數(shù)據(jù)代表的意義。針對(duì)ArduBlock教育版和App Inventor的特點(diǎn),我設(shè)計(jì)了一個(gè)簡(jiǎn)單的通訊協(xié)議,各類數(shù)據(jù)的含義說明如表1。
因?yàn)锳pp Inventor沒有二進(jìn)制的數(shù)據(jù)處理能力,這個(gè)通訊協(xié)議只能使用字符形式傳送數(shù)值。雖然效率不高,但也通俗易懂。之所以采用6個(gè)字符,是因?yàn)锳rduino的A/d的轉(zhuǎn)換分辨率為10位,即0~1023之間,需要留下4個(gè)字符,第一個(gè)字符是為了標(biāo)識(shí)模擬傳感器的針腳。而第二個(gè)字符永遠(yuǎn)是1,并沒有實(shí)際作用,僅僅是因?yàn)樵贏rduBlock教育版可以使用“10000+傳感器值”的簡(jiǎn)單表達(dá)式來補(bǔ)足傳感器數(shù)值不足4位時(shí)需要補(bǔ)上的“0”。
另外,ArduBlock教育版的串口打印會(huì)自動(dòng)加上回車(這也是教育版為了簡(jiǎn)化積木模塊而犧牲其更多功能的無奈之舉),回車和換行剛好要占去2個(gè)字節(jié),實(shí)際一次傳輸?shù)氖?個(gè)字符(字節(jié))。
如果拋開這兩款軟件,我建議可以參照S4A的通訊協(xié)議,效率較高,2個(gè)字節(jié)就能完成一個(gè)傳感器數(shù)據(jù)的傳送。
2.設(shè)備選擇
雖然這是一個(gè)測(cè)試的項(xiàng)目,并非開發(fā)真正意義上的可穿戴設(shè)備產(chǎn)品,但我還是物色了一款體積較小的Arduino板子,做出“可穿戴”的感覺來。經(jīng)過比較,DFRobot公司推出的Bluno Nano主控板成了我的選擇。Bluno Nano集成了低功耗的藍(lán)牙4.0芯片,而且只有拇指大小,非常適合用來開發(fā)做可穿戴設(shè)備的原型(如下頁(yè)圖2)。
除了Bluno Nano主控板外,只有硬幣般大小的Microduino的產(chǎn)品也很適合做可穿戴設(shè)備的原型(如圖3)。
當(dāng)然,如果僅僅想測(cè)試Arduino和Android的連接,可以找任何一款藍(lán)牙模塊來實(shí)現(xiàn),具體可以參考本欄目的上期文章。至于溫度和濕度傳感器,網(wǎng)上可以選擇的店鋪很多,價(jià)格從幾元到十幾元不等,不再一一說明。
● 編程實(shí)現(xiàn)
1.Arduino程序
我們使用ArduBlock教育版來寫Arduino的代碼。ArduBlock教育版是一款經(jīng)過優(yōu)化的版本,界面清爽、分類清晰且命名規(guī)范,適合在中小學(xué)的課堂上使用。其串口輸出功能很簡(jiǎn)單,就一個(gè)“串口打印加回車”積木模塊,這一積木模塊和Arduino代碼的對(duì)應(yīng)關(guān)系如表2。
因?yàn)楸?設(shè)計(jì)的協(xié)議,我編寫了從串口輸出模擬端口A0和A1值的代碼,每隔300毫秒傳輸一次數(shù)據(jù)。其中用“10000+傳感器值”的簡(jiǎn)單表達(dá)式,補(bǔ)足了傳感器數(shù)值不足4位時(shí)需要添加的“0”。這樣加上回車換行,傳輸一個(gè)傳感器的數(shù)值剛好需要8個(gè)字節(jié)(如圖4)。
轉(zhuǎn)成Arduino代碼后為:
int _ABVAR_1_A0 = 0 ;
int _ABVAR_2_A1 = 0 ;
void setup()
{
Serial.begin(9600);
}
void loop()
{
_ABVAR_1_A0 = ( analogRead(0) + 10000 ) ;
_ABVAR_2_A1 = ( analogRead(1) + 10000 ) ;
Serial.print("0");
Serial.print(_ABVAR_1_A0);
Serial.println();
Serial.print("1");
Serial.print(_ABVAR_2_A1);
Serial.println();
delay( 300 );
}
注意:如果出現(xiàn)下載失敗的情況,請(qǐng)參照本欄目上期文章進(jìn)行相應(yīng)處理。
2.App Inventor程序
Android端App程序的主要功能是接收Arduino發(fā)送的數(shù)據(jù),然后顯示在屏幕上。代碼并不復(fù)雜,除了常見的Label、TextBox、Button外,還需要ListPicker、BluetoothClient這幾個(gè)必要的控件。因?yàn)橐獙?shí)時(shí)接收數(shù)據(jù),我還加上了Clock這一時(shí)間控件。具體界面如圖5所示。
App中所涉及控件的作用簡(jiǎn)要說明如表3。
接下來,我們可以開始編寫代碼了,其中給ListPicker1控件寫選擇藍(lán)牙設(shè)備的代碼。需要注意的是,這個(gè)控件僅能顯示手機(jī)已經(jīng)配對(duì)過的藍(lán)牙設(shè)備(如圖6)。
給Button1控件編寫Click事件,為了使程序更加完善,我添加了針對(duì)各種意外情況,會(huì)顯示不同提示的代碼(如圖7)。
Clock1控件的TimerEnabled屬性默認(rèn)值為false,當(dāng)連接了藍(lán)牙設(shè)備,TimerEnabled就修改為true。Clock1控件Timer事件代碼如圖8所示。
因?yàn)榇a篇幅過長(zhǎng),影響了截圖,這里我僅僅寫了一個(gè)傳感器。為了便于觀察,我將獲取的字符顯示在Label4上。
3.運(yùn)行測(cè)試
編譯為APK文件,然后安裝。App的運(yùn)行效果如圖9所示。Bluno Nano主控板上的藍(lán)牙默認(rèn)配對(duì)碼是1234,連接上后,就能看到傳送過來的數(shù)據(jù)了。
● 拓展應(yīng)用
在本項(xiàng)目中,Android僅僅將接收到的傳感器數(shù)據(jù)顯示出來,并沒有做進(jìn)一步的處理,也沒有根據(jù)傳感器信息,控制Arduino執(zhí)行相應(yīng)的動(dòng)作。一般來說,手機(jī)還要對(duì)可穿戴設(shè)備的數(shù)據(jù)進(jìn)行進(jìn)一步處理,并存儲(chǔ)在云服務(wù)器上,以便更加深入地進(jìn)行分析。例如,智能手環(huán)可以統(tǒng)計(jì)用戶每天的運(yùn)動(dòng)路徑、消耗卡路里和攝入熱量,也能根據(jù)事先的設(shè)定,通過振動(dòng)馬達(dá)來提醒用戶應(yīng)該運(yùn)動(dòng)或者休息了。結(jié)合本欄目上一期文章的內(nèi)容,相信讓中小學(xué)生實(shí)現(xiàn)這樣的功能并不會(huì)很難。
● 總結(jié)
本項(xiàng)目還可以應(yīng)用在某些特殊場(chǎng)合,如無線抄水電表,甚至也可以把Android作為Arduino的藍(lán)牙顯示屏來使用。藍(lán)牙4.0的功耗很低,應(yīng)用范圍很廣,Android手機(jī)結(jié)合Arduino后,功能將大大提高。從本質(zhì)上看,可穿戴設(shè)備和智能家居、物聯(lián)網(wǎng)并沒有太大的區(qū)別,App Inventor編程的價(jià)值就在于其和硬件結(jié)合緊密,讓學(xué)生們玩玩最新的技術(shù)吧。endprint
Android手機(jī)雖然已經(jīng)附帶了多種傳感器,如方向、重力、距離、加速度等。并且早在Android2.3(gingerbread)系統(tǒng)中,Google就提供了11種傳感器供應(yīng)用層使用。但是,并非所有Android手機(jī)都把這些傳感器配齊了,如溫度、濕度、氣壓之類的傳感器就不常見。為了使Android手機(jī)能支持更多的應(yīng)用,越來越多的手機(jī)外設(shè)就涌現(xiàn)出來,可穿戴設(shè)備開發(fā)在短時(shí)間內(nèi)就成為了硬件開發(fā)方面的“時(shí)尚”。其實(shí),可穿戴設(shè)備的開發(fā)門檻并不高,通過Arduino,我們也可以初步體驗(yàn)Android的“可穿戴設(shè)備”的開發(fā)。
可穿戴設(shè)備指直接穿在身上,或是整合到用戶的衣服或配件的一種便攜式設(shè)備。手機(jī)可穿戴設(shè)備將會(huì)給我們的生活、感知帶來很大的轉(zhuǎn)變。但是,可穿戴設(shè)備中的傳感器未必一定是手機(jī)中所沒有的,如最近很流行的智能手環(huán),其核心傳感器就是加速度傳感器和陀螺儀,都是智能手機(jī)標(biāo)配的傳感器。我們選擇了溫度和濕度傳感器,通過Arduino將傳感器數(shù)值發(fā)送給Android手機(jī),以期通過這一項(xiàng)目來體驗(yàn)可穿戴設(shè)備和手機(jī)的信息互動(dòng)。
● 項(xiàng)目描述
本項(xiàng)目設(shè)計(jì)了一個(gè)簡(jiǎn)單的通訊協(xié)議,讓Arduino能通過藍(lán)牙將各種傳感器(以溫度和濕度傳感器為例)的信息傳輸?shù)紸ndroid手機(jī),并顯示出來。本項(xiàng)目的難度設(shè)計(jì)為中小學(xué)生都能完成,Arduino的程序我們選擇用ArduBlock編寫,而手機(jī)的程序由App Inventor編寫。這個(gè)項(xiàng)目的流程如圖1所示。
● 項(xiàng)目分析
1.協(xié)議設(shè)計(jì)
與本欄目上期文章《用Android控制Arduino小車》一樣,首先需要為Android和Arduino設(shè)計(jì)通訊協(xié)議。這個(gè)協(xié)議規(guī)定了數(shù)據(jù)的格式以及數(shù)據(jù)代表的意義。針對(duì)ArduBlock教育版和App Inventor的特點(diǎn),我設(shè)計(jì)了一個(gè)簡(jiǎn)單的通訊協(xié)議,各類數(shù)據(jù)的含義說明如表1。
因?yàn)锳pp Inventor沒有二進(jìn)制的數(shù)據(jù)處理能力,這個(gè)通訊協(xié)議只能使用字符形式傳送數(shù)值。雖然效率不高,但也通俗易懂。之所以采用6個(gè)字符,是因?yàn)锳rduino的A/d的轉(zhuǎn)換分辨率為10位,即0~1023之間,需要留下4個(gè)字符,第一個(gè)字符是為了標(biāo)識(shí)模擬傳感器的針腳。而第二個(gè)字符永遠(yuǎn)是1,并沒有實(shí)際作用,僅僅是因?yàn)樵贏rduBlock教育版可以使用“10000+傳感器值”的簡(jiǎn)單表達(dá)式來補(bǔ)足傳感器數(shù)值不足4位時(shí)需要補(bǔ)上的“0”。
另外,ArduBlock教育版的串口打印會(huì)自動(dòng)加上回車(這也是教育版為了簡(jiǎn)化積木模塊而犧牲其更多功能的無奈之舉),回車和換行剛好要占去2個(gè)字節(jié),實(shí)際一次傳輸?shù)氖?個(gè)字符(字節(jié))。
如果拋開這兩款軟件,我建議可以參照S4A的通訊協(xié)議,效率較高,2個(gè)字節(jié)就能完成一個(gè)傳感器數(shù)據(jù)的傳送。
2.設(shè)備選擇
雖然這是一個(gè)測(cè)試的項(xiàng)目,并非開發(fā)真正意義上的可穿戴設(shè)備產(chǎn)品,但我還是物色了一款體積較小的Arduino板子,做出“可穿戴”的感覺來。經(jīng)過比較,DFRobot公司推出的Bluno Nano主控板成了我的選擇。Bluno Nano集成了低功耗的藍(lán)牙4.0芯片,而且只有拇指大小,非常適合用來開發(fā)做可穿戴設(shè)備的原型(如下頁(yè)圖2)。
除了Bluno Nano主控板外,只有硬幣般大小的Microduino的產(chǎn)品也很適合做可穿戴設(shè)備的原型(如圖3)。
當(dāng)然,如果僅僅想測(cè)試Arduino和Android的連接,可以找任何一款藍(lán)牙模塊來實(shí)現(xiàn),具體可以參考本欄目的上期文章。至于溫度和濕度傳感器,網(wǎng)上可以選擇的店鋪很多,價(jià)格從幾元到十幾元不等,不再一一說明。
● 編程實(shí)現(xiàn)
1.Arduino程序
我們使用ArduBlock教育版來寫Arduino的代碼。ArduBlock教育版是一款經(jīng)過優(yōu)化的版本,界面清爽、分類清晰且命名規(guī)范,適合在中小學(xué)的課堂上使用。其串口輸出功能很簡(jiǎn)單,就一個(gè)“串口打印加回車”積木模塊,這一積木模塊和Arduino代碼的對(duì)應(yīng)關(guān)系如表2。
因?yàn)楸?設(shè)計(jì)的協(xié)議,我編寫了從串口輸出模擬端口A0和A1值的代碼,每隔300毫秒傳輸一次數(shù)據(jù)。其中用“10000+傳感器值”的簡(jiǎn)單表達(dá)式,補(bǔ)足了傳感器數(shù)值不足4位時(shí)需要添加的“0”。這樣加上回車換行,傳輸一個(gè)傳感器的數(shù)值剛好需要8個(gè)字節(jié)(如圖4)。
轉(zhuǎn)成Arduino代碼后為:
int _ABVAR_1_A0 = 0 ;
int _ABVAR_2_A1 = 0 ;
void setup()
{
Serial.begin(9600);
}
void loop()
{
_ABVAR_1_A0 = ( analogRead(0) + 10000 ) ;
_ABVAR_2_A1 = ( analogRead(1) + 10000 ) ;
Serial.print("0");
Serial.print(_ABVAR_1_A0);
Serial.println();
Serial.print("1");
Serial.print(_ABVAR_2_A1);
Serial.println();
delay( 300 );
}
注意:如果出現(xiàn)下載失敗的情況,請(qǐng)參照本欄目上期文章進(jìn)行相應(yīng)處理。
2.App Inventor程序
Android端App程序的主要功能是接收Arduino發(fā)送的數(shù)據(jù),然后顯示在屏幕上。代碼并不復(fù)雜,除了常見的Label、TextBox、Button外,還需要ListPicker、BluetoothClient這幾個(gè)必要的控件。因?yàn)橐獙?shí)時(shí)接收數(shù)據(jù),我還加上了Clock這一時(shí)間控件。具體界面如圖5所示。
App中所涉及控件的作用簡(jiǎn)要說明如表3。
接下來,我們可以開始編寫代碼了,其中給ListPicker1控件寫選擇藍(lán)牙設(shè)備的代碼。需要注意的是,這個(gè)控件僅能顯示手機(jī)已經(jīng)配對(duì)過的藍(lán)牙設(shè)備(如圖6)。
給Button1控件編寫Click事件,為了使程序更加完善,我添加了針對(duì)各種意外情況,會(huì)顯示不同提示的代碼(如圖7)。
Clock1控件的TimerEnabled屬性默認(rèn)值為false,當(dāng)連接了藍(lán)牙設(shè)備,TimerEnabled就修改為true。Clock1控件Timer事件代碼如圖8所示。
因?yàn)榇a篇幅過長(zhǎng),影響了截圖,這里我僅僅寫了一個(gè)傳感器。為了便于觀察,我將獲取的字符顯示在Label4上。
3.運(yùn)行測(cè)試
編譯為APK文件,然后安裝。App的運(yùn)行效果如圖9所示。Bluno Nano主控板上的藍(lán)牙默認(rèn)配對(duì)碼是1234,連接上后,就能看到傳送過來的數(shù)據(jù)了。
● 拓展應(yīng)用
在本項(xiàng)目中,Android僅僅將接收到的傳感器數(shù)據(jù)顯示出來,并沒有做進(jìn)一步的處理,也沒有根據(jù)傳感器信息,控制Arduino執(zhí)行相應(yīng)的動(dòng)作。一般來說,手機(jī)還要對(duì)可穿戴設(shè)備的數(shù)據(jù)進(jìn)行進(jìn)一步處理,并存儲(chǔ)在云服務(wù)器上,以便更加深入地進(jìn)行分析。例如,智能手環(huán)可以統(tǒng)計(jì)用戶每天的運(yùn)動(dòng)路徑、消耗卡路里和攝入熱量,也能根據(jù)事先的設(shè)定,通過振動(dòng)馬達(dá)來提醒用戶應(yīng)該運(yùn)動(dòng)或者休息了。結(jié)合本欄目上一期文章的內(nèi)容,相信讓中小學(xué)生實(shí)現(xiàn)這樣的功能并不會(huì)很難。
● 總結(jié)
本項(xiàng)目還可以應(yīng)用在某些特殊場(chǎng)合,如無線抄水電表,甚至也可以把Android作為Arduino的藍(lán)牙顯示屏來使用。藍(lán)牙4.0的功耗很低,應(yīng)用范圍很廣,Android手機(jī)結(jié)合Arduino后,功能將大大提高。從本質(zhì)上看,可穿戴設(shè)備和智能家居、物聯(lián)網(wǎng)并沒有太大的區(qū)別,App Inventor編程的價(jià)值就在于其和硬件結(jié)合緊密,讓學(xué)生們玩玩最新的技術(shù)吧。endprint