RAW repl 功能录入

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)
此条目发表在None分类目录。将固定链接加入收藏夹。

发表回复