Her er kode for å styre addresserbare LEDS
Sitat#include "FastLED.h"#define NUM_LEDS 264CRGB leds[NUM_LEDS];#define PIN 4void setup(){FastLED.addLeds<WS2812, PIN, RGB>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );}void loop() {for(int i = 0; i < NUM_LEDS ; i++) {setAll(0,0,0);setPixel(i, 25, 0, 66);FastLED.show();delay(20);}}void setPixel(int Pixel, byte red, byte green, byte blue) {leds[Pixel].r = red;leds[Pixel].g = green;leds[Pixel].b = blue;}void setAll(byte red, byte green, byte blue) {for(int i = 0; i < NUM_LEDS; i++ ) {setPixel(i, red, green, blue);}showStrip();}
Bibliotekene er:
Litt om LED
Å slå på en LED er vanligvis noe av det aller første en gjør når en starter med å leke med ESP32.
ESP32 har til og med en onboard LED på pinne 2 som en kan bruke til testing uten eksterne komponenter.
En LED har ingen (stor) indre motstand som en lyspære og må ha en ekstern motstand for å begrense strømmen slik at den ikke brenner opp.
Max støm på LEDen finner du i spesifiksjonen på den, der finner du også spenningsfallet over selve LEDen (Forward Voltage). Om den site ikke er oppgitt kan du slå den opp (typisk) i en tabell. Her er en kalkulator for motstand:
https://www.digikey.com/en/resources/conversion-calculators/conversion-calculator-led-series-resistor
Husk at ESP32 pinnen selv ikke tåler mer enn typisk 20mA. (Noen sier 40mA)
Det lange beinet skal til +:
Skal du ha 3 LEDs (Feks Rød, gul og Grønn) må du bruke 3 pinner på ESP32en og en egen motstand for hver LED.
RGB Led
Men det finnes LED som har alle 3 fargene bygget inn i samme LED, -en RGB LED.
Her er alle mins koblet sammen og ført ut på den lengste pinnen:
OBS De finnes både i "common Anode" og "Common Catode", husk å sjekke hva du kjøper.
Her må du fremdeles ha en motstand for hver farge og bruke 3 pinner.
RGB LED Strips
De første LED stripene som kom var koblet slik at alle LEDene hadde sin egen motstand og fargene var ført ut på hver sin tilkobling:
Disse oppfører seg altså litt som en RBG LED men drar veldig mye strøm på grunn av alle LEDene. Du kan altså ikke koble disse direkte til pinner på ESP32en men må sette en driver-boks i mellom eller en havlvleder som feks en MOS-Fet. (Det kommer en egen guid senere om MOS-Fet)
For å få hvitt lys skal en slå på både Rød, grønn og Blå samtidig. Dette blir ikke helt hvitt så derfor ble det laget striper med en egen hvit LED i tillegg: RGBW. Til interiør belysning var det ønskelig med en varmere hvit og derfor kom RGBWW som har enda en ekstra LED som er warm-white.
Adresserbare LED
MEN fordi LEDstrips ble så poppulære bygget man etterhvert inn en egen liten IC på hver eneste LED på stripen slik at disse kunne styres med et signal fra ESP32en. Dette gjorde også at en kunne styre hver enkelt LED på stripen helt separat og ikke alle de RØD samtidig slik som på RGB stripene. Senere ble disse ICene integrert i selve LEDen.
Disse LED stippene har altså bare 3 tilkoblinger: + - og data og hver IC sender dataene videre til nestemann.
De trenger ingen motstander eller MOS-Fet og har egen strøm strømforskyning som kan være 24V for å kunne ha lange striper uten spenningsfall.
Adresseringen er "relativ" slik at førstemann på stripa er nr 0 og nestemann er nr 1 osv. Dette skjer ved at ICen "teller opp" adressen med 1 og sender videre. Du kan altså klippe og skjøte hvor du vil og adressene er fremdeles fortløpende fra den første som får data og videre bortover. OBS Det betyr osgå at stripene har en rettning som du må følge når du kobler. Blir det brudd i datastrømmen slukker hele resten av rekka. De har derfor begynt å produsere striper med en esktra backup datakanal (merket BO - BI)
Enkelt Adresserbare LED
Det finnes også enkelt LED som er adresserbare. Jeg er veldig glad i slike for å la ESP32en kommunisere statuser med omverdenen. Her trenger jeg bare en pinne på ESP32en og en motstand (330 ohm) mellom ESP32en og LEDen og så kan jeg koble meg videre med så mange ekstra LED jeg bare trenger uten å bruke flere pinner eller motstander 🙂
Kode
Koden for å jobbe med Adresserbare LED er super enkel. Alt skjer i biblioteket FastLED:
Du lager ganske fort en par forenklings rutiner som feks disse:
SitatMQTTclient.subscribe("takLEDClient/rainbow", [](const String & payload) {Serial.print("rainbow: ");Serial.println(payload);rainbowLoop(payload.toInt());show_last_colors(); // reset});void rainbow(){static uint8_t hue;for(int i = 0; i < NUM_LEDS; i++){leds[i] = CHSV((i * 256 / NUM_LEDS) + hue, 255, 255);}FastLED.show();hue++;}void rainbowLoop(int nSec){long millisIn = millis();long loopTime = nSec * 1000; // secondswhile(millis() < millisIn + loopTime){rainbow();delay(5);}}
Anbefalte kommentarer
Det er ingen kommentarer å vise.
Bli med i samtalen
Du kan publisere innhold nå og registrere deg senere. Hvis du har en konto, logg inn nå for å poste med kontoen din.