使用Android Host模式与Arduino进行通信
来源:互联网 发布:java静态常量存储 编辑:程序博客网 时间:2024/06/17 05:25
1、要求:
1.安卓设备需要支持主机模式和USB主机API。大多数的Android3.1+系统都满足
2.需要能够OTG
2、具体步骤
1.创建一个android app 最小的sdk要在12版本以上。
2.修改Manifest文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.tx.androidusb"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="12"
android:targetSdkVersion="17" />
<uses-feature android:name="android.hardware.usb.host" />
<uses-permission android:name="android.permission.HARDWARE_TEST" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.tx.androidusb.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
//当安卓设备连接上可以匹配的设备触发当前的activity
<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
</intent-filter>
//通过device_filter文件过滤连接的usb设备
<meta-data
android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
android:resource="@xml/device_filter" />
</activity>
</application>
</manifest>
如果配置文件添加内容后出现错误,请clean一下project
3.添加xml文件:
在项目的res文件夹下创建一个xml文件夹,和Manifest文件中meta-data对应创建一个device_filter.xml文件
<?xml version="1.0" encoding="utf-8"?>
<resources>
//只允许文件中的usb设备连接。如果没有条件就是任何usb设备都可以被识别。
<usb-device
product-id="24577"
vendor-id="1027" />
</resources>
完成这一步之后应该在外接设备之后会自动弹窗,请求用户选择适用于USB设备的应用程序。如果没出现插着设备重启一下看看
4.接收和发送消息
现在可以接收和发送消息了。启动一个线程去接收和发送消息。
发送消息代码:
private Runnable r = new Runnable() {
@Override
public void run() {
UsbManager manager = (UsbManager) MainActivity.this
.getApplicationContext().getSystemService(
Context.USB_SERVICE);
UsbDeviceConnection connection = null;
HashMap<String, UsbDevice> deviceList = manager.getDeviceList();
Iterator<UsbDevice> deviceIterator = deviceList.values().iterator();//获取所有设备
while (deviceIterator.hasNext()) {
UsbDevice device = deviceIterator.next();
if (manager.hasPermission(device)) {// 如果已经拥有该设备的连接权限
connection = manager.openDevice(device);// 打开一个UsbDeviceConnection
UsbInterface intf = device.getInterface(0);
UsbEndpoint epOut = intf.getEndpoint(1);//结束点,一般index为1的为输入,0的为输入
UsbEndpoint epIn = intf.getEndpoint(0);
connection.claimInterface(intf, true); //在发送和接收数据前 要进行申明
connection.controlTransfer(0x40, 0x03, 0x4138, 0, null, 0,
0);// 这是设置波特率的代码。没有这个行代码,会出现一些问题。
int result = connection.bulkTransfer(epOut, "R".getBytes(),
"R".getBytes().length, 3000);//发送数据,如果返回值大于0,表示发送成功
//接收数据的方法
byte[] buffer = new byte[1024];
int ret = connection.bulkTransfer(epIn, buffer,buffer.length, 3000);
if (ret > 0) {
StringBuilder sb = new StringBuilder();
for (int j = 2; j < 1024; j++) {
if (buffer[j] != 0) {
sb.append((char) buffer[j]);
} else {
Log.i("info",sb.toString());
break;
}
}
view.setText("ret:" + ret + "数据内容-->" + sb.toString());//在一个view中显示出来
}
}
}
}
};
- 使用Android Host模式与Arduino进行通信
- 使用C#应用程序与Arduino开发板进行通信
- 浅谈arduino与android通信
- ESP8266 Android 与 Arduino 通信
- Arduino与ESP8266进行串口通信
- Arduino与ESP8266进行串口通信
- NFC:Arduino、Android与PhoneGap近场通信
- Arduino蓝牙模块与Android实现通信
- Arduino与Android蓝牙通信笔记
- NFC:Arduino、Android与PhoneGap近场通信
- Android 使用 Usb Accessory 模式与 linux 下位机进行通信
- Arduino与Silverlight通信
- 树莓派与arduino通信
- android usb Host模式下与usb Hid 设备的通信
- Android通过蓝牙HC06与Arduino通信实例
- Java 与 Arduino uno 使用 RXTX串口通信
- 使用Processing与Arduino通信,玩转上位机。
- Java 与 Arduino uno 使用 RXTX串口通信
- 二叉树的操作
- Delphi For iOS开发指南(17):让应用程序禁止竖屏(也就是只显示横屏)
- 【java失业择业中】失业第一天:华为PM
- 【Hadoop权威指南】Hadoop分布式文件系统
- 【Hadoop权威指南】Hadoop I/O
- 使用Android Host模式与Arduino进行通信
- 【Hadoop权威指南】MapReduce的工作机制
- duplicate class bad class
- 【Hadoop权威指南】MapReduce的类型与格式
- (转)android 之摄像头
- svn: SSL negotiation failed 错误
- js模拟文件上传进度条
- dwz yii 的整合
- (转)android摄像头获取图像