After wiring up for Z-axis servo control, I turned my attention to the remaining empty quadrant of the prototype board.

At the moment I have a small laptop running a G-code sender acting as the CNC control console, from which I can access all functionality of Grbl. The ESP32 port of Grbl also offers a built-in web interface, which is a great choice for compact machines that don't want the overhead of a full computer. Both of these control options have a communication delay, so some things are better handled by hardware switches for immediate feedback.

By default Grbl ESP32 supports four physical switches, in the order of their pin assignment they are:

  1. Feed Hold: On many CNC, this completes execution of the current G-code command but holds off running the next one. Some machines can pause mid-command but this is not guaranteed. Axis motion stops, but spindle does not. This is a good way to have a machine pause, useful for example when the operator wants to visually check to make sure position and upcoming commands look reasonable.
  2. Cycle Start: Begins executing the loaded G-code program. Also used to resume execution after Feed Hold.
  3. Reset: This commands an immediate stop, of everything. Unlike Feed Hold, it will not wait for the current command to complete. It will also turn off spindle in addition to axis motion. Since it is an immediate cutoff of execution, the controller ends up in an unpredictable state. There's no resuming after a reset. The machine has to be re-homed and all coordinate offsets recalculated.
  4. Door: Designed to be wired up to a door open detection switch so the machine can take actions to ensure operator safety. On some machines this is effectively a Feed Hold, others treat it as an emergency Reset, most machines treat it as somewhere in between. I don't know yet how Grbl reacts.

All four are designed for normally-open switches that activate upon closing the circuit to ground. For reasons I don't understand, these switches don't use the ESP32 internal pull-ups and require external pull-up resistors. Normally-open switches don't necessarily make sense for a situation. For example, reset is usually wired up with a series of normally closed switches and, if any of them should open, the machine halts. But this is easy to address in the physical circuit.

Another concern for these switches is that they tend to have long runs of wire. (Such as  the aforementioned reset switch.) Long wires have a nasty tendency to act as an antenna picking up stray signals. So a real board would require opto-isolation to avoid triggering from line noise. But again, this is a prototype board missing the full set of protective features.

After I wired up jumpers for playing with these four switches, I made a small piece of label to remind me which pin is which. Then it's time to bring the results of this prototype soldering session to the shop and run a few tests.