搭建 LEGO EV3 的 PyCharm Python 開發環境
本文件展示瞭如何建立一個使用 PyCharm IDE 為 ev3dev 開發 Python 程式的良好的工作環境。
在這份文件中,我們假設你已經刷寫了一張 SD 卡,用它啟動裝置,並且已經 ofollow,noindex">在裝置上配置了網路 。這些步驟在 入門指南 中說明。
登入 ev3dev
在這份文件中,我們需要能夠在 EV3 上執行終端命令。要完成這一設定,請移步我們的 SSH 教程 。
配置程式碼同步
注意:本教程的前半部分假設你使用免費的 “社群” 版 PyCharm。然而,如果你有權使用對於學生和其它一些 特殊情況 是免費的 “標準” 版的 PyCharm,我們建議你閱讀在後面說明的 PyCharm Professional 的部分。
目的是能夠只需點選幾下,就能在你將程式碼寫入 EV3 或其他 ev3dev 裝置時傳輸程式碼。為了實現這一點,我們打算使用一個稱為 git 的程式。Git 是一個 “版本控制” 系統,它通常用於儲存原始碼。然而,對於我們來說,它作為一種用 PyCharm 內建的工具把程式碼傳送到遠端機器上的簡單方式非常有效。
在 ev3dev 裝置上配置主 repo
首先,開啟你之前建立的 SSH 終端,然後執行如下的命令(確保把 name/email 替換為你自己的):
sudo apt-get update sudo apt-get install git git config --global user.email "[email protected]" git config --global user.name "Your Name"
現在讓我們使用我們的版本系統建立一個新的工程。鍵入:
mkdir myproject.git git init --bare myproject.git mkdir myproject
注意:如果你想為你的工程起一個不同的名字,你可以把上面的 myproject
替換為你自己的名稱。確保它不包含空格或其它特殊字元。
好極了!這樣就在我們新建立的目錄下初始化了 Git。我們有了一個新的工程倉庫。現在我們可以在我們的開發機器上 clone 這個倉庫了,但首先我們需要做一點額外的配置,以在我們把程式碼 push 回 ev3dev brick 時自動地部署我們的程式碼:
nano myproject.git/hooks/post-receive
把下面的內容新增到你剛剛開啟的檔案。如果你需要一些關於 nano 的提示,請參考 nano cheat sheet 。
#!/bin/sh git --work-tree=/home/robot/myproject --git-dir=/home/robot/myproject.git checkout -f
最後,執行:
chmod +x myproject.git/hooks/post-receive
在 PyCharm 中配置同步
這份教程專注於 PyCharm Community Edition(儘管這些說明也適用於更多 軟體的高階版本)。如果你還沒有安裝,請安裝 PyCharm 。
現在我們要做的是建立一份我們在 ev3dev 機器上建立的工程的 clone,以便我們可以在開發 PC 機上工作。在 PyCharm 的 Welcome 對話方塊中,選擇: Checkout from version control > Git 。現在輸入 ev3dev 主機的主機名(主機名通常是 ev3dev
或 ev3dev.local
),後面跟冒號,然後是工程名。在其它選項中選擇一個適當的 parent 和工程目錄。
如果一切正常,你應該已經在一個新的 PyCharm 視窗中打開了你的空工程。如果 ‘testing’ 對話方塊在螢幕上保持了很長時間,那可能是因為你的 PyCharm 密碼儲存需要你的 PyCharm master 密碼。取消 checkout,鍵入 master 密碼,並再次嘗試。
新增一些程式碼
讓我們給工程新增一些程式碼。在左邊的 ‘myproject’ 目錄上點選右鍵,並選擇 new > python file 。把它命名為 run_motor
。PyCharm 將詢問你是否想把它新增進 git;我們正在使用 git 來把程式碼同步到 brick,因此我們想要使用它。選擇 Yes 。
現在新增如下的測試程式碼:
from ev3dev.auto import * import time m = Motor(OUTPUT_A) m.run_timed(time_sp=3000, speed_sp=500)
一旦你輸入了那些程式碼,選擇 VCS > Commit Changes… 或按下 Ctrl
+ K
(在
Mac 上是 Cmd
+ K
)。
commit message 專門用於描述你對程式碼做的修改。它在後面你開始對程式碼做大量修改時很方便,但現在我們只輸入 first commit
。現在我們把滑鼠移到 commit
按鈕並在下拉選項中選擇 “commit and push”。在下一個對話方塊確保選擇 “alternative branch” 複選框並點選 “Push”。瞧!我們的程式碼已經被髮送到了 ev3dev brick。讓我們看一下。
執行程式碼
是時候執行我們之前寫的程式碼了。它試著執行一個馬達,因此在你的 brick 的 埠 A 上插上一個。現在你將需要從你之前的那個開啟 SSH 會話(或一個新的),並執行如下的命令:
cd myproject python3 run_motor.py
觀察你連線的馬達。如果你的程式碼執行正常,你應該看到馬達旋轉了三秒。
啟用自動補全和錯誤檢查
我們之前儲存程式碼的時候,你可能已經注意到了一個問題:PyCharm 在 ev3dev 庫的 import 行下面放置了紅色波浪線。
這是由於在開發機上缺失了 ev3dev 庫,因此 PyCharm 認為你的程式碼引用了不存在的類。我們可以通過在開發機上安裝 ev3dev 庫來解決這個問題:我們當然無法在桌面電腦上執行馬達,但庫中的文件和自動補全將被探測到,以便 PyCharm 可以幫助您。
使用 Python 內建的包管理器 pip ) 在你的計算機上安裝 ev3dev-python 庫。
pip3 install python-ev3dev
安裝了庫之後,紅色的波浪線將消失,並且 ev3dev-python 命令的自動補全將會工作(非常方便)。
使用IDE的強大功能
IDE (PyCharm) 設定完成並且庫安裝好之後,你可以寫程式碼寫得更快。PyCharm 將高亮顯示大多數編碼錯誤和拼寫錯誤。它也會提示和自動補全你的程式碼並顯示文件。你可以鍵入 m.
然後 PyCharm 將提示所有可能的方法和屬性。選擇一個。現在你可以把游標放在屬性中並按下 F1 來檢視文件。我們按下 cmd/control-down 箭頭來深入檢視庫中這個屬性的定義。整潔,對吧? 快樂編碼。
PyCharm 專業版的額外功能
PyCharm 專業版(對於教育的場景或開源專案的頂級貢獻者可以免費獲得)有更多功能使你的開發體驗更劉暢。如果你是一個學生或老師,請在 JetBrains 學生申請頁面上註冊您的有效機構電子郵件地址,以申請免費版本的 PyCharm 專業版。如果你是一個開源開發者,並且為現有的專案貢獻了大量程式碼,你可以訪問 JetBrains Open Source 許可證頁 來檢視你是否有資格申請一個 PyCharm 專業版的免費版。
這裡是一個你可以在 PyCharm 專業版中使用的能使你的 Python 開發更簡單地工具的清單。
工具 | 用途 |
---|---|
SFTP 遠端伺服器 | 上面所用方法的一個替代方法,可以在你的計算機上的檔案儲存時把你的計算機上的程式碼更快地傳輸到 EV3。 |
SSH 終端 | 讓你直接通過 PyCharm 建立 SSH 連線,而不是用另外一個工具(比如 PuTTY)。 |
遠端直譯器 | 讓你無需 SSH 終端,直接點選 PyCharm 中的執行來執行程式。允許除錯,日誌,等等所有你的主機上的 PyCharm IDE 內有的東西(但是它 很慢 !) |
通過這些工具並在你的電腦上安裝 ev3dev-lang-python,你可以真正地使 Python 開發流程相當友好。
設定 SFTP 遠端伺服器
這是本教程前面展示的 git post-receive hook 方案的一個替代方法。如果你有權使用 PyCharm 專業版,則這個方案是一個比前面的那個更優雅的方案。在即時地傳輸程式碼上它的工作幾乎是一樣的,但它也允許你有一些其它的 git remote(比如 GitHub)而不是使用 EV3 作為你的 git remote。這是使用 PyCharm 遠端伺服器建立你的檔案傳輸機制必須的步驟。
- 在 PyCharm 中選擇 File > Settings (Windows 和 Linux 上) (或在 macOS 上 PyCharm > Preferences )
- 展開
Build, Execution, Deployment
- 點選
Deployment
- 點選
+
圖示,並新增一個新的遠端伺服器,隨意命名為你喜歡的名字(比如EV3
)
- 選擇 SFTP,然後設定如下的引數:
- SFTP 主機:
ev3dev
或ev3dev.local
,依賴於你的網路配置(如果你重新命名了 EV3 的話將是不同的) - 埠:22(不要修改它)
- 根路徑:/ (不要因為我們稍後設定完整路徑而改變它)
- 使用者名稱:robot
- 密碼:
maker
(這是預設的密碼,如果你修改了它的話,用你自己的) - 儲存密碼:選中此框以使自己更輕鬆。
- 你也可以在頂部反選 ‘Visible only for this project’。
- SFTP 主機:
- 點選 Mappings 標籤(如果為空,點選 OK 回到這個 spot,有時它需要你先儲存它)
- 選擇你的檔案在 EV3 上的路徑,比如
- 伺服器上的部署地址:
/home/robot/myfolderpath
- 伺服器上的部署地址:
- 點選頂部的
Use this server as default
按鈕 - 點選 OK
- 選擇你的檔案在 EV3 上的路徑,比如
- 重新開啟 File > Settings (在 Windows 和 Linux 上,或在 macOS 上 PyCharm > Preferences )區域(注意我們必須先儲存之前的步驟)。
- 展開 Build, Execution, Deployment ,展開 Deployment ,然後選擇 Options
- 在
Upload changed files automatically to the default server
上,選擇On explicit save action
你可以在無需執行任何程式碼的情況下測試這個設定。做一個修改,儲存檔案,然後在你的 EV3 上看下檔案是否同步。注意,為了執行測試,你需要一個 SSH 終端,你也可以在 PyCharm 中做這些(參考下一節的說明)。
在 PyCharm 中建立 SSH 終端
這個工具真的只是一個方便。不是使用單獨的程式,比如 PuTTY,MobaXterm,或 Mac Terminal,只在 PyCharm 中建立。要啟動一個 SSH 會話,僅使用選單選項 Tools > Start SSH Session… 。
它將提示你你想使用哪個遠端伺服器。選擇 EV3
(如果你重新命名了它則使用那個)。接著它將展示一個對話方塊 “Connecting to Remote Host … Are you sure?”,點選 Yes 。然後在新的終端標籤中將開啟一個到你的 EV3 的 SSH 連線。
你甚至可以通過設定預設的部署伺服器來跳過那些選擇步驟(saves 1 click!)。
- 選擇 File > Settings (在 Windows 和 Linux 上,或在 macOS 上 PyCharm > Preferences )
- 展開
Tools
- 選擇
SSH Terminal
- 把部署伺服器從
Select server on every run
修改為你配置的伺服器(比如EV3
,如果你重新命名了則使用那個)
配置遠端直譯器
這一步是可選的。你已經在 PyCharm 中有了 SSH 終端來執行你的程式。然而點選 PyCharm 的 run 按鈕而不是在 SSH 終端中輸入 python3 filename.py
執行程式豈不是更友好?感覺就像是程式是執行在你自己的機器上一樣。即,理論上,在 PyCharm 中是可能的;然而,它有一些嚴重的問題。
注意:在我的測試中,在一個真實的 EV3 上,這個方法非常慢,以致於無法使用(可能 RPI 上能工作的好一點)。你可以試一下,也許你更幸運一點。
- 選擇 File > Settings (在 Windows 和 Linux 上,或在 macOS 上 PyCharm > Preferences )
- 展開你的工程
- 選擇
Python Interpreter
- 點選三個小點新增新的直譯器並選擇
Add Remote
- 選擇
SSH Credentials
- 新增主機,使用者名稱,和密碼,就像在上面的遠端伺服器設定步驟中所做的那樣
- 把 Python 直譯器的路徑修改為
/usr/bin/python3
設定完成後,PyCharm 將向 ev3 安裝一些輔助資訊,並將索引 ev3 上已經存在的檔案,這可能會耗費比較長的時間(2-3 分鐘),因此你可以做一些其它事等一下。它完成時你可以使用 PyCharm IDE 的執行按鈕在 ev3 上執行你的程式碼。如果它運作得更好,這是一個非常好的想法。祝好運!