2020年12月16日
2020年11月28日
[MicroPython 教學] Ampy 基本操作
11月 28, 2020 山姆
Boot Process
MicroPython (MPY) 在 power-up 或是 hardware reset 後, 正規 (standard) Boot Mode 是先執行 File System 上的 boot.py,然後 configure USB, 接著就是執行 main.py。
從 MPY 官方的文件裡,boot.py 是不建議一般使用者去更改他的,除非你是高級用戶 (advance user) ;也就是說,我們寫的 script 盡可能是改寫在 main.py 或是小改 main.py 來載入你自己的模組了。而能讓 MPY 執行你改寫的 script 方法,有以下 2 種方式可以達成。
和 Arduino 一樣,將改寫好的 main.py 和 MPY source code 重新編譯 ,然後再 download 重新編譯好的 MPY firmware,這樣你的 script 就能被順利的執行了。但這方法其實已失去 MPY 的設計原意了,因為這方法應該只有在改寫或新增 MPY Library 才發生才對,區區 main.py 更改應該使用第 2 種方法。
透過 Tool 載入改寫好的 main.py ( Load File ) 並執行他 ( Run File );MicroPython 官方提供的 File System Tool 是 rshell ( Remote MicroPython shell );rshell 功能完整,但對於只是想更改 MPY File System 內容的簡單目的則是過於複雜了,而且 rshell 在 Windows OS 有跑不起來的問題。
ampy - Adafruit MicroPython Tool
ampy 是一個相對精簡於 rshell 功能的 command line tool ;精簡而不複雜,對於只是想更改 MPY File System 內容的簡單目的則是綽綽有餘,加上能跨平台 Windows OS 也能 Run,也就成就他的普及率了。
Install ampy
以下是安裝 ampy 的方法
Windows OS:
pip install adafruit-ampy
Ubuntu OS:
sudo pip3 install adafruit-ampy
Ampy Usage
ampy 的使用方法說明,只要在 Command Line 或 Terminal 的視窗需要輸入 ampy 就可以看到了;如下的畫面就是 ampy 跑在 Windows OS 的截圖。
當然, 以下的指令更為正規
ampy --help
Command Format
從上圖的說明,我們可以得知 ampy command format
ampy [OPTIONS] COMMAND [ARGS]
Serial Port
不管是 rshell 或是 ampy ,在做檔案操作 (File Operation) 之前,都是必須先知道你板子 serial port 的位址。例如我的板子就是在 COM7,這可以在裝置管理員查到,如下圖。
所以想知道 MPY SD 的檔案資料就可如此下指令
ampy --port com7 ls
Set Path for Serial Port
在 Command Line / Terminal 視窗, 雖是一個上鍵就可以重複上一個指令,但若是想簡化指令,不再重複出現 --port com7 這段字串,是可以在 Command Line / Terminal 下輸入以下字串來設定 serial port 的路徑的。
set ampy_port=com7
List File : ls
在 Windows 要查一個檔案目錄的資訊是透過 dir (directory) command ,在 Linux 則是 ls (list) command ,因為 ampy 是從 rshell 簡化而來的,有 Linux 的身影,所以所有的 Commands 都是和 Linux 相同。
Syntax : ampy --port comport ls
Create and remove directory : mkdir / rmdir
新增一個檔案目錄的。
Syntax : ampy --port comport mkdir new/directory
Load File : put / get
將你電腦上的檔案複製到 MPY 板子上目錄的指令是 put 。
將MPY 板子上的檔案複製到你電腦上的指令則是 get 。
Syntax : ampy --port comport put filename
Run File : run
想讓 MPY 板子馬上執行你的 script 的指令則是 run 。
Syntax : ampy --port comport run filename
Remove File : rm
刪除 MPY 板子上檔案的指令則是 rm。
Syntax : ampy --port comport rm filename
Soft-Reset / Reboot : reset
最後一個 ampy 支援的 command 是 reset,reset command 則是執行 softreset ,讓 MPY 做 reboot 的動作。
Syntax : ampy --port comport reset
小技巧
示範完所有 ampy 支援的 commands 後,你是否有發覺沒有 rename 的 command, 想直接將 test.py 改名成 main.py ,是不是只能在 PC 端改好檔名再重新上載到 MPY 板端 ?
這裡教你一個小技巧,利用 put command ,直接做到 "側妃變正宮" 的方法。
Syntax : ampy --port comport put test.py main.py
2020年11月11日
[MicroPython 教學] The Best MicroPython IDE - PyCharm
11月 11, 2020 山姆
MicroPython 官方並未提供整合的 GUI 開發環境 ( IDE : Integrated Development Environment ),僅提供 Command Mode Tools,讓開發者可以更新 firmware 以及替換板上檔案而已;但這樣的開發環境著實提高了入門門檻!
還好,在 GitHub 原始碼開發平台上,無私的開發者幫 MicroPython 解決了這樣的困境;例如 Visual Studio Code 以及 PyCharm 都有無數的 Micropython 套件 (Extension / Plugin) 供開發者選用,甚至有些組織還提供 MicroPython 專屬的 IDE。
但在親身體驗這些套件或 MicroPython 專屬的 IDE 後,發覺 MicroPython 專屬的 IDE 往往是連安裝都有問題,許久未見更新;一些套件則是缺東缺西,不夠完善,往往無法同時支援 PyBoard / STM32 boards 以及 ESP8266 / ESP32;唯有 PyCharm 的 MicroPython 套件最為完善,同時支援 PyBoard 以及 ESP8266 的下載方式,並且在 IDE 的開發環境下,整合了 AMPY ( Adafruit Micropython tool ) 。
安裝
PS : 在安裝 PyCharm 前,記得先完成 Python 3 的安裝。
PyCharm 下載網址 ,安裝完成 PyCharm 後,請點選
" File -> Settings -> Plugins -> Marketplace ",然後搜尋 MicroPython 套件,並且安裝它。安裝完成 MicroPython 這套件後,請依照提示重新啟動 PyCharm ,以完成MicroPython 套件的安裝以及啟動。
New MicroPython Project
完成 IDE 以及MicroPython 套件的安裝後,接著就是來生成 MicroPython 的專案了;請點選 " File -> New Project…",接著就會跳出如下的 "Create Project”的視窗。
請在 " Location:”指定專案的開發路徑及資料夾,這裡,我的專案名稱是 "HelloMicroPython”,然後點選 " Create”生成專案。
PS : PyCharm 是一套針對 Python 語言開發的 IDE ,所以每個專案都有各自的虛擬環境 ( Virtual Environment )。
完成新專案的生成後,你應該可以看到如下圖的專案檔案結構,此時的所有檔案都只是 Python 新專案的相關聯檔案以及虛擬環境,還算不上是 MicroPython 的專案。
請點選 " File -> Settings -> Languages & Frameworks -> MicroPython ”
然後勾選 "Enable MicroPython support”。
接著在 "Device type”,點選你的開發板種類;如果你的開發板是 ESP8266 或 ESP32 則點選 “ESP8266",若是 STM32 系列,則點選 "Pyboard”。
在 "Device path” 填入 Serial Port 的路徑,如 COM3 。
最後在點選 "OK",這樣新專案的屬性才會轉換成 MicroPython 的專案。
PS : 如果是在 Ubuntu 的環境下,則是填入 /dev/ttyUSB0 或 /dev/ttyACM0
main.py
到這一步驟, 只是建立一個 MicroPython 的新專案而已,main.py 還未被產生。
請點選 " File -> New... ”
然後選擇 "Python file”並填入新檔案名稱 "main.py",接著按下 Enter 鍵。
此時 "空白的" main.py 就被建立在專案檔案結構下了。
因為是 MicroPython 的專案,PyCharm 則會在這生成 main.py 檔案後, 提醒你專案還要額外安裝 Packages,如 pyserial,ampy 。
請大膽點選右側的 "Missing reqired MicroPython packages”讓 PyCharm 幫你安裝必要的軟件。
Project Structure
接下這步驟可做也可不做,但個人建議做,因為實在沒有必要將 .idea 這目錄下的檔案也歸類為 Source Directory。
請點選 " File -> Settings ->Project: Nam of your project -> Project Structure”,然後點選 ".idea”,接著按滑鼠右鍵將 " .idea " 這目錄 “Exclude”出 Source Directory。
下圖是 " .idea " 這目錄 “Exclude”出 Source Directory 的畫面。
Hello MicroPython on PyCharm
完成以上的步驟後,是時候在空白的 " main.py" 輸入程式碼了!
不免俗的,我們也來段 "Hello World”吧!
請在空白的 " main.py" 輸入print("Hello MicroPython on PyCharm")吧!
Download main.py to board
請點選 "main.py”,接著按滑鼠右鍵,選擇 Run ‘Falsh main.py’。
若板子就緒且 COM port 設定正確,你應該可以看到 main.py 被正確的下載到板子了,如下圖。
REPL
既然 main.py 已經成功的下載到板端了,當然就應該試試在 PyCharm 跑 REPL ( Read,Evaluate, Print and Loop )。
請點選 "Tools -> MicroPython ->MicroPython REPL”執行 REPL。
接著在 Terminal 視窗則會有如下的 REPL connected 的結果
這時你不妨按下 “Ctrl+D”,來個 soft reboot,就能看到你撰寫 main.py 的執行結果了。
Run AMPY
想必你也猜得到是在 Terminal 視窗執行 ampy,以下就是執行畫面的截圖。
想省去一直敲打comport 這段字串 “-p com7',可以在 Terminal 輸入如下圖的字串,來設定 comport 路徑。
以上就是 MicroPython 在 PyCharm 的使用教學,感謝閱讀!
ESP32 / ESP8266 / MicroPython / Python / STM32
2020年10月24日
[MicroPython 教學] Build STM32 MicroPython Firmware
10月 24, 2020 山姆
繼上篇 ([MicroPython] Build ESP32 MicroPython code) 後,接著就是嘗試 Build
STM32F767ZI MPY image。
為何會選擇 STM32F767ZI 這塊板子,是因為他有 Hardware JPEG Decode 的能力,
未來在做影像辨識時,會有較高的處理速度。
以下是我 Build STM32F767ZI MicroPython Image 的過程以及步驟 :
Step 1: 取得 MPY v1.13 stable version 的程式碼
$ git clone -b v1.13 --recursive https://github.com/micropython/micropython
Step 2: 安裝 ARM Compiler
Ubuntu 16.04 在安裝過程就已經自帶 gcc-arm-none-eabi ARM compiler 了,
只不過不是最新版本,我們可以透過以下 command 再次刷新。
$ sudo apt-get install gcc-arm-none-eabi
Step 3: Build MicroPython Cross-Compiler
$ cd mpy-cross
$ make
Step 4: 接著這一步就是 Build MicroPython STM32F767ZI 的Image 了
make BOARD=NUCLEO_F767ZI
上面指令有指定板子的型號,記得改成你手邊板子的型號喔!
Step 5: Flash MPY Image
燒錄 Image 有 DFU,STLink 以及 OpenOCD 3種方式,DFU 以及 STLink 我都遇到問題,例如 STLink 就遇到以下錯誤
st-flash: symbol lookup error: /usr/lib/libstlink.so.1: undefined symbol: libusb_set_option
最終是安裝 OpenOCD package 才成功燒錄 MPY Image
以下是安裝 OpenOCD 的指令
$ sudo apt-get install openocd
採用 OpenOCD 的方式也非一試就成功,還需要改 Makefile,因為 default 的
OpenOCD config file 是 STM32F4xx 而非 STM32F7xx,所以要照如下更改,
才能成功燒錄。
以下是採用 OpenOCD 燒錄 Image 的指令
$ make BOARD=NUCLEO_F767ZI deploy-openocd
Step 6: Access the board
成功 :-)
2020年10月21日
[MicroPython 教學] Build ESP32 MicroPython Firmware
10月 21, 2020 山姆
學習 MicroPython (MPY),除了瞭解如何使用他以及更改 main.py 來控制你的 Embedded Board 外;Build MPY Image 更是能深入瞭解 MP 的程式碼,客製化 MPY Image,因為 MPY 比起 Arduino ,他的優勢就是在 Package 的豐富性,官方給的都是通用的 package;想要創造差異性,唯有客製化自己的 MPY Image,不是嗎 ?
所以瞭解如何 Build MPY Image 是必要的,也是深入學習應用 MPY 的重要步驟。
以下是 ESP32 MPY Building Guide 以及 原始碼的連接
MicroPython Source Code on GitHub
ESP32 Building Guide : MicroPython port to the ESP32
以下是我 Build ESP32 MicroPython Image 過程及步驟
取得 MicroPython v1.13 stable version source code
git clone -b v1.13 --recursive https://github.com/micropython/micropython
在正式進入 Build ESP32 MPY Code 前,我們需要 ESP-IDF tool,
因為 ESP32 MPY 的底層還是以 C Code 完成的,所以我們還是需要
ESP-IDF tool 來 Build ESP32 底層的 C Code。
可以參考我這篇文章 ( [Arduino] Build ESP32 code on Ubuntu ),
,如何取得,設定 ESP-IDF 以及 Build ESP32 Code 或參考官方連接
這一步是 Build “ MicroPython Cross-Complier”,簡稱 mpy-cross,
它的做用是轉換 (pre-compile) Python script (.py) 成 .mpy file 檔案。
例如,原來是 foo.py 的 Python script ,透過以下command 的執行
$ ./mpy-cross foo.py
foo.py 就轉換成 foo.mpy ,然後就可以被置放在 MPY 的檔案系統內了,
你就可透過 import foo 來使用他了。
Build MicroPython Cross-Complier 的作法 :
$ cd mpy-cross
$ make
完成前面兩項前置工作後,是時候 build ESP32 MPY image 了
$ cd .. /ports/esp32
$ make
很不幸的,遇到以下的錯誤 :-(
那是因為 ESP-IDF 的路徑還沒設定
我們需要打開 Makefile 做一下修改,設定 ESP-IDF 的路徑。
$ vi Makefile
$ code Makefile (如果你有裝 Visual Studio Code)
把這一行
ESPIDF = $(IDF_PATH)
修改成這樣
ESPIDF = $(/home/sam/esp/esp-idf)
(/sam 是我 Ubuntu account name,請改成你的)
或是直接執行 (如果你已經有安裝 ESP-IDF Tool)
. $HOME/esp/esp-idf/export.sh
再下一次 make 指令
還是遇到以下的錯誤 :-(
首先是 ESP-IDF 的版本和 MPY 使用的版本不合,所以給了以下警告!
"The build may complete and the firmware may work but it is not guaranteed",是警告所以還能繼續Build
後頭就出現錯誤了
kconfiglib.KconfigError: /home/sam/esp/esp-idf/Kconfig:185: '$COMPONENT_KCONFIGS_PROJBUILD_SOURCE_FILE' not found (in 'source "$COMPONENT_KCONFIGS_PROJBUILD_SOURCE_FILE"').
所以我們就乖乖的換成他支援的 ESP-IDF 的版本 (v4.0) 吧!
Supported git hash (v3.3): 9e70825d1e1cbf7988cf36981774300066580ea7
Supported git hash (v4.0) (experimental): 4c81978a3e2220674a432a588292a4c860eef27b
作法 :
cd $IDF_PATH/
sudo git reset --hard 4c81978a3e2220674a432a588292a4c860eef27b
sudo git submodule update --init --recursive
執行上面3行指令後,記得要再執行一次
./install.sh
這樣才是真正完成 ESP-IDF 版本的切換
完成 ESP-IDF 版本的切換後,這樣就可以再下一次 make 指令了
解決了 ESP-IDF 版本不合的錯誤了,但還有新的錯誤!
這裡是顯示是 1) 已經 Build & Link 完成了 2) 在做 .bin 階段時, 出現 Python2 呼叫不到的問題。
這裡的解法可以是 1) 建立一個 Python2 symlink 或 2) 直接改成呼叫 Python3,而我選擇了第2種做法。
把 行976 mark 掉,改成 行977。
完成了, 產生 firmware.bin 檔案,就放在 build-GENERIC/ folder 下
下載 MPY Image cd
這是 MicroPython 官方給的下載指令
http://micropython.org/download/esp32/
首先是清除 Flash ,尤其是有下載過 Arduino 程式碼的
esptool.py --chip esp32 --port /dev/ttyUSB0 erase_flash
接著才是燒錄我們自己 build 過的 Image,這裡有一點要注意的是 firmware 燒錄的起始位置是在 0x1000
esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 460800 write_flash -z 0x1000 firmware.bin
燒錄完成!
使用 PuTTY 來測試一下吧
成功!
熱門文章
-
L298N 模組教學 Rototics 系列 By Sam | Arduino | 2020/02/05 L298N 模組硬體簡介 L298N 模組主要的元件當然就是L298 Dual H-Bridge Motor Driver這顆驅動IC,...
-
銀杏木又名樹馬齒莧,原產於南非, 耐旱、不耐潮濕 ,銀杏木葉肉質肥厚,單葉對生,倒倒卵狀三角形,成株也會開花,但因為花極小,故以觀葉為主。樹齡可達50年。 銀杏木花語是 "高貴、幸福","永結同心、血脈相連"。 銀...
-
離線安裝 Python 以及 Python 套件 (如 openpyxl) 在網路無所不在的21世紀,我從未想過會需要在 "離線 (無網路)" 的狀況下安裝應用程式,但這情境真的發生了! 這篇就讓我來分享離線安裝 Python 以及 Python 套件的過...
-
[咖啡烘培][Quest M3] 烘培手法紀錄 緣由 入手Quest M3也有一段時間了,烘培量超過5公斤了! 以每次200克烘培的量計算,烘培次數來到了25次以上了,也終於抓到這台機器的特性,也有了屬於自己的基本烘培手法,在此做個紀錄,分享一下。 Quest M3 特性 Que...
-
下面是 ESP32 Dev Module 在 Boards.txt 的描述 Line 29 ~ 61 就描述了 ESP32 Dev Module 支援那些 Partition CSV 以 Line 29,30 為例,就描述支援的 Partition Schems , 名稱為 ...

