Projet d'horloge avec esp8266

Bonjour,

Je fabrique actuellement une horloge que je veux personnaliser pour mon neveu qui est fan de Zelda. Je voudrais qu'elle affiche l'heure (normal, c'est une horloge), la date, la temperature (si j'arrive à mettre une sonde dans mon projet, vu mes competences) et du texte relatif à Zelda (Style un scroll de "The Legend of Zelda").
Le but est d'utiliser un ESP8266 relié à un Max7219 (je fais les tests avec un seul mais l'horloge finale en aura 2, 3, voir 4 en fonction du design final que je choisirais). Pour le moment, j'arrive à faire defiler "The Legend of Zelda" sur le Max7219.

Pour l'alimenter, j'ai utilisé un boitier contenant 4 piles 1,5V AAA que j'ai relié a la broche 5V et GND de l'ESP8266. Ca fonctionne mais bon je ne suis pas au top en ce qui concerne l'alimentation. Le fait d'alimenter l'ESP8266 en 6V (4x1,5V) sur la broche 5V ne risque pas t'il pas de l'endommager ?? Si non, quelle autonomie j'aurai avant que mon neveu n'ai besoin de changer les piles ??

Merci pour vos reponses.

Bonjour @pepe59160

Message déplacé pour ne aps encombrer le sous-forum dédié à, ce cite " à la présentation de projets/réalisations complets et fonctionnels"

Prends connaissance , STP, des Bonnes pratiques du Forum Francophone

Le fait d'alimenter l'ESP8266 en 6V (4x1,5V) sur la broche 5V ne risque pas t'il pas de l'endommager ?

L'ESP8266 n'a pas de broche 5V, ta carte oui et il se pourrait bien que le régulateur qui y est implanté (pour produire les 3,3V indispensable sau fonctionnement de son ESP8266) supporte 6V.
Donnes la référence précise de la carte utilsée ou un lien vers le site marchand

L'autonomie dépend de la capacité des piles AAA (exprimée en mAh) du courant (mA) absorbé par le montage.

il se peut que cette broche 5V soit prévue comme une sortie plutôt qu'une entrée.. tout dépend de la carte

Bonjour et merci,
La carte est une ESP8266 Mini Board NodeMCU WiFi (ESP8266 12F C340G WLAN).

Quand je mets le +5V du boitier pile sur le 5V de l'ESP8266, ca fonctionne, j'ai le message "The Legend of Zelda" qui defile en boucle sur le Max7219.

le régulateur AMS117 de ce genre de carte supporte 15V

la broche repérée 5V peut fonctionner en entrée (de préférence en absence de connection USB)

Bonjour, merci pour les reponses,

J'ai effectué ma presentation sur le forum bien avant de poster ma demande concernant l'horloge, je ne comprends donc pas bien ce rappel au bonne pratique, merci de m'eclairer sur mon erreur.

De plus, c'est, je pense de la vulgarisation (qui appartient totalement au debutant que je suis) d'appeler ESP8266, la carte sur laquelle se trouve l'ESP8266. Ce serait donc faire preuve d'indulgence et de compassion envers un neophyte que de tolerer les termes malheureusement employés, je tenterais donc de faire preuve de plus d'attention à l'avenir.

J'ai deja precisé quelle etait la carte :
La carte est une ESP8266 Mini Board NodeMCU WiFi (ESP8266 12F C340G WLAN)
Y a t'il une autre reference sur la carte plus utile ou plus descriptive ??

Je comprends donc que la broche 5V se trouvant sur la carte avec l'ESP8266 fonctionne en sortie si carte raccordée et alimentée par le port micro-USB mais quon peut aussi l'utiliser en entrée si on y raccorde une alimentation (sans utilisation du port micro-USB).
J'ai bon ?? ou je suis trop basique ?? (Désolé mais je suis un debutant chiant qui aime comprendre un peu quand meme).

al1fch a dit : "L'autonomie dépend de la capacité des piles AAA (exprimée en mAh) du courant (mA) absorbé par le montage."
Personnellement, je suis admiratif de cette phrase, car je ne sais ni l'un, ni l'autre. les piles AAA utilisées sont des piles standards du commerce et j'avoue absolument ne pas savoir combien mon motage consomme.

Merci en tout cas de vos reponses.

Bonjour @pepe59160

Bonnes pratiques ? c'est exposé ici, bien en évidence en tête du forum francophone :wink:
:point_right: -> lien à cliquer

