环境:android 平板4.1 ,OTG线,串口转usb线,开发板
-------------------------------------------------
任务:使用平板发送指令给开发板,开发板接受后,比如开始打印、
即使用android host 来连接外设。
基础知识:
做usb通信,首先要先弄清楚哪边是HOST那边是SLAVE。
比如你的android手机做host,要获得slave,用UsbDevice表示slave
要是你的android手机做slave,要获得host,用UsbAccessory表示host
以前没有接触过android USB Host编程。来到这个公司后,第一个任务就是写一个android平板的usb host 的demo,和打印机,ic卡等通信。
一、说一下USB HOST的用处:
USB设备分为HOST(主设备)和SLAVE(从设备),只有当一台HOST与一台SLAVE连接时才能实现数据的传输。android支持实现了android外设协议的USB硬件。Android外设和主机模式,在android3.1或者更高的平台上直接支持。但是,对USB主机和外设模式的支持,最终还是要取决于设备的硬件,而不仅仅是看平台的等级。
我上网搜了一下,早期的一些夏新的手机,以及htc的WM手机支持USB HOST功能,而现在的android手机中支持USB HOST的还很非常少,查到的支持USB HOST功能的手机有三星的I9250,HTC手机暂未发现,现在测试使用的HTC T328w不支持USB HOST功能。所以,测试条件不太充分。
另外,USB HOST的主要用处,一般是android手机做HOST主设备,用来控制其他一些元器件,比如,单片机,鼠标,游戏手柄,数码相机,等等。
说到手机的usb host 一般用OTG线连接usb外界设备,但是OTG是什么呢? 今天我才懂,惭愧啊,
这里在简单说明下:OTG即On-The-Go,是近年来发展起来的技术,主要应用是让不同的USB设备和移动设备之间连接,进行数据交换。主要应用是在一些高端手机和平板上,在具有OTG功能的平板或手机上,我们可以连接各种USB设备,例如鼠标、键盘、U盘等,这对于移动办公来说还是有一定作用的。尤其是对U盘、读卡器等设备的读取,在身边没有电脑的情况就可利用移动设备直接使用这些设备。
连接无线键鼠,鼠标移动尚算灵敏,但是部分输入法使用键盘打字会出现严重的延迟,而且暂时还没试出哪个输入法支持USB键盘的中文输入。
连接U盘,这个算比较常见的一个用途,效果不错。
而很少把手机端当做从设备,与电脑端通过USB HOST进行通信的。另外看到一个人说不能通过USB HOST方式与电脑实现通信:
二、通过socket方式进行连接
开始的时候看到一个例子说是通过USB HOST实现的PC与手机端进行连接,我根据查到的资料和自己的理解觉得大概是如下的意思:
1.基于socket编程方式,在android手机端和pc端进行连接传输数据。
2.连接时,需要通过adb forward方式进行端口转发,才能连接的上去。
3.需要用到broadcast来进行,在server端用adb shell 命令开启android端的socket连接服务。
4.主要基于android.hardware.usb包下的UsbManager 类和UsbAccessory类。
5.然后就是一些IO操作,IO处理及关闭优化。
最关键的两点就是:
1)端口转发:
Runtime.getRuntime().exec(“adb forward tcp :12580 tcp:10086 ”);
在服务端监听10086端口。
2)在server端java程序中使用adb 命令启动client端的service。
Runtime.getRuntime().exec(“adb shell am broadcast –a NotifyServiceStart”);
后来测试多次发现,这个方式没有用到USB HOST的方式,依然是socket通信,只不过是进行了一下端口转发。
另外,关于socket通信时,写的android程序在模拟器上可以与PC上的server端进行通信,而把程序装到真机上时,就不能实现通信,这个问题的主要原因是PC端和手机上的无线网络不在一个网段,无法进行连接。
三、串口通信,hid访问
在网上查到一些关于USB HOST的开发都是基于基于android端与一些单片机进行串口通信的,串口转usb
USB HID
是Human Interface Device的缩写,由其名称可以了解HID设备是直接与人交互的设备,例如键盘、鼠标与游戏杆等。不过HID设备并不一定要有人机接口,只要符合HID类别规范的设备都是HID设备。
mini usb 以前的手机的usb那样
micro usb 现在手机的usb口那样
总结:
串口通信才是本次完成任务的重点, 既然android的SDK里,在3.0以后,已经有支持usb外设,
所以我此次想法,先试试用java来,即SDK里的API来和usb外设通信。
其实SDK里的API实现也是在jni来ndk编程,网上还有一些c/c++的api,不懂如何。
usb HID模式 ,串口转usb两种,开始我以为要分开这两种情况。
其实,usb相关的设备(无论是直接usb还是串口转usb)都是可以和android host设备通信的。
最近在android平板上开发一个程序,可以通过mini Usb控制外部设备,外部设备接口是串口转USB。平板和外部设备之间通过OTG线连接,设备由平板供电。
系统本意是想通过平板可以向设备发送串口指令。
在串口转usb编写程序,我可以连接到设备,也可以发送数据,不是-1了,但是
系统本意是想通过平板可以向设备发送串口指令。
在串口转usb编写程序,我可以连接到设备,也可以发送数据,不是-1了,但是
数据都是错的,原因后来发现是,在设置波特率的时候,没有效果,为什么没效果呢
因为串口转usb线里有一个芯片, 不同型号的芯片,设置波特率的方式不同,即
mDeviceConnection.controlTransfer(0x40, 0x03, baud, index, null, 0, 0); // set
// baudrate
上面的方法的参数值不同。
纠结了好久,参考了国外的大哥写的,才调通了FT的芯片。
相关推荐
在Android平台上进行USB Host串口编程是一项技术性强且具有挑战性的任务,特别是在涉及到特定硬件驱动优化的情况下,如本文档所提及的"ch340驱动"优化。CH340是一种常用的USB到串行接口芯片,广泛应用于各种串口设备...
USB Host ADK(Accessory Development Kit)是这一功能的核心,它利用Java API接口,使得开发者可以直接通过编程来控制连接到Android设备的USB配件。 USB Host模式在Android系统中扮演了重要角色,它允许Android...
总结,Android通过USB转串口编程实现了与传统串口设备的通信,涉及USB主机模式、USB设备管理、串口通信协议等多个技术层面。实践中,需要对硬件接口、驱动程序、Android API以及数据传输机制有深入理解。通过阅读和...
这通常在应用内部完成,通过请求`ACCESS_FINE_LOCATION`和`ACCESS_COARSE_LOCATION`权限,以及`android.hardware.usb.host`功能。 3. **使用串口库**:有许多开源的Android串口库,如AndroidSerialPortLibrary、...
总结起来,“Android串口编程--开关灯Demo”是一个实践性的教程,它涵盖了Android平台上的USB串口通信基础,包括USB设备的识别、权限请求、串口配置以及数据传输。通过学习和实践这个Demo,开发者可以掌握Android...
在Android平台上进行串口编程,主要是为了实现设备之间的通信,比如连接硬件设备、传感器或者其他支持串行通信的装置。这个实例源码下载是为开发者提供了一个Android应用的演示,用于展示如何通过Android系统进行...
这个实例主要涉及了Android的USB访问接口、串口通信协议以及多线程编程。下面将详细介绍这些关键知识点。 首先,USB转串口(USB to UART)是通过USB接口将数据转换成串行通信协议(如RS-232)的一种方式,广泛用于...
在本项目"android-PL2303-usb-host"中,重点是利用Android的USB主机模式来与PL2303芯片进行通信,该芯片是一种常用的USB到串口桥接器,适用于各种数据传输应用。 1. **Android USB 主机模式**:Android 3.1及以上...
在Android中,USB驱动通常分为主机模式(Host Mode)和设备模式(Device Mode)。主机模式的Android设备可以作为USB主机连接其他USB设备,而设备模式则让Android设备作为USB设备连接到电脑。这里的标签"USB驱动"可能...
例如,如果PC端有一个串行通信接口,Android APP可以模拟USB到串口的转换器,从而与PC进行数据交换。 在实现这个功能时,需要注意以下几点: 1. 需要正确配置AndroidManifest.xml,添加相应的USB权限声明。 2. 在PC...
例如,`<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />` 和 `<uses-feature android:name="android.hardware.usb.host" />`,确保应用有权访问和控制串口。 2. **Java.Comm API**: ...
【Android USB 串口助手源代码】是一款专为Android设备设计的应用程序,它允许开发者或技术爱好者通过USB接口与外部设备进行串行通信。这款源码对于理解和学习Android平台上的USB通信机制及其与硬件交互的方式非常有...
开发者需要在AndroidManifest.xml中添加相应的权限声明,如`<uses-feature android:name="android.hardware.usb.host" />`,并获取USB管理器实例以发现和管理USB设备。 2. **Arduino AVR芯片**:Arduino是一个开源...
"Android应用源码之串口编程资料.zip" 包含的资源是针对Android平台进行串口编程的实践示例,适合开发者学习和设计参考。 串口通信在Android中的实现并不像在桌面系统那样直接,因为Android设备通常不直接暴露串口...
在Android平台上实现与PLC(可编程逻辑控制器)设备的通信通常涉及到串行通信协议,因为PLC设备通常使用串口进行数据交换。在这种场景下,Android设备通过USB接口连接到一个USB转串口模块,使得Android能够模拟串行...
<uses-feature android:name="android.hardware.usb.host" /> <uses-permission android:name="android.permission.ACCESS_USB" /> ``` 这样应用才能读取和控制USB设备。 3. **USB设备识别**:使用`UsbManager`...
Android系统通过USB Host API和Android开放设备访问框架(ADK)提供了对USB设备的支持,允许开发者直接与各种外部硬件进行通信,包括串口设备。本知识讲解将深入探讨如何在Android应用中实现实现这些功能。 首先,...
本文将围绕“安卓串口Socket通讯USB驱动jni相关-串口编程资料.rar”这一主题,深入探讨相关知识点。 首先,我们要了解什么是串口通信。串口通信(Serial Communication)是指数据逐位按顺序传输的一种通信方式,...