Android + Arduino = тЩе

рдЗрддрдирд╛ рд╕рдордп рдкрд╣рд▓реЗ рдирд╣реАрдВ, Google рдиреЗ USB рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ Android рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдкреАрдЖрдИ рдЦреЛрд▓рд╛ ред рдЖрдЬ рдпрд╣ рдорд╣рд╕реВрд╕ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рдкрддрд╛ рдХрд░реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЕрд╡рд╕рд░ рдЦреБрд▓ рд░рд╣реЗ рд╣реИрдВред




рддреЛ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ Arduino Mega 2560, USB Host Shield рдФрд░ HTC Desire cyanogen 7.1.0 RC1 рдлрд░реНрдорд╡реЗрдпрд░ (Android 2.3.2) рд╣реИред рдмрд╕ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдмрд╛рдж рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╕рднреА рдЪреАрдЬреЗрдВ рдХреЗрд╡рд▓ рдлреЛрди рдХреЗ рд▓рд┐рдП рдПрдВрдбреНрд░реЙрдЗрдб 2.3.4 рдФрд░ рдЯреИрдмрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рдПрдВрдбреНрд░реЙрдЗрдб 3.1 рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддреА рд╣реИрдВред
рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдпрд╣ USB рд╣реЛрд╕реНрдЯ рд╢реАрд▓реНрдб рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдлрд▓ рдирд╣реАрдВ рд╣реИ, рдЦрд╛рд╕рдХрд░ Arduino Mega 2560 рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВред рдкрд╣рд▓реА рд╕рдорд╕реНрдпрд╛ рдпрд╣ рдереА рдХрд┐ рдпрд╣ рд╡рд┐рд╕реНрддрд╛рд░ рдмреЛрд░реНрдб Arduino UNO рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдпрд╣ SPI рд╕рдВрдкрд░реНрдХреЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдореЗрдЧрд╛ рд╕реЗ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЬрдореНрдкрд░ рдлреЗрдВрдХрдирд╛ рдкрдбрд╝рд╛ (рджреЗрдЦреЗрдВ)ред рддрд╕реНрд╡реАрд░)ред рджреВрд╕рд░реА рд╕рдорд╕реНрдпрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХрд╛рдлреА рдЕрдкреЗрдХреНрд╖рд┐рдд рдереА, рдЗрд╕ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛рд░реНрдб рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рд╣рд░реА рд╢рдХреНрддрд┐ рд╕реНрд░реЛрдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рд╕рд░реНрдХрд┐рдЯ @ рд╣реЛрдо рд╕реЗ USB рд╣реЛрд╕реНрдЯ рд╢реАрд▓реНрдб 2.0 рдХреЛ рдЕрдзрд┐рдХ рд╕рдлрд▓ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдзрд┐рдХ рдорд╣рдВрдЧрд╛ рднреА рд╣реИред


рдлреЗрдВрдХ рджрд┐рдпрд╛ рдПрд╕рдкреАрдЖрдИ рд╕рдВрдкрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдмреЛрд░реНрдб

Arduino рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╕реЗрдЯрдЕрдк


1. рдпрджрд┐ рдкрд╣рд▓реЗ рд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдирд╣реАрдВ рд╣реИ, рддреЛ Arduino рдХреЗ рд▓рд┐рдП рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВред
рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдФрд░ ADK рдкреИрдХреЗрдЬ рдХреЛ рдЕрдирдЬрд╝рд┐рдк рдХрд░реЗрдВ (рдЗрд╕рдореЗрдВ рдбреЗрдореЛрдХреАрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╢рд╛рдорд┐рд▓ рд╣реИ)ред app , firmware рдФрд░ hardware рдлрд╝реЛрд▓реНрдбрд░ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рдЪрд╛рд╣рд┐рдПред
3. CapSense рдкреБрд╕реНрддрдХрд╛рд▓рдп рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ
4. рдХреЙрдкреА firmware/arduino_libs/AndroidAccessory рдФрд░ firmware/arduino_libs/USB_Host_Shield рдХреЛ <arduino_installation_root>/libraries/ ред
5. <arduino_installation_root>/libraries/ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдмрдирд╛рдПрдВ <arduino_installation_root>/libraries/ рдФрд░ <arduino_installation_root>/libraries/ рдФрд░ CapSense.h рдХреЛ рдХреЙрдкреА рдХрд░реЗрдВ рдФрд░ рдЗрд╕рдореЗрдВ CapSense рдЖрд░реНрдХрд╛рдЗрд╡ рд╕реЗред