Ce que tu indiques permet en gros de se figurer la carte que tu as en mains, sans plus.
cette dénomination à rallonge (tout à fait dans le style approximatif utilisé par les vendeurs sur les places de marché) peut correspondre à des produits présentant quelques différences
Un lien vers la page du site marchand , avec photo de la carte, enlèverait toute ambiguité

Ce serait donc faire preuve d'indulgence et de compassion envers un neophyte que de tolerer les termes malheureusement employés

C'est il me semble toujours le cas sur ce forum :wink:
.......avec invitation respectueuse à progresser quand au vocabulaire technique utilisé

c'est cela ; sans schéma exact de la carte que tu as en mains il n'est pas possible d'éliminer tout risque de déagrément en cas d'alimentation simultanée , par USB et par application d'une tension sur l'entrée 5V

Merci beaucoup,

J'espere de mon cote progresser en termes et en techniques.

Lien des cartes achetées :
diymore 3PCS D1 ESP8266 Mini Board NodeMCU WiFi ESP8266-12F CH340G WLAN Type C Module : Amazon.fr: High-Tech

le lien n'était pas inutile :wink:

cette carte est un copie d'une carte LOLIN D1 Mini ou WEMOS D1 Mini , sans aucun rapport avec le format NodeMCU ! c'est fréquent , les vendeurs sur le places de marché n'ont bien souvent qu'une connaissance approximative de le marchandise... d'où des dénominations souvent fantaisistes avec accumulation de termes .....parfois contradictoires

L'original est ici :
https://www.wemos.cc/en/latest/d1/d1_mini.html

le régulateur 3,3V présent en général sur ces cartes ne supporte pas plus de 6,5V en entrée (contre 15V indiqué précedemment pour les régulateurs des cartes de type NodeMCU)

comme quoi le vocabulaire technique n'est pas sans conséquences......

vous aviez posté dans la catégorie "Réalisations et Projets finis".
@al1fch a déplacé votre post vers le forum principal

le rappel des bonnes pratiques concernait ce point : il faut poster au bon endroit.

autonomie ?

Soit un ensemble de 4 piles alcalines AAA de capacité 1200mAh (ordre de grandeur pour des piles alcalines 1,5V au format AAA)

supposons un montage consommant 120mA

durée approximative de fonctionnement 10h ( car 10 x 120 = 1200)

Merci à tous pour ces reponses que ce soit :

  • pour le respect des regles et ou poster correctement
  • pour l'electronique
    Cela veut dire que la carte que j'ai pris est de mauvaise qualité ?? dans le sens où elle ne respecte pas forcement les preconisations constructeur de la carte originale ??

Pour le calcul, je constate en effet qu'avec 4 piles AAA, l'autonomie ne va pas etre au top. Le but n'est pas de devoir changer les piles tous les jours.

pas nécessairement.

consommation : la carte consomme (essentiellement son ESP8266) environ 70mA (WIFI inactif)
ajouter à cela la consommation des leds gérées par le MAX7219......

Je voudrais qu'elle affiche l'heure (normal, c'est une horloge), la date, la temperature (si j'arrive à mettre une sonde dans mon projet, vu mes competences) et du texte relatif à Zelda (Style un scroll de "The Legend of Zelda").

Avec ce cahier des charges il faut sans doute accepter une alimentation par 'chargeur de téléphone' (alimentation secteur ) 5V)

Bonjour,

Merci, je vais opter par une alim secteur, comme conseillé, je pense.
Mon projet avance, j'ai utilisé le code disponible sur ce tuto Youtube.

ESP8266 Clock with Max7219 Matrix display Date & Time Display and Automatic Light Brightness Adjust - YouTube

Ca fonctionne très bien.
Pensez vous qu'il est possible de mettre un texte défilant relatif à Zelda apres affichage de la date et est il possible d'avoir la date en francais ??

Merci aux specialistes qui pourront m'apporter une reponse.
Bonne soirée.

N'ayant pas téléchargé le projet que tu as utilisé, je ne pourrais pas être catégorique, mais je ne vois pas pourquoi cela ne serait pas possible.
Il faudrait que tu communiques ton code directement sur le forum dans des balises code.

Pourquoi as tu pris un projet sur youtube, tu n'a pas trouvé de projet sur le forum?

Bonsoir,

Merci, je vais tenter de mettre le code.
J'ai pris le projet sur Youtube car c'est le 1er endroit où j'ai regardé pour des tutos.
Je suis totalement débutant donc pour le moment je découvre.



#include "Arduino.h"
#include <ESP8266WiFi.h>


WiFiClient client;

String date;

#define NUM_MAX 4
#define LINE_WIDTH 16
#define ROTATE  90

