SuperAPI AI 工具集

esp32-serial-commands

测试与质量

查看项目

更新于 10-15 14:28

技能介绍

用途

该技能用于通过串口(USB serial)向 ESP32 和微控制器发送命令,以模拟按键按下和用户操作。主要面向自动化测试、压力测试以及长时间稳定性测试等场景。

主要能力

  • 通过串口直接发送命令,模拟按钮按下等用户动作。
  • 支持简单命令与带参数命令,例如:
    • PRESS:模拟一次按键。
    • PRESS:3:模拟按下 3 次。
    • SCREEN:2:切换到第 2 个屏幕。
    • MODE:debug:设置调试模式。
  • 设备端可解析命令并触发对应逻辑,例如调用按键回调或跳转屏幕。
  • 支持在测试过程中结合串口日志监控,确认命令是否被接收与执行。

使用方式

设备端(ESP32)

资料提供两种框架的示例代码。

ESP-IDF 框架:创建一个串口命令任务,循环读取字符,遇到换行或回车时解析缓冲区内容。示例中识别 PRESS 命令并调用 button_callback(),识别以 SCREEN: 开头的命令并调用 go_to_screen(screen)。任务通过 xTaskCreate(serial_command_task, "serial_cmd", 2048, NULL, 5, NULL); 在 app_main() 中创建。

Arduino 框架:在 setup() 中调用 Serial.begin(115200);,在 loop() 中通过 Serial.readStringUntil('\n') 读取命令并 trim(),然后判断命令内容:PRESS 调用 button_callback(),以 SCREEN: 开头的命令解析屏幕编号并调用 go_to_screen(screen),STATUS 命令则回显 OK。

主机端发送命令

先查找串口设备:

PORT=$(ls /dev/cu.usbmodem* /dev/ttyUSB* /dev/ttyACM* 2>/dev/null | head -1)

发送命令:

echo "PRESS" > "$PORT"

带参数命令示例:

echo "PRESS:3" > "$PORT"      # Press 3 times
echo "SCREEN:2" > "$PORT"     # Go to screen 2
echo "MODE:debug" > "$PORT"   # Set debug mode

自动化测试示例

压力测试:循环 100 次发送 PRESS,每次间隔 2 秒。

PORT=$(ls /dev/cu.usbmodem* /dev/ttyUSB* 2>/dev/null | head -1)
for i in {1..100}; do
  echo "PRESS" > "$PORT"
  echo "Sent press $i"
  sleep 2
done

长时间稳定性测试:持续 1 小时,每 30 秒发送一次 PRESS,并统计总次数。

PORT=$(ls /dev/cu.usbmodem* /dev/ttyUSB* 2>/dev/null | head -1)
END=$(($(date +%s) + 3600))  # 1 hour
count=0

while [ $(date +%s) -lt $END ]; do
  count=$((count + 1))
  echo "PRESS" > "$PORT"
  echo "[$(date +%H:%M:%S)] Press $count"
  sleep 30
done

echo "Total: $count presses"

结合日志监控测试:一个终端监控日志,另一个终端发送命令。

终端 1:

tail -f /tmp/device.log

终端 2:

PORT=$(ls /dev/cu.usbmodem* /dev/ttyUSB* 2>/dev/null | head -1)
echo "PRESS" > "$PORT"

适用场景

  • 对 ESP32 或微控制器进行自动化测试。
  • 模拟用户按键操作进行压力测试。
  • 长时间运行稳定性测试。
  • 在测试过程中结合串口日志进行验证与排查。

限制与注意事项

  • 命令之间应加入延时,让设备有时间处理。
  • 应通过串口日志确认命令已被接收。
  • 设备端应回显状态(OK/ERROR)以支持错误处理。
  • 测试时建议始终监控日志。
  • 资料未提供具体的收费、价格、平台支持范围或性能指标等信息。