PyCharm使用技巧:Raspberry Pi的遠端開發
Raspberry Pi的遠端開發
介紹
網際網路連線的關鍵指標之一是它對網際網路上其他主機的ping時間。因此,編寫一個程式,定期ping其他主機並記錄結果。對於那些想要在其他遠端計算機上遠端執行程式碼的人,例如AWS例項或DigitalOcean Droplet,過程完全相同。
本教程是在Windows上建立的,程式碼是在RPi上執行的,RPi是一臺Linux計算機。在其他受支援的作業系統上,某些路徑和工作流程可能略有不同。
先決條件
確保滿足以下先決條件:
- 你有專業版的PyCharm。
- 程式碼將在任何Linux機器上執行。您也可以使用本地VM。
您還需要一些額外的軟體:
- PostgreSQL,因為它將用於建立資料庫。
- Libpq-dev,Psycopg2需要。
- Python-dev,需要編譯Psycopg2。
要一次安裝所有這些,請執行以下命令:
sudo apt-get update && sudo apt-get install -y postgresql libpq-dev python-dev
Raspberry Ping
構建的應用程式包含兩部分:
- 首先,實際進行測量。為了測量結果,可以呼叫每個Linux機器(包括Raspberry Pi)附帶的ping命令列工具。然後,將結果儲存在PostgreSQL資料庫中。
- 其次,使用Flask應用程式對結果進行視覺化,該應用程式使用Matplotlib繪製最近結果的圖表。
準備你的Raspberry Pi
由於希望以後能夠檢視帶有結果的網頁,因此在網路中為Pi提供固定IP非常重要。 為此,請編輯/ etc / network / interfaces。
將Pi設定為使用靜態IP後,請raspi-config在命令列中使用。轉到“ 高階選項”,選擇“ SSH”,然後選擇“ 是”。當你完成這項工作後,你就可以開始使用PyCharm了。
建立一個專案
建立一個純Python專案:選擇File | New Project。將專案命名為“raspberry.pi”。
然後按照 Configuring Remote Interpreters via SSH中所述新增SSH遠端直譯器。配置SSH伺服器時,請指定Pi(主機)的IP地址,例如172.27.120.177。另外,指定登入到裝置的憑據。
接下來,在PyCharm中,按Ctrl+Shift+A,開始輸入“啟動SSH會話”:
然後從主機列表中選擇您的Raspberry Pi,您應該連線。
接下來,安裝其他軟體。
在PostgreSQL中設定許可權和建立資料庫
現在需要在PostgreSQL中設定許可權。最簡單的方法是返回SSH終端,並執行以下命令以獲得Postgres使用者的SQL提示:
sudo -u postgres psql
現在建立一個使用者(Postgres術語中的 ‘role’),其名稱與執行該過程的使用者的名稱相同:
CREATE ROLE pi WITH LOGIN PASSWORD ‘hunter2’;
重要注意事項!請確保PostgreSQL中的角色與Linux使用者名稱具有相同的名稱。您可能還需要替換更好的密碼。在PSQL中用分號(;)來結束SQL語句是很重要的,因為它會假定您正在編寫多行語句,直到用分號終止。授予PI使用者登入許可權,這意味著使用者可以登入。沒有登入許可權的角色用於建立組。
接下來,建立一個資料庫:
CREATE DATABASE pi WITH OWNER pi;
其次,出口psql用\q。
捕獲pings
要獲取有關Internet連線質量的資訊,請使用系統的ping實用程式ping伺服器 ,然後使用正規表示式讀取結果。輸出 ping:
所有具有單獨往返時間的行都以64位元組開頭。 所以讓我們建立一個檔案ping.pyFile | New - Python File),然後開始編碼。
這裡可以先獲取ping的輸出,然後遍歷這些行,選擇以數字開頭,後跟“bytes from”字樣的行:
此時,如果您執行程式碼(Ctrl+Shift+F10),您應該看到此程式碼在Raspberry Pi上遠端執行:
要檢查部署設定是否已正確設定,請指向主選單上的Tools | Deployment 。應檢查檢查命令“ Automatic Upload”。
儲存ping
如果要儲存ping PostgreSQL,為它們建立一個表。首先,需要建立一個PostgreSQL資料庫:
選擇PostgreSQL後,將開啟資料來源頁面:
在此頁面上,下載所需的驅動程式,輸入所需的憑據,然後單擊“Test Connection”按鈕以確保已連線。
由於我們的資料庫只暴露給localhost,所以需要使用SSH隧道:
在連線之後,通過執行setup_db.sql指令碼來建立表 。從GitHub複製貼上指令碼,連線後立即開啟SQL控制檯,然後使用綠色播放按鈕執行。
現在已經有了這個工作,然後擴充套件指令碼,將ping記錄到資料庫中。要從Python連線到資料庫,需要安裝psycopg2。為此,請指向 File | Settings(對於Windows和Linux)或PyCharm / Preferences (對於macOS使用者),然後單擊Project Interpreter頁面,然後使用"+"圖示來安裝包
Cron
實際上會定期記錄ping,需要安排執行此指令碼。為此,將使用cron。當對資料庫使用對等身份驗證時,需要確保指令碼以pi使用者身份執行。因此,開啟一個SSH會話(確保已登入 pi),然後執行crontab -e以編輯使用者crontab。然後在檔案的底部新增以下行:
*/5 * * * * /home/pi/raspberryping/ping.py jetbrains.com >> /var/log/raspberryping.log 2>&1
確保檔案末尾有換行符!
第一個*/5意味著指令碼將每5分鐘執行一次。如果您想要不同的頻率,您可以瞭解有關crontabs的更多資訊。現在還需要建立日誌檔案並確保指令碼可以寫入它:
sudo touch /var/log/raspberryping.log
sudo chown pi:pi /var/log/raspberryping.log
此時花點時間,當您稍後再回來時,應該記錄一些ping時間。讓檢視PyCharm的資料庫工具。開啟 Database tool window 在螢幕右側),然後雙擊該表。您應該看到它包含值:
建立Flask應用程式
如果看不到有關它們的統計資料,那麼記錄ping是沒有好處的。因此,編寫一個小型Flask應用程式(安裝Flask,pip install在終端中使用),並使用 matplotlib繪製最近ping時間的圖表。
在Flask應用程式中,將建立兩個路徑:
- On /,這裡將列出在過去一小時內使用基本統計資料確定的destinations(最後一小時的最小,平均,最長時間)。
- 在/ graphs / 上,我們將繪製過去3小時內ping的圖表。
該路線很簡單:只是執行一個查詢來獲取感興趣的資料,並傳遞給模板。為了確保一切正常,在呼叫時設定一個斷點 render_template:
然後啟動除錯會話(圖示動作startDebugger svg)並在瀏覽器中檢視結果。/ graphs / 路線要複雜得多。首先,必須在合理大小的垃圾箱中獲得過去三個小時的平均值(比方說,10分鐘)。其次,必須繪製圖形。
查詢資料
要尋找的資料是:
- 在過去3小時內每10分鐘一次
- 獲取指定目標的最小,平均和最長ping時間
第一部分使這個查詢相當複雜。即使PostgreSQL支援間隔,日期範圍以及生成一系列日期的方法,也無法生成一系列範圍。這個問題的一個解決方案是公用表表示式(CTE),這是一種執行子查詢的方法,您可以在以後將其稱為真實表。
要以10分鐘的間隔獲取過去三小時的一系列timestamps很簡單:
select begin_time from generate_series(now() - interval '3 hours', now(), interval '10 minutes') begin_time;
該generate_series函式有三個引數:begin,end和step。該功能適用於數字和timestamps,因此可以輕鬆實現。需要兩個timestamps之間的時間。可以使用另一個SQL magic: window functions,它允許在當前所在的行之前或之後處理行。所以新增 end_time到查詢中:
LEAD獲取結果中下一行的值,按照OVER子句中指定的方式排序 。您可以使用LAG以類似方式獲取上一行。所以現在可以用這個查詢包裝WITH intervals as ( … query goes here … )使它成為一個CTE。然後可以加入ping表並獲得正在尋找的結果:
接下來,執行此查詢。右鍵單擊 editor background,然後在context選單中選擇Execute:
(如果您沒有看到Execute,請選擇 Attach Console讓PyCharm知道您要執行查詢的資料庫)。
您可以使查詢工作速度提高30倍。要實現此顯著加速,請將此索引新增到查詢中:
CREATE INDEX pings_recorded_at ON pings(recorded_at);
繪製資料圖
獲取資料後,matplotlib用於生成一個折線圖,其中包含每個bin的最小,平均和最大ping時間。Matplotlib可以使用plot_date function輕鬆繪製基於時間的資料。
當繪圖準備好後,它將作為.png檔案“儲存” 到StringIO物件,然後用於建立HTTP響應。通過設定content_type標題image/png,一切都安排好了。
所以最終的結果是:
概要
- 建立了一個專案
- 在終端中,設定許可權並建立使用者。
- 建立了一個資料庫。
- 捕獲ping。
- 在特殊資料庫中儲存ping。
- 建立了Flask應用程式
- 查詢資料
- 繪製資料
更多資源請檢視【PyCharm入門視訊教程】
相關文章
- Raspberry pi 3b+ 安裝dotnet5 VSCode Remote-SSH 遠端開發VSCodeREM
- Raspberry Pi with Go langGo
- [Raspberry PI 4B]where to find Rev num of a Raspberry PI 4B
- raspberry pi bookworm setting static ipWorm
- 張高興的 Raspberry Pi AI 開發指南:(一)Hailo-8 配置AI
- FreeBSD on Raspberry PI root, freebsd account password
- install java javac on kali linux, raspberry piJavaLinux
- Raspberry Pi 400上安裝vscodeVSCode
- Raspberry Pi 3簡明配置教程
- Pycharm遠端除錯PyCharm除錯
- PyCharm使用技巧:通過DockerCompose配置遠端直譯器PyCharmDocker
- PyCharm使用技巧:PyCharm重構PyCharm
- VS Code / Pycharm配置SSH遠端開發(免密登入)PyCharm
- 張高興的 Raspberry Pi AI 開發指南:(二)使用 Python 和 HailoRT 進行實時目標檢測AIPython
- crontab on raspberry pi, full path, not relative path, is needed.
- Raspberry Pi 4B 安裝 CentOS 8CentOS
- PyCharm使用技巧(六):Regullar Expressions的使用PyCharmExpress
- Raspberry遠端控制 —— 私網地址NAT到公網
- 人工智慧入門與實戰 使用Raspberry Pi和Python演練人工智慧Python
- pycharm使用的一些技巧PyCharm
- pycharm 遠端除錯之二PyCharm除錯
- 利用Raspberry Pi搭建一個基於OpenMediaVault系統的NAS
- PyCharm使用技巧(五):在PyCharm中使用IPython / Jupyter NotebookPyCharmPython
- VSCode 遠端開發外掛快速使用VSCode
- 張高興的 Raspberry Pi AI 開發指南:(三)將自定義模型編譯為 Hailo NPU 的 .hef 模型AI模型編譯
- pycharm連線遠端伺服器PyCharm伺服器
- 遠端Spark+Python+Pycharm操作指南SparkPythonPyCharm
- PyCharm使用技巧(四):Scientific模式PyCharm模式
- 在Pycharm上使用遠端伺服器進行除錯PyCharm伺服器除錯
- FreeBSD on Raspberry PI,首次執行pkg update出現bootstrap errorbootError
- Linux遠端開發Linux
- Git使用小技巧之多個遠端倉庫Git
- Pycharm連線遠端伺服器並實現遠端除錯PyCharm伺服器除錯
- 在樹莓派上開發SpringBoot 之使用VSCode遠端開發樹莓派Spring BootVSCode
- Pycharm同步遠端伺服器除錯PyCharm伺服器除錯
- iOS 元件化開發(一):遠端私有庫的基本使用iOS元件化
- Raspberry PI:Shadowsocks+Polipo實現全域性科學上網
- 使用vs2019進行Linux遠端開發Linux