// for NodeMCU 1.0
#define DIN_PIN 15  // D8
#define CS_PIN  13  // D7
#define CLK_PIN 12  // D6

#include "max7219.h"
#include "fonts.h"

// =======================================================================
// CHANGE YOUR CONFIG HERE:
// =======================================================================
const char* ssid     = "xxxxxxxxxxxxx";     // SSID of local network
const char* password = "xxxxxxxxxxxxxxxx";   // Password on network
float utcOffset = 2; // Time Zone setting
// =======================================================================

void setup() 
{
  Serial.begin(115200);
  initMAX7219();
  sendCmdAll(CMD_SHUTDOWN,1);
 // sendCmdAll(CMD_INTENSITY,12); // Adjust the brightness between 0 and 15
 
  
  Serial.print("Connecting WiFi ");
  WiFi.begin(ssid, password);
  printStringWithShift("ZELDA ",16);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected: "); Serial.println(WiFi.localIP());
}
// =======================================================================
#define MAX_DIGITS 16
byte dig[MAX_DIGITS]={0};
byte digold[MAX_DIGITS]={0};
byte digtrans[MAX_DIGITS]={0};
int updCnt = 0;
int dots = 0;
long dotTime = 0;
long clkTime = 0;
int dx=0;
int dy=0;
byte del=0;
int h,m,s;
long localEpoc = 0;
long localMillisAtUpdate = 0;

// =======================================================================
void loop()
{
  if(updCnt<=0) { // every 10 scrolls, ~450s=7.5m
    updCnt = 10;
    Serial.println("Get data ...");
    printStringWithShift("  Get data",15);
   
    getTime();
    Serial.println("Data loaded");
    clkTime = millis();
  }
 
  if(millis()-clkTime > 20000 && !del && dots) { // clock for 15s, then scrolls for about 30s
    printStringWithShift(date.c_str(),40);
   delay(7000);
    updCnt--;
    clkTime = millis();
  }
  if(millis()-dotTime > 500) {
    dotTime = millis();
    dots = !dots;
  }
  updateTime();
  showAnimClock();
    
  // Adjusting LED intensity.
  // 12am to 6am, lowest intensity 2
  if ( (h == 0) || ((h >= 1) && (h <= 6)) ) sendCmdAll(CMD_INTENSITY, 2);
  // 6pm to 11pm, intensity = 10
  else if ( (h >=18) && (h <= 23) ) sendCmdAll(CMD_INTENSITY, 10);
  // max brightness during bright daylight
  else sendCmdAll(CMD_INTENSITY, 12);
  
}

// =======================================================================

void showSimpleClock()
{
  dx=dy=0;
  clr();
  showDigit(h/10,  4, dig7x16);
  showDigit(h%10,  12, dig7x16);
  showDigit(m/10, 21, dig7x16);
  showDigit(m%10, 29, dig7x16);
  showDigit(s/10, 38, dig7x16);
  showDigit(s%10, 46, dig7x16);
  setCol(19,dots ? B00100100 : 0);
  setCol(36,dots ? B00100100 : 0);
  refreshAll();
}

// =======================================================================

void showAnimClock()
{
  
  byte digPos[4]={1,8,17,25};
  int digHt = 12;
  int num = 4; 
  int i;
  if(del==0) {
    del = digHt;
    for(i=0; i<num; i++) digold[i] = dig[i];
    dig[0] = h/10 ? h/10 : 10;
    dig[1] = h%10;
    dig[2] = m/10;
    dig[3] = m%10;
    for(i=0; i<num; i++)  digtrans[i] = (dig[i]==digold[i]) ? 0 : digHt;
  } else
    del--;
  
  clr();
  for(i=0; i<num; i++) {
    if(digtrans[i]==0) {
      dy=0;
      showDigit(dig[i], digPos[i], dig6x8);
    } else {
      dy = digHt-digtrans[i];
      showDigit(digold[i], digPos[i], dig6x8);
      dy = -digtrans[i];
      showDigit(dig[i], digPos[i], dig6x8);
      digtrans[i]--;
    }
  }
  dy=0;
  setCol(15,dots ? B00100100 : 0);
  refreshAll();
 delay(30);
}

// =======================================================================

void showDigit(char ch, int col, const uint8_t *data)
{
  if(dy<-8 | dy>8) return;
  int len = pgm_read_byte(data);
  int w = pgm_read_byte(data + 1 + ch * len);
  col += dx;
  for (int i = 0; i < w; i++)
    if(col+i>=0 && col+i<8*NUM_MAX) {
      byte v = pgm_read_byte(data + 1 + ch * len + 1 + i);
      if(!dy) scr[col + i] = v; else scr[col + i] |= dy>0 ? v>>dy : v<<-dy;
    }
}

