from machine import UART
import time
import ubinascii
import json
# ==================== 配置区 ====================
UART_ID = 1
BAUDRATE = 115200
TX_PIN = 5
RX_PIN = 4
RAW_REPL_TIMEOUT_MS = 3000 # Raw REPL 握手与执行超时(ms)
# ================================================
uart = UART(UART_ID, baudrate=BAUDRATE, tx=TX_PIN, rx=RX_PIN ,rxbuf=16384,txbuf=16384 )
def base64_encode(data):
return ubinascii.b2a_base64(data).strip()
def base64_decode(data):
return ubinascii.a2b_base64(data)
#打印显示文件 return 回传数据 print模拟显示
def show_info(data):
if data:
print(data)
return data
return False
def show_text(data):
if data:
print(data)
return data
return False
#打印显示文件
def raw_read(wt=100):
time.sleep_ms(wt)
bs=uart.read()
if bs is not None:
if bs.endswith(b'\x04\x04>'):
#直接舍弃4KB以上的大文件
bsd=bs.decode()
if bsd[2:-3]:
return bsd[2:-3]
return False
def raw_start():
uart.write(b'\x03')
time.sleep_ms(100)
uart.write(b'\x01')
time.sleep_ms(100)
cnu=uart.read()
if cnu is not None:
pass
# show_info(cnu.decode())
def raw_command(data,show_type=True,wt=100):
uart.write(data)
uart.write(b'\x04')
if show_type:
return show_info(raw_read(wt))
return raw_read(wt)
def show_dir(dirs):
raw_command(f"dir_data=json.dumps(os.listdir({repr(dirs)}))",False)
sw=raw_command("print(base64_encode(dir_data).decode().strip())",False)
swd=json.loads(base64_decode(sw))
return swd
#wt 为1000 可以最大8KB大文件
def read_file(fn):
mb=raw_command(f"print(read_file({repr(fn)}))",False,500)
file_info=base64_decode(mb[:-2]).decode()
return show_text(file_info)
def write_file(fn,data):
bd=base64_encode(data).decode()
raw_command(f"write_file({repr(fn)},{repr(bd)})",False,500)
raw_start()
raw_command("import os,json,ubinascii,time",False)
raw_command("def base64_encode(data):\n return ubinascii.b2a_base64(data).strip()",False)
raw_command("def base64_decode(data):\n return ubinascii.a2b_base64(data)",False)
raw_command("def read_file(file_name):\n f=open(file_name,'rb')\n e=f.read()\n f.close()\n return base64_encode(e).decode()",False)
raw_command("def write_file(file_name,data):\n f=open(file_name,'w')\n dd=base64_decode(data).decode()\n f.write(dd)\n f.close()",False)
raw_command("import time",False)
raw_command("m=time.time()",False)
raw_command("print(m)")
# 调用print 会有\r\n 且只有print才会返回信息 否则 b'OK\x04\x04>'
#所有 结尾\x04\x04 b'OK798\r\n\x04\x04>'
多行功能 【\n 只需要该符号实现换行】
code = b"""
import time
for i in range(3):
print(i)
time.sleep(0.5)
print('done')
""" + b'\x04'
uart.write(code)