Horloge a base de neopixels 


(07/18)

MAJ: Ajout de fonctions si erreur de Wifi

Cahier des charges:

-horloge grand format
-couleur d’affichage changeable a la guise
-pas besoin de la régler
-luminosité automatique 
-Connecte pour pouvoir changer la luminosité et plus encore
-moins de 30€

Materiel requis 

-Node mcu (esp8266) 5€
-58 neopixels (100=15€)
-une coque imprimée en 3D(?€) ou en mode barewire(0€)

La matrice de led 

IMG_9779%202
IMG_9122
IMG_9671

La connection a l’esp

IMG_9894

Preparation de la coque

Capt

Code

  
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
*           DIOLUM 2018  http://diolum.free.fr                      @       
*                                                                   @
* - Horloge a base de ws2812b                                       @                  
* - Sur une inspiration de "http://ivanmiranda.com"                 @
* - Avec une librarie de "http://github.com/SensorsIot"(NTPtimeESP) @               
* - Et de "http://github.com/adafruit"   (Adafruit_NeoPixel)        @                  
* - Utilisant le service https://www.blynk.cc/                      @
*                                                                   @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/


/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
*                   LIBRAIRIES UTILISEES                            @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
#include NTPtimeESP.h
#include Adafruit_NeoPixel.h
#include ESP8266WiFi.h
#include BlynkSimpleEsp8266.h
#define PIN D1                                                                        //pin leds 


/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
*                    RELATIF AU STRIP DE DIGIT                      @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
int color=85;                                                                         //G=0,R=85,B=170,RAINBOW=255
int bright=255;                                                                       //luminositee par default (0-254 et 255 auto) 
int j=0;                                                                              //compteur arc en ciel
int rouge;                                                                            //composante rouge
int vert;                                                                             //composante verte
int bleu;                                                                             //composante bleu
int wifiStatus;
int connectSuccess = 0;
Adafruit_NeoPixel strip = Adafruit_NeoPixel(58, PIN, NEO_GRB + NEO_KHZ800);           //definition du strip led



/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
*             RELATIF A LA RECUPERATION DE L'HEURE                  @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
int actualHour;                                                         //heure recupérée 
int actualMinute;                                                       //minute recupérée
NTPtime NTPch("fr.pool.ntp.org");                                       // Pool pour le temps en france 
strDateTime dateTime;


/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
*                         RELATIF AU WIFI                           @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
char *ssid  = "SSID";                                         // SSID wifi
char *pass  = "password";                                     //mot de passe Wifi



/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
*                        RELATIF A BLYNK                            @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
char auth[] = "fb613e91f8ef49fbbf731b49d813a014";     //token Blynk

BLYNK_WRITE(V0)                                                       //recup de la valeur de la pin virtuelle V0
{
  bright = param.asInt();                                             //defini bright avec le valeur de V0
  strip.setBrightness(bright);                                        //defini la luminositée
}
BLYNK_WRITE(V1)                                                       //recup de la valeur de la pin virtuelle V0
{
  color = param.asInt();                                              //defini couleur avec le valeur de V1
}



/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
*                               SETUP                               @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
void setup()
{
  pinMode(A0, INPUT);
  strip.begin();                                                    //demmarer le strip
  strip.show();                                                     // Initialise toute les led à 'off'
  Blynk.begin(auth, ssid, pass);                                    //connection au wifi
}




