安卓如何自动连接串口
⑴ 我想用Android手机与单片机进行串口通信,从而可以控制单片机,该如何实现呢
不过你还得注意的是手机的USB转串口电平是TTL电平,所以你的单片机板子的串口也得是TTL,在就是分清楚交叉连接或者直连。
⑵ android串口消息
android串口消息连接的方法为:
1.模拟器可以使用PC的串口。
启动模拟器并加载PC串口 命令如下。
运行 emulator @模拟器名称 -qmu -serial COM1。
2.查看串口是否被加载。
启动后使用 adb shell 命令打开命令行
cd dev 查看会发现ttyS0 ttyS1 ttyS2,其他ttyS2 就是我们加载上来的串口COM1
3.修改权限
chmod 777 ttyS2
现在我们可以开发串口程序了。
4.串口程序实例
下载libserial_port.so ,放入libs/armeabi 目录,可以自己创建此目录
libserial_port.so 下载地址:
http://code.google.com/p/android-serialport-api/
import java.io.File;
import java.io.FileDescriptor;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import android.util.Log;
public class SerialPort {
private static final String TAG = "SerialPort";
private FileDescriptor mFd;
private FileInputStream mFileInputStream;
private FileOutputStream mFileOutputStream;
public SerialPort(File device, int baudrate) throws SecurityException, IOException {
if (!device.canRead() || !device.canWrite()) {
try {
Process su;
su = Runtime.getRuntime().exec("/system/bin/su");
String cmd = "chmod 666 " + device.getAbsolutePath() + "n"
+ "exitn";
su.getOutputStream().write(cmd.getBytes());
if ((su.waitFor() != 0) || !device.canRead()
|| !device.canWrite()) {
throw new SecurityException();
}
} catch (Exception e) {
e.printStackTrace();
throw new SecurityException();
}
}
mFd = open(device.getAbsolutePath(), baudrate);
if (mFd == null) {
Log.e(TAG, "native open returns null");
throw new IOException();
}
mFileInputStream = new FileInputStream(mFd);
mFileOutputStream = new FileOutputStream(mFd);
}
public InputStream getInputStream() {
return mFileInputStream;
}
public OutputStream getOutputStream() {
return mFileOutputStream;
}
//JNI
private native static FileDescriptor open(String path, int baudrate);
public native void close();
static {
System.loadLibrary("serial_port");
}
}
####################################
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class PrintClass {
//输入流
private static InputStream in;
//输出流
private static OutputStream out;
private static final String PORT = "/dev/ttyS2";//串口
private SerialPort serialPort;
private void Connect()
{
try {
serialPort = new SerialPort(new File(PORT), 38400);
in = serialPort.getInputStream();
out = serialPort.getOutputStream();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void CloseSerialPort()
{
try {
out.close();
in.close();
serialPort.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
⑶ 瀹夊崜镓嬫満鐩戞祴涓嶅埌涓插彛璁惧
1銆侀栧厛锛屼笉鑳界敤铏氭嫙链猴纴涓嶉’鐢ㄧ湡链
2銆佸彲浠ユ煡镓惧懆锲磋掴鐗栾惧囷纴褰撴悳绱㈠埌浣犺佽繛鎺ュ埌镄勮掴鐗栾惧囷纴锅沧discovering锛岀劧钖庡氨镊锷ㄨ繛鎺ャ傛垨钥呮槸锛屽傛灉浣犵‘瀹氭坠链哄拰钃濈堕璁惧囧凡缁忛厤瀵规垚锷熻繃锛岄偅涔熷彲浠ョ敤 getBundedDevice鎸囦护锛岃幏鍙栭厤瀵规垚锷熺殑钃濈堕璁惧囷纴鍦ㄩ厤瀵规垚锷熺殑钃濈堕璁惧囬噷镆ユ垒鍒板悗瀹炵幇杩炴帴銆傝繖涓ょ嶆柟娉曞悗钥呬细姣旇缉濂戒竴浜涳纴涓鑸镞堕棿鐩稿樊3鍒4绉掋
杩欐牱閰嶅硅繛鎺ユ垚锷熷悗灏卞彲浠ュ皾璇曡緭鍏ヨ緭鍑烘祦𨱒ュ疄鐜版暟鎹鍙戦佹帴鏀朵简
⑷ Android UART 串口通信
最近有项目需要实现windows机器和Android开发版进行UART串口通信,经过3天查找尝试,特记录一下最终方案,希望之后的同行少走弯路,最后在git上回开源我最终的方案希望大家支持。
Android 3.0.1
Gradle 4.1
ARM开发版 : RK3399
PC机器:Win10
开发机器:MAC 10.13.3
先上图
由于 android-serialport-api 项目中的so使用较old的ndk编译,所以在对于Android 6.0 以上版本兼容的时候会报错 dlopen failed: "has text relocations" 。且使用的mk进行编译,特升级为用cmake编译。
升级 android-serialport-api
项目结构:
app对应原项目中的各个Activity, androidserial 是mole 对应编译之前的so,还有API的封装。可以直接引用androidserial,调用方法参考app目录下的activity。
注意 关于权限!
当接入开发板后如果发现 Error You do not have read/write permission to the serial port 需要root 权限 ,在开发者模式中开启root 权限 adb和应用
使用一下命令开启Android对串口的读写权限
setenforce 0 : 关闭防火墙,有人说关键是这,但是我的环境不用关闭,只要给权限就可以
注意 关于ttyS1 - 6 ttyS1 - 6 对应的是 UART 串口1-6 一般都是一一对应的。这个具体要看一下开发板的说明。
记录的比较糙,还请见谅,如有问题请留言,我看到后肯定回复。项目主要看结构,剩下的都是复制黏贴的事。 git地址:https://github.com/braincs/AndroidSerialLibrary
⑸ 用手机串口助手,搜索,为什么连不上
手机需要连接第三方手机助手传输数据,三星手机一般建议进行以下操作:
1.安卓系统手机需要开启USB调试功能(设定-开发者选项-USB调试-勾选),然后与手机助手连接。
2.如果不能连接成功,可能是电脑中缺少手机驱动所导致,请在电脑中下载三星kies软件后再次尝试。