From 0e49642965d839fe4c9d6751acd8dc1b57652c1f Mon Sep 17 00:00:00 2001 From: Damien George Date: Thu, 3 Apr 2014 22:12:01 +0100 Subject: [PATCH] tools: pyboard.py can now execute a file remotely! --- tools/pyboard.py | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/tools/pyboard.py b/tools/pyboard.py index 3ce6da5215..8b16f7f333 100644 --- a/tools/pyboard.py +++ b/tools/pyboard.py @@ -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)