环境: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 usbhost串口编程,优化ch340驱动,支持多串口,用于wifi模块产测
android usb转串口数据通信示例(源代码) android usb转串口数据通信示例。物联网开发中也会经常用到usb转串口,对android手机进行通信。一般都会用otc线进行转换。我在GitHub下来一份代码,亲测可用。并进行了修改...
3.1版本之后支持的usb host API。可以通过usb接口让安卓设备作为主设备来接收来自usb的数据,比如平板上插个单片机,就可以接收单片机的数据了。该程序封装了多个包,实现了该功能。
android usb转串口源码,android usb转串口源码,android usb转串口源码,
Usb Host ADK是指不采用USB驱动,直接用java与设备编程的 这样让Android 可以无需修改内核和驱动情况下方便与各种USB外设通讯
可以接收单片机发送的usb hid信息,并显示在android手机上
android下USB Host开发的一些注意事项和开发步骤
用于检测Android平板是否支持USB HOST API
Android USB host简介,中文文档
how to enable android usb host api
安卓 Android OTG USB 串口通信,支持Cp2102、FT232R, CDC/ACM,使用Android USB Host API ,Android 3.1+,无需root
此demo实现两个android设备通过usb线进行相互通信,用于host和devices之间通信
本人最近在Android的PAD上开发USB Host数据传输,USB驱动芯片是PL2303。(见附件)已经能够正常读写。欢迎试用。
安卓 Android OTG USB 串口通信,支持Cp2102、FT232R, CDC/ACM,使用Android USB Host API ,Android 3.1+,无需root,供学习使用
启用android usb host功能的xml文件。 需要将这个文件加到设备的/system/etc/permissions/目录下,才能开启android设备的usb host权限。
本人最近在Android的PAD上开发USB Host数据传输。(见附件) 对CH340,已经能够正常读写;但对CH341只是可以正常写出,读入总是有问题:只有当USB缓存满32字节时,才可以读入数据(数据是对的)。 不知道有无同行在CH...
本资料属原创,从USB驱动CDC设备的原理,框架,具体协议,分析波形,以及实验的平台,实验条件等等做出详细的描述。将近1个月的梳理学习整理而出,对学习人员很有帮助。
android USBHOST功能,能解决android与单片机通信,android与zigbee通信的鞥问题