这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 【M5StackTab5板卡试用】05--雷达距离演示GUI

共1条 1/1 1 跳转至

【M5StackTab5板卡试用】05--雷达距离演示GUI

助工
2026-03-16 19:42:26     打赏
背景前文在打通了雷达串口协议之后,接收到雷达数据流,但是只在屏幕上展示了原始数据,没有直观地展示雷达检测结果。现在把数据解析出来,并在屏幕上绘制雷达检测的距离曲线图。雷达串口解析关键代码雷达串口协议解析,用一个 RadarParser 类来实现解析


class RadarParser:
    FRAME_HEADER = 0x59
    FRAME_SIZE = 25
    def verify(self, buf):
        if not buf or len(buf) != self.FRAME_SIZE: return False
        if buf[0] != self.FRAME_HEADER: return False
        checksum_calc = sum(buf[:23]) & 0xFFFF
        return ((buf[24] << 8) | buf[23]) == checksum_calc
    def parse(self, buf):
        if not self.verify(buf): return None
        return {"det_result": buf[4], "range_val_mm": (buf[6] << 8) | buf[5], "rb_conf": buf[17]}
    @staticmethod
    def get_dominant_status(status_buffer):
        if not status_buffer: return "NONE"
        priority_map = [(1 << 0, "MOVE_CLOSE"), (1 << 1, "MOVE_FAR"), (1 << 2, "STAY"), (1 << 3, "MICRO"), (1 << 4, "PRESENCE")]
        combined_mask = 0
        for mask in status_buffer: combined_mask |= mask
        for bit, name in priority_map:
            if combined_mask & bit: return name
        return "NONE"

parser = RadarParser()


类常量定义
  • FRAME_HEADER = 0x59 帧头标识,十六进制 0x59

  • FRAME_SIZE = 25 数据帧固定长度为 25 字节

verify() 方法 - 数据校验
  • 功能:验证接收到的数据帧是否有效

  • 校验步骤:
    • 检查数据是否为空且长度是否为25字节

    • 检查第一个字节是否为帧头 0x59

    • 计算校验和:对前23个字节求和,取低16位

    • 与帧中最后两个字节(第23、24位)组成的16位校验值比较

parse() 方法 - 数据解析
  • 功能:解析验证通过的数据帧

  • 解析字段
    • det_result 第四字节,检测结果

    • range_val_mm 第5~6字节组成的16位距离值(单位:毫米)

    • rb_conf 第17字节,置信度

get_dominant_status() 静态方法 - 状态解析
  • 功能:从多个状态字节中提取优先级最高的状态

  • 优先级映射:
    • bit0 :近距离移动 MOVE_CLOSE

    • bit1 : 远距离移动 MOVE_FAR

    • bit2 : 静止

    • bit3 : 微动 MICRO

    • bit4 : 存在 PRESENCE

  • 逻辑:将所有状态字节按位或,然后按优先级返回第一个匹配的状态

演示写了一个基于毫米波雷达的人体存在检测系统,主要功能:
  1. 实时监测人体距离和运动状态

  2. 显示距离历史趋势图

  3. 雷达丢失报警

  4. 多线程处理(UI线程+雷达数据采集线程)

IMG_20260316_185144.jpg






关键词: m5stack     tab5    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]