(Document vertaald met Google translate UK->NL.) (English version)
Github voor de laatste wijzegingen
Een klok die de
tijd in woorden weergeeft in de talen Nederlands, Engels, Frans en Duits in een
grote 4-talige klok of als een enkeltalige klok.
De Arduino ESP32 Nano wordt gebruikt om de klok aan te sturen.
De tijd wordt gesynchroniseerd met het Network Time Protocol (NTP) van het
internet.
Instellingen kunnen worden beheerd met een webpagina, een
pc of een Bluetooth Low Energy (BLE) seriële terminal-app die is geïnstalleerd
op een telefoon, pc of tablet.
|
|
4-talige klok |
Nederlandse taal klok |
|
|
Arduino ESP32 Nano op de printplaat in de klok.
Klein PCB-ontwerp met Rotary en DS3231 RTC bevestigd
Voor het
starten
De klok ontvangt de tijd van het internet als er een WIFI-verbinding is.
Wanneer een DS3231-tijdmodule op de printplaat is bevestigd, is een
internetverbinding niet vereist. Een draaiknop kan worden gebruikt om de tijd
in te stellen.
Om verbinding te maken met het internet moeten de naam van het WIFI-station en
het wachtwoord in de kloksoftware worden ingevoerd om verbinding te kunnen
maken met een WIFI-router.
De naam van het WIFI-station en het wachtwoord moeten eenmalig worden
ingevoerd. Deze inloggegevens worden opgeslagen in het geheugen van de
microprocessor. (Zie Installaties )
Om het leven gemakkelijker te maken, kunt u het beste een telefoon of tablet en een Bluetooth-communicatie-app gebruiken om de WIFI-gegevens in de klok in te voeren.
|
|
|
BLESeriaal nRF |
BLE Serieel Pro |
Seriële Bluetooth-terminal |
- Download een
Bluetooth UART seriële terminal app op je telefoon, PC of tablet.
Voor IOS: BLE Serial Pro of BLESerial nRF .
Voor Android: Seriële Bluetooth-terminal .
Compilatie en uploaden
Voor elk board dat met de Arduino IDE geprogrammeerd kan worden is een compiler beschikbaar. Deze kan geselecteerd worden in het boards manager menu
Er zijn twee versies beschikbaar voor de Arduino Nano ESP32.
Eén van Arduino zelf die gebruik maakt van core versie 2. Dit bord is veilig in gebruik.
De fabrikant van de ESP32 microcontroller Espressif ontwikkelt coreversie 3. Sinds versie 3.0.5 compileert deze core probleemloos de word clock sketch V056.
- Zoek naar ESP32 in de boardmanager.
De instellingen van
het Arduino Nano ESP32-bord zijn als volgt:
- Installeer ESP32-boards. De Arduino Nano ESP32 kan ergens onderaan die lange lijst met boards worden gevonden als de Espressif core V3 wordt gebruikt.
- Laad het bestand ESP32Arduino_WordClockV0xx.INO in de IDE
Selecteer een van de drie woordklokken
//#define VIERTAALKLOK
#define NL144KLOK
//#define NLM1M2M3M4L94 // NL klok met vier extra LED's voor de minuten om op te lichten voor Ulrich
·
#define NL144CLOCK -> een
144 LED enkeltalige klok. Standaardtaal is Nederlands. Voor Frans, Duits en
Engels kopieer de codering van de viertalige klok tussen de
NL144CLOCK-definities.
Bouwinstructie
voor de klok in het Nederlands en Engels of hier
in deze repository
· #define NLM1M2M3M4L94 -> een 144 LED enkeltalige klok met 4 extra LED's voor de minuten en een iets ander ontwerp
·
#define VIERTALIGE KLOK->
een 4-talige klok met 625 LED's in een raster van 25 x 25.
Bouwinstructie
van een 4-talige woordklok met SK6812 LED's in het VK, NL, DE, FR met Nano
Every. .
In de libraries.zip
staan de bibliotheken om de software te compileren. Pak ze uit in je
libraries-map.
Download de program-map en compileer voor Arduino Nano ESP32
Bord: Arduino Nano ESP32
Partitieschema: met FAT
Pinnummering: Op GPIO-nummer (oud)
(als de Arduino pin (standaard) is gekozen, gaat de LED-strip mogelijk niet aan en werkt de RGB LED op de Nano ESP32 mogelijk niet)
Als de LED's niet gaan branden, is de kans groot dat de pininstellingen niet goed zijn.
Installaties
Om verbinding te maken met een WIFI-netwerk moet een
SSID (WIFI-naam) en wachtwoord worden ingevoerd.
Er zijn een paar methoden:
Sluit de MCU in de klok met een micro-USB- seriële
kabel aan op een pc en gebruik een seriële terminal.
Gebruik een BLE- seriële terminal-app op een telefoon of tablet voor verbinding
.
Voor een PC de app Termite is prima als seriële terminal. Maar seriële monitor in de
Arduino IDE werkt vaak beter.
Voor IOS gebruik : BLE Serial Pro of BLESeriaal
nRF .
Voor Android gebruik: Seriële Bluetooth terminal .
Bluetooth Low Energy (BLE) kan twee soorten protocol gebruiken CC25nn of
nRF52nn waarbij nn een specifiek nummer is. Deze klok gebruikt nRF52.
- Start de app en start een verbinding met de klok. Sommige apps starten
automatisch met een verbindingsvenster, maar voor sommige moet een
verbindingssymbool worden ingedrukt. Er is waarschijnlijk één station, het
woord klok, om uit te selecteren.
- Selecteer de klok in de lijst.
- De app toont een venster en een regel waar opdrachten kunnen worden ingevoerd
en naar de klok kunnen worden verzonden.
- Door de letter I of i voor informatie te verzenden, wordt het menu
weergegeven, gevolgd door de werkelijke instellingen van verschillende
voorkeuren .
In de klok zit een LED die een rode stip heeft
die oplicht als het programma draait.
Een groene stip gaat branden als er een WIFI-verbinding is. Als er een
Bluetooth-verbinding is, gaat er een blauwe stip in de LED branden.
In beide
gevallen stuurt
u de letter I van Informatie en het menu verschijnt . Voer de eerste
letter in van de instelling die u wilt wijzigen, gevolgd door een code. Sommige items schakelen alleen Aan en Uit. Zoals de W om WIFI Uit of Aan te zetten.
Om de SSID en
het wachtwoord te wijzigen: |
______________________________ Een SSID B Wachtwoord C BLE-bakennaam D Datum (D15012021) T Tijd (T132145) E Tijdzone (E<-02>2 of E<+01>-1) F Eigen kleur (Hex FWWRRGGBB) G Scan WIFI-netwerken H Schakelen tussen draai-encoder Ik Om dit Info-menu af te drukken J Schakel DS3231 RTC-module in K LDR leest/sec. schakelt aan/uit N Weergave uit tussen Nhhhh (N2208) O Weergave aan/uit schakelen P Status LED-schakelaar Aan/Uit Q Weergave kleurkeuze Q0 Geel Q1 Uurlijks Q2 Wit Q3 Allemaal Eigen Q4 Eigen Q5 Wiel Q6 Digitaal R Instellingen resetten @ = MCU resetten U Demo- modus ( msec ) (M200) --Instellingen voor lichtintensiteit (1-250)-- S-helling, L-min, M-max (S80 L5 M200) W WIFI, X NTP&, CCC BLE, + Snelle BLE # Zelf test, ! Zie RTC, & Update RTC Ed Nieuwenhuys November 2024 ________________________________________________ Weergave uit tussen: 23u - 08u Weergavekeuze: Wiel Helling: 5 Min: 5 Max: 100 SSID: FRITZ!Box BLE -naam : RedSmall01 IP-adres: 192.168.178.199 (/update) Tijdzone: CET-1CEST,M3.5.0,M10.5.0/3 WIFI=Aan NTP=Aan BLE=Aan FastBLE =Aan LED-strip: SK6812 (Stuur % naar schakelaar) Software: ESP32Arduino_WordClockV049.ino ESP32 Arduino kernversie: 2.0.17 __________________________________________________________________________________ |
|
Menu weergegeven in seriële uitvoer. |
Standaard staat de
klok ingesteld op Amsterdamse tijd. Een reset met optie R in het menu zal deze
tijdzone weer terugzetten naar Amsterdam.
Om een andere tijdzone in te stellen, stuurt u de tijdzonestring tussen de
aanhalingstekens, voorafgegaan door het teken E of e.
Onderaan deze handleiding worden veel tijdzones
afgedrukt.
Bijvoorbeeld: als u in Australië/Sydney woont, stuurt
u de string,
eAEST-10AEDT,M10.1.0,M4.1.0/3.
De klok gebruikt de zomertijd (DST) wanneer
deze is verbonden met een NTP-server, maar niet wanneer de DS3231-tijdmodule
wordt gebruikt
|
|
HTML-pagina op iPhone |
Termietenterminal vanaf een pc |
Software upgraden
Software
kan over the air (OTA) worden geüpgraded door een webbrowser te openen en het
IP-adres van de klok in te voeren, gevolgd door /update.
Bijvoorbeeld: 192.168.178.78/update. Kies firmware en klik op Choose File. Kies
het juiste bin-bestand.
Zoiets als:
ESP32Arduino_WordClockV056.ino-NL144-3.0.7.bin
Bediening en instellingen van de klok
De klok kan worden bediend met de WIFI
webpagina of BLE UART terminal app.
Wanneer de klok is verbonden met WIFI heeft deze een IP
-adres ontvangen van de router waarmee deze is verbonden.
Het IP-adres staat afgedrukt in het menu.
Om het menu als een webpagina te starten, IP -adresnummers
en punten (bijvoorbeeld: 192.168.178.77) moeten worden ingevoerd in de webbrowser
van uw mobiele telefoon of pc
of gebruik in
plaats daarvan de BLE-uitzendnaam gevolgd door .local als URL in
de browser. (Standaard na een reset: wordclock.local
Of gebruik een
Bluetooth-verbinding:
- Open de BLE-terminal-app.
- Zoek in de app naar de klok om verbinding mee te maken en maak verbinding.
Elke app heeft zijn eigen manier om het Bluetooth-apparaat weer te geven
waarmee verbinding moet worden gemaakt.
De iPhone / iPad / iMac BLE-seriële apps zijn door mij gemaakt en werken met
hun standaardinstellingen.
Bij andere apps moeten de instellingen voor het verzenden en ontvangen van
gegevens mogelijk worden gewijzigd. Speel met de lettergrootte en de CR- en
LF-instelling totdat u
op een iPhone, iPad of iMac met de BLE-seriële app de
transmissiesnelheid kunt versnellen door de optie '+ Fast BLE' te selecteren
in het menu
Helaas kunnen sommige
apps geen strings lezen die langer zijn dan 20 tekens en ziet u de strings
afgekapt of vervormd .
Als u een vervormd menu ziet, voer dan het teken '+'
in en verstuur het om de langzamere transmissiemodus te selecteren .
Als de transmissie te vervormd is en het onmogelijk is om het teken Z te
verzenden, probeer dan de webpagina van de klok en verstuur het teken +.
Als alles mislukt, moet u de MCU in de klok met een USB-C-kabel aansluiten op
een pc en een seriële terminal-app gebruiken om een + te verzenden of als
laatste redmiddel R om de fabrieksinstellingen te resetten.
De lichtintensiteit van het display aanpassen
In het menu kan de lichtintensiteit van het display met drie parameters worden geregeld:
--Instellingen voor lichtintensiteit (1-250)--
S=Helling L=Min M=Max (S80 L5 M200)
Standaardwaarden
worden tussen () weergegeven.
S Toon snel de helderheid de maximale helderheid bereikt .
Ik Hoe helder het scherm is in volledige duisternis .
M de maximale helderheid van het scherm .
In de onderste helft van het menu worden de opgeslagen waarden weergegeven
Helling: 80 Min: 5 Max: 255
De klok reageert op licht met zijn LDR (lichtafhankelijke weerstand) .
Als het donker wordt schakelt het display niet helemaal uit maar blijft gedimd op
een minimale waarde .
Met de parameter V kan de laagste helderheid worden geregeld. Met een waarde
tussen 0 en 255 kan deze helderheid worden ingesteld.
V5 is de standaardwaarde.
De maximale helderheid van het display wordt geregeld met de parameter U. Ook een waarde tussen 0 en 255.
Met parameter S kan de helling worden geregeld hoe snel de maximale helderheid wordt bereikt.
Instellingen
worden ingesteld door het eerste teken van een opdracht in te voeren, gevolgd
door parameters indien nodig.
Bijvoorbeeld:
Om de kleuren van de woorden in de klok op wit in te stellen, voer in: Q2
Om willekeurig alle vier de talen elke minuut te tonen, stuurt u L4. (Dit werkt
niet in een klok met één taal)
Schakel WIFI uit door een W te sturen.
Start de klok opnieuw met de letter @.
Reset naar
standaardinstelling door R te sturen.
|
|
HTML-pagina |
BLE-menu |
De software updaten
De software kan 'Over The Air' worden bijgewerkt wanneer de klok is verbonden
met WIFI.
Het IP-adres staat in het menu.
Voer het IP-adres van de klok in, gevolgd door /update.
Zoiets als dit: 192.168.178.141/update.
Of gebruik BLEbroadcastname.local /update in plaats van het IP-adres.
In dit geval: redpcbv01.local/update.
'Kies bestand' in het menu en selecteer het bin-bestand dat u wilt bijwerken.
Iets als: ESP32Arduino_WordClockV056.ino.bin
waarbij V056 het versienummer van de software is.
Gedetailleerde
beschrijving
Met het menu kunnen veel voorkeuren worden ingesteld.
Deze voorkeuren worden opgeslagen in de ESP32-opslagruimte.
Voer het eerste teken in het menu van het item in dat
moet worden gewijzigd, gevolgd door de parameter.
Er is geen verschil tussen hoofdletters of kleine
letters. Beide zijn OK.
Serie gestart
Rotary NIET gebruikt
Rotary beschikbaar
I2C-adres gevonden: 0X57
I2C-adres gevonden: 0X68
Externe RTC-module IS gevonden
DS3231 RTC-software gestart
Geheugencontrolesom = 25065
Opgeslagen instellingen geladen
LED-strip is SK6812
LED-strip gestart
BLE is gestart
10: netwerken gevonden
1: FRITZ!BoxEd -47 * -- Zal verbinding maken met
2: NETGEAR_EXT-69
3: FRITZ!BoxEd -71 * -- Zal verbinding maken met
4: H369A209CE1 -75 *
5: H3baas -81 *
6: H369A209CE1 -81 *
7: FRITZ!Box -82 *
8: H369A209CE1 -83 *
9: FRITZ!Box 5490 IS -83 *
10: FRITZ!Box 5490 XL -84 *
[ WiFi -gebeurtenis] gebeurtenis: 0: WiFi- interface gereed
[ WiFi -gebeurtenis] gebeurtenis: 2: WiFi- client gestart
[ WiFi -gebeurtenis] gebeurtenis: 4: Verbonden met toegangspunt
[ WiFi -gebeurtenis] gebeurtenis: 7 : Verkregen IP-adres: 192.168.178.199
IP-adres: 192.168.178.199
Webpagina gestart
WIFI gestart
01/01/2000 00:06:42
________________________________________________
Een SSID B Wachtwoord C BLE-bakennaam
D Datum (D15012021) T Tijd (T132145)
E Tijdzone (E<-02>2 of E<+01>-1)
F Eigen kleur (Hex FWWRRGGBB)
G Scan WIFI-netwerken
H Schakelen tussen draai-encoder
Ik Om dit Info-menu af te drukken
J Schakel DS3231 RTC-module in
K LDR leest/sec. schakelt aan/uit
N Weergave uit tussen Nhhhh (N2208)
O Weergave aan/uit schakelen
P Status LED-schakelaar Aan/Uit
Q Weergave kleurkeuze
Q0 Geel Q1 Uurlijks Q2 Wit
Q3 Allemaal Eigen Q4 Eigen Q5 Wiel
Q6 Digitaal
R Instellingen resetten @ = MCU resetten
U Demo- modus ( msec ) (M200)
--Instellingen voor lichtintensiteit (1-250)--
S-helling, L-min, M-max (S80 L5 M200)
W WIFI, X NTP&, CCC BLE, + Snelle BLE
# Zelf test, ! Zie RTC, & Update RTC
Ed Nieuwenhuys November 2024
________________________________________________
Weergave uit tussen: 23u - 08u
Weergavekeuze: Geel
Helling: 5 Min: 5 Max: 100
SSID: FRITZ!BoxEd
BLE -naam : RedSmall01
IP-adres: 192.168.178.199 (/update)
Tijdzone: CET-1CEST,M3.5.0,M10.5.0/3
WIFI=Aan NTP=Uit BLE=Aan FastBLE =Aan
LED-strip: SK6812 (Stuur % naar schakelaar)
Software: ESP32Arduino_WordClockV049.ino
ESP32 Arduino kernversie: 2.0.17
01/01/2000 00:06:42
________________________________________________
Het is vijf over twaalf
Het is vijf over twaalf LDR:140= 3% 220692 l/s 20°C 00:06:43
Het
was vijf over twaalf LDR:140= 3% 215629 l/s 20°C 00:07:00
A SSID B Wachtwoord C
BLE beacon naam
Voer de naam van de SSID van de router en het
wachtwoord in waarmee de klok verbonden moet worden.
De Bluetooth broadcast naam die weergegeven wordt in de Bluetooth seriële
terminal app kan gewijzigd worden.
Bijvoorbeeld: een FRITZ!Box of A FRITZ!Box
.
Voer vervolgens het wachtwoord in. Bijvoorbeeld: B Secret_pass
word.
Voer eventueel c
BluetoothName in (standaard na een reset: wordclock )
Start de klok opnieuw door @ te verzenden .
CCC Door CCC of ccc in te voeren, schakelt u BLE in of uit. Wees voorzichtig bij het uitschakelen. Als BLE uit staat, kan de klok alleen worden bediend met WIFI of de USB-seriële poort.
D Datum instellen en T
Tijd instellen
Als er geen verbinding is met WIFI-tijd en er een RTC
DS3231 is aangesloten, moet de datum handmatig worden ingesteld .
Voer bijvoorbeeld in: D06112022 om de datum in te
stellen op 6 november 2022.
Voer bijvoorbeeld T132145 (of 132145, of
t132145) in om de tijd in te stellen op 45 seconden en 21 minuten na één uur.
Het wijzigen van datum en tijd werkt alleen als er een DS3231 RTC-module is
aangesloten.
E
Stel tijdzone E<-02>2 of E<+01>-1
in Onderaan deze pagina staan de tijdzones die in 2022
worden gebruikt.
Het is een vrij ingewikkelde string en het is daarom
verstandig om deze te kopiëren.
Laten we er een kiezen als u hier woont:
Antarctica/Troll,"<+00>0<+02>-2,M3.5.0/1,M10.5.0/3"
Kopieer de string tussen de " "'s en
verstuur deze beginnend met een 'E' of 'e' ervoor.
E<+00>0<+02>-2,M3.5.0/1,M10.5.0/3
F Eigen kleur
(Hex WWRRGGBB)
De kleuren van uw keuze van
de woorden die in de klok worden weergegeven, kunt u selecteren met optie Q3 of
Q4 in het menu. Het in te voeren formaat is
hexadecimaal. 0123456789ABCDEF zijn de tekens die kunnen worden gebruikt.
Het commando bestaat uit 2 cijfers voor Rood gevolgd door 2 voor Groen en
eindigend met 2 cijfers voor Blauw.
Om de karakters intens Groen te kleuren, voer
F0000FF00 in, voorafgegaan door de letter F. Om
de karakters intens Rood te kleuren, voer FF0000 in, voorafgegaan door
het karakter F.
Om intens blauw in te stellen, voer je F0000FF of FFF in.
Om het gedimde teken donkergrijs te maken, voert u bijvoorbeeld F191919 in.
Bij SK6812 LED's kan de extra witte LED naast de drie RGB LED's in dezelfde behuizing worden gebruikt.
Bijvoorbeeld: F8800FF00 is 50% wit en 100% groen.
G
Scannen naar WIFI netwerken in de buurt
Door 'G' te versturen worden de beschikbare netwerken
in de buurt in de seriële terminal afgedrukt. Dit kan eenvoudig zijn om de soms
lastige SSID te kopiëren naar optie A van het menu.
H
Schakelen om de draaiknop te gebruiken.
Door 'H' te verzenden schakelt u het gebruik van een
optionele draaiknop die op de printplaat is bevestigd in of uit.
Als u de draaiknop inschakelt en er geen draaiknop op aansluit, zal dit waarschijnlijk resulteren in onbedoelde invoer, omdat de niet-aangesloten pinnen willekeurig signalen oppikken.
Om dit infomenu af te
drukken,
drukt u het menu af via Bluetooth en de seriële
monitor die met een USB-kabel is aangesloten .
J
Schakelen om de DS3231-moduletijd te gebruiken
Door 'J' te verzenden, schakelt u het gebruik van een
optionele DS3231-tijdmodule AAN en UIT.
Als de klok geen internetverbinding heeft, zal de tijd waarschijnlijk ongewenst
snel afdrijven. Door een DS3231-tijdmodule te installeren, wordt de afwijking
teruggebracht tot een paar seconden per jaar. De tijd kan worden ingevoerd met
optie T en D in het menu.
K
Reads/sec wisselt Aan/Uit
Door een K in te voeren wisselt u het afdrukken van de
LDR-uitlezing van de gemeten lichtintensiteit.
Het toont ook hoe vaak de processor door het programma loopt en zijn taken
controleert om de klok te laten lopen.
N
Display uit tussen Nhhhh (N2208)
Met N2208 wordt het display uitgeschakeld tussen 22:00
en 8:00.
O Display aan/uit
schakelen
O Schakelt het display uit en in.
P
Status-LED's schakelen aan/uit
P Schakelt de status-LED's op de Arduino Nano uit en
aan.
Q Keuze van de weergavekleur (Q0-6)
Q0 Geel Q1 per uur Q2 Wit Q3 Alles Eigen Q4 Eigen Q5
Wiel Q6 Digitaal display
Q0 geeft de tijd weer met gele woorden
en zal HET (of IT) binnen een uur van groen via geel naar rood veranderen.
en zal IS of WAS
van groen naar rood via geel veranderen in een minuut.
Q1 zal elk uur een andere kleur tonen.
Q2 toont alle teksten wit.
Q3 en Q4 gebruiken uw eigen gedefinieerde kleuren.
Q5 zal elke minuut regenboogkleuren volgen.
Q6 is het digitale display
R
Instellingen resetten
R zet alle voorkeuren terug naar de
standaardinstellingen.
Hiermee worden ook de SSID en het wachtwoord gewist.
Voer een reset uit wanneer de schets voor de eerste keer wordt geüpload naar de Arduino Nano ESP32.
S=Slope L=Min M=Max (S80 L5 M200)
S Hoe snel de helderheid de maximale helderheid
bereikt.
L Hoe helder het display is in volledige duisternis.
M de maximale helderheid van het display.
Waarden tussen 0 en 250'
U Demo-modus (msec) (U200)
Voer U in, gevolgd door de duur van een seconde in milliseconden.
M200 (200 milliseconde) versnelt de klok 5 keer.
Als u een U verzendt, wordt de demomodus uitgeschakeld.
W=WIFI,
X=NTP & , CCC=BLE
Schakel WIFI, NTP in en uit.
Voer het teken in om het in of uit te schakelen.
Onderaan het menu staat het aangegeven.
Door een & te verzenden wordt een query vanaf de tijdserver gestart.
+
Snelle BLE
Het BLE UART-protocol verzendt standaardpakketten van
20 bytes lang. Tussen elk pakket zit een vertraging van 50 msec .
De IOS BLEserial- app, en misschien ook andere, kan
pakketten van 80 bytes of meer ontvangen voordat tekens worden gemist . Hierdoor
wordt het menu sneller afgedrukt.
Optie Z schakelt tussen de lange en korte pakketten.
! = Toon NTP,
RTC en DS3231 tijd
! zal de NTP, RTC en
DS3231 tijd weergeven zoals ze zijn opgeslagen in de klok in de klok . De
DS3231 tijd module moet geïnstalleerd zijn en gebruikt worden om een
realistische tijd te tonen.
Hetzelfde als de & optie maar deze optie zal niet worden bijgewerkt vanaf
de internet NTP server maar toont alleen de tijd.
# = Selftest
Door een # te sturen
start de klokzelftest. Dit is handig om te controleren of alle woorden in de
klok functioneren.
% = Wisselen
tussen SK6812 en WS2812 LED strip
Met deze optie kan de
gebruikte LED strip worden gewisseld. De klok is uitgerust met een van deze
twee typen LED strips.
Een reset van alle
instellingen door een R in het menu te sturen, verandert de selectie van de
LED-strip niet.
@ = Res et MCU
@ start de MCU opnieuw op . Dit is handig als de SSID, et cetera worden
gewijzigd en het programma opnieuw moet worden opgestart. Instellingen worden
niet verwijderd.
& = Haalt
en slaat NTP-tijd op in RTC- en DS3231-tijd
& haalt de
NTP-tijd direct van internet en slaat deze op in de RTC-klokken. Deze optie is
handig om de klok te dwingen de juiste NTP-tijd op te halen.
In andere gevallen controleert het programma de tijd die in de klok en op de
NTP-server loopt, zo nu en dan, en werkt de RTC-klokken bij.
De DS3231-tijdmodule moet geïnstalleerd zijn en gebruikt worden om een
realistische tijd weer te geven.
123456 Tijd instellen in RTC-module
Voer de tijd in
als 152300 hhmmss . Hetzelfde als T152300.
Datum en tijd wijzigen werkt alleen als een DS3231
RTC-module is aangesloten.
Programma uitleg
Het programma maakt gebruik van de volgende standaardbibliotheken.
//----------------------------------------
// ESP32 Bevat definities en initialisaties
//----------------------------------------
#include < Arduino.h >
#include < Voorkeuren.h >
#als ESP_ARDUINO_VERSION >= ESP_ARDUINO_VERSION_VAL(3, 0, 0)
#include " EdSoftLED.h " // voor LED-strip WS2812 of SK6812
#anders
#include < Adafruit_NeoPixel.h > // voor LED-strip WS2812 of SK6812
#endif
#include < NimBLEDevice.h > // Voor BLE-communicatie
#include < ESPNtpClient.h > // https://github.com/gmag11/ESPNtpClient
#include < WiFi.h > // Gebruikt voor webpagina
#include < AsyncTCP.h > // Gebruikt voor webpagina
#include < ESPAsyncWebServer.h > // Gebruikt voor webpagina ESPAsyncWebServer
#include < ElegantOTA.h >
#include < Wire.h >
#include < RTClib.h > // Gebruikt voor aangesloten DS3231
#include < Encoder.h >
De TAB in de IDE is
de webpagina die in de browser moet worden weergegeven.
De #include " Webpage.h " een paar regels verder in de code laadt de
webpagina.
Ik heb de webpagina gemaakt in de gratis 'Microsoft Expression Web 4'. Deze
wordt niet meer onderhouden, maar heeft meer dan genoeg functionaliteiten voor
onze doeleinden.
Om de code te kopiëren van de MS-Expression web HTML-editor:
Klik in de onderste regel van het venster van MS-Expression op 'Splitsen'. In
de bovenste helft wordt de onbewerkte HTML-code weergegeven en in de onderste
helft het ontwerpvenster. Kopieer in het codevenster alle HTML-code. Ga naar de
Arduino IDE en plak deze in de webpage.h TAB tussen:
R"rawliteral ( ... en ... ) rawliteral ";
Of kopieer de code van de webpage.h in het MSexpression -codegebied en ontwerp
de pagina opnieuw.
Er volgt een lange
lijst met definities en initialisaties.
Ik ben geen fan van het doorgeven van alle variabelen van en naar functies en
houd ze graag globaal in één programmalijst. Als je een programma schrijft met
andere mensen is het een goede gewoonte om niet te veel globale variabelen te
gebruiken, maar dit programma staat in één grote lijst, om dezelfde reden om
het simpel te houden.
Ik heb alle variabelen per toepassing gegroepeerd om bij te houden waar ze
worden gebruikt. Met een eenvoudige zoekopdracht is het gemakkelijk om in deze
ene geweldige lijst de achterkant te vinden.
Om de tijd af te drukken als tekst en kleur met de juiste LED's of tekens,
worden de woorden en de positie ervan in een reeks LED's of tekst gedefinieerd.
De definities voeren de functie ColorLeds uit met de juiste parameters.
Verderop in het programma in de functie void Dutch(void), void English(void) et
cetera wordt duidelijk waarom deze definities zo nuttig en handig zijn.
...
#define PRECIES ColorLeds (" precies ", 16, 22, LetterColor );
#define MTIEN ColorLeds (" tien ", 25, 28, LetterColor );
#define KWART ColorLeds (" kwart ", 32, 36, LetterColor );
#define VOOR ColorLeds (" voor ", 38, 41, LetterColor );
...
Dit is de
initialisatie van het opslaggebied om de struct EEPROMstorage op te slaan .
De Struct met al zijn instellingen wordt in één opdracht opgeslagen in het
permanente geheugen of SDPreferences FLASHSTOR;
struct EEPROMstorage
{ // Gegevensopslag om ze te behouden na stroomuitval
byte DisplayChoice = 0;
...char BLEbroadcastName [30]; // Naam van het BLE-baken
char Timezone [50];
int Checksum = 0;} Mem;
De variabelen worden geadresseerd met een korte naam Mem. Bijvoorbeeld
Mem.DisplayChoice = 3;
De Struct EEPROMstorage
wordt opgeslagen in de functie StoreStructInFlashMemory
en opgehaald in de functie GetStructFromFlashMemory
Het menu dat wordt weergegeven in de seriële monitor en de BLE-app wordt hier
gedefinieerd. De string mag niet langer zijn dan 40 tekens, wat kan worden
gecontroleerd met de string 'ruler'.
// Menu
//0 1 2 3 4
//1234567890123456789012345678901234567890
tekenmenu[][40] = {
"Een SSID B Wachtwoord C BLE-bakennaam",
"D Datum (D15012021) T Tijd (T132145)",
...
"W=WIFI, X =NTP, Y=BLE, Z=Snelle BLE",
" Juni 2024" };
De installatie vindt hier plaats:
//----------------------------------------
// ARDUINO-installatie
//----------------------------------------
lege setup()
{
Serial.begin (115200); // Stel de seriële poort in op 115200 baud //
pinMode ( secondenPin , OUTPUT); // seconden LED-pin inschakelen
...
...
msTick = millis ();
}
De lus wordt bijna leeg gehouden en het
programma start in EverySeccondCheck .
Alleen subroutine in CheckDevices (); moet vaak
worden uitgevoerd.
//----------------------------------------
// ESP32-lus
//----------------------------------------
lege lus()
{
Loopcounter ++; // Hoe vaak herhaalt de MCU een loop/sec?
ElkeSecondeControle ();
ControleerApparaten ();
}
De
volgende routines controleren of er elke seconde, minuut, uur en dag iets moet
gebeuren.
Deze flow handling van het programma houdt de
processor voor 99% vrij voor andere doeleinden.
In dit programma is dat bijna niets, maar voor
andere doeleinden kan dit nodig zijn.
In de Bluetooth en Seriële communicatiefuncties
worden enkele korte vertragingen gebruikt die hier essentieel zijn, maar het
programma draait hier alleen als er daadwerkelijk communicatie is.
(Een alternatieve methode had het gebruik van
een interrupt elke seconde en een lege lus kunnen zijn).
//--------------------------------------------
// KLOK Update routine wordt elke seconde uitgevoerd
//----------------------------------------
ElkeSecondCheck ongeldig maken (ongeldig)
{
statisch int Toggle = 0;
uint32_t msLeap = millis () - msTick ; //
als ( msLeap >999) // Elke seconde de lus ingaan
{
msTick = millis ();
GetTijd (false); // Haal de tijd op voor de seconden
leds aan of uit te zetten
UpdateStatusLEDs (schakelen);
SetSecondColour (); // Stel de kleur per seconde in van 'IS' en 'WAS'
DimLeds ( TestLDR ); // Elke seconde een intensiteitscontrole
als ( timeinfo.tm_min != lastminute) ElkeMinuteUpdate ();
Lusteller =0;
}}
//----------------------------------------
// KLOK Update routine wordt elke minuut uitgevoerd
//----------------------------------------
ElkeMinuteUpdate ongeldig maken (ongeldig)
{
...
als( timeinfo.tm_hour != laatsteuur ) ElkeHourUpdate ();
}
//----------------------------------------
// KLOK Update routine wordt elk uur uitgevoerd
//----------------------------------------
ongeldig EveryHourUpdate (ongeldig)
{
...
als ( timeinfo.tm_mday != laatstedag ) EveryDayUpdate ();
}
// //
//----------------------------------------------------------------------
// KLOK Update routine wordt elke dag uitgevoerd
//------------------------------------------- ----------------------------
leeg EveryDayUpdate (leeg)
{
...
}
Controleer op seriële invoer van de seriële
monitor en geef de opdracht door aan ReworkInputString ()
//----------------------------------------
// Algemene controle voor seriële invoer
//----------------------------------------
ongeldige SerialCheck (ongeldig)
{
...
ReworkInputString ( SerialString +"\n"); // Opnieuw bewerken ReworkInputString ();
...
}
Herstel alle standaardwaarden.
//-----------------------------------------------------------------
// Algemeen Resetten naar standaardinstellingen
//-----------------------------------------------------------------
leeg Reset(leeg)
{
Mem.Controlesom = 25065;
...
}
Algemene
printroutines.
Om alle printopdrachten op één plek te houden,
is het eenvoudig om deze routines te wijzigen voor andere borden met een andere
'slang'.
//----------------------------------------
// Algemene afdrukroutines
//----------------------------------------
void Tekstprint (char const tekst [])
{ if(Serial) Serial.print ( tekst ); SendMessageBLE ( tekst ); sptext [0]=0; }
leegte Tekstafdruk ( char const tekst[])
{ sprintf ( sptext ,"%s\ n",tekst ); Tekstprint( sptext ); }
leegte TekstSprint ( char const tekst[])
{ printf (tekst); sptext [0]=0;} // afdrukken voor foutopsporingsdoeleinden
leegte TekstSprintln ( char const tekst[])
{ sprintf ( sptext ,"%s\ n",tekst ); TekstSprint ( sptext ); }
//-------------------------------------------- -----------------------
// Algemeen Beperk een string met gehele getallen
// De waarde tussen het eerste en laatste teken in een tekenreeks wordt geretourneerd tussen de lage en hoge grenzen
//-------------------------------------------- -----------------------
int SConstrainInt (String s,byte eerste,byte laatste,int laag,int omhoog)
{return constrain( s.substring (eerste, laatste). toInt (), laag, omhoog);}
int SConstrainInt (String s,byte eerst, int laag, int omhoog)
{return constrain( s.substring (eerste). toInt (), laag, omhoog);}
De
instelling van opslagruimte en controle van de geldigheid van de instellingen.
In de checksum is ongeldig zal een reset() de
standaardinstellingen herstellen
//----------------------------------------
// Algemene init en controleer de inhoud van EEPROM
//----------------------------------------
leeg InitStorage (leeg)
Instellingen
opslaan en ophalen van SPIFFS of SD of EEPROM
. De verschillende mogelijkheden worden hier
opgeslagen. EEPROM veroudert, maar werkt nog steeds.
----------------------------------------
// COMMON Bewaar mem.struct in FlashStorage of SD
//----------------------------------------
leeg StoreStructInFlashMemory (leeg)
{
}
//----------------------------------------
// ALGEMEEN Gegevens ophalen uit FlashStorage Voorkeuren.h
//----------------------------------------
leeg GetStructFromFlashMemory (leeg)
{
}
Haal
de commando's op uit de strings die zijn ingevoerd in de seriële monitor,
Bluetooth of de webpagina en voer het commando uit in een actie.
De menuletters worden bijna gebruikt, maar het
is mogelijk om onderscheid te maken tussen kleine en hoofdletters wanneer er
meer commando's nodig zijn.
(Daarom is er geen conversie naar Hoofdletters
of Kleine letters ).
//----------------------------------------
// KLOK-invoer van Bluetooth of serieel
//----------------------------------------
void ReworkInputString (String InputString )
{
....
schakelen ( InputString [0])
{
geval 'A':
geval 'a':
als ( InputString.length () >5 )
...
Lees
de LDR af en deel deze door 16 om de waarden van 0 - 4096 tussen 0 en 255 te
krijgen.
Niet alle borden hebben een 12-bits AD-converter
zoals.
//----------------------------------------
// LDR-waarden liggen tussen 0 en 255.
// ESP32 analoge leeswaarde ligt tussen 0 - 4096 -- is: 4096 / 8
//----------------------------------------
int ReadLDR (void) { return analogRead ( PhotoCellPin )/16;}
Regel de kleur en intensiteit van de LED op de
borden met één commando
//----------------------------------------
// KLOK Bedien de LED's op de ESP32
// 0 Laag is LED uit. Daarom is de waarde omgekeerd met de ! Not
//----------------------------------------
void SetStatusLED (bool Rood, bool Groen, bool Blauw)
{
Deze functie leest de analoge poort en berekent
een output-intensiteit naar een display of LED-strip. De metingen worden
gekwadrateerd om een hyperbolische curve te krijgen die beter lijkt op uw
oogcorrectie voor donker en licht dan een lineair bereik. Het werkt wonderwel
goed.
//----------------------------------------
// LED Dim de leds gemeten door de LDR en print waarden
// De LDR-waarden liggen tussen 0 en 255. De helderheid die naar de LED's wordt verzonden, ligt tussen 0 en 255
//----------------------------------------
ongeldige DimLeds (bool print) { ... }
Hier printen en kleuren we de karakters in het
display of lichten we op naar de juiste LED's in een String van RGB(W) LED's.
De #define voert deze functies uit met de juiste
parameters voor elke taal en print de teksten in de seriële verbindingen.
#define QUARTER ColorLeds ("kwartaal", 32, 38, LetterColor );
//---------------------------------------- /
/ LED Stel de kleur voor de LED in.
//----------------------------------------
void ColorLeds (char const * Texkst , int EersteLed , int LaatsteLed , uint32_t RGBColor )
{ }
Om alle tekens in een tekenreeks naar hoofdletters te converteren.
//----------------------------------------
// COMMON String boven
//----------------------------------------
leeg naar_boven (char* string)
Elk display of elke strip gebruikt andere commando's om de helderheid te regelen
Daarom is er voor alle LED/Display-opdrachten een functie
//-----------------------------------------------------------------
// LED Stel de helderheid van de achtergrondverlichting in
//------------------------------------------------------------------
leeg SetBrightnessLeds (byte Helder)
{
SetBackLight (Bright); // Stel de helderheid van LED's in
}
Een plek om alle LED's uit te schakelen of het display leeg te maken
//----------------------------------------
// LED Wis de tekenreeks
//----------------------------------------
leeg LedsUit (leeg)
Hier
zijn alle kleuren ingesteld voor de tekens.
De functie is vaak veranderd en de naam beschrijft het oorspronkelijke doel.
Voor achterwaartse compatibiliteit is de naam ongewijzigd.
//--------------------------------------------
// LED Stel tweede kleur
in //--------------------------------------------void SetSecondColour (void)
{ switch ( Mem.DisplayChoice ) { case DEFAULTCOLOUR: LetterColor = C_YELLOW;
...
SWversion () drukt het menu en de instellingen van verschillende voorkeuren af.
De functie is vaak veranderd en de naam beschrijft het oorspronkelijke doel.
Voor achterwaartse compatibiliteit is de naam ongewijzigd.
PrintLine () drukt de horizontale lijnen in het menu af.
//----------------------------------------
// KLOK Versie en voorkeuren info
//----------------------------------------
void SWversie (void)
{
#define FILENAAM ( strrchr (__FILE__, '\\') ? strrchr (__FILE__, '\\') + 1 : __FILE__)
PrintLijn (35);
voor (uint8_t i = 0; i < grootte van (menu) / grootte van (menu[0]); Tekstprintln (menu[ i ++]));
...
PrintLijn (35);
}
leegte PrintLine (byte lengte)
{...}
Displaytime () print de tijd naar de seriële monitor als tekst en controlewiich
taal wordt geprint.
Het stuurt ook de juiste volgorde van kleur en intensiteiten naar een RGB(W)
LED-strip.
//--------------------------------------------
// KLOK Zeg de tijd en laad de LED's// met de juiste kleur en intensiteit
//----------------------------------------
void Weergavetijd (void)
{
..
switch(Taal) // Druk alle tekens op de achtergrond af kleur , een soort ClearScreen
{
geval 0: strncpy ( Template,"HETVISOWASOVIJFQPRECIESZSTIENKPFKWARTSVOORS
OVERAHALFSMIDDERTVIJFATWEESOEENOXVIERELFQTIENK
TWAALFBHDRIE
CNEGENACHTFZESVZEVENOENVUUR",129);
ColorLeds (Sjabloon,0,127, Mem.DimmedLetter );
Nederlands(); Print_tijd (); pauze;
geval 1:
...
}
Een reeks functies om tijd op te halen en op te slaan. De NTP-tijdserver
plaatst de opgehaalde tijd in de standaard C-tijdstructuren.
//--------------------------- Tijdfuncties --------------------------
leeg GetTijd (byte printit )
leegte Print_RTC_tijd ( leeg )
leegte PrintNTP_tijd ( void )
leegte AfdrukkenUTCtijd ( void )
void Print_tijd (void)
ongeldige SetRTCTime (ongeldig)
Converteer een HEX-tekenreeks naar een ongetekend 32-bits geheel getal
//----------------------------------------
// KLOK Converteer Hex naar uint32
//----------------------------------------
uint32_t HexToDec (String hexString )
Functies om de klokken de tijd in vier talen te laten spreken
Er
is ook veel straattaal in talen.
'Half nine' betekent soms 8:30, maar kan ook 9:30 zijn. (-:
/-------------------------------------------
// KLOK Nederlandse
klokweergave//--------------------------------------------void
Nederlands(void){HET; // HET is altijd onswitch ( timeinfo.tm_min )
{case 0: IS; PRECIES; break;case 1: IS; break;case 2:case 3: WAS; break;case
4:case 5:...
void Engels(void)void Duits(void)void Frans(void)
De Bluetooth Low Energy Nordic nRF- functies.
Ze verschillen van het Texas-instrument CC2540/CC2541 dat wordt gebruikt in
andere chipsets zoals de HM-10, HM16, JDY-08 enzovoort.
Meer
hier op Instructables https://www.instructables.com/Communicate-Using-CC254x-or-NRF-BLE-With-Arduino-a/
/---------------------------
// BLE SendMessage door BLE Traag in pakketten van 20 tekens
//----------------------------
leegte SendMessageBLE ( std :: string Bericht)
/---------------------------
// BLE Start BLE- klassen
//----------------------------
klasse MyServerCallbacks : openbare BLEServerCallbacks
/---------------------------
// BLE Start BLE-service
//----------------------------
ongeldige StartBLEService (void)
/---------------------------
// BLE- controleBLE
//----------------------------
ongeldig CheckBLE (ongeldig)
Functies om een
WIFI-verbinding te starten en de webpagina te gebruiken
/----------------------------------------
// WIFI WEBPAGINA
//----------------------------------------
ongeldig StartWIFI_NTP (ongeldig)
/----------------------------------------
// WIFI WEBPAGINA
//----------------------------------------
lege webpagina (void)
/----------------------------------------
// WIFI WEBPAGE Niet gevonden bericht
//----------------------------------------
void niet gevonden ( AsyncWebServerRequest *request)
Tijdzones
Kopieer de tekst tussen
de aanhalingstekens en plak deze na het teken E en stuur deze
naar de klok
Bijvoorbeeld EGMT0.
Afrika/Abidjan,"GMT0"
Afrika/Accra,"GMT0"
Afrika/Addis_Ababa,"EAT-3"
Afrika/Algiers,"CET-1"
Afrika/Asmara,"EAT-3"
Afrika/Bamako,"GMT0"
Afrika/Bangui,"WAT-1"
Afrika/Banjul,"GMT0"
Afrika/Bissau,"GMT0"
Afrika/Blantyre,"CAT-2"
Afrika/Brazzaville,"WAT-1"
Afrika/Bujumbura,"CAT-2"
Afrika/Caïro,"EET-2"
Afrika/Casablanca,"<+01>-1"
Afrika/Ceuta,"CET-1CEST,M3.5.0,M10.5.0/3"
Afrika/Conakry,"GMT0"
Afrika/Dakar,"GMT0"
Afrika/Dar_es_Salaam,"EAT-3"
Afrika/Djibouti,"EAT-3"
Afrika/Douala,"WAT-1"
Afrika / El_Aaiun ,"<+01>-1"
Afrika /Freetown,"GMT0"
Afrika/Gaborone,"CAT-2"
Afrika/Harare,"CAT-2"
Afrika/Johannesburg,"SAST-2"
Afrika/Juba,"CAT-2"
Afrika/Kampala,"EAT-3"
Afrika/Khartoem,"CAT-2"
Afrika/Kigali,"CAT-2"
Afrika /Kinshasa,"WAT-1"
Afrika /Lagos,"WAT-1"
Afrika /Libreville,"WAT-1"
Afrika/Lomé,"GMT0"
Afrika/Luanda,"WAT-1"
Afrika/Lubumbashi,"CAT-2"
Afrika/Lusaka,"CAT-2"
Afrika/Malabo,"WAT-1"
Afrika/Maputo,"CAT-2"
Afrika/Maseru,"SAST-2"
Afrika/Mbabane,"SAST-2"
Afrika/Mogadishu,"EAT-3"
Afrika/Monrovia,"GMT0"
Afrika/Nairobi,"EAT-3"
Afrika/Ndjamena,"WAT-1"
Afrika/Niamey,"WAT-1"
Afrika/Nouakchott,"GMT0"
Afrika/Ouagadougou,"GMT0"
Afrika/Porto-Novo,"WAT-1"
Afrika/Sao_Tome,"GMT0"
Afrika/Tripoli,"EET-2"
Afrika/Tunis,"CET-1"
Afrika/Windhoek,"CAT-2"
Amerika/Adak,"HST10HDT,M3.2.0,M11.1.0"
Amerika/Anchorage,"AKST9AKDT,M3.2.0,M11.1.0"
Amerika/Anguilla,"AST4"
Amerika /Antigua,"AST4"
Amerika / Araguaina ,"<-03>3"
Amerika /Argentinië/ Buenos_Aires ,"<-03>3"
Amerika /Argentinië/Catamarca,"<-03>3"
Amerika /Argentinië/ Cordoba ,"<-03>3"
Amerika /Argentinië/Jujuy,"<-03>3"
Amerika /Argentinië/ La_Rioja , "<-03>3"
Amerika /Argentinië/Mendoza,"<-03>3"
Amerika /Argentinië/ Rio_Gallegos ,"<-03>3"
Amerika /Argentinië/Salta,"<-03>3"
Amerika /Argentinië/ San_Juan , "<-03>3"
Amerika /Argentinië/ San_Luis , "<-03>3"
Amerika /Argentinië/ Tucuman , "<-03>3"
Amerika /Argentinië/Ushuaia,"<-03>3"
Amerika /Aruba,"AST4"
Amerika / Asuncion , "<-04>4<-03>,M10.1.0/0,M3.4.0/0"
Amerika /Atikokan,"EST5"
Amerika / Bahia ,"<-03>3"
Amerika /Bahia_Banderas,"CST6CDT,M4.1.0,M10.5.0"
Amerika /Barbados,"AST4"
Amerika /Belem,"<-03>3"
Amerika /Belize,"CST6"
Amerika /Blanc-Sablon,"AST4"
Amerika / Boa_Vista ,"<-04>4"
Amerika / Bogota ,"<-05>5"
Amerika/Boise,"MST7MDT,M3.2.0,M11.1.0"
Amerika/Cambridge_Bay,"MST7MDT,M3.2.0,M11.1.0"
Amerika/ Campo_Grande , "<-04>4"
Amerika/Cancun,"EST5"
Amerika/Caracas,"<-04>4"
Amerika/Cayenne,"<-03>3"
Amerika/Cayman,"EST5"
Amerika/Chicago,"CST6CDT,M3.2.0,M11.1.0"
Amerika/Chihuahua,"MST7MDT,M4.1.0,M10.5.0"
Amerika/Costa_Rica,"CST6"
Amerika/Creston,"MST7"
Amerika/ Cuiaba ,"<-04>4"
Amerika/Curaçao,"AST4"
Amerika/Danmarkshavn,"GMT0"
Amerika/Dawson,"MST7"
Amerika/Dawson_Creek,"MST7"
Amerika/Denver,"MST7MDT,M3.2.0,M11.1.0"
Amerika/Detroit,"EST5EDT,M3.2.0,M11.1.0"
Amerika/Dominica,"AST4"
Amerika/Edmonton,"MST7MDT,M3.2.0,M11.1.0"
Amerika/ Eirunepe ,"<-05>5"
Amerika /El_Salvador,"CST6"
Amerika /Fortaleza,"<-03>3"
Amerika/Fort_Nelson,"MST7"
Amerika/Glace_Bay,"AST4ADT,M3.2.0,M11.1.0"
Amerika/Godthab,"<-03>3<-02>,M3.5.0/-2,M10.5.0/-1"
Amerika/Goose_Bay,"AST4ADT,M3.2.0,M11.1.0"
Amerika/Grand_Turk,"EST5EDT,M3.2.0,M11.1.0"
Amerika/Grenada,"AST4"
Amerika/Guadeloupe,"AST4"
Amerika/Guatemala,"CST6"
Amerika/Guayaquil,"<-05>5"
Amerika/Guyana,"<-04>4"
Amerika /Halifax,"AST4ADT,M3.2.0,M11.1.0"
Amerika /Havana,"CST5CDT,M3.2.0/0,M11.1.0/1"
Amerika /Hermosillo,"MST7"
Amerika/Indiana/Indianapolis,"EST5EDT,M3.2.0,M11.1.0"
Amerika/Indiana/Knox,"CST6CDT,M3.2.0,M11.1.0"
Amerika/Indiana/Marengo,"EST5EDT,M3.2.0,M11.1.0"
Amerika/Indiana/Petersburg,"EST5EDT,M3.2.0,M11.1.0"
Amerika/Indiana/Tell_City,"CST6CDT,M3.2.0,M11.1.0"
Amerika/Indiana/Vevay,"EST5EDT,M3.2.0,M11.1.0"
Amerika/Indiana/Vincennes,"EST5EDT,M3.2.0,M11.1.0"
Amerika/Indiana/Winamac,"EST5EDT,M3.2.0,M11.1.0"
Amerika/Inuvik,"MST7MDT,M3.2.0,M11.1.0"
Amerika/Iqaluit,"EST5EDT,M3.2.0,M11.1.0"
Amerika/Jamaica,"EST5"
Amerika/Juneau,"AKST9AKDT,M3.2.0,M11.1.0"
Amerika/Kentucky/Louisville,"EST5EDT,M3.2.0,M11.1.0"
Amerika/Kentucky/Monticello,"EST5EDT,M3.2.0,M11.1.0"
Amerika /Kralendijk,"AST4"
Amerika / La_Paz ,"<-04>4"
Amerika /Lima,"<-05>5"
Amerika /Los_Angeles,"PST8PDT,M3.2.0,M11.1.0"
Amerika /Lower_Princes,"AST4"
Amerika / Maceió ,"<-03>3"
Amerika /Managua,"CST6"
Amerika / Manaus ,"<-04>4"
Amerika /Marigot,"AST4"
Amerika /Martinique,"AST4"
Amerika /Matamoros,"CST6CDT,M3.2.0,M11.1.0"
Amerika/Mazatlan,"MST7MDT,M4.1.0,M10.5.0"
Amerika/Menominee,"CST6CDT,M3.2.0,M11.1.0"
Amerika/Merida,"CST6CDT,M4.1.0,M10.5.0"
Amerika/Metlakatla,"AKST9AKDT,M3.2.0,M11.1.0"
Amerika /Mexico_Stad,"CST6CDT,M4.1.0,M10.5.0"
Amerika / Miquelon , "<-03>3<-02>,M3.2.0,M11.1.0"
Amerika /Moncton,"AST4ADT,M3.2.0,M11.1.0"
Amerika /Monterrey,"CST6CDT,M4.1.0,M10.5.0"
Amerika /Montevideo,"<-03>3"
Amerika /Montreal,"EST5EDT,M3.2.0,M11.1.0"
Amerika /Montserrat,"AST4"
Amerika /Nassau,"EST5EDT,M3.2.0,M11.1.0"
Amerika /New_York,"EST5EDT,M3.2.0,M11.1.0"
Amerika /Nipigon,"EST5EDT,M3.2.0,M11.1.0"
Amerika/Nome,"AKST9AKDT,M3.2.0,M11.1.0"
Amerika/Noronha,"<-02>2"
Amerika/ Noord_Dakota /Beulah,"CST6CDT,M3.2.0,M11.1.0"
Amerika/ Noord_Dakota / Centrum,"CST6CDT,M3.2.0,M11.1.0"
Amerika/ Noord_Dakota / New_Salem,"CST6CDT,M3.2.0,M11.1.0"
Amerika/Nuuk,"<-03>3<-02>,M3.5.0/-2,M10.5.0/-1"
Amerika/Ojinaga,"MST7MDT,M3.2.0,M11.1.0"
Amerika/Panama,"EST5"
Amerika/Pangnirtung,"EST5EDT,M3.2.0,M11.1.0"
Amerika/Paramaribo,"<-03>3"
Amerika/Phoenix,"MST7"
Amerika/Port-au-Prince,"EST5EDT,M3.2.0,M11.1.0"
Amerika/Port_of_Spain,"AST4"
Amerika/ Porto_Velho , "<-04>4"
Amerika/Puerto_Rico,"AST4"
Amerika/ Punta_Arenas , "<-03>3"
Amerika/Regenachtige_rivier,"CST6CDT,M3.2.0,M11.1.0"
Amerika/Rankin_Inlet,"CST6CDT,M3.2.0,M11.1.0"
Amerika/Recife,"<-03>3"
Amerika/Regina,"CST6"
Amerika/Resolute,"CST6CDT,M3.2.0,M11.1.0"
Amerika/ Rio_Branco ,"<-05>5"
Amerika/Santarem,"<-03>3"
Amerika/Santiago,"<-04>4<-03>,M9.1.6/24,M4.1.6/24"
Amerika/Santo_Domingo,"AST4"
Amerika/ Sao_Paulo ,"<-03>3"
Amerika/ Scoresbysund ,"<-01>1<+00>,M3.5.0/0,M10.5.0/1"
Amerika/Sitka,"AKST9AKDT,M3.2.0,M11.1.0"
Amerika/St_Barthelemy,"AST4"
Amerika/St_Johns,"NST3:30NDT,M3.2.0,M11.1.0"
Amerika/St_Kitts,"AST4"
Amerika/St_Lucia,"AST4"
Amerika/St_Thomas,"AST4"
Amerika/St_Vincent,"AST4"
Amerika/Swift_Current,"CST6"
Amerika/Tegucigalpa,"CST6"
Amerika/Thule,"AST4ADT,M3.2.0,M11.1.0"
Amerika/Thunder_Bay,"EST5EDT,M3.2.0,M11.1.0"
Amerika /Tijuana,"PST8PDT,M3.2.0,M11.1.0"
Amerika/Toronto,"EST5EDT,M3.2.0,M11.1.0"
Amerika/Tortola,"AST4"
Amerika/Vancouver,"PST8PDT,M3.2.0,M11.1.0"
Amerika/Whitehorse,"MST7"
Amerika/Winnipeg,"CST6CDT,M3.2.0,M11.1.0"
Amerika/Yakutat,"AKST9AKDT,M3.2.0,M11.1.0"
Amerika/Yellowknife,"MST7MDT,M3.2.0,M11.1.0"
Antarctica/Casey,"<+11>-11"
Antarctica/Davis,"<+07>-7"
Antarctica/ DumontD'Urville ,"<+10>-10"
Antarctica/Macquarie,"AEST-10AEDT,M10.1.0,M4.1.0/3"
Antarctica/ Mawson ,"<+05>-5"
Antarctica/McMurdo,"NZST-12NZDT,M9.5.0,M4.1.0/3"
Antarctica /Palmer,"<-03>3"
Antarctica / Rothera ,"<-03>3"
Antarctica / Syowa ,"<+03>-3"
Antarctica / Trol ,"<+00>0<+02>-2,M3.5.0/1,M10.5.0/3"
Antarctica / Vostok ,"<+06>-6"
Arctisch /Longyearbyen,"CET-1CEST,M3.5.0,M10.5.0/3"
Azië/Aden,"<+03>-3"
Azië/Almaty,"<+06>-6"
Azië/Amman,"EET-2EEST,M2.5.4/24,M10.5.5/1"
Azië/Anadyr,"<+12>-12"
Azië/ Aqtau ,"<+05>-5"
Azië/ Aqtobe ,"<+05>-5"
Azië/ Ashgabat ,"<+05>-5"
Azië/Atyrau,"<+05>-5"
Azië/Bagdad,"<+03>-3"
Azië/Bahrein,"<+03>-3"
Azië/Bakoe,"<+04>-4"
Azië/Bangkok,"<+07>-7"
Azië/Barnaul,"<+07>-7"
Azië/Beiroet,"EET-2EEST,M3.5.0/0,M10.5.0/0"
Azië/Bisjkek,"<+06>-6"
Azië/Brunei,"<+08>-8"
Azië/ Tsjita ,"<+09>-9"
Azië/Tsjojbalsan,"<+08>-8"
Azië/Colombo,"<+0530>-5:30"
Azië/Damascus,"EET-2EEST,M3.5.5/0,M10.5.5/0"
Azië/Dhaka,"<+06>-6"
Azië/Dili,"<+09>-9"
Azië/Dubai,"<+04>-4"
Azië/ Dushanbe ,"<+05>-5"
Azië/Famagusta,"EET-2EEST,M3.5.0/3,M10.5.0/4"
Azië /Gaza,"EET-2EEST,M3.4.4/48,M10.5.5/1"
Azië/Hebron,"EET-2EEST,M3.4.4/48,M10.5.5/1"
Azië/ Ho_Chi_Minh ,"<+07>-7"
Azië/Hongkong,"HKT-8"
Azië/ Hovd ,"<+07>-7"
Azië/Irkoetsk,"<+08>-8"
Azië/Jakarta,"WIB-7"
Azië/Jayapura,"WIT-9"
Azië/Jeruzalem,"IST-2IDT,M3.4.4/26,M10.5.0"
Azië/Kaboel,"<+0430>-4:30"
Azië/ Kamtsjatka ,"<+12>-12"
Azië/Karachi,"PKT-5"
Azië/Kathmandu,"<+0545>-5:45"
Azië/ Khandyga ,"<+09>-9"
Azië/Kolkata,"IST-5:30"
Azië/ Krasnojarsk ,"<+07>-7"
Azië/ Kuala_Lumpur ,"<+08>-8"
Azië/ Kuching ,"<+08>-8"
Azië/Koeweit,"<+03>-3"
Azië/Macau,"CST-8"
Azië/ Magadan ,"<+11>-11"
Azië/Makassar,"WITA-8"
Azië/Manilla,"PST-8"
Azië/ Muscat ,"<+04>-4"
Azië/Nicosia,"EET-2EEST,M3.5.0/3,M10.5.0/4"
Azië/Novokoeznetsk,"<+07>-7"
Azië/Novosibirsk,"<+07>-7"
Azië/Omsk,"<+06>-6"
Azië/Oraal,"<+05>-5"
Azië/ Phnom_Penh ,"<+07>-7"
Azië/Pontianak,"WIB-7"
Azië/Pyongyang,"KST-9"
Azië/Qatar,"<+03>-3"
Azië/ Qyzylorda ,"<+05>-5"
Azië/ Riyad ,"<+03>-3"
Azië/ Sachalin ,"<+11>-11"
Azië/Samarkand,"<+05>-5"
Azië/Seoul,"KST-9"
Azië/Shanghai,"CST-8"
Azië/Singapore,"<+08>-8"
Azië/ Srednekolymsk , "<+11>-11"
Azië/Taipei,"CST-8"
Azië/ Tasjkent ,"<+05>-5"
Azië/Tbilisi,"<+04>-4"
Azië/ Teheran ,"<+0330>-3:30<+0430>,J79/24,J263/24"
Azië/Thimphu,"<+06>-6"
Azië/Tokio,"JST-9"
Azië/ Tomsk ,"<+07>-7"
Azië/Ulaanbaatar,"<+08>-8"
Azië/ Urumqi ,"<+06>-6"
Azië/ Oest-Nera ,"<+10>-10"
Azië/Vientiane,"<+07>-7"
Azië/Vladivostok,"<+10>-10"
Azië/ Jakoetsk ,"<+09>-9"
Azië/Yangon,"<+0630>-6:30"
Azië/Jekaterinenburg,"<+05>-5"
Azië/Jerevan,"<+04>-4"
Atlantische Oceaan/Azoren,"<-01>1<+00>,M3.5.0/0,M10.5.0/1"
Atlantische Oceaan/Bermuda,"AST4ADT,M3.2.0,M11.1.0"
Atlantische Oceaan/Canarische Oceaan,"WET0WEST,M3.5.0/1,M10.5.0"
Atlantische Oceaan/ Kaapverdië ,"<-01>1"
Atlantische Oceaan/Faeröer,"WET0WEST,M3.5.0/1,M10.5.0"
Atlantische Oceaan/Madeira,"WET0WEST,M3.5.0/1,M10.5.0"
Atlantische Oceaan/Reykjavik,"GMT0"
Atlantische Oceaan/ Zuid_Georgia ,"<-02>2"
Atlantische Oceaan/Stanley,"<-03>3"
Atlantische Oceaan/St_Helena,"GMT0"
Australië/Adelaide,"ACST-9:30ACDT,M10.1.0,M4.1.0/3"
Australië/Brisbane,"AEST-10"
Australië/Broken_Hill,"ACST-9:30ACDT,M10.1.0,M4.1.0/3"
Australië/Currie,"AEST-10AEDT,M10.1.0,M4.1.0/3"
Australië/Darwin,"ACST-9:30"
Australië/ Eucla ,"<+0845>-8:45"
Australië/Hobart,"AEST-10AEDT,M10.1.0,M4.1.0/3"
Australië/Lindeman,"AEST-10"
Australië/ Lord_Howe ,"<+1030>-10:30<+11>-11,M10.1.0,M4.1.0"
Australië/Melbourne,"AEST-10AEDT,M10.1.0,M4.1.0/3"
Australië/Perth,"AWST-8"
Australië/Sydney,"AEST-10AEDT,M10.1.0,M4.1.0/3"
Europa/Amsterdam,"CET-1CEST,M3.5.0,M10.5.0/3"
Europa/Andorra,"CET-1CEST,M3.5.0,M10.5.0/3"
Europa/Astrachan,"<+04>-4"
Europa/Athene,"EET-2EEST,M3.5.0/3,M10.5.0/4"
Europa/Belgrado,"CET-1CEST,M3.5.0,M10.5.0/3"
Europa/Berlijn,"CET-1CEST,M3.5.0,M10.5.0/3"
Europa/Bratislava,"CET-1CEST,M3.5.0,M10.5.0/3"
Europa/Brussel,"CET-1CEST,M3.5.0,M10.5.0/3"
Europa/Boekarest,"EET-2EEST,M3.5.0/3,M10.5.0/4"
Europa/Boedapest,"CET-1CEST,M3.5.0,M10.5.0/3"
Europa/Busingen,"CET-1CEST,M3.5.0,M10.5.0/3"
Europa/Chisinau,"EET-2EEST,M3.5.0,M10.5.0/3"
Europa/Kopenhagen,"CET-1CEST,M3.5.0,M10.5.0/3"
Europa/Dublin,"IST-1GMT0,M10.5.0,M3.5.0/1"
Europa/Gibraltar,"CET-1CEST,M3.5.0,M10.5.0/3"
Europa/Guernsey,"GMT0BST,M3.5.0/1,M10.5.0"
Europa/Helsinki,"EET-2EEST,M3.5.0/3,M10.5.0/4"
Europa/Isle_of_Man,"GMT0BST,M3.5.0/1,M10.5.0"
Europa/Istanboel,"<+03>-3"
Europa/Jersey,"GMT0BST,M3.5.0/1,M10.5.0"
Europa/Kaliningrad,"EET-2"
Europa/Kiev,"EET-2EEST,M3.5.0/3,M10.5.0/4"
Europa/Kirov,"<+03>-3"
Europa/Lissabon,"WET0WEST,M3.5.0/1,M10.5.0"
Europa/Ljubljana,"CET-1CEST,M3.5.0,M10.5.0/3"
Europa/Londen,"GMT0BST,M3.5.0/1,M10.5.0"
Europa/Luxemburg,"CET-1CEST,M3.5.0,M10.5.0/3"
Europa/Madrid,"CET-1CEST,M3.5.0,M10.5.0/3"
Europa/Malta,"CET-1CEST,M3.5.0,M10.5.0/3"
Europa /Mariehamn,"EET-2EEST,M3.5.0/3,M10.5.0/4"
Europa /Minsk,"<+03>-3"
Europa/Monaco,"CET-1CEST,M3.5.0,M10.5.0/3"
Europa/Moskou,"MSK-3"
Europa/Oslo,"CET-1CEST,M3.5.0,M10.5.0/3"
Europa/Parijs,"CET-1CEST,M3.5.0,M10.5.0/3"
Europa/Podgorica,"CET-1CEST,M3.5.0,M10.5.0/3"
Europa/Praag,"CET-1CEST,M3.5.0,M10.5.0/3"
Europa/Riga,"EET-2EEST,M3.5.0/3,M10.5.0/4"
Europa/Rome,"CET-1CEST,M3.5.0,M10.5.0/3"
Europa/Samara,"<+04>-4"
Europa/San_Marino,"CET-1CEST,M3.5.0,M10.5.0/3"
Europa/Sarajevo,"CET-1CEST,M3.5.0,M10.5.0/3"
Europa/Saratov,"<+04>-4"
Europa/Simferopol,"MSK-3"
Europa/Skopje,"CET-1CEST,M3.5.0,M10.5.0/3"
Europa/Sofia,"EET-2EEST,M3.5.0/3,M10.5.0/4"
Europa/Stockholm,"CET-1CEST,M3.5.0,M10.5.0/3"
Europa/Tallinn,"EET-2EEST,M3.5.0/3,M10.5.0/4"
Europa/Tirane,"CET-1CEST,M3.5.0,M10.5.0/3"
Europa/ Oeljanovsk ,"<+04>-4"
Europa/Oezjhorod,"EET-2EEST,M3.5.0/3,M10.5.0/4"
Europa/Vaduz,"CET-1CEST,M3.5.0,M10.5.0/3"
Europa/Vaticaan,"CET-1CEST,M3.5.0,M10.5.0/3"
Europa/Wenen,"CET-1CEST,M3.5.0,M10.5.0/3"
Europa/Vilnius,"EET-2EEST,M3.5.0/3,M10.5.0/4"
Europa/Volgograd,"<+03>-3"
Europa/Warschau,"CET-1CEST,M3.5.0,M10.5.0/3"
Europa/Zagreb,"CET-1CEST,M3.5.0,M10.5.0/3"
Europa/Zaporozhye,"EET-2EEST,M3.5.0/3,M10.5.0/4"
Europa/Zürich,"CET-1CEST,M3.5.0,M10.5.0/3"
Indiaas /Antananarivo,"EAT-3"
Indiaas /Chagos,"<+06>-6"
Indiaas /Kerstmis,"<+07>-7"
Indiaas /Cocos,"<+0630>-6:30"
Indiaas /Comoren,"EAT-3"
Indiaas /Kerguelen,"<+05>-5"
Indiaas /Mahe,"<+04>-4"
Indiaas /Malediven,"<+05>-5"
Indiaas /Mauritius,"<+04>-4"
Indiaas /Mayotte,"EAT-3"
Indiaas / Reünie ,"<+04>-4"
Stille Oceaan/Apia,"<+13>-13"
Stille Oceaan/Auckland,"NZST-12NZDT,M9.5.0,M4.1.0/3"
Stille Oceaan/Bougainville,"<+11>-11"
Stille Oceaan/Chatham,"<+1245>-12:45<+1345>,M9.5.0/2:45,M4.1.0/3:45"
Stille Oceaan/Chuuk,"<+10>-10"
Pacific/Pasen,"<-06>6<-05>,M9.1.6/22,M4.1.6/22"
Pacific/Efate,"<+11>-11"
Stille Oceaan/ Enderbury ,"<+13>-13"
Stille Oceaan/Fakaofo,"<+13>-13"
Stille Oceaan/Fiji,"<+12>-12<+13>,M11.2.0,M1.2.3/99"
Stille Oceaan/Funafuti,"<+12>-12"
Stille Oceaan/Galapagos,"<-06>6"
Pacific/Gambier,"<-09>9"
Stille Oceaan / Guadalcanal,"<+11>-11"
Stille Oceaan /Guam,"ChST-10"
Stille Oceaan / Honolulu,"HST10"
Stille Oceaan / Kiritimati , "<+14>-14"
Stille Oceaan / Kosrae ,"<+11>-11"
Stille Oceaan / Kwajalein , "<+12>-12"
Stille Oceaan / Majuro ,"<+12>-12"
Pacific /Marquesas,"<-0930>9:30"
Stille Oceaan /Midway,"SST11"
Stille Oceaan /Nauru,"<+12>-12"
Stille Oceaan /Niue,"<-11>11"
Stille Oceaan/Norfolk,"<+11>-11<+12>,M10.1.0,M4.1.0/3"
Stille Oceaan/ Noumea ,"<+11>-11"
Pacific/Pago_Pago,"SST11"
Stille Oceaan/Palau,"<+09>-9"
Stille Oceaan/Pitcairn,"<-08>8"
Stille Oceaan/Pohnpei,"<+11>-11"
Stille Oceaan/ Port_Moresby ,"<+10>-10"
Stille Oceaan/Rarotonga,"<-10>10"
Stille Oceaan/Saipan,"ChST-10"
Stille Oceaan/Tahiti,"<-10>10"
Stille Oceaan/Tarawa,"<+12>-12"
Stille Oceaan/Tongatapu,"<+13>-13"
Pacific/Kielzog,"<+12>-12"
Stille Oceaan/Wallis,"<+12>-12"
enz. /GMT,"GMT0"
enz. /GMT-0,"GMT0"
enz. /GMT-1,"<+01>-1"
enz. /GMT-2,"<+02>-2"
enz. /GMT-3,"<+03>-3"
enz. /GMT-4,"<+04>-4"
enz. /GMT-5,"<+05>-5"
enz. /GMT-6,"<+06>-6"
enz. /GMT-7,"<+07>-7"
enz. /GMT-8,"<+08>-8"
enz. /GMT-9,"<+09>-9"
enz. /GMT-10,"<+10>-10"
enz. /GMT-11,"<+11>-11"
enz. /GMT-12,"<+12>-12"
enz. /GMT-13,"<+13>-13"
enz. /GMT-14,"<+14>-14"
enz. /GMT0,"GMT0"
enz. /GMT+0,"GMT0"
enz. /GMT+1,"<-01>1"
enz. /GMT+2,"<-02>2"
enz. /GMT+3,"<-03>3"
enz. /GMT+4,"<-04>4"
enz. /GMT+5,"<-05>5"
enz. /GMT+6,"<-06>6"
enz. /GMT+7,"<-07>7"
enz. /GMT+8,"<-08>8"
enz. /GMT+9,"<-09>9"
enz. /GMT+10,"<-10>10"
enz. /GMT+11,"<-11>11"
enz. /GMT+12,"<-12>12"
enz. /UCT,"UTC0"
enz. /UTC,"UTC0"
enz. /Greenwich,"GMT0"
Etc /Universeel,"UTC0"
enz. /Zoeloe,"UTC0"