WiFi PRO 22: Set time from WiFi
This example shows how to get time settings from internet and set up time and date into Waspmote's RTC.
Required Materials
1 x Waspmote 1 x Battery 1 x WiFi PRO Module
Notes
- The battery has to be connected. - This example can be executed in Waspmote v15
Code
/*
* ------ WIFI Example --------
*
* Explanation: This example shows how to get time settings from internet
* and set up time and date into Waspmote's RTC
*
* Copyright (C) 2016 Libelium Comunicaciones Distribuidas S.L.
* http://www.libelium.com
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*
* Version: 3.0
* Design: David Gascon
* Implementation: Yuri Carmona
*/
// Put your libraries here (#include ...)
#include <WaspWIFI_PRO.h>
// choose socket (SELECT USER'S SOCKET)
///////////////////////////////////////
uint8_t socket = SOCKET0;
///////////////////////////////////////
// choose NTP server settings
///////////////////////////////////////
char SERVER1[] = "time.nist.gov";
char SERVER2[] = "wwv.nist.gov";
///////////////////////////////////////
// Define Time Zone from -12 to 12 (i.e. GMT+2)
///////////////////////////////////////
uint8_t time_zone = 2;
///////////////////////////////////////
uint8_t error;
uint8_t status;
unsigned long previous;
void setup()
{
USB.ON();
USB.println(F("Start program"));
USB.println(F("***************************************"));
USB.println(F("Once the module is set with one or more"));
USB.println(F("AP settings, it attempts to join the AP"));
USB.println(F("automatically once it is powered on"));
USB.println(F("Refer to example 'WIFI_PRO_01' to configure"));
USB.println(F("the WiFi module with proper settings"));
USB.println(F("***************************************"));
//////////////////////////////////////////////////
// 1. Switch ON
//////////////////////////////////////////////////
error = WIFI_PRO.ON(socket);
if (error == 0)
{
USB.println(F("1. WiFi switched ON"));
}
else
{
USB.println(F("1. WiFi did not initialize correctly"));
}
//////////////////////////////////////////////////
// 2. Check if connected
//////////////////////////////////////////////////
// get actual time
previous = millis();
// check connectivity
status = WIFI_PRO.isConnected();
// Check if module is connected
if (status == true)
{
USB.print(F("2. WiFi is connected OK"));
USB.print(F(" Time(ms):"));
USB.println(millis()-previous);
}
else
{
USB.print(F("2. WiFi is connected ERROR"));
USB.print(F(" Time(ms):"));
USB.println(millis()-previous);
}
//////////////////////////////////////////////////
// 3. NTP server
//////////////////////////////////////////////////
// Check if module is connected
if (status == true)
{
// 3.1. Set NTP Server (option1)
error = WIFI_PRO.setTimeServer(1, SERVER1);
// check response
if (error == 0)
{
USB.println(F("3.1. Time Server1 set OK"));
}
else
{
USB.println(F("3.1. Error calling 'setTimeServer' function"));
WIFI_PRO.printErrorCode();
status = false;
}
// 3.2. Set NTP Server (option2)
error = WIFI_PRO.setTimeServer(2, SERVER2);
// check response
if (error == 0)
{
USB.println(F("3.2. Time Server2 set OK"));
}
else
{
USB.println(F("3.2. Error calling 'setTimeServer' function"));
WIFI_PRO.printErrorCode();
status = false;
}
// 3.3. Enabled/Disable Time Sync
if (status == true)
{
error = WIFI_PRO.timeActivationFlag(true);
// check response
if( error == 0 )
{
USB.println(F("3.3. Network Time-of-Day Activation Flag set OK"));
}
else
{
USB.println(F("3.3. Error calling 'timeActivationFlag' function"));
WIFI_PRO.printErrorCode();
status = false;
}
}
// 3.4. set GMT
if (status == true)
{
error = WIFI_PRO.setGMT(time_zone);
// check response
if (error == 0)
{
USB.print(F("3.4. GMT set OK to "));
USB.println(time_zone, DEC);
}
else
{
USB.println(F("3.4. Error calling 'setGMT' function"));
WIFI_PRO.printErrorCode();
}
}
}
//////////////////////////////////////////////////
// 4. Switch OFF
//////////////////////////////////////////////////
USB.println(F("4. WiFi switched OFF\n"));
WIFI_PRO.OFF(socket);
USB.println(F("-----------------------------------------------------------"));
USB.println(F("Once the module has the correct Time Server Settings"));
USB.println(F("it is always possible to request for the Time and"));
USB.println(F("synchronize it to the Waspmote's RTC"));
USB.println(F("-----------------------------------------------------------\n"));
delay(5000);
// Init RTC
RTC.ON();
USB.print(F("Current RTC settings:"));
USB.println(RTC.getTime());
}
void loop()
{
//////////////////////////////////////////////////
// 1. Switch ON
//////////////////////////////////////////////////
error = WIFI_PRO.ON(socket);
if (error == 0)
{
USB.println(F("1. WiFi switched ON"));
}
else
{
USB.println(F("1. WiFi did not initialize correctly"));
}
//////////////////////////////////////////////////
// 2. Check if connected
//////////////////////////////////////////////////
// get actual time
previous = millis();
// check connectivity
status = WIFI_PRO.isConnected();
// Check if module is connected
if (status == true)
{
USB.print(F("2. WiFi is connected OK"));
USB.print(F(" Time(ms):"));
USB.println(millis()-previous);
}
else
{
USB.print(F("2. WiFi is connected ERROR"));
USB.print(F(" Time(ms):"));
USB.println(millis()-previous);
}
//////////////////////////////////////////////////
// 3. Set RTC Time from WiFi module settings
//////////////////////////////////////////////////
// Check if module is connected
if (status == true)
{
// 3.1. Open FTP session
error = WIFI_PRO.setTimeFromWIFI();
// check response
if (error == 0)
{
USB.print(F("3. Set RTC time OK. Time:"));
USB.println(RTC.getTime());
}
else
{
USB.println(F("3. Error calling 'setTimeFromWIFI' function"));
WIFI_PRO.printErrorCode();
status = false;
}
}
//////////////////////////////////////////////////
// 4. Switch OFF
//////////////////////////////////////////////////
WIFI_PRO.OFF(socket);
USB.println(F("4. WiFi switched OFF\n\n"));
USB.println(F("Wait 10 seconds...\n"));
delay(10000);
}
Output
H#
Start program
***************************************
Once the module is set with one or more
AP settings, it attempts to join the AP
automatically once it is powered on
Refer to example 'WIFI_PRO_01' to configure
the WiFi module with proper settings
***************************************
1. WiFi switched ON
2. WiFi is connected OK Time(ms):125
3.1. Time Server1 set OK
3.2. Time Server2 set OK
3.3. Network Time-of-Day Activation Flag set OK
3.4. GMT set OK to 2
4. WiFi switched OFF
-----------------------------------------------------------
Once the module has the correct Time Server Settings
it is always possible to request for the Time and
synchronize it to the Waspmote's RTC
-----------------------------------------------------------
Current RTC settings:Mon, 16/07/11, 12:51:51
1. WiFi switched ON
2. WiFi is connected OK Time(ms):3404
3. Set RTC time OK. Time:Mon, 16/07/11, 12:51:58
4. WiFi switched OFF
Wait 10 seconds...
1. WiFi switched ON
2. WiFi is connected OK Time(ms):3959
3. Set RTC time OK. Time:Mon, 16/07/11, 12:52:21
4. WiFi switched OFF
Wait 10 seconds...
Last updated