返回顶部
首页 > 资讯 > 移动开发 >RS232 Android获取串口数据
  • 768
分享到

RS232 Android获取串口数据

android 2023-09-20 13:09:43 768人浏览 八月长安
摘要

串口 串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。串行接口 (Serial Interface)是指数据一位一位地顺序传送。其特点是通信线路简单

串口

串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。串行接口 (Serial Interface)是指数据一位一位地顺序传送。其特点是通信线路简单,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线),从而大大降低了成本,特别适用于远距离通信,但传送速度较慢。

定义

串行接口(Serial Interface)是指数据一位一位地顺序传送,其特点是通信线路简单,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线),从而大大降低了成本,特别适用于远距离通信,但传送速度较慢。一条信息的各位数据被逐位按顺序传送的通讯方式称为串行通讯。串行通讯的特点是:数据位的传送,按位顺序进行,最少只需一根传输线即可完成;成本低但传送速度慢。串行通讯的距离可以从几米到几千米;根据信息的传送方向,串行通讯可以进一步分为单工、半双工和全双工三种。

由来

串口的出现是在1980年前后,数据传输率是115kbps~230kbps。串口出现的初期是为了实现连接计算机外设的目的,初期串口一般用来连接鼠标和外置Modem以及老式摄像头和写字板等设备。串口也可以应用于两台计算机(或设备)之间的互联及数据传输。由于串口(COM)不支持热插拔及传输速率较低,部分新主板和大部分便携电脑已开始取消该接口。串口多用于工控和测量设备以及部分通信设备中。

接口划分标准

同步串行接口(英文:Synchronous Serial Interface,SSI)是一种常用的工业用通信接口。
异步串行是指UART(Universal Asynchronous Receiver/Transmitter),通用异步接收/发送。UART是一个并行输入成为串行输出的芯片,通常集成在主板上。UART包含TTL电平的串口和RS232电平的串口。 TTL电平是3.3V的,而RS232是负逻辑电平,它定义+5+12V为低电平,而-12-5V为高电平,MDS2710、MDS SD4、EL805等是RS232接口,EL806有TTL接口。
串行接口按电气标准及协议来分包括RS-232-C、RS-422、RS485等。RS-232-C、RS-422与RS-485标准只对接口的电气特性做出规定,不涉及接插件、电缆或协议。

RS-232

也称标准串口,最常用的一种串行通讯接口。它是在1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。它的全名是“ [1] 数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准”。传统的RS-232-C接口标准有22根线,采用标准25芯D型插头座(DB25),后来使用简化为9芯D型插座(DB9),现在应用中25芯插头座已很少采用。
RS-232采取不平衡传输方式,即所谓单端通讯。由于其发送电平与接收电平的差仅为2V至3V左右,所以其共模抑制能力差,再加上双绞线上的分布电容,其传送距离最大为约15米,最高速率为20kb/s。RS-232是为点对点(即只用一对收、发设备)通讯而设计的,其驱动器负载为3~7kΩ。所以RS-232适合本地设备之间的通信。 [2]

RS-422

标准全称是“平衡电压数字接口电路的电气特性”,它定义了接口电路的特性。典型的RS-422是四线接口。实际上还有一根信号地线,共5根线。其DB9连接器引脚定义。由于接收器采用高输入阻抗和发送驱动器比RS232更强的驱动能力,故允许在相同传输线上连接多个接收节点,最多可接10个节点。即一个主设备(Master),其余为从设备(Slave),从设备之间不能通信,所以RS-422支持点对多的双向通信。接收器输入阻抗为4k,故发端最大负载能力是10×4k+100Ω(终接电阻)。RS-422四线接口由于采用单独的发送和接收通道,因此不必控制数据方向,各装置之间任何必须的信号交换均可以按软件方式(XON/XOFF握手)或硬件方式(一对单独的双绞线)实现。
RS-422的最大传输距离为1219米,最大传输速率为10Mb/s。其平衡双绞线的长度与传输速率成反比,在100kb/s速率以下,才可能达到最大传输距离。只有在很短的距离下才能获得最高速率传输。一般100米长的双绞线上所能获得的最大传输速率仅为1Mb/s。

RS-485

