Wanneer u een IoT-project bouwt dat afhankelijk is van het tijdstip van de dag, wilt u dat het de juiste tijd laat zien zonder handmatige aanpassingen. Het lijkt erop dat dit gemakkelijk te bereiken is met de ESP32, omdat deze een ingebouwde draadloze verbinding heeft en verbinding met internet kan maken.

Hoewel er tal van online voorbeelden zijn die laten zien hoe de ESP32 te configureren om verbinding te maken met internet en de tijd te synchroniseren met een tijd server, vereisen de meeste van hen dat je twee keer per jaar handmatig de zomertijd aanpast, wat nogal belachelijk lijkt voor elke 21e-eeuwse elektronische apparaat.

Hier presenteren we u een oplossing waarmee de ESP32 het hele jaar door de juiste tijd kan weergeven, voor elke plaats ter wereld. Maar laten we eerst eens kijken naar het voorbeeld SimpleTime in de Arduino IDE en kijken wat het doet en hoe we het kunnen verbeteren.

Het SimpleTime-voorbeeld

Als u de Arduino IDE gebruikt met de ESP32, zult u zien dat deze een voorbeeld heeft met de naam SimpleTime dat ziet er zo uit:

U kunt toegang krijgen tot dit voorbeeld door de Arduino IDE te configureren om een ​​ESP32-bord te gebruiken, vanaf de Hulpmiddelen menu, bijvoorbeeld door de ESP32-ontwikkelmodule. Zodra u dit hebt gedaan, kunt u het SimpleTime-voorbeeld openen vanuit de Hulpmiddelen menu onder voorbeelden,ESP32,Tijd, en Eenvoudige tijd.

Je zou verwachten dat dit officiële voorbeeld de beste manier van werken laat zien, maar er is één groot probleem in dit voorbeeld. Om de tijdzone en zomertijd te configureren, moet u de volgende twee regels wijzigen:

const lang gmtOffset_sec = 3600;
const int daglichtOffset_sec = 3600;

De tijdzone instellen met gmtOffset_sec is onhandig omdat u GMT-offset moet vinden voor uw specifieke locatie. U kunt dit doen door de Greenwich Mean Time-website. Gelukkig hoef je dit maar één keer te doen. De daglichtOffset_sec vormt echter een groter probleem, omdat u deze twee keer per jaar moet aanpassen. Dit kan betekenen dat je je project moet verwijderen en twee keer per jaar moet aansluiten op de Arduino IDE, waardoor het totaal ongepast is voor een IoT-project dat je wilt opzetten en vergeten.

Op zoek naar een betere aanpak

Dus wat zou een betere manier zijn om de tijdzone en zomertijd te configureren? Om deze vraag te beantwoorden, hoeft u niet verder te zoeken dan hoe uw Windows-pc met de situatie omgaat:

Merk op hoe we in plaats van het tijdsverschil van GMT te geven, Windows vertellen wat onze tijdzone en locatie is - in ons geval Mountain Time (VS en Canada)—en vink vervolgens het selectievakje aan Stel de klok automatisch in op zomertijd. Vanaf dat moment handelt Windows het het hele jaar door automatisch voor ons af. Dit is het soort gemak dat we willen van onze ESP32.

Verwant: Hoe de systeemvakklok op Windows aan te passen

Een locatiedatabase maken voor de ESP32

Hetzelfde doen op de ESP32 vereist wat beenwerk. we zijn begonnen met een blogpost waarin wordt beschreven hoe de tijdzone moet worden ingesteld met behulp van de TZ-omgevingsvariabele. Voor onze locatie was het toevallig MST7MDT, M3.2.0,M11.1.0, volgens dit tijdzonetabel. Hoewel dit het probleem van het handmatig moeten aanpassen voor zomertijd oplost, wilden we het proces eenvoudiger te maken, zonder dat u voor elk een reeks cijfers en letters hoeft op te zoeken plaats.

We hebben de gegevens van de website omgezet in een database die je direct vanuit je Arduino-schetsen kunt gebruiken. Volgen deze link om direct een zip-bestand te downloaden met de Arduino-schets.

De database zelf wordt opgeslagen in het bestand time_zone.h. Met behulp van de database ziet de code voor SimpleTime er als volgt uit:

