rshell should now work with the WiPy
rshell should now work with the WiPy
I checked in a new version of rshell.py (and updated the pyboard.py) that seems to be working with the WiPy over telnet.
https://github.com/dhylands/upy-shell/t ... ter/rshell
It doesn't work completely over the USB serial link with the WiPy. I think that characters are being dropped on the serial link, but I need to investigate further (I see flow control signals - so I may just need to enable HW flow control).
I was able to copy files into and out of /flash on the WiPy using the telnet link. This probably isn't quite as useful as it is on the pyboard since you can copy files in and out using ftp as well, but having other options is good in my books.
https://github.com/dhylands/upy-shell/t ... ter/rshell
It doesn't work completely over the USB serial link with the WiPy. I think that characters are being dropped on the serial link, but I need to investigate further (I see flow control signals - so I may just need to enable HW flow control).
I was able to copy files into and out of /flash on the WiPy using the telnet link. This probably isn't quite as useful as it is on the pyboard since you can copy files in and out using ftp as well, but having other options is good in my books.
- pythoncoder
- Posts: 5956
- Joined: Fri Jul 18, 2014 8:01 am
- Location: UK
- Contact:
Re: rshell should now work with the WiPy
While it works better with the Pyboard (no delay removing junk from the serial line), I'm getting no joy with the WiPy, wirelessly or via the expansion board USB. The only thing unusual is that I'm using a fixed IP. I'll raise an issue with full details.
Peter Hinch
Index to my micropython libraries.
Index to my micropython libraries.
Re: rshell should now work with the WiPy
It doesn't work over the expansion serial for me either. I also had to update the pyboard.py file to match the latest from micropython.
Re: rshell should now work with the WiPy
I tried using rshell for WiPy, but have some problems.
I have all the files in the same folder and have python3-serial installed. Python3 is version 3.4.2 and MicroPython on the WiPy is v1.5-1-ge954604. WiPy is not operating as an AP, and with a fixed IP of 192.168.0.14. Still using standard username and password which seems to be the default in rshell.py.
After making rshell executable and starting it with ./rshell.py I try this:
connect telnet 192.168.0.14
With this result:
Connecting to (192.168.0.14) ...
Traceback (most recent call last):
File "./rshell.py", line 2176, in <module>
main()
File "./rshell.py", line 2173, in main
shell.cmdloop(cmd_line)
File "./rshell.py", line 1252, in cmdloop
cmd.Cmd.cmdloop(self)
File "/usr/lib/python3.4/cmd.py", line 138, in cmdloop
stop = self.onecmd(line)
File "./rshell.py", line 1283, in onecmd
return cmd.Cmd.onecmd(self, line)
File "/usr/lib/python3.4/cmd.py", line 217, in onecmd
return func(arg)
File "./rshell.py", line 1593, in do_connect
connect_telnet(name)
File "./rshell.py", line 961, in connect_telnet
dev = DeviceNet(name, ip_address, user, password)
File "./rshell.py", line 1182, in __init__
Device.__init__(self, pyb)
File "./rshell.py", line 1003, in __init__
self.has_buffer = self.remote_eval(test_buffer)
File "./rshell.py", line 1084, in remote_eval
return eval(self.remote(func, *args, **kwargs))
File "./rshell.py", line 1065, in remote
self.pyb.enter_raw_repl()
File "shorter_path/pyboard.py", line 168, in enter_raw_repl
data = self.read_until(1, b'soft reboot\r\nraw REPL; CTRL-B to exit\r\n')
File "shorter_path/pyboard.py", line 139, in read_until
elif self.serial.inWaiting() > 0:
File "shorter_path/pyboard.py", line 113, in inWaiting
data = self.tn.read_eager()
File "/usr/lib/python3.4/telnetlib.py", line 382, in read_eager
return self.read_very_lazy()
File "/usr/lib/python3.4/telnetlib.py", line 405, in read_very_lazy
raise EOFError('telnet connection closed')
EOFError: telnet connection closed
Telnet works ok from the normal shell, as well as ftp with FileZilla. I haven't tried rshell before, so maybe I'm doing something wrong? However, telnetlib.py seems to be part of python3.4, so I'm not sure if the problem is with Python3 or Micropython.
Any pointers will be appreciated.
Eivind
I have all the files in the same folder and have python3-serial installed. Python3 is version 3.4.2 and MicroPython on the WiPy is v1.5-1-ge954604. WiPy is not operating as an AP, and with a fixed IP of 192.168.0.14. Still using standard username and password which seems to be the default in rshell.py.
After making rshell executable and starting it with ./rshell.py I try this:
connect telnet 192.168.0.14
With this result:
Connecting to (192.168.0.14) ...
Traceback (most recent call last):
File "./rshell.py", line 2176, in <module>
main()
File "./rshell.py", line 2173, in main
shell.cmdloop(cmd_line)
File "./rshell.py", line 1252, in cmdloop
cmd.Cmd.cmdloop(self)
File "/usr/lib/python3.4/cmd.py", line 138, in cmdloop
stop = self.onecmd(line)
File "./rshell.py", line 1283, in onecmd
return cmd.Cmd.onecmd(self, line)
File "/usr/lib/python3.4/cmd.py", line 217, in onecmd
return func(arg)
File "./rshell.py", line 1593, in do_connect
connect_telnet(name)
File "./rshell.py", line 961, in connect_telnet
dev = DeviceNet(name, ip_address, user, password)
File "./rshell.py", line 1182, in __init__
Device.__init__(self, pyb)
File "./rshell.py", line 1003, in __init__
self.has_buffer = self.remote_eval(test_buffer)
File "./rshell.py", line 1084, in remote_eval
return eval(self.remote(func, *args, **kwargs))
File "./rshell.py", line 1065, in remote
self.pyb.enter_raw_repl()
File "shorter_path/pyboard.py", line 168, in enter_raw_repl
data = self.read_until(1, b'soft reboot\r\nraw REPL; CTRL-B to exit\r\n')
File "shorter_path/pyboard.py", line 139, in read_until
elif self.serial.inWaiting() > 0:
File "shorter_path/pyboard.py", line 113, in inWaiting
data = self.tn.read_eager()
File "/usr/lib/python3.4/telnetlib.py", line 382, in read_eager
return self.read_very_lazy()
File "/usr/lib/python3.4/telnetlib.py", line 405, in read_very_lazy
raise EOFError('telnet connection closed')
EOFError: telnet connection closed
Telnet works ok from the normal shell, as well as ftp with FileZilla. I haven't tried rshell before, so maybe I'm doing something wrong? However, telnetlib.py seems to be part of python3.4, so I'm not sure if the problem is with Python3 or Micropython.
Any pointers will be appreciated.
Eivind
Re: rshell should now work with the WiPy
Does your boot.py print anything?
If you login using telnet and then press Control-D at the REPL it will do a soft reset. I see the following:If your boot.py prints anything then it will show up between the PYB:soft reboot and the MicroPython line. When rshell tries to enter the raw repl, pyboard.py is looking for the string soft reboot\r\nraw REPL; CTRL-B to exit\r\n. The print shows up in the middle of the string (right after the soft reboot\r\n) so pyboard.py eventually times out.
I've opened an issue: https://github.com/micropython/micropython/issues/1491 but haven't gotten around to fixing it yet.
I've also recently added tab filename completion and an edit command to rshell. If you ask to edit a file on the pyboard/wipy, it copies it locally, invokes an editor (default is vi, but you can change it) and if you make any changes to the file it will copy it back.
You need to be really careful if you edit boot.py, because if it contains any errors, that will wind up tripping up rshell due to the above issue (when the traceback for the error gets printed).
If you login using telnet and then press Control-D at the REPL it will do a soft reset. I see the following:
Code: Select all
PYB: soft reboot
MicroPython v1.5-2-g126373a on 2015-11-16; WiPy with CC3200
Type "help()" for more information.
>>>
I've opened an issue: https://github.com/micropython/micropython/issues/1491 but haven't gotten around to fixing it yet.
I've also recently added tab filename completion and an edit command to rshell. If you ask to edit a file on the pyboard/wipy, it copies it locally, invokes an editor (default is vi, but you can change it) and if you make any changes to the file it will copy it back.
You need to be really careful if you edit boot.py, because if it contains any errors, that will wind up tripping up rshell due to the above issue (when the traceback for the error gets printed).
Re: rshell should now work with the WiPy
I just submitted a PR that fixes pyboard.py
https://github.com/micropython/micropython/pull/1680
I also updated the copy of pyboard.py in the rshell repository in anticipation that the PR will be accepted.
https://github.com/micropython/micropython/pull/1680
I also updated the copy of pyboard.py in the rshell repository in anticipation that the PR will be accepted.
Re: rshell should now work with the WiPy
Thank you for your reply.
boot.py did print two comments, but removing them made no change. Also tried updating pyboard.py with your changes and still get the same error message.
However, I have the configuration of WiPy as a station instead of an access point in boot.py which will probably case it to loose the connection in case of a reset. Will have to look for a better solution for this then.
boot.py did print two comments, but removing them made no change. Also tried updating pyboard.py with your changes and still get the same error message.
However, I have the configuration of WiPy as a station instead of an access point in boot.py which will probably case it to loose the connection in case of a reset. Will have to look for a better solution for this then.
Re: rshell should now work with the WiPy
My wipy is setup as a station as well (also with a static IP).
If you reinitialize it to be a station every time, then yeah that would drop the connection. When pyboard (which rshell derives from) enters the raw repl it causes a soft reset. rshell does this at least once, and sometimes several times for each shell command executed.
My boot.py looks like this: I have wlan_static.py and wlan_dhcp.py and can switch between them by changing the import statement. Here is my wlan_static.py: and my wlan_dhcp.py looks like: I can also import wlan_static.py or wlan_dhcp.py and call the set method from the REPL to switch back and forth.
If you reinitialize it to be a station every time, then yeah that would drop the connection. When pyboard (which rshell derives from) enters the raw repl it causes a soft reset. rshell does this at least once, and sometimes several times for each shell command executed.
My boot.py looks like this:
Code: Select all
501 >rshell.py
Connecting to /dev/ttyACM0 ...
Welcome to rshell. Use Control-D to exit.
/home/dhylands>
dhylands@dave ~
502 >rshell.py -p wipy
Connecting to wipy (192.168.0.63) ...
Welcome to rshell. Use Control-D to exit.
/home/dhylands> cat /flash/boot.py
import machine
from machine import UART
import os
uart = UART(0, baudrate=115200)
os.dupterm(uart)
if machine.reset_cause() != machine.SOFT_RESET:
import wlan_static as wlan
wlan.set()
/home/dhylands>
Code: Select all
import machine
from network import WLAN
wlan = WLAN() # get current object, without changing the mode
ssid = 'Your-SSID-Here'
password = 'Your-Password'
ip = '192.168.0.63'
net_mask = '255.255.255.0'
gateway = '192.168.0.1'
dns = '8.8.8.8'
def init():
wlan.init(WLAN.STA)
wlan.ifconfig(config=(ip, net_mask, gateway, dns))
def connect():
wlan.connect(ssid, auth=(WLAN.WPA2, password), timeout=5000)
while not wlan.isconnected():
machine.idle() # save power while waiting
cfg = wlan.ifconfig()
print('WLAN connected ip {} gateway {}'.format(cfg[0], cfg[2]))
def set():
init()
if not wlan.isconnected():
connect()
Code: Select all
import machine
from network import WLAN
wlan = WLAN() # get current object, without changing the mode
ssid = 'Your-SSID-Here'
password = 'Your-password'
def init():
wlan.init(WLAN.STA)
def connect():
# change the line below to match your network ssid, security and password
wlan.connect(ssid, auth=(WLAN.WPA2, password), timeout=5000)
while not wlan.isconnected():
machine.idle() # save power while waiting
cfg = wlan.ifconfig()
print('WLAN connected ip {} gateway {}'.format(cfg[0], cfg[2]))
def set():
init()
if not wlan.isconnected():
connect()
Re: rshell should now work with the WiPy
That makes sense now. I haven't really used REPL very much, but rshell seems like a good tool.
Thanks a lot for the files also, they will be helpful.
Thanks a lot for the files also, they will be helpful.
Re: rshell should now work with the WiPy
I just pushed some more changes recently that allow rshell to be a bit more reliable when the telnet session goes away and comes back (so instead of dumping a huge error dump it catches the exception caused).
It will still require boot.py to not reset the telnet session each time.
There is also an edit command in rshell (you need to be at the rshell prompt and not at the REPL). You can do edit /flash/foo.py and it will copy the file locally, invoke an editor (vi by default but you can change that) and then when you quit the editor, if there were any changes it will copy the file back.
It will still require boot.py to not reset the telnet session each time.
There is also an edit command in rshell (you need to be at the rshell prompt and not at the REPL). You can do edit /flash/foo.py and it will copy the file locally, invoke an editor (vi by default but you can change that) and then when you quit the editor, if there were any changes it will copy the file back.