Żyroskop i akcelerometr InvenSense/TDK MPU6050 na ESP32-S3

Witam,
Jest to mój pierwszy wpis więc witam Wszystkich.

Rozpocząłem przygodę z Home Assistant i pierwszym urządzeniem był włącznik tuya. Następnie postanowiłem zrobić sobie układ który pomoże mi poziomować przyczepę kempingową. I tu zaczęły się schody. Encje są widoczne w Home Assistant ale bez aktualnych wartości. Wykorzystałem do tego esp32-s3-devkitc1-n16r8 oraz MPU6050. Proszę o pomoc gdzie jest błąd.

Takie 2 błedy mam podcas instalacji w esphome w home asisstant na esp:

[16:39:16.826][C][mpu6050:086]:   Address: 0x68
[16:39:16.826][E][mpu6050:088]: Communication failed

oraz:

[16:39:16.871][C][mpu6050:026]:     Device Class: 'temperature'
[16:39:16.875][E][component:226]:   mpu6050.sensor is marked FAILED: unspecified

mój yaml:

esphome:
  name: esp32-s3
  friendly_name: ESP32-S3
    

esp32:
  board: esp32-s3-devkitc1-n16r8
  framework:
    type: esp-idf

logger:

api:
  encryption:
    key: "UKRYTE :)"

ota:
  - platform: esphome
    password: "UKRYTE"

wifi:
  ssid: "UKRYTE"
  password: "UKRYTE"

  ap:
    ssid: "UKRYTE"
    password: "UKRYTE"

captive_portal:

one_wire:
  - platform: gpio
    pin: GPIO7
    id: one_wire_bus  

i2c:
    id: MPU6050_i2c
    sda: GPIO8
    scl: GPIO9
    scan: true
    frequency: 100kHz

number:
- platform: template
  name: "Offset Pitch"
  id: offset_pitch
  min_value: -10
  max_value: 10
  step: 0.1
  initial_value: 0
  optimistic: True

- platform: template
  name: "Offset Roll"
  id: offset_roll
  min_value: -10
  max_value: 10
  step: 0.1
  initial_value: 0
  optimistic: True

sensor:
  - platform: dallas_temp
    one_wire_id: one_wire_bus
    address: 0x320823a199792c28
    name: templodowka
    id: templodowka
    
  - platform: mpu6050
    i2c_id: MPU6050_i2c
    address: 0x68
    update_interval: 0.5s

    accel_x:
      name: "MPU6050 Accel X"
    accel_y:
      name: "MPU6050 Accel Y"
    accel_z:
      name: "MPU6050 Accel Z"
    gyro_x:
      name: "MPU6050 Gyro X"
    gyro_y:
      name: "MPU6050 Gyro Y"
    gyro_z:
      name: "MPU6050 Gyro Z"
    temperature:
      name: "MPU6050 Temperature"

Tak na pszyszłość przeczytaj jak prawidłowo zamieszczać kod i popraw post:

Brak właściwego elektrycznego połączenia między czujnikiem a MCU (w logu jest brak komunikacji - daj więcej logu chodzi o fragment z wynikami skanowania magistrali), resztę analizy przeprowadzimy jeśli przejrzysz tamten wątek i dostarczysz podobne informacje.
Formatowanie posta poprawię teraz, naucz się tego.

Dziekuje za poprawienie posta, nauka na przyszłość.
Edit: sprawdziłem ten wątek ale wydaje mi sie że nic tam nie ma co moze mi pomóc.

Poniżej scan:

