当前位置: 首页 > backend >正文

ESP32 配合上位机串口打印数据

串口发送ON到esp32,立即回复1,立即开始打印串口数据,回复OFF,立即回复1,停止返回数据

// ESP32-S3 串口控制数字打印程序(带即时停止功能)volatile bool isPrinting = false;  // 使用volatile确保多任务中可见性void setup() {Serial.begin(115200);  // 初始化串口通信while (!Serial);       // 等待串口连接Serial.println("Ready. Send 'ON' to start or 'OFF' to stop.");
}void loop() {// 检查串口是否有数据if (Serial.available() > 0) {handleSerialCommand();}
}void handleSerialCommand() {String command = Serial.readStringUntil('\n');command.trim();if (command.equalsIgnoreCase("ON")) {Serial.println("1"); // 回复确认if (!isPrinting) {isPrinting = true;//Serial.println("Starting printing...");// 使用独立任务处理打印,避免阻塞主循环xTaskCreatePinnedToCore(printNumbersTask,   // 任务函数"PrintNumbers",     // 任务名称10000,             // 堆栈大小NULL,              // 参数1,                 // 优先级NULL,              // 任务句柄0                  // 运行在核心0);}} else if (command.equalsIgnoreCase("OFF")) {Serial.println("1"); // 回复确认isPrinting = false;//Serial.println("Stopped. Send 'ON' to resume.");}
}void printNumbersTask(void *pvParameters) {// 从0.1递增到1000for (float i = 0.1; i <= 1000.0 && isPrinting; i += 0.1) {Serial.println(i, 1);//delay(10);checkForStop(); // 更频繁地检查停止命令}// 从1000递减到0.1for (float i = 1000.0; i >= 0.1 && isPrinting; i -= 0.1) {Serial.println(i, 1);//delay(10);checkForStop(); // 更频繁地检查停止命令}if (isPrinting) {//Serial.println("Cycle completed. Starting again...");printNumbersTask(NULL); // 继续下一个循环}vTaskDelete(NULL); // 删除任务
}void checkForStop() {// 快速检查串口是否有停止命令while (Serial.available() > 0) {String command = Serial.readStringUntil('\n');command.trim();if (command.equalsIgnoreCase("OFF")) {Serial.println("1"); // 回复确认isPrinting = false;//Serial.println("Immediate stop requested.");}}
}
http://www.xdnf.cn/news/17505.html

相关文章:

  • Python面试题及详细答案150道(41-55) -- 面向对象编程篇
  • linux安装和使用git
  • CVE-2019-0708复刻
  • SpringBoot 实现 Excel 导入导出功能的三种实现方式
  • [激光原理与应用-240]:光学器件 - 变形镜,波前校正器
  • 数据结构:树与二叉树
  • python之浅拷贝深拷贝
  • Java Selenium 自动打开浏览器保存截图
  • DevExpress ASP.NET Web Forms v25.1新版本开发环境配置要求
  • 操作系统1.5:操作系统引导
  • OpenHarmony概述与使用
  • ttyd终端工具移植到OpenHarmony
  • 大模型工程问题
  • 用vscode 里docker显示不出有容器和镜像 ?
  • [Shell编程] Shell 编程之免交互
  • 华为watch5心率变异性测量法的底层逻辑
  • Docker部署MySQL完整指南:从入门到实践
  • MyBatis插件开发与扩展:从原理到实战的完整指南
  • 阿里发布数字人模型echomimic_v3,在视频合成的基础上支持prompt输入~
  • 机器学习 - Kaggle项目实践(1)Titanic
  • 人工智能-python-机器学习- 欠拟合与过拟合:岭回归与拉索回归的应用
  • 【安全发布】微软2025年07月漏洞通告
  • SharePlay确保最佳游戏体验
  • 基恩士 CA CNX10U 视觉连接器REPEATER CA CN or CV- C 日本原装进口
  • 数字IC后端层次化Hierarchical Flow子系统Sub-System模块 block partition和pin assignment细节盘点
  • istio如何采集method、url指标
  • 飞算JavaAI vs 传统开发:效率与质量的双重突破
  • conda一键配置python开发环境
  • CI/CD的持续集成和持续交付
  • 在 Rocky Linux 9.2 上使用 dnf 安装 Docker 全流程详解