summaryrefslogtreecommitdiffstatshomepage
path: root/tools/pyboard.py
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2014-04-03 22:12:01 +0100
committerDamien George <damien.p.george@gmail.com>2014-04-03 22:12:01 +0100
commit0e49642965d839fe4c9d6751acd8dc1b57652c1f (patch)
treeecf9a7a91b4243ca83b514e7e797fc74d0d30275 /tools/pyboard.py
parentd8b47d3e027de49cb06ab619cedfe072e6ebded8 (diff)
downloadmicropython-0e49642965d839fe4c9d6751acd8dc1b57652c1f.tar.gz
micropython-0e49642965d839fe4c9d6751acd8dc1b57652c1f.zip
tools: pyboard.py can now execute a file remotely!
Diffstat (limited to 'tools/pyboard.py')
-rw-r--r--tools/pyboard.py26
1 files 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)