Commit 0e496429 authored by Damien George's avatar Damien George
Browse files

tools: pyboard.py can now execute a file remotely!

parent d8b47d3e
......@@ -12,6 +12,11 @@ Example usage:
pyb.exec('pyb.Led(1).on()')
pyb.exit_raw_repl()
To run a script from the local machine on the board and print out the results:
import pyboard
pyboard.execfile('test.py', device='/dev/ttyACM0')
"""
import time
......@@ -45,8 +50,8 @@ class Pyboard:
def exec(self, command):
command_bytes = bytes(command, encoding='ascii')
for i in range(0, len(command_bytes), 10):
self.serial.write(command_bytes[i:min(i+10, len(command_bytes))])
for i in range(0, len(command_bytes), 32):
self.serial.write(command_bytes[i:min(i+32, len(command_bytes))])
time.sleep(0.01)
self.serial.write(b'\x04')
data = self.serial.read(2)
......@@ -55,19 +60,32 @@ class Pyboard:
data = self.serial.read(2)
while self.serial.inWaiting() > 0:
data = data + self.serial.read(self.serial.inWaiting())
time.sleep(0.1)
time.sleep(0.01)
if not data.endswith(b'\x04>'):
print(data)
raise Exception('could not exec command')
if data.startswith(b'Traceback') or data.startswith(b' File '):
print(data)
raise Exception('command failed')
return data[:-2]
return str(data[:-2], encoding='ascii')
def execfile(self, filename):
with open(filename) as f:
pyfile = f.read()
return self.exec(pyfile)
def get_time(self):
t = str(self.exec('pyb.time()'), encoding='ascii').strip().split()[1].split(':')
return int(t[0]) * 3600 + int(t[1]) * 60 + int(t[2])
def execfile(filename, device='/dev/ttyACM0'):
pyb = Pyboard(device)
pyb.enter_raw_repl()
output = pyb.execfile(filename)
print(output, end='')
pyb.exit_raw_repl()
pyb.close()
def run_test():
device = '/dev/ttyACM0'
pyb = Pyboard(device)
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment