mpfshell: remote shell for esp8266

All ESP8266 boards running MicroPython.
Official boards are the Adafruit Huzzah and Feather boards.
Target audience: MicroPython users with an ESP8266 board.
wendlers
Posts: 47
Joined: Wed Mar 16, 2016 10:07 pm

mpfshell: remote shell for esp8266, support for Python 2+3

Post by wendlers » Sat Jun 11, 2016 7:33 pm

The tool should now support Python 2 and 3.

Regards,
Stefan

wendlers
Posts: 47
Joined: Wed Mar 16, 2016 10:07 pm

mpfshell basic Windows support

Post by wendlers » Mon Jun 13, 2016 7:47 pm

Since there seams to be some demand :-), I added basic Windows support to the shell. Basic means, that in general it works (serial, websocket, telnet), but some keys (e.g. tab) don't work as they are known to work under Linux. Also note, that I only tested on Windows 10 with Python 3.5 (and PySerial 3.1). To connect via serial line on Windows, e.g. to COM4:

Code: Select all

open COM4
Websocket connection etc. is the same as for Linux. More details here: https://github.com/wendlers/mpfshell

Regards,
Stefan

cpr
Posts: 11
Joined: Thu Mar 03, 2016 4:56 pm
Location: LDK, OWL @ .de

Re: mpfshell now supports connections via websockets

Post by cpr » Sun Sep 18, 2016 10:30 am

wendlers wrote:Hi,

I finished basic support for connecting with the "shell" to the ESP8266 via websockets (WebREPL needs to be active). Thus, all the shell operations (like put, get, full REPL, ...) are usable via a WiFi connection.
Hi Stefan,

What are your thoughts on this usecase: I am looking for a "glue" between SaltStack "remote execution/orchestration/config management" and the ESP8266. I have played around with the three tools I found (rshell, mpfshell and ampy).
Since Salt itself is Python 2.7 I like to keep it with that.
And as ampy also seems to be a "wrapper" around pyboard.py, but less feature-rich,
I am now looking deeper into mpfshell.
This is all purely hobbyist stuff, btw.

Salt has this nice feature called "proxy minions" which means one can "talk" to devices without Salt's agent software installed, by using SSH or a REST interface or whatever the device-to-be-controlled offers. The ESP8266 offers micropython (which I was a backer of).
https://groups.google.com/forum/#!topic ... UCFRcbTexg is where I got the missing hints, and
now have a basic "proxy minion" in place already. But need to find a way to execute code on the ESP8266.


Here is what I can do with ampy:

Code: Select all

In [1]: import ampy.files as files
In [2]: import ampy.pyboard as pyboard
In [3]: pyb = pyboard.Pyboard('/dev/ttyUSB0')
In [4]: pyb.enter_raw_repl()
In [5]: pyb.exec_("import machine\n\nprint(machine.freq())")
Out[5]: '80000000\r\n' 
And here the equivalent with mpfshell:

Code: Select all

In [1]: import mp.mpfshell
In [2]: from mp.mpfshell import MpFileShell
In [3]: mpfs = MpFileShell()
In [4]: mpfs.do_open('ser:/dev/ttyUSB0')
Connected to esp8266
In [5]: mpfs.do_exec("import machine\n\nprint(machine.freq())")
80000000
I definitely want to avoid writing files and uploading them. I want to run a few commands from the micropython libraries https://docs.micropython.org/en/latest/ ... index.html and update config files.

You describe as one feature mpfshell to be scriptable. As my usecase is slightly different, importing mpfshell as kind of a library, I wanted to mention it here -- it never hurts to toss out ideas.

wendlers
Posts: 47
Joined: Wed Mar 16, 2016 10:07 pm

Re: mpfshell now supports connections via websockets

Post by wendlers » Sun Sep 18, 2016 6:46 pm

Hi,
cpr wrote:
wendlers wrote:Hi,
And here the equivalent with mpfshell:

Code: Select all

In [1]: import mp.mpfshell
In [2]: from mp.mpfshell import MpFileShell
In [3]: mpfs = MpFileShell()
In [4]: mpfs.do_open('ser:/dev/ttyUSB0')
Connected to esp8266
In [5]: mpfs.do_exec("import machine\n\nprint(machine.freq())")
80000000
I definitely want to avoid writing files and uploading them. I want to run a few commands from the micropython libraries https://docs.micropython.org/en/latest/ ... index.html and update config files.

You describe as one feature mpfshell to be scriptable. As my usecase is slightly different, importing mpfshell as kind of a library, I wanted to mention it here -- it never hurts to toss out ideas.
The underlying code to mpfshell is intended to be used as a library, so what you are doing perfectly fits into the idea of mpfshell. However, I would recommend to not use "mp.mpfshell" but the library class which is "mp.mpfexp" (the MicroPython File Explorer). Then you would have the file transfer functions at hand, and also everything that is provided by "pyboard.py" (since MpFileExplorer is derived from PyBoard). The benefit still is, that you could use serial connection or websocket connection. Your code above would then look something like this:

