M5Stack學習筆記(2)—— 命令行

書接上回……

把玩了一會兒M5Stack Fire,我覺得M5Stack挺不錯的,可是為什么網上的相關文檔和資料這么的少,是不是這玩意很小眾?

它也支持Arduino編程,但是好像和UIFlow不能共存。UIFlow可以在系統(tǒng)內裝入若干程序,然后選擇其中一個啟動,還是挺好的。而且,UIFlow的后面是MicroPython,更易用。以前買過pyboard,所以也了解過MicroPython,只是沒有深入,所以我暫時不打算研究M5Stack的Arduino編程,先仔細玩玩MicroPython再說,況且,Python可比C可愛多了

說到pyboard,看那光禿禿的小板子,雖然是32位的U,“但是看起來并不比Arduino UNO強大”,只不過能直接插SD卡罷了。對比起來,M5Stack要順眼許多。我記得pyboard插入電腦的USB后,系統(tǒng)會出現(xiàn)一個虛擬的U盤,然后里面有boot.py、main.py什么的,再然后可以往里面拷貝python代碼文件,重啟就可以運行…… 我很期待M5Stack也是如此,然而并不是。

M5Stack的USB接口只是虛擬了一個串口,雖然不能像訪問U盤一樣優(yōu)雅,但是MicroPython的REPL還是可以用的,一樣很強大。

連接USB,然后在命令行輸入:(我用的macOS,如果是Windows,可以用putty之類的連COM口,也很方便。)

$ screen /dev/tty.SLAB_USBtoUART 115200

然后可能會什么都沒有,你可以試試按下Ctrl-C,就會出現(xiàn)一些錯誤信息,然后出現(xiàn)python的命令提示符:

Traceback (most recent call last):
  File "flow.py", line 12, in <module>
  File "m5flow/wifisetup.py", line 78, in auto_connect
  File "m5flow/wifisetup.py", line 66, in auto_connect
  File "m5flow/ubutton.py", line 74, in wasReleased
KeyboardInterrupt:
MicroPython ESP32_LoBo_v3.2.24 - 2018-09-06 on M5Stack with ESP32
Type "help()" for more information.
>>>

看起來M5Stack里面是ESP32_LoBo版的MicroPython,不知道和pyboard的有什么區(qū)別,先看看再說。

執(zhí)行help()

>>> help()
Welcome to LoBo MicroPython for the ESP32
 
For online documentation please visit the Wiki pages:
https://github.com/loboris/MicroPython_ESP32_psRAM_LoBo/wiki
 
Based on official MicroPython, this port brings many new features:
 
 - support for two cores and 4MB SPIRAM (psRAM)
 - improved 'network' module
 - greatly improved thread support
 - support for 3 different internal file systems on top of ESP32 VFS
 - ESP32 native support for SD Card
 - built-in FTP & Telnet servers
 - support for OTA updates
 - many new and improved hardware access modules implemented in C
 and many more...
 
Control commands:
  CTRL-A        -- on a blank line, enter raw REPL mode
  CTRL-B        -- on a blank line, enter normal REPL mode
  CTRL-C        -- interrupt a running program
  CTRL-D        -- on a blank line, do a soft reset of the board
  CTRL-E        -- on a blank line, enter paste mode
 
For further help on a specific object, type help(obj)
For a list of available modules, type help('modules')
>>>

blabla……關于LoBo版本的MicroPython說了一堆,這里是wiki: https://github.com/loboris/MicroPython_ESP32_psRAM_LoBo/wiki

然后,Ctrl-A,B,C,D,E什么的和MicroPython一樣。 Ctrl-D應該比較常用,可以讓M5Stack來一次重啟。

我覺得主要的python部分應該和official版本一樣吧。

看看文件系統(tǒng)里有什么:

>>> os.getcwd()
'/flash'
>>> os.listdir()
['image_app', 'flow_usb.py', 'sys_lib', 'emoji', 'res', 'config.py', 'lib', 'boot.py', 'img', 'flow.py', 'blocks', 'apps', 'debug.py', 'main.py', '.vscode', 'modeconfig.json']
>>> os.listdir('/')
['flash']
>>>

可以看到根目錄下只有一個flash文件夾,/flash下面有一堆文件。 嗯~~~ 好無聊。

看看論壇吧,http://forum.m5stack.com 是個去處,雖然不是很熱。

突然看到有人說ampy(Adafruit MicroPython Tool)。 是的,沒有U盤模式,我怎么拷貝文件的,可以用ampy。

先用Ctrl-a k退出screen,并釋放串口資源。

在命令行下安裝ampy(如果系統(tǒng)里是python3,所以使用pip3安裝,如果系統(tǒng)是python2的,估計只能用pip了):