void loop()
{
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
*                        LANCEMENT DE BLYNK                         @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
  Blynk.run();    


wifiStatus = WiFi.status();
if(connectSuccess == 0){ wifierr();}
if(wifiStatus == WL_CONNECTED){
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
*                      RECUPERATION DE L'HEURE                      @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
 dateTime = NTPch.getNTPtime(1, 1);                                                           


/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
*      TRAITEMENT DE L'HEURE ET GESTION DES EXEPTIONS               @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/                                                                              
 if(dateTime.valid){                                                                          //donnee recue valide?
    int datehour =dateTime.hour*100+ dateTime.minute;                                         //heure mettre ex 18h30 en 1830 
    if((datehour != 728) && (datehour>(actualHour*100+actualMinute)) || (datehour == 0) ){    //si bug heure = 7h28  donc on exclu cette valeur et d
         actualHour = dateTime.hour;
         actualMinute = dateTime.minute;
          }
    if(((actualHour*100+actualMinute) == 727) && (datehour == 728)){
         actualHour = dateTime.hour;
         actualMinute = dateTime.minute;
         }
 }



/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
*                       LUMINOSITEE AUTOMATIQUE                     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
 if(bright==255){
    if(analogRead(A0)<30){
        strip.setBrightness(1);
        }
    else{
      strip.setBrightness(map(analogRead(A0),30,1024,1,254));
      }
 }



/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
*                         LUMINOSITEE FORCEE                        @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
 else{
    strip.setBrightness(bright);                                                             //def de la luminositée
    }

/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
*   LANCEMENT D'ECTRITURE DES DIGITS ET PRE GESTION DE LA COULEUR   @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
 drawdigit(44, ((actualMinute) % 10) ,rouge,vert,bleu); 
 drawdigit(30, ((actualMinute)/10 % 10) ,rouge,vert,bleu);
 drawdigit(14, ((actualHour) % 10) ,rouge,vert,bleu);
 drawdigit(0, ((actualHour)/10 % 10) ,rouge,vert,bleu);
 delay(50);
connectSuccess = 1;
}
else if(connectSuccess != 0){ wifidisc(); }
}

void wifierr(){
strip.setPixelColor(0,255,0,0);
strip.setPixelColor(1,255,0,0);
strip.setPixelColor(4,255,0,0);
strip.setPixelColor(5,255,0,0);
strip.setPixelColor(6,255,0,0);
strip.setPixelColor(7,255,0,0);
strip.setPixelColor(8,255,0,0);
strip.setPixelColor(9,255,0,0);
strip.setPixelColor(10,255,0,0);
strip.setPixelColor(11,255,0,0);
strip.setPixelColor(14,255,0,0);
strip.setPixelColor(15,255,0,0);
strip.setPixelColor(22,255,0,0);
strip.setPixelColor(23,255,0,0);
strip.setPixelColor(31,255,0,0);
strip.setPixelColor(32,255,0,0);
strip.setPixelColor(39,255,0,0);
strip.setPixelColor(40,255,0,0);
strip.setPixelColor(49,255,0,0);
strip.setPixelColor(50,255,0,0);
strip.setPixelColor(51,255,0,0);
strip.setPixelColor(52,255,0,0);
strip.setPixelColor(53,255,0,0);
strip.setPixelColor(54,255,0,0);
strip.setPixelColor(55,255,0,0);
strip.setPixelColor(56,255,0,0);
}


void wifidisc(){
strip.setPixelColor(0,255,0,0);
strip.setPixelColor(1,255,0,0);
strip.setPixelColor(4,255,0,0);
strip.setPixelColor(5,255,0,0);
strip.setPixelColor(6,255,0,0);
strip.setPixelColor(7,255,0,0);
strip.setPixelColor(8,255,0,0);
strip.setPixelColor(9,255,0,0);
strip.setPixelColor(10,255,0,0);
strip.setPixelColor(11,255,0,0);
strip.setPixelColor(14,255,0,0);
strip.setPixelColor(15,255,0,0);
strip.setPixelColor(22,255,0,0);
strip.setPixelColor(23,255,0,0);
strip.setPixelColor(31,255,0,0);
strip.setPixelColor(32,255,0,0);
strip.setPixelColor(39,255,0,0);
strip.setPixelColor(40,255,0,0);
strip.setPixelColor(45,255,0,0);
strip.setPixelColor(46,255,0,0);
strip.setPixelColor(47,255,0,0);
strip.setPixelColor(48,255,0,0);
strip.setPixelColor(53,255,0,0);
strip.setPixelColor(54,255,0,0);
strip.setPixelColor(55,255,0,0);
strip.setPixelColor(56,255,0,0);
strip.setPixelColor(57,255,0,0);
strip.setPixelColor(58,255,0,0);
}

