(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
La connection a l’esp
Preparation de la coque
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;
}
}