Grbl_ESP32:基于 ESP32 的 Grbl CNC 控制固件——功能全景、机器配置与编译部署实战 嵌入式硬件开发物联网工业制造【免费下载链接】Grbl_Esp32A port of Grbl CNC Firmware for ESP32项目地址https://gitcode.com/gh_mirrors/gr/Grbl_Esp32点击查看免费下载Grbl_ESP32 是将经典 CNC 控制固件 Grbl 移植到 ESP32 平台的开源实现凭借 ESP32 的双核性能与无线能力在保持与原版 Grbl GCode 完全兼容的同时扩展出 6 轴 12 电机驱动、WebUI 浏览器控制、蓝牙/Wi-Fi 通信、SD 卡作业等远超 8 位 AVR 控制器能力范围的特性。本文以仓库 README 为主线结合 机器定义文件、全局配置、平台构建配置 与核心源码完整讲清该固件的功能边界、配置机制与编译部署路径读完你可以独立完成选定机器定义、裁剪功能宏、编译固件并烧录验证含无硬件 Test Drive 模式。需要先说明的一点README 明确指出该项目后续演进为新一代项目 FluidNCREADME 顶部有说明本仓库当前处于“仅维护既有功能”阶段所有新特性均已转向 FluidNC。对于已有硬件的用户Grbl_ESP32 仍然是完整可用且与 Grbl 生态兼容的固件。一、功能全景Motors / Peripherals / Job Control / Spindles / ConnectivityREADME 将固件能力划分为五大类下面逐项说明并给出仓库内的实现落点。1.1 电机系统MotorsREADME 列出的电机能力支持最多 6 根协调轴XYZABC每轴可接 1 或 2 台电机总计最多 12 台电机双电机轴可借助回零开关自动对正auto square且两台电机可独立控制电机驱动可动态绑定到轴——例如 4 电机 XYZA 配置可改造成 XYYZ双电机 Y 轴而无需任何硬件改动步进频率最高可达 120,000 step/s支持 TrinamicSPI 控制驱动包含 StealthChop、CoolStep、StallGuard 模式并可用无感回零可直接驱动单极性Unipolar步进电机舵机RC hobby servos可作为协调轴电机使用并受加速度与速度控制。在仓库中这些能力由 Grbl_Esp32/src/Motors 目录下的驱动类实现StandardStepperStandardStepper.h通用双极性步进TrinamicDriverTrinamicDriver.h继承自 StandardStepper叠加 SPI 配置的 TMC 系列驱动特性UnipolarMotor、RcServo舵机步进、Dynamixel2总线舵机对应 README 中列出的其他驱动形态。轴数上限在 Config.h 中约束MAX_N_AXIS 6而N_AXIS取值范围为 3 到 6机器定义文件可覆盖N_AXIS。1.2 外设Peripherals限位/回零开关带消抖处理用户输入按钮hold、resume、reset冷却液控制Mist 与 Flood 双路Z 探针可绑定任意轴安全门Safety Door开门时安全回撤并停主轴关门后可继续加工移位寄存器与 I/O 扩展器支持README 注明在开发分支提供。冷却液引脚并非固定Config.h 注释明确说明ESP32 版本中 M7/M8 通过机器定义文件分配 GPIO而不是像 Arduino 版 Grbl 那样固定模拟引脚。3axis_v4.h 中即可看到COOLANT_MIST_PIN与COOLANT_FLOOD_PIN的 GPIO 分配示例。1.3 作业控制Job Control瞬时进给保持与恢复进给倍率feed rate override主轴速度倍率spindle speed override。这些实时命令在 Config.h 中以Cmd枚举定义直接从串口数据流中“摘取”不进入 GCode 解析器enum class Cmd : uint8_t { Reset 0x18, // Ctrl-X StatusReport ?, CycleStart ~, FeedHold !, // ... FeedOvrReset 0x90, // Restores feed override value to 100%. FeedOvrCoarsePlus 0x91, // ... SpindleOvrReset 0x99, // Restores spindle override value to 100%. // ... };对应的倍率上下限与步进量同样在此文件中编译期配置Config.h进给倍率默认 100%、上限 200%、下限 10%、粗调 10%、细调 1%主轴倍率同规格。1.4 主轴系统SpindlesREADME 列出的主轴形态PWM、RS485 Modbus、0-10V DAC 模拟电压、继电器、用廉价 BESC 电调驱动的 RC 无刷电机、带功率/速度补偿的激光 PWM并且“创建自定义主轴非常容易”。仓库 Grbl_Esp32/src/Spindles 目录与SpindleType枚举一一对应Spindle.henum class SpindleType : int8_t { NONE 0, PWM, RELAY, LASER, DAC, HUANYANG, BESC, _10V, H2A, YL620, L510 };Spindles::Spindle抽象基类定义了init()、set_rpm()、set_state()、stop()等纯虚接口具体类PWMSpindle、DacSpindle、Laser、HuanyangSpindle、BESCSpindle、VFDSpindle等各自实现协议细节机器定义文件中用一行#define SPINDLE_TYPE SpindleType::XXX完成选择。此外 Config.h 还保留了“分段线性主轴 PWM 拟合”模型ENABLE_PIECEWISE_LINEAR_SPINDLE的开关与参数占位配套拟合脚本为仓库中的 fit_nonlinear_spindle.py这是 README 未展开的进阶能力。1.5 连接性Connectivity与 SD 卡USB/Serial标准串口波特率 115200Config.h 的BAUD_RATEBluetooth/Serial在手机或 PC 上创建虚拟串口标准串口应用可直接使用WIFI可自建热点AP也可连接既有网络STA内置 Web 服务器提供功能完整的 CNC 控制应用手机/PC 浏览器直接访问、无需安装 App支持 Telnet 发送 GCode、推送通知如“job done”时发文本/邮件、OTA 空中固件升级SD 卡GCode 可加载并通过 Wi-Fi 远程执行。WebUI 相关实现集中在 Grbl_Esp32/src/WebUI 目录WebServerHTTP WebSocket、TelnetServer、WifiConfig/BtConfig、NotificationsService、SDCard等。README 致谢部分说明该 Web 层基于 ESP3D-WEBUI 项目开发其命令行接口完整保存在 doc/Commands.txt例如[ESP111]查询当前 IP、[ESP100]SSID设置 STA 网络、[ESP210]列出 SD 卡内容、[ESP444]RESTART重启、[ESP600]msg发送通知等。启用认证ENABLE_AUTHENTICATION后多数命令需附加pwdadmin形式的口令。README 末尾还强调“快速启动”约 2 秒完成启动无需正式关机可直接断电——这是相对树莓派等方案的显著差异。二、自定义能力机器文件机制与 RTOSREADME 的 Customizable 一节指出引脚可随意映射、自定义机器无需改动主代码、支持自定义初始化运动学、自定义回零、换刀序列、按钮宏、作业结束序列且 RTOS 实时操作系统允许后台监控/控制而不影响运动控制性能。2.1 机器定义文件Machines/核心机制在 Machine.h它要么 include 某个机器定义文件要么接受外部编译标志注入// 方式一直接编辑 Machine.h指定 #include Machines/xxx.h // 默认是 test_drive.h // // 方式二外部定义 MACHINE_FILENAME不写 Machines/ 前缀 // 例如 PlatformIO 下 // PLATFORMIO_BUILD_FLAGS-DMACHINE_FILENAME3axis_v4.h platformio run // Windows PowerShell // $env:PLATFORMIO_BUILD_FLAGS-DMACHINE_FILENAME3axis_v4.h; platformio run仓库 Grbl_Esp32/src/Machines 目录内置 25 个现成板卡/机器定义涵盖 MPCNC、MPCNC 激光模块、atari_1020、fysetc、Tapster、6_Pack 系列、TMC2209_4x、RS485 主轴控制器等。以 3axis_v4.h 为例机器定义文件就是“引脚表 主轴类型 轴数”#define MACHINE_NAME ESP32_V4 #define X_STEP_PIN GPIO_NUM_12 #define X_DIRECTION_PIN GPIO_NUM_14 #define Y_STEP_PIN GPIO_NUM_26 #define Y_DIRECTION_PIN GPIO_NUM_15 #define Z_STEP_PIN GPIO_NUM_27 #define Z_DIRECTION_PIN GPIO_NUM_33 #define X_LIMIT_PIN GPIO_NUM_17 #define Y_LIMIT_PIN GPIO_NUM_4 #define Z_LIMIT_PIN GPIO_NUM_16 #define STEPPERS_DISABLE_PIN GPIO_NUM_13 #define SPINDLE_TYPE SpindleType::PWM #define SPINDLE_OUTPUT_PIN GPIO_NUM_2 #define SPINDLE_ENABLE_PIN GPIO_NUM_22 #define COOLANT_MIST_PIN GPIO_NUM_21 #define COOLANT_FLOOD_PIN GPIO_NUM_25 #define PROBE_PIN GPIO_NUM_32MACHINE_NAME会在启动时通过report_machine_type()打印到串口见下文启动流程。所有机器共有的常量SPI 引脚、定时器基准等集中在 MachineCommon.h一般无需改动。2.2 自定义初始化代码Custom/README 提到的“运动学、自定义回零、换刀序列、按钮宏、作业结束序列”等自定义点落在 Grbl_Esp32/Custom 目录包括CoreXY.cpp、parallel_delta.cpp并联 Δ 运动学、polar_coaster.cpp等现成定制以及 custom_code_template.cpp 提供的模板运行时钩子由 CustomCode.cpp 承载。结合 Grbl.cpp 中machine_init()的调用源码注释说明其为 weak 弱定义未定制时为空操作可以看出定制代码通过弱符号钩子接入主流程主代码无需修改。2.3 功能宏裁剪configure-features.pyWi-Fi/蓝牙/SD 等特性由 Config.h 中一对CONFIGURE_EYECATCH_BEGIN/END标记包裹的宏块控制#define ENABLE_BLUETOOTH // enable bluetooth #define ENABLE_SD_CARD // enable use of SD Card to run jobs #define ENABLE_WIFI // enable wifi #define ENABLE_HTTP // enable HTTP and all related services #define ENABLE_OTA // enable OTA #define ENABLE_TELNET // enable telnet #define ENABLE_TELNET_WELCOME_MSG #define ENABLE_MDNS // enable mDNS discovery #define ENABLE_SSDP // enable UPNP discovery #define ENABLE_NOTIFICATIONS // enable notifications #define ENABLE_SERIAL2SOCKET_IN #define ENABLE_SERIAL2SOCKET_OUT #define ENABLE_CAPTIVE_PORTAL // #define ENABLE_AUTHENTICATION仓库根目录的 configure-features.py 可自动改写该宏块例如python configure-features.py -e WIFI HTTP OTA python configure-features.py -d BLUETOOTH TELNET脚本支持-e/--enable、-d/--disable、-c/--configfile、-v参数合法特性名即上述validFeatureList中的 14 项。值得注意的两个默认细节ENABLE_CAPTIVE_PORTAL使 AP 模式下浏览器自动弹出 WebUI 登录页ENABLE_AUTHENTICATION默认注释关闭且 Config.h 注释明确警告当前认证实现只宜作“防止误操作的友好建议”并非真正的安全边界。三、Test Drive无硬件试用模式README 的“Test Drive It”一节说明直接编译烧录即可得到一台不映射任何引脚的虚拟机器可安全试用全部功能含 Wi-Fi 与 WebUI唯一例外是回零这类依赖真实开关反馈的操作。对应实现是默认机器定义 test_drive.h#define MACHINE_NAME Test Drive - Demo Only No I/O! #define N_AXIS 3 // This cannot use homing because there are no switches #ifdef DEFAULT_HOMING_CYCLE_0 #undef DEFAULT_HOMING_CYCLE_0 #endif #ifdef DEFAULT_HOMING_CYCLE_1 #undef DEFAULT_HOMING_CYCLE_1 #endif #define SPINDLE_TYPE SpindleType::NONE #ifdef USE_RMT_STEPS #undef USE_RMT_STEPS #endif文件头注释进一步说明其用途烧到未接线或接了未知硬件的 ESP32 上不会有引脚输出信号可避免短路损伤同时它是把程序先跑起来、再走 OTA 空中升级的理想入口。由于 Machine.h 默认 include 的正是它README 建议的“编译即用”流程与源码默认值完全一致。四、编译与部署4.1 Arduino IDEREADME 推荐路径README 的 Using It 一节指出应使用最新版 Arduino IDE 编译按其指引安装 ESP32 板支持即 Espressif 的 arduino-esp32 插件选择 Arduino IDE 而非 ESP-IDF 是为了降低初学者编译门槛未自备硬件时建议先购买 ESP32 Dev Module基本使用GCode、设置命令等沿用原版 Grbl 的 Wiki 约定硬件接线需按 Arduino 版 Grbl 的思路理解。实际操作即把仓库 Grbl_Esp32 目录作为 Arduino 草图打开在 Machine.h 中选择目标机器文件替换默认的test_drive.h或取消注释示例中的atari_1020.h/3axis_v4.h选ESP32 Dev Module板卡后编译烧录。Arduino 方式难以向编译器传变量因此MACHINE_FILENAME外部注入机制对其不实用Machine.h 注释原文说明了这一点。4.2 PlatformIO仓库自带构建配置仓库根目录的 platformio.ini 提供了免手写的构建环境关键内容[platformio] src_dir Grbl_Esp32 lib_dir libraries data_dir Grbl_Esp32/data default_envs release [env] platform espressif323.0.0 ; temporary fix for lost uart rx characters board esp32dev framework arduino upload_speed 921600 board_build.partitions min_spiffs.csv monitor_speed 115200 board_build.f_cpu 240000000L board_build.flash_mode qio build_flags ; -DMACHINE_FILENAMEtest_drive.h ;去掉行首分号并指定机器文件 -DCORE_DEBUG_LEVEL0 -Wno-unused-variable -Wno-unused-function要点解读default_envs release另有一个debug环境build_type debug两个环境均依赖TMCStepper0.7.x与 SSD1306 OLED 驱动库支撑 Trinamic 驱动与屏显min_spiffs.csv分区表压缩了 SPIFFS 占用为固件留出更多 Flash串口监视器--eolCRLF --echo与esp32_exception_decoder过滤器方便按 Grbl 习惯查看日志机器切换与 Machine.h 注释一致Linux 下PLATFORMIO_BUILD_FLAGS-DMACHINE_FILENAME3axis_v4.h platformio run或取消 ini 中build_flags里-DMACHINE_FILENAME行的注释仓库附带 builder.py、debug.ini 等辅助脚本/配置可用于批量构建与调试环境切换。4.3 启动流程入口只有 6 行烧录后的运行入口即 Grbl_Esp32.inovoid setup() { grbl_init(); } void loop() { run_once(); }真正的初始化在 Grbl.cpp 的grbl_init()中按序完成关闭 Wi-Fi 持久化 → 初始化串口 → 打印版本与MACHINE_NAME→settings_init()从非易失存储载入设置 →stepper_init()配置步进引脚与中断定时器 →system_ini()配置控制引脚与引脚变化中断 →init_motors()→machine_init()自定义钩子→ 依HOMING_INIT_LOCK决定是否进入 ALARM 强制回零状态 →Spindles::Spindle::select()按SPINDLE_TYPE选定主轴类 → 按启用宏分别启动 Wi-Fi/蓝牙服务与输入缓冲。此后loop()反复调用run_once()消化串口/网络输入与状态机——这正是 README 所说“RTOS 允许后台监控而不影响运动控制”的运行形态运动由中断/任务保证主循环只做协议与事件。五、兼容性与生态GCode 兼容README 声明 Grbl_ESP32 与 Grbl 完全向后兼容可沿用所有 Grbl 生态的 GCode 发送端sender无线扩展命令在标准 Grbl 命令之外[ESP...]系列命令完整参考见 doc/Commands.txt负责 Wi-Fi/蓝牙参数、SD 卡管理、EEPROM 读写与通知配置致谢核心引擎源自 Sonny (Sungeun) Jeon 的 Grbl 项目“核心引擎设计几乎未作改动”Wi-Fi 与 WebUI 层基于 ESP3D-WEBUI 项目开发后续演进大规模升级版本以 FluidNC 之名独立发布兼容全部 Grbl_ESP32 硬件本仓库仅维护既有功能。六、小结如何快速上手无硬件保持 Machine.h 默认的test_drive.h用 PlatformIOplatformio run -t upload或 Arduino IDE 直接烧录通过串口/WebUI 体验全部功能回零除外有硬件将Machine.h指向 Machines/ 下匹配的板卡定义或仿照 3axis_v4.h 自建定义文件裁剪功能用python configure-features.py -d BLUETOOTH等命令按需开关 Config.h 中的特性宏无线配置烧录后经 doc/Commands.txt 中的[ESP...]命令配置 AP/STA、Telnet、通知作业可用 SD 卡 GCode Wi-Fi 远程触发。赞分享嵌入式硬件开发物联网工业制造【免费下载链接】Grbl_Esp32A port of Grbl CNC Firmware for ESP32项目地址https://gitcode.com/gh_mirrors/gr/Grbl_Esp32点击查看免费下载相关推荐上下文工程评估Agent-Skills-for-Context-Engineering系统质量评估框架上下文工程评估Agent Skills for Context Engineering系统质量评估框架 Agent Skills for Context En人工智能AI 技能提示工程AI 评测HmiFuncDesigner如何用开源工具轻松构建工业级人机交互界面HmiFuncDesigner如何用开源工具轻松构建工业级人机交互界面 你是否曾经面对复杂的工业设备控制界面感到无从下手或者为数据采集系统开发而头疼不已桌面应用工业制造Grbl CNC运动控制固件终极配置与实战技巧从入门到精通Grbl CNC运动控制固件终极配置与实战技巧从入门到精通 Grbl是一款开源、嵌入式、高性能的G代码解析器和CNC milling控制器采用优化的C语言编固件嵌入式硬件开发工业制造创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考