基于Android平台的串口通信实现(2)
- 格式:doc
- 大小:21.00 KB
- 文档页数:2
Android串口全面解决方案武汉波仕电子公司串口(RS-232/RS-485)主要用于工业测量和控制,计算机以及Windows正在部分被平板和Android代替,计算机串口也在逐步被Android串口取代。
本文介绍了在Android下的几种串口解决方案。
从连接方式上来分,分为无线和有线,无线又分为蓝牙和WiFi,有线分为主板自带和USB口扩展。
从实现方式上来分,分为自带串口的专用设备、对通用设备进行串口扩展。
如果是用于高可靠性要求的工业测控,有线串口是必须的。
因为有线的抗干扰能力远远强于无线。
如果用于日常的测控,无线则更加方便,因为无需布线。
1、蓝牙串口转换器BLU232型蓝牙/串口转换器只有DB-9/DB-9转接头大小,将android智能手机或者平板电脑的蓝牙信号转换出RS-232/RS-485口,无线通信距离10米。
BLU232可以为带蓝牙的Android设备扩展出一个无线串口。
1、将BLU232接上电源,LED灯亮。
2、蓝牙——“添加蓝牙设备”,无线扫描找到蓝牙BOLUTEK,输入配对密码:1234。
3、BLU232默认为从机状态、波特率等格式为(9600,n,8,1)。
在ANDROID下可以使用“蓝牙串口.apk”等软件进行智能手机的串口通信。
2、WiFi串口转换器波仕AP232L型WiFi串口转换器实现无线WiFi与RS-232/RS-485/422串口的转换,这样Android智能设备可以用无线WiFi进行串口通信,无线通信距离50米。
产品本身可通过浏览器进行设置,无须其它任何专用软件或装置。
由于AP232L本身是通过TCP/IP协议来虚拟串口通信的,所以Android智能手机或者平板电脑也可以直接用TCP/IP通信。
先安装TCP-TEST.APK(TCP网络助手),并连接到AP232L 的无线信号。
运行TCP网络助手,选中“tcp client”,键入AP232L默认的IP地址(192.168.1.1)和端口(2001),按“增加”即可。
windows与android usb串口通信原理一、引言随着移动设备的普及,Android操作系统成为了最为主流的移动操作系统之一。
而在软硬件设备之间进行通信的需求也越来越高。
本文将介绍Windows与Android系统通过USB串口进行通信的原理。
二、USB串口通信概述USB串口通信是将数据通过串口进行传输的一种方式。
USB (Universal Serial Bus)是一种常见的计算机外设接口,而串口作为传统的通信接口之一,在一些设备中仍然得到广泛应用。
通过USB串口通信,可以实现不同设备之间的数据传输和通信。
三、Windows与Android USB串口通信原理1. USB驱动安装:在Windows平台上,如果需要与Android设备进行USB串口通信,首先需要确保系统已经安装了相应的驱动程序。
一般情况下,当连接一个支持USB串口通信的Android设备时,Windows系统会自动安装驱动程序。
但如果系统无法自动安装所需的驱动程序,用户需要手动安装驱动。
2. Android设备USB配置:为了确保Android设备能够以USB串口模式工作,需要在系统设置中进行相应的配置。
用户需要前往设备的设置菜单,并启用“开发者选项”。
在“开发者选项”中,打开“USB调试”和“USB串口调试”选项。
3. 应用程序通信:一旦安装了必要的驱动程序并进行了相关的设备配置,用户可以通过编写应用程序来实现Windows与Android之间的USB串口通信。
在Windows平台上,用户可以使用开发工具如Visual Studio来编写应用程序。
而在Android平台上,用户可以通过Android Studio等工具进行开发。
4. USB设备连接与数据传输:通过USB接口连接Windows计算机与Android设备,并确保设备处于串口调试模式下。
在应用程序中,用户可以使用相应的API来实现USB串口通信。
通过这些API,用户可以完成如打开串口、读取数据、写入数据等操作。
基于安卓平台的USB接口与串口通信转换的实现作者:冯生强张新龙来源:《中国新通信》2016年第18期【摘要】在数据通信中,接口的使用尤其重要,特别是USB接口以及串口的应用较为广泛,随着智能家居、物联网以及安卓系统的飞速发展,基于安卓系统的多个通信接口之间转换成为拓展应用空间、延伸应用领域的有效通联手段。
本文提出一种基于安卓系统的USB接口与串口通信的设计,尤其是对硬件系统的设计提出方案,并在软件设计中指出了注意事项以及方式方法,为开发人员实现接口转换的实现具有一定指导意义。
【关键词】 Android USB 串口一、总体设计安卓操作系统,是谷歌公司于2007年11月在全球正式发布的最新智能手机软件开发平台。
该系统内核心模块全部来自linux技术,整个系统的与以前的所有手机系统不同之处在于它是一个全新并且全部开放式的开发方式,直至今天,安卓系统俨然已是全世界应用最广、用户最多、最受手机应用开发商推崇的智能系统之首。
随着智能家居、物联网的飞速发展,目前使用智能手机来实现实时了解家居信息,跟踪了解信息动态的需求越来越大。
尤其是要实现多个通信接口之间的信息通联成为拓展应用空间、延伸应用领域的基本途径和手段。
本文提出了一种基于安卓开发平台,实现usb接口与串口之间通信转换的硬件连接方式,特别是在现代工业以及智能家居控领域,usb接口、RS485、RS232等接口最为普遍,由于这些接口的发展历史较为悠久,目前绝大部分领域都在普遍应用,如:常用的程序烧写接口、机械类控制系统、云台操作系统等等,都将此类接口用于必要的通讯使用。
二、硬件设计系统的硬件部分一共分为两个部分,一个是实现系统的主要控制芯片,另外一个是实现USB和串口转换电路。
2.1主控芯片选择在本设计中,我们把主控芯片定为韩国Samsung公司生产的S5P4418,(基于Cortex-A9的微处理器芯片)。
整个芯片多达180个管脚,它采取“邮票孔”的核心板和底板相结合的设计方式,并且核心板扩展性很强,总体来看有一下几个特点:1.工作稳定可靠,采用8层沉金PCB工艺设计,电气特性和抗干扰性能较好。
Android串口开发及读取完整数据的解决方法串口发送实质就是向串口设备写入、读取字节流,和文件的操作很相似,安卓官方已经提供了android-serialport-api,在开源社区上也有很多衍生项目可以借鉴,本文介绍其中一种用法。
一、添加依赖在Module下的 build.gradle 中添加:implementation 'com.aill:AndroidSerialPort:1.0.8'二、检测权限首先要有ROOT权限,而且打开串口时,检测读写权限,当没有权限时,会尝试对其进行授权,默认su路径是/system/bin/su,有些设备su路径是/system/xbin/su:SerialPort.setSuPath("/system/xbin/su");三、串口打开及关闭/*** @param 1 串口路径* @param 2 波特率*@param 3 flags 给0就好*/SerialPort serialPort = new SerialPort(new File("/dev/ttyS1"), 9600, 0);//关闭串口serialPort.close();四、往串口中写入数据//从串口对象中获取输出流OutputStream outputStream = serialPort.getOutputStream();//定义需要发送的数据byte[] data = new byte[2];data[0] = 0x01;data[1] = 0x02;//写入数据outputStream.write(data);outputStream.flush();五、读取串口数据读取数据时候会遇到不能一次性读取正确的完整的数据,可以这样解决:1、在开始读取数据前,让读取数据的线程先睡眠一段时间,等待数据都准备好,再开始读取出来,这样应该可以避免大部分的分包情况2、如果是固定的数据长度,循环读取完固定长度的字节数据再退出//从串口对象中获取输入流InputStream inputStream = serialPort.getInputStream();//循环读取数据,放到子线程去,避免堵塞主线程boolean readContinue=true;new Thread(new Runnable() {@Overridepublic void run() {while (readContinue) {if (inputStream.available() > 0) {//等待一段时间再读取数据,基本上大部分情况下都是完整的数据Thread.sleep(50);byte[] buffer = new byte[12];int readCount=0;int availableCount=inputStream.available();//每次接收都是固定长度的字节while (readCount < 12 && availableCount > 0) {readCount += inputStream.read(buffer, readCount, 12 -readCount);Thread.sleep(5);availableCount = inputStream.available();}}}}}).start();3、在实际开发中,有一种应用场景是先发送数据到开发板,开发板再响应返回数据,而且是循环发送读取数据,时间间隔要求极其短,很可能出现了数据错乱情况,可以先在发送数据前判断输入流中有无数据,有数据时先读取完流中的数据。
基于Android平台的串口通信实现作者:金智义,张戟来源:《电脑知识与技术》2011年第13期摘要:串口在数据通信中应用广泛,但Android SDK指定使用Java作为第三方应用开发语言,这给C语言实现串口应用带来了困难。
虽然Google Android已经发布了NDK(Native Development Kit,原生态开发包),支持开发者用C/C++语言开发Android程序,但目前官方提供的技术指导比较简略。
通过开发一个Android下串口通信应用实例,详细介绍了Android NDK的开发流程,帮助开发人员快速的完成平台搭建。
关键词:Android;NDK;JNI;SDK;串口中图分类号:TP311文献标识码:A文章编号:1009-3044(2011)13-2983-03Serial Communication Based Android PlatformJIN Zhi-yi, ZHANG Ji(Vehicle College, Tongji University, Shanghai 201804, China)Abstract: Serial communication is widely used in data communication, but the Android SDK uses the Java language as a designated third-party application development, which makes it difficult to achieve serial applications with C language. Although Google Android has released NDK (Native Development Kit)which supports the developer to develop Android program with C/C++ language,but the official technical guidance has been relatively brief. Through the development of serial communication under an Android platform as an application example, article gives a thoroughly description of the Android NDK development process that can help developers quickly build platforms.Key words: Android; NDK; JNI; SDK; serialAndroid是Google推出的基于Linux的开源手机操作系统,是一个专门针对移动设备设计的软件平台,包括操作系统、中间件和一些关键应用。
串口基本信息用一台电脑实验串口自发自收,实验前要将串口(以9针为例)的发送引脚(2脚)和接受引脚(3脚)短接。
三线连接:适用于计算机之间尤其是PC机和单片机之间的数据通信。
其连接信号对为(TxD,RxD)、(RxD,TxD)、(SG,SG)。
即发送数据TxD端和接受数据RxD端交叉连接,信号地SG对应连接。
七线交叉连接:适用于同型号的计算机之间的连接,如PC机间的数据通信。
其连接信号对为:(TxD,RxD)、(RxD,TxD)、(SG,SG)、(RTS,CTS)、(CTS,RTS)、(DSR.DTR)、(DTR,DSR)。
其中,TxD、RxD、SG与前面信号的含义相同,RTS为请求发送,CTS为准许发送,DSR为数据装置准备好,DTR为数据终端准备好。
在本地连接的微机系统中,RTS、CTS、DTR、DSR用作硬件联络控制信号。
目前使用的串口连接线有DB9和DB25两种连接器,用户可以国家使用的具体机器选择相应的连接器。
一个串口通讯类在/network/serialport.shtml。
PC机的RS-232接口的电平标准是-12V标示“1”,和+12V表示“0”,有些单片机的信号电平时TTL 型,即大于2.4v表示“1”,小于0.5v表示“0”,因此采用RS-232总线进行异步通信是,发送端和接受端要有一个电平转换接口。
串口通讯方法的三种实现串口是计算机上一种非常通用的设备通信协议。
大多数计算机包含两个基于RS232的串口。
串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS一232口。
同时,串口通信协议也可以用于获取远程采集设备的数据。
串口通信(Serial Communication),是指外设和计算机间,通过数据信号线、地线、控制线等,按位进行传输数据的一种通讯方式。
串口通信方便易行,应用广泛。
在Windows应用程序的开发中,我们常常需要面临与外围数据源设备通信的问题。
实验四串口通信实验一.实验目的:1.掌握ARM的串行口工作原理。
2.学习并编程实现AR,的UART通信。
3.掌握S3C2410X寄存器配置方法。
二、实验设备:PC机一台 ADT IDE集成开发环境 JXARM9-2410教学实验箱三、实验内容:实现查询方式串口的收发功能。
接受来自串口(通过超级终端)的字符,并将接收到的字符发送到超级终端。
四、基础知识:1.异步串行通讯(1)异步串行方式是将传输数据的每个字符一位接一位(例如先低位、后高位)地传送。
(2)数据的各不同位可以分时使用同一传输通道,因此串行I/O 可以减少信号连线,最少用一对线即可进行。
接收方对于同一根线上一连串的数字信号,首先要分割成位,再按位组成字符。
为了恢复发送的信息,双方必须协调工作。
(3)在微型计算机中大量使用异步串行I/O 方式,双方使用各自的时钟信号,而且允许时钟频率有一定误差,因此实现较容易。
但是由于每个字符都要独立确定起始和结束(即每个字符都要重新同步),字符和字符间还可能有长度不定的空闲时间,因此效率较低。
2.异步串行通信中的字符传送格式❑开始前,线路处于空闲状态,送出连续“1”。
传送开始时首先发一个“0”作为起始位,然后出现在通信线上的是字符的二进制编码数据。
❑每个字符的数据位长可以约定为5位、6位、7位或8位,一般采用ASCII编码。
后面是奇偶校验位,根据约定,用奇偶校验位将所传字符中为“1”的位数凑成奇数个或偶数个。
也可以约定不要奇偶校验,这样就取消奇偶校验位。
最后是表示停止位的“1”信号,这个停止位可以约定持续1 位、1.5 位或2 位的时间宽度。
❑至此一个字符传送完毕,线路又进入空闲,持续为“1”。
经过一段随机的时间后,下一个字符开始传送才又发出起始位。
3.DB-25 DB-9引脚定义DB-25 DB-9引脚说明:RS-232C接口通信的两种基本连接方式:五、实验步骤:1.新建一个工程UART,将对应的文件添加到工程中去。
基本串口通信程序设计串口通信是指通过串行接口进行数据传输的一种通信方式。
串口通信通常用于短距离的数据传输,具有稳定性强、传输速率低的特点。
本文将介绍串口通信的基本原理和程序设计。
一、串口通信基本原理串口通信是通过串行接口将数据一位一位地传输的通信方式。
串口通信的基本原理是使用两根信号线进行通信:一根是传输数据的信号线(TX),负责向外发送数据;另一根是接收数据的信号线(RX),负责接收外部发送过来的数据。
二、串口通信程序设计步骤1. 打开串口:首先需要通过操作系统提供的串口接口函数,打开需要使用的串口。
在Windows系统中,可以使用CreateFile函数打开串口;在Linux系统中,可以使用open函数打开串口。
3. 发送数据:使用WriteFile函数(Windows系统)或write函数(Linux系统),向串口发送需要传输的数据。
4. 接收数据:使用ReadFile函数(Windows系统)或read函数(Linux系统),从串口接收数据。
5. 关闭串口:数据传输完成后,需要关闭串口,使用CloseHandle函数(Windows系统)或close函数(Linux系统)即可关闭串口。
三、串口通信程序设计示例(Windows系统)下面是一个简单的串口通信程序设计示例,实现了从串口接收数据并将接收的数据原样返回的功能。
#include <iostream>#include <windows.h>int mainHANDLE hSerial;DCB dcbSerialParams = {0}; // 串口参数hSerial = CreateFile("COM1", GENERIC_READ , GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); // 打开串口dcbSerialParams.DCBlength = sizeof(dcbSerialParams);std::cout << "Error getting serial port state\n";return 1;}dcbSerialParams.BaudRate = CBR_9600;dcbSerialParams.ByteSize = 8;dcbSerialParams.StopBits = ONESTOPBIT;dcbSerialParams.Parity = NOPARITY;std::cout << "Error setting serial port state\n";return 1;}return 1;}char buffer[100];DWORD bytesRead;while (1)if (ReadFile(hSerial, buffer, sizeof(buffer), &bytesRead, NULL) && bytesRead > 0)std::cout << "Received data: " << buffer << std::endl;DWORD bytesWritten;if (!WriteFile(hSerial, buffer, bytesRead, &bytesWritten, NULL))std::cout << "Error writing to serial port\n";return 1;}}}CloseHandle(hSerial); // 关闭串口return 0;以上程序打开串口COM1,设置波特率为9600,数据位为8位,停止位为1位。
串口通信与网络通信本文背景是研究通过将采集的温度数据通过串口和网络通信将采集的数据传送到手机端进行处理,手机端用eclipse进行开发,实现对采集数据的存档、处理以及发送控制命令。
温度采集控制部分采用单片机为核心器件,通过串口和网络进行传输和控制。
2 串口通信原理及配置2.1 串口通信原理串行接口在嵌入式系统中是一种重要的数据通信接口,其本质功能是作为CPU和串行设备间的编码转换器。
在发送数据时,数据从CPU经串行端口,字节数据转换为串行的位;在接收数据时,串行的位转换为字节数据。
[1]笔者以STC89C52为例来介绍单片机串口通信原理:设有两个单片机进行串口通信,甲机发送,乙机接收,甲机CPU向SBUF写入数据A,启动发送过程。
A中的并行数据送入SBUF,在发送控制器的控制下,按设定的波特率,每来一个移位时钟,数据移出一位。
乙机按设定的波特率,每来一个移位时钟,移入一位到SBUF,因此两边的波特率必须一致。
2.2 串口通信配置首先要对串口进行相应的配置,在本系统中采用串口工作方式1,波特率可变10位异步通信方式,无奇偶校验.故在此仅以工作模式1为例来说明串口通讯波特率的选择。
在串行端口工作于模式1,其波特率将由计时/计数器1来产生,通常设置定时器工作于模式2(自动再加模式),根据此模式下波特率计算公式得到相应的配置数据。
本系统采用晶振的频率为11。
0592MHz,T1工作在模式2下,波特率为9600b/s,将上述数据带入公式后得T1的初值为0xFD,对下列寄存器进行配置:EA=0;SCON=0X50;TMOD=0x20;TH1=0xfd;TL1=0xfd;TR1=1; ES = 1;EA=1;3 网络通信3。
1 网络通信原理Socket是一种抽象层,应用程序通过它来发送和接收数据,使用Socket可以将应用程序添加到网络中,与处于同一网络中的其他应用程序进行通信.本系统采用蓝牙模块作为连接单片机和手机设备的外设接口,因此选用基于蓝牙socket开发Android通信,以下为蓝牙socket通信原理:在服务器端,使用BluetoothServerSocket类来创建一个监听服务端口。
2 安装和配置NDK开发环境
2.1 安装NDK
首先要完整安装SDK,尽量升级至最新版本,文中使用2.1版本的SDK。
然后下载NDK,官网有三个版本分别是Windows、Mac OS X(intel)、
Linux32/64(x86),下载后解压即可使用。
文中使用Windows版本的NDK,版本为android-ndk-r5。
将它解压到某个目录下,文中我们将NDK安装到
D:\android\android-ndk-r5目录中。
2.2 安装Cygwin
首先去Cygwin官网下载网络安装程序,下载下来以后点击直接运行。
安装过程中最关键的是选择需要安装的包,为支持Android NDK的开发,选择Default 安装后再安装以下模块autoconf2.1、automake1.10、binutils、gcc-core、gcc4-core、gdb、pcre、pcre-devel、GNU awk。
下面开始将Android NDK配置到Cygwin中。
运行Cygwin,修改Cygwin目录下(/home/usrname)的.bash_profile文件,在文件尾部加入如下代码,NDK=/cygdrive/d/android/android-ndk-r5
export NDK
然后重新启动Cygwin。
输入cd $NDK,如果输出上面配置的
/cygdrive/e/android-ndk-r5信息,则表明环境变量设置成功了。
接下来就可以用 Cygwin 来编译我们的NDK代码了。
3Android NDK开发实例
开发实例是一个Android平台上的收音机程序,该应用通过调用串口API
与外围收音机芯片通信,进而控制收音机芯片完成搜台、显示等功能。
Android NDK开发一般有以下步骤:
1) JNI接口设计;
2) 使用C/C++实现本地方法;
3) 生成动态链接库;
4) 将动态链接库复制到Java工程,生成.apk文件。
首先,创建一个NDK工程,然后在这个文件夹下建立jni和src两个目录,jni用来存放我们的C文件,src是调用C库的Java接口文件。
接着创建
jni/SerialPort.c,该文件的主要作用是完成串口的打开和关闭。
关键代码如下:JNIEXPORT jobject JNICALL Java_android_serialport_SerialPort_open(JNIEnv *env, jobject thiz, jstring path, jint baudrate) {
……
/* Opening device */
const char *path_utf = (*env)->GetStringUTFChars(env, path, &iscopy);
LOGD("Opening serial port %s", path_utf);
fd = open(path_utf, O_RDWR | O_DIRECT | O_SYNC);
LOGD("open() fd = %d", fd);
(*env)->ReleaseStringUTFChars(env, path, path_utf);
……
/* Configure device */
……
struct termios cfg;
cfmakeraw(&cfg);
cfsetispeed(&cfg, speed);
cfsetospeed(&cfg, speed);
}
在文件中,函数名这样定义:
jobject JNICALL Java_android_serialport_SerialPort_open,这个是JNI 的标准,定义需要按照如下格式:Java_packagename_classname_methodname 接着创建文件jni/Android.mk.这个文件是我们本地c代码的Makefile。
文件内容如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE:= serial_port
LOCAL_SRC_FILES := SerialPort.c
LOCAL_LDLIBS:= -llog
include $(BUILD_SHARED_LIBRARY)
LOCAL_PATH:=$(callmy-dir)这句用来指定编译的路径通过调用宏my-dir 获取到当前工作的路径。