[TUTO] Faire de l'Ambilight sans fil avec un Esp8266/Nodemcu et la Bibliothèque FastLed

 

Le but de ce Tuto est d'utiliser un Esp8266, Nodemcu ou autre microcontrôleur ESP pour faire de l'Ambilight en Wifi.

  

Pour ce Tuto j'ai :

  • Utiliser un Nodemcu Lolin V3 mais tout autre modèle fera l'affaire.
  • Testé plusieurs bandes de LED : WS2812B, SK6812 et SK9822 ( équivalent aux APA102) 
  • Utilisé la release 0.84 du sketch ESP8266_Hyperion_LED-Controller.

 

!!!!  Après plusieurs essais le mode FIRE2012 provoque des vagues de couleurs désagréables ( pour moi ) en mode IDLE, ne pas créer de fichier de configuration avec ce mode ou de le sélectionner dans l'interface Web !!!! 

 

Voici ce qu'il est possible de faire avec un peu d'imagination. ( plus d'infos sur la page projet )


 

Préalable

 

Tout d'abord il nous faut :

  • Un Nodemcu/Esp8266
  • Le logiciel Arduino IDE correctement configuré pour un esp8266, voir ici et sélectionner le type de carte en fonction de ce que vous avez
  • La bibliothèque ArduinoThread, ArduinoJSON, LinkedList et FastLED installés via le gestionnaire de bibliothèques.
  • La bibliothèque Arduino-logging-library  installé manuellement à partir de cette archive : Arduino-logging-library ( Onglet Croquis, Inclure une bibliothèque, Ajouter la bibliotheque ZIP, puis selectionner  Arduino-logging-library-master.zip).

 

Si vous utilisez un ESP-01, il faudra modifier 3 lignes pour faire correspondre la configuration au GPIO0 et GPIO2 

Dans l'onglet HyperionRGB :

  • la ligne #define LED D0 // LED in NodeMCU at pin GPIO16 (D0) devient #define LED 2 // LED in NodeMCU at pin GPIO16 (D0)

Dans l'onglet ConfigStatic.h la ligne :

 

  • #define CONFIG_LED_DATAPIN D7 devient #define CONFIG_LED_DATAPIN 2 et 
  • #define CONFIG_LED_CLOCKPIN D5 devient #define CONFIG_LED_CLOCKPIN 0 

 

 

Modification du Sketch pour la programmation

 

Décompresser ESP8266_Hyperion_LED-Controller-master.zip et entrer dans le dossier ESP8266_Hyperion_LED-Controller-master puis HyperionRGB.

Renommer le fichier ConfigStatic.h.example en ConfigStatic.h

 

Un fois fait, ouvrir HyperionRGB.ino dans Arduino.

 

Screenshot de ce qu'on devrait voir :

 

Puis cliquer sur ConfigStatic.h. On devrai avoir ceci d'afficher :

 

 

Vous avez 2 choix :

  • Commencer à faire les modifications si vous savez ce que vous faites
  • Supprimer le contenu du fichier et faire un copier/coller de se qui se trouve en dessous de ConfigStatic.h. Mon fichier à télécharger ici 
ConfigStatic.h 


/*Configuration type*/

#define CONFIG_ENABLE_WEBCONFIG 1               // Activer l'interface Web
//#define CONFIG_OVERWRITE_WEBCONFIG 1            // Remplacer toutes les valeurs de l'interface Web par les valeurs de *Main static configuration*. Commenter la ligne pour ne pas ecraser ces valeurs.
 
/*Logging level*/
#define LOGLEVEL LOG_LEVEL_INFOS
 
//    Partie qui ne peut pas être modifier sur l'interface Web port 80   //
/*Main static configuration*/
#define CONFIG_LED_COUNT 24                    // Nombre de Leds
#define CONFIG_LED_COLOR_ORDER RGB              // Ordre des Couleurs
 
//  Configuration pour 3 fils  //               // Commenter les 3 prochaines lignes pour une configuration à 4 fils
#define CONFIG_LED_CLOCKLESS_CHIPSET WS2812B  // Modifier WS2812B par votre modèle ( WS2811, WS2812, WS2812B ....) 
#define CONFIG_LED_DATAPIN D7
#define FASTLED_ALLOW_INTERRUPTS 0            // A commenter si Flickering
 
//  Configuration pour 4 fils //                // Commenter les 3 prochaines lignes pour une configuration à 3 fils
//#define CONFIG_LED_SPI_CHIPSET APA102           // Modifier APA102 par WS2801 ....
//#define CONFIG_LED_CLOCKPIN D5 
//#define CONFIG_LED_DATAPIN D7
 
// ---  Autre Options --- //
#define FASTLED_ESP8266_RAW_PIN_ORDER
//#define FASTLED_ESP8266_NODEMCU_PIN_ORDER
//#define FASTLED_ESP8266_D1_PIN_ORDER
 
//OFF, HYPERION_UDP, STATIC_COLOR, RAINBOW, FIRE2012
#define CONFIG_LED_STANDARD_MODE RAINBOW     // Effet de Démarrage ou d'attente de liaison UDP 
#define CONFIG_LED_HYPERION_AUTOSWITCH true 
#define CONFIG_LED_STANDARD_MODE_TIMEOUT_MS 5000 
 
//    Partie qui peut être modifier sur l'interface Web port 80    //
/*Main configuration*/
#define CONFIG_WIFI_SSID "SSID"                // Indiquer le Nom de votre Réseau
#define CONFIG_WIFI_PASSWORD "MOTDEPASSE"        // Indiquer le Mot de Passe de votre Réseau
 
//#define CONFIG_WIFI_STATIC_IP 1              // Commenter ces 4 lignes pour passer en DHCP ou decommenter pour un adressage statique
//const byte CONFIG_WIFI_IP[] = {192, 168, 1, 123};
//const byte CONFIG_WIFI_SUBNET[] = {255, 255, 255, 0};
//const byte CONFIG_WIFI_DNS[] = {192, 168, 1, 1};
 
#define CONFIG_WIFI_HOSTNAME "ESP8266"        // Indiquer le Nom du Dispositif
#define CONFIG_PORT_JSON_SERVER 19444         
#define CONFIG_PORT_UDP_LED 19446    

 

 J'ai modifié le contenu selon mon utilisation et pour des questions pratique. 

On devrai arriver à ça suite au copier/coller : 

 

 

 

Configuration du Sketch

 

Les modifications sont faite à partir du fichier ConfigStatic.h que j'ai remanié et non de l'original.

 

Les options à modifier dans la partie Main Static Configuration sont le Nombre de Leds et l'ordre des couleurs :

 

/*Main static configuration*/

#define CONFIG_LED_COUNT 360                    // Nombre de Leds

#define CONFIG_LED_COLOR_ORDER RGB              // Ordre des Couleurs

 

 

Ensuite si vous avez une bande à 3 fils, il faut commenter la partie de configuration pour bande à 4 fils :

 

//  Configuration pour 3 fils  //               // Commenter les 3 prochaines lignes pour une configuration à 4 fils

#define CONFIG_LED_CLOCKLESS_CHIPSET WS2812B  // Modifier WS2812B par votre modèle ( WS2811, WS2812, WS2812B ....) 

#define CONFIG_LED_DATAPIN D7

#define FASTLED_ALLOW_INTERRUPTS 0            // A commenter si Flickering

 

//  Configuration pour 4 fils //                // Commenter les 3 prochaines lignes pour une configuration à 3 fils

//#define CONFIG_LED_SPI_CHIPSET APA102           // Modifier APA102 par WS2801 ....

//#define CONFIG_LED_CLOCKPIN D5 

//#define CONFIG_LED_DATAPIN D7

 

 

Sur le même principe si vous avez une bande à 4 fils, commenter la partie de configuration pour bande à 3 fils comme cela :

 

//  Configuration pour 3 fils  //               // Commenter les 3 prochaines lignes pour une configuration à 4 fils

//#define CONFIG_LED_CLOCKLESS_CHIPSET WS2812B  // Modifier WS2812B par votre modèle ( WS2811, WS2812, WS2812B ....) 

//#define CONFIG_LED_DATAPIN D7

//#define FASTLED_ALLOW_INTERRUPTS 0            // A commenter si Flickering

 

//  Configuration pour 4 fils  //               // Commenter les 3 prochaines lignes pour une configuration à 3 fils

#define CONFIG_LED_SPI_CHIPSET APA102           // Modifier APA102 par WS2801 ....

#define CONFIG_LED_CLOCKPIN D5 

#define CONFIG_LED_DATAPIN D7

 

 

Il ne reste plus qu'a renseigner le nom du réseau, le mot de passe, si on veux activer l'adressage IP statique ou pas ou encore les ports d'Hypérion.

 

Ces dernières informations sont modifiables via l'interface web de notre microcontrôleur une fois programmé.

 

Ensuite il va falloir ouvrir un Moniteur Série ( Onglet Outils, Moniteur Série ).  Une nouvelle boite de dialogue apparaît. Celle-ci nous permet d'obtenir des informations dès la fin de la programmation.

 

On peut maintenant Téléverser. Si tout se passe bien on obtient quelque chose de ce type ( avec l'adresse IP d'affiché ) :

 

Si par contre vous voyez ceci défiler c'est que votre nom de réseau ou mot de passe est incorrect.

 

I:  Start logging

I:  CFG=loadStaticConfig initConfig

I:  Configuration read at 0x0 with v3

I:  Configuration saved at 0x0 with v3

I:  CFG=loadStaticConfig END

I:  Configuration read at 0x0 with v3

I:  CFG=EEPROM config loaded

I:  Reset Mode

I:  Mode changed to 4

I:  Connecting to WiFi Asus_4G-N12

I:  Using dynamic ip

E: WiFi Connection Failed! Rebooting...

 

 

 J'ai volontairement modifié le nom du réseau qui est en minuscule au lieu d’être en majuscule afin d'obtenir ce message d'erreur.

 

Si vous avez activé l'interface Web ( port 80) vous pouvez accéder à celle-ci et comme indiqué plus haut, modifier certaine valeurs en direct.

 

Screenshot de l'interface :

 

 

Il est préférable de configurer le Nodemcu avec une adresse IP statique pour le fonctionnement d'Hypérion.

 

Pour cela renseigner la partie Wifi de la page puis Save & restart pour appliquer les modifications, et essayer de vous connecter sur la nouvelle adresse pour voir si elle à bien était prise en compte.

 

 

Câblage

 

Maintenant que le microcontrôleur est programmé, on peut passé au branchement.

 

Le câblage doit ressembler à ceci. Tout dépend de votre configuration, 3 ou 4 fils.

 

 

Le Data se branche sur la pin D7 ( GPIO13 - HMOSI ) pour les 2 bandes. Si vous avez une bande à 4 fil la Clock va sur le D5 ( GPIO14 - HCLK ).

 

Les Gnd sont connectés entre eux et la bande alimenté en parallèle en 5v.

Le Nodemcu est alimenté soit par un chargeur MicroUsb ou par la broche Vin du GPIO.

 

 

 Si vous utilisez un ESP-01 voici les branchements à effectuer :

 

Une fois tout branché on peux passer à la config d'Hypérion.

 

 

 

Modification de la configuration d'Hypérion

 

 

 

Si vous avez un fichier fonctionnel, vous pouvez faire un copier/coller de ce qui se trouve ci-dessous dans la partie device de votre fichier  et modifier que ce qui est en gras en fonction de votre configuration. 

 

 

        "device" :

        {

                "name"       : "NodeMcuWfi",

                "type"       : "udp",

                "output"     : "192.168.1.10:19446", ///

                "rate"     : 1000000,

                "maxpacket"     : 1450,

                "protocol"     : 0,

                "colorOrder" : "grb"

        },

 

 

 Ne reste plus qu'a executer Hypérion comme vous le faites normalement.

 

Vous devriez voir vos LEDs s'allumer comme si elle était connecté au GPIO de votre Pi ou de votre Arduino.

 

 

Bon mod à tous !!! 

 

Un grand merci à SciLor pour son travail.

Commentaires : 4 (Discussion fermée)
  • #1

    Jonathan (jeudi, 09 mars 2017 23:09)

    Salut !

    Je possède un restant de bande ws2813 donc à 4 fils , j'ai un sonoff sur lequel j'ai trouver le 5v pour l'alimenter , j'ai le plan des gpio disponible , je voulais savoir si il était possible de modifier le code pour brancher sur d'autre pin du gpio voir image :
    https://bitbucket.org/xoseperez/espurna/wiki/Hardware#markdown-header-iteadstudio-sonoff

    Je pense que cela est possible , mais je ne trouve pas dans le code ou éditer les pin , j'ai le 5v , le gnd , je voudrais utiliser les pin 13(led) et 14 (libre) ou bien même le gpio 0 du switch

  • #2

    YouS (vendredi, 10 mars 2017 09:46)

    Salut.

    La WS2813 est une variante de la WS2812B. Il faut que tu connecte la broche DI sur le GPIO0 et le BI au GND et pas une autre Pin.

    http://myneopixel.com/5m-60-pixels-m-ws2813-pixel-rgb-led-tape_p1121.html

    Le mieux est de télécharger mon archive déjà toute prête, tu la trouvera en haut mais je te remet le lien :

    https://1drv.ms/u/s!AruLO1vN3Uwwx3zI0_ng6LrZK9oh

    Après tu modifie les fichiers dans Arduino pour le faire fonctionner avec un ESP-01 et non pas un Nodemcu en utilisant par exemple la broche 0 pour le data. Pour cela :

    Dans l'onglet HyperionRGB :

    localise la ligne #define LED D0 // LED in NodeMCU at pin GPIO16 (D0) et enleve le D apres LED pour definir la broche 0 comme ceci :

    #define LED 0

    Ensuite dans l'onglet ConfigStatic.h la ligne :

    #define CONFIG_LED_DATAPIN D7 devient #define CONFIG_LED_DATAPIN 0

    et commente la ligne Clock si nécessaire comme ceci :

    // #define CONFIG_LED_CLOCKPIN D5

    Tu change aussi le type de LEDs en ajoutant cette ligne #define CONFIG_LED_CLOCKLESS_CHIPSET WS2813

    et en commentant celle que l'on utilisé précédemment, la WS2812B normalement comme ceci :

    // #define CONFIG_LED_CLOCKLESS_CHIPSET WS2812B

    Plus qu'a testé.

  • #3

    Anto (vendredi, 05 mai 2017 04:54)

    Salut,
    Tout d'abord grand respect et remerciement pour ton site, j'ai passé de nombreuses nuits sur des forums étrangers avant d’atterrir sur du concret et en plus en français car je suis un débutant dans ce domaine, ça fait plaisir !

    Malgré un nombre d'heures que je ne compte plus a essayer tes différents tutos et un investissement conséquent,

    Toujours rien , les leds s'allument quand je branche le nodemcu puis rien,

    Testé avec des sk9822 pour ambilight et ws2812b en rbg et rgbww pour hue like .
    j'ai un peu tout essayé de permuter mais toujours rien,

    Sur le pi je pense avoir fini par comprendre que ça ne fonctionnera pas sans level shifter que j'attends de recevoir.

    Mais sur le nodemcu ça devrait etre bon, mon sketch est bien téléversé, la config je pense est ok
    Mon nodemcu est bien reconnu en usb0 sous osmc et hyperion a l'air aussi bien configuré mais pourtant, toujours l'erreur du genre :

    Unable to open RS232 device (IO Exception (2): No such file or directory, file /home/sascha/hyperion/dependencies/build/serial/src/impl/unix.cc, line 100.)

    Je pense que mon sketch nodemcu n'est pas bon,

    j'ai utilisé le tiens et a vrai dire j'ai rien modifié a part le nombre de leds,

    j'ai aussi un doute sur la config json d'hyperion, voila ce que j'ai pour les ws2812b par ex : {
    // DEVICE CONFIGURATION
    "device" :
    {
    "name" : "NODEMCU1",
    "type" : "adalight",
    "output" : "/dev/ttyUSB0",
    "rate" : 115200,
    "delayAfterConnect" : 0,
    "colorOrder" : "grb"
    },

    j'ai lu que le rate 115200 était le meilleur choix , j'ai aussi essayé 2000000 mais pareil.

    Pour le nodemcu:

    break;

    case MODE_DATA:

    while (Serial.available() && effectbuf_position < 3 * strip.PixelCount()) {
    pixelsPOINT[effectbuf_position++] = Serial.read();
    }

    if (effectbuf_position >= 3*pixelCount) { // goto show when buffer has recieved enough data...
    state = MODE_SHOW;
    break;
    }

    if ((effect_timeout + 1000) < millis()) state = MODE_HEADER; // RESUM HEADER SEARCH IF BUFFER NOT FILLED WITHIN 1 SEC.

    break;

    case MODE_SHOW:

    strip.Dirty(); // MUST USE if you're using the direct buffer version...
    pixellatchtime = millis();
    state = MODE_HEADER;
    break;

    case MODE_FINISH:

    // nothing in here...

    break;
    }

    }



    void setup()
    {
    // this resets all the neopixels to an off state
    Serial.begin(SerialSpeed);

    strip.Begin();
    strip.Show();

    }


    void loop()
    {


    if (millis() - update_strip_time > 30) {
    strip.Show();
    update_strip_time = millis();
    };


    Adalight();


    Bref voila , peut être quelqu'un pourra m'aider car je perds espoir d'y arriver ..


  • #4

    YouS (samedi, 06 mai 2017 00:27)

    Salut Anto . ;-)

    Je te remercie pour ton message et c'est vrai que trouver des informations en français n'est pas toujours choses facile. Je suis vraiment désolé que tu n'ai pas réussi à avoir une installation correct en suivant mes tutos. ( Alors que ça devrai )

    Je pense savoir d'ou viens ton problème de dysfonctionnement.

    En fait tu essaye de faire fonctionner ton Nodemcu en connexion USB hors ce tuto est basé sur une utilisation en Wifi ( peut être tu as posté ton message sur le mauvais sujet, tu voulais surement le poster sur celui traitant de la possibilité d'utiliser un Nodemcu à la place d'un Arduino .?? )

    J'ai pensé cela en voyant tes lignes de configuration hyperion

    "name" : "NODEMCU1",
    "type" : "adalight",
    "output" : "/dev/ttyUSB0",
    "rate" : 115200,
    "delayAfterConnect" : 0,
    "colorOrder" : "grb"

    et aussi le fait que tu parle de taux de transmission à 2000000.

    Pour pouvoir utiliser le Nodemcu en Wifi, elle doit ressembler à ceci :

    "device" :
    {
    "name" : "NodeMcuWfi",
    "type" : "udp",
    "output" : "192.168.1.10:19446", ///
    "rate" : 1000000,
    "maxpacket" : 1450,
    "protocol" : 0,
    "colorOrder" : "grb"
    },

    Tu me parle aussi de "les leds s'allument quand je branche le nodemcu puis rien,", cela veux dire que tes branchements sont bon, Si je ne me trompe pas il doit y avoir une séquence de couleur, Rouge, vert, bleu, blanc puis plus rien.

    Je pense que le mieux serai que tu m'envoi un mail pour que je puisse t'aider en direct, ça serait bête de laisser tomber surtout que tu as déjà dépenser une petite somme pour ça.

    Ambimod.by@gmail.com

    @+