1009|2

20

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

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号通过串口发送

按如图的代码已经是实现了,不过还是有问题

第一次点串口发送,不能收到回复 ;

第二次点串口发送,可以收到回复;

第三次点串口发送,不能收到回复 ;

第四次点串口发送,可以收到回复;

 

反正不是每次都能有回复,哪里需要优化,能够实现每次点发送都能有效回复!

最新回复

在while循环加个延时试试,不停判断 if uart.any(): 容易造成数据没接收完。   详情 回复 发表于 2024-1-26 18:42
点赞 关注
 
 

回复
举报

1万

帖子

25

TA的资源

版主

沙发
 

在while循环加个延时试试,不停判断 if uart.any(): 容易造成数据没接收完。

点评

谢谢,问题找到了,不是串口的问题,是 RFID,do_read函数里 if stat != rdr.OK:         time.sleep_ms(10)         if stat != rdr.OK:       &nbs  详情 回复 发表于 2024-1-26 19:04
 
 
 

回复

20

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
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],现在卡在这一步,这里不知道怎么优化了。

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表