Python串口操作

[复制链接]
1617|3
 楼主| gaoyang9992006 发表于 2019-1-28 11:57 | 显示全部楼层 |阅读模式
肯定是先安装串口支持包
上PIP
  1. pip install pyserial
674515c4e7d8012607.png
我的这个版本貌似低了,提示我升级。

 楼主| gaoyang9992006 发表于 2019-1-28 11:57 | 显示全部楼层
安装了串口包,就可以写代码了
  1. #coding=gb18030

  2. import threading
  3. import time
  4. import serial

  5. class ComThread:
  6.     def __init__(self, Port='COM3'):
  7.         self.l_serial = None
  8.         self.alive = False
  9.         self.waitEnd = None
  10.         self.port = Port
  11.         self.ID = None
  12.         self.data = None

  13.     def waiting(self):
  14.         if not self.waitEnd is None:
  15.             self.waitEnd.wait()

  16.     def SetStopEvent(self):
  17.         if not self.waitEnd is None:
  18.             self.waitEnd.set()
  19.         self.alive = False
  20.         self.stop()

  21.     def start(self):
  22.         self.l_serial = serial.Serial()
  23.         self.l_serial.port = self.port
  24.         self.l_serial.baudrate = 115200
  25.         self.l_serial.timeout = 2
  26.         self.l_serial.open()
  27.         if self.l_serial.isOpen():
  28.             self.waitEnd = threading.Event()
  29.             self.alive = True
  30.             self.thread_read = None
  31.             self.thread_read = threading.Thread(target=self.FirstReader)
  32.             self.thread_read.setDaemon(1)
  33.             self.thread_read.start()
  34.             return True
  35.         else:
  36.             return False

  37.     def SendDate(self,i_msg,send):
  38.         lmsg = ''
  39.         isOK = False
  40.         if isinstance(i_msg):
  41.             lmsg = i_msg.encode('gb18030')
  42.         else:
  43.             lmsg = i_msg
  44.         try:
  45.             # 发送数据到相应的处理组件
  46.             self.l_serial.write(send)
  47.         except Exception as ex:
  48.             pass;
  49.         return isOK

  50.     def FirstReader(self):
  51.         while self.alive:
  52.             time.sleep(0.1)

  53.             data = ''
  54.             data = data.encode('utf-8')

  55.             n = self.l_serial.inWaiting()
  56.             if n:
  57.                  data = data + self.l_serial.read(n)
  58.                  print('get data from serial port:', data)
  59.                  print(type(data))

  60.             n = self.l_serial.inWaiting()
  61.             if len(data)>0 and n==0:
  62.                 try:
  63.                     temp = data.decode('gb18030')
  64.                     print(type(temp))
  65.                     print(temp)
  66.                     car,temp = str(temp).split("\n",1)
  67.                     print(car,temp)

  68.                     string = str(temp).strip().split(":")[1]
  69.                     str_ID,str_data = str(string).split("*",1)

  70.                     print(str_ID)
  71.                     print(str_data)
  72.                     print(type(str_ID),type(str_data))

  73.                     if str_data[-1]== '*':
  74.                         break
  75.                     else:
  76.                         print(str_data[-1])
  77.                         print('str_data[-1]!=*')
  78.                 except:
  79.                     print("读卡错误,请重试!\n")

  80.         self.ID = str_ID
  81.         self.data = str_data[0:-1]
  82.         self.waitEnd.set()
  83.         self.alive = False

  84.     def stop(self):
  85.         self.alive = False
  86.         self.thread_read.join()
  87.         if self.l_serial.isOpen():
  88.             self.l_serial.close()
  89. #调用串口,测试串口
  90. def main():
  91.     rt = ComThread()
  92.     rt.sendport = '**1*80*'
  93.     try:
  94.         if  rt.start():
  95.             print(rt.l_serial.name)
  96.             rt.waiting()
  97.             print("The data is:%s,The Id is:%s"%(rt.data,rt.ID))
  98.             rt.stop()
  99.         else:
  100.             pass
  101.     except Exception as se:
  102.         print(str(se))

  103.     if rt.alive:
  104.         rt.stop()

  105.     print('')
  106.     print ('End OK .')
  107.     temp_ID=rt.ID
  108.     temp_data=rt.data
  109.     del rt
  110.     return temp_ID,temp_data


  111. if __name__ == '__main__':

  112.     #设置一个主函数,用来运行窗口,便于若其他地方下需要调用串口是可以直接调用main函数
  113.     ID,data = main()

  114.     print("******")
  115.     print(ID,data)


 楼主| gaoyang9992006 发表于 2019-1-28 14:10 | 显示全部楼层
966275c4e9cd96d581.png
根据提示的指令,直接升级就行了。非常的方便,这也是命令行的操作爽的一个点。。
hotpower 发表于 2019-4-5 08:32 | 显示全部楼层
菜农即日起做Python菜鸟,第一个关注的就是py串口。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:如果你觉得我的分享或者答复还可以,请给我点赞,谢谢。

2052

主题

16400

帖子

222

粉丝
快速回复 在线客服 返回列表 返回顶部