是从RS-422基础上发展而来的,所以RS-485许多电气规定与RS-422相仿。如都采用平衡传输方式、都需要在传输线上接终接电阻等。RS-485可以采用二线与四线方式,二线制可实现真正的多点双向通信,而采用四线连接时,与RS-422一样只能实现点对多的通信,即只能有一个主(Master)设备,其余为从设备,但它比RS-422有改进,无论四线还是二线连接方式总线上可多接到32个设备。
RS-485与RS-422的不同还在于其共模输出电压是不同的,RS-485是-7V至+12V之间,而RS-422在-7V至+7V之间,RS-485接收器最小输入阻抗为12kΩ、RS-422是4kΩ;由于RS-485满足所有RS-422的规范,所以RS-485的驱动器可以在RS-422网络中应用。
RS-485与RS-422一样,其最大传输距离约为1219米,最大传输速率为10Mb/s。平衡双绞线的长度与传输速率成反比,在100kb/s速率以下,才可能使用规定最长的电缆长度。只有在很短的距离下才能获得最高速率传输。一般100米长双绞线最大传输速率仅为1Mb/s。 [2]

与并口区别

串口形容一下就是一条车道,而并口就是有8个车道同一时刻能传送8位(一个字节)数据。但是并不是说并口快,由于8位通道之间的互相干扰(串扰),传输时速度就受到了限制,传输容易出错。串口没有互相干扰。并口同时发送的数据量大,但要比串口慢。 [3] 串口硬盘就是这样被人们重视的。

应用

交换机的串口

交换机的串口的英文就是trunk;是用来做下一跳路由转换用的。每个VLAN只有通过与TRUNK的路由指向后才能上外网。

电脑主板串口

进行串行传输的接口,它一次只能传输1Bit。串行端口可以用于连接外置调制解调器、绘图仪或串行打印机。它也可以控制台连接的方式连接网络设备,例如路由器和交换机,主要用来配置它们。

在window下模拟串口进行调试

window10下 使用 [串口调试助手3]+[Virtual Serial Port Driver Pro9.0 by Eltima Software]

使用[Virtual Serial Port Driver Pro9.0 by Eltima Software]创建一对连接的串口,不要使用com1和com2创建,可能会出现问题,因为com1可能是物理存在的,创建完成后,可以在此电脑→管理→设备管理器→端口处查看到,虚拟的端口,虚拟的端口是有对应关系的,然后打开两个[串口调试助手3]作为调试端口

ComAssistant V1.1版本参数配置
串口号: /dev/ttyZC1
波特率: 9600
校验位: 无校验
停止位: 1位
解码方式: 文本

Android模拟器访问PC本地串口

创建一对虚拟串口COM2和COM4,COM4作为PC串口使用,将COM2映射到夜神模拟器的串口上
PC: COM2 — COM4
|
Android: /dev/ttyS3

虚拟化后,使用Android Studio自带的Android模拟器创建一个Android系统
使用emulator.exe -list-avds显示所有模拟器,注意不要直接通过Androidstudio启动模拟器
通过emulator.exe -avd Pixel_2_api_27_2 -writable-system -qemu -serial COM2 启动Android模拟器
启动报错,安装NDK相关内容

启动模拟器后,如果进入adb shell时,前缀是类似:@generic_x86:/ $
最后是一个美元符号$,则表示不是以root身份运行。如果前缀是类似:root@generic_x86:/ #
最后是一个井号#,则表示是以root身份运行。
如果没有root,要使用root权限,则需要执行su命令,但执行后出现提示:/system/bin/sh: su: not found

找不到su命令

其实并不是找不到,只是因为没有root权限,也执行不了su命令

那么也就是说,在没有root权限的情况下要切换到root状态也需要root权限,这进入了权限许可逻辑的死循环。

于是,我们要跳出解决权限问题的思维!

解决方法:

我一开是采用的Android Studio安卓模拟器的版本是根据所学习教程推荐的Android 7.0。

但是,Android 7.0的模拟器是没有root权限的!

所以只需要重新安装一个非Android 7.0版本的模拟器,如Android 6.0,或者连接一台获得了root权限的安卓设备

运行后会发现,当进入adb shell后,命令提示符里前缀就已经变成了:root@generic_x86:/ #

带有root权限的adb shell

那也就不需要su命令了,可以直接访问所有的文件,问题就解决了。

其他问题:

在使用adb的时候,有时候会遇到在命令提示符打不开adb shell的情况,提示:adb sever is out of date.killing

