Table des matières:

NODEMCU Lua ESP8266 avec horloge temps réel (RTC) et EEPROM : 7 étapes
NODEMCU Lua ESP8266 avec horloge temps réel (RTC) et EEPROM : 7 étapes

Vidéo: NODEMCU Lua ESP8266 avec horloge temps réel (RTC) et EEPROM : 7 étapes

Vidéo: NODEMCU Lua ESP8266 avec horloge temps réel (RTC) et EEPROM : 7 étapes
Vidéo: FLProg9: Будильник RTC | ESP32 NodeMCU | Визуальное программирование для Arduino 2024, Juillet
Anonim
NODEMCU Lua ESP8266 avec horloge temps réel (RTC) et EEPROM
NODEMCU Lua ESP8266 avec horloge temps réel (RTC) et EEPROM

Obtenir l'heure exacte est essentiel si vous souhaitez conserver un journal de données. Il existe différentes manières d'obtenir l'heure à partir de sources sur Internet.

Vous vous demandez peut-être pourquoi ne pas utiliser l'ESP8266 pour garder l'heure pour vous ? Eh bien, vous pouvez, il a son propre RTC (Real Time Clock) interne, mais l'ESP8266 a 3 fréquences d'horloge de fonctionnement différentes - 52MHz au démarrage, 80MHz en fonctionnement normal et 160MHz s'il est boosté. Si vous avez besoin d'un chronométrage plus précis, en particulier sur des périodes plus longues, un RTC externe peut fournir une solution. Ces modules disposent également d'une batterie de secours en cas de coupure de courant. Un RTC n'est pas très précis car il compte le temps écoulé depuis qu'il a été réglé et bien qu'il puisse le faire pour la plupart des applications, il peut ne pas être assez bon pour garder le temps critique. Il est possible d'obtenir une heure précise à partir d'un serveur de temps SNTP à partir duquel le RTC peut être mis à jour à intervalles réguliers si nécessaire.

Le module DS1307 Tiny RTC I2C (ci-dessus) est un exemple de ces articles et peut être acheté sur Ebay et d'autres fournisseurs pour moins de 2 £. Il y en a aussi d'autres comme les DS1302 et DS3231 qui fonctionnent de manière similaire et coûtent à partir de 99p.

Le module DS1307 utilise une interface I2C et pour un ESP-01 doit être connecté comme:

Vcc - 3.3v, Gnd - Gnd, SDA - D3, SCL - D4

SDA et SCL peuvent être connectés à l'une des broches d'E/S des plus grands ESP8266 (modifiez le code en conséquence). Seules les broches du côté gauche doivent être connectées sur ce module.

Étape 1: Google Heure

Heure Google
Heure Google

Il existe de nombreux exemples d'obtention du temps de Google et de ressembler à ceci. Lorsque vous exécutez le programme GoogleTime.lua, vous obtenez un résultat comme celui-ci:

dofile("GoogleTime.lua")> Heure: vendredi 15 décembre 2017 11:19:45 GMT

Le problème avec cette méthode est que vous obtenez l'heure au format chaîne et que vous devez diviser la chaîne en ses bits individuels pour les heures, les minutes, les secondes, etc. Le RTC accepte l'heure dans un format spécial, c'est-à-dire l'horodatage UNIX. En termes simples, c'est le nombre de secondes qui se sont écoulées depuis le jeudi 1er janvier 1970 jusqu'à nos jours. L'époque UNIX (1970/01/01 00:00:00) est utilisée par la plupart des systèmes d'exploitation informatiques et le temps écoulé est stocké sous forme de nombre 32 bits signé. Cela signifie que ce système fonctionnera jusqu'au 19 janvier 2038, date à laquelle le nombre deviendra trop grand pour être stocké de cette façon. Une solution consiste à stocker le nombre en 64 bits, mais pour l'instant la méthode 32 bits suffira.

Pour régler l'heure au 9 juillet 2015 à 18:29:49 sur le RTC interne, vous utiliseriez cette ligne de code:

rtctime.set(1436430589, 0)

Les 2 paramètres sont les secondes et les micro secondes.

Vous pouvez trouver plus d'informations en lisant la documentation NodeMCU.

Étape 2: Serveurs de temps SNTP

Serveurs de temps SNTP
Serveurs de temps SNTP

Le protocole SNTP (Simple Network Time Protocol) est fourni à partir de nombreuses sources sur Internet, et de nombreux pays à travers le monde disposent de ce service.

Le programme SNTPTime2.lua règle l'heure sur le RTC interne. Vous devez avoir les modules rtctime et sntp dans votre build lorsque vous flashez votre ESP8266. Le programme obtient l'heure du serveur en secondes et microsecondes et définit le RTC interne avec rtctime.set(sec, usec).

Le programme affiche alors la date et l'heure dans différents formats.

