Autres articles / Other articles

Récupérer l'heure depuis un serveur WEB

publication: 4 août 2022 / mis à jour 4 août 2022

Read this page in english

 

Appel à collaboration

Vous développez des montages, simples ou complexes avec ESP32 et ESP32forth.

Partagez-les ici sur ce site.

ESP32forth ne pourra se développer qu'avec la collaboration active de toutes les bonnes volontés.

Vos montages peuvent aider d'autres développeurs.

Les montages des autres développeurs peuvent vous aider.

Pour proposer un article ou un montage, cliquez ici


Dans cet article, Horloge temps réel logicielle, on s'est intéressé à la manière de gérer une horloge temps réel grâce aux propriétés du timer.

Cependant, l'initialisation de cette horloge temps réel doit s'effectuer manuellement. Maintenant que nous disposons d'un moyen de communiquer avec un serveur web, nous allons voir comment effectuer cette initialisatiion au travers d'un serveur web.

Transmission et réception du temps depuis un serveur web

Pour la partie serveur, on crée un nouveau script gettime.php dont voici le contenu:

<?php
echo date('H i s')." RTC.set-time";

Si on exécute ce script:
  http://ws.arduino-forth.com/gettime.php

Voici ce qui s'affiche: 15 25 30 RTC.set-time. On a préparé le travail pour ESP32Forth de manière à ce que l'interpréteur n'aie que cette ligne à exécuter.

Coté ESP32Forth, voici le code permettant de récupérer l'heure:

WiFi 
\ connection to local WiFi LAN 
: myWiFiConnect 
    z" Mariloo" 
    z" 1925144D91DE5373C3C2D7959F"   
    login 
  ; 
 
Forth 
 
0 value currentTime 
 
\ store current time 
: RTC.set-time { hh mm ss -- } 
    hh 3600 * 
    mm 60 * 
    ss + +  1000 * 
    MS-TICKS - to currentTime 
  ; 
 
\ used for SS and MM part of time display 
: :## ( n -- n' ) 
    #  6 base ! #  decimal  [char] : hold 
  ; 
 
\ display current time 
: RTC.display-time ( -- ) 
    currentTime MS-TICKS + 1000 / 
    <# :## :## 24 mod #S #> type 
  ; 
 
700 constant bufferSize 
create httpBuffer 
    bufferSize allot 
 
0 buffer 700 erase 
 
HTTP 
 
: getTime  
    cr 
    z" http://ws.arduino-forth.com/gettime.php" HTTP.begin  
    if 
        HTTP.doGet 
        if  
            httpBuffer bufferSize HTTP.getPayload 
            httpBuffer z>s evaluate 
        then 
    then 
    HTTP.end 
  ; 
 
myWiFiConnect 
getTime 
RTC.display-time 

Dans le mot getTime, cette séquence httpBuffer z>s evaluate récupère le contenu du buffer de transaction web et évalue son contenu. Ceci est possible, car le serveur web a transmis une séquence compatible avec notre interpréteur FORTH.

L'exécution des trois dernières lignes de ce code affiche ceci:

--> myWiFiConnect
192.168.1.23
MDNS started
 ok
--> getTime
 ok
--> RTC.display-time
15:33:09 ok

Cette initialisation peut être exécutée une seule fois, en général au démarrage de ESP32Forth. Cette technique consistant à interroger notre propre serveur web évite de négocier avec un serveur de temps.

La plupart des serveurs de temps délivrent l'information dans des formats difficiles à traiter par FORTH: csv, JSON, XML...


Legal: site web personnel sans commerce / personal site without seling