Witam.
Dostałem płytki ESP32-S3 i właśnie cos tam sobie skrobie przy nich ale napotkałem problem. Nie mogę uzyskać sygnału PWM. Z dokumentacji wynika że PWM można uzyskać na pinach 0 - 33, wybrałem pin 7 ale sygnał nie jest obecny. Mam kartę encji z suwakiem którym można regulować sygnał ale płytka nie reaguje. kombinowałem kilka rozwiązań, bez skutku. Aktualnie mój kod wygląda tak.
output:
- platform: ledc
pin:
number: 7
mode:
output: true
# pin: GPIO7
id: gpio_7
# Example usage in a light
light:
- platform: monochromatic
output: gpio_7
name: "Kitchen Light"
A reszta YAMLa gdzie jest?
Nie było błędów przy kompilacji?
Korzystałeś z platformy ledc
na zwykłych ESP32?
PS sprawdziłem na S3 na przykładzie buzzera (bo nie mam czego podłączyć jako obwód wykonawczy dla ledów) i działa.
Cały kod
esphome:
name: sterownik-1
friendly_name: Sterownik 1
esp32:
board: esp32-s3-devkitc-1
framework:
type: arduino
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "VwTQ/fTpjeo+zQYyGKd7gF0e49aeA7DzQ3JO5/KTDrQ="
ota:
password: "44409facbe4c182b7c05f9409647183e"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Sterownik-1 Fallback Hotspot"
password: "yQ7pgXL254H0"
# Optional manual IP
manual_ip:
static_ip: 192.168.1.200
gateway: 192.168.1.1
subnet: 255.255.255.0
captive_portal:
binary_sensor:
- platform: gpio
pin:
number: 2
mode:
input: true
pullup: true
name: "Drzwi wejściowe"
device_class: window
- platform: gpio
pin:
number: 3
mode:
input: true
pullup: true
name: "Drzwi łazienka"
device_class: window
- platform: gpio
pin:
number: 4
mode:
input: true
pullup: true
name: "Drzwi sypialnia"
device_class: window
- platform: gpio
pin:
number: 5
mode:
input: true
pullup: true
name: "Balkon sypialnia"
device_class: window
- platform: gpio
pin:
number: 6
mode:
input: true
pullup: true
name: "Balkon salon"
device_class: window
# Example configuration entry
output:
- platform: ledc
pin:
number: 7
mode:
output: true
# pin: GPIO7
id: gpio_7
# Example usage in a light
light:
- platform: monochromatic
output: gpio_7
name: "Kitchen Light"
Nie korzystałem z platformy ledc, jest to moja pierwsza płytka z serii esp32.
miałem też problem z odwróceniem, zanegowaniem stanu pinu, problem został usunięty po dodaniu wpisu
pin:
number: 4
mode:
input: true
pullup: true
był też problem z WIFI, moduł raz się łączył raz nie, częściej był rozłączony z siecią, pomogło nadanie stałego adresu
manual_ip:
static_ip: 192.168.1.200
gateway: 192.168.1.1
subnet: 255.255.255.0
co do samego kodu, to uprzedzę pytanie, wiem że nie jest zalecane korzystanie z pinu 3 jako wejścia, ale są to wczesne testy. przy kompilacji i wysyłaniu kodu nie było błędów, jedynie ostrzeżenie o pinie 3.
EDIT:
Problem został rozwiązany, tkwił w kablologii.
Pomijam problemy z odwróceniem stanu na wejściu (bo to nie jest problem, chyba że nie rozumiem, co chciałeś powiedzieć) i z WiFi (u mnie nie występuje, ale na podstawie licznych doświadczeń i opisywanych na forum przypadków uważam, że nie ma on nic wspólnego z ESP przynajmniej w 95% przypadków).
W przypadku ESP32-S3 nie należy używać pinów GPIO0, GPIO3, GPIO45 i GPIO46 za wyjątkiem sytuacji, w których wiesz co robisz (tzn. jakie ma skutki uboczne ich wykorzystanie i do jakich sytuacji to może prowadzić), a w szczególności nie wolno zmieniać ich sprzętowych pull-up/pull-down’ów. (przykładowo stan GPIO3 podczas bootowania wpłynie na piny wykorzystywane przez JTAG, więc lepiej nie używać tego jednego GPIO niż czterech innych)
Platforma ledc
działa na aktualnym ESPHome 2023.5.2 z frameworkiem arduino (podejrzewałem problemy związane z eksperymentalnym statusem wsparcia S3, ale jest OK), sprawdzałem na GPIO7, tu masz przykładowy kod, który wykorzystałem dla buzzera, jeśli jesteś ryzykantem możesz zamiast niego podpiąć jedną diodę LED, najbezpieczniej białą lub niebieską (a aby na 100% nie puścić niczego z dymem sugeruję użyć szeregowo z LEDem rezystor 200R wtedy może być i czerwona).
EP32-S3 ma 8 generatorów PWM, więc równocześnie możesz wykorzystać maksymalnie 8 GPIO w tym celu (o ile nie zafundujesz mu jakichś konfliktów).
Kliknięcie przycisku powoduje krótki pisk niższej częstotliwości i nieco dłuższy wyższej, jeśli tam zamiast buzzera między GPIO7 a masę będzie wpięta dioda LED, to będzie to krótki błysk i dłuższy błysk, oba na 50% maksymalnej jasności w danym układzie elektrycznym.
# Configure the output
output:
- platform: ledc
# One buzzer leg connected to GPIO7, the other to GND
pin: GPIO7
id: buzzer
button:
- platform: template
name: "Buzzer LEDC"
on_press:
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 percentage 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: "5000Hz"
- output.set_level:
id: buzzer
level: "50%"
- delay: 1.5s
- output.turn_off: buzzer