Write C++ sensor drivers you'd actually ship
Go from breakout board to production-ready firmware on ESP32, RP2040, and RP2350 — covering temperature, humidity, pressure, motion, distance, light, and soil moisture, one register at a time.

"I put the datasheet on the table and we work through it together — no hand-waving, no black boxes, no apologies for the complexity."
— Scott Edwards

What you'll learn
What you'll be able to do
- Write verified C++ drivers for DHT11 and DHT22 temperature/humidity sensors on ESP32, RP2040, and RP2350 without relying on black-box libraries
- Implement 1-Wire protocol communication to read DS18B20 temperature data accurately across all three microcontroller platforms
- Configure and query the BME280 over I2C and SPI for calibrated temperature, humidity, and barometric pressure readings
- Build reliable interrupt-driven motion detection pipelines using the SR501 PIR sensor with debounce and adjustable sensitivity
- Measure distances precisely with the SR04 ultrasonic sensor using hardware timers and temperature-compensated speed-of-sound calculations
- Integrate BH1750 lux readings and capacitive soil moisture data into a unified sensor-polling architecture suitable for battery-powered field deployments
How it works
A school that adapts to you
This isn't a set of static videos. Every lesson is generated live and tuned to where you actually are.
We learn your level
A quick placement check tailors your starting point so you're never bored or lost.
Lessons adapt as you go
Each lesson is written for your pace and your goal, adjusting as your skills grow.
Your AI coach keeps you moving
Checkpoints, feedback, and gentle nudges turn progress into a real result.
The curriculum
What's inside your school
0 modules · 0 lessons

