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