<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: circuitrocks</title>
    <description>The latest articles on DEV Community by circuitrocks (@circuitrocks).</description>
    <link>https://dev.to/circuitrocks</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3945699%2Fe80afa14-a3d3-4e2c-8279-d860e1f5ac93.png</url>
      <title>DEV Community: circuitrocks</title>
      <link>https://dev.to/circuitrocks</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/circuitrocks"/>
    <language>en</language>
    <item>
      <title>Build a Palm-Vein Biometric Door Lock with an ESP32 and IR Camera</title>
      <dc:creator>circuitrocks</dc:creator>
      <pubDate>Tue, 01 Sep 2026 04:06:37 +0000</pubDate>
      <link>https://dev.to/circuitrocks/build-a-palm-vein-biometric-door-lock-with-an-esp32-and-ir-camera-5he9</link>
      <guid>https://dev.to/circuitrocks/build-a-palm-vein-biometric-door-lock-with-an-esp32-and-ir-camera-5he9</guid>
      <description>&lt;p&gt;Clear a weekend and a bench, and here is the shopping list: an ESP32-WROOM-32E, a DFRobot dual-camera palm-vein module, a 5V relay board, a 12V solenoid lock, a 0.96-inch I2C OLED, and a separate barrel jack for the 12V rail. Sachin Soni of Techiesms put that exact stack on one custom PCB and ended up with a door lock that reads the veins inside your hand.&lt;/p&gt;

&lt;h3&gt;What the build actually does&lt;/h3&gt;

&lt;p&gt;Fingerprint readers get fooled by lifted prints. Face unlock gets fooled by a good photo. Palm-vein scanning sits in a harder category, because the pattern it reads is under your skin. The module floods your palm with near-infrared light at roughly 940nm. Haemoglobin in the veins swallows that wavelength while surrounding tissue bounces it back, so the camera sees a dark vein map against a bright background. Copying that pattern means imaging someone's palm without them noticing, which is a much taller order than dusting a doorknob for prints.&lt;/p&gt;

&lt;h3&gt;Wiring and firmware notes&lt;/h3&gt;

&lt;p&gt;The DFRobot sensor carries its own SoC, so the ESP32 never touches raw image data. Enrolment and matching both happen on the module, and only the verdict travels to the ESP32 over UART as a short serial message. On the ESP32 side that is two GPIO pins for RX and TX on a second hardware UART, plus SDA and SCL on GPIO 21 and 22 for the OLED at I2C address 0x3C. Watch your levels here: the ESP32 is a 3.3V part, so a 5V relay board wants an opto-isolated input or a small transistor to drive the coil. Keep the 12V solenoid on its own supply and share only ground. Skip that and the inrush current when the plunger fires will brown out the microcontroller in the middle of a match.&lt;/p&gt;

&lt;h3&gt;Where it stays honest&lt;/h3&gt;

&lt;p&gt;The biometrics hold up better than the enclosure will. Anyone who reaches the PCB can jump the relay contacts and walk straight in, and anyone who reaches the sensor cable can replay the approved byte on the UART line. Mount the board on the secure side of the door, run the sensor lead through a sealed grommet, and checksum the serial messages if you want the firmware half to match the hardware half. Soni's full walkthrough and PCB files are on &lt;a href="https://www.hackster.io/news/a-vein-scanning-biometric-door-lock-you-can-build-yourself-0478c6fa8f43" rel="noopener noreferrer"&gt;Hackster.io&lt;/a&gt;. Bench-test the whole chain on a loose solenoid before you cut a single hole in a real door.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://blog.circuit.rocks/build-a-palm-vein-biometric-door-lock-with-an-esp32-and-ir-camera" rel="noopener noreferrer"&gt;blog.circuit.rocks&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  esp32 #esp8266 #iot #wifi #circuitrocks
&lt;/h1&gt;

</description>
      <category>esp32</category>
      <category>biometrics</category>
      <category>doorlock</category>
      <category>sensors</category>
    </item>
    <item>
      <title>ATtiny816 PCB Business Card Runs 21 LEDs on Harvested NFC Power</title>
      <dc:creator>circuitrocks</dc:creator>
      <pubDate>Mon, 31 Aug 2026 22:07:03 +0000</pubDate>
      <link>https://dev.to/circuitrocks/attiny816-pcb-business-card-runs-21-leds-on-harvested-nfc-power-3n6o</link>
      <guid>https://dev.to/circuitrocks/attiny816-pcb-business-card-runs-21-leds-on-harvested-nfc-power-3n6o</guid>
      <description>&lt;p&gt;Battery-free is not the same thing as unpowered. A card you can tap against a phone and watch light up, with no cell to die and no port to charge, runs on energy the phone's own NFC field is already radiating. Wilson Harper built exactly that into a PCB business card, and the detail worth stealing is that it runs a real microcontroller off harvested power, not just a static tag.&lt;/p&gt;

&lt;h3&gt;What the card does&lt;/h3&gt;

&lt;p&gt;Tap it to a phone and 21 LEDs come alive. Harper started the project to learn KiCad and ended up with a credit-card-thin board carrying an NXP NTAG I2C Plus alongside a 3mm x 3mm ATtiny816. The NTAG chip is the clever half: on top of serving the record your phone reads, it routes surplus harvested DC out to external hardware, which is what keeps the ATtiny running. The ATtiny816 got picked for its QFN package and its 17 GPIOs, and thirty RoHS-compliant boards came back from JLCPCB.&lt;/p&gt;

&lt;h3&gt;The antenna is the hard part&lt;/h3&gt;

