pythonserial函数_python3.5 中serial模块的问题

本文介绍了在Python3.5环境下使用serial模块进行串口通信时遇到的问题——尝试使用未打开的端口。通过提供详细代码展示了如何初始化设备、连接串口、读取数据以及进行硬件调试。针对设备通信问题,文章给出了错误分析及可能的解决方法。
摘要由CSDN通过智能技术生成

在python3.5中使用serial模块进行串口通信,通过while 1循环进行持续性的设备通信,但是第一个设备完成之后对下一个设备进行通信会有问题:Attempting to use a port that is not open

一下是我的代码:

import serial

import time

import base64

import hmac

import pymysql

from esptool import ESP8266StubLoader

from esptool import erase_flash, read_mac, write_flash

from log import TNLog

values = ['0x01000', 'D:\esp8266\user1.4096.new.4(3).bin']

values = ['0x01000', '/home/pi/Interface/Anthink/esp8266/user1.4096.new.4(3).bin']

v1 = ['0x00000', 'D:\esp8266\boot_v1.7.bin']

v1 = ['0x00000', '/home/pi/Interface/Anthink/esp8266/boot_v1.7.bin']

v2 = ['0x3fb000', 'D:\esp8266\blank.bin']

v2 = ['0x3fb000', '/home/pi/Interface/Anthink/esp8266/blank.bin']

v3 = ['0x3fe000', 'D:\esp8266\blank.bin']

v3 = ['0x3fe000', '/home/pi/Interface/Anthink/esp8266/blank.bin']

v4 = ['0x3fc000', 'D:\esp8266\esp_init_data_default_v08.bin']

v4 = ['0x3fc000', '/home/pi/Interface/Anthink/esp8266/esp_init_data_default_v08.bin']

argfile = open(values[1], 'rb')

a1 = open(v1[1], 'rb')

a2 = open(v2[1], 'rb')

a3 = open(v3[1], 'rb')

a4 = open(v4[1], 'rb')

db = pymysql.connect("192.168.0.250", "dev_v7", "vvvvvv7", "db_iot_v7", charset='utf8')

cursor = db.cursor()

logger = TNLog()

prorts = serial.serial_for_url('COM3')

prorts = serial.serial_for_url('COM3')

prorts.baudrate = 115200

s = 1019300100006626 # 扫码得到的设备SN

自定义属性值

class WriteOpthons(object):

def init(self, **kwargs):

for k, v in kwargs.items():

setattr(self, k, v)

设备初始化

class MyClass(object):

def init(self):

self._port = prorts

self._trace_enabled = False

logger.info('接口初始化已经完成:{}'.format(self._port))

设备调试

class SerialPort():

logger.info('现在开始进行调试硬件设备操作!')

message = ''

def connectport(self, com, baud):

try:

super(SerialPort, self).__init__()

self.port = serial.Serial(com, baud)

try:

if self.port.isOpen():

logger.info('已经连接OK:blfadd:connect port is ok')

print("blfadd:connect port is ok")

return 1

except Exception as e: # 捕获异常输出并终止运行

logger.error('硬件连接失败:{}'.format(e))

return 0

raise

except Exception as e:

logger.error('硬件调试连接操作出错:{}'.format(e))

def restart(self):

self.port.write()

def restart(self):

self.port.setDTR(True) # 0wei gao

self.port.setRTS(True)

time.sleep(1.5)

self.port.setDTR(True)

self.port.setRTS(False)

def setDTR(self, state):

self.port.setDTR(state)

def read_data(self):

global timeStamp

test1 = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))

start_time = time.strptime(test1, "%Y-%m-%d %H:%M:%S")

# strftime是转换为特定格式输出,而strptime是将一个(时间)字符串解析为时间的一个类型对象。一个是按照想要的格式,去转换。重点是格式!另外一个不管什么格式,我只要把特定的时间字符串转成时间类型即可!

print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))

while True:

self.message = self.port.readline().decode('utf8', 'ignore')

test2 = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))

end_time = time.strptime(test2, "%Y-%m-%d %H:%M:%S")

timeStamp = int(time.mktime(end_time)) - int(time.mktime(start_time))

if (self.message[0:10] == "uart begin" and timeStamp <= 80):

return 1

elif (timeStamp > 90):

raise Exception("blfadd:Time out")

def getwifiinfo(self, query_command, catchnum): # catchnum增加参数为捕获的wifi数量

try:

global count # 定义变量couunt用来计数

global macI

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值