Project Idea Start


That is most likely the WEMOS LOLIN32 V1.0.0, which is different from the 38-pin ESP32 DevKit currently shown in the schematic. Before I replace it, please confirm: does your board have 13 pins on each side and a small white LiPo battery connector near the USB socket?
no it has 18 on 1 side and 14 at another
That pin count doesn’t match the standard WEMOS LOLIN32 or ESP32 DevKit footprints, so I shouldn’t guess the socket geometry. Please upload a clear photo of the front and back of the board beside a ruler, or send its exact product link.

WhatsApp Image 2026-08-05 at 4.32.47 PM

WhatsApp Image 2026-08-05 at 4.32.48 PM

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

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