&lt;p&gt;A rectangular spiral fills the entire card, sized with STMicro's inductance calculator to land near 2.75uH so it resonates at 13.56MHz. No existing KiCad plug-in could draw that shape, so the repo ships a Python script that generates it. Two routing decisions keep the thing alive: no closed loop, and no ground plane, because eddy currents would otherwise swallow the field before the chip sees it. Six GPIO pins drive 20 Charlieplexed LEDs plus one indicator, and the firmware is bare-metal C clocked down to 1MHz to keep the flicker invisible. Every trace is mirrored onto the back silkscreen next to a block diagram and the BOM.&lt;/p&gt;

&lt;h3&gt;Build it yourself&lt;/h3&gt;

&lt;p&gt;Three exposed pads sit on the back at breadboard spacing, so programming happens over UPDI with a pogo-pin clip rather than a soldered header. A TVS diode guards the MCU against the static your wallet builds up. One gotcha is worth the price of admission: a Pico-based UPDI programmer produced nothing at all on the scope, and an Adafruit UPDI Friend worked on the first try, so budget for the known-good tool before you spend an evening probing. The tag itself was written with NXP TagWriter. A second revision with different LED colors and a button or two for arcade-style games is on the table.&lt;/p&gt;

&lt;p&gt;The full writeup, the antenna generator script, and the BOM are at &lt;a href="https://wilsonharper.net" rel="nofollow noopener noreferrer"&gt;wilsonharper.net&lt;/a&gt;. If you want to try the idea on a breadboard first, an NTAG I2C Plus breakout and any UPDI-programmable ATtiny will get you to the energy-harvesting part without waiting on a board order.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://blog.circuit.rocks/attiny816-pcb-business-card-runs-21-leds-on-harvested-nfc-power" rel="noopener noreferrer"&gt;blog.circuit.rocks&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  pcbdesign #kicad #electronics #hardwareengineering #circuitrocks
&lt;/h1&gt;

</description>
      <category>nfc</category>
      <category>attiny</category>
      <category>pcbdesign</category>
      <category>kicad</category>
    </item>
    <item>
      <title>An ATmega Robot Arm That Serves Badminton Shuttlecocks</title>
      <dc:creator>circuitrocks</dc:creator>
      <pubDate>Mon, 31 Aug 2026 09:07:02 +0000</pubDate>
      <link>https://dev.to/circuitrocks/an-atmega-robot-arm-that-serves-badminton-shuttlecocks-2jjo</link>
      <guid>https://dev.to/circuitrocks/an-atmega-robot-arm-that-serves-badminton-shuttlecocks-2jjo</guid>
      <description>&lt;h3&gt;What you'd need on the bench&lt;/h3&gt;

&lt;p&gt;A shuttlecock server breaks down into three subsystems you can price out separately: a feeder that isolates one shuttle at a time, a pair of counter-rotating wheels that grip and fling it, and a microcontroller keeping the timing honest. For a first attempt, budget an ATmega328P board, two motors with speed controllers, a 12V supply rated around 5A, a solenoid valve if you want a pneumatic gripper, and a hopper cut from acrylic. Everything after that is tuning.&lt;/p&gt;

&lt;p&gt;Travis Mitchell spent years circling this problem before landing on an unusual answer: bolt the job onto a retired industrial robot arm. He converted a Denso VS050, a compact 6-axis arm small enough to sit on a height-adjustable desk, and gave it two duties. First, pluck a fresh shuttlecock from the hopper with a pneumatic grabber. Second, feed it into the spinning discs that do the launching. Denso publishes a CAD model of the arm, which meant the mounting brackets could be designed against real geometry instead of caliper guesses.&lt;/p&gt;

&lt;h3&gt;The part that decides whether it works&lt;/h3&gt;

&lt;p&gt;Mitchell started with a Raspberry Pi Pico and switched to an ATmega AVR partway through. The reason was pin count and I/O behaviour, not raw speed: talking to an industrial arm means juggling handshake lines, limit signals, and valve triggers at the same time, and the AVR gave him the headroom. That is a useful gotcha for anyone planning a build around a Pico because it is cheap. Count your GPIO needs on paper first.&lt;/p&gt;

&lt;p&gt;The other make-or-break detail was the launch discs. Two wheels spinning at high speed have to be balanced against each other, and any material that stretches under load throws the shuttle off line. A rigid plastic disc with a silicone strip bonded to the rim ended up as the winning combination — grip from the silicone, dimensional stability from the disc underneath.&lt;/p&gt;

&lt;h3&gt;Where to take it next&lt;/h3&gt;

&lt;p&gt;Most makers do not have a spare Denso arm, but the launcher half of this project scales down cleanly. Two 775 DC motors, a pair of PWM-driven ESCs, and a gravity-fed chute will serve shuttles well enough to drill footwork, and the whole control loop fits in a few hundred lines on an Uno. Add an ultrasonic or IR sensor at the chute to confirm a shuttle actually dropped before firing, otherwise you get dry cycles that look like a jam. Watch the &lt;a href="https://hackaday.com/2026/08/30/making-a-robot-to-serve-some-mean-badminton-shuttlecocks/" rel="noopener noreferrer"&gt;full build writeup and video&lt;/a&gt;, then wire up two motors and a hall sensor on a breadboard and see how repeatable your throw speed is before you commit to a frame.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://blog.circuit.rocks/an-atmega-robot-arm-that-serves-badminton-shuttlecocks" rel="noopener noreferrer"&gt;blog.circuit.rocks&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  arduino #arduinoprojects #electronics #embedded #circuitrocks
&lt;/h1&gt;

