When building full-stack IoT solutions, finding engineers who understand both React dashboards and bare-metal microcontrollers is incredibly rare.
At Noisy Atom, we’ve found that Espruino—a JavaScript interpreter for microcontrollers—is the perfect bridge.
Writing JavaScript for the Edge
With Espruino, front-end developers can write familiar syntax and interact with physical sensors using event-driven logic, which perfectly mirrors how JavaScript works in the browser.
Here is how simple it is to toggle an LED based on a hardware button press using Espruino:
// Define the hardware pins
const BUTTON_PIN = NodeMCU.D3;
const LED_PIN = NodeMCU.D4;
// Set up the button to trigger on the rising edge
setWatch(function(e) {
console.log("Button was pressed at: " + e.time);
// Read current state of LED and flip it
const currentState = digitalRead(LED_PIN);
digitalWrite(LED_PIN, !currentState);
}, BUTTON_PIN, { repeat: true, edge: 'rising', debounce: 50 });
console.log("Waiting for button press...");
Event-Driven Hardware
Unlike traditional Arduino sketches that constantly loop (polling), Espruino deeply embraces asynchronous, event-driven programming. When the device isn’t handling an event (like a button press or a network request), it automatically goes to sleep, drastically reducing power consumption for our remote battery-powered deployments.