Chat

Welcome to Flux

Treat Flux like your intern. Tell it what you'd like to build and it'll get to work. You can also ask it questions, brainstorm ideas, and teach it your preferences. Learn More

Explain project
Write a project description
Find schematic issues
Create a test plan
Simulate a circuit
Prepare for Manufacturing
Component Selection Workflow
New Subsystem Wizard
Write I2C initialization code
Generate firmware skeleton
U3
Manufacturer Part Number
ME6211C33M5G-N
U1
Manufacturer Part Number
ESP32-S3-WROOM-1-N16R8
R_BOOT
Resistance
10kΩ
C_CHG_IN
Capacitance
10µF
SW_RESET
C_IMU1
Capacitance
100nF
SW_BOOT
U2
Manufacturer Part Number
ICM-42688-P
R_IMU_CS
Resistance
10kΩ
C_IMU2
Capacitance
2.2µF
R_PROG
Resistance
2kΩ
C_LDO_OUT
Capacitance
10µF
C_EN
Capacitance
1µF
R_CC1
Resistance
5.1kΩ
C_IMU_IO
Capacitance
10nF
C_ESP
Capacitance
100nF
C_BAT
Capacitance
10µF
R_EN
Resistance
10kΩ
C_LDO_IN
Capacitance
10µF
R_CC2
Resistance
5.1kΩ
J1
J2
J3
SW_PWR
U4
Manufacturer Part Number
TP4056

Refine this doc
Ask about this doc
Firmware Starter — ESP32-S3-WROOM-1-N16R8
Platform & Toolchain
  • MCU: ESP32-S3-WROOM-1-N16R8
  • Framework: Arduino via PlatformIO
  • USB programming: native ESP32-S3 USB Serial/JTAG on GPIO19/GPIO20
Pin Mapping

Table


FunctionESP32 GPIONetConnected ToNotes
USB D-19USB_DNUSB-C Dn1/Dn2Native USB programming/data
USB D+20USB_DPUSB-C Dp1/Dp2Native USB programming/data
BOOT0ESP_BOOTBOOT button + 10k pull-upHold BOOT, tap RESET to enter download mode
EN/RESETENESP_ENRESET button + 10k pull-up + 1uFActive low reset
IMU SPI SCK12SPI_SCKICM-42688-P AP_SCLK + header pin 3SPI clock
IMU SPI MOSI11SPI_MOSIICM-42688-P AP_SDI + header pin 4SPI data to sensor
IMU SPI MISO13SPI_MISOICM-42688-P AP_SDO + header pin 5SPI data from sensor
IMU CS10IMU_CSICM-42688-P AP_CS + 10k pull-upActive low
IMU INT19IMU_INT1ICM-42688-P INT1Motion/data-ready interrupt
External CS/GPIO14EXT_CS_GPIOHeader pin 6Spare chip-select/GPIO for external SPI sensor
Header pinout: 1=3V3, 2=GND, 3=SPI_SCK, 4=SPI_MOSI, 5=SPI_MISO, 6=EXT_CS_GPIO.
platformio.ini

Ini


[env:esp32-s3-devkitc-1]
platform = espressif32
board = esp32-s3-devkitc-1
framework = arduino
monitor_speed = 115200
upload_protocol = esptool
build_flags =
  -DARDUINO_USB_MODE=1
  -DARDUINO_USB_CDC_ON_BOOT=1
lib_deps =
Complete Firmware Source

Cpp


#include <Arduino.h>
#include <WiFi.h>
#include <SPI.h>

#define PIN_IMU_SCK      12
#define PIN_IMU_MOSI     11
#define PIN_IMU_MISO     13
#define PIN_IMU_CS       10
#define PIN_IMU_INT1      9
#define PIN_EXT_CS_GPIO  14

#define ICM_REG_WHO_AM_I       0x75
#define ICM_REG_DEVICE_CONFIG  0x11
#define ICM_REG_PWR_MGMT0      0x4E
#define ICM_SPI_READ           0x80

const char* WIFI_SSID = "YOUR_SSID";
const char* WIFI_PASSWORD = "YOUR_PASSWORD";

SPIClass imuSPI(FSPI);
unsigned long lastReadMs = 0;

uint8_t icmReadReg(uint8_t reg) {
  digitalWrite(PIN_IMU_CS, LOW);
  imuSPI.transfer(reg | ICM_SPI_READ);
  uint8_t value = imuSPI.transfer(0x00);
  digitalWrite(PIN_IMU_CS, HIGH);
  return value;
}

void icmWriteReg(uint8_t reg, uint8_t value) {
  digitalWrite(PIN_IMU_CS, LOW);
  imuSPI.transfer(reg & 0x7F);
  imuSPI.transfer(value);
  digitalWrite(PIN_IMU_CS, HIGH);
}

bool initICM42688() {
  pinMode(PIN_IMU_CS, OUTPUT);
  digitalWrite(PIN_IMU_CS, HIGH);
  pinMode(PIN_IMU_INT1, INPUT);
  pinMode(PIN_EXT_CS_GPIO, OUTPUT);
  digitalWrite(PIN_EXT_CS_GPIO, HIGH);

  imuSPI.begin(PIN_IMU_SCK, PIN_IMU_MISO, PIN_IMU_MOSI, PIN_IMU_CS);
  delay(10);

  uint8_t who = icmReadReg(ICM_REG_WHO_AM_I);
  Serial.printf("ICM WHO_AM_I = 0x%02X\n", who);

  icmWriteReg(ICM_REG_DEVICE_CONFIG, 0x01); // soft reset
  delay(2);
  icmWriteReg(ICM_REG_PWR_MGMT0, 0x0F);     // accel+gyro low-noise mode
  delay(50);
  return true;
}

void initWiFi() {
  WiFi.mode(WIFI_STA);
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  Serial.print("Connecting WiFi");
  for (int i = 0; i < 20 && WiFi.status() != WL_CONNECTED; ++i) {
    delay(500);
    Serial.print(".");
  }
  if (WiFi.status() == WL_CONNECTED) {
    Serial.printf("\nWiFi OK: %s\n", WiFi.localIP().toString().c_str());
  } else {
    Serial.println("\nWiFi not connected; continuing offline.");
  }
}

void setup() {
  Serial.begin(115200);
  delay(1000);
  Serial.println("IRMA vibration IoT firmware starting");
  initICM42688();
  initWiFi();
}

void loop() {
  if (millis() - lastReadMs >= 1000) {
    lastReadMs = millis();
    uint8_t who = icmReadReg(ICM_REG_WHO_AM_I);
    Serial.printf("ICM42688 alive, WHO_AM_I=0x%02X, INT1=%d\n", who, digitalRead(PIN_IMU_INT1));
  }
  if (WiFi.status() != WL_CONNECTED) {
    // Optional: reconnect or buffer vibration data locally.
  }
}
Build & Flash
  • Build: pio run
  • Flash: pio run -t upload
  • Monitor: pio device monitor
  • Manual bootloader: hold BOOT, tap RESET, release BOOT, then upload.
  • Platform & Toolchain

  • Pin Mapping

  • platformio.ini

  • Complete Firmware Source

  • Build & Flash

Assets

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

Dispositivo IRMA thumbnail
Dispositivo accelerometro, procesado, bateria, programable, leds etc...

Properties

Properties describe core aspects of the project.

Pricing & Availability

Distributor

Qty 1

Arrow

$3.65–$4.55

Digi-Key

$7.53–$8.09

HQonline

$9.37–$9.52

LCSC

$20.54–$20.61

Mouser

$13.51

TME

$0.00

Verical

$4.05–$5.59

Controls