前幾篇都是直接在命令上操作,然而執行py文件才是王道,其實類似nodemcu的lua固件,MicroPython也提供了一個簡單的文件系統用來存代碼。並自動在開機時執行:
boot.py
main,py
兩個文件
windows用戶的話,推薦一個軟件:uPyLoader界面如下
可以看到,左邊是本地的文件,右邊是ESP8266的文件,兩邊可以互相傳輸,也可以刪除上邊的文件,其他功能自行探索,這個軟件自帶了一個編輯器,不過很弱。
還是推薦用vim或者vscode來寫代碼,然后用這個軟件把代碼傳進去。
測試代碼么,先來個循環:
import time import micropython def loop1(): t1=t2=0 for i in range(5): t1=time.ticks_us() for i in range(100): pass t2=time.ticks_us() print(t2-t1) time.sleep(2) loop1()
默認工作在80MHZ下,結果是:
=== with open("test_loop.py") as f: === exec(f.read(), globals()) === 4715 4695 4742 4698 4697 >>>
腳本確實不快,100次循環足足用了4.5ms,即使把速度調成160MHZ,也就2.5ms左右也就一次循環25us左右,而ESP32下速度就很贊了:
paste mode; Ctrl-C to cancel, Ctrl-D to finish === with open("test_loop.py") as f: === exec(f.read(), globals()) === 346 262 274 267 278 >>>
10多倍的提速2us-3us循環一次,甚至可以寫dht11那樣的時序驅動了。esp8266就沒辦法了嗎?當然有!
MicroPython官方文檔上專門有篇代碼提速的文章,其中提到了可以用裝飾器micropython.native micropython.viper來給代碼打雞血(編譯成機器碼)
import time import micropython @micropython.native def loop1(): t1=t2=0 for i in range(5): t1=time.ticks_us() for i in range(100): pass t2=time.ticks_us() print(t2-t1) time.sleep(2) loop1()
加了個@micropython.native裝飾器,速度立馬雞血:
paste mode; Ctrl-C to cancel, Ctrl-D to finish === with open("test_loop.py") as f: === exec(f.read(), globals()) === 326 320 320 320 320 >>>
趕上esp32了有木有?那……esp32用這個得多快?不好意思,esp32這功能還沒弄好,哈哈
另一個裝飾器的例子:
import time import micropython @micropython.viper def loop1(): t1=0 t2=0 for i in range(5): t1=int(time.ticks_us()) for i in range(100): pass t2=int(time.ticks_us()) print(t2-t1) time.sleep(2) loop1()
結果:
paste mode; Ctrl-C to cancel, Ctrl-D to finish === with open("test_loop.py") as f: === exec(f.read(), globals()) === 51 51 50 51 51 >>>
這就更碉堡了,又提升了6倍,都快接近100倍了,雖然需要改一點點代碼才能過,繼續期待esp32的這功能吧
另外還有個插入匯編的功能,就不試了。