</description>
      <category>robotics</category>
      <category>atmega</category>
      <category>arduino</category>
      <category>motorcontrol</category>
    </item>
    <item>
      <title>This ESP32 CHIP-8 Computer Runs on a Flame and a Stirling Engine</title>
      <dc:creator>circuitrocks</dc:creator>
      <pubDate>Mon, 31 Aug 2026 04:07:05 +0000</pubDate>
      <link>https://dev.to/circuitrocks/this-esp32-chip-8-computer-runs-on-a-flame-and-a-stirling-engine-5kh</link>
      <guid>https://dev.to/circuitrocks/this-esp32-chip-8-computer-runs-on-a-flame-and-a-stirling-engine-5kh</guid>
      <description>&lt;p&gt;Power is the quiet constraint on every portable build. You size a battery, budget your current draw, and then quietly decide what the project will never do. PicketCode went the other way and removed the battery entirely: this desktop machine runs on the heat of an open flame.&lt;/p&gt;

&lt;h3&gt;A Stirling engine as the power supply&lt;/h3&gt;

&lt;p&gt;A small Stirling engine sits over a burner. Heated air in the chamber expands and pushes a piston; a flywheel carries the cycle around while cooler air is pushed back in. The output shaft spins a small DC motor in reverse, so the motor acts as a dynamo rather than a load. A panel voltmeter sits in-line, which turns the whole rig into a live demo of the thermal-to-electrical chain. Everything downstream is ordinary hobby gear: an ESP32 dev board, an OLED, and a 16-key keypad.&lt;/p&gt;

&lt;h3&gt;Why 16 keys and not a keyboard&lt;/h3&gt;

&lt;p&gt;The ESP32 runs a CHIP-8 interpreter, a virtual machine written in the mid-1970s for exactly that layout: 16 hex keys, 0 through F. CHIP-8 asks for 4KB of addressable memory and a 64x32 monochrome display, and its programs conventionally load at address 0x200. That is a rounding error against a 240 MHz dual-core ESP32 with a few hundred KB of SRAM, and the mismatch is the reason the build works. A 1970s VM leaves so much headroom that the chip can sit at a low clock and still keep frame rate when the dynamo output sags. Whether a microcontroller counts as a computer is a fair argument, but this one has a CPU, memory, persistent storage, a display, and an input device, and the CHIP-8 homebrew scene is still shipping games for it.&lt;/p&gt;

&lt;h3&gt;Build it yourself&lt;/h3&gt;

&lt;p&gt;The electronics half is a weekend of breadboard work. An SSD1306 128x64 OLED goes on SDA and SCL, a 4x4 matrix keypad eats 8 GPIO (or one ADC pin if you build a resistor ladder), and the CHIP-8 core is a few hundred lines of C. The tricky part is the rail. A small dynamo gives you a wobbling, load-dependent voltage, so put a buck-boost regulator and a fat capacitor bank between it and the board, and switch the Wi-Fi radio off in software: those transmit bursts pull 250 mA and up, which will drop you below the ESP32 brownout threshold every time the flywheel stutters. Start with a bench supply, get CHIP-8 running first, then swap the flame in. Build notes and video are on the original writeup at &lt;a href="https://www.hackster.io/news/this-computer-lives-by-the-flame-5e7c38928335" rel="nofollow noopener noreferrer"&gt;Hackster&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://blog.circuit.rocks/this-esp32-chip-8-computer-runs-on-a-flame-and-a-stirling-engine" rel="noopener noreferrer"&gt;blog.circuit.rocks&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  esp32 #esp8266 #iot #wifi #circuitrocks
&lt;/h1&gt;

</description>
      <category>esp32</category>
      <category>chip8</category>
      <category>retrocomputing</category>
      <category>powersupply</category>
    </item>
    <item>
      <title>Wireless ESP32 Bike Brakes: ABS From Car Door Lock Actuators</title>
      <dc:creator>circuitrocks</dc:creator>
      <pubDate>Sun, 30 Aug 2026 22:06:21 +0000</pubDate>
      <link>https://dev.to/circuitrocks/wireless-esp32-bike-brakes-abs-from-car-door-lock-actuators-12bg</link>
      <guid>https://dev.to/circuitrocks/wireless-esp32-bike-brakes-abs-from-car-door-lock-actuators-12bg</guid>
      <description>&lt;p&gt;Cutting the cable on a bicycle brake sounds like a bad idea until you see what the ESP32 does with the freedom. Berm Peak strapped a radio link between the levers and the calipers of a fat-tire bike, and the result is a brake that can do anti-lock, adjustable bite point, and a parent-controlled speed limiter on a kid's bike across the trail.&lt;/p&gt;

&lt;p&gt;The mechanical trick is that the calipers are pulled by 12 V car door lock actuators instead of a hydraulic line. Those actuators are cheap, punchy, and completely wrong for the job out of the box, so the build went through several prototype rounds: better calipers, a steeper actuator mounting angle, and longer lever arms to trade the actuator's short throw for usable clamping force. The stock caliper return springs stayed in place and do the releasing.&lt;/p&gt;

&lt;h3&gt;What the radio link actually does&lt;/h3&gt;

&lt;p&gt;Each lever, each caliper, and the handlebar display runs its own ESP32, all talking on 2.4 GHz. ESP-NOW is the sensible protocol here because it skips the Wi-Fi association handshake entirely and pushes a payload of up to 250 bytes straight to a peer MAC address, with round trips in the low single-digit milliseconds. That latency budget is what makes ABS possible: read wheel speed, notice lockup, pulse the actuator, repeat.&lt;/p&gt;

&lt;p&gt;Two gotchas will bite you here. The ESP32 runs 3.3 V logic and the actuators want 12 V at a few amps, so an H-bridge or a MOSFET driver sits between them, never a bare GPIO pin. And a brake that fails silent is not a brake, so the caliper node needs a watchdog: if no packet arrives within a set window, clamp by default rather than coast.&lt;/p&gt;

&lt;h3&gt;Build a safer version on the bench&lt;/h3&gt;

