import serial導入模塊 然后就可以用了 ser = serial.Serial(0) 是打開第一個串口 print ser.portstr 能看到第一個串口的標識,windows下是COM1 ser.write(“hello") 就是往串口里面寫數據 ser.close() 就是關閉ser表示的串口 ser.open() 會打開這個串口 ser = serial.Serial('COM1', 115200) 來設置波特率,當然還有專門的函數 data = ser.read()可以讀一個字符 data = ser.read(20) 是讀20個字符 data = ser.readline() 是讀一行,以/n結束,要是沒有/n就一直讀,阻塞。 data = ser.readlines()和ser.xreadlines()都需要設置超時時間 ser.baudrate = 9600 設置波特率 ser 來查看當前串口的狀態 ser.isOpen() 看看這個串口是否已經被打開 import serial ser = serial.Serial('COM3') ser.setBaudrate(9600) ser.setByteSize(8) ser.setStopbits(1) print ser.portstr data = ser.readline(0,'\r\n') data = ser.read(20) print data
我的串口操作:
# coding=utf-8
import serial
import pymysql
import threading
import time
x=serial.Serial('COM3',9600)#這是我的串口,測試連接成功,沒毛病
# i=0
def fasong():#發送函數
while True:
time.sleep(3)
myinput= bytes([0X01,0X03,0X00,0X00,0X00,0X01,0X84,0X0A])
#這是我要發送的命令,原本命令是:01 03 00 00 00 01 84 0A
x.write(myinput)
def jieshou():#接收函數
while True:
while x.inWaiting()>0:
myout=x.read(7)#讀取串口傳過來的字節流,這里我根據文檔只接收7個字節的數據
datas =''.join(map(lambda x:('/x' if len(hex(x))>=4 else '/x0')+hex(x)[2:],myout))#將數據轉成十六進制的形式
new_datas = datas.split("/x")#將字符串分割,拼接下標4和5部分的數據
need = new_datas[4]+new_datas[5];#need是拼接出來的數據,比如:001a
my_need = int(hex(int(need,16)),16)#將十六進制轉化為十進制
sql = "INSERT INTO VOC_DATA(value,create_time)VALUES('"+str(my_need)+"',"+str(int(time.time()))+")"
# 使用 execute() 方法執行 SQL 查詢
# 執行sql語句
cursor.execute(sql)
# 提交到數據庫執行
db.commit()
if __name__== '__main__':
# 打開數據庫連接
db = pymysql.connect("localhost","root","123456789","voc" )
# 使用 cursor() 方法創建一個游標對象 cursor
cursor = db.cursor()
t1 = threading.Thread(target=jieshou,name="jieshou")#線程1:不斷的去請求數據
t2= threading.Thread(target=fasong, name="fasong")#線程2:不斷地去接收數據
t2.start()#開啟線程1
t1.start()#開啟線程2