Developer guide
It types its answer. Act on match.
Plug a detector in and it behaves like a USB keyboard: every time somebody says something, it types one flat JSON object wherever your cursor is. No port to open, no driver, no code. When you want software to act on it instead, the same line is on the serial port — and when you want no computer at all, there is a pin.
Open a text editor, put the cursor in it, and say something. This is what lands:
{"n":4,"match":false,"keyword":"stop","score":0.2731,"length_ms":170,"latched":true,"uptime_ms":640527}
| Field | Type | Meaning |
|---|---|---|
match |
bool | The answer. true means the keyword was heard and the detector has asserted its stop. Both microphones feed this: either one hearing it makes it true. |
score | float 0–1 | How confident it was. Useful for logs and graphs — the operating point is already applied, so do not threshold it yourself. |
keyword | string | The model’s configured keyword label. This binary detector does not identify the spoken language, dialect or exact word. |
length_ms | int | How long the utterance was. |
latched | bool | true while a stop is being held. Send Z\n to clear it. |
n | int | Utterance counter since power-on. A gap means you missed a line. |
uptime_ms | int | Milliseconds since the detector booted. Device clock, not wall clock. |
Language and dialect coverage
RobotStop’s expansion goal is every spoken language and dialect. The worldwide catalog is a reference inventory; entries do not automatically become available on a detector. Current development word lists cover English, Mandarin Chinese and Korean, and coverage depends on the installed model.
Use the coverage and qualification record for your unit’s model version. A language result does not establish coverage for all its dialects. The existing JSON reports a binary stop match; it cannot tell you which language or dialect triggered it.
Three ways out
All three are live at once. Pick whichever suits what you are building — you do not configure anything to choose.
| Way out | Needs | Use it when |
|---|---|---|
| USB keyboard the default |
Nothing. It types. | You want the data now — into a spreadsheet, a text file, a
log window, a form. Send H0\n to stop it typing,
H1\n to resume. |
| USB-C serial | A serial port at 921600 | Software has to react to it. Same JSON, same moment. |
| Stop pin | Two wires | No computer in the loop. HIGH while ready, LOW while stopped, so a cut wire or a dead board reads as stopped. Drive an optocoupler or a relay coil from it — not a machine directly. |
Read it from code
import json, serial # pip install pyserial
with serial.Serial("/dev/cu.usbmodem101", 921600) as detector:
for line in detector:
event = json.loads(line)
if event["match"]:
stop_the_robot()
// npm install serialport
import { SerialPort } from "serialport";
import { ReadlineParser } from "@serialport/parser-readline";
new SerialPort({ path: "COM4", baudRate: 921600 })
.pipe(new ReadlineParser())
.on("data", (line) => {
const event = JSON.parse(line);
if (event.match) stopTheRobot();
});
Port names: /dev/cu.usbmodem* on macOS,
COM* on Windows, /dev/ttyACM* on Linux. No driver,
no SDK. Lines that do not start with { are human-readable notes
— skip them.
USB is telemetry, not the safety path
A host can be busy, an operating system can buffer, a cable can be unplugged, and a window can lose focus. Neither the keyboard output nor the serial line belongs in a safety path. That is what the stop pin is for: wire it into the machine’s protective-stop circuit and use the JSON to log, display and react. RobotStop is a supplementary protective measure and is not an emergency stop device.
If something looks wrong
| It is typing into the wrong window | That is what a keyboard does. Send H0\n to stop it typing and read the serial port instead. |
| Nothing gets typed | Some hosts ignore a new keyboard until you click into a text field. Check the serial port is still showing lines — if it is, the detector is fine. |
| No port appears | Charge-only USB-C cable. Swap it. |
| Gibberish | Wrong baud. It is 921600. |
| Nothing arrives | Normal when the room is quiet — lines come when somebody speaks. Also check nothing else has the port open. |
| One stop, then never again | latched is true. Send Z\n. |
Always match:false | Send ?\n and mail us what it prints, with a few of these lines. |
Anything else
Paste us the lines and tell us what you are building.