&lt;p&gt;Do not put your first attempt on a bike. Wire two ESP32 dev boards on a breadboard, put a pull-up on the lever switch, and drive a 5 V linear actuator or a hobby servo as a stand-in load while you tune the mapping curve. The espressif ESP-NOW library ships with the Arduino core, so a working transmitter sketch is about thirty lines. Add a hall sensor and a magnet on the wheel to get the RPM signal your ABS loop needs.&lt;/p&gt;

&lt;p&gt;An ESP32 dev board runs around PHP 350 at circuit.rocks, and a hall sensor module is under PHP 100, so a bench rig costs less than a single hydraulic brake bleed kit. Watch the full build at &lt;a href="https://hackaday.com/2026/08/29/fat-tire-brakes-get-wireless-upgrade/" rel="noopener noreferrer"&gt;Hackaday's writeup&lt;/a&gt;, then start with the watchdog before you touch the actuator code.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://blog.circuit.rocks/wireless-esp32-bike-brakes-abs-from-car-door-lock-actuators" rel="noopener noreferrer"&gt;blog.circuit.rocks&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  esp32 #esp8266 #iot #wifi #circuitrocks
&lt;/h1&gt;

</description>
      <category>esp32</category>
      <category>espnow</category>
      <category>actuators</category>
      <category>diyelectronics</category>
    </item>
    <item>
      <title>Banana Pi's BPI-AI2N Packs 15 TOPS of Vision AI Into a Module</title>
      <dc:creator>circuitrocks</dc:creator>
      <pubDate>Sun, 30 Aug 2026 09:07:50 +0000</pubDate>
      <link>https://dev.to/circuitrocks/banana-pis-bpi-ai2n-packs-15-tops-of-vision-ai-into-a-module-4e8f</link>
      <guid>https://dev.to/circuitrocks/banana-pis-bpi-ai2n-packs-15-tops-of-vision-ai-into-a-module-4e8f</guid>
      <description>&lt;p&gt;Sending every camera frame to a cloud API costs you a round trip. You pay for latency, you pay per call, and every frame of your lab or your factory floor leaves the building. Banana Pi's new BPI-AI2N aims at that problem directly: a system-on-module that runs the inference locally and hands your carrier board a result instead of an image.&lt;/p&gt;

&lt;h3&gt;What Banana Pi actually shipped&lt;/h3&gt;

&lt;p&gt;The BPI-AI2N is a 69.6 x 45 mm core module built around the Renesas RZ/V2N, sold with a separate carrier board whose layout borrows heavily from NVIDIA's Jetson dev kits. Module and carrier talk through a 260-pin SO-DIMM connector, so you can prototype on the reference carrier now and design your own PCB later without redoing the compute side. Banana Pi published schematics, assembly files, Linux images, and both Yocto and Armbian support at launch, which matters a lot when your thesis panel asks to see the source.&lt;/p&gt;

&lt;h3&gt;The numbers under the heatsink&lt;/h3&gt;

&lt;p&gt;A quad-core Arm Cortex-A55 at 1.8 GHz runs Linux while Renesas' DRP-AI3 accelerator does the model work: 15 TOPS on sparse networks, 4 TOPS on dense ones. Read that gap carefully, because the headline figure assumes you have already pruned and quantized your model. A Cortex-M33 core sits alongside for real-time tasks, and a Mali-G31 GPU covers OpenGL ES 3.2. The module carries 8 GB of LPDDR4x, 32 GB of eMMC, 64 MB of SPI flash, and two Gigabit Ethernet controllers. Banana Pi rates it from -40°C to 85°C, which is the spec that decides whether your build survives a rooftop enclosure or an un-airconditioned shop.&lt;/p&gt;

&lt;h3&gt;Build it yourself&lt;/h3&gt;

&lt;p&gt;The carrier board exposes two MIPI CSI camera inputs, a MIPI DSI display connector, an M.2 Key-M slot for an NVMe SSD, a microSD slot, two USB 3.0 Type-A ports, a USB-C port for OTG and power, and a 40-pin GPIO header that will feel familiar to anyone who has wired a sensor to a Raspberry Pi. A realistic first build: one CSI camera over a conveyor or a seedling tray, inference on-module, and results published over MQTT from the second Ethernet port so the camera network stays off your campus LAN. If you hang I2C sensors on that 40-pin header, check the pull-ups first, because the module runs 3.3 V logic and most 5 V breakout boards need a level shifter.&lt;/p&gt;

&lt;p&gt;Pricing is $293 for the BPI-AI2N-Core and $29 for the carrier, so this is a capstone-budget board rather than a weekend impulse buy. If you are scoping an edge vision project around it, size your model against the 4 TOPS dense number, not the 15 TOPS headline. Full spec breakdown at &lt;a href="https://www.hackster.io/news/banana-pi-launches-15-tops-board-for-vision-ai-applications-4898762fcfa6" rel="noopener noreferrer"&gt;Hackster&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://blog.circuit.rocks/banana-pis-bpi-ai2n-packs-15-tops-of-vision-ai-into-a-module" rel="noopener noreferrer"&gt;blog.circuit.rocks&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  edgeai #tinyml #machinelearning #ai #circuitrocks
&lt;/h1&gt;