Il existe de nombreux serveurs SNTP dans le monde et certains sont les suivants:

  • sntp.sync({"216.239.35.0"},
  • sntp.sync({"0.uk.pool.ntp.org", "0.uk.pool.ntp.org"},
  • sntp.sync({"3.uk.pool.ntp.org", "143.210.16.201"},
  • sntp.sync({"0.uk.pool.ntp.org", "1.uk.pool.ntp.org", "3.uk.pool.ntp.org"},

Toutes les lignes de code ci-dessus peuvent être remplacées dans le programme SNTPTime2.lua.

Il y a plus de serveurs SNTP aux adresses ci-dessous qui peuvent à nouveau être utilisés dans le programme.

93.170.62.252, 130.88.202.49, 79.135.97.79, ntp.exnet.com

Google fournit également des serveurs de temps à ces adresses:

216.239.35.0, 216.239.35.4, 216.239.35.8, 216.239.35.12

Vous devez vous rappeler d'obtenir l'heure du pays dans lequel vous vous trouvez ou vous devrez peut-être la modifier pour les différents fuseaux horaires du monde. De plus, certains pays ont l'heure d'été, vous devrez donc peut-être également faire face à cela.

Étape 3: Obtenir l'heure du module RTC

Obtenir l'heure du module RTC
Obtenir l'heure du module RTC

Le programme GetRTCTime.lua lit l'heure du RTC interne.

La première partie lit l'heure et l'affiche en secondes et microsecondes.

La deuxième partie le convertit en un format plus lisible par l'homme.

lors de l'appel de tm = rtctime.epoch2cal(rtctime.get()), il renvoie:

  • année - 1970 ~ 2038
  • lun - mois 1 ~ 12 dans l'année en cours
  • jour - jour 1 ~ 31 dans le mois en cours
  • heure
  • min
  • seconde
  • jour - jour 1 ~ 366 dans l'année en cours
  • wday - jour 1 ~ 7 dans la semaine en cours (dimanche est 1)

Chaque élément est accessible sous la forme tm["day"], tm["year"]…

Vous pouvez trouver plus d'informations en lisant la documentation NodeMCU.

DisplaySNTPtime.lua est un moyen plus élaboré d'afficher la date et l'heure sur un écran LCD 128 x 64 OLED, car il est facilement connecté et peut être utilisé avec ces programmes.

Étape 4: Mémoire utilisateur RTC

Une petite diversion par rapport au chronométrage est que le RTC interne de l'ESP8266 dispose d'adresses mémoire de 128 x 32 bits auxquelles le programmeur peut accéder. Ils sont particulièrement utiles car ils peuvent survivre au cycle de sommeil profond de l'ESP8266. Il appartient au programmeur de contrôler leur utilisation et de s'assurer qu'ils ne sont pas écrasés accidentellement.

J'ai inclus RTCmem.lua, un programme simple qui démontre son utilisation. Vous devez avoir le module rtcmem dans votre build.

Étape 5: modules RTC externes

Modules RTC externes
Modules RTC externes

Les modules RTC externes se connectent à l'ESP8266 via l'interface I2C, qui n'utilise que deux broches d'E/S et fonctionne donc avec l'ESP-01 ainsi qu'avec la plupart des autres appareils ESP8266.

L'adresse du module RTC est 0x68 et est accessible à l'aide des commandes I2C normales. Il y a cependant quelque chose à garder à l'esprit, les données dans les registres RTC sont stockées au format BCD (base 16), vos programmes doivent donc s'en occuper. L'heure et la date sont stockées dans 7 registres au sein du RTC. Sur le RTC interne, les conversions BCD sont prises en charge par le module rtctime.

SetExtRTC.lua convertit les données en BCD et règle l'heure.

ReadExtRTC.lua lit les données temporelles et les imprime. REMARQUE: les données sont imprimées en hexadécimal.

Je n'ai pas passé beaucoup de temps à formater l'affichage car vous pouvez avoir vos propres idées sur ce que vous voulez faire avec la date et l'heure. Il s'agit du moteur de base dans sa forme la plus simple, afin que vous puissiez le développer davantage si vous le souhaitez.

Étape 6: Enregistrement des données

Enregistrement de données
Enregistrement de données

Si vous regardez de près les modules RTC, vous remarquerez qu'ils ont un CI EEPROM AT24C32 ou similaire intégré, ou vous pouvez utiliser une carte 24C256 comme ci-dessus. La plupart de ces circuits intégrés EEPROM ont des brochages similaires à ceux ci-dessus. Ils sont livrés avec différentes quantités de stockage, mais ils sont tous accessibles de la même manière. L'AT24C32 étant déjà soudé sur la carte, il peut être utilisé directement depuis l'I2C du RTC externe.

Si vous n'avez qu'un circuit intégré 24C256 ou similaire, vous pouvez le configurer dans une planche à pain, connecter A1, A2 et A3 à Gnd, Vcc à 3,3 V et SDA ET SCL à I2C, WP peut rester flottant. Certains circuits intégrés EEPROM ne fonctionnent qu'à 5 V, vérifiez donc d'abord la fiche technique correspondante.

ByteWR.lua écrit 1 octet de données dans l'emplacement mémoire 0x00 de l'EEPROM et le relit.

Desiderata.lua écrit quelques lignes d'un texte célèbre sur l'EEPROM.

eeRead.lua lit les données de l'EEPROM et les imprime.

REMARQUE: ces programmes devraient également fonctionner avec d'autres cartes EEPROM.

Étape 7: Conclusion

J'ai essayé de montrer comment le RTC et l'EEPROM fonctionnent pour l'enregistrement des données. Ceci est juste un point de départ pour que vous puissiez vous développer davantage. Vous pouvez connecter divers appareils au bus I2C tels que des capteurs de lumière, des capteurs de pression barométrique, des capteurs de température et d'humidité et enregistrer les données sur l'EEPROM.

Conseillé: