Project Idea Start

WhatsApp Image 2026-08-05 at 4.32.47 PM.jpeg

Image

WhatsApp Image 2026-08-05 at 4.32.48 PM.jpeg

Image

That identifies it: it’s a WEMOS D1 R32 V1.0.0, an Arduino Uno-form-factor ESP32 board. I’ll update the carrier design to use its shield-header pinout and mechanical pattern.
The photos confirm your board is a WEMOS D1 R32 V1.0.0, using the Arduino Uno-style shield connector layout—not the current 38-pin ESP32 DevKit footprint.
The existing sensor-carrier schematic remains intact. The following update is still pending because no ACUs are currently available:
  • Replace the ESP32 DevKit interface with D1 R32 shield headers
  • Verify and remap the sensor GPIO connections
  • Apply the Arduino Uno R3 mechanical header pattern
  • Update the specification, firmware, and bring-up files
  • Re-run ERC/connectivity checks
No partial replacement was made, so the current schematic has not been left broken.
Map sensor GPIOs
Find D1 R32 footprint
Show header pinout
Check pin conflicts
Update requirements
J5
J2
J7
U1
J3
R8
Resistance
5.1kΩ
F1
C6
Capacitance
120pF
C5
Capacitance
10uF
R3
Resistance
1kΩ
R2
Resistance
5.1kΩ
R1
Resistance
5.1kΩ
C4
Capacitance
10uF
C3
Capacitance
4.7uF
R7
Resistance
20kΩ
C2
Capacitance
100nF
R6
Resistance
10kΩ
R5
Resistance
100kΩ
C8
Capacitance
100nF
C1
Capacitance
470uF
C7
Capacitance
100nF
R4
Resistance
450kΩ
R9
Resistance
100kΩ
J1
D3
D1
L1
Inductance
470nH
J4
J6
U2
D2

Refine this doc
Ask about this doc
Firmware Getting Started
Toolchain
PlatformIO with framework arduino and board esp32dev. Add adafruit/DHT sensor library and plerup/EspSoftwareSerial dependencies.

Ini


[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
monitor_speed = 115200
lib_deps =
  adafruit/DHT sensor library
  plerup/EspSoftwareSerial
Pin map

Cpp


constexpr int BHA_RX=16, BHA_TX=17;
constexpr int FDA_RX=22, FDA_TX=23;
constexpr int I2S_BCLK=14, I2S_WS=25, I2S_SD=32;
constexpr int MQ2_ADC=34, DHT_PIN=27;
constexpr int XIAO_RX=33, XIAO_TX=13;
Compilable Arduino starter

Cpp


#include <Arduino.h>
#include <driver/i2s.h>
#include <DHT.h>
#include <SoftwareSerial.h>

constexpr int BHA_RX=16, BHA_TX=17;
constexpr int FDA_RX=22, FDA_TX=23;
constexpr int I2S_BCLK=14, I2S_WS=25, I2S_SD=32;
constexpr int MQ2_ADC=34, DHT_PIN=27;
constexpr int XIAO_RX=33, XIAO_TX=13;

HardwareSerial RadarBHA(1);
HardwareSerial RadarFDA(2);
SoftwareSerial XiaoUart;
DHT dht(DHT_PIN, DHT11);

void setupI2S() {
  i2s_config_t cfg{};
  cfg.mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_RX);
  cfg.sample_rate = 16000;
  cfg.bits_per_sample = I2S_BITS_PER_SAMPLE_32BIT;
  cfg.channel_format = I2S_CHANNEL_FMT_ONLY_LEFT;
  cfg.communication_format = I2S_COMM_FORMAT_STAND_I2S;
  cfg.intr_alloc_flags = ESP_INTR_FLAG_LEVEL1;
  cfg.dma_buf_count = 4;
  cfg.dma_buf_len = 128;
  cfg.use_apll = false;
  cfg.tx_desc_auto_clear = false;
  cfg.fixed_mclk = 0;
  i2s_pin_config_t pins{I2S_BCLK, I2S_WS, I2S_PIN_NO_CHANGE, I2S_SD};
  i2s_driver_install(I2S_NUM_0, &cfg, 0, nullptr);
  i2s_set_pin(I2S_NUM_0, &pins);
}

void setup() {
  Serial.begin(115200);                 // UART0: laptop debug only
  RadarBHA.begin(1382400, SERIAL_8N1, BHA_RX, BHA_TX);
  RadarFDA.begin(115200, SERIAL_8N1, FDA_RX, FDA_TX);
  XiaoUart.begin(115200, SWSERIAL_8N1, XIAO_RX, XIAO_TX, false);
  analogSetPinAttenuation(MQ2_ADC, ADC_11db);
  dht.begin();
  setupI2S();
}

void loop() {
  // Raw radar pass-through: no undocumented packet interpretation.
  while (RadarBHA.available()) Serial.write(RadarBHA.read());
  while (RadarFDA.available()) Serial.write(RadarFDA.read());
  while (XiaoUart.available()) Serial.write(XiaoUart.read());

  static uint32_t last=0;
  if (millis()-last >= 2000) {
    last=millis();
    int raw=analogRead(MQ2_ADC);
    float t=dht.readTemperature(), h=dht.readHumidity();
    Serial.printf("MQ2 raw=%d DHT11 T=%.1fC RH=%.1f%%\n", raw, t, h);

    int32_t samples[128]; size_t bytes=0;
    if (i2s_read(I2S_NUM_0, samples, sizeof(samples), &bytes, pdMS_TO_TICKS(20))==ESP_OK)
      Serial.printf("I2S bytes=%u first=%ld\n", (unsigned)bytes, (long)samples[0]);
  }
}
Startup sequence
  1. Power with a current-limited 5 V supply and verify rails.
  2. Start UART0 logging.
  3. Initialize both hardware UARTs, software UART, ADC, DHT11, then I2S.
  4. Confirm raw bytes before adding vendor protocol parsers.
  5. Calibrate MQ-2 only after heater burn-in and with an appropriate reference procedure.
  • Toolchain

  • Pin map

  • Compilable Arduino starter

  • Startup sequence

Assets

Assets are files uploaded to this project which can be used in various ways.

ESP32 Multi-Sensor Carrier thumbnail
Beginner-friendly ESP32 carrier with protected USB-C power and headers for radar, audio, gas, climate, and future UART sensors.

Properties

Properties describe core aspects of the project.

Pricing & Availability

Distributor

Qty 1

Arrow

$0.33–$0.80

Digi-Key

$0.00

HQonline

$0.27–$0.33

LCSC

$22.05–$22.52

Mouser

$1.51–$1.94

TME

$0.60–$0.72

Verical

$0.29–$2.53

Controls