</description>
      <category>bananapi</category>
      <category>edgeai</category>
      <category>computervision</category>
      <category>singleboardcomputer</category>
    </item>
    <item>
      <title>WeatherXM D2 Mesh: A Solar LoRa Weather Station With No Wi-Fi</title>
      <dc:creator>circuitrocks</dc:creator>
      <pubDate>Sun, 30 Aug 2026 04:07:24 +0000</pubDate>
      <link>https://dev.to/circuitrocks/weatherxm-d2-mesh-a-solar-lora-weather-station-with-no-wi-fi-3091</link>
      <guid>https://dev.to/circuitrocks/weatherxm-d2-mesh-a-solar-lora-weather-station-with-no-wi-fi-3091</guid>
      <description>&lt;p&gt;A rain gauge sitting 6 km up a hill has no business needing a Wi-Fi password. That distance kills 2.4 GHz outright, and paying a monthly SIM plan for one sensor is hard to justify. WeatherXM's new D2 Mesh takes the third road: it hops readings home over a LoRa mesh, running on a small solar panel and nothing else.&lt;/p&gt;

&lt;h3&gt;What the D2 Mesh actually does&lt;/h3&gt;

&lt;p&gt;The kit is a complete off-grid station. One unit logs temperature, humidity, barometric pressure, rainfall, wind speed and direction, gusts, light, solar radiation, and UV. An SX1262 transceiver pushes those observations several kilometres with clear line of sight, and multi-hop routing stretches it further. Drop a second solar node on a ridge and you relay past the terrain that blocked the first link.&lt;/p&gt;

&lt;p&gt;The other half of the kit is the gateway: an ESP32-S3, its own SX1262 radio, and a 4-inch touchscreen showing live readings. History lands on a microSD card, while local MQTT and REST endpoints hand the data straight to Home Assistant or whatever you self-host. WeatherXM's cloud stays optional rather than acting as a gate.&lt;/p&gt;

&lt;h3&gt;What's inside&lt;/h3&gt;

&lt;p&gt;The station runs an nRF5340 dual-core MCU with 16 MB of external flash, a u-blox MAX-M10S GNSS receiver for positioning, and a QMI8658A accelerometer and gyro that flags tilt, tampering, or somebody walking off with the mast. Power comes from a 6.5 V, 60 mA panel backed by batteries and a supercapacitor. A single firmware image speaks WeatherXM's own protocol, Meshtastic, or MeshCore, and the active transport switches at runtime with no reflash. Reporting adapts as well: hourly when conditions sit flat, every 5 minutes once the barometer starts moving.&lt;/p&gt;

&lt;h3&gt;Build it yourself&lt;/h3&gt;

&lt;p&gt;You don't need the kit to copy the idea. A BME280 on I2C (SDA/SCL, plus 4.7 kOhm pull-ups if your breakout leaves them off) and an RFM95 or E22 SX1262 module wired to an ESP32 gets you a working LoRa sensor node on a breadboard. RadioLib drives the radio. A tipping-bucket rain gauge is just a reed switch, so give it one GPIO with an interrupt and debounce it in software rather than adding an RC network. The gotcha most people hit is duty cycle: at SF12 a chatty node blows past regional airtime limits fast, so transmit less often and pack more readings into each packet.&lt;/p&gt;

&lt;p&gt;WeatherXM plans to publish schematics, the bill of materials, packet specs, and firmware sources before its Crowd Supply campaign opens. Full details are in the &lt;a href="https://www.hackster.io/news/track-weather-anywhere-with-weatherxm-s-new-solar-powered-lora-station-484fccb8053a" rel="noopener noreferrer"&gt;Hackster write-up&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://blog.circuit.rocks/weatherxm-d2-mesh-a-solar-lora-weather-station-with-no-wi-fi" rel="noopener noreferrer"&gt;blog.circuit.rocks&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  esp32 #esp8266 #iot #wifi #circuitrocks
&lt;/h1&gt;

</description>
      <category>lora</category>
      <category>esp32</category>
      <category>weatherstation</category>
      <category>iot</category>
    </item>
    <item>
      <title>An Arduino Nano ESP32 Robot Flips All 666 Pixels of This Display</title>
      <dc:creator>circuitrocks</dc:creator>
      <pubDate>Sat, 29 Aug 2026 22:07:28 +0000</pubDate>
      <link>https://dev.to/circuitrocks/an-arduino-nano-esp32-robot-flips-all-666-pixels-of-this-display-21pk</link>
      <guid>https://dev.to/circuitrocks/an-arduino-nano-esp32-robot-flips-all-666-pixels-of-this-display-21pk</guid>
      <description>&lt;p&gt;Mechanical displays are having a moment. Flip-disc panels, split-flaps, and solenoid-driven pixel walls keep turning up at maker fairs, mostly because a display you can &lt;em&gt;hear&lt;/em&gt; beats one that only glows. They all share one expensive habit, though: every single pixel needs its own actuator. Zimm's P.A.R. (Pixel Art Robot) throws that assumption out, and the workaround is worth stealing for your own matrix project.&lt;/p&gt;

&lt;h3&gt;One robot instead of 666 solenoids&lt;/h3&gt;

&lt;p&gt;A conventional flip-disc pixel pairs a permanent magnet with a solenoid. Pulse the coil one way and the disc shows its light face; reverse the polarity and the dark face comes up. That scales fine for eight pixels. P.A.R. has 666 square discs, which Zimm calls squisks, arranged in a 37 by 18 grid. Built the usual way, that is 666 coils, 666 driver channels, and a power budget nobody wants to size.&lt;/p&gt;

&lt;p&gt;So the panel got a gantry instead. A two-axis robot rides behind the display like a pen plotter, driven by an Arduino Nano ESP32. A servo pushes a pin out to prod each squisk and flip it, while a color sensor reads whether that tile is currently light or dark. The robot only touches the squisks that actually need to change, and it can prod a stubborn one twice.&lt;/p&gt;

&lt;h3&gt;The tradeoff, and why it lands&lt;/h3&gt;

&lt;p&gt;Refresh time goes from milliseconds to minutes. That would be fatal for a train departure board. For an art piece it is the whole appeal, because you get to watch the image assemble tile by tile. The Nano ESP32 has Wi-Fi on the module, so Zimm put P.A.R. on the internet: a web form takes a drawing from anyone, queues it, and the robot renders it. Past submissions sit in a public gallery.&lt;/p&gt;