则有可能是你打开了两个adb,Android Studio在运行安卓模拟器时,会自行初始化并打开adb。如果此时你再手动打开adb shell,会出现两个adb抢占5037端口,导致两个都不能使用的问题。

那么我的解决方法比较简单粗暴:

重启电脑再打开Android Studio,并且只用AS里自带的Terminal命令控制符打开adb shell,尚可解决

adb使用命令

adb shell连接默认设备
adb -s 设备名 shell 指定某个设备执行命令
ADB命令用法大全

参考的博客
Android调试串口无法连接串口设备的问题及解决办法
Android模拟器实现windows虚拟串口通信调试
Android模拟器调试串口
Android Windows虚拟串口调试
使用ANDROID模拟器调试串口功能
Android 串口打开失败几种原因及解决办法

连接Android方式

  1. Androidstudio中启动Android模拟器
  2. 使用adb root设置adb为root模式
  3. adb shell setenforce 0 临时关闭selinux防火墙,强制模式, adb shell getenforce,获取当前状态,如果为Enforcing则执行
    组合命令:adb root & adb shell setenforce 0
    adb root & adb shell setenforce 0 & adb shell chmod 777 /dev/tty & adb shell chmod 777 /dev/ttyS0 & adb shell chmod 777 /dev/ttyS1 & adb shell chmod 777 /dev/ttyS2 & adb shell chmod 777 /dev/ttyS3
  4. 进入/dev文件夹
  5. 设置权限chmod 777 ttyS3
    组合命令:adb shell chmod 777 /dev/tty & adb shell chmod 777 /dev/ttyS0 & adb shell chmod 777 /dev/ttyS1 & adb shell chmod 777 /dev/ttyS2 & adb shell chmod 777 /dev/ttyS3
  6. 关闭Android模拟器,使用emulator命令启动模拟器,重新从第2步开始执行
    emulator.exe -avd Pixel_2_API_25 -writable-system -qemu -serial COM2
  7. 使用安卓串口调试工具调试串口,下载安卓8.1版本的串口调试助手,安装root工具Superuser,安装手机端terminal.apk,
    切换为Android 7.1.1,API 25
    注意, 每次重启Android模拟器都需要重新设置adb参数

梳理一下现在市面上常见的CPU架构类型,如下:

armeabi-v7a: 第7代及以上的 32位ARM 处理器
2、arm64-v8a: 第8代、64位ARM处理器
3、armeabi: 第5代、第6代的32位ARM处理器,早期的手机在使用,现在基本很少了。
4、x86: Intel 32位处理器,在平板、模拟器用得比较多。
5、x86_64: Intel 64位处理器,在平板、模拟器用得比较多。

  1. 在安卓串口助手上选择可用的串口,点击打开,然后在电脑端点击响应连接的串口,点击打开,如果打开时发现安卓7.1.1的模拟器直接卡死关机,这就说明已经连接上了,这个时候直接上自己开发的Android代码连就行

开发完成后直接真机测试,就不要用模拟器测试了,因为模拟器不清楚是内部什么原因卡死。据说网上飘来的答案说是5.1以上的Android系统不能使用,串口权限没有打开。但是我这里想了一下,我修改了权限了的,而且是在模拟器打开的时候是正常的,
是主机打开串口的时候卡死的,这就说明连接是正常的,也有可能是纯粹不大兼容吧
排查原因,数据位不能超过8位,设置成7位试试,不行…
Android选择4.4版本的,Android API 19再试

收获

了解了大名鼎鼎的串口是啥,究竟是干嘛的,在学习使用RS232协议进行串口通信的过程中,学习了Android开发的部分知识,了解了Java JNI在链接C/C++时发挥的作用

来源地址:https://blog.csdn.net/qq_27577113/article/details/130201816

--结束END--

本文标题: RS232 Android获取串口数据

