«

»

Nov 08

Stampa Articolo

Neopixel Wemos Web server

Neopixel wemos web server usa la fastled library e la potenza del web per controllare dei Neopixel led WS2812B adafruit ad anello.

neopixel wemos web server fastled light-on

In questa prima parte del progetto ti concentrerai sulla creazione del WeMos web server e correlazione con il controllo dei neopixel mediante la libreria Fast led.

Metti insieme le conoscenze apprese nei due articoli:

in modo da controllare i led WS2812B da una pagina Web creata direttamente sulla ESP8266.

Collegamento Neopixel Wemos Web server

La parte di cablaggio è molto simile a quella mostrata nel primo articolo linkato sopra che ti riporto per completezza della trattazione:

neopixel ring fastled wemos schema

come vedi molto semplice.

Lo sketch Neopixel Wemos Web server

Lo sketch Neopixel Wemos Web server unisce diverse librerie e conoscenze in un unico listato ma per chiarezza ho diviso tutto il listato in due file:

il presente listato, main, relativo alle impostazioni principali;

un secondo listato contenete tutte le funzioni richiamate dal main;

In un prossimo articolo leggerai come realizzare le funzioni, per adesso è importate che tu sappia che per fare ciò devi creare due file ( .ino ) nella medesima directory: il primo avrà il nome del progetto e conterrà il listato sotto, il secondo lo chiamerai “function.ino” e ci metterai le sole funzioni “esterne”:

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <FastLED.h>

#define LED_PIN     5
#define NUM_LEDS    24
#define BRIGHTNESS  255
#define LED_TYPE    WS2812B
#define COLOR_ORDER GRB
#define FASTLED_INTERRUPT_RETRY_COUNT 0 
#define FASTLED_ALLOW_INTERRUPTS 0

CRGB leds[NUM_LEDS];

#define UPDATES_PER_SECOND 100

const char *wifi_ssid = "[il tuo SSID wifi]";
const char *wifi_password = "[la tua password wifi]";

ESP8266WebServer server(80);
WiFiClient espClient;

CRGBPalette16 currentPalette;
TBlendType    currentBlending;

extern CRGBPalette16 myRedWhiteBluePalette;
extern const TProgmemPalette16 myRedWhiteBluePalette_p PROGMEM;

void setup() {
  delay(1000);
  Serial.begin(115200);
  Serial.println();

  FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
  FastLED.setBrightness(  BRIGHTNESS );
  
  currentPalette = RainbowColors_p;
  currentBlending = LINEARBLEND;

  setup_wifi();
  composeWebPage();
  startWebServer();
}

void loop() { 
    static uint8_t startIndex = 0;
    startIndex = startIndex + 1; /* motion speed */
    
    FillLEDsFromPaletteColors( startIndex);
    
    FastLED.show();
    FastLED.delay(1000 / UPDATES_PER_SECOND);
    
    server.handleClient();
}

le prime linee 01-03: includono le librerie WiFi e WebServer per la ESP8266;

linea 04: includi la FastLed.h library necessaria al controllo dei led;

linee 06-10: definisci i parametri di funzionamento dello sketch specificando il pin a cui hai collegato i led, il numero di led da gestire, la luminosità iniziale, il modello di led e l’ordine in cui sono collegati i 3 colori contenuti nel singolo led;

linee 11-12: sono due parametri che devi inserire per correggere un malfunzionamento della libreria FastLed con la WeMos, il cui scopo è inibile l’interferenza dei contatori di interrupt presenti nella WeMos;

linea 14: inizializza la variale “leds” della libreria FAstLed;

linea 16: definisci il refresh time update al secondo, in questo caso ho lasciato il default a 100 ossia 100 update al secondo;

linee 18-19: inserisci il SSID e la password della tua WiFI per consentire al progetto di connettersi;

linee 21-22: inizializza il server sulla porta 80, standard http e il client wifi ESP8266 che userai per collegarti alla rete WiFi;

linea 24-25: imposta due istanze currentPalettecurrentBlending che userai per tracciare lo stato dei led e cambiare la modalità di scorrimento della palette;

linee 27-28: definisci la palette myRedWhiteBluePalettemyRedWhiteBluePalette_p;

linea 35: inizializza la FastLed passandole i parametri impostati nelle linee precedenti ed utilizza il metodo setCorrection per l’utilizzo con strisce di led;

linea 37: imposta la luminosità di default per i led a BRIGHTNESS ( 255 );

linee 39-40: imposta la palette corrente a RainbowColors_p e la modalità di blending corrente a LINEARBLEND;

linea 42: richiama la funzione setup_wifi() che analizzeremo con il file function.ino per eseguire il collegamento al wifi;

linea 43: richiama la funzione composeWebPage() il cui scpo è creare la pagina web da servire via Web;

linea 44: avvia il web server richiamando al funzione startWebServer();

linea 48: definisci una variabile di indice ed impostala a 0 per ogni ciclo di loop();

linea 49: incrementa la variabile appena creata startIndex;

linea 51: richiama la funzione FillLEDsFromPaletteColors che imposta i colori di tutti i led in funzione della palette selezionata e dei parametri di blending definiti;

linea 53: indica alla FastLed di mostrare quanto impostato;

linea 54: imposta il tempo di attesa ( delay ) nell’aggiornamento dei colori come: 1000 / 100, impostato alla linea 16. Applica un refresh di 10 millisecondi;

linea 56: utilizza il metodo handleClient per servire la pagina corrente al client connesso sulla porta 80.

Collegati al Neopixel Wemos Web server

Collegati al server web creato sulla wemos, vedrai la pagina creata, simile alla seguente:

neopixel wemos web server html page

con cui puoi variare i giochi di luce del Neopixel Wemos Web server cliccando sui bottoni che vedi a video.

Ecco un video che ho realizzato per mostrarti cosa accade per ciascun effetto luminoso alla pressione del bottone corrispondente:

ora prova a variare gli effetti luminosi nello sketch per adattarli al tuo progetto.

Permalink link a questo articolo: http://www.mauroalfieri.it/elettronica/neopixel-wemos-web-server.html

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Puoi usare i seguenti tag ed attributi HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>