tools: pyboard.py can now execute a file remotely!
This commit is contained in:
parent
d8b47d3e02
commit
0e49642965
@ -12,6 +12,11 @@ Example usage:
|
|||||||
pyb.exec('pyb.Led(1).on()')
|
pyb.exec('pyb.Led(1).on()')
|
||||||
pyb.exit_raw_repl()
|
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
|
import time
|
||||||
@ -45,8 +50,8 @@ class Pyboard:
|
|||||||
|
|
||||||
def exec(self, command):
|
def exec(self, command):
|
||||||
command_bytes = bytes(command, encoding='ascii')
|
command_bytes = bytes(command, encoding='ascii')
|
||||||
for i in range(0, len(command_bytes), 10):
|
for i in range(0, len(command_bytes), 32):
|
||||||
self.serial.write(command_bytes[i:min(i+10, len(command_bytes))])
|
self.serial.write(command_bytes[i:min(i+32, len(command_bytes))])
|
||||||
time.sleep(0.01)
|
time.sleep(0.01)
|
||||||
self.serial.write(b'\x04')
|
self.serial.write(b'\x04')
|
||||||
data = self.serial.read(2)
|
data = self.serial.read(2)
|
||||||
@ -55,19 +60,32 @@ class Pyboard:
|
|||||||
data = self.serial.read(2)
|
data = self.serial.read(2)
|
||||||
while self.serial.inWaiting() > 0:
|
while self.serial.inWaiting() > 0:
|
||||||
data = data + self.serial.read(self.serial.inWaiting())
|
data = data + self.serial.read(self.serial.inWaiting())
|
||||||
time.sleep(0.1)
|
time.sleep(0.01)
|
||||||
if not data.endswith(b'\x04>'):
|
if not data.endswith(b'\x04>'):
|
||||||
print(data)
|
print(data)
|
||||||
raise Exception('could not exec command')
|
raise Exception('could not exec command')
|
||||||
if data.startswith(b'Traceback') or data.startswith(b' File '):
|
if data.startswith(b'Traceback') or data.startswith(b' File '):
|
||||||
print(data)
|
print(data)
|
||||||
raise Exception('command failed')
|
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):
|
def get_time(self):
|
||||||
t = str(self.exec('pyb.time()'), encoding='ascii').strip().split()[1].split(':')
|
t = str(self.exec('pyb.time()'), encoding='ascii').strip().split()[1].split(':')
|
||||||
return int(t[0]) * 3600 + int(t[1]) * 60 + int(t[2])
|
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():
|
def run_test():
|
||||||
device = '/dev/ttyACM0'
|
device = '/dev/ttyACM0'
|
||||||
pyb = Pyboard(device)
|
pyb = Pyboard(device)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user