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"
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
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.
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