Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add getTime function to WiFiS3 library #271

Closed
wants to merge 5 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
123 changes: 123 additions & 0 deletions libraries/WiFiS3/examples/WiFiTime/WiFiTime.ino
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
/*
Get the time in seconds since January 1st, 1970.

The time is retrieved with the WiFi module by fetching the NTP time from an NTP server.

It requires the latest USB Wifi bridge firmware level and WiFiS3 library.

This example is written for a network using WPA encryption. For
WEP or WPA, change the WiFi.begin() call accordingly.

created 21 february 2024

*/

#include "WiFiS3.h"
#include "arduino_secrets.h"
#include "RTC.h"

///////please enter your sensitive data in the Secret tab/arduino_secrets.h
char ssid[] = SECRET_SSID; // your network SSID (name)
char pass[] = SECRET_PASS; // your network password (use for WPA, or use as key for WEP)
int keyIndex = 0; // your network key index number (needed only for WEP)

/// set offsets to GMT from local
#define GMTOffset_hour 1 // # hours difference to GMT
#define DayLightSaving 0 // 1 = daylight saving is active

int status = WL_IDLE_STATUS;

/* -------------------------------------------------------------------------- */
void setup() {
/* -------------------------------------------------------------------------- */

//Initialize serial and wait for port to open:
Serial.begin(115200);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}

RTC.begin();

// check for the WiFi module:
if (WiFi.status() == WL_NO_MODULE) {
Serial.println("Communication with WiFi module failed. freeze !");
// don't continue
while (true);
}

String fv = WiFi.firmwareVersion();
if (fv < WIFI_FIRMWARE_LATEST_VERSION) {
Serial.println("Please upgrade to the WiFi USB bridge firmware. freeze !");
// don't continue
while (true);
}

// attempt to connect to WiFi network:
while (status != WL_CONNECTED) {
Serial.print("Attempting to connect to SSID: ");
Serial.println(ssid);
// Connect to WPA/WPA2 network. Change this line if using open or WEP network:
status = WiFi.begin(ssid, pass);

// wait 10 seconds for connection:
delay(10000);
}

printWifiStatus();
}

/* -------------------------------------------------------------------------- */
void loop() {
/* -------------------------------------------------------------------------- */

unsigned long EpochTime;

EpochTime = WiFi.getTime();

if (EpochTime > 0) {
UpdateRTC(EpochTime);
}
else {
Serial.println("Error during reading epoch time.");
}

Serial.println();
delay(10000);
}

/* -------------------------------------------------------------------------- */
void UpdateRTC(time_t EpochTime) {
/* -------------------------------------------------------------------------- */

auto timeZoneOffsetHours = GMTOffset_hour + DayLightSaving;
auto unixTime = EpochTime + (timeZoneOffsetHours * 3600);
Serial.print("Unix time = ");
Serial.println(unixTime);
RTCTime timeToSet = RTCTime(unixTime);
RTC.setTime(timeToSet);

// Retrieve the date and time from the RTC and print them
RTCTime currentTime;
RTC.getTime(currentTime);
Serial.println("The RTC was just set to: " + String(currentTime));
}

/* -------------------------------------------------------------------------- */
void printWifiStatus() {
/* -------------------------------------------------------------------------- */
// print the SSID of the network you're attached to:
Serial.print("SSID: ");
Serial.println(WiFi.SSID());

// print your board's IP address:
IPAddress ip = WiFi.localIP();
Serial.print("IP Address: ");
Serial.println(ip);

// print the received signal strength:
long rssi = WiFi.RSSI();
Serial.print("signal strength (RSSI):");
Serial.print(rssi);
Serial.println(" dBm");
}
2 changes: 2 additions & 0 deletions libraries/WiFiS3/examples/WiFiTime/arduino_secrets.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
#define SECRET_SSID ""
#define SECRET_PASS ""
14 changes: 11 additions & 3 deletions libraries/WiFiS3/src/WiFi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -547,11 +547,19 @@ int CWifi::hostByName(const char* aHostname, IPAddress& aResult) {
uint8_t CWifi::reasonCode() {
return 0;
}

/* ----------------------------------------------*/
unsigned long CWifi::getTime() {
return 0;
}
/* ----------------------------------------------*/
modem.begin();
string res = "";
unsigned long tt = 0;

if(modem.write(string(PROMPT(_GETTIME)),res,"%s\r\n", CMD_WRITE(_GETTIME))) {
tt = strtol(res.c_str(), NULL, 10);
}

return tt;
}


void CWifi::setTimeout(unsigned long timeout) {
Expand Down
Loading