Platform Foundations & Dev Environment
Set up toolchains, project structure, and shared C++ patterns used across every sensor module in this course.
- 1.1Toolchain Setup: ESP32, RP2040 & RP2350Included
- 1.2Project Architecture for Multi-Platform FirmwareIncluded
- 1.3GPIO, Timing & Interrupt PrimitivesIncluded
- 1.4I2C & SPI Bus ConfigurationIncluded
- 1.5Debugging & Logic Analyzer WorkflowsIncluded
DHT11 & DHT22 — Single-Wire Temperature & Humidity
Implement a timing-precise, bit-bang driver for the DHT protocol from scratch on all three platforms.
- 2.1DHT Protocol Deep DiveIncluded
- 2.2Bit-Bang Driver on ESP32Included
- 2.3Porting the Driver to RP2040 & RP2350Included
- 2.4Checksum Validation & Error HandlingIncluded
- 2.5DHT11 vs DHT22 — Calibration & Accuracy Trade-offsIncluded
DS18B20 — 1-Wire Temperature Sensing
Master the 1-Wire protocol and write a multi-drop DS18B20 driver with accurate CRC checking on all three platforms.
- 3.1Wire Protocol MechanicsIncluded
- 3.2DS18B20 Driver on ESP32Included
- 3.3Porting the Driver to RP2040 & RP2350Included
- 3.4Multi-Drop Bus & ROM Search AlgorithmIncluded
- 3.5Resolution Configuration & Conversion TimingIncluded
BME280 — Pressure, Humidity & Temperature over I2C/SPI
Configure the BME280, implement its compensation math, and support both I2C and SPI transport on all platforms.
- 4.1BME280 Register Map & Compensation FormulasIncluded
- 4.2I2C Driver on ESP32, RP2040 & RP2350Included
- 4.3SPI Driver & Dual-Interface AbstractionIncluded
- 4.4Oversampling, Standby & Filter SettingsIncluded
- 4.5Altitude Estimation & Sensor Fusion BasicsIncluded
SR501 PIR & SR04 Ultrasonic — Motion & Distance
Build interrupt-driven PIR detection and hardware-timer ultrasonic ranging drivers with real-world reliability features.
- 5.1SR501 PIR Signal Characteristics & Hardware SetupIncluded
- 5.2Interrupt-Driven PIR Driver with DebounceIncluded
- 5.3SR04 Trigger-Echo Timing with Hardware TimersIncluded
- 5.4Temperature-Compensated Speed-of-Sound CalculationIncluded
- 5.5Porting Both Drivers Across All Three PlatformsIncluded
BH1750, Capacitive Soil Moisture & Unified Sensor Architecture
Implement the final two sensors and assemble all drivers into a polled, battery-aware field deployment architecture.
- 6.1BH1750 I2C Lux DriverIncluded
- 6.2Capacitive Soil Moisture — ADC Calibration & MappingIncluded
- 6.3Unified Sensor-Polling ArchitectureIncluded
- 6.4Power Management for Battery-Powered DeploymentsIncluded
- 6.5Capstone — Multi-Sensor IoT NodeIncluded
Who it's for
Is this you?
The self-taught maker
Has assembled dozens of projects from tutorials and libraries but wants to finally understand what's actually happening on the wire.
Junior embedded engineer
Writes firmware professionally but was never formally taught protocol-level driver development and wants to close that gap fast.
IoT product builder
Is moving a prototype toward a shippable product and needs drivers they can trust, maintain, and defend in code review.
Hardware hobbyist going deeper
Comfortable with soldering and basic C but ready to step up from Arduino sketches to real, portable, cross-platform firmware.
Robotics & automation developer
Needs reliable motion, distance, and environmental sensors baked into a firmware architecture that won't fall apart under real conditions.
Precision agriculture tinkerer
Building battery-powered field nodes for soil and environmental monitoring and needs the power management and sensor calibration to actually work outdoors.
Questions
Frequently asked
Your teacher
A note from your teacher
Scott Edwards
If you've been building embedded projects for a while, you already know the gap I'm talking about. You wire up a sensor, grab a library off GitHub, call .begin() and readTemperature(), and it works — right up until it doesn't. The library doesn't tell you why it failed. The error handling is nonexistent or opaque. And when you try to port it to a different microcontroller, you're back to square one, hoping someone else already ported it for you.
That gap — between "it works on my desk" and "I understand it well enough to ship it" — is exactly what Embedded Sensor Lab closes.
I built this curriculum because I kept seeing the same pattern: capable developers with real hardware experience who were blocked not by intelligence or effort, but by the absence of a structured, hardware-specific map. The DHT protocol timing is documented in the datasheet, but nobody walks you through what those 80 µs pull-down windows actually mean in practice for a bit-bang implementation. The BME280 compensation formulas exist in the datasheet appendix, but understanding why you need them — and how to apply them correctly — is another matter entirely. That's what this lab does: it treats the datasheet as the source of truth and walks you through it, register by register, timing spec by timing spec, on three different platforms so the knowledge is portable.
Every driver you write in this lab — DHT11/22, DS18B20, BME280, SR501, SR04, BH1750, capacitive soil moisture — is built from first principles in C++. You'll implement the 1-Wire ROM search algorithm so you can address multiple DS18B20s on a single bus. You'll configure BME280 oversampling modes and IIR filter coefficients to match your application's noise budget. You'll build interrupt-driven PIR detection with real debounce logic. And you'll bring everything together in a capstone battery-powered multi-sensor node with the power-management discipline that field deployment actually demands.
I treat you as a capable engineer who needs the right map, not a beginner who needs to be protected from complexity. The timing specs are on the table. The register names are exact. The datasheet citations are real. If that sounds like the course you've been looking for, I'll see you in the lab.
— Scott Edwards
Start your journey today
Get instant access — learn at your own pace with an AI coach in your corner.
$45/yr
Recurring billing · cancel anytime
Secure checkout · Instant access
- 6 modules, 30 lessons
- AI-adaptive lessons tuned to your level
- Quizzes & checkpoints to lock in progress
- Your own AI learning coach
- Learn on any device, at your pace
- Full access for as long as you're subscribed