/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
*   FONCTION D'ECTRITURE DES DIGITS ET PRE GESTION DE LA COULEUR    @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
void drawdigit(int offset, int n, int rouge , int vert , int bleu)
{
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
*                      ECTRITURE DES DIGITS                         @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
  if (n==2 || n==3 || n== 4 || n==5 || n==6 || n==8 || n==9 )                 //Milieu
  {
    strip.setPixelColor(0+offset,rouge,vert,bleu);
    strip.setPixelColor(1+offset,rouge,vert,bleu);
  }
  else
  {
    strip.setPixelColor(0+offset, 0,0,0);
    strip.setPixelColor(1+offset, 0,0,0);
  }
  if (n==0 || n==1 || n== 2 || n==3 || n==4 || n==7 || n==8 || n==9)          //Haut Droit
  {
    strip.setPixelColor(2+offset,rouge,vert,bleu);
    strip.setPixelColor(3+offset,rouge,vert,bleu);
  }
  else
  {
    strip.setPixelColor(2+offset, 0,0,0);
    strip.setPixelColor(3+offset, 0,0,0);
  }
  if (n==0 || n==2 || n== 3 || n==5 || n==6 || n==7 || n==8 || n==9)         //Haut
  {
    strip.setPixelColor(4+offset,rouge,vert,bleu);
    strip.setPixelColor(5+offset,rouge,vert,bleu);
  }
  else
  {
    strip.setPixelColor(4+offset, 0,0,0);
    strip.setPixelColor(5+offset, 0,0,0);
  }
  if (n==0 || n==4 || n==5 || n== 6 || n==8 || n==9 )                       //Haut Gauche
  {
    strip.setPixelColor(6+offset,rouge,vert,bleu);
    strip.setPixelColor(7+offset,rouge,vert,bleu);
  }
  else
  {
    strip.setPixelColor(6+offset, 0,0,0);
    strip.setPixelColor(7+offset, 0,0,0);
  }
  if (n==0 || n==2 || n==6 || n== 8)                                       //Bas Gauche
  {
    strip.setPixelColor(8+offset,rouge,vert,bleu);
    strip.setPixelColor(9+offset,rouge,vert,bleu);
  }
  else
  {
    strip.setPixelColor(8+offset, 0,0,0);
    strip.setPixelColor(9+offset, 0,0,0);
  }
  if (n==0 || n==2 || n==3 || n== 5 || n==6 || n==8 || n==9)              //Bas
  {
    strip.setPixelColor(10+offset,rouge,vert,bleu);
    strip.setPixelColor(11+offset,rouge,vert,bleu);
  }
  else
  {
    strip.setPixelColor(10+offset, 0,0,0);
    strip.setPixelColor(11+offset, 0,0,0);
  }
  if (n==0 || n==1 || n==3 || n==4 || n==5 || n==6|| n==7 || n==8 || n==9)//Bas Droite
  {
    strip.setPixelColor(12+offset,rouge,vert,bleu);
    strip.setPixelColor(13+offset,rouge,vert,bleu);
  }
  else
  {
    strip.setPixelColor(12+offset, 0,0,0);
    strip.setPixelColor(13+offset, 0,0,0);
  }
  strip.setPixelColor(28,rouge,vert,bleu);
  strip.setPixelColor(29,rouge,vert,bleu);
  strip.show();


/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
*                      COULEUR ARC EN CIEL                          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
  if(color==255){
      if (j < (255)){
          j=j+1;
          Wheel(j);}
      else {j=0;}
      }

/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
*                           COULEUR FIXE                            @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
  else{
    Wheel(color);
    }
}





/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
*              FONCTION DE GESTION DE LA COULEUR                    @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
void Wheel(int WheelPos) {
  if(WheelPos < 85) {
      rouge=WheelPos * 3;
      vert=255 - WheelPos * 3;
      bleu=0;
      } 
  else if(WheelPos < 170) {
      rouge=255 - (WheelPos-85) * 3;
      vert=0;
      bleu=(WheelPos-85) * 3;
      }
  else if(color==256){
      rouge=255;
      vert=255;
      bleu=255;
      } 
  else {
      rouge=0;
      vert=(WheelPos-170) * 3; 
      bleu=255 - (WheelPos-170) * 3;
      }
}


Creation d’un compte Blynk

Creation de l’interface Blynk

Premier tests