We hebben de wijzigingen aan het SimpleTime-voorbeeld in geel gemarkeerd. Met deze regel kan de schets de database gebruiken:

#include "time_zones.h"

Deze regel configureert uw locatie:

const char* location = "Amerika/Denver";

Er zijn 461 mogelijke locaties. U kunt de beschikbare locaties vinden door een kijkje te nemen op de time_zone.h bestand, of door te kijken naar de tijdzonelijst op deze website.

Ten slotte vertelt de volgende regel de ESP32 om de tijd te synchroniseren met een internetserver met behulp van het Network Time Protocol (NTP):

configTimeWithTz (getTzByLocation (locatie), ntpServer);

De specifieke internettijdserver kan worden geconfigureerd met behulp van de volgende regel, hoewel de standaardinstelling goed voor u zou moeten werken:

const char* ntpServer = "pool.ntp.org";

U wilt er ook voor zorgen dat u de informatie voor uw draadloze toegangspunt op de volgende twee regels toevoegt:

const char* ssid = "YOUR_SSID";
const char* wachtwoord = "YOUR_PASS";

Vervangen UW_SSID met de naam van uw draadloze netwerk en JOUW PAS met het wachtwoord dat is gebruikt om er verbinding mee te maken.

Verwant: Manieren om een ​​draadloze router veilig te configureren als openbaar toegangspunt

Afronden

Nadat u de configuratiestappen hebt voltooid, uploadt u de schets naar de ESP32 en deze zal het hele jaar door de juiste tijd gebruiken zonder enige tussenkomst!

Hoewel deze code u een goed startpunt geeft, zijn er meer gebruiksvriendelijke manieren om hetzelfde te bereiken. U wilt bijvoorbeeld de gebruiker toestaan ​​om alles vanaf een webpagina te configureren in plaats van dit tijdens het compileren te laten doen. Dit is nogal wat meer werk, omdat je de volgende dingen in je Arduino-schets zou moeten doen:

  1. Configureer de ESP32 als een draadloos toegangspunt voor de eerste configuratie
  2. Start een webserver om de gebruiker een configuratiepagina te presenteren
  3. Maak een HTML-formulier waarmee de gebruiker de informatie over het draadloze netwerk kan invoeren en zijn locatie kan selecteren
  4. Maak de code om de keuzes van de gebruiker te verwerken en sla deze op in een niet-vluchtig geheugen
  5. Bij het inschakelen van het bord:
    • Lees de configuratie van niet-vluchtig geheugen
    • Maak verbinding met het draadloze netwerk en synchroniseer de tijd

Een project dat deze stappen demonstreert is de ESP32 Dali-klok. Het was dit project dat ons ertoe bracht een betere manier te vinden om tijdsynchronisatie op de ESP32 uit te voeren.

Afbeelding tegoed: Marcio Teixeira/Flickr

Bekijk de broncode voor de ESP32 Dali Clock om te zien hoe u een uitgebreide webconfiguratiepagina kunt weergeven. De configuratiepagina toont een vervolgkeuzemenu waarmee de gebruiker zijn locatie en tijdzone kan selecteren en stelt de gebruiker ook in staat om de tijd handmatig in te stellen met behulp van een tijd- en kalenderwidget, voor een niet-verbonden alternatief!

Locatiegebaseerde netwerktijdsynchronisatie op de ESP32

Je hebt nu alle informatie die je nodig hebt om de klok van je ESP32 automatisch op de juiste tijd in te stellen, en ook voor zomertijd. Dit is perfect voor IoT-projecten die u niet handmatig wilt aanpassen.

7 interessante projecten die de ESP32 gebruiken om composietvideo te genereren

Als u op zoek bent naar interessante projecten met ESP32, bent u hier aan het juiste adres.

Lees volgende

DeelTweetenE-mail
Gerelateerde onderwerpen
  • doe-het-zelf
  • ESP32
  • internet van dingen
Over de auteur
Marcio Teixeira (4 artikelen gepubliceerd)

Ik ben een maker met een speciale interesse in open source software, elektronica, 3D-printen, computergraphics en retro-computing.

Meer van Marcio Teixeira

Abonneer op onze nieuwsbrief

Word lid van onze nieuwsbrief voor technische tips, recensies, gratis e-boeken en exclusieve deals!

Klik hier om je te abonneren