在 Raspberry 的官方作業系統 Raspbian 中,內建了兩個版本的 Python,分別是 2.7 與 3.5。其中 2.x 系列,因為過於老舊,所以不會再有 2.8 的版本。然而,3.x 系列中的最新版本 3.6 並未正式收錄在內。這篇文章共分為兩個部分,在第一部分我將介紹如何在 Raspberry 中安裝 Python 3.6 的環境,並建立一個用來開發 GPIO 相關程式的虛擬環境。而第二部分則配置一個簡單的 LED 電路,並利用 Python 程式來控制其明滅。
我使用的板子為 Raspberry Pi 3 Model B,不過應該只要是 40 個 GPIO 接腳的型號,搭配使用 Raspbian 作業系統都可以正常執行。
安裝 Python 3.6 虛擬環境
- 因為我們要安裝的 Python 並非內建版本,所以無法透過圖形化套件管理工具加以安裝,必須在命令列視窗中進行。選取 Terminal 應用程式。
- 為了方便起見,我們先切換成 root 的身分。1sudo su -
- 切換至暫存目錄1cd /tmp
- 下載 miniconda 安裝程式1wget http://repo.continuum.io/miniconda/Miniconda3-latest-Linux-armv7l.sh
- 執行安裝程式1/bin/bash /tmp/Miniconda3-latest-Linux-armv7l.sh
在安裝過程中,我們選擇安裝至 /opt/miniconda3。 - 在安裝過程中,miniconda 會修改 .bashrc,將 /opt/miniconda3/bin 加入 PATH 此一環境變數,因此我們僅需重新載入環境變數。1source ~/.bashrc
- 設定 miniconda 動態資料庫1echo '/opt/miniconda3/lib' >> /etc/ld.so.conf.d/miniconda.conf
- 載入 miniconda 動態資料庫1ldconfig -v
- 加入 Raspberry 相關套件1conda config --add channels rpi
- 安裝 Python 3.61conda install python=3.6
- 確認 Python 版本1python --version
應可看到類似下列訊息1Python 3.6.2 - 安裝 Python 虛擬環境套件1pip install ipython virtualenvwrapper
- 離開 root 身分1exit
- 設定 PATH 環境變數1echo 'export PATH="/opt/miniconda3/bin:$PATH"' >> ~/.bashrc
- 更新 PATH 環境變數設定值1source ~/.bashrc
- 初始虛擬環境相關設定1source /opt/miniconda3/bin/virtualenvwrapper.sh
- 建立測試用的虛擬環境1mkvirtualenv rpi
- 在虛擬環境中安裝 GPIO Python 套件1pip install RPi.GPIO
LED 燈泡電路與程式範例
接線圖
說明如下:
- LED 負極 (短) 接腳連結到 Raspberry Pi 上實體編號 6 的腳位,也就是接地。
- LED 正極 (長) 接腳連結到 Raspberry Pi 上實體編號 7 的腳位。
- 一般建議連結或卸除任何電子元件時應保持 Raspberry Pi 處於關機的狀態,並仔細確認接線無誤後再開機,以避免損壞電子元件或板子。
- 在這個簡單的範例中,我沒有使用麵包板以及限流電阻。一般而言,這並不是一個安全的接法,有可能導致 LED 燈泡、甚至是板子的燒毀。在此為了簡化說明,所以才採用此一接法,在接線與未來實際應用時請多加注意。
程式代碼
利用文字編輯器 (如 nano) 新增 Python 程式 led.py
1 | nano led.py |
內容如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | import RPi.GPIO as GPIO import time GPIO_PIN = 4 GPIO.setmode(GPIO.BCM) GPIO.setup(GPIO_PIN, GPIO.OUT) try: print('按下 Ctrl-C 可停止程式') while True: print('LED 亮') GPIO.output(GPIO_PIN, GPIO.HIGH) time.sleep(1) print('LED 熄') GPIO.output(GPIO_PIN, GPIO.LOW) time.sleep(1) except KeyboardInterrupt: print('關閉程式') finally: GPIO.cleanup() |
程式說明如下:
- 第 4 行定義 LED 燈泡正極所接之腳位編號。在接線中我們連結至實體編號 7 的腳位,但其 BCM 腳位編號為 4。
- 第 5 行設定使用 BCM 腳位編號方式。
我們也可以透過指令 GPIO.setmode(GPIO.BOARD) 設定使用實體編號方式,但是一般建議盡量使用 BCM 的編號方式,所以我們遵守這樣的建議。 - 第 6 行將我們使用的腳位設定為輸出模式,這樣一來才可以透過輸出的電壓控制 LED 燈泡的明滅。
- 第 12 行透過指令 GPIO.output(GPIO_PIN, GPIO.HIGH) 將腳位設定為輸出高電壓,因此 LED 燈泡可獲得電流產生亮光。
- 第 15 行透過指令 GPIO.output(GPIO_PIN, GPIO.LOW) 將腳位設定為輸出低電壓,因此 LED 燈泡失去電流而無法發亮。
- 第 20 行指令的目的是當程式關閉後,程式中所使用到的腳位都會回到原始狀態,也就是變成輸入模式。如果不這樣做,LED 燈泡有可能在程式結束後一直亮著,徒增困擾。而在更糟的情況下,如果後續使用時接線上出了問題而造成短路,有可能會損壞設備,因此程式務必在結束前確實進行回復的動作。
程式完成後,輸入下列指令執行程式
1 | python led.py |
順利的話,就可以看到 LED 燈泡以每兩秒一個循環的速度進行閃爍。
問題排除
- 程式無法順利執行
如果程式出現錯誤訊息而無法順利執行,請仔細檢查每一行指令。必要時,可以直接複製程式碼並貼進你的編輯器。 - 程式順利執行,但是 LED 燈泡無法發亮
發生的原因有可能是 LED 正極 (長) 接腳所連結之腳位與程式定義中之腳位不相符。以此範例為例,請確認 LED 正極 (長) 接腳確實連結到 Raspberry Pi 上實體編號 7 的腳位。
還有一種可能的原因是 Raspberry Pi 無法驅動這個 LED 燈泡。如果你不確定是否為此原因,請另外尋找相容於 Raspberry Pi (或 Arduino) 的 LED 燈泡。 - 程式順利執行,但是 LED 燈泡一直發亮
發生的原因有可能是正負極接反了,請拆下 LED 燈泡再次確認正負極接腳是否正確連結。以此範例為例,請確認 LED 負極 (短) 接腳需連結到 Raspberry Pi 上實體編號 6 的腳位 (也就是接地),而正極 (長) 接腳則必須連結到 Raspberry Pi 上實體編號 7 的輸出腳位。
透過 LED 燈泡電路與範例程式,我們了解到如何利用 Python 與 GPIO 套件來控制 Raspberry Pi GPIO 的輸出。儘管此一範例相當簡單,但是對於一般單純的數位輸入元件,都可以利用類似的方式加以控制。至於如何與其他比較複雜的元件進行互動,請參考接下來的一系列文章。
如果對文章的內容有任何疑問或建議,歡迎與我聯絡。
Facebook 留言
Summary

