- 2024-01-26
-
回复了主题帖:
microPython ESP32 串口收发问题向大佬求助
dcexpert 发表于 2024-1-26 18:42
在while循环加个延时试试,不停判断 if uart.any(): 容易造成数据没接收完。
谢谢,问题找到了,不是串口的问题,是 RFID,do_read函数里
if stat != rdr.OK:
time.sleep_ms(10)
if stat != rdr.OK:
str1 = [ ]
导致的,他会有一定的几率判定到这里,所以串口输出是str1 = [ ],如果删除这个,就算没有读到RFID,也会输出str1 = [0x9B,.... 0x0C],现在卡在这一步,这里不知道怎么优化了。
-
发表了主题帖:
microPython ESP32 串口收发问题向大佬求助
本帖最后由 转转丶 于 2024-1-26 16:16 编辑
import mfrc522
import time
import machine
from machine import Pin, UART, Timer
uart= UART(2, baudrate=9600, bits=8, parity=None, rx=16,tx=17, stop=1, timeout=100)
rdr = mfrc522.MFRC522(18, 23, 19, 4, 5)
def do_read():
global str1
(stat, tag_type) = rdr.request(rdr.REQIDL)
if stat == rdr.OK:
(stat, raw_uid) = rdr.anticoll()
if stat == rdr.OK:
print(" - uid: 0x%02x%02x%02x%02x" % (raw_uid[0], raw_uid[1], raw_uid[2], raw_uid[3]))
str1 = [0x9B, 0xFF, 0x02, 0x00, 0x09, 0x30, 0x00, 0x08, 0x04, 0x00, raw_uid[0], raw_uid[1], raw_uid[2], raw_uid[3], 0x0C]
print(str1)
if stat != rdr.OK:
time.sleep_ms(10)
if stat != rdr.OK:
str1 = [ ]
while True:
if uart.any():
recvData=uart.read()
print(recvData)
if b'\x9b\x01' in recvData:
do_read()
uart.write(bytes(str1))
代码如图所示,功能是串口发送 9B 01,然后MFRC522,将 RFID,ID号通过串口发送
按如图的代码已经是实现了,不过还是有问题
第一次点串口发送,不能收到回复 ;
第二次点串口发送,可以收到回复;
第三次点串口发送,不能收到回复 ;
第四次点串口发送,可以收到回复;
反正不是每次都能有回复,哪里需要优化,能够实现每次点发送都能有效回复!
-
回复了主题帖:
MicroPython串口接收中断的另一种使用方法
学习了
- 2024-01-23
-
加入了学习《ESP32 micropython视频教程》,观看 UART Serial in MicroPython
-
加入了学习《ESP32 micropython视频教程》,观看 MFRC522 RFID