python手柄读不出来

python手柄读不出来,第1张

python手柄读不出来

1、电脑USB接口或者USB手柄有问题,这种情况,只能找维修点或者电脑售后了。最简单的方法是换一个电脑,测试一下游戏手柄,如果游戏手柄能用,说明电脑接口有问题,游戏手柄不能用,则多数是游戏手柄有问题。

2、换个USB接口插入游戏手柄,台式机,尽量使用机箱后面的USB接口,因为前面板的USB接口是通过主板上的针脚引出来的,标准电压5V的时候最多也只能提供03-05A的电流,而后面的接口都是直接从PCB里引出来的,相同电压下能提供更大的电流(或者在更高的电压下也能有相同的电流输出),所以可以加快充电过程。

3、查看USB驱动是否安装,按WIN+R键,输入devmgmtmsc,打开设备管理器,查看”通用串行总线控制器“下的USB HUB是否有问号或者叹号,有表示未安装驱动,需要下载USB驱动程序,另外,一般在购买游戏手柄时,会附送一张驱动光盘,记得安装或者网上下载通用游戏手柄驱动程序。

楼上的方法太复杂,用serial库就可以,亲测可用:

import serialtoolslist_ports

port_list = list(serialtoolslist_portscomports())

if len(port_list) == 0:

   print('找不到串口')

else:

    for i in range(0,len(port_list)):

        print(port_list[i])

参考:网页链接

1、打开手机的开发者选项,本人小米手机,系统android 70(miui 91),设置->我的设备->全部参数(点击miui版本5次,即可开启开发者模式)

2、设置->更多设置(倒数第三个就是开发者选项)->开启USB调试,使用数据线连接手机和电脑

3、在电脑上安装adb驱动,下载地址:>

由于测试工作的需要,在C端产品上经常使用串口进行通信,而测试脚本大部分时候又采用python编写,于是就不得不了解并熟悉python下的串口通信实现方法了,整理如下以备随时使用:

一、说明

pyserial封装了python环境下对串口的访问,其兼容各种平台,并有统一的 *** 作接口。通过python属性访问串口设置,并可对串口的各种配置参数(如串口名,波特率、停止校验位、流控、超时等等)做修改,再进行串口通信的类与接口封装后,非常方便地被调用和移植。

二、模块安装

pip insatll pyserial

三、初始化与参数说明

import serial

ser = serialSerial('COM3', 115200, timeout=05, )

下面看看 serialSerial 原生类

四、不同平台下初始化

ser=serialSerial("/dev/ttyUSB0",9600,timeout=05)#使用USB连接串行口ser=serialSerial("/dev/ttyAMA0",9600,timeout=05)#使用树莓派的GPIO口连接串行口ser=serialSerial(1,9600,timeout=05)#winsows系统使用COM1口连接串行口ser=serialSerial("COM1",9600,timeout=05)#winsows系统使用COM1口连接串行口ser=serialSerial("/dev/ttyS1",9600,timeout=05)#Linux系统使用COM1口连接串行口

五、串口属性

sername #串口名称

serport #端口号

serbaudrate #波特率

serbytesize #字节大小

serparity #校验位N-无校验,E-偶校验,O-奇校验

serstopbits #停止位

sertimeout #读超时设置

serwriteTimeout #写超时

serxonxoff #软件流控

serrtscts #硬件流控

serdsrdtr #硬件流控

serinterCharTimeout #字符间隔超时 

六、串口常用方法

isOpen():查看端口是否被打开。

open() :打开端口‘。

close():关闭端口。

read(size=1):从端口读字节数据。默认1个字节。

read_all():从端口接收全部数据。

write(data):向端口写数据。

readline():读一行数据。

readlines():读多行数据。

in_waiting():返回输入缓存中的字节数。

out_waiting():返回输出缓存中的字节数。

flush():等待所有数据写出。

flushInput():丢弃接收缓存中的所有数据。

flushOutput():终止当前写 *** 作,并丢弃发送缓存中的数据。

sendBreadk(duration=025):发送BREAK条件,并于duration时间之后返回IDLE

setBreak(level=True):根据level设置break条件。

setRTS(level=True):设置请求发送(RTS)的控制信号

setDTR(level=True):设置数据终端准备就绪的控制信号

七、类与接口封装

import time

import serial

import serialtoolslist_ports

# 串口 *** 作类

class serialCommunication(object):

    def __init__(self, port, bps, timeout):# 可配置更多参数

        port_list =selfshow_usable_com()

        if len(port_list) >0:

            if portnot in port_list:

                selfport = port_list[0]

            else:

                selfport = port

        else:

            print("no usable serial, please plugin your serial board")

            return

        selfbps = bps

        selftimeout = timeout

        try:

            # 初始化串口,并得到串口对象,根据需要可拓展更多参数

            selfser = serialSerial(selfport, selfbps, 8, 'N', 1, timeout=selftimeout, write_timeout=selftimeout)

        except Exception as e:# 抛出异常

            print("Exception={}"format(e))

    # 显示可用串口列表

    @staticmethod

    def show_usable_com():

        serialport_list = []

        portInfo_list =list(serialtoolslist_portscomports())

        if len(portInfo_list) <=0:

            print("can not find any serial port!")

        else:

            print(portInfo_list)

            for i in range(len(portInfo_list)):

                plist =list(portInfo_list[i])

                print(plist)

                serialport_listappend(plist[0])

            print(serialport_list)

            return serialport_list

