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

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

tylko jak pisałem wcześniej - po tej zmianie minimalne czynności to

  1. Clean Build Files (kebab menu kafelka)
  2. flashowanie po kabelku (NIE można użyć OTA

jeśli 1. będzie nieskuteczne to w głównym menu GUI ESPHome buildera CLEAN ALL i oczywiście 2. pozostaje w mocy


dzięki zdjęciom wiemy, że zastosowano stabilizator LDO (a nie przetwornicę)

konkretniej to jest Torex XC6204 w wersji 3.3V (to wynika z oznaczenia 4B2K)

ale skoro napięcie jest OK to nie ma co wydziwiać, jakkolwiek w pełni bezpiecznie można zasilać płytkę napięciem 5V i jeśli nic nie pomoże jest to do rozważenia.
(ze zdjęć nie wyśledziłem wprawdzie przebiegu ścieżek, ale bazując na schemacie GY-521 wyżej i dość podobnej PCB GY-521 sądzę, że pullupy magistrali I2C są dociągnięte do 3.3V, swoją drogą sugeruje to też niska wartość ich rezystancji)

Nie mogłem wcześniej odpisywać. Sytuacja nadal bez zmian po tych informacjach. Spróbuję dzisiaj przepiąć się na inną płytkę ESP i zamówię sobie inny model czujnika. Może coś jest nie tak z czujnikiem. Zastanawiam się czy piny 8 i 9 to na pewno odpowiednie piny tej płytki dla i2c.

Też się nad tym zastanawiałem, ale w S3 nie ma szczególnych ograniczeń co do lokalizacji magistrali I2C, a wręcz GPIO8 i GPIO9 są akurat domyślne dla tego MCU w natywnym arduino.

Niestety nie udało mi się wyczarować sprzętu (szczerze mówiąc myślałem, że mam MPU6050 gdzieś w szpargałach, ale znalazłem tylko magnetometr).

możesz zwiększyć poziom logowania

logger:
  level: VERY_VERBOSE

to powinno pokazać w logu całą komunikację
żyroskop/akcelereometr się zgłasza na szynie przy jej skanowaniu (przynajmniej w starym logu) więc jakaś komunikacja jest

wrzuć aktualne logi i YAML

Z innej beczki - ja bym wyrzucił w obu miejscach z YAMLa to (nie musisz definiować id szyny, bo jest tylko jedna)

    i2c_id: MPU6050_i2c
INFO ESPHome 2026.1.3
INFO Reading configuration /config/esphome/esp32-2102.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 Starting log output from esp32-2102.local using esphome API
INFO Successfully resolved esp32-2102.local in 0.183s
INFO Successfully connected to esp32-2102 @ 192.168.0.45 in 0.008s
INFO Successful handshake with esp32-2102 @ 192.168.0.45 in 0.104s
[19:35:36.094][I][app:206]: ESPHome version 2026.1.3 compiled on 2026-02-03 19:31:48 +0100
[19:35:36.104][I][app:213]: ESP32 Chip: ESP32 r3.1, 2 core(s)
[19:35:36.104][W][app:222]: Set minimum_chip_revision: "3.1" to reduce binary size
[19:35:36.108][C][logger:316]: Logger:
[19:35:36.108][C][logger:316]:   Max Level: VERY_VERBOSE
[19:35:36.108][C][logger:316]:   Initial Level: VERY_VERBOSE
[19:35:36.125][C][logger:322]:   Log Baud Rate: 115200
[19:35:36.125][C][logger:322]:   Hardware UART: UART0
[19:35:36.126][C][logger:332]:   Task Log Buffer Size: 768 bytes
[19:35:36.168][C][i2c.idf:093]: I2C Bus:
[19:35:36.187][C][i2c.idf:094]:   SDA Pin: GPIO21
[19:35:36.187][C][i2c.idf:094]:   SCL Pin: GPIO22
[19:35:36.187][C][i2c.idf:094]:   Frequency: 200000 Hz
[19:35:36.187][C][i2c.idf:104]:   Recovery: bus successfully recovered
[19:35:36.187][C][i2c.idf:114]: Results from bus scan:
[19:35:36.187][C][i2c.idf:120]: Found device at address 0x68
[19:35:36.187][C][template.number:016]: Template Number 'Offset Pitch'
[19:35:36.205][C][template.number:049]:   Optimistic: YES
[19:35:36.206][C][template.number:452]:   Update Interval: 60.0s
[19:35:36.206][C][template.number:016]: Template Number 'Offset Roll'
[19:35:36.208][C][template.number:049]:   Optimistic: YES
[19:35:36.208][C][template.number:452]:   Update Interval: 60.0s
[19:35:36.208][C][mpu6050:085]: MPU6050:
[19:35:36.208][C][mpu6050:086]:   Address: 0x68
[19:35:36.209][E][mpu6050:088]: Communication failed
[19:35:36.209][C][mpu6050:450]:   Update Interval: 0.050s
[19:35:36.220][C][mpu6050:016]:   Acceleration X 'MPU6050 Accel X'
[19:35:36.220][C][mpu6050:016]:     State Class: 'measurement'
[19:35:36.220][C][mpu6050:016]:     Unit of Measurement: 'm/s²'
[19:35:36.220][C][mpu6050:016]:     Accuracy Decimals: 2
[19:35:36.226][C][mpu6050:030]:     Icon: 'mdi:briefcase-download'
[19:35:36.226][C][mpu6050:016]:   Acceleration Y 'MPU6050 Accel Y'
[19:35:36.226][C][mpu6050:016]:     State Class: 'measurement'
[19:35:36.226][C][mpu6050:016]:     Unit of Measurement: 'm/s²'
[19:35:36.226][C][mpu6050:016]:     Accuracy Decimals: 2
[19:35:36.240][C][mpu6050:030]:     Icon: 'mdi:briefcase-download'
[19:35:36.261][C][mpu6050:016]:   Acceleration Z 'MPU6050 Accel Z'
[19:35:36.261][C][mpu6050:016]:     State Class: 'measurement'
[19:35:36.261][C][mpu6050:016]:     Unit of Measurement: 'm/s²'
[19:35:36.261][C][mpu6050:016]:     Accuracy Decimals: 2
[19:35:36.261][C][mpu6050:030]:     Icon: 'mdi:briefcase-download'
[19:35:36.272][C][mpu6050:016]:   Gyro X 'MPU6050 Gyro X'
[19:35:36.272][C][mpu6050:016]:     State Class: 'measurement'
[19:35:36.272][C][mpu6050:016]:     Unit of Measurement: '°/s'
[19:35:36.272][C][mpu6050:016]:     Accuracy Decimals: 2
[19:35:36.276][C][mpu6050:030]:     Icon: 'mdi:screen-rotation'
[19:35:36.277][C][mpu6050:016]:   Gyro Y 'MPU6050 Gyro Y'
[19:35:36.277][C][mpu6050:016]:     State Class: 'measurement'
[19:35:36.277][C][mpu6050:016]:     Unit of Measurement: '°/s'
[19:35:36.277][C][mpu6050:016]:     Accuracy Decimals: 2
[19:35:36.286][C][mpu6050:030]:     Icon: 'mdi:screen-rotation'
[19:35:36.308][C][mpu6050:016]:   Gyro Z 'MPU6050 Gyro Z'
[19:35:36.308][C][mpu6050:016]:     State Class: 'measurement'
[19:35:36.308][C][mpu6050:016]:     Unit of Measurement: '°/s'
[19:35:36.308][C][mpu6050:016]:     Accuracy Decimals: 2
[19:35:36.308][C][mpu6050:030]:     Icon: 'mdi:screen-rotation'
[19:35:36.318][C][mpu6050:016]:   Temperature 'MPU6050 Temperature'
[19:35:36.318][C][mpu6050:016]:     State Class: 'measurement'
[19:35:36.318][C][mpu6050:016]:     Unit of Measurement: '°C'
[19:35:36.318][C][mpu6050:016]:     Accuracy Decimals: 1
[19:35:36.329][C][mpu6050:026]:     Device Class: 'temperature'
[19:35:36.329][E][component:226]:   mpu6050.sensor is marked FAILED: unspecified
[19:35:36.379][C][captive_portal:128]: Captive Portal:
[19:35:36.379][C][wifi:1304]: WiFi:
[19:35:36.379][C][wifi:1304]:   Local MAC: 20:E7:C8:68:5F:E4
[19:35:36.379][C][wifi:1304]:   Connected: YES
[19:35:36.379][C][wifi:1037]:   IP Address: 192.168.0.45
[19:35:36.383][C][wifi:1048]:   SSID: [redacted]
[19:35:36.383][C][wifi:1048]:   BSSID: [redacted]
[19:35:36.383][C][wifi:1048]:   Hostname: 'esp32-2102'
[19:35:36.383][C][wifi:1048]:   Signal strength: -57 dB ▂▄▆█
[19:35:36.383][C][wifi:1048]:   Channel: 6
[19:35:36.383][C][wifi:1048]:   Subnet: 255.255.255.0
[19:35:36.383][C][wifi:1048]:   Gateway: 192.168.0.1
[19:35:36.383][C][wifi:1048]:   DNS1: 193.47.158.254
[19:35:36.383][C][wifi:1048]:   DNS2: 193.47.158.255
[19:35:36.384][C][esphome.ota:075]: Over-The-Air updates:
[19:35:36.384][C][esphome.ota:075]:   Address: esp32-2102.local:3232
[19:35:36.384][C][esphome.ota:075]:   Version: 2
[19:35:36.384][C][esphome.ota:082]:   Password configured
[19:35:36.416][C][safe_mode:021]: Safe Mode:
[19:35:36.416][C][safe_mode:021]:   Successful after: 60s
[19:35:36.416][C][safe_mode:021]:   Invoke after: 10 attempts
[19:35:36.416][C][safe_mode:021]:   Duration: 300s
[19:35:36.416][C][safe_mode:038]:   Bootloader rollback: support unknown
[19:35:36.416][C][web_server.ota:231]: Web Server OTA
[19:35:36.436][C][api:221]: Server:
[19:35:36.436][C][api:221]:   Address: esp32-2102.local:6053
[19:35:36.436][C][api:221]:   Listen backlog: 4
[19:35:36.436][C][api:221]:   Max connections: 8
[19:35:36.441][C][api:228]:   Noise encryption: YES
[19:35:36.441][C][mdns:177]: mDNS:
[19:35:36.441][C][mdns:177]:   Hostname: esp32-2102
[19:35:36.441][V][mdns:182]:   Services:
[19:35:36.441][V][mdns:184]:   - _esphomelib, _tcp, 6053
[19:35:36.441][V][mdns:187]:     TXT: friendly_name = ESP32-2102
[19:35:36.451][V][mdns:187]:     TXT: version = 2026.1.3
[19:35:36.468][V][mdns:187]:     TXT: mac = 20e7c8685fe4
[19:35:36.468][V][mdns:187]:     TXT: platform = ESP32
[19:35:36.468][V][mdns:187]:     TXT: board = esp32dev
[19:35:36.468][V][mdns:187]:     TXT: network = wifi
[19:35:36.468][V][mdns:187]:     TXT: api_encryption = Noise_NNpsk0_25519_ChaChaPoly_SHA256
[19:35:38.522][VV][api.service:016]: on_ping_request: PingRequest {}
[19:35:38.566][VV][api.service:012]: send_message ping_response: PingResponse {}

Dalej lipa a zmieniłem płytke esp. Moze ten czujnik jest walniety?

10s to nie za długo, nie powinno być w ms?

Może i za długo (do takiego zastosowania jakie jest planowane to naprawdę zdecydowanie za długo - by wskazanie było jako-tako responsywne dla człowieka, to aktualizacje nie mogą być rzadziej niż co sekundę), ale domyślnie jest bodajże 60 sekund?

Nie wnikałem w to jak jest napisany komponent (nie jestem programistą, a w dodatku czytanie kodu nie jest czymś co uwielbiam), ale przyjąłem śmiałe założenie, że to dla sensora różnicy nie robi jak jest często czytany, a nam generowanie mniej zaśmieconego loga ułatwi debugowanie.
W dokumentacji ESPHome jest nawet zastrzeżenie, że do realnie elastycznego wykorzystania tego sprzętu trzeba napisać własny komponent…

Jakkolwiek w sieci widziałem przykłady, gdzie ktoś czyta ten sensor co 200ms i to przy magistrali zaledwie 100kHz (może policzył?, mi się nie chciało) i to na MCU ESP8266 (o jakieś 2 generacje starszym niż S3; jakkolwiek moc obliczeniowa ESP8266 i tak przekracza możliwości wczesnych komputerów osobistych) i skoro to działa (a chyba tak, skoro publikuje), to oczywiście można czytać częściej.
Tu taka dygresja - finalnie wręcz należy czytać możliwie często by móc filtrować szum wskazań i nadal mieć wyjściowe wskazanie niezbyt opóźnione względem rzeczywistości. No ale najpierw potrzeba by to w ogóle działało.

W dodatku tam, gdzie to widziałem jest ładnie opisana integracja z HA
https://van-automation.com/adding_van_tilt_sensor.html
ale w zasadzie zamiast w HA można to wszystko liczyć wewnątrz ESPHome
przykłady na zaawansowaną matematykę


a tak z innej beczki - dzięki świetnemu zdjęciu OPa widać, że płytka jest wykonana bardzo przyzwoicie, za to teraz gdy oglądałem to zdjęcie jeszcze raz by właśnie sprawdzić jakość wykonania zauważyłem to


to w ramce wygląda jak jakieś zanieczyszczenie metaliczne (opiłek?)
sugeruję więc by przedmuchać płytkę sprężonym powietrzem do elektroniki (de facto gazem w aerozolu, zwykle palnym!), ale NIE powietrzem z kompresora (które może zawierać zanieczyszczenia, które tu bardziej zaszkodzą niż pomogą!), albo nawet użyć delikatnej szczoteczki (miękkie szczoteczki do zębów są idealne do elektroniki smd).

Możesz spróbować z Tasmota

Spróbuję oczywiście waszych sugestii. Obecnie czekam na inny czujnik BMI160 bo podejrzewam że obecny jest walnięty. Co do waszych sugestii jutro nad tym siądę i podeślę logi. Dziękuję za zaangażowanie i liczę na dalszą pomoc.

Skoncentrowałem się na zdjęciu samego modułu MPU6050, ale na zdjęciach ogólnych widać jakieś rozwiązania dziwnego łączenia przewodów, może wystarczy je poprawić… (dałbym albo lutowane przewody, albo jakieś z sensowną złączką, a nie taką partyzantkę)

W wątku zapadła cisza, z czego wnoszę, że masz już rozwiązanie, tylko się nim nie chwalisz. edit - egzemlarz należący do OPa wątku był wadliwy, co skończyło się zastosowaniem innego modelu czujnika - BMI160

Sprawiłem sobie taki MPU6050 i… u mnie działa.

Testowo odpaliłem ten czujnik na RPi Pico W “jedynce” (RP2040 133MHz, 256KB RAM, 2MB Flash) i tam były jeszcze duże luzy zasobów (framework arduino dla maliny), bo na tym S3 (ESP32S3 240MHz, 320KB RAM, 16MB Flash, 8MB PSRAM) to strzelamy z armaty do muchy (wykorzystanie RAMu i flasha w konfiguracji poniżej to 10%-12%, a ogromny PSRAM 8MB jest wykorzystany w 0%… więc nie wiem co planujesz jeszcze wrzucić na ten MCU). Aha testowałem też S3 na frameworku Arduino, ale IDF jest optymalny ze wzgłędów przyszłościowych (kierunek rozwoju ESPHome).

Wersja taka trochę na kolanie dla frameworka IDF dokładnie dla takiej płytki, jaką masz, czyli S3(N16R8) są jakieś zbędne komponenty, ale ta płytka S3 to fajna zabawka.
I jeszcze ze 3 słowa komentarza, jest spory drift niektórych parametrów (nie jest to zaskakujące, jedno, że stara generacja MEMS, drugie, że to raczej budżetowy czujnik) nie wiem czy się da temu sensownie zaradzić, o ile żyroskop jest banalny w kalibracji - wystarczy zmierzyć wskazania dłuższy czas w bezruchu, to kalibrowanie akcelerometru będzie w podobny sposób mega upierdliwe, no i tu wchodzi drift - wskazania się rozjeżdzają z czasem.
Druga kwestia szumy własne - dorzuciłem jakies filterki, ale nie są to dobrze dobrane parametry. Poza konkurencją - ze względu na budowę wewnętrzną oś Z ma inne parametry od X i Y więc optymalna orientacja montażu to pozioma (tak by oś Z była pionowa).

substitutions:
  name: "esp32-s3-n16r8-idf"
  friendly_name: "ESP32-S3-N16R8 IDF"

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

esp32:
  board: esp32-s3-devkitc-1
  flash_size: 16MB 
  framework:
    type: esp-idf 

psram:
  mode: octal 
  speed: 80MHz

debug:
  update_interval: 5s

logger:
  level: debug
# Enable logging
#  level: VERY_VERBOSE
#  level: VERBOSE


api:
  encryption:
    key: !secret api_key

ota:
  platform: esphome

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

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

improv_serial:

captive_portal:

web_server:
  port: 80
  auth:
    username: !secret web_username
    password: !secret web_password

one_wire:
  - platform: gpio
    pin: GPIO10   # tu zmieniłem GPIO, bo miałem na takim jak używasz coś innego swojego
    id: one_wire_bus  # swoją drogą nie mam wolnego DS18B20 więc go nie uwzględniłem

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

text_sensor:
  - platform: debug
    device:
      name: ${friendly_name} Device Info
    reset_reason:
      name: ${friendly_name} Reset Reason
  - platform: wifi_info
    ip_address:
      name: ${friendly_name} IP Address
    ssid:
      name: ${friendly_name} Connected SSID
    bssid:
      name: ${friendly_name} Connected BSSID
    mac_address:
      name: ${friendly_name} Mac Wifi Address
    scan_results:
      name: ${friendly_name} Latest Scan Results


binary_sensor:
  - platform: status
    name: ${friendly_name} Node Status
    id: system_status

sensor:
# testowy MPU6050 max ~4mA 
  - platform: mpu6050
    address: 0x68
    update_interval: 50ms # Częstsze odczyty pozwalają na lepsze filtrowanie
    accel_x:
      name: "MPU6050 Accel X"
      id: accel_x
      filters:
        - sliding_window_moving_average:
            window_size: 35
            send_every: 9
        - or:
            - throttle_average: 500ms
            - delta: 1.0
#      internal: true # Ukrywamy surowe dane, by nie zaśmiecać interfejsu
    accel_y:
      name: "MPU6050 Accel Y"
      id: accel_y
      filters:
        - sliding_window_moving_average:
            window_size: 35
            send_every: 9
        - or:
            - throttle_average: 500ms
            - delta: 1.0
#      internal: true # Ukrywamy surowe dane, by nie zaśmiecać interfejsu
    accel_z:
      name: "MPU6050 Accel Z"
      id: accel_z
      filters:
        - sliding_window_moving_average:
            window_size: 35
            send_every: 9
        - or:
            - throttle_average: 500ms
            - delta: 1.0
#      internal: true # Ukrywamy surowe dane, by nie zaśmiecać interfejsu
    gyro_x:
      name: "MPU6050 Gyro X"
      id: gyro_x
      filters:
        - offset: 0.91
        - sliding_window_moving_average:
            window_size: 35
            send_every: 9
        - or:
            - throttle_average: 500ms
            - delta: 1.0

    gyro_y:
      name: "MPU6050 Gyro Y"
      id: gyro_y
      filters:
        - offset: -1.415
        - sliding_window_moving_average:
            window_size: 35
            send_every: 9
        - or:
            - throttle_average: 500ms
            - delta: 1.0

    gyro_z:
      name: "MPU6050 Gyro Z"
      id: gyro_z
      filters:
        - offset: 1.85
        - sliding_window_moving_average:
            window_size: 35
            send_every: 9
        - or:
            - throttle_average: 500ms
            - delta: 1.0

    temperature:
      name: "MPU6050 Temperature"
      filters:
        - sliding_window_moving_average:
            window_size: 45
            send_every: 15
        - or:
            - throttle_average: 5s
            - delta: 0.5
  # Obliczanie kąta nachylenia (Pitch)
  - platform: template
    name: "MPU6050 Kąt Nachylenia X"
    icon: "mdi:axis-x-rotate-clockwise"
    unit_of_measurement: "°"
    accuracy_decimals: 1
    lambda: |-
      return (atan2(id(accel_x).state, sqrt(pow(id(accel_y).state, 2) + pow(id(accel_z).state, 2))) * 180 / M_PI);
    filters:
      - sliding_window_moving_average:
          window_size: 25 # Uśrednia ostatnie 25 odczytów
          send_every: 7   # Wysyła dane do Home Assistant co 7 odczytów
      - or:
          - throttle: 500ms # Wysyła dane nie częściej niż co pół sekundy...
          - delta: 1.0      # ...chyba że kąt zmieni się o więcej niż 1 stopień
  # Obliczanie kąta nachylenia (Roll)
  - platform: template
    name: "MPU6050 Kąt Nachylenia Y"
    icon: "mdi:axis-y-rotate-clockwise"
    unit_of_measurement: "°"
    accuracy_decimals: 1
    lambda: |-
      return (atan2(id(accel_y).state, sqrt(pow(id(accel_x).state, 2) + pow(id(accel_z).state, 2))) * 180 / M_PI);
    filters:
      - sliding_window_moving_average:
          window_size: 15
          send_every: 5  
      - or:
          - throttle: 500ms 
          - delta: 1.0    
  - platform: debug
    free:
      name: "Heap Free"
    block:
      name: "Heap Max Block"
    loop_time:
      name: "Loop Time"
    psram:
      name: "Free PSRAM"
  - platform: internal_temperature
    name: ${friendly_name} Internal Temperature
    accuracy_decimals: 1


switch:
  - platform: restart
    name: ${friendly_name} Restart

button:
  - platform: safe_mode
    name: ${friendly_name} Safe Mode Boot
    entity_category: diagnostic
  - platform: template
    name: Light Red
    id: my_button_red
    icon: "mdi:alpha-r-box-outline"
    on_press:
      - light.turn_on:
          id: zarowa
          brightness: 50%
          red: 100%
          green: 0%
          blue: 0%
#          transition_length: 0.5s

  - platform: template
    name: Light Blue
    id: my_button_blue
    icon: "mdi:alpha-b-box-outline"
    on_press:
      - light.turn_on:
          id: zarowa
          brightness: 50%
          red: 0%
          green: 0%
          blue: 100%

  - platform: template
    name: Light Green
    id: my_button_green
    icon: "mdi:alpha-g-box-outline"
    on_press:
      - light.turn_on:
          id: zarowa
          brightness: 50%
          red: 0%
          green: 100%
          blue: 0%

  - platform: template
    name: Light Yellow
    id: my_button_yellow
    icon: "mdi:alpha-y-box-outline"
    on_press:
      - light.turn_on:
          id: zarowa
          brightness: 50%
          red: 70%
          green: 45%
          blue: 0%

  - platform: template
    name: "Buzzer LEDC"
    on_press:

# Example usage in an automation

        then:
    ######################################################
    # Must be turned on before setting frequency & level
    ######################################################
        - output.turn_on: buzzer
    ######################################################
    # Frequency sets the wave size
    ######################################################
        - output.ledc.set_frequency:
            id: buzzer
            frequency: "1000Hz"
    ######################################################
    # level sets the %age time the PWM is on
    ######################################################
        - output.set_level:
            id: buzzer
            level: "50%"
        - delay: 0.5s
        - output.turn_off: buzzer
        - delay: 0.5s
        - output.turn_on: buzzer
        - output.ledc.set_frequency:
            id: buzzer
            frequency: "2000Hz"
        - output.set_level:
            id: buzzer
            level: "50%"
        - delay: 0.5s
        - output.turn_off: buzzer
        - delay: 0.5s
        - output.turn_on: buzzer
        - output.ledc.set_frequency:
            id: buzzer
            frequency: "5000Hz"
        - output.set_level:
            id: buzzer
            level: "50%"
        - delay: 0.5s
        - output.turn_off: buzzer
        - delay: 0.5s
        - output.turn_on: buzzer
        - output.ledc.set_frequency:
            id: buzzer
            frequency: "10000Hz"
        - output.set_level:
            id: buzzer
            level: "50%"
        - delay: 0.5s
        - output.turn_off: buzzer
        - delay: 0.5s
        - output.turn_on: buzzer
        - output.ledc.set_frequency:
            id: buzzer
            frequency: "14000Hz"
        - output.set_level:
            id: buzzer
            level: "50%"
        - delay: 1.5s
        - output.turn_off: buzzer

light:
  - platform: esp32_rmt_led_strip
    rgb_order: GRB
    pin: GPIO48
    num_leds: 1
    chipset: ws2812
    name: "NeoPixel Light"
    default_transition_length: 0.5s

    id: zarowa
    effects:
      # Use default parameters:
      - random:
      - random:
          name: Random Effect With Custom Values
          transition_length: 5s
          update_interval: 7s
      # Customize parameters
      - random:
          name: "My Slow Random Effect"
          transition_length: 30s
          update_interval: 30s
      - random:
          name: "My Fast Random Effect"
          transition_length: 4s
          update_interval: 5s
      - pulse:
      - pulse:
          name: "Fast Pulse"
          transition_length: 0.5s
          update_interval: 0.5s
      - pulse:
          name: "Slow Pulse"
          # transition_length: 1s      # defaults to 1s
          update_interval: 2s
      - strobe:
      - strobe:
          name: Strobe Effect With Custom Values
          colors:
            - state: true
              brightness: 100%
              red: 100%
              green: 90%
              blue: 0%
              duration: 500ms
            - state: false
              duration: 250ms
            - state: true
              brightness: 100%
              red: 0%
              green: 100%
              blue: 0%
              duration: 500ms
      - flicker:
      - flicker:
          name: Flicker Effect With Custom Values
          alpha: 95%
          intensity: 1.5%
      - lambda:
          name: My Custom Effect
          update_interval: 1s
          lambda: |-
            static int state = 0;
            auto call = id(zarowa).turn_on();
            // Transition of 1000ms = 1s
            call.set_transition_length(1000);
            if (state == 0) {
              call.set_rgb(1.0, 1.0, 1.0);
            } else if (state == 1) {
              call.set_rgb(1.0, 0.0, 1.0);
            } else if (state == 2) {
              call.set_rgb(0.0, 0.0, 1.0);
            } else {
              call.set_rgb(1.0, 0.0, 0.0);
            }
            call.perform();
            state += 1;
            if (state == 4)
              state = 0;

# Configure the output
output:
  - platform: ledc
    ######################################################
    # One buzzer leg connected to GPIO12, the other to GND
    ######################################################
    pin: GPIO12
    id: buzzer

8 postów zostało podzielonych na nowy temat: Żyroskop i akcelerometr Bosch BMI160 na ESP32