ESP-01 programma fout

Software vragen voor ESP chip familie
Gebruikers-avatar
Berichten: 111
Geregistreerd: 01 Jun 2016, 20:14

ESP-01 programma fout

Berichtdoor ruudhot » 28 Okt 2021, 17:06

Hallo allemaal,

Ik ben bezig met een ESP-01 printje, en wil daar een klok op zetten die Internet tijd aanhoudt.
Het programma compileert wel, maar de tijd wordt aangegeven in GMT.
Met andere woorden, de schakelaar geeft wel een goede waarde aan "utcOffsetInSeconden, maar die waarde wordt niet in de tijd meegenomen.
Ik ben niet erg ervaren in programmeren op de ESP / Arduino, maar misschien kan iemand aangeven in welke richting ik moet zoeken.
Ik ben namelijk al dagen bezig en heb van alles geprobeerd, maar niets lukt.

Er is een schakelaar opgenomen tussen de RX pin (3) van de ESP en massa.

Hier volgt de code:
Code: Alles selecteren
#include "NTPClient.h"
#include "ESP8266WiFi.h"
#include "WiFiUdp.h"
//#define void Time_zone

const char *ssid =     "<SSID>";
const char *password = "<PASSWORD>";
int dstVal = 0;
int dstPin = 3;  // DST switch connected to digital pin 3
int utcOffsetInSeconds = 0;
WiFiUDP ntpUDP;


void Time_zone()  // Time zone switch
{
  dstVal = digitalRead(dstPin);         // read the input pin
  { if (dstVal == 0)
    {
      utcOffsetInSeconds = 7200;  //GMT+2 (DST time.)
    }
    else
    {
      utcOffsetInSeconds = 3600;  //GMT+1
    }

  }
}

NTPClient timeClient(ntpUDP, "nl.pool.ntp.org", utcOffsetInSeconds);

void setup() {

  pinMode (3, FUNCTION_3);             // maakt van de RX pin, een GPIO pin
  pinMode (dstPin, INPUT_PULLUP);       // sets the digital pin 3 as input

  pinMode(0, OUTPUT);   // Relay
  Serial.begin(9600);
  WiFi.begin(ssid, password);
  Serial.println(" ");
  Serial.println(" ");
  Serial.print("Connecting to ");
  Serial.print(ssid);

  while ( WiFi.status() != WL_CONNECTED ) {
    Serial.print (".");
    delay ( 500 );
    digitalWrite(0, HIGH);
  }
  timeClient.begin();
  Serial.println("  WiFi connected.");
  Serial.println(" ");
  Serial.print("utcOffsetInSeconds = ");
  Serial.println(utcOffsetInSeconds);
  Serial.print("dstVal = ");
  Serial.println(dstVal);
  Serial.println(" ");
  Serial.println(" ");
}

void loop() {

  // Print de tijd op de seriele monitor
  Serial.print("  ");
  Serial.print(timeClient.getHours());
  Serial.print(":");
  if (timeClient.getMinutes() < 10) {
    Serial.print('0');
  }
  Serial.print(timeClient.getMinutes());
  Serial.print(":");
  if (timeClient.getSeconds() < 10) {
    Serial.print('0');
  }
  Serial.println(timeClient.getSeconds());
  delay(1000);
}

Advertisement

Gebruikers-avatar
Berichten: 241
Geregistreerd: 22 Jan 2013, 16:40

Re: ESP-01 programma fout

Berichtdoor zuid » 29 Okt 2021, 16:53

"utcOffsetInSeconds" wordt gewijzigd in de functie Time_zone()

Ik zie echter nergens dat deze functie wordt aangeroepen.
Wordt in de setup wel de juiste waarde geprint???
mvg Nico

Gebruikers-avatar
Berichten: 111
Geregistreerd: 01 Jun 2016, 20:14

Re: ESP-01 programma fout

Berichtdoor ruudhot » 29 Okt 2021, 20:16

Hoi Nico,

Heel erg bedankt voor je antwoord.

En Ja, de waarden worden wel goed geprint, maar alleen worden ze niet meegenomen in de tijd.
De dstVal is 1 of 0 afhankelijk van de schakelaar, en de utcOffsetInSeconds is 3600 of 7200.

De tijd die aangegeven wordt is echter altijd UTC.

Groet,
Ruud.

Gebruikers-avatar
Berichten: 241
Geregistreerd: 22 Jan 2013, 16:40

Re: ESP-01 programma fout

Berichtdoor zuid » 30 Okt 2021, 07:45

Ik weet niet of ik (Google) de juiste bibliotheek gevonden heb.
Als je het onderstaande in de setup erbij zet werkt het misschien.
Succes Nico

setTimeOffset(utcOffsetInSeconds)

Gebruikers-avatar
Berichten: 111
Geregistreerd: 01 Jun 2016, 20:14

Re: ESP-01 programma fout

Berichtdoor ruudhot » 30 Okt 2021, 11:43

Nee Nico,

Ik krijg dan deze foutmelding:

/home/acme/Arduino/TimeNTP_TEST2_TEST/TimeNTP_TEST2_TEST.ino: In function 'void setup()':
TimeNTP_TEST2_TEST:34:3: error: 'setTimeOffset' was not declared in this scope
34 | setTimeOffset(utcOffsetInSeconds)
| ^~~~~~~~~~~~~
exit status 1
'setTimeOffset' was not declared in this scope

Gebruikers-avatar
Berichten: 241
Geregistreerd: 22 Jan 2013, 16:40

Re: ESP-01 programma fout

Berichtdoor zuid » 01 Nov 2021, 12:52

Ik heb dus kenneijk niet de juiste bibliotheek gevonden.
Welke NTPClient bibliotheek gebruik je?
Als ik even tijd heb zal ik verder zoeken.
mvg Nico

Gebruikers-avatar
Berichten: 241
Geregistreerd: 22 Jan 2013, 16:40

Re: ESP-01 programma fout

Berichtdoor zuid » 01 Nov 2021, 15:25

[url]bron: https://werner.rothschopf.net/202011_ar ... ntp_en.htm[/url]

Via bovenstaande link kom je op een pagina met een voorbeeld voor een klok.
Dit voorbeeld werkt bij mij correct.
Het geeft de juiste datum tijd voor vandaag (wintertijd)
Het voorbeeld schakelt automatisch naar zomertijd.
DST en tijdzone worden met parameters gestuurd.

Misschien is dit iets waar je verder mee komt.
m.v.g. Nico

Berichten: 180
Geregistreerd: 26 Aug 2015, 11:57

Re: ESP-01 programma fout

Berichtdoor Frits1956 » 01 Nov 2021, 15:31

volgens mij heb je de schakelaar helemaal niet nodig en hoef je alleen deze regel ertussen te zetten.

// You can specify the time server pool and the offset, (in seconds)
// additionally you can specify the update interval (in milliseconds).
NTPClient timeClient(ntpUDP, "europe.pool.ntp.org", 3600);

Oh ja, en ik miste timeClient.update();

Zie ook onderwerp Wemos wifi

Code: Alles selecteren
#include "NTPClient.h"
#include "ESP8266WiFi.h"
#include "WiFiUdp.h"
const char *ssid =     "<SSID>";
const char *password = "<PASSWORD>";

/*int dstVal = 0;
int dstPin = 3;  // DST switch connected to digital pin 3
int utcOffsetInSeconds = 0;
*/
WiFiUDP ntpUDP;




NTPClient timeClient(ntpUDP,3600);

void setup() {

  Serial.begin(9600);
  WiFi.begin(ssid, password);
  Serial.println(" ");
  Serial.println(" ");
  Serial.print("Connecting to ");
  Serial.print(ssid);

  while ( WiFi.status() != WL_CONNECTED ) {
    Serial.print (".");
    delay ( 500 );
    digitalWrite(0, HIGH);
  }
  timeClient.begin();
  Serial.println("  WiFi connected.");
  Serial.println(" ");
  Serial.print("utcOffsetInSeconds = ");
  Serial.println(utcOffsetInSeconds);
  Serial.print("dstVal = ");
  Serial.println(dstVal);
  Serial.println(" ");
  Serial.println(" ");
}

void loop() {
timeClient.update();
  // Print de tijd op de seriele monitor
  Serial.println("  ");
  Serial.print(timeClient.getHours());
  Serial.print(":");
  if (timeClient.getMinutes() < 10)
    Serial.print('0');
  Serial.print(timeClient.getMinutes());
  Serial.print(":");
  if (timeClient.getSeconds() < 10) {
    Serial.print('0');
  }
  Serial.print(timeClient.getSeconds());
  delay(1000);

Gebruikers-avatar
Berichten: 111
Geregistreerd: 01 Jun 2016, 20:14

Re: ESP-01 programma fout

Berichtdoor ruudhot » 01 Nov 2021, 16:16

Nico en Frits,

Bedankt voor jullie berichten.
Ik ga er mee aan de slag, en denk hier zeker verder mee te kunnen.

Ik laat jullie de uitkomst weten.

Nogmaals dank,
Ruud.

Gebruikers-avatar
Berichten: 111
Geregistreerd: 01 Jun 2016, 20:14

Re: ESP-01 programma fout

Berichtdoor ruudhot » 01 Nov 2021, 18:05

Ik ben eerst even met het voorstel van Nico bezig geweest, en dat werkt in 1 woord GEWELDIG!

Hier kan ik mee verder.
Ik vraag me alleen af, hoe je kunt zien hoe vaak de tijdserver aangeroepen wordt, want ik heb begrepen dat het niet netjes is om TE vaak de tijd op te vragen.

En @Frits: Volgens mij heb je de code al aangepast, maar moet er dan nog wel "europe.pool.ntp.org" tussen in regel "NTPClient timeClient(ntpUDP,3600);"???

Ik zag namelijk al wel dat je de regel "timeClient.update();" toegevoegd had.

Beiden in ieder geval BEDANKT (in capitals).

Volgende

Terug naar ESP Software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 9 gasten