

Custom PCB sensor node using ESP8266, KiCad, MQTT/Wi-Fi telemetry, and cloud dashboard data reporting.
- Size
- 68.6 × 53.3 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 23
- Nets
- 36
- Pads
- 74
- Tracks, vias
- 80, 0
- Routed
- Yes
- KiCad
- KiCad 9.0 (file 20241229)
- Created
- 10 Jun 2026
- Updated
- 19 Sep 2026
Overview
Shield is an open-source printed circuit board by DestinyU7, from the DestinyU7/iot-sensor-node-pcb repository on GitHub. It is a 2-layer board of 68.6 × 53.3 mm with 23 parts on 36 nets, routed with 80 tracks and 0 vias.
Its parts include 8 resistors, 5 connectors, 3 capacitors, 2 diodes and 1 IC. It belongs with the home automation and IoT and radio and wireless boards and the ESP8266 boards of this library.
README
README.mdIoT Sensor Node — Custom Arduino Shield PCB
A two-layer PCB designed from scratch in KiCad, fabricated at JLCPCB, hand-assembled, and running firmware that publishes live temperature telemetry to a cloud dashboard over Wi-Fi.
Overview
University of Delaware coursework: ELEG 298, ECE Design Challenges (Spring 2025). My first board taken end to end — schematic capture through layout, design rule check, Gerber generation, fabrication order, assembly, and bring-up.
The board is an Arduino Uno shield carrying a DHT20 temperature/humidity sensor interface, an ESP-01S Wi-Fi module on a UART link, status LEDs, and the supporting passives. Firmware reads temperature, classifies the trend as rising, falling or stable, signals that trend on two LEDs, and publishes each reading to an Adafruit IO feed over Wi-Fi.
Left: the two-layer layout in KiCad. Right: the fabricated board hand-assembled, with the ESP-01S module fitted and a Grove sensor attached.
Hardware
| Function | Part |
|---|---|
| Host | Arduino Uno (shield form factor) |
| Wi-Fi | ESP-01S (ESP8266) over software UART |
| Sensor | DHT20 temperature / humidity (I²C, Grove connector) |
| Indicators | 2 × LED with 1 kΩ current-limiting resistors |
| Power | Bulk 1000 µF electrolytics + 0.1 µF decoupling |
| Level/pull-ups | 1 kΩ / 2 kΩ divider network, 4.7 kΩ I²C pull-ups |
Two copper layers (F_Cu, B_Cu), silkscreen on both sides, mounting holes, and an ICSP header passthrough.
Software / Tools
- KiCad — schematic capture, PCB layout, DRC, Gerber and drill file export
- Arduino C++ —
SoftwareSerial, Grove DHT library - JLCPCB — fabrication
- Adafruit IO — cloud feed and dashboard
- DigiKey-sourced BOM with costed line items
Architecture
flowchart LR
DHT["DHT20 sensor<br/>temperature + humidity"] -->|I2C| UNO
UNO["Arduino Uno<br/>trend classifier"] -->|software UART<br/>9600 baud| ESP["ESP-01S<br/>ESP8266 Wi-Fi"]
UNO --> LEDS["Red / green LEDs<br/>trend indication"]
ESP -->|Wi-Fi| AIO["Adafruit IO<br/>temperature-feed"]
AIO --> DASH["Cloud dashboard"]The Uno drives the ESP-01S through a simple text command protocol over software serial (wifi_ssid=, wifi_pass=, io_user=, io_key=, setup_io, setup_pubfeed=, send_data=), with per-command timeouts and a hardware reset line to bring the module up cleanly at boot.
Key Engineering Work
Full PCB workflow, not just a schematic. Component placement, two-layer routing with 45° trace angles and no right-angle bends, an 8 mil minimum line/space rule, silkscreen reference designators and polarity markers on both sides, DRC to zero errors and zero airwires, then Gerber + drill export and a fabrication-portal preview check before ordering. The Gerber set that was actually sent to the fab is in hardware/gerbers/.
Designing for hand assembly. The board mixes through-hole and SMD parts, with part choice and spacing driven by what could realistically be soldered by hand and reworked if wrong — a constraint that shaped the layout as much as the electrical requirements did.
Trend classification instead of raw reporting. Firmware compares each reading against the previous one with a ±0.1 °C tolerance band and tracks the last rising value, so the LEDs show direction of change rather than flickering on sensor noise, plus a stable-band indication between 22–24 °C.
Reset sequencing. The ESP-01S is held in reset at boot and released deliberately before any command is sent, which avoids the race where configuration commands are transmitted before the module's UART is listening.
Testing / Validation
- DRC and airwire check in KiCad before Gerber export; fabrication-portal preview reviewed against the intended layout.
- Continuity and power-rail checks on the bare board before any active parts were fitted.
- Incremental bring-up — power, then LEDs, then sensor over I²C, then the ESP-01S link, then cloud publishing.
- End-to-end verification by watching readings appear on the Adafruit IO dashboard while warming the sensor by hand and confirming the LED trend indication matched.
Repository Structure
firmware/ iot_sensor_node.ino - Arduino firmware
hardware/
kicad/ schematic and two-layer board layout
gerbers/ fabrication set sent to JLCPCB (copper, mask, silk, paste, drill)
docs/ final project design report
media/ layout render and photo of the assembled boardSecurity Note
The Adafruit IO key and Wi-Fi credentials are redacted from the committed firmware (IO_KEY = "REPLACE_WITH_ADAFRUIT_IO_KEY"). Supply your own credentials to run it. No live key appears anywhere in this repository or its commit history.
What I Learned
The layout was where the real learning was. A schematic that passes electrical rules can still be a board that is painful to assemble, hard to probe, and awkward to mount — trace angles, part spacing, silkscreen legibility and test-point access are decisions you only appreciate once you are holding the fabricated board with an iron in your hand.
Ordering it was the other half. Once Gerbers are submitted there is no undo, which forces a much more careful review pass than any purely simulated assignment ever did.
Academic Context
University of Delaware, ELEG 298 — ECE Design Challenges, Spring 2025. Design, layout, firmware and assembly are my own work.
Parts
23| Qty | Value | Footprint | References |
|---|---|---|---|
| 4 | 1k | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R1, R3, R5, R6 |
| 4 | MountingHole_3.2mm | Arduino_MountingHole:MountingHole_3.2mm | MH1, MH2, MH3, MH4 |
| 2 | 1000u | Capacitor_THT:CP_Radial_D10.0mm_P5.00mm | C1, C2 |
| 2 | 2k | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R2, R4 |
| 2 | 4.7 | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R7, R8 |
| 2 | LED | LED_THT:LED_D5.0mm | D1, D2 |
| 1 | 0.1u | Capacitor_THT:C_Disc_D7.5mm_W5.0mm_P5.00mm | C3 |
| 1 | Analog | Connector_PinSocket_2.54mm:PinSocket_1x06_P2.54mm_Vertical | J3 |
| 1 | Conn_01x04 | Connector:NS-Tech_Grove_1x04_P2mm_Vertical | J5 |
| 1 | Digital/PWM | Connector_PinSocket_2.54mm:PinSocket_1x08_P2.54mm_Vertical | J4 |
| 1 | Digital/PWM | Connector_PinSocket_2.54mm:PinSocket_1x10_P2.54mm_Vertical | J2 |
| 1 | ESP8266-01_ESP-01 | ESP8266-01_ESP-01 (2):XCVR_ESP8266-01_ESP-01 | U1 |
| 1 | Power | Connector_PinSocket_2.54mm:PinSocket_1x08_P2.54mm_Vertical | J1 |
Questions
How big is the Shield PCB?
It measures 68.6 × 53.3 mm and has 2 copper layers, 1.6 mm thick.
What parts does the Shield use?
23 parts. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
Where can I download the Shield KiCad files?
From the DestinyU7/iot-sensor-node-pcb repository on GitHub, at the commit this page was made from: the board is hardware/kicad/Shield.kicad_pcb and its schematic hardware/kicad/Shield.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the Shield design in my own project?
Its repository states no licence, so its author keeps all rights: ask DestinyU7 before reusing the design.
Similar boards
- 2 layers65 × 56 mm

- 2 layers14 × 100 mm

Yunomi
google/mozc-devices
Circuit diagrams and firmware source code for Gboard DIY keyboards
23 parts3kApache-2.0 - 2 layers50.8 × 52.2 mm

- 2 layers138.8 × 89.8 mm

- 2 layers32.9 × 53.3 mm

- 2 layers35.5 × 50 mm

- 2 layers19 × 19 mm

- 2 layers88.5 × 28 mm

ExpBreakout
Duet3D/Duet-2-Hardware
The KiCAD source for the Duet 3d printer controller see www.duet3d.com
23 parts258