labplus-cn / mpython

mpython掌控板文档和固件源码
MIT License
129 stars 54 forks source link

About usb uart #21

Closed yaoc15 closed 4 years ago

yaoc15 commented 4 years ago

When I init UART class, I want to use usb uart to be tx and rx, how should I init the UART class.如果我想要用USB串口作为输入输出的话我该如何初始化UART类

tangliufeng commented 4 years ago

UART(0)限定只能用于REPL,如果你想用USB的串口,可以使用UART(1)/UART(2),并重定义引脚到掌控板的USB物理引脚上(IO1,IO3)。但是,这样用,会使得REPL功能失效。

uart = UART(1,115200, rx=3, tx=1)

yaoc15 commented 4 years ago

UART(0)限定只能用于REPL,如果你想用USB的串口,可以使用UART(1)/UART(2),并重定义引脚到掌控板的USB物理引脚上(IO1,IO3)。但是,这样用,会使得REPL功能失效。

uart = UART(1,115200, rx=3, tx=1)

UART(0)限定只能用于REPL,如果你想用USB的串口,可以使用UART(1)/UART(2),并重定义引脚到掌控板的USB物理引脚上(IO1,IO3)。但是,这样用,会使得REPL功能失效。

uart = UART(1,115200, rx=3, tx=1)

我使用UART(1,115200, rx=3, tx=1)之后该如何销毁这个串口呢,使用uart.deinit()不可以,提示‘UART’ object has no attribute 'deinit'。比如我在掌控板中的main.py文件定义了uart = UART(1,115200, rx=3, tx=1),该如何才能恢复REPL模式使用呢,现在想再次刷入代码的时候只能重新烧录固件。

yaoc15 commented 4 years ago

UART(0)限定只能用于REPL,如果你想用USB的串口,可以使用UART(1)/UART(2),并重定义引脚到掌控板的USB物理引脚上(IO1,IO3)。但是,这样用,会使得REPL功能失效。

uart = UART(1,115200, rx=3, tx=1)

UART类中没有deinit()方法,文档中有误,uart = UART(1,115200, rx=3, tx=1)之后能用代码恢复REPL模式吗?

tangliufeng commented 4 years ago

掌控板/micropython最新固件UART类,已添加deinit。但是,使用deinit,并不能恢复reple。你可以这么做,在特定条件才进入usb串口模式,当你不需要时,你可以通过硬复位的方式跳出,便可恢复repl。你可以参考下掌控板模拟scratch协议程序

yaoc15 commented 4 years ago

掌控板/micropython最新固件UART类,已添加deinit。但是,使用deinit,并不能恢复reple。你可以这么做,在特定条件才进入usb串口模式,当你不需要时,你可以通过硬复位的方式跳出,便可恢复repl。你可以参考下掌控板模拟scratch协议程序

我的掌控板中main.py代码如下:

from mpython import * 
from machine import UART
import machine
import ujson
print("onlineMode")
oled.DispChar("onlineMode",0,30)
oled.show()
uart=UART(1,baudrate=9600,rx=3,tx=1)
while True:
    if (uart.any()):
        data = uart.read(uart.any())
        data_str = data.decode("utf-8")
        oled.fill(0)
        data_json = ujson.loads(data_str)
        oled.DispChar("接收:%s" %data_json["data"],0,30)
        oled.show()

用python的serial向其写入json数据时报错,需要time.sleep一段时间是为什么呢?

import serial
import json
import time
ser = serial.Serial(port="/dev/cu.SLAB_USBtoUART", baudrate=9600, inter_byte_timeout=1)
data_json = {"method":"code","data":"hello world"}
data_str = json.dumps(data_json)
ser.write(data_str.encode('utf-8'))
time.sleep(0.1)
lgnativs commented 4 years ago

@yaoc15 可能串口数据没有发送完成脚本就退出了,资源被释放了.