Code: Select all

import mp.mpfexp

exp = mp.mpfexp.MpFileExplorer('ser:/dev/ttyUSB0')
ret = exp.exec_('import machine\nprint(machine.freq())')
print(ret)
The reason why I would not use the "do_xyz" from "mpfshell" is, that all the commands here are wrapping the "mpfexp" commands in a way so they are suitable to be used within a command shell, and they include stuff you would not need when using as an API (e.g. command completion on TAB).

And for the "scriptable" thing of mpfshell: this "only" allows you to write a script which uses mpfshell commands. Which I thin is not what you are intending (since you are using it as a library).

Regards,
Stefan

cpr
Posts: 11
Joined: Thu Mar 03, 2016 4:56 pm
Location: LDK, OWL @ .de

Re: mpfshell: remote shell for esp8266

Post by cpr » Sun Sep 18, 2016 8:33 pm

Thank you for the quick reply, very encouraging and motivating!!

User avatar
vanous
Posts: 4
Joined: Fri Mar 31, 2017 10:07 am

Re: mpfshell: remote shell for esp8266

Post by vanous » Sun Apr 30, 2017 9:35 am

Thank you very much for mpfshell, i use it often, also because it is one of the things that besides Linux actually also works on Android (in Termux), (Webrepl doesn't work in mobile Firefox nor Chrome).

I am looking into more integrated environment to show to my kids how to use th esp8266, and while for me it is simple to run mpfshell back and forth, i was thinking of customizing it a bit, to allow simplified upload/execute. Perhaps the library like nature of mpfshell could help here:

I am looking more at serial connection, is it possible to use file upload and at the same time as having the repl cli opened? Or would i have to script it up to do something like "connect to ttyusb; upload file; start repl; exec_ import file, and finally keep repl open for further debugging"?

Thank you

Petr

User avatar
deshipu
Posts: 1348
Joined: Thu May 28, 2015 5:54 pm

Re: mpfshell: remote shell for esp8266

Post by deshipu » Sun Apr 30, 2017 7:24 pm

vanous wrote:Thank you very much for mpfshell, i use it often, also because it is one of the things that besides Linux actually also works on Android (in Termux), (Webrepl doesn't work in mobile Firefox nor Chrome).

I am looking into more integrated environment to show to my kids how to use th esp8266, and while for me it is simple to run mpfshell back and forth, i was thinking of customizing it a bit, to allow simplified upload/execute. Perhaps the library like nature of mpfshell could help here:

I am looking more at serial connection, is it possible to use file upload and at the same time as having the repl cli opened? Or would i have to script it up to do something like "connect to ttyusb; upload file; start repl; exec_ import file, and finally keep repl open for further debugging"?

Thank you

Petr
I think there is a version of the Mu editor that works with the ESP8266 -- that seems like a nice thing to show to kids.

User avatar
pythoncoder
Posts: 3707
Joined: Fri Jul 18, 2014 8:01 am
Location: UK
Contact:

Re: mpfshell: remote shell for esp8266

Post by pythoncoder » Mon May 01, 2017 8:21 am

deshipu wrote:I think there is a version of the Mu editor that works with the ESP8266 -- that seems like a nice thing to show to kids.
There is, but it's not without issues viewtopic.php?f=15&t=2182. Unless these fixes have percolated upstream by now.
Peter Hinch

User avatar
vanous
Posts: 4
Joined: Fri Mar 31, 2017 10:07 am

Re: mpfshell: remote shell for esp8266

Post by vanous » Mon May 01, 2017 11:22 am

Thank you, mu in indeed interesting. the toggle behavior is quite annoying though as there is no visual cue about tab state. So i added toggle to repeat itself (in logic.py):

Code: Select all

def toggle_repl(self):
    if self.fs is not None:
        self.remove_fs()
        self.toggle_repl()
...
When i used the same for fs (toggle_fs) while repl is active, the connection to usb fails, probably due to some funny timing with repl release. python's time.sleep probably blocks the main thread and doesn't seem to help here, but I can live with that, anyways this is for my children only, just in case they play with the esp.

Btw. one more dependency worth mentioning in readme is python3-pyqt5.qsci.
Also, python3-pyflakes and python3-pycodestyle might be in peoples' repos and better to be installed via their packaging manager then pip, just my 5c and depends on opinion. But this is more for this [1] thread...

[1] viewtopic.php?f=15&t=2182

Netrosec
Posts: 7
Joined: Wed Jan 17, 2018 7:07 pm

Re: mpfshell: remote shell for esp8266

Post by Netrosec » Wed Jan 17, 2018 7:24 pm

So here I am 2 years after this thread was started and I am so keen on finding out whether the mpfshell in its current development level can be imported and send remote commands to let's say a raspberry pi?
I'm an advance pi user but a baby esp8266 which I only learnt about some 4 months ago.

Post Reply