// =======================================================================

void setCol(int col, byte v)
{
  if(dy<-8 | dy>8) return;
  col += dx;
  if(col>=0 && col<8*NUM_MAX)
    if(!dy) scr[col] = v; else scr[col] |= dy>0 ? v>>dy : v<<-dy;
}

// =======================================================================

int showChar(char ch, const uint8_t *data)
{
  int len = pgm_read_byte(data);
  int i,w = pgm_read_byte(data + 1 + ch * len);
  for (i = 0; i < w; i++)
    scr[NUM_MAX*8 + i] = pgm_read_byte(data + 1 + ch * len + 1 + i);
  scr[NUM_MAX*8 + i] = 0;
  return w;
}

// =======================================================================

void printCharWithShift(unsigned char c, int shiftDelay) {
  
  if (c < ' ' || c > '~'+25) return;
  c -= 32;
  int w = showChar(c, font);
  for (int i=0; i<w+1; i++) {
    delay(shiftDelay);
    scrollLeft();
    refreshAll();
  }
}

// =======================================================================

void printStringWithShift(const char* s, int shiftDelay){
  while (*s) {
    printCharWithShift(*s, shiftDelay);
    s++;
  }
}

// =======================================================================



void getTime()
{
  WiFiClient client;
  if (!client.connect("www.google.fr", 80)) {
    Serial.println("connection to google failed");
    return;
  }

  client.print(String("GET / HTTP/1.1\r\n") +
               String("Host: www.google.fr\r\n") +
               String("Connection: close\r\n\r\n"));
  int repeatCounter = 0;
  while (!client.available() && repeatCounter < 10) {
    delay(500);
    //Serial.println(".");
    repeatCounter++;
    
  }

  String line;
  client.setNoDelay(false);
  while(client.connected() && client.available()) {
    line = client.readStringUntil('\n');
    line.toUpperCase();
    if (line.startsWith("DATE: ")) {
      date = "     "+line.substring(6, 17);
      h = line.substring(23, 25).toInt();
      m = line.substring(26, 28).toInt();
      s = line.substring(29, 31).toInt();
      localMillisAtUpdate = millis();
      localEpoc = (h * 60 * 60 + m * 60 + s);
      
    }
  }
  client.stop();
}

// =======================================================================

void updateTime()
{
  long curEpoch = localEpoc + ((millis() - localMillisAtUpdate) / 1000);
  long epoch = fmod(round(curEpoch + 3600 * utcOffset + 86400L), 86400L);
  h = ((epoch  % 86400L) / 3600) % 24;
  m = (epoch % 3600) / 60;
  s = epoch % 60;
}

// =======================================================================

Voilà pour le Code.
J'ai remplacé le "Connecting" dans le code par "ZELDA" de facon à ce que ce soit affiché lors de l'allumage et l'attente de connexion.
Je decouvre le code donc pour le moment, je ne comprends pas tout.
J'ai modifié aussi un peu au niveau du reglage de luminosité des Leds en fonction de l'heure car comme les Leds sont vertes, elles brillent moins que les rouges.

Si je peux me permettre un conseil, le premier endroit devrait être le même où tu viens chercher de l'aide ! :smiley:
Car cela sera nettement plus facile de poser des questions à l'auteur et tu aura plus de chance d'avoir un tutoriel digne de ce nom, plutôt qu'une démonstration.
Ceci est valable quelque soit le domaine.

Je ne connais pas les disponibilités de google.fr
Mais je suis étonnée qu'il ne renvoie par l'heure française.
Du coup quel heure à tu, le GMT ?
Le GMT doit correspondre à deux heures de moins que la métropole, je crois me rappeler.

Généralement on utilise plutôt une librairie qui utilise les services NTP
Pour récupérer l'heure, ce qui permet de gérer 'les fuseau horaire ainsi que les changements d'heures saisonnier.

Étant sur mon téléphone, je ne pourrais pas vraiment plus d'aider aujourd'hui :worried:

Tu as tout à fait raison. De plus, il est plus facile de comprendre l'aide quand en plus, c'est en français.

Dans le code d'origine, c'etait google.com, j'ai modifié en .fr en pensant aussi qu'il me renverrai l'heure et la date française mais non. J'ai dû modifié aussi, oui, pour avoir l'heure en GMT +2 (heure de chez nous).

Pour la librairie en NTP, je ne suis pas encore assez bon niveau connaissance pour aller dans cette voie. Mais je vais faire des recherches. Merci.

Merci de ton aide et bonne soirée à toi.