開始之前,首先要感謝一下TPYBoard技術交流群(157816561)-雲之初曉網友的分享。
今天簡單分享下如何將自己編寫的一些Python腳本的類庫添加到固件中,在使用時只需import調用,就像使用內置的pyb一樣簡單便捷;同時還有另外一個重要的功能,就是可以很好的保護源代碼。比起生成mpy加密文件這種方式來說,顯然添加到固件中會更加安全可靠。
搭建micropython編譯環境
1.安裝arm-none-eabi-gcc交叉編譯工具和gcc編譯器。
sudo apt-get install gcc-arm-none-eabi
sudo apt-get install gcc
sudo apt-get install gcc
2.下載micropython源碼包到本地,我下載到了home目錄下。
sudo git clone --recursive https://github/micropython/micropython
MicroPython的源碼結構
docs/ micropython的說明文檔(restructuredText)
drivers/ 一些外接設備的實現例程(eg:ds18b20,nrf24l01)
examples/ micropython的使用例程
extmod/ C語言實現的模塊
lib/ 各類芯片的lib文件
mpy-cross/ 自帶的交叉編譯器,可以將.py生成.mpy加密文件
ports/ 移植到各類MCU上的源碼(eg:stm32,esp8266)
tests/ 測試框架和Python腳本
tool+9s/ 工具
進入ports目錄下你會發現,micropython根據不同的MCU運行平台進行了分類,比如esp8266就是運行在esp8266-WIFI模塊上的micropython,stm32是運行在stm32上的,還有cc3200 。
然后進入stm32/boards目錄下,里面又根據stm32不同的系列進行了划分。
添加自定義Py類庫
3.回到stm32/目錄下,將需要添加到固件中的Python腳本類庫放到modules/目錄下。編譯之前,請確保程序運行無誤。為了測試新建了一個test.py文件,簡單寫了兩個函數。如下:
import pyb
def on():
pyb.LED(4).on()
def off():
pyb.LED(4).off()
def on():
pyb.LED(4).on()
def off():
pyb.LED(4).off()
4.執行編譯命令,等待編譯完成。
sudo make BOARD=PYBV10
BOARD參數為stm32/boards/目錄下相應的開發板名稱。
本次教程用的是TPYBoardv102(藍色)開發板,兼容PYBV10,所以選擇PYBV10開發板編譯。
若是TPYBoardv102(綠色)基礎板,同樣選擇PYBV10。
若是TPYBoardv102(黑色)開發板,需選擇PYBV11。
生成的固件在stm32/build-PYBV10/目錄下的firmware.dfu和firmware.hex文件。
5.將dfu和hex文件拷貝到本地,進行燒寫。
dfu文件的燒寫教程,請參考:http//.tpyboard.com/support/reference11/302.html
hex文件的燒寫需要借助ST-LINK工具,請參考:http//.tpyboard.com/support/reference11/239.html
6.燒寫完畢后進行測試,在main.py文件輸入以下內容:
import pyb
import test
test.on()
pyb.delay(1500)
test.off()
import test
test.on()
pyb.delay(1500)
test.off()