&lt;h3&gt;What to try next&lt;/h3&gt;

&lt;p&gt;The transferable idea here is closed-loop state sensing. Most matrix builds fire commands blind and trust that the hardware agreed. Reading a pixel back with a color sensor over I2C turns an open-loop guess into something self-correcting, which helps on any actuator array where a missed step is invisible until someone looks at it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Start at an 8 by 8 grid, not 666 tiles. One hobby servo on a GPIO pin and a TCS34725-class color sensor is a weekend of gantry math and a defensible capstone demo.&lt;/li&gt;
&lt;li&gt;The Nano ESP32 runs 3.3V logic on its GPIO, so check your servo driver and sensor breakout before wiring SDA and SCL straight across.&lt;/li&gt;
&lt;li&gt;Watch the I2C pull-ups if you chain the color sensor with anything else on the bus. Two breakouts each carrying their own 4.7k resistors will drag the line harder than you planned.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Zimm's full write-up, including the submission site, is on Hackster: &lt;a href="https://www.hackster.io/news/this-flip-squisk-display-is-nothing-like-a-flip-disc-display-864537b23f5f" rel="noopener noreferrer"&gt;This Flip-Squisk Display Is Nothing Like a Flip-Disc Display&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://blog.circuit.rocks/an-arduino-nano-esp32-robot-flips-all-666-pixels-of-this-display" rel="noopener noreferrer"&gt;blog.circuit.rocks&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  arduino #arduinoprojects #electronics #embedded #circuitrocks
&lt;/h1&gt;

</description>
      <category>arduino</category>
      <category>esp32</category>
      <category>servo</category>
      <category>sensors</category>
    </item>
    <item>
      <title>Never Buy the Same L298N Twice: An Arduino UNO Q Parts Tracker</title>
      <dc:creator>circuitrocks</dc:creator>
      <pubDate>Sat, 29 Aug 2026 09:07:50 +0000</pubDate>
      <link>https://dev.to/circuitrocks/never-buy-the-same-l298n-twice-an-arduino-uno-q-parts-tracker-12nd</link>
      <guid>https://dev.to/circuitrocks/never-buy-the-same-l298n-twice-an-arduino-uno-q-parts-tracker-12nd</guid>
      <description>&lt;p&gt;You need one L298N dual H-bridge to spin a motor. A pack of 5 costs barely more than a single module, so you buy the pack, use one, and drop the rest in the parts bin. Do that three times and suddenly you own 8 of them. Akashdeep Singh of The Wrench got tired of that arithmetic and built a bench appliance that answers one question before he opens a shopping cart: do I already have this?&lt;/p&gt;

&lt;h3&gt;A parts database with a knob on it&lt;/h3&gt;

&lt;p&gt;The device sits on the workbench and shows a full-color TFT list of components sorted by category. Scroll to the drivers group, see that 8 L298N boards are already on the shelf, and the order never happens. Take one off the shelf and a twist of the dial drops the count to 7. Buy another pack and the count goes back up. No phone, no spreadsheet tab, no app that you forget to open. The whole thing lives in a printed enclosure with an unapologetically iPod-flavored shape.&lt;/p&gt;

&lt;h3&gt;What is actually inside&lt;/h3&gt;

&lt;p&gt;The host board is an Arduino UNO Q, which carries a Linux-capable application processor next to a companion microcontroller. That split matters for this build: the parts database, the search, and the interface all run as ordinary Linux software instead of being squeezed into a few kilobytes of MCU RAM. A flat file or a small SQLite table holds every part, its category, and its quantity, and rewriting a record is a normal file write rather than an EEPROM wear calculation.&lt;/p&gt;

&lt;p&gt;Input is a Modulino Knob, an encoder-plus-button node that talks I2C over a Qwiic-style connector, so the interface adds zero solder joints. The screen rides on SPI. Between the two buses the wiring stays short, which is what makes a project like this survive on a crowded bench.&lt;/p&gt;

&lt;h3&gt;Build it yourself&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Brain:&lt;/strong&gt; an Arduino UNO Q, or any Linux SBC you already own. A Raspberry Pi Zero 2 W runs the same Python and the same SQLite file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Screen:&lt;/strong&gt; a 2.4-inch SPI TFT on an ST7789 or ILI9341 controller. Check whether your module is 3.3 V-only before wiring it to a 5 V board.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Input:&lt;/strong&gt; a Modulino Knob on SDA/SCL, or a plain EC11 encoder on two GPIO pins with 10k pull-ups.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data:&lt;/strong&gt; three columns are enough. Category, part name, quantity.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The tricky part is not the hardware, it is discipline: the count is only correct if you turn the dial every time you pull a part. Start the database with the components you reach for weekly, not with all 200 items in the bin. If you want the original build notes, Singh's write-up is on &lt;a href="https://www.hackster.io/news/this-homemade-device-prevents-duplicate-parts-orders-cd981ec67478" rel="nofollow noopener noreferrer"&gt;Hackster&lt;/a&gt;, and the &lt;a href="https://www.st.com/resource/en/datasheet/l298.pdf" rel="nofollow noopener noreferrer"&gt;L298 datasheet&lt;/a&gt; is worth a read while you count how many you own: 2 channels, up to 2 A each, and a motor supply that tolerates 35 V.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://blog.circuit.rocks/never-buy-the-same-l298n-twice-an-arduino-uno-q-parts-tracker" rel="noopener noreferrer"&gt;blog.circuit.rocks&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  arduino #arduinoprojects #electronics #embedded #circuitrocks
&lt;/h1&gt;