рдлрд░реНрдорд╡реЗрдпрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ


Google рдХреГрдкрдпрд╛ Arduino рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ DemoKit рд╕реНрдХреЗрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЖрдкрдХреЛ рдмрд╕ рдЗрд╕реЗ firmware/demokit/demokit.pde рд╕реЗ рдЦреЛрд▓рдиреЗ, рд╕рдВрдХрд▓рди рдХрд░рдиреЗ рдФрд░ рдмреЛрд░реНрдб рдкрд░ firmware/demokit/demokit.pde рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

Android рдкрд░реАрдХреНрд╖рдг рдЖрд╡реЗрджрди


рдбреЗрдореЛрдХреАрдЯ рдкреИрдХреЗрдЬ рдореЗрдВ рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рднреА рд╣реИред Google рд╣рдореЗрдВ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдПрдХ Android рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдФрд░ рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдПрдкреАрдЖрдИ рд╕реНрддрд░ 10 рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдлрд┐рд░ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ - рд╣рдо рдПрдХ рдПрдВрдбреНрд░реЙрдЗрдб рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ app рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдкрде рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдмрд┐рд▓реНрдб рд▓рдХреНрд╖реНрдп рдореЗрдВ рд╣рдо Google рдПрдкреАрдЖрдИ (рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо 2.3.3 , рдПрдкреАрдЖрдИ рд╕реНрддрд░ 10) рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдПрдХрддреНрд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдлреЛрди рдкрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рддреЗ рд╣реИрдВред рдХреМрди рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рд╕рд╛рде рдЦрд┐рд▓рд╡рд╛рдбрд╝ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ - рд╕рдорд╛рдкреНрдд рдПрдкреАрдХреЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рд▓рд╛рдВрдЪ


рдмрд╕ рд╣рдорд╛рд░реЗ рдлреЛрди рдХреЛ USB рд╣реЛрд╕реНрдЯ рд╢реАрд▓реНрдб рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВред рдпрджрд┐ рд╣рдордиреЗ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рд╕реНрдХреНрд░реАрди рдЖрдкрдХреЛ рдбреЗрдореЛрдХрд┐рдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдЧрд╛ред



рдЖрд╡реЗрджрди рдореЗрдВ рд╣реА рджреЛ рдЯреИрдм рд╣реЛрддреЗ рд╣реИрдВ - рдЗрди (рдмрдЯрди, рдЬреЙрдпрд╕реНрдЯрд┐рдХ рдФрд░ рд╕реЗрдВрд╕рд░) рдФрд░ рдЖрдЙрдЯ (рдПрд▓рдИрдбреА, рд░рд┐рд▓реЗ рдФрд░ рд╕рд░реНрд╡реЛ)ред



рдореИрдВрдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдПрд▓рдИрдбреА рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдФрд░ рдПрдХ рдмрдЯрди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВред рдпрд╣ рд╕рднреА рдЪрдорддреНрдХрд╛рд░ рдХреИрд╕реЗ рд╡реАрдбрд┐рдпреЛ рдкрд░ рджреЗрдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред



рдХреБрдЫ рдХреЛрдб


рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, USB рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░реЗрд╖рд┐рдд рд╕рдВрджреЗрд╢ рдореЗрдВ рддреАрди рдмрд╛рдЗрдЯреНрд╕ рд╣реЛрддреЗ рд╣реИрдВ:
1 рдмрд╛рдЗрдЯ рдПрдХ рдХрдорд╛рдВрдб рдпрд╛ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рдореВрд╣ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрд▓ рдИ рдбреА - 0x2
2 рдмрд╛рдЗрдЯ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдХрд░рдг рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╣рд░реЗ рд░рдВрдЧ рдХреА рдПрд▓рдИрдбреА - 0x1
3 рдмрд╛рдЗрдЯ рдореЗрдВ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдкреНрд░реЗрд╖рд┐рдд рдореВрд▓реНрдп рд╣реЛрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдзрд┐рдХрддрдо рдЪрдордХ 0xff рд╣реИ