# 输出串口基本信息

    def serial_infor(self):

        print(selfsername)# 设备名字

        print(selfserport)# 读或者写端口

        print(selfserbaudrate)# 波特率

        print(selfserbytesize)# 字节大小

        print(selfserparity)# 校验位

        print(selfserstopbits)# 停止位

        print(selfsertimeout)# 读超时设置

        print(selfserwriteTimeout)# 写超时

        print(selfserxonxoff)# 软件流控

        print(selfserrtscts)# 软件流控

        print(selfserdsrdtr)# 硬件流控

        print(selfserinterCharTimeout)# 字符间隔超时

    # 打开串口

    def serial_open(self):

        try:

            if not selfserisOpen():

                selfseropen()

        except Exception as e:# 抛出异常

            print("serial_open Exception={}"format(e))

            selfserclose()

    # 读取指定大小的数据

    # 从串口读size个字节。如果指定超时,则可能在超时后返回较少的字节;如果没有指定超时,则会一直等到收完指定的字节数。

    def serial_read_with_size(self, size):

        try:

            selfserial_open()

            return selfserread(size)decode("utf-8")

        except Exception as e:

            print("serial_read_all Exception={}"format(e))

            selfserclose()

    # 读取当前串口缓存中的所有数据

    def serial_read_data(self):

        try:

            selfserial_open()

            datalen =selfserinWaiting()

            if datalen ==0:

                return None

            return selfserread(datalen)decode("utf-8")

        except Exception as e:

            print("serial_read_data Exception={}"format(e))

            selfserclose()

    # 读串口全部数据,注意timeout的设置

    # 在设定的timeout时间范围内,如果读取的字节数据是有效的(就是非空)那就直接返回,

    # 否则一直会等到设定的timeout时间并返回这段时间所读的全部字节数据。

    def serial_read_all(self):

        try:

            selfserial_open()

            return selfserread_all()decode("utf-8")

        except Exception as e:

            print("serial_read_all Exception={}"format(e))

            selfserclose()

    # 读一行数据

    # 使用readline()时应该注意:打开串口时应该指定超时,否则如果串口没有收到新行,则会一直等待。

    # 如果没有超时,readline会报异常。

    def serial_read_line(self):

        try:

            selfserial_open()

            return selfserreadline()decode("utf-8")

        except Exception as e:

            print("serial_read_line Exception={}"format(e))

            selfserclose()

    # 读多行数据,返回行列表

    def serial_read_lines(self):

        try:

            selfserial_open()

            return selfserreadlines()decode("utf-8")

        except Exception as e:

            print("serial_read_lines Exception={}"format(e))

            selfserclose()

    # 写数据

    def serial_write_data(self, data):

        try:

            selfserial_open()

            selfserflushOutput()

            data_len =selfserwrite(dataencode('utf-8'))

            return data_len

        except Exception as e:

            print("serial_write_data Exception={}"format(e))

            return 0

    # 写行数据,注意参数差异

    def serial_write_lines(self, lines):

        selfserwritelines(lines)

    # 清除串口缓存

    def serial_clean(self):

        try:

            if selfserisOpen():

                selfserflush()

        except Exception as e:

            print("serial_clean Exception={}"format(e))

    # 关闭串口

    def serial_close(self):

        try:

            if selfserisOpen():

                selfserclose()

        except Exception as e:

            print("serial_clean Exception={}"format(e))

if __name__ =='__main__':

    testSerial = serialCommunication("COM10", 1500000, 05)

    testSerialserial_open()

    testSerialserial_infor()

    testSerialserial_write_data("ifconfig eth0\n")

    timesleep(01)

    data = testSerialserial_read_all()

    print(data)

    testSerialserial_close()

八、其他

1)serVERSION表示pyserial版本; 另外,sername表示设备名称

2)端口设置可以被读入字典,也可从字典加载设置:

    getSettingDict():返回当前串口设置的字典

    applySettingDict(d):应用字典到串口设置

3) Readline()是读一行,以/n结束,要是没有/n就一直读,阻塞。注意:打开串口时应该指定超时,否则如果串口没有收到新行,则会一直等待。

4)serialread_all 与 serialread_all()区别

    serialread_all:读取串口所有的参数信息

    serialread_all():超时时间内从串口读取的所有数据

5) 异常信息

    exception serialSerialException

    exception serialSerialTimeoutException

以上就是关于python手柄读不出来全部的内容,包括:python手柄读不出来、python如何获取串口前面的名称、python如何 *** 作手机等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9632595.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存