</description>
      <category>arduino</category>
      <category>unoq</category>
      <category>inventory</category>
      <category>i2c</category>
    </item>
    <item>
      <title>A Parody Apple Laptop Reborn: The RP2350 Mactini Actually Works</title>
      <dc:creator>circuitrocks</dc:creator>
      <pubDate>Sat, 29 Aug 2026 04:08:19 +0000</pubDate>
      <link>https://dev.to/circuitrocks/a-parody-apple-laptop-reborn-the-rp2350-mactini-actually-works-pmn</link>
      <guid>https://dev.to/circuitrocks/a-parody-apple-laptop-reborn-the-rp2350-mactini-actually-works-pmn</guid>
      <description>&lt;p&gt;Joke hardware keeps turning into a serious way to learn embedded firmware. Makers have spent the last few years rebuilding gadgets that only ever existed in ads, films and cartoons, and the results keep landing harder than the punchline. A fake product hands you a fixed spec sheet you cannot argue with, which is exactly the constraint most hobby projects lack. Tucker Osman's Mactini is the sharpest example yet, and its parts list reads like a semester of coursework.&lt;/p&gt;

&lt;h3&gt;The build&lt;/h3&gt;

&lt;p&gt;The Mactini began as a spoof Apple commercial nearly 20 years ago, advertising a computer so small it shipped with a single input key. Osman built the real thing around a Waveshare RP2350 board, a color SPI display, a heap of salvaged parts and a printed shell. Speakers pulled from dead iPads handle audio, driven by an amplifier board harvested from a water-damaged security camera. Even the illuminated logo reuses diffuser layers cut out of broken third-generation iPod nano screens.&lt;/p&gt;

&lt;p&gt;The one-key interface is the clever bit. Instead of a tactile switch, Osman made a capacitive pad from conductive filament, then wrote firmware that measures how long each press lasts and how much time passes between taps, sorting every interval into short, medium or long. When you pause, the finished rhythm is matched against a lookup table that resolves to a letter, a punctuation mark or a system command. Morse code with extra steps, and it works.&lt;/p&gt;

&lt;h3&gt;The technical takeaway&lt;/h3&gt;

&lt;p&gt;Two decisions here are worth stealing for your own project. Pushing every pixel through the CPU choked the display, so Osman moved screen writes to DMA and let the transfer run in the background while the cores got on with other work. Then, once gesture recognition, rendering and audio all shared one super loop, input lag crept in; splitting them into separate FreeRTOS tasks cleared it up. The RP2350 has headroom for that approach, with dual Cortex-M33 cores at 150 MHz, 520 KB of on-chip SRAM and 12 PIO state machines ready to bit-bang whatever protocol your display expects.&lt;/p&gt;

&lt;p&gt;The ceiling shows too. The chip has no hardware video decoding, so a 90-second clip had to be converted to Motion JPEG, and it plays back at 12 fps.&lt;/p&gt;

&lt;h3&gt;What to try next&lt;/h3&gt;

&lt;p&gt;You do not need the whole Mactini to get the lesson out of it. Wire a 1.3-inch SPI display to a Pico 2, render a frame counter inside a plain loop, then move the buffer transfer to DMA and time both versions. The difference is obvious on a scope or even a serial print. Add a second task under FreeRTOS after that and watch the jitter drop. If your screen stays dark, check that CS and DC sit on the pins your driver library actually expects, because that one costs every student an afternoon. Full build writeup at &lt;a href="https://www.hackster.io/news/the-apple-mactini-just-became-a-real-computer-f481b29e9972" rel="noopener noreferrer"&gt;Hackster&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://blog.circuit.rocks/a-parody-apple-laptop-reborn-the-rp2350-mactini-actually-works" rel="noopener noreferrer"&gt;blog.circuit.rocks&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  maker #electronics #diy #engineering #circuitrocks
&lt;/h1&gt;

</description>
      <category>rp2350</category>
      <category>raspberrypipico</category>
      <category>freertos</category>
      <category>spidisplay</category>
    </item>
    <item>
      <title>Build a Digital Nose: an SGP30 Sensor That Sniffs Out Spoiled Milk</title>
      <dc:creator>circuitrocks</dc:creator>
      <pubDate>Fri, 28 Aug 2026 22:08:02 +0000</pubDate>
      <link>https://dev.to/circuitrocks/build-a-digital-nose-an-sgp30-sensor-that-sniffs-out-spoiled-milk-54jm</link>
      <guid>https://dev.to/circuitrocks/build-a-digital-nose-an-sgp30-sensor-that-sniffs-out-spoiled-milk-54jm</guid>
      <description>&lt;p&gt;A carton of milk that smells fine to one person can smell off to another, and if a cold has knocked out your nose entirely you get no vote at all. Adafruit's freshness checker turns that judgment call into a number on a screen, and the whole build is one Saturday afternoon of wiring and CircuitPython.&lt;/p&gt;

&lt;h3&gt;What the build actually does&lt;/h3&gt;

&lt;p&gt;The device pairs an SGP30 air-quality sensor with an Adafruit CLUE. The SGP30 reports two channels: total volatile organic compounds in ppb, and an equivalent CO2 figure in ppm, both derived from a heated metal-oxide element. Spoiling milk throws off VOCs as bacteria break down lactose and fat, so the TVOC number climbs as the carton ages. The CLUE's 240x240 IPS screen shows the reading, and its nRF52840 runs the whole loop in CircuitPython with no laptop attached.&lt;/p&gt;

&lt;p&gt;The experiment in the guide is the honest part: fresh milk against milk deliberately left out, same sensor, same headspace over the carton. That comparison matters more than any single reading, because the SGP30 carries no absolute calibration for "spoiled." You are watching a delta, not reading a verdict.&lt;/p&gt;

