-
2022-02-11 14:14:22
情景
一般硬件设备提供的内置串口数量是有限的,当串口不够用时,就需要通过USB来外接这些设备
CH341是一种芯片,它可以将以串口方式进行通信的设备,转接到USB口上进行通信
使用该方案,需要购买对应的CH341转换器,将串口设备转接到USB口上,转换器支持一个USB口接多个串口设备
准备
引入CH34XMultiUARTDriver.jar
这是一个串口转USB的驱动,支持CH341等型号的芯片
核心代码
//连接CH34X设备 CH34X.connect(); CH34X.read(); //定期读取CH34X设备参数 CH34xHandler.read(); WorkThread.postByLoop(CH34xHandler::write);
package com.android.driver.ch34x; import android.app.PendingIntent; import android.content.Intent; import android.hardware.usb.UsbDevice; import android.hardware.usb.UsbManager; import android.os.Looper; import com.easing.commons.android.app.CommonApplication; import com.easing.commons.android.bin.Bytes; import com.easing.commons.android.code.Console; import com.easing.commons.android.helper.exception.BizException; import com.easing.commons.android.thread.Threads; import com.easing.commons.android.thread.WorkThread; import java.util.ArrayList; import java.util.List; import cn.wch.lib.ch34xMultiDriver; import cn.wch.lib.ch34xMultiManager; @SuppressWarnings("all") public class CH34X { protected static UsbManager service; protected static ch34xMultiManager manager; protected static List<UsbDevice> deviceList; protected static final List<Reader> readers = new ArrayList(); protected static boolean connected = false; //判断设备是否连接 public static boolean connected() { return connected; } //检查权限 public static boolean checkPermission() { boolean hasPermission = true; for (UsbDevice device : deviceList) { boolean ret = service.hasPermission(device); if (!ret) hasPermission = false; } Console.info("CH34X Permission Check : " + hasPermission); return hasPermission; } //检测并连接设备 public static void connect() { service = CommonApplication.ctx.getSystemService(UsbManager.class); manager = new ch34xMultiManager(CommonApplication.ctx, service); WorkThread.postByLoop("#CH34X连接线程", () -> { try { if (connected) return; if (Looper.myLooper() == null) Looper.prepare(); //搜索设备 manager.initDeviceList(); deviceList = manager.usbDeviceList; Console.info("CH34X Find Device : " + deviceList.size()); //检查并申请权限 if (!checkPermission()) { for (UsbDevice device : deviceList) { Intent intent = new Intent("cn.wch.USB_PERMISSION"); PendingIntent pendingIntent = PendingIntent.getBroadcast(CommonApplication.ctx, 0, intent, 0); service.requestPermission(device, pendingIntent); } } //打开设备 boolean isDeviceOpen = true; for (UsbDevice device : deviceList) { boolean ret = manager.OpenUsbDevice(device); if (!ret) isDeviceOpen = false; } Console.info("CH34X Open Device : " + isDeviceOpen); //连接失败 if (!isDeviceOpen) throw BizException.of("CH34X Connect Fail"); //连接成功 connected = true; Console.info("CH34X Connect Success"); //配置设备 boolean isDeviceConfigured = true; int index = 0; for (UsbDevice device : deviceList) { ch34xMultiDriver driver = manager.ch34xDriverList.get(index); index++; boolean ret = driver.SetConfig(9600, (byte) 1, (byte) 8, (byte) 0, (byte) 0); if (!ret) isDeviceConfigured = false; } Console.info("CH34X Configure Device : " + isDeviceConfigured); } catch (Throwable e) { manager.CloseAll(); Console.error("CH34X Connect Fail"); } Threads.sleep(3 * 1000L); }); } //读数据 public static void read() { WorkThread.post(() -> { final byte[] buffer = new byte[10 * 1024]; while (true) { if (!connected) continue; try { int index = 0; for (UsbDevice device : deviceList) { ch34xMultiDriver driver = manager.ch34xDriverList.get(index); manager.SemDeviceList.acquire(); int length = driver.ReadData(buffer, 10 * 1024); manager.SemDeviceList.release(); if (length > 0) { byte[] newBytes = Bytes.copy(buffer, 0, length); onMessageRead(index, newBytes); } index++; } Threads.sleep(500); } catch (Throwable e) { Console.error("CH34X Read Fail"); } } }); } //数据读取成功 public static void onMessageRead(int deviceIndex, byte[] bytes) { String hex = Bytes.byteArrayToHex(bytes); Console.info("CH34X Read", "Device-" + deviceIndex, hex); for (Reader reader : readers) reader.onMessageRead(deviceIndex, bytes); } //写数据 public static void write(Integer deviceIndex, byte[] bytes) { if (!connected) return; if (deviceIndex == null) deviceIndex = 0; try { int index = 0; for (UsbDevice device : deviceList) { if (index != deviceIndex) continue; ch34xMultiDriver driver = manager.ch34xDriverList.get(index); manager.SemDeviceList.acquire(); int ret = driver.WriteData(bytes, bytes.length); manager.SemDeviceList.release(); String hex = Bytes.byteArrayToHex(bytes); Console.info("CH34X Write", "Device-" + deviceIndex, hex); index++; } } catch (Throwable e) { Console.error("CH34X Write Fail"); } } //添加读取回调 public static void addReader(Reader reader) { readers.add(reader); } //移除读取回调 public static void removeReader(Reader reader) { readers.remove(reader); } }
源码下载
更多相关内容 -
Linux下如何使用USB转串口线
2020-08-04 05:18:17Linux下USB转串口连接更简单,可以免装驱动。 -
使用串口转USB连接树莓派
2020-12-10 10:37:22目录 所需工具 接线方式 驱动准备 Windows串口检测 SecureCRT连接设置 ...第三种是通过串口转USB连接到ssh。 本文主要介绍如何通过串口转USB来连接到本地计算机,完成相应的配置。 所需工具目录
在烧录好树莓派系统之后,我们可以通过三种方式来实现进入树莓派的系统:
第一种是在烧系统的时候就把WiFi的配置文件写入系统,使树莓派可以通过WiFi上网,完成ssh的连接;
第二种是在烧好系统之后用网线连接到树莓派的有线网口,完成ssh的连接;
第三种是通过串口转USB连接到ssh。
本文主要介绍如何通过串口转USB来连接到本地计算机,完成相应的配置。
-
所需工具
- 串口转USB(一般为USB转TTL,ch340芯片)
- 树莓派(测试环境:树莓派3B)
- 电脑(测试环境为:笔记本win10系统)
- 杜邦线(母对母4根)
-
接线方式
- 电压的选择有自己的转接板上的电压选择决定;
- RXD与TXD是反着接的;
- 地线必须要使用GPIO.6
-
驱动准备
由于我们用的是ch340这个芯片,所以要安装与之相应的驱动。如果大家的转接板用的不是这个芯片,大家可以自己搜索与之相应的驱动。
-
Windows串口检测
-
SecureCRT连接设置
-
登录系统
一般用户名为pi,密码为:raspberry。
-
进入树莓派系统
-
欧克!完成。
-
-
USB转串口常见故障现象和故障分析
2020-08-01 10:32:00通用USB推出以后,串口逐渐被...为了能够使用串口,没办法只能利用现在广泛存在并使用的USB接口来模拟串口使用(USB转232、USB转485/422)。在实际应用过程肯定会遇到各种难题,下面给大家分析可能遇到的问题和对策。 -
USB转串口线驱动程序 免费版
2020-07-12 09:01:04USB转串口线驱动程序能够让你不断的进行各类问题解决,拥有方便的设备调试功能,为你带来不错的驱动服务,实现非常便捷的驱动体验,快速连接电脑!官方介绍是一款非常常用的usb驱动程序,它能快速读取连接所有连接... -
CH340 USB转串口、USB转打印口、USB转IrDA解决方案-电路方案
2021-04-21 17:42:26该设计方案CH340的USB转串口、USB转打印口、USB转IrDA的原理图和PCB,串口含DB9的RS232、低成本RS232、TTL的UART等各种版本,打印口含DB36连接器、DB25插孔两种版本,USB红外适配器、USB转IrDA含6脚、8脚红外收发器... -
电脑和PLC连接不上我用的是USB转串口的连接线
2020-12-30 05:58:23USB转换器实际上是虚拟了一个串口,设置通讯接口时还要选择串口,不能选择USB口。如果以上都没有问题,则就是USB转换器的质量不好了。换一个转换器试试。回答者: 寒音 - 中级工程师  第10级20...USB转换器与PLC之间用的什么通讯电缆?USB转换器与PLC之间是不能直接通讯的。
如USB转换器与PLC之间的通讯电缆没有问题,则可能是参数设置或串口号选择的有问题。USB转换器实际上是虚拟了一个串口,设置通讯接口时还要选择串口,不能选择USB口。
如果以上都 没有问题,则就是USB转换器的质量不好了。换一个转换器试试。
回答者: 寒音 - 中级工程师  第10级
2010-12-04 10:10:38
电脑和PLC进行通讯不仅仅是要一条串口线还要适配器的。
建议购买西门子原装MPI编程电缆。
PC Adapter 编程用:
6ES7 972-0CA23-0XA0 RS232接口:支持MPI,PROFIBUS,ppi
6ES7 972-0CB20-0XA0 USB接口:支持PPI,MPI,PROFIBUS,ppi
回答者: smarteye - 助理工程师  第8级
2010-12-04 10:14:06
USB转串口的连接线是有驱动的,在驱动程序里设定虚拟的串口号,比如COM1,有的USB转串口的连接线在设置完串口号以后还需要重启电脑。
然后在PC/PG端口设置里选择通讯端口为COM1.
回答者: 笑晴 - 助理工程师  第8级
2010-12-04 10:32:04
如果说你单纯的USB转com 是不行的,西门子的USB MP1 电缆里有转化芯片的。。。我原来用网卡转过 还要驱动 usb 也要驱动。
回答者: kunkun-张 - 中级技术员  第6级
2010-12-04 12:10:09
你如果只是USB转串口,肯定连不上PLC。
PLC是485接口,USB如果转485口,也得将A+、B-与PLC端口相对应。
另外波特率、数据位、奇偶校验等都要设置正确才能连接。
回答者: 凌飞翼 - 初级工程师  第9级
2010-12-04 14:03:23
我估计你没有安装连接线的驱动,在西门子官网上有下载的
回答者: sunaway - 初级技术员  第5级
2010-12-04 14:08:27
一、直接连接是接不上的,因为存在协议转问题。
二、再说USB转RS232的质量或者制作原因,很多厂家生产的USB_RS232中的一些接线省略了。而通讯系统通讯时很可能要用到其中的一些信号线传输或者握手。因此造成了通讯不上的故障。请购买质量好的转接线才行。
三、建议购买西门子的正版的通讯线缆,可靠!
回答者: daliu - 初级工程师  第9级
2010-12-04 14:12:15
楼主你那USB数据线不对,建议买个USB PC Adapter 适配器来用,不过原装价格就有点贵了,USB PC Adapter 适配器支持200,300/400PLC。
原装USB PC Adapter 适配器订货号:
6ES7 972-0CB20-0XA0 USB接口:支持PPI,MPI,PROFIBUS。
回答者:
莘莘学子 - 顶级工程师  第12级
2010-12-04 18:24:55
屏是TP270吗?如果是,1.建议找一个有串口的电脑,用串口的PC适配器下载(需要用PLC借电,用带编程口的DP头连接屏跟PLC,然后把适配器的485口插到PLC上的DP头的编程口上),或者用普通的串口线(23交叉、46交叉、78交叉、5直连);2.用USB口的PC适配器。
《xP177x(不含TP177micro)各种下载方法参考手册》
http://www.ad.siemens.com.cn/download/searchResult.aspx?searchText=A0262
回答者:
金华山 - 助理工程师  第8级
2010-12-08 21:56:57
上一页
1
下一页
-
USB转RJ45调试线驱动.rar
2019-11-28 10:31:09USB转RJ45(console口)的驱动包合集,支持Windows xp/7/8/10系统,针对连接console口后设备管理器中不显示串口的情况安装该驱动 -
linux下如何使用USB转串口线
2012-11-21 17:30:17linux下如何使用USB转串口线,使用方便,不需要windows! -
UNITEK(优越者)USB转串口驱动
2017-11-03 13:58:02UNITEK(优越者)USB转串口驱动 win7_32/64位,XP,Linux系统的驱动 -
WIN10USB转串口驱动适合win1064位.zip
2019-05-29 15:24:07在win10系统下,在更新USB转串口驱动后,出现黄色叹号,无法识别设备,然后串口无法正常使用,下载安装USB转串口驱动后,每次插USB转串口线,电脑就会蓝屏,终止代码:IRQL NOT LESS OR EQUAL 下载此驱动,拔下电脑... -
关于笔记本用usb转串口连接出现乱码的解决
2013-07-14 13:12:12关于笔记本用usb转串口连接出现乱码的解决 -
USB-TTL测试工具等_串口调试助手V2.2_rs422_ttl测试工具_ttl端口检测_TLL连接侦测_
2021-09-30 10:56:46USB转RS485简易检测方法一、安装好驱动后,将两个USB转RS485转接器的AB端对应连接上,然后均插上电脑的USB插口,打开设备管理器查看转换器的端口分别是多少。二、打开串口调试助手,设置好转换器1的端口,然后打开... -
电脑串口及并口USB连接线缆VGA-高清线大全.doc
2021-12-30 11:51:36电脑串口及并口USB连接线缆VGA-高清线大全.doc -
Console线驱动(USB转串口兼容WIN10)
2018-12-05 12:22:33兼容Windows10及其以下系统,USB转串口驱动,亲测有效。 -
用串口线连接电脑和交换机图文教程
2020-10-01 13:31:18要配置网络设备,如...首先,要使用一根串口线把电脑和网络设备连接起来。再通过专用的软件连接到网络设备上,然后在电脑上对网络设备进行配置。本文就为大家介绍用串口线连接电脑和交换机方法,希望对大家有所帮助 -
USB转RS232串口线-交叉线or直连线
2021-05-17 21:01:33USB转RS232串口线-交叉线or直连线USB转RS232串口线直连线交叉线 USB转RS232串口线 直连线 一般使用的USB转RS232串口线都是直连线: TX对TX; RX对RX; GND对GND; 交叉线 一般使用的USB转RS232串口线都是直连线,...USB转RS232串口线-交叉线or直连线
USB转RS232串口线
直连线
一般使用的USB转RS232串口线都是直连线:
- TX对TX;
- RX对RX;
- GND对GND;
交叉线
一般使用的USB转RS232串口线都是直连线,但是有些设备不支持直连,需要使用交叉线,手边有电烙铁的朋友可以根据下图自己焊接一个交叉线:
- TX对RX;
- RX对TX;
- GND对GND;
也就是2、3互换下位置,5对5不变,其他阵脚接线悬空,这样交叉线就做好了。
自己身边找不到公母头对接转换时可以在某宝上搜索购买,或者直接买一根网络商店直接出售的交叉线也是很方便,当然,自己制作的会更有成就感。
Tips:这个串口阵脚是9pin,它与VGA视频线外貌很相似,不要弄混淆,VGA阵脚图如下:
延申:常用视频接口介绍
-
USB转串口CH340 USB转IRS232串口 TTL串口protel99SE设计硬件原理图PCB工程文件.zip
2021-03-21 19:20:38二是USB转TTL串口,连接单片机或者PDA等手持式设备 建议: 手机等设备或单片机系统的USB数据线用“T9T”版,USB转9线制TTL串口 计算机的串口线用“T9R”版,USB转9线制RS232串口 低档的计算机串口线用“R9R”版... -
USB转TTL串口、USB转232串口、232串口转TTL串口
2020-07-21 22:54:13电源线是5V,为USB设备提供最大500mA的电流,它与数据线上的电平无关,数据线是差分信号,通常D+和D-在+400mV~-400mV间变化。 2,232串口,通过232电平标准工作 232电平: 逻辑1(MARK)=-3V~-15V 逻辑0(SPACE)=+3~... -
ch340电路 usb转串口电路 usb转ttl usb连接单片机串口 ch340全自动下载电路
2020-07-16 22:07:29CH340是一款 USB 总线的转接芯片,实现 USB 转TTL串口或者 USB 转打印口。 成本便宜,¥1.x,且有 SOP8 / MSOP10的小封装型号。 特性 全速 USB 设备接口,兼容 USB V2.0。 仿真标准串口,用于升级原串口外围... -
USB转串口那些事儿—USB转串口工作原理及应用
2020-08-12 14:34:32USB转串口即实现计算机USB接口到物理串口之间的转换。可以为没有串口的计算机或其他USB主机增加串口,使用USB转串口设备等于将传统的串口设备变成了即插即用的USB设备。 USB虚拟串口应用特点: USB应用广泛,支持... -
安卓上的超级终端 (支持多种usb转串口线)
2017-12-21 15:38:47常见的usb串口线基本上都支持了:FT232R,PL2303,CP210x,CH340 还支持USB CDC协议:ATmega32U4, V-USB software USB,ARM mbed DAPLink firmware -
电脑中USB转串口如何正确安装对应的驱动程序
2021-05-21 17:42:32可能会有用户需要在笔记本电脑中通过USB转串口装置来连接使用串行端口的设备,因为现在的笔记本电脑很少具备串行接口。一般购买的USB转串口装置会提供对应的驱动程序,我们需要在电脑中正确安装对应的驱动程序才能... -
Linux下如何测试及使用USB转串口线
2021-05-10 20:57:521、将设备u口插入pc2、输入#...另外如果有的话最好再用dmesg | grep usb查找如果看到:“drivers/usb/serial/usb-serial.c: USB Serial support registered for Generic”就说明设备已被识别,然后往下看drivers/us... -
单片机串口连接电脑,USB转TTL线的使用
2017-11-08 20:46:00注:串口发送数据(USART)是STM32调试中经常使用的功能,但是电脑USB的电平标准与串口所使用的TTL标准不同,所以需要一条USB转TTL线来完成它们之间的通信。本文介绍使用USB转TTL线完成单片机与电脑通信的方法。 -
usb转串口万能驱动.rar
2019-07-14 21:51:16•USB转通用串口线及其驱动程式使得的USB埠不需要改变固件就可以直接和周边设备连接,只需要做最小的修改就使得串口和周边设备之间可以通过的USB埠通讯。 UT-810 USB 1.1 TO RS232 Cable驱动程序USB转串口 ... -
串口转USB驱动
2012-09-27 18:32:35串口转ISB,驱动程序,可用于需要加载驱动的串口转USB连接线 -
工具说明书 - FTDI芯片的USB转UART串口线
2022-01-27 14:41:10这是是用来转换USB信号和串口UART信号的,就是通常我们说的USB串口线。 当我们将FTDI的线连接电脑后,在设备管理器里会显示未识别的设备。 连接1.8V UART的串口线: 连接3.3V UART的串口线: ... -
安卓系统使用USB转串口
2021-09-23 09:34:21安卓系统支持多种 USB 外围设备,提供两种模式来支持实现 USB 外设接入系统:USB 配件模式和 USB 主机模式。 在 USB 配件模式下,接入的 USB 设备充当 USB 主机,并为 USB 总线供电。USB 配件产品包括USB转接设备、... -
USB转RS232串口应用
2022-04-13 17:37:45RS232串口是用于数据串行通信传输的标准之一,该标准定义了信号的电气特性和时序、信号的含义以及连接器的物理尺寸和引脚排列。RS232协议规范定义的是DB25接口,实际上大多数RS232串口使用以DB9接口为主。DB9信号...