基于python編寫一個串口數(shù)據(jù)輸出程序
前言
開發(fā)起因
串口調(diào)試工具,在串口斷開后需要重新選擇進行連接,這個過程會耗費一定的時間,而我們的模塊上電就開始打印各種日志,導(dǎo)致部分日志丟失。所以就有了這個程序
功能介紹
基于python3實現(xiàn)監(jiān)聽指定端口,獲取串口打印數(shù)據(jù)存入log.txt文件,并自動重連。
開發(fā)環(huán)境
- 操作系統(tǒng):win10
- 語言:python3.8.15
- 編輯器:VS Code
- 依賴庫:pyserial (pip install pyserial)
項目地址
目錄結(jié)構(gòu)
- config.json (配置文件)
- log.txt (日志文件)
- main.exe (編譯打包好的程序)
- main.py (程序源碼)
- package.json (程序打包的相關(guān)配置 auto-py-to-exe)
使用
1.配置
自行修改為合適的配置即可。
{
// 連接的串口名
"serial_port": "COM17",
// 波特率
"serial_baudrate": 115200,
// 斷開連接后的重連間隔(s),太短電腦可能會藍屏,注意!
"interval_time": 1
}
2.運行
雙擊main.exe即可。或搭建環(huán)境,運行 python main.py。
源碼
config.json
{
"serial_port": "COM17",
"serial_baudrate": 115200,
"interval_time": 1
}
main.py (外置配置版)
# 開發(fā)起因:串口調(diào)試工具,在串口斷開后需要重新選擇進行連接,這個過程會耗費一定的時間,而我們的模塊上電就開始打印各種日志,導(dǎo)致部分日志丟失。所以就有了這個程序
# 開發(fā)環(huán)境 py3.8
# 依賴庫 pyserial
import serial as pyserial
import time
from datetime import datetime
import sys
import json
# 連接的串口名
serial_port = 'COM17'
# 波特率
serial_baudrate = 115200
# 斷開連接后的重連間隔(s),太短電腦可能會藍屏,注意!
interval_time = 1
# 打開本地文件
with open('config.json', 'r', encoding='utf-8') as f:
# 通過load方法將文件內(nèi)容讀入到字典中
data = json.load(f)
try:
serial_port = data['serial_port']
serial_baudrate = data['serial_baudrate']
interval_time = data['interval_time']
print("[當(dāng)前配置]\n串口名:{}\n波特率:{}\n重連間隔(s):{}".format(serial_port, serial_baudrate, interval_time))
f.close()
except Exception as e:
print(e)
print("解析config.json出錯,請檢查配置是否正確")
sys.exit()
def get_current_date_string(format="%Y-%m-%d"):
"""返回當(dāng)前日期的字符串表示形式,格式為 YYYY-MM-DD"""
return datetime.today().strftime(format)
while True:
try:
ser = pyserial.Serial(serial_port, serial_baudrate)
if ser.isOpen():
print("串口已連接")
break
except pyserial.SerialException:
print("串口連接失敗,請檢查串口是否正確連接")
time.sleep(interval_time)
while True:
try:
# 忽略無法解碼的字節(jié)
data = ser.readline().decode('utf-8', 'ignore')
print(data)
file_path = "log-" + get_current_date_string() + ".txt"
# 日志寫入本地
with open(file_path, 'a') as f:
f.write(data)
f.close()
except pyserial.SerialException:
print("串口斷開,正在嘗試重新連接", end="")
while True:
try:
ser = pyserial.Serial(SERIAL_PORT, SERIAL_BAUDRATE)
if ser.isOpen():
print("\n串口已重新連接")
break
except pyserial.SerialException:
print(".", end="", flush=True)
time.sleep(interval_time)
com_loop_link.py (寫死版)
# 開發(fā)起因:串口調(diào)試工具,在串口斷開后需要重新選擇進行連接,這個過程會耗費一定的時間,而我們的模塊上電就開始打印各種日志,導(dǎo)致部分日志丟失。所以就有了這個程序
# 開發(fā)環(huán)境 py3.8
# 依賴庫 pyserial
import serial as pyserial
import time
# 連接的串口名
SERIAL_PORT = 'COM17'
# 波特率
SERIAL_BAUDRATE = 115200
# 斷開連接后的重連間隔,太短電腦可能會藍屏,注意!
sleep_time = 1
while True:
try:
ser = pyserial.Serial(SERIAL_PORT, SERIAL_BAUDRATE)
if ser.isOpen():
print("串口已連接")
break
except pyserial.SerialException:
print("串口連接失敗,請檢查串口是否正確連接")
time.sleep(sleep_time)
while True:
try:
# 忽略無法解碼的字節(jié)
data = ser.readline().decode('utf-8', 'ignore')
print(data)
# 日志寫入本地
with open('log.txt', 'a') as f:
f.write(data)
except pyserial.SerialException:
print("串口斷開,正在嘗試重新連接", end="")
while True:
try:
ser = pyserial.Serial(SERIAL_PORT, SERIAL_BAUDRATE)
if ser.isOpen():
print("\n串口已重新連接")
break
except pyserial.SerialException:
print(".", end="", flush=True)
time.sleep(sleep_time)
到此這篇關(guān)于基于python編寫一個串口數(shù)據(jù)輸出程序的文章就介紹到這了,更多相關(guān)python串口數(shù)據(jù)輸出程序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python 中開發(fā)pattern的string模板(template) 實例詳解
這篇文章主要介紹了Python 中開發(fā)pattern的string模板(template) 實例詳解的相關(guān)資料,需要的朋友可以參考下2017-04-04
Python利用多線程優(yōu)化for循環(huán)的技巧分享
多線程可以讓程序同時執(zhí)行多個任務(wù),從而提高整體運行效率,這篇文章將詳細(xì)介紹如何在Python中使用多線程來優(yōu)化for循環(huán),感興趣的可以了解下2025-02-02
Python實現(xiàn)調(diào)用jar或執(zhí)行java代碼的方法詳解
這篇文章主要介紹了Python實現(xiàn)調(diào)用jar或執(zhí)行java代碼的方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12
python pymysql peewee關(guān)于時區(qū)問題分析
這篇文章主要為大家介紹了python pymysql peewee關(guān)于時區(qū)問題分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-06-06
Python判斷遠(yuǎn)程服務(wù)器上Excel文件是否被人打開的方法
這篇文章主要介紹了Python如何判斷遠(yuǎn)程服務(wù)器上Excel文件是否被人打開,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07
Python使用lxml庫實現(xiàn)高效處理XML和HTML
lxml?是一個功能強大且高效的庫,它基于?libxml2?和?libxslt?庫,提供了簡潔易用的?API?來處理?XML?和?HTML?文檔,下面小編就來和大家詳細(xì)講講它的具體使用吧2025-02-02
python 從csv讀數(shù)據(jù)到mysql的實例
今天小編就為大家分享一篇python 從csv讀數(shù)據(jù)到mysql的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-06
conda配置python虛擬環(huán)境的實現(xiàn)步驟
本文主要介紹了conda配置python虛擬環(huán)境的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03

