文章首發於浩瀚先森博客
1. 獲取串口號
在Linux系統中一切皆為文件,所以串口端口號也不例外,都是以設備文件的形式出現。也就是說我們可以用訪問文本文件的命令來訪問它們。
a. 一般串口都是以/dev/ttyS#的格式顯示,所以第一個連接的串口就是/dev/ttyS0,第二個連接的串口就是/dev/ttyS1…以此類推。
b. USB轉串口適配,沒有額外驅動,它們會顯示為/dev/ttyUSB#,如/dev/ttyUSB0
2. 配置串口屬性
我們可以使用stty命令來更改配置串口屬性(詳情查看”man sty”),比如我們設置串口/dev/ttyS0波特率為57600和odd parity,命令如下
stty -F /dev/ttyS0 57600 parodd
3. 串口數據讀寫操作
使用echo向串口發送數據,如
echo "command" > /dev/ttyUSB0
可以使用cat來讀取串口中的數據,如
cat /dev/ttyUSB0
讀取數據並保存到txt文本文件中,如
cat /dev/ttyUSB0 > file.txt
4. 解析數據
說到解析數據,我們可以使用一個強大的文本分析工具awk,相對於grep的查找,sed的編輯,awk在其對數據分析並生成報告時,顯得尤為強大。簡單來說awk就是把文件逐行的讀入,以空格為默認分隔符將每行切片,切開的部分再進行各種分析處理。
awk有3個不同版本: awk、nawk和gawk,未作特別說明,一般指gawk,gawk 是 AWK 的 GNU 版本。
詳細說明請參考http://www.gnu.org/software/gawk/manual/gawk.pdf
下面使用gawk舉個栗子,在終端以H:M:S格式輸出當前時間和來自串口的每一行前3個字符,命令如下:
cat /dev/ttyUSB0 | gawk ’{print strftime("%T"), substr($1 ,1,3)}’
5. 后台運行
可以講串口數據讀寫操作設置為后台進行,通過一個簡單命令或者shell 腳本就可以實現。命令可以用nohup。即使關閉終端或者注銷賬戶,進程還是在進行着,比如
nohup cat /dev/ttyS0 | gawk ’{substr($1 ,1,3)}’ > result.txt
使用下面命令可以刪除進程,但是會刪除所有的cat進程。
killall cat
我們可以用“ps ax”來查看當前運行的進程,選擇你要刪除的,記下PID,刪除即可,如下
kill -9 PID
6. 繪制數據
如果你希望繪制實時獲取到的數據,我這里推薦一個軟件叫做KST(http://kst.kde.org/),它能夠實時的獲取text文件數據並繪制出來,可以瀏覽官網查看詳細說明。