前面已經說過android sdk ,ndk, apk, 現在有來了個adk, 這麼多k:-). 那麼什麼是adk,adk是android open accessory development kit 的縮寫。使用adk使得不支援usb host功能的android裝置也可以和其它usb裝置互動。比如使用android手機來控制步進電機,條碼掃瞄器,機械人等。
android 裝置支援各種各樣的usb裝置,即可以以usb host模式工作,也可以以usb accessory 模式工作:
從android 3.1 (api level 12) 開始andriod平台開始支援usb accessory 和 host 工作模式,google也通過附加庫的方式中android 2.3.4 (api level 10) 支援usb accessory 和host 工作模式。
注意:對usb host或accessory 模式的支援最終取決於裝置硬體,和平台os的版本無關,比如sumsung galaxy nexus 同時支援usb host或accessory 模式而sumsung nexus s 只支援usb accessory 模式,儘管兩種手機都採用了ics 4.0.4平台。
本例介紹如何使用adk 通過arduino 連線qrcode scanner 通過adk 和android應用通訊。
其硬體連線圖如下:
由於手機的usb需要和usb hub 連線,因此本例需要android 不通過usb資料線除錯的方法。
本例沒有採用 中介紹的軟體和usb_host_sheild 庫,是以為這個庫不支援usb hub,需要將上圖中連線usb hub的線直接連到手機,這樣就無法再連線qr code scanner了。不過基本步驟是一致的。
3. 將firmware 安裝到arduino 控制板上。
本例使用adk 中adk-barcode 示例。其**如下,可以參見
/**/
/* a sketch demonstrating data exchange between two usb devices
- a hid barcode scanner and adk-compatible android phone */
/**/
#include #include #include #include #include #include #include #include #include #include usb usb;
usbhub hub1(&usb);
usbhub hub2(&usb);
hidbootkeyboard(&usb);
adk adk(&usb,"circuits@home, ltd.",
"usb host shield",
"arduino terminal for android",
"1.0",
"","0000000000000001");
class kbdrptparser : public keyboardreportparser;
void kbdrptparser::onkeydown(uint8_t mod, uint8_t key)
/* what to do when symbol arrives */
void kbdrptparser::onkeypressed(uint8_t key)
keylcl = key;
if( keylcl == 0x13 )
else
serial.print((char) keylcl );
serial.print(" : ");
serial.println( keylcl, hex );};
kbdrptparser prs;
void setup()
//if (usb.init() == -1...
keyboard.setreportparser(0, (hidreportparser*)&prs);
delay( 200 );}
void loop()
這裡的adk與google提供的示例稍有不同,但大同小異。
4. 在手機上執行arduino terminal (這不是必須的),當將usb線連線到手機時,會自動觸發這個應用。這是因為:
firmware中使用adk定義
adk adk(&usb,」circuits@home, ltd.」,
「usb host shield「,
「arduino terminal for android」,
「1.0″,
「」,「0000000000000001″);
和arduino terminal 的broadcast receiver 定義對應:
< action android:name=」android.hardware.usb.action.usb_accessory_attached」 />
< /intent-filter>
android:resource=」@xml/accessory_filter」 />
< /activity>
xml/accessory_filter.xml 的定義如下:
/>
< /resources>
對於你自己的例子,你可以使用你自己定義的名稱,只***這幾個值在firmware 和android應用中定義的值一致即可。
執行結果如下:
arduino 程式設計並不複雜,只要會c語言即可,可以參見arduino-1.0 中的reference文件。usb_host c庫可以參考libraries/felis_usb_host_shield 的標頭檔案。
注:通過這種連線方法,可以連線usb照相機,gps, 步進電機等各種外設,可以實現使用android來自動控制等。
Android ADK 程式設計簡介
前面已經說過android sdk ndk,apk,現在有來了個adk,這麼多k 那麼什麼是adk,adk是android open accessory development kit 的縮寫。使用adk使得不支援usb host功能的android裝置也可以和其它usb裝置互動。比如使用andro...
Socket 程式設計簡介
linux 公報 讓linux更富魅力!譯者 小牟 大多數的網路應用程式可以分成兩部分 客戶端和伺服器端。建立乙個socket include include當建立乙個socket時需要指定三個主要的引數 int socket int domain,int type,int protocol 域引數...
Socket 程式設計簡介
linux 公報 讓linux更富魅力!譯者 小牟 大多數的網路應用程式可以分成兩部分 客戶端和伺服器端。建立乙個socket include include當建立乙個socket時需要指定三個主要的引數 int socket int domain,int type,int protocol 域引數...