&lt;h3&gt;Parts and cost reality&lt;/h3&gt;

&lt;p&gt;The SGP30 talks I2C at address 0x58, so it comes down to four wires: SDA, SCL, 3.3V, GND. The breakout carries its own regulator and pull-ups, so you can hang it off a 5V board without level shifting. Two gotchas worth knowing before you solder anything: the sensor needs roughly 15 seconds after power-up before its output means anything, and its baseline algorithm expects a steady 1 Hz sample rate. Poll it irregularly and the eCO2 figure drifts. The driver lets you save a baseline after 12 hours of running and reload it on boot, which is the difference between a demo and something you trust.&lt;/p&gt;

&lt;p&gt;You do not need a CLUE for this. An ESP32 with a 0.96" 128x32 OLED covers the same job on a breadboard for a fraction of the cost, and the I2C wiring is identical. To rehearse the pattern while the gas sensor is still in transit, a BME280 uses the same four wires and the same import style in code.&lt;/p&gt;

&lt;h3&gt;Spend your Sunday on this&lt;/h3&gt;

&lt;p&gt;Log TVOC every 10 minutes against one carton for three days and plot the curve. That chart is a defensible data set for a science fair board or an ECE instrumentation report, and it costs one sensor plus patience. Full wiring diagram and code live at &lt;a href="https://learn.adafruit.com/digital-nose-gas-sensor-milk-freshness-checker" rel="noopener noreferrer"&gt;learn.adafruit.com/digital-nose-gas-sensor-milk-freshness-checker&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://blog.circuit.rocks/build-a-digital-nose-an-sgp30-sensor-that-sniffs-out-spoiled-milk" rel="noopener noreferrer"&gt;blog.circuit.rocks&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  sensors #iot #electronics #dataacquisition #circuitrocks
&lt;/h1&gt;

</description>
      <category>sensors</category>
      <category>sgp30</category>
      <category>circuitpython</category>
      <category>i2c</category>
    </item>
    <item>
      <title>A XIAO ESP32-S3 Clock Hiding Inside a Fake Linksys WRT Router</title>
      <dc:creator>circuitrocks</dc:creator>
      <pubDate>Fri, 28 Aug 2026 09:10:38 +0000</pubDate>
      <link>https://dev.to/circuitrocks/a-xiao-esp32-s3-clock-hiding-inside-a-fake-linksys-wrt-router-3mh5</link>
      <guid>https://dev.to/circuitrocks/a-xiao-esp32-s3-clock-hiding-inside-a-fake-linksys-wrt-router-3mh5</guid>
      <description>&lt;p&gt;Desk clocks built out of dead consumer hardware have quietly turned into their own genre. Makers have packed displays into old cable modems, rotary phones, and rack switches, and the reason is always the same: the shell already looks like it belongs on a shelf, so the board inside can stay tiny. Glen Akins' newest build sits right in that lane, rebuilding the blue-and-black Linksys WRT router of the mid-2000s as a network clock that never needs setting.&lt;/p&gt;
&lt;h3&gt;The build itself&lt;/h3&gt;
&lt;p&gt;Akins started from an earlier Ars Technica clock that ran on a Raspberry Pi Zero 2 W, then dropped the Linux board for a Seeed Studio XIAO ESP32-S3. That module is 21 x 17.5 mm, carries a dual-core 240 MHz chip with 8 MB of PSRAM, and wakes up in under a second instead of booting a full OS just to read the time. Digits come from a large seven-segment LED backpack sitting behind a semi-translucent acrylic window, and a vinyl logo on the lid finishes the disguise. The time itself arrives over NTP on the LAN, so the clock is right the instant Wi-Fi associates and stays right after a power cut.&lt;/p&gt;
&lt;h3&gt;The part worth stealing&lt;/h3&gt;
&lt;p&gt;Wi-Fi provisioning is the real lesson here. A headless ESP32 has no keyboard, so Akins wired a button through a QWIIC connector to kick the board into access point mode. You join that temporary AP from a phone, hand over your SSID and password, and the board reboots onto the real network. QWIIC is just I2C at 3.3 V on a 4-pin JST-SH connector, which means the same port style feeds the HT16K33 display driver at address 0x70. Two devices, one bus, no extra holes drilled in the enclosure. If you have ever fought a captive portal sketch on a breadboard, that button-plus-AP pattern is the shortcut.&lt;/p&gt;
&lt;h3&gt;What to try next&lt;/h3&gt;
&lt;p&gt;Start smaller than a full router replica. Wire a XIAO ESP32-S3 to any I2C display, pull the SDA and SCL lines to 3.3 V through 4.7k pull-ups if your module lacks them, and get NTP working with the Arduino &lt;code&gt;configTime()&lt;/code&gt; call before you touch CAD. Set your offset to 28800 seconds for Manila time and skip the daylight saving string entirely. Once the digits are correct, the enclosure becomes the fun part rather than the blocker. Akins' full write-up and photos are on &lt;a href="https://www.hackster.io/news/that-s-no-router-that-s-a-clock-9fc123272f31" rel="noopener noreferrer"&gt;Hackster&lt;/a&gt;, and a XIAO ESP32-S3 plus a seven-segment backpack will run you well under PHP 1,500 at circuit.rocks.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://blog.circuit.rocks/a-xiao-esp32-s3-clock-hiding-inside-a-fake-linksys-wrt-router" rel="noopener noreferrer"&gt;blog.circuit.rocks&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  esp32 #esp8266 #iot #wifi #circuitrocks
&lt;/h1&gt;

</description>
      <category>esp32</category>
      <category>xiaoesp32s3</category>
      <category>ntpclock</category>
      <category>wifi</category>
    </item>
  </channel>
</rss>
