用途
该技能用于通过串口(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)以支持错误处理。
- 测试时建议始终监控日志。
- 资料未提供具体的收费、价格、平台支持范围或性能指标等信息。