本文链接: https://lsjlt.com/news/412887.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • RS232 Android获取串口数据
    串口 串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。串行接口 (Serial Interface)是指数据一位一位地顺序传送。其特点是通信线路简单...
    99+
    2023-09-20
    android
  • php_dio读取串口数据
    php_dio读取串口数据 一、运行环境 php_dio.dll需要找到与PHP版本相匹配的版本,下载后打开扩展完成安装。 下载地址phpStudy2018 切换到PHP 7.0.12-NTS。(更...
    99+
    2023-09-24
    php 开发语言
  • python如何读取串口数据
    在Python中,可以使用第三方库pyserial来读取串口数据。首先需要安装pyserial库,可以使用pip安装: pip in...
    99+
    2024-04-02
  • pb怎么获取数据窗口行数
    要获取数据窗口行数,可以使用以下方法: 使用dw_1.RowCount()函数获取数据窗口的行数,其中dw_1是数据窗口的名称。...
    99+
    2023-10-27
    pb
  • python 实现elk接口获取数据
    [root@ctum2A0703016 ~]# cat jiaoyihao.py #!/usr/bin/python2.7 from datetime import datetimefrom elasticsearch import El...
    99+
    2023-01-31
    接口 数据 python
  • Android实现读写USB串口数据
    本文实例为大家分享了Android实现读写USB串口数据的具体代码,供大家参考,具体内容如下 最近在研究USB方面的内容;先后做了关于Android读写HID、串口设备的DEMO。本...
    99+
    2024-04-02
  • Mysql字符串截取及获取指定字符串中的数据
    前言:本人遇到一个需求,需要在MySql的字段中截取一段字符串中的特定字符,类似于正则表达式的截取,苦于没有合适的方法,百度之后终于找到一个合适的方法:substring_index('www.sqlstu...
    99+
    2024-04-02
  • python怎么读取保存串口数据
    在Python中,可以使用pySerial库来读取和保存串口数据。以下是一个简单的示例代码: import serial # 打开...
    99+
    2024-04-02
  • java怎么调用接口获取数据
    在Java中,可以通过以下步骤来调用接口获取数据:1. 创建一个实现接口的类。这个类必须实现接口中定义的所有方法。2. 在实现类中实...
    99+
    2023-09-26
    java
  • php获取api接口数据的方法
           API是应用程序的开发接口,在开发程序的时候,我们有些功能可能不需要从到到位去研发,我们可以拿现有的开发出来的功能模块来使用,而这个功能模块,就叫做库(libary)。比如说:要实现数据传输的安全,这就要使用加密技术,使用加密...
    99+
    2023-09-14
    php json 开发语言
  • python怎么调用接口获取数据
    要调用接口获取数据,可以使用Python中的requests库。下面是一个简单的示例:```pythonimport request...
    99+
    2023-08-30
    python
  • json怎么根据字符串获取整条数据
    使用`json.loads()`函数将字符串解析为json对象,然后可以通过键值对的方式获取整条数据。以下是一个示例:```pyth...
    99+
    2023-10-10
    json
  • Android传感器数据获取的方法
    本文实例为大家分享了Android传感器数据获取的具体代码,供大家参考,具体内容如下 接着上篇wifi列表获取,我们这篇接着说传感器。还是看代码 我们先自己定义一个传感器的工具类(因...
    99+
    2024-04-02
  • python怎么调用api接口获取数据
    要调用API接口获取数据,可以使用Python中的requests库。下面是一个简单的例子,说明了如何使用requests库来调用一...
    99+
    2023-10-10
    python
  • jmeter怎么获取上个接口的数据
    在JMeter中,可以通过使用正则表达式提取上个接口的数据。以下是一个示例步骤:1. 在第一个接口请求之后,添加一个正则表达式提取器...
    99+
    2023-08-15
    jmeter
  • python如何调用api接口获取数据
    在Python中,可以使用`requests`库来调用API接口获取数据。下面是一个简单的例子:```pythonimport re...
    99+
    2023-08-25
    python
  • jmeter如何获取上个接口的数据
    JMeter可以通过使用正则表达式提取上一个接口的响应数据。以下是一种基本的步骤: 在JMeter中,选中要从中提取数据的HTTP...
    99+
    2023-10-26
    jmeter
  • android调用webservice接口获取信息
    我的有一篇博客上讲了如何基于CXF搭建webservice,service层的接口会被部署到tomcat上,这一篇我就讲一下如何在安卓中调用这些接口传递参数。在lib中放入ksoap2的jar包并导入在xml 配置文件中加入:<!--...
    99+
    2023-05-30
    android webservice 接口
  • SQL 获取数据
    SELECT         COMPLAIN_CODE '投诉单号',  &nb...
    99+
    2024-04-02
  • Android开发如何获取传感器数据
    这篇文章主要介绍了Android开发如何获取传感器数据,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。本文实例讲述了Android开发获取传感器数据的方法。分享给大家供大家参考...
    99+
    2023-05-30
    android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作