@serialpilot/driver-grbl
v0.1.0
Published
GRBL 1.1 CNC controller driver for serialpilot — typed status reports, command-queued G-code streaming, real-time control.
Maintainers
Readme
@serialpilot/driver-grbl
GRBL 1.1 CNC controller driver for SerialPilot.
Streams G-code with ok/error flow control, decodes <...> status reports, surfaces ALARM:N and error:N codes with human-readable messages, and exposes real-time commands (feed-hold, cycle-start, soft-reset) as one-shot byte writes that bypass the queue.
Install
npm install serialpilot @serialpilot/driver-grblQuick start
import { SerialPilot } from 'serialpilot'
import { Grbl } from '@serialpilot/driver-grbl'
const port = new SerialPilot({ path: '/dev/ttyUSB0', baudRate: 115200 })
const grbl = new Grbl({ transport: port })
grbl.on('status', s => console.log(s.state, s.mPos))
grbl.on('alarm', a => console.error(`ALARM ${a.code}: ${a.message}`))
await grbl.open()
await grbl.home()
await grbl.jog({ x: 10, feed: 500 })
await grbl.streamGcode(asyncIterable)
grbl.feedHold()
grbl.cycleStart()
const status = await grbl.getStatus()
await grbl.softReset()Events
| Event | Payload | Notes |
| --- | --- | --- |
| 'status' | Status | <...> report — emit on every received status frame |
| 'alarm' | {code, message} | ALARM:N |
| 'command-error' | {code, message} | GRBL error:N line — also rejects the in-flight command's promise |
| 'error' | Error | Inherited from Device; surfaces transport errors |
| 'feedback' | {message} | [MSG:...] lines |
| 'parse-error' | {reason, line} | Unrecognized line content |
| Inherited | 'open' \| 'close' \| 'state' \| 'data' | From Device |
Polling
grbl.pollStatus(200) // ask for `?` every 200 ms; emits 'status' events
grbl.pollStatus(0) // stop pollingLimitations (v0.1)
- Default 1 in-flight command. Pass
maxInFlightinGrblOptionsto enable pipelining (requires firmware RX buffer space). - Soft-reset clears the local command queue (any pending
enqueue()promises reject). - Real-time commands are fire-and-forget — no acknowledgement awaited.
close()rejects any pendinggetStatus()promises with a "device closed" error.
License
MIT