Article Name
在 Raspberry Pi 3 Model B 建立 Python 3.6 環境
Description
這篇文章共分為兩個部分,在第一部分我將介紹如何在 Raspberry 中安裝 Python 3.6 的環境,並建立一個用來開發 GPIO 相關程式的虛擬環境。而第二部分則配置一個簡單的 LED 電路,並利用 Python 程式來控制其明滅。
Author
cyrilwang
Publisher Name
Everlearn Studio
Publisher Logo

20
20 comments
您好,我在操作第16步驟的時候出現這樣的錯誤:
pi@raspberrypi:~ $ source /opt/miniconda3/bin/virtualenvwrapper.sh
bash: /opt/miniconda3/bin/virtualenvwrapper.sh: No such file or directory
中間過程有任何錯誤訊息嗎?
/opt/miniconda3 目錄下有何檔案?
你好,我在執行第17步時:mkvirtualenv rpi
出現:
Using base prefix ‘/opt/miniconda3’
New python executable in /home/pi/.virtualenvs/rpi/bin/python
/home/pi/.virtualenvs/rpi/bin/python: error while loading shared libraries: libpython3.6m.so.1.0: cannot open shared object file: No such file or directory
ERROR: The executable /home/pi/.virtualenvs/rpi/bin/python is not functioning
ERROR: It thinks sys.prefix is ‘/home/pi/.virtualenvs’ (should be ‘/home/pi/.virtualenvs/rpi’)
ERROR: virtualenv is not compatible with this system or executable
怎麼辦?????跪求解答
應該有很大的機會是版本衝突的問題。Raspbian 除了預設安裝的 Python 2.7 之外,內建還有 Python 3.5,都有可能造成造成版本衝突。
因此建議最好是用乾淨的 Raspbian 來安裝 Miniconda 的版本,以避免這些很煩人的情況。
如果用乾淨的系統還是無法正常執行,可能要確認每個步驟是否都無錯誤訊息。像是環境變數如果沒有正確設定,也會產生各種莫名其妙的錯誤。
方便的話,可以把每個步驟跟結果都貼出來會比較容易找到線索,不然光靠隔空抓藥需要不少運氣。
您好,這幾天重試了幾次乾淨的Raspbian
在現行版本照著步驟,的確如同上兩篇回報,自己也碰過
第一個錯誤:
第16步驟的時候出現這樣的錯誤:
pi@raspberrypi:~ $ source /opt/miniconda3/bin/virtualenvwrapper.sh
bash: /opt/miniconda3/bin/virtualenvwrapper.sh: No such file or directory
猜測是在第5步驟、執行安裝程式,沒有看清楚作者的意思,要手動輸入/opt/miniconda3,將程式安裝在指定目錄,而非預設目錄。
第一個錯誤:
猜測是如同此篇問題,https://github.com/pypa/virtualenv/issues/1051
自己是在
FourSpaces commented on 11 Apr 2018
I also encountered this problem, my environment is anaconda python,
Uninstall virtualenv using pip, install virtualenv using conda,
pip uninstall virtualenv
conda install virtualenv
Virtualenv can be used normally
這篇才得到解答
執行一遍
pip uninstall virtualenv
conda install virtualenv
兩個指令,才能順利進行後面步驟
17.建立測試用的虛擬環境
mkvirtualenv rpi
18.在虛擬環境中安裝 GPIO Python 套件
pip install RPi.GPIO
另外自己在17步驟,最後還是有報錯誤,但後來能順利執行程式,並點亮led就沒再注意了,下面附上程式碼
mkvirtualenv rpi
Using base prefix ‘/opt/miniconda3’
Overwriting /home/pi/.virtualenvs/rpi/lib/python3.6/site.py with new content
New python executable in /home/pi/.virtualenvs/rpi/bin/python3.6
copying /opt/miniconda3/bin/python3.6 => /home/pi/.virtualenvs/rpi/bin/python
copying /opt/miniconda3/bin/../lib/libpython3.6m.so.1.0 => /home/pi/.virtualenvs/rpi/lib/libpython3.6m.so.1.0
Not overwriting existing python script /home/pi/.virtualenvs/rpi/bin/python (you must use /home/pi/.virtualenvs/rpi/bin/python3.6)
Traceback (most recent call last):
File “/opt/miniconda3/bin/virtualenv”, line 10, in
sys.exit(main())
File “/opt/miniconda3/lib/python3.6/site-packages/virtualenv.py”, line 870, in main
symlink=options.symlink,
File “/opt/miniconda3/lib/python3.6/site-packages/virtualenv.py”, line 1156, in create_environment
install_python(home_dir, lib_dir, inc_dir, bin_dir, site_packages=site_packages, clear=clear, symlink=symlink)
File “/opt/miniconda3/lib/python3.6/site-packages/virtualenv.py”, line 1670, in install_python
os.symlink(py_executable_base, full_pth)
FileExistsError: [Errno 17] File exists: ‘python3.6’ -> ‘/home/pi/.virtualenvs/rpi/bin/python3’
最後謝謝作者一系列 RASPBERRY PI 3 的教學文
版面和說明都非常好啃(深入淺出,還包含硬體上的介紹)
沒意外會繼續啃下去^^有問題再上來請教
上篇勘誤一下(忘了改數字)
第****二****個錯誤:
猜測是如同此篇問題,https://github.com/pypa/virtualenv/issues/1051
自己是在
謝謝你的補充與肯定。
因為 Raspbian 常常釋出新的包裝,彼此之間的預設安裝套件可能都不一樣,難免會產生一些”奇怪”的現象。
而今年 6 月推出的 Raspbian Buster 已經預設安裝 Python 3.7,所以跟之前的說明文會有更大的差異。
儘管如此一來理論上應該不再需要利用 miniconda 來安裝 Python 3.6,但是有些第三方套件可能又只支援舊版的 Python。
雖然 Python 的 virtual environment 在大部分時間可以避免很多管理上的問題,但是作業系統內建版本與虛擬環境的套件版本還是很容易互相影響,甚至產生衝突的現象。這一直是使用 Python 時很難避免的困擾 (忘向遠方)。
成功安裝PYTHON3.6了 謝謝你詳細的教學
不客氣,很高興能幫得上忙。