本文檔展示了如何建立一個使用 PyCharm IDE 為 ev3dev 開發 Python 程序的良好的工作環境。
在這份文檔中,我們假設你已經刷寫了一張 SD 卡,用它啟動設備,并且已經 在設備上配置了網絡。這些步驟在 入門指南 中說明。
在這份文檔中,我們需要能夠在 EV3 上運行終端命令。要完成這一設置,請移步我們的 SSH 教程。
注意:本教程的前半部分假設你使用免費的 “社區” 版 PyCharm。然而,如果你有權使用對于學生和其它一些 特殊情況 是免費的 “標準” 版的 PyCharm,我們建議你閱讀在后面說明的 PyCharm Professional 的部分。
目的是能夠只需點擊幾下,就能在你將代碼寫入 EV3 或其他 ev3dev 設備時傳輸代碼。為了實現這一點,我們打算使用一個稱為 git 的程序。Git 是一個 “版本控制” 系統,它通常用于存儲源碼。然而,對于我們來說,它作為一種用 PyCharm 內建的工具把代碼傳送到遠程機器上的簡單方式非常有效。
首先,打開你之前建立的 SSH 終端,然后運行如下的命令(確保把 name/email 替換為你自己的):
sudo apt-get updatesudo apt-get install gitgit config --global user.email 'you@example.com'git config --global user.name 'Your Name'
現在讓我們使用我們的版本系統創建一個新的工程。鍵入:
mkdir myproject.gitgit init --bare myproject.gitmkdir myproject
注意:如果你想為你的工程起一個不同的名字,你可以把上面的 myproject
替換為你自己的名稱。確保它不包含空格或其它特殊字符。
好極了!這樣就在我們新創建的目錄下初始化了 Git。我們有了一個新的工程倉庫。現在我們可以在我們的開發機器上 clone 這個倉庫了,但首先我們需要做一點額外的配置,以在我們把代碼 push 回 ev3dev brick 時自動地部署我們的代碼:
nano myproject.git/hooks/post-receive
把下面的內容添加到你剛剛打開的文件。如果你需要一些關于 nano 的提示,請參考 nano cheat sheet。
#!/bin/shgit --work-tree=/home/robot/myproject --git-dir=/home/robot/myproject.git checkout -f
最后,執行:
chmod +x myproject.git/hooks/post-receive
這份教程專注于 PyCharm Community Edition(盡管這些說明也適用于更多 軟件的高級版本)。如果你還沒有安裝,請安裝 PyCharm。
現在我們要做的是創建一份我們在 ev3dev 機器上創建的工程的 clone,以便我們可以在開發 PC 機上工作。在 PyCharm 的 Welcome 對話框中,選擇:Checkout from version control > Git。現在輸入 ev3dev 主機的主機名(主機名通常是 ev3dev
或 ev3dev.local
),后面跟冒號,然后是工程名。在其它選項中選擇一個適當的 parent 和工程目錄。
除了在 PyCharm 的 Welcome 界面外,還可以在 PyCharm 的主界面選擇菜單選項 VCS > Checkout from version control > Git,打開與上面完全一樣的對話框。如下圖:
然后按照與上面的說明一致的方法輸入相關信息。
如果一切正常,你應該已經在一個新的 PyCharm 窗口中打開了你的空工程。如果 ‘testing’ 對話框在屏幕上保持了很長時間,那可能是因為你的 PyCharm 密碼存儲需要你的 PyCharm master 密碼。取消 checkout,鍵入 master 密碼,并再次嘗試。
讓我們給工程添加一些代碼。在左邊的 ‘myproject’ 目錄上點擊右鍵,并選擇 new > python file。把它命名為 run_motor
。PyCharm 將詢問你是否想把它添加進 git;我們正在使用 git 來把代碼同步到 brick,因此我們想要使用它。選擇 Yes。
現在添加如下的測試代碼:
from ev3dev.auto import *import timem = 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 myprojectpython3 run_motor.py
觀察你連接的馬達。如果你的代碼運行正常,你應該看到馬達旋轉了三秒。
我們之前保存代碼的時候,你可能已經注意到了一個問題:PyCharm 在 ev3dev 庫的 import 行下面放置了紅色波浪線。
這是由于在開發機上缺失了 ev3dev 庫,因此 PyCharm 認為你的代碼引用了不存在的類。我們可以通過在開發機上安裝 ev3dev 庫來解決這個問題:我們當然無法在桌面電腦上運行馬達,但庫中的文檔和自動補全將被探測到,以便 PyCharm 可以幫助您。
使用 Python 內建的包管理器 pip 在你的計算機上安裝 ev3dev-python 庫。
pip3 install python-ev3dev
使用 pip 安裝包的時候,注意一下系統中當前配置的 Python 版本。如果 PyCharm 中選擇的解釋器是 Python3,而系統中配置的當前 Python 解釋器的版本為 Python2.7,則上面的命令無法為 PyCharm 所使用的 Python 解釋器安裝適當的 ev3dev 包,ev3dev 會被安裝到 Python2.7 的包目錄下,且只能被 Python 2.7 引用到。可通過如下命令強制為 Python3 安裝 ev3dev 包:
$ sudo python3 /usr/local/bin/pip3 install python-ev3dev
安裝了庫之后,紅色的波浪線將消失,并且 ev3dev-python 命令的自動補全將會工作(非常方便)。
IDE (PyCharm) 設置完成并且庫安裝好之后,你可以寫代碼寫得更快。PyCharm 將高亮顯示大多數編碼錯誤和拼寫錯誤。它也會提示和自動補全你的代碼并顯示文檔。你可以鍵入 m.
然后 PyCharm 將提示所有可能的方法和屬性。選擇一個。現在你可以把光標放在屬性中并按下 F1 來查看文檔。我們按下 cmd/control-down 箭頭來深入查看庫中這個屬性的定義。整潔,對吧? 快樂編碼。
PyCharm 專業版(對于教育的場景或開源項目的頂級貢獻者可以免費獲得)有更多功能使你的開發體驗更劉暢。如果你是一個學生或老師,請在 JetBrains 學生申請頁面上注冊您的有效機構電子郵件地址,以申請免費版本的 PyCharm 專業版。如果你是一個開源開發者,并且為現有的項目貢獻了大量代碼,你可以訪問 JetBrains Open Source 許可證頁 來查看你是否有資格申請一個 PyCharm 專業版的免費版。
這里是一個你可以在 PyCharm 專業版中使用的能使你的 Python 開發更簡單地工具的清單。
工具 | 用途 |
---|---|
SFTP 遠程服務器 | 上面所用方法的一個替代方法,可以在你的計算機上的文件保存時把你的計算機上的代碼更快地傳輸到 EV3。 |
SSH 終端 | 讓你直接通過 PyCharm 創建 SSH 連接,而不是用另外一個工具(比如 PuTTY)。 |
遠程解釋器 | 讓你無需 SSH 終端,直接點擊 PyCharm 中的運行來運行程序。允許調試,日志,等等所有你的主機上的 PyCharm IDE 內有的東西(但是它 很慢!) |
通過這些工具并在你的電腦上安裝 ev3dev-lang-python,你可以真正地使 Python 開發流程相當友好。
這是本教程前面展示的 git post-receive hook 方案的一個替代方法。如果你有權使用 PyCharm 專業版,則這個方案是一個比前面的那個更優雅的方案。在即時地傳輸代碼上它的工作幾乎是一樣的,但它也允許你有一些其它的 git remote(比如 GitHub)而不是使用 EV3 作為你的 git remote。這是使用 PyCharm 遠程服務器建立你的文件傳輸機制必須的步驟。
Build, Execution, Deployment
Deployment
+
圖標,并添加一個新的遠程服務器,隨意命名為你喜歡的名字(比如 EV3
)ev3dev
或 ev3dev.local
,依賴于你的網絡配置(如果你重命名了 EV3 的話將是不同的)maker
(這是默認的密碼,如果你修改了它的話,用你自己的)/home/robot/myfolderpath
Use this server as default
按鈕Upload changed files automatically to the default server
上,選擇 On explicit save action
你可以在無需執行任何代碼的情況下測試這個設置。做一個修改,保存文件,然后在你的 EV3 上看下文件是否同步。注意,為了運行測試,你需要一個 SSH 終端,你也可以在 PyCharm 中做這些(參考下一節的說明)。
這個工具真的只是一個方便。不是使用單獨的程序,比如 PuTTY,MobaXterm,或 Mac Terminal,只在 PyCharm 中創建。要啟動一個 SSH 會話,僅使用菜單選項 Tools > Start SSH Session…。
它將提示你你想使用哪個遠程服務器。選擇 EV3
(如果你重命名了它則使用那個)。接著它將展示一個對話框 “Connecting to Remote Host … Are you sure?”,點擊 Yes。然后在新的終端標簽中將打開一個到你的 EV3 的 SSH 連接。
你甚至可以通過設置默認的部署服務器來跳過那些選擇步驟(saves 1 click!)。
Tools
SSH Terminal
Select server on every run
修改為你配置的服務器(比如 EV3
,如果你重命名了則使用那個)這一步是可選的。你已經在 PyCharm 中有了 SSH 終端來運行你的程序。然而點擊 PyCharm 的 run 按鈕而不是在 SSH 終端中輸入 python3 filename.py
運行程序豈不是更友好?感覺就像是程序是運行在你自己的機器上一樣。即,理論上,在 PyCharm 中是可能的;然而,它有一些嚴重的問題。
注意:在我的測試中,在一個真實的 EV3 上,這個方法非常慢,以致于無法使用(可能 RPI 上能工作的好一點)。你可以試一下,也許你更幸運一點。
Python Interpreter
Add Remote
SSH Credentials
/usr/bin/python3
設置完成后,PyCharm 將向 ev3 安裝一些輔助信息,并將索引 ev3 上已經存在的文件,這可能會耗費比較長的時間(2-3 分鐘),因此你可以做一些其它事等一下。它完成時你可以使用 PyCharm IDE 的運行按鈕在 ev3 上運行你的代碼。如果它運作得更好,這是一個非常好的想法。祝好運!