INFO Reading configuration /config/esphome/esp32-s3.yaml...
WARNING The 'custom_components' folder is deprecated and will be removed in 2026.6.0. Please use 'external_components' instead. See https://esphome.io/components/external_components.html for more information.
INFO Generating C++ source...
INFO Setting CONFIG_LWIP_MAX_SOCKETS to 11 (registered: api=4, captive_portal=4, mdns=2, ota=1)
INFO Compiling app... Build path: /data/build/esp32-s3
Processing esp32-s3 (board: esp32-s3-devkitc1-n16r8; framework: espidf; platform: https://github.com/pioarduino/platform-espressif32/releases/download/55.03.35/platform-espressif32.zip)
--------------------------------------------------------------------------------
HARDWARE: ESP32S3 240MHz, 320KB RAM, 4MB Flash
 - contrib-piohome @ 3.4.4 
 - framework-espidf @ 3.50502.0 (5.5.2) 
 - tool-cmake @ 4.0.3 
 - tool-esp-rom-elfs @ 2024.10.11 
 - tool-esptoolpy @ 5.1.0 
 - tool-mklittlefs @ 3.2.0 
 - tool-ninja @ 1.13.1 
 - tool-scons @ 4.40801.0 (4.8.1) 
 - toolchain-xtensa-esp-elf @ 14.2.0+20251107
Reading CMake configuration...
Dependency Graph
|-- noise-c @ 0.1.10
RAM:   [=         ]  10.9% (used 35840 bytes from 327680 bytes)
Flash: [=====     ]  49.2% (used 903723 bytes from 1835008 bytes)
========================= [SUCCESS] Took 10.54 seconds =========================
INFO Build Info: config_hash=0x57dd7bba build_time_str=2026-02-01 16:38:16 +0100
INFO Successfully compiled program.
INFO Connecting to 192.168.0.17 port 3232...
INFO Connected to 192.168.0.17
INFO Uploading /data/build/esp32-s3/.pioenvs/esp32-s3/firmware.bin (904128 bytes)
Uploading: [============================================================] 100% Done...

INFO Upload took 5.45 seconds, waiting for result...
INFO OTA successful
INFO Successfully uploaded program.
INFO Starting log output from 192.168.0.17 using esphome API
INFO Successfully resolved esp32-s3 @ 192.168.0.17 in 0.000s
INFO Successfully connected to esp32-s3 @ 192.168.0.17 in 5.231s
INFO Successful handshake with esp32-s3 @ 192.168.0.17 in 0.101s
[16:59:14.524][I][app:206]: ESPHome version 2026.1.3 compiled on 2026-02-01 16:38:16 +0100
[16:59:14.526][I][app:213]: ESP32 Chip: ESP32-S3 r0.2, 2 core(s)
[16:59:14.526][C][logger:316]: Logger:
[16:59:14.526][C][logger:316]:   Max Level: DEBUG
[16:59:14.526][C][logger:316]:   Initial Level: DEBUG
[16:59:14.529][C][logger:322]:   Log Baud Rate: 115200
[16:59:14.529][C][logger:322]:   Hardware UART: USB_SERIAL_JTAG
[16:59:14.551][C][logger:332]:   Task Log Buffer Size: 768 bytes
[16:59:14.551][C][i2c.idf:093]: I2C Bus:
[16:59:14.554][C][i2c.idf:094]:   SDA Pin: GPIO8
[16:59:14.554][C][i2c.idf:094]:   SCL Pin: GPIO9
[16:59:14.554][C][i2c.idf:094]:   Frequency: 100000 Hz
[16:59:14.558][C][i2c.idf:104]:   Recovery: bus successfully recovered
[16:59:14.558][C][i2c.idf:114]: Results from bus scan:
[16:59:14.561][C][i2c.idf:120]: Found device at address 0x68
[16:59:14.565][C][gpio.one_wire:021]: GPIO 1-wire bus:
[16:59:14.565][C][gpio.one_wire:152]:   Pin: GPIO7
[16:59:14.569][C][gpio.one_wire:085]:   Found devices:
[16:59:14.584][C][gpio.one_wire:088]:     0x320823a199792c28 (DS18B20)
[16:59:14.584][C][template.number:016]: Template Number 'Offset Pitch'
[16:59:14.591][C][template.number:049]:   Optimistic: YES
[16:59:14.591][C][template.number:452]:   Update Interval: 60.0s
[16:59:14.592][C][template.number:016]: Template Number 'Offset Roll'
[16:59:14.598][C][template.number:049]:   Optimistic: YES
[16:59:14.598][C][template.number:452]:   Update Interval: 60.0s
[16:59:14.608][C][dallas.temp.sensor:029]: Dallas Temperature Sensor:
[16:59:14.611][C][dallas.temp.sensor:034]:   Address: 0x320823a199792c28 (DS18B20)
[16:59:14.611][C][dallas.temp.sensor:035]:   Resolution: 12 bits
[16:59:14.613][C][dallas.temp.sensor:452]:   Update Interval: 60.0s
[16:59:14.620][C][mpu6050:085]: MPU6050:
[16:59:14.633][C][mpu6050:086]:   Address: 0x68
[16:59:14.633][E][mpu6050:088]: Communication failed
[16:59:14.633][C][mpu6050:452]:   Update Interval: 0.5s
[16:59:14.633][C][mpu6050:016]:   Acceleration X 'MPU6050 Accel X'
[16:59:14.633][C][mpu6050:016]:     State Class: 'measurement'
[16:59:14.633][C][mpu6050:016]:     Unit of Measurement: 'm/s²'
[16:59:14.633][C][mpu6050:016]:     Accuracy Decimals: 2
[16:59:14.633][C][mpu6050:030]:     Icon: 'mdi:briefcase-download'
[16:59:14.637][C][mpu6050:016]:   Acceleration Y 'MPU6050 Accel Y'
[16:59:14.637][C][mpu6050:016]:     State Class: 'measurement'
[16:59:14.637][C][mpu6050:016]:     Unit of Measurement: 'm/s²'
[16:59:14.637][C][mpu6050:016]:     Accuracy Decimals: 2
[16:59:14.637][C][mpu6050:030]:     Icon: 'mdi:briefcase-download'
[16:59:14.638][C][mpu6050:016]:   Acceleration Z 'MPU6050 Accel Z'
[16:59:14.638][C][mpu6050:016]:     State Class: 'measurement'
[16:59:14.638][C][mpu6050:016]:     Unit of Measurement: 'm/s²'
[16:59:14.638][C][mpu6050:016]:     Accuracy Decimals: 2
[16:59:14.644][C][mpu6050:030]:     Icon: 'mdi:briefcase-download'
[16:59:14.644][C][mpu6050:016]:   Gyro X 'MPU6050 Gyro X'
[16:59:14.644][C][mpu6050:016]:     State Class: 'measurement'
[16:59:14.644][C][mpu6050:016]:     Unit of Measurement: '°/s'
[16:59:14.644][C][mpu6050:016]:     Accuracy Decimals: 2
[16:59:14.644][C][mpu6050:030]:     Icon: 'mdi:screen-rotation'
[16:59:14.650][C][mpu6050:016]:   Gyro Y 'MPU6050 Gyro Y'
[16:59:14.650][C][mpu6050:016]:     State Class: 'measurement'
[16:59:14.650][C][mpu6050:016]:     Unit of Measurement: '°/s'
[16:59:14.650][C][mpu6050:016]:     Accuracy Decimals: 2
[16:59:14.651][C][mpu6050:030]:     Icon: 'mdi:screen-rotation'
[16:59:14.651][C][mpu6050:016]:   Gyro Z 'MPU6050 Gyro Z'
[16:59:14.651][C][mpu6050:016]:     State Class: 'measurement'
[16:59:14.651][C][mpu6050:016]:     Unit of Measurement: '°/s'
[16:59:14.651][C][mpu6050:016]:     Accuracy Decimals: 2
[16:59:14.652][C][mpu6050:030]:     Icon: 'mdi:screen-rotation'
[16:59:14.652][C][mpu6050:016]:   Temperature 'MPU6050 Temperature'
[16:59:14.652][C][mpu6050:016]:     State Class: 'measurement'
[16:59:14.652][C][mpu6050:016]:     Unit of Measurement: '°C'
[16:59:14.652][C][mpu6050:016]:     Accuracy Decimals: 1
[16:59:14.653][C][mpu6050:026]:     Device Class: 'temperature'
[16:59:14.656][E][component:226]:   mpu6050.sensor is marked FAILED: unspecified
[16:59:14.680][C][captive_portal:128]: Captive Portal:
[16:59:14.681][C][wifi:1304]: WiFi:
[16:59:14.681][C][wifi:1304]:   Local MAC: 80:B5:4E:C5:C8:50
[16:59:14.681][C][wifi:1304]:   Connected: YES
[16:59:14.689][C][wifi:1037]:   IP Address: 192.168.0.17
[16:59:14.696][C][wifi:1048]:   SSID: [redacted]
[16:59:14.696][C][wifi:1048]:   BSSID: [redacted]
[16:59:14.696][C][wifi:1048]:   Hostname: 'esp32-s3'
[16:59:14.696][C][wifi:1048]:   Signal strength: -51 dB ▂▄▆█
[16:59:14.696][C][wifi:1048]:   Channel: 6
[16:59:14.696][C][wifi:1048]:   Subnet: 255.255.255.0
[16:59:14.696][C][wifi:1048]:   Gateway: 192.168.0.1
[16:59:14.696][C][wifi:1048]:   DNS1: 193.47.158.254
[16:59:14.696][C][wifi:1048]:   DNS2: 193.47.158.255
[16:59:14.697][C][esphome.ota:075]: Over-The-Air updates:
[16:59:14.697][C][esphome.ota:075]:   Address: esp32-s3.local:3232
[16:59:14.697][C][esphome.ota:075]:   Version: 2
[16:59:14.701][C][esphome.ota:082]:   Password configured
[16:59:14.709][C][safe_mode:021]: Safe Mode:
[16:59:14.709][C][safe_mode:021]:   Successful after: 60s
[16:59:14.709][C][safe_mode:021]:   Invoke after: 10 attempts
[16:59:14.709][C][safe_mode:021]:   Duration: 300s
[16:59:14.709][C][safe_mode:038]:   Bootloader rollback: supported
[16:59:14.718][C][web_server.ota:231]: Web Server OTA
[16:59:14.731][C][api:221]: Server:
[16:59:14.731][C][api:221]:   Address: esp32-s3.local:6053
[16:59:14.731][C][api:221]:   Listen backlog: 4
[16:59:14.731][C][api:221]:   Max connections: 8
[16:59:14.731][C][api:228]:   Noise encryption: YES
[16:59:14.740][C][mdns:177]: mDNS:
[16:59:14.740][C][mdns:177]:   Hostname: esp32-s3
[17:00:08.905][I][safe_mode:066]: Boot seems successful; resetting boot loop counter
[17:00:11.368][D][esp32.preferences:155]: Writing 1 items: 0 cached, 1 written, 0 failed
[17:00:12.380][D][dallas.temp.sensor:054]: 'templodowka': Got Temperature=22.687500°C
[17:00:12.383][D][sensor:129]: 'templodowka' >> 22.7 °C```

To nie Tobie ma pomóc, tylko nam Tobie pomagać, daj zdjęcia.
Liczyłem, że przejrzysz czego nam potrzeba…

na dzień dobry zmień raportowanie na jakieś rzadsze (powiedzmy co 10s, tak, wiem ten sensor może raportować wiele razy na sekundę, ale nie jest powiedziane, że esphome da z tym radę)

druga kwestia to ja bym to skompilował we frameworku arduino (nie wiem czy jest to możliwe dla S3 ale masz “megawypasioną” wersję płytki esp32-s3-devkitc1-n16r8 więc zasobów jej raczej nie braknie)
bardziej organoleptyczne testy przeprowadzę jak przygotuję ten YAML do kompilacji u mnie (wstawki w rodzaju "UKRYTE" w tym skutecznie przeszkadzają - polecam stosowanie !secret)

co to w ogóle jest?

ESP 32 S1

a i widziałem, że coś wrzucałeś niżej, ale post jest skasowany… i nie wiem dlaczego

bo nie wiem jak wrzucic zdjęcia tego co mam :frowning:

Ale jaki jest problem? bo nie rozumiem, jeśli to RAWy to skonwertuj je do JPEGów (zdjęcia z rzeczywistego świata najlepiej w ten sposób) albo PNGów jeśli to sztuczna grafika lub skrinszoty z dokumentacji (nie mogą mieć nie wiadomo jakiej objętości).

Na razie proponuję zmienić ten fragment (100kHz wydaje mi się być za małą szybkością magistrali na ten czujnik)

i2c:
    id: MPU6050_i2c
    sda: GPIO8
    scl: GPIO9
    scan: true
    frequency: 400kHz


źródło

    id: MPU6050_i2c
    sda: GPIO8
    scl: GPIO9
    scan: true
    frequency: 400kHz

  - platform: mpu6050
    i2c_id: MPU6050_i2c
    address: 0x68
    update_interval: 10s

zmieniłem i dalej to samo :frowning:

? wkleiłeś to do YAMLa 2x??

zmień też framework na arduino (to wymaga szczyszczenia cache CLEAN ALL w kompilerze oraz flashowania po kabelku)

nie no, wkleiłem 2 x to samo tu na forum :slight_smile:

Edytowałem

Zrób zdjęcia makro samego modułu MPU6050 (on prawdopodobnie może być zasilany 5V) ale pod takim kątem by było widać napisy na układach (szczególnie mnie interesuje czy jest tam przetwornica zasilacza czy zwykły LDO), bo moduł wygląda na klon GY-521 ale nie wiem czy zachowano oryginalną konstrukcję zasilacza (a chyba nie)
W sumie można to dość łatwo sprawdzić - zmierz napięcie na kondensatorze elektrolitycznym.
Tam ma być 3.3V jeśli jest mniej podłącz całą płytkę żyroskopu do 5V



Wytłumaczę o co chodzi na zdjęciach MAJĄ być czytelne napisy na układach… jeśli jest tam czarna dziura to nie jestem w stanie tego odczytać.

Bez przesady :slight_smile: nie mam takiej wiedzy

znaczy zmierzyć zmierze tylko który to ?

No a przydała by się, OK rysunek niżej

w obszarach 3 i 4 potrzebuję przynajmniej tak czytelnych napisów jak masz w zielonych ramkach, w sumie 4 ważniejsze (bo wiem, że 3 to jest nasz żyroskop, ale to jest dobre miejsce kontrolne dla Ciebie jak będziesz eksperymentował z oświetleniem czy kątem zdjęcia)

a miernikiem mierzysz między 1 i 2

miedzy 1 a 2 jest 3,36

1 polubienie

Tyle wystarczy, nie musisz zmieniać połączeń elektrycznych jakoś intensywnie, bo napięcie jest OK.
zmieniłeś framework?

mój roboczy YAML, wiem że się kompiluje w arduino, nie mam teraz sprzętu do zabawy, ale może zorganizuję

substitutions:
  name: "mpu6050"
  friendly_name: "MPU6050"

esphome:
  name: ${name}
  friendly_name: ${friendly_name}
    

esp32:
  board: esp32-s3-devkitc1-n16r8
  framework:
    type: arduino

logger:

api:
  encryption:
    key: !secret api_key

ota:
  - platform: esphome


wifi:
  networks:
  - ssid: !secret wifi_ssid
    password: !secret wifi_pass
    priority: 0.0
  - ssid: !secret wifi_ssid_alternate
    password: !secret wifi_pass_alternate
    priority: 5.0
  min_auth_mode: WPA2  # Reject WPA-only networks

  ap:
    ssid: "${friendly_name} brak sieci!"
    password: !secret wifi_rcvr

captive_portal:

one_wire:
  - platform: gpio
    pin: GPIO7
    id: one_wire_bus  

i2c:
    id: MPU6050_i2c
    sda: GPIO8
    scl: GPIO9
    scan: true
    frequency: 400kHz

number:
- platform: template
  name: "Offset Pitch"
  id: offset_pitch
  min_value: -10
  max_value: 10
  step: 0.1
  initial_value: 0
  optimistic: True

- platform: template
  name: "Offset Roll"
  id: offset_roll
  min_value: -10
  max_value: 10
  step: 0.1
  initial_value: 0
  optimistic: True

sensor:
  - platform: dallas_temp
    one_wire_id: one_wire_bus
    address: 0x320823a199792c28
    name: templodowka
    id: templodowka
    
  - platform: mpu6050
    i2c_id: MPU6050_i2c
    address: 0x68
    update_interval: 10s

    accel_x:
      name: "MPU6050 Accel X"
    accel_y:
      name: "MPU6050 Accel Y"
    accel_z:
      name: "MPU6050 Accel Z"
    gyro_x:
      name: "MPU6050 Gyro X"
    gyro_y:
      name: "MPU6050 Gyro Y"
    gyro_z:
      name: "MPU6050 Gyro Z"
    temperature:
      name: "MPU6050 Temperature"

Też dobre smieje się sam siebie ale jak to zrobić ? :slight_smile:

zdjęcie dokładniejsze dodałem wyżej