$ pip install --upgrade pip -i https://pypi.mirrors.ustc.edu.cn/simple
$ pip install adafruit-ampy -i https://pypi.mirrors.ustc.edu.cn/simple

(先升級了一下pip)

然后試試

$ ampy -p /dev/tty.SLAB_USBtoUART ls
/flash
$ ampy -p /dev/tty.SLAB_USBtoUART ls /flash
/flash/.vscode
/flash/apps
/flash/blocks
/flash/boot.py
/flash/config.py
/flash/debug.py
/flash/emoji
/flash/flow.py
/flash/flow_usb.py
/flash/image_app
/flash/img
/flash/lib
/flash/main.py
/flash/modeconfig.json
/flash/res
/flash/sys_lib
$ ampy -p /dev/tty.SLAB_USBtoUART get /flash/main.py ./main.py
$

GOOD! 用戶python程序好像都在apps文件夾下。

可以用,但是,總是覺得這樣命令行很麻煩的樣子……

我在 ampy的github頁面 看到了如下介紹:

Note that ampy by design is meant to be simple and does not support advanced interaction like a shell or terminal to send input to a board. Check out other MicroPython tools like rshell or mpfshell for more advanced interaction with boards.

嗯,得試試。

安裝……

$ pip install rshell -i https://mirrors.aliyun.com/pypi/simple/
$ pip install mpfshell -i https://mirrors.aliyun.com/pypi/simple/

(ustc的源不給力呀,改用aliyun吧)

運行:

rshell

$ rshell -p /dev/tty.SLAB_USBtoUART

mpfshell

$ mpfshell -o tty.SLAB_USBtoUART

(注意不需要/dev/了)

試用下來,rshell不論連接,還是執(zhí)行列目錄等命令,都會有莫名其妙的停頓(10來秒吧),有可能是它的列目錄功能可以顯示文件大小,而獲取各個文件的大小需要時間吧。但是這個等待時間,確實是不小的問題。 而mpfshell,除了列目錄沒有文件大小,日期等信息,其他基本功能還是挺完善的,但是偶爾也會get文件報錯。下載比較大的文件好像有時也困難,比如系統(tǒng)里面的/res/mix.wav文件(大小369kb)。

似乎兩個軟件都不是很成熟。 mpfshell相對好一些,至少我在windows系統(tǒng)下用著還行。

需要注意的是mpfshell的mget,下載所有文件時,不是用 * 或者 . (文件名通配符), 而是用 .+ (正則表達式)

mpfs [/flash]> mget .+
 * get boot.py
 * get config.py
 * get debug.py
 * get flow.py
 * get flow_usb.py
 * get main.py
 * get modeconfig.json
mpfs [/flash]>

ampy,rshell和mpfshell,各有優(yōu)缺點,后面使用估計會以mpfshell為主,其他兩個穿插使用,可以解決系統(tǒng)文件管理的問題。

另外,比ampy強的是,rshell和mpfshell都可以直接進入REPL的MicroPython命令提示行而不需要退出。

rshell(Ctrl+X 可以退出REPL,不過Windows下可能不一樣)

/Users/abc> repl
Entering REPL. Use Control-X to exit.

MicroPython ESP32_LoBo_v3.2.24 - 2018-09-06 on M5Stack with ESP32
Type "help()" for more information.
>>>
>>>
/Users/abc>

mpfshell (Ctrl+] 可以退出REPL,不過Windows下可能不一樣)

mpfs [/flash]> repl

*** Exit REPL with Ctrl+] ***
 
MicroPython ESP32_LoBo_v3.2.24 - 2018-09-06 on M5Stack with ESP32
Type "help()" for more information.
>>> 
mpfs [/flash]>

備注:

  1. ampy,rshell,mpfshell都只能在internet mode的界面下,即連接wifi的黑底白字界面或者二維碼界面(不管wifi有沒有成功連接)使用,否則可能會出現(xiàn)連接不上的問題,原因不明。
$ mpfshell -o tty.SLAB_USBtoUART
b'Traceback (most recent call last):\r\n  File "boot.py", line 49, in <module>\r\n  File "m5flow/wifichoose.py", line 61, in start\r\n  File "m5flow/ubutton.py", line 64, in wasPressed\r\nKeyboardInterrupt: \r\n'

could not enter raw repl


** Micropython File Shell v0.9.1, sw@kaltpost.de **
-- Running on Python 3.6 using PySerial 3.4 --
mpfs [/]>


例如上面的情況,但是經反復嘗試連接,有可能可以連接成功。

  1. 在windows系統(tǒng)下,ampy, rshell, mpfshell運行完畢后,M5Stack會復位,原因不明。

好了,脫離UI Flow IDE,并且可以管理文件系統(tǒng),真是太好了。 管理工具雖然不夠強大,還是可以用的。好了,今天到此為止吧。

My Email:


20190601101442645.jpg
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容