Arduino


 ... /*  */ AndroidAccessory acc("Google, Inc.", "DemoKit", "DemoKit Arduino Board", "1.0", "http://www.android.com", "0000000012345678"); void setup() { .... acc.powerOn(); } void loop() { byte msg[3]; /*   */ if (acc.isConnected()) { /*    Android  */ int len = acc.read(msg, sizeof(msg), 1); if (len > 0) { /*    */ if (msg[0] == 0x2) { if (msg[1] == 0x0) analogWrite(LED3_RED, msg[2]); else if (msg[1] == 0x1) analogWrite(LED3_GREEN, msg[2]); else if (msg[1] == 0x2) analogWrite(LED3_BLUE, msg[2]); } } msg[0] = 0x1; b = digitalRead(BUTTON1); if (b != b1) { msg[1] = 0; msg[2] = b ? 1 : 0; /*    */ acc.write(msg, 3); b1 = b; } } } 


рдПрдВрдбреНрд░реЙрдпрдб


 import com.android.future.usb.UsbAccessory; import com.android.future.usb.UsbManager; ... public class DemoKitActivity extends Activity implements Runnable { private UsbManager mUsbManager; UsbAccessory mAccessory; FileInputStream mInputStream; FileOutputStream mOutputStream; ... private void openAccessory(UsbAccessory accessory) { mFileDescriptor = mUsbManager.openAccessory(accessory); if (mFileDescriptor != null) { mAccessory = accessory; FileDescriptor fd = mFileDescriptor.getFileDescriptor(); mInputStream = new FileInputStream(fd); mOutputStream = new FileOutputStream(fd); Thread thread = new Thread(null, this, "AccessoryThread"); thread.start(); } } public void run() { int ret = 0; byte[] buffer = new byte[16384]; int i; while (ret >= 0) { //    ret = mInputStream.read(buffer); i = 0; while (i < ret) { int len = ret - i; switch (buffer[i]) { case 0x1: //    if (len >= 3) { Message m = Message.obtain(mHandler, MESSAGE_SWITCH); m.obj = new SwitchMsg(buffer[i + 1], buffer[i + 2]); mHandler.sendMessage(m); } i += 3; break; } } } } //   -      : // mActivity.sendCommand((byte)2, (byte)0, (byte)255) public void sendCommand(byte command, byte target, int value) { byte[] buffer = new byte[3]; if (value > 255) value = 255; buffer[0] = command; buffer[1] = target; buffer[2] = (byte) value; if (mOutputStream != null && buffer[1] != -1) { try { mOutputStream.write(buffer); } catch (IOException e) { ... } } } } 


рдирд┐рд╖реНрдХрд░реНрд╖


рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрд╡рд╕рд░реЛрдВ рдХреА рдЦреЛрдЬ рдХрд░рддреЗ рд╣реБрдП, рдкрд╣рд▓реА рдЬрдЧрд╣ рдореЗрдВ, Google, рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕рдХреНрд░рд┐рдп рдПрдВрдбреНрд░реЙрдЗрдб рд╕рд╛рдорд╛рди рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЕрдВрддрд┐рдо рд╕реНрдерд╛рди рдЗрд╕ рддрдереНрдп рд╕реЗ рдирд╣реАрдВ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╕реЗрдВрд╕рд░, рд╕реЗрдВрд╕рд░ рдФрд░ рдбреНрд░рд╛рдЗрд╡ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЙрдкрдХрд░рдг рдорд┐рд▓рддрд╛ рд╣реИред рдРрд╕рд╛ рдЙрдкрдХрд░рдг рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд┐рд╕реА рд░реЛрдмреЛрдЯрд┐рдХ рдХрд╛ рдорд╕реНрддрд┐рд╖реНрдХ рдмрди рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдореЗрдВ рдпрд╣ рдирд╣реАрдВ рднреВрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ Arduino рдХреЗ рд▓рд┐рдП рдПрдВрдбреНрд░реЙрдЗрдб рдбрд┐рд╡рд╛рдЗрд╕ рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛рд░реНрдб рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЬреАрдкреАрдПрд╕, рдмреНрд▓реВрдЯреВрде, рд╡рд╛рдИрдлрд╛рдИ, рдПрдХ рдПрдХреНрд╕реЗрд▓реЗрд░реЛрдореАрдЯрд░ рдФрд░ рдмрд╣реБрдд рдХреБрдЫ рд╣реИред

рд╕рдВрджрд░реНрдн


1. Android USB рдЧреМрдг
2. рдПрдВрдбреНрд░реЙрдЗрдб рдУрдкрди рдПрдХреНрд╕реЗрд╕рд░реА рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдХрд┐рдЯ

Source: https://habr.com/ru/post/In123361/


All Articles