泡泡 4 سال پیش
والد
کامیت
20026fe24c
2فایلهای تغییر یافته به همراه137 افزوده شده و 0 حذف شده
  1. 1 0
      PN532data.py
  2. 136 0
      serialutil.py

+ 1 - 0
PN532data.py

@@ -120,6 +120,7 @@ def readdata(ser, k, list):
 def reader():
 
     ser = openSer()
+    print(ser.port)
     while 1 > 0:
        print("读取10个字节")
        print(ser.read(100))

+ 136 - 0
serialutil.py

@@ -0,0 +1,136 @@
+#coding=gb18030
+
+import threading
+import time
+import serial
+
+class ComThread:
+    def __init__(self, Port='COM4'):
+        self.l_serial = None
+        self.alive = False
+        self.waitEnd = None
+        self.port = Port
+        self.ID = None
+        self.data = None
+
+    def waiting(self):
+        if not self.waitEnd is None:
+            self.waitEnd.wait()
+
+    def SetStopEvent(self):
+        if not self.waitEnd is None:
+            self.waitEnd.set()
+        self.alive = False
+        self.stop()
+
+    def start(self):
+        self.l_serial = serial.Serial()
+        self.l_serial.port = self.port
+        self.l_serial.baudrate = 115200
+        self.l_serial.timeout = 2
+        self.l_serial.open()
+        if self.l_serial.isOpen():
+            self.waitEnd = threading.Event()
+            self.alive = True
+            self.thread_read = None
+            self.thread_read = threading.Thread(target=self.FirstReader)
+            self.thread_read.setDaemon(1)
+            self.thread_read.start()
+            return True
+        else:
+            return False
+
+    def SendDate(self,i_msg,send):
+        lmsg = ''
+        isOK = False
+        if isinstance(i_msg):
+            lmsg = i_msg.encode('gb18030')
+        else:
+            lmsg = i_msg
+        try:
+            # 发送数据到相应的处理组件
+            self.l_serial.write(send)
+        except Exception as ex:
+            pass;
+        return isOK
+
+    def FirstReader(self):
+        while self.alive:
+            time.sleep(0.1)
+
+            data = ''
+            data = data.encode('utf-8')
+
+            n = self.l_serial.inWaiting()
+            if n:
+                 data = data + self.l_serial.read(n)
+                 print('get data from serial port:', data)
+                 print(type(data))
+
+            n = self.l_serial.inWaiting()
+            if len(data)>0 and n==0:
+                try:
+                    temp = data.decode('gb18030')
+                    print(type(temp))
+                    print(temp)
+                    car,temp = str(temp).split("\n",1)
+                    print(car,temp)
+
+                    string = str(temp).strip().split(":")[1]
+                    str_ID,str_data = str(string).split("*",1)
+
+                    print(str_ID)
+                    print(str_data)
+                    print(type(str_ID),type(str_data))
+
+                    if str_data[-1]== '*':
+                        break
+                    else:
+                        print(str_data[-1])
+                        print('str_data[-1]!=*')
+                except:
+                    print("读卡错误,请重试!\n")
+
+        self.ID = str_ID
+        self.data = str_data[0:-1]
+        self.waitEnd.set()
+        self.alive = False
+
+    def stop(self):
+        self.alive = False
+        self.thread_read.join()
+        if self.l_serial.isOpen():
+            self.l_serial.close()
+#调用串口,测试串口
+def main():
+    rt = ComThread()
+    rt.sendport = '**1*80*'
+    try:
+        if  rt.start():
+            print(rt.l_serial.name)
+            rt.waiting()
+            print("The data is:%s,The Id is:%s"%(rt.data,rt.ID))
+            rt.stop()
+        else:
+            pass
+    except Exception as se:
+        print(str(se))
+
+    if rt.alive:
+        rt.stop()
+
+    print('')
+    print ('End OK .')
+    temp_ID=rt.ID
+    temp_data=rt.data
+    del rt
+    return temp_ID,temp_data
+
+
+if __name__ == '__main__':
+
+    #设置一个主函数,用来运行窗口,便于若其他地方下需要调用串口是可以直接调用main函数
+    ID,data = main()
+
+    print("******")
+    print(ID,data)