使用Python,PyQt,PyQwt和PySerial的“實時”數據監視器


  PyQt是Qt的python版本,繼承了Qt強大的圖形編程能力和python的容易上手特點,使我們開發GUI應用更加的便捷,加上python可以導入各種強大的模塊庫,可以說用python+N多模塊庫,我們便可以開發出許多有趣實用的應用。今天我們就來說一說PyQt、PyQwt以及Pyserial組成的“實時”數據采集器。我們使用pip來安裝python的第三方模塊,關於pip和python的安裝可以參考[1][2]。在命令行分別輸入:pip install pyserial、pip install pyqt4、pip install pyqwt

  如果提示有庫安裝不了,可以試一試從Unofficial Windows Binaries for Python Extension Packages下載whl格式的安裝文件到指定目錄,例如存放在D:\mtpt_dir\PyQt4-4.11.4-cp36-cp36m-win_amd64.whl,然后在cmd窗口中切換到該目錄下:cd /D d:\mtpt_dir[回車],輸入pip install PyQt4-4.11.4-cp36-cp36m-win_amd64.whl[回車]進行安裝。這里需要注意的是cp36對應python版本3.6,amd64對應64位計算機,用戶需要根據實際計算機安裝的python版本及計算機位數選擇對應的版本進行安裝。


         [以下譯改自https://eli.thegreenplace.net/2009/08/07/a-live-data-monitor-with-python-pyqt-and-pyserial]

  PySerial使Python成為與計算機進行串行通信的好工具,因為它可以輕松地與其他強大的Python庫結合,以創建全面的應用程序。在我創建的實例中,我使用PyQt以及其輔助繪圖工具庫PyQwt創建漂亮的“動態”繪圖應用程序,結合PySerial進行串口通信。這是一個演示:

  下載plotting_data_monitor [3]- 它是一個用Python編寫的小型演示應用程序,需要在您的計算機上安裝以下模塊:

    • PyQt 
    • PyQwt
    • PySerial

  它有什么作用?好吧,它基本上展示了如何以簡單的方式將Python的所有這些能力組合成單個應用程序。您可以選擇串行端口,然后運行監視器(全部通過菜單方式)。如果另一個程序正在向指定的端口發送數據,您將看到“實時更新”圖:

  如果沒有發送數據到您計算機的串口工具,不用擔心。如果您已經安裝Virtual Serial Port Driver或類似的虛擬端口仿真器,配置它將兩個串口端口連接在一起。

  然后,運行sender_sim.py,它是一個非常簡單的數據發送腳本(它提供的數據是一個愉快的偽隨機正弦曲線)。如果您的端口號不同,您可能需要更改硬編碼的端口名稱。

  當這個發送者和監視器都在同一台機器上運行時,您將可以看到現場繪圖。請注意,我從PyQwt添加了幾個額外的功能:

    • 一個顯示平均溫度的“熱”條
    • 一個旋鈕可以設置監視器更新屏幕的頻率

  這些小部件和其他幾個小部件使PyQwt成為一個很好的庫,用於在Python中模擬Labview類型的“lab control”應用程序。我極其推薦它。

它是如何工作的

  監視器是一個玩具演示,但它是基於我用於實際應用程序的幾個強大的工具。例如,串行通信本身在單獨的線程(在com_monitor模塊中)執行。該線程在循環中阻塞串行端口上的讀取,並通過queue將數據傳送到GUI (連同每個收到的數據塊的精確時間戳)。這是一個強大而安全的實現,可用於多種基於GUI的監控應用程序。

  在監視器運行時,運行周期性定時器(QTimer)來更新GUI本身。定時器事件處理程序檢查新數據是否已從監視器到達並相應地更新顯示窗口小部件。

  其余代碼是您PyQt慣常做法 - 創建菜單,狀態欄,GUI小部件,將所有內容妥善地放置並連接事件。

  我希望人們會發現這段代碼很有用。如果您無法運行或了解其運作方式,請告訴我們。我建議使用最新的Python 3.6版本[3]的所有必需的模塊。我只在Windows上檢查,但沒有任何理由不運行在其他操作系統上。


參考及注釋

[1].使用pyaes測試AES-ECB 加密解密示例

[2].Windows下面安裝Python和pip終極教程

[3].作者使用的python2.x編寫,我簡單修改了一下以便在python3.x下運行,需要參考原版代碼的參考原鏈接。plotting_data_monitor工程目錄如下圖所示,運行紅框1,表示圖形應用界面,運行紅框2表示向指定串口發送模擬數據以顯示在圖形應用界面上。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM