- Add support to
RP2040W
usingCYW43439 WiFi
witharduino-pico
core
- Use new Ethernet_Generic library as default for W5x00.
- Add support to
SPI1
forRP2040
usingEarle Philhower's arduino-pico
core - Add support to WIZNet W5100S, such as WIZnet Ethernet HAT and W5100S-EVB-Pico
- Update dependency on Timezone_Generic Library
- Update examples
- Fix bug in rtc_set_datetime(). Check Library converts datetime_t incorrectly, causing example to fail #4
- Fix platform in
library.json
- Fix examples' issue with Nano_RP2040_Connect
- Using TimeLib instead of Time to avoid case-insensitive issue with Windows and MacOS.
- Add simple examples with manual time input
- Fix bug in display alarm time due to buggy
datetime_to_str()
function
- Fix
library.properties
to addmbed_nano
architecture for NANO_RP2040_CONNECT using Arduino-mbed RP2040 core
- Initial coding to support RP2040-based boards such as NANO_RP2040_CONNECT, RASPBERRY_PI_PICO, ADAFRUIT_FEATHER_RP2040 and GENERIC_RP2040 using Arduino-mbed RP2040 core or Earle Philhower's arduino-pico core.
-
Arduino mbed_rp2040 core 2.2.0+
for Arduino RP2040-based boards, such as Arduino Nano RP2040 Connect, RASPBERRY_PI_PICO, etc.. -
Earle Philhower's arduino-pico core v1.8.8+
for RP2040-based boards such as RASPBERRY_PI_PICO, ADAFRUIT_FEATHER_RP2040 and GENERIC_RP2040, etc. -
Timezone_Generic library v1.5.0+
to use examples using Timezone. To install, check -
WiFiNINA_Generic library v1.8.11+
to use WiFiNINA modules/shields. To install. check if usingWiFiNINA_Generic
library for Nano-RP2040-Connect boards. -
Depending on which Ethernet card/module/shield you're using:
Ethernet library v2.0.0+
for W5100, W5200 and W5500.EthernetLarge library v2.0.0+
for W5100, W5200 and W5500.Ethernet2 library v1.0.4+
for W5500.Ethernet3 library v1.5.5+
for W5500/WIZ550io/WIZ850io/USR-ES1 with Wiznet W5500 chip.EthernetENC library v2.0.1+
for ENC28J60. . New and Better
The best and easiest way is to use Arduino Library Manager
. Search for RP2040_RTC, then select / install the latest version.
You can also use this link for more detailed instructions.
Another way to install is to:
- Navigate to RP2040_RTC page.
- Download the latest release
RP2040_RTC-main.zip
. - Extract the zip file to
RP2040_RTC-main
directory - Copy whole
RP2040_RTC-main
folder to Arduino libraries' directory such as~/Arduino/libraries/
.
- Install VS Code
- Install PlatformIO
- Install RP2040_RTC library or RP2040_RTC library by using Library Manager. Search for RP2040_RTC in Platform.io Author's Libraries
- Please visit documentation for the other options and examples at Project Configuration File
If your application requires 2K+ HTML page, the current Ethernet library
must be modified if you are using W5200/W5500 Ethernet shields. W5100 is not supported for 2K+ buffer. If you use boards requiring different CS/SS pin for W5x00 Ethernet shield, for example ESP32, ESP8266, nRF52, etc., you also have to modify the following libraries to be able to specify the CS/SS pin correctly.
To fix Ethernet library
, just copy these following files into the Ethernet library
directory to overwrite the old files:
To fix EthernetLarge library
, just copy these following files into the EthernetLarge library
directory to overwrite the old files:
To fix Ethernet2 library
, just copy these following files into the Ethernet2 library
directory to overwrite the old files:
To add UDP Multicast support, necessary for the UPnP_Generic library:
- To fix
Ethernet3 library
, just copy these following files into theEthernet3 library
directory to overwrite the old files:
To be able to compile and run on nRF52 boards with ENC28J60 using UIPEthernet library, you have to copy these following files into the UIPEthernet utility
directory to overwrite the old files:
From Raspberry Pi Pico C/C++ SDK
typedef void(* rtc_callback_t )(void);
typedef struct
{
int16_t year; ///< 0..4095
int8_t month; ///< 1..12, 1 is January
int8_t day; ///< 1..28,29,30,31 depending on month
int8_t dotw; ///< 0..6, 0 is Sunday
int8_t hour; ///< 0..23
int8_t min; ///< 0..59
int8_t sec; ///< 0..59
} datetime_t;
void rtc_init (void);
bool rtc_set_datetime (datetime_t *t);
bool rtc_get_datetime (datetime_t *t);
bool rtc_running (void);
void rtc_set_alarm (datetime_t *t, rtc_callback_t user_callback);
void rtc_enable_alarm (void);
void rtc_disable_alarm (void);
// Not very good to use
void datetime_to_str (char *buf, uint buf_size, const datetime_t *t);
Use one of these functions with interval in unsigned long microseconds
void rtc_disable_alarm (void)
Disable the RTC alarm (if active)
void rtc_enable_alarm (void)
Enable the RTC alarm (if inactive)
bool rtc_get_datetime (datetime_t *t)
Get the current time from the RTC.
Parameters
• t
: Pointer to a datetime_t structure to receive the current RTC time
Returns
• true
if datetime is valid, false
if the RTC is not running.
void rtc_init (void)
Initialise the RTC system.
bool rtc_running (void)
Is the RTC running?
void rtc_set_alarm (datetime_t *t, rtc_callback_t user_callback)
Set a time in the future for the RTC to call a user provided callback.
Parameters
• t
: Pointer to a datetime_t structure containing a time in the future to fire the alarm. Any values set to -1 will not be
matched on.
• user_callback
: pointer to a rtc_callback_t
to call when the alarm fires
bool rtc_set_datetime (datetime_t *t)
Set the RTC to the specified time.
Parameters
• t
: Pointer to a datetime_t structure contains time to set
Returns
• true
if set, false
if the passed in datetime was invalid.
void datetime_to_str (char *buf, uint buf_size, const datetime_t *t)
Convert a datetime_t structure to a string.
Parameters
• buf
: character buffer to accept generated string
• buf_size
: The size of the passed in buffer
• t
: The datetime to be converted
class TimeSpan;
class DateTime;
/** ISO 8601 Timestamp function */
enum timestampOpt
{
TIMESTAMP_FULL, // YYYY-MM-DDTHH:MM:SS
TIMESTAMP_TIME, // HH:MM:SS
TIMESTAMP_DATE // YYYY-MM-DD
};
class DateTime
{
DateTime (uint32_t t = SECONDS_FROM_1970_TO_2000);
DateTime (const uint16_t year, const uint8_t month, const uint8_t day, const uint8_t hour = 0, const uint8_t min = 0, const uint8_t sec = 0);
DateTime (const DateTime& copy);
DateTime (const tmElements_t& tm);
// To use with RP2040 datetime_t struct
DateTime (const datetime_t &tm);
tmElements_t get_tmElements_t();
void setFrom_tmElements_t(const tmElements_t& tm);
time_t get_time_t();
void setFrom_time_t(const time_t& timeInput);
uint16_t year() const;
uint8_t month() const;
uint8_t day() const;
uint8_t hour() const;
uint8_t minute() const;
uint8_t second() const;
uint16_t yearOffset() const;
uint8_t dayOfTheWeek() const;
/** 32-bit times as seconds since 1/1/2000 */
long secondstime() const;
/** 32-bit times as seconds since 1/1/1970 */
uint32_t unixtime() const;
/** ISO 8601 Timestamp function */
String timestamp(timestampOpt opt = TIMESTAMP_FULL)
}
- RP2040_RTC_Alarm
- RP2040_RTC_Alarm_Ethernet
- RP2040_RTC_Alarm_WiFiNINA
- RP2040_RTC_Time
- RP2040_RTC_Time_Ethernet
- RP2040_RTC_Time_WiFiNINA
Example RP2040_RTC_Time_WiFiNINA
1. File RP2040_RTC_Time_WiFiNINA.ino
// Important notes: Currently, RP2040-based boards RTC has no battery backup. So the time will be lost when power down
// Therefore, NTP client is necessary to get NTP time and update RTC.
#include "defines.h"
#include <Timezone_Generic.h> // https://github.com/khoih-prog/Timezone_Generic
//////////////////////////////////////////
// US Eastern Time Zone (New York, Detroit)
TimeChangeRule myDST = {"EDT", Second, Sun, Mar, 2, -240}; //Daylight time = UTC - 4 hours
TimeChangeRule mySTD = {"EST", First, Sun, Nov, 2, -300}; //Standard time = UTC - 5 hours
Timezone *myTZ;
TimeChangeRule *tcr; //pointer to the time change rule, use to get TZ abbrev
//////////////////////////////////////////
int status = WL_IDLE_STATUS; // the Wifi radio's status
char timeServer[] = "time.nist.gov"; // NTP server
unsigned int localPort = 2390; // local port to listen for UDP packets
const int NTP_PACKET_SIZE = 48; // NTP timestamp is in the first 48 bytes of the message
const int UDP_TIMEOUT = 2000; // timeout in milliseconds to wait for an UDP packet to arrive
byte packetBuffer[NTP_PACKET_SIZE]; // buffer to hold incoming and outgoing packets
// A UDP instance to let us send and receive packets over UDP
WiFiUDP Udp;
datetime_t currTime;
char datetime_buf[256];
// send an NTP request to the time server at the given address
void sendNTPpacket(char *ntpSrv)
{
// set all bytes in the buffer to 0
memset(packetBuffer, 0, NTP_PACKET_SIZE);
// Initialize values needed to form NTP request
// (see URL above for details on the packets)
packetBuffer[0] = 0b11100011; // LI, Version, Mode
packetBuffer[1] = 0; // Stratum, or type of clock
packetBuffer[2] = 6; // Polling Interval
packetBuffer[3] = 0xEC; // Peer Clock Precision
// 8 bytes of zero for Root Delay & Root Dispersion
packetBuffer[12] = 49;
packetBuffer[13] = 0x4E;
packetBuffer[14] = 49;
packetBuffer[15] = 52;
// all NTP fields have been given values, now
// you can send a packet requesting a timestamp:
Udp.beginPacket(ntpSrv, 123); //NTP requests are to port 123
Udp.write(packetBuffer, NTP_PACKET_SIZE);
Udp.endPacket();
}
void getNTPTime()
{
static bool gotCurrentTime = false;
// Just get the correct ime once
if (!gotCurrentTime)
{
sendNTPpacket(timeServer); // send an NTP packet to a time server
// wait to see if a reply is available
delay(1000);
if (Udp.parsePacket())
{
Serial.println(F("Packet received"));
// We've received a packet, read the data from it
Udp.read(packetBuffer, NTP_PACKET_SIZE); // read the packet into the buffer
//the timestamp starts at byte 40 of the received packet and is four bytes,
// or two words, long. First, esxtract the two words:
unsigned long highWord = word(packetBuffer[40], packetBuffer[41]);
unsigned long lowWord = word(packetBuffer[42], packetBuffer[43]);
// combine the four bytes (two words) into a long integer
// this is NTP time (seconds since Jan 1 1900):
unsigned long secsSince1900 = highWord << 16 | lowWord;
Serial.print(F("Seconds since Jan 1 1900 = "));
Serial.println(secsSince1900);
// now convert NTP time into everyday time:
Serial.print(F("Unix time = "));
// Unix time starts on Jan 1 1970. In seconds, that's 2208988800:
const unsigned long seventyYears = 2208988800UL;
// subtract seventy years:
unsigned long epoch = secsSince1900 - seventyYears;
// print Unix time:
Serial.println(epoch);
// Get the time_t from epoch
time_t epoch_t = epoch;
// set the system time to UTC
// warning: assumes that `compileTime()` returns US EDT
// adjust the following line accordingly if you're in another time zone
setTime(epoch_t);
// Update RTC
// Can use either one of these functions
// 1) DateTime(tmElements_t). Must create tmElements_t if not present
//tmElements_t tm;
//breakTime(epoch_t, tm);
//rtc_set_datetime( DateTime(tm) );
// 2) DateTime(year, month, day, hour, min, sec)
//rtc_set_datetime( DateTime(year(epoch_t), month(epoch_t), day(epoch_t), hour(epoch_t), minute(epoch_t), second(epoch_t) ) );
// 3) DateTime (time_t)
//rtc_set_datetime( DateTime(epoch_t) );
// 4) DateTime(unsigned long epoch). The best and easiest way
//rtc_set_datetime( DateTime((uint32_t) epoch) );
// New function in DateTime_Generic.h
while( ! rtc_set_datetime(DateTime((uint32_t) epoch)) )
{
Serial.println(F("rtc_set_datetime failed"));
sleep_ms(1);
}
// print the hour, minute and second:
Serial.print(F("The UTC time is ")); // UTC is the time at Greenwich Meridian (GMT)
Serial.print((epoch % 86400L) / 3600); // print the hour (86400 equals secs per day)
Serial.print(':');
if (((epoch % 3600) / 60) < 10)
{
// In the first 10 minutes of each hour, we'll want a leading '0'
Serial.print('0');
}
Serial.print((epoch % 3600) / 60); // print the minute (3600 equals secs per minute)
Serial.print(':');
if ((epoch % 60) < 10)
{
// In the first 10 seconds of each minute, we'll want a leading '0'
Serial.print('0');
}
Serial.println(epoch % 60); // print the second
gotCurrentTime = true;
}
else
{
// wait ten seconds before asking for the time again
delay(10000);
}
}
}
//////////////////////////////////////////
// format and print a time_t value, with a time zone appended.
void printDateTime(time_t t, const char *tz)
{
char buf[32];
char m[4]; // temporary storage for month string (DateStrings.cpp uses shared buffer)
strcpy(m, monthShortStr(month(t)));
sprintf(buf, "%.2d:%.2d:%.2d %s %.2d %s %d %s",
hour(t), minute(t), second(t), dayShortStr(weekday(t)), day(t), m, year(t), tz);
Serial.println(buf);
}
void setup()
{
Serial.begin(115200);
while (!Serial);
delay(200);
Serial.print(F("\nStart RP2040_RTC_Time_WiFiNINA on ")); Serial.print(BOARD_NAME);
Serial.print(F(" with ")); Serial.println(SHIELD_TYPE);
Serial.println(RP2040_RTC_VERSION);
Serial.println(TIMEZONE_GENERIC_VERSION);
// check for the presence of the shield
if (WiFi.status() == WL_NO_MODULE)
{
Serial.println(F("WiFi shield not present"));
// don't continue
while (true);
}
String fv = WiFi.firmwareVersion();
if (fv < WIFI_FIRMWARE_LATEST_VERSION)
{
Serial.println(F("Please upgrade the firmware"));
}
// attempt to connect to WiFi network
while ( status != WL_CONNECTED)
{
Serial.print(F("Connecting to WPA SSID: "));
Serial.println(ssid);
// Connect to WPA/WPA2 network
status = WiFi.begin(ssid, pass);
}
// you're connected now, so print out the data
Serial.print(F("You're connected to the network, IP = "));
Serial.println(WiFi.localIP());
myTZ = new Timezone(myDST, mySTD);
// Start the RTC
rtc_init();
Udp.begin(localPort);
}
void displayTime()
{
rtc_get_datetime(&currTime);
// Display time from RTC
DateTime now = DateTime(currTime);
time_t utc = now.get_time_t();
time_t local = myTZ->toLocal(utc, &tcr);
printDateTime(utc, "UTC");
printDateTime(local, tcr -> abbrev);
}
void displayRTCTime()
{
static unsigned long displayRTCTime_timeout = 0;
#define DISPLAY_RTC_INTERVAL 60000L
// Send status report every STATUS_REPORT_INTERVAL (60) seconds: we don't need to display frequently.
if ((millis() > displayRTCTime_timeout) || (displayRTCTime_timeout == 0))
{
Serial.println("============================");
displayTime();
displayRTCTime_timeout = millis() + DISPLAY_RTC_INTERVAL;
}
}
void loop()
{
// Get time from NTP once, then update RTC
// You certainly can make NTP check every hour/day to update RTC to have better accuracy
getNTPTime();
displayRTCTime();
}
2. File defines.h
#ifndef defines_h
#define defines_h
#define DEBUG_WIFI_WEBSERVER_PORT Serial
// Debug Level from 0 to 4
#define _WIFI_LOGLEVEL_ 3
#define _WIFININA_LOGLEVEL_ 3
#define USE_WIFI_NINA true
//#define USE_WIFI_NINA false
#if USE_WIFI_NINA
#warning Using WiFiNINA using WiFiNINA_Generic Library
#define SHIELD_TYPE "WiFiNINA using WiFiNINA_Generic Library"
#endif
#if ( defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_RASPBERRY_PI_PICO) || defined(ARDUINO_ADAFRUIT_FEATHER_RP2040) || defined(ARDUINO_GENERIC_RP2040) )
#if defined(WIFININA_USE_RP2040)
#undef WIFININA_USE_RP2040
#endif
#define WIFININA_USE_RP2040 true
#if defined(ARDUINO_ARCH_MBED)
#if defined(BOARD_NAME)
#undef BOARD_NAME
#endif
#if defined(ARDUINO_NANO_RP2040_CONNECT)
#define BOARD_NAME "MBED NANO_RP2040_CONNECT"
#elif defined(ARDUINO_RASPBERRY_PI_PICO)
#define BOARD_NAME "MBED RASPBERRY_PI_PICO"
#elif defined(ARDUINO_ADAFRUIT_FEATHER_RP2040)
#define BOARD_NAME "MBED DAFRUIT_FEATHER_RP2040"
#elif defined(ARDUINO_GENERIC_RP2040)
#define BOARD_NAME "MBED GENERIC_RP2040"
#else
#define BOARD_NAME "MBED Unknown RP2040"
#endif
#endif
#else
#error This code is designed to run on RP2040 platform! Please check your Tools->Board setting.
#endif
#ifndef BOARD_NAME
#if defined(ARDUINO_BOARD)
#define BOARD_NAME ARDUINO_BOARD
#else
#define BOARD_NAME BOARD_TYPE
#endif
#endif
#include <RP2040_RTC.h>
#include <WiFiNINA_Generic.h>
char ssid[] = "ssid"; // your network SSID (name)
char pass[] = "12345678"; // your network password
#endif //defines_h
The following is the sample terminal output when running example RP2040_RTC_Time_Ethernet on RASPBERRY_PI_PICO with W5x00 using EthernetLarge Library
Start RP2040_RTC_Time_Ethernet on RASPBERRY_PI_PICO with W5x00 using EthernetLarge Library
RP2040_RTC v1.0.4
Timezone_Generic v1.5.0
[EWS] =========== USE_ETHERNET_LARGE ===========
[EWS] Default SPI pinout:
[EWS] MOSI: 19
[EWS] MISO: 16
[EWS] SCK: 18
[EWS] SS: 17
[EWS] =========================
[EWS] Board : RASPBERRY_PI_PICO , setCsPin: 17
_pinCS = 0
W5100 init, using SS_PIN_DEFAULT = 10, new ss_pin = 10, W5100Class::ss_pin = 17
W5100::init: W5500, SSIZE =8192
=========================
Currently Used SPI pinout:
MOSI:19
MISO:16
SCK:18
SS:17
=========================
Using mac index = 10
You're connected to the network, IP = 192.168.2.94
Packet received
Seconds since Jan 1 1900 = 3832635641
Unix time = 1623646841
The UTC time is 5:00:41
============================
05:00:42 Mon 14 Jun 2021 UTC
01:00:42 Mon 14 Jun 2021 EDT
============================
05:01:42 Mon 14 Jun 2021 UTC
01:01:42 Mon 14 Jun 2021 EDT
The following is the sample terminal output when running example RP2040_RTC_Time_Ethernet on MBED RASPBERRY_PI_PICO with W5x00 using EthernetLarge Library
Start RP2040_RTC_Time_Ethernet on RASPBERRY_PI_PICO with W5x00 using EthernetLarge Library
RP2040_RTC v1.0.4
Timezone_Generic v1.5.0
[EWS] =========== USE_ETHERNET_LARGE ===========
[EWS] Default SPI pinout:
[EWS] MOSI: 3
[EWS] MISO: 4
[EWS] SCK: 2
[EWS] SS: 5
[EWS] =========================
[EWS] Board : MBED RASPBERRY_PI_PICO , setCsPin: 5
_pinCS = 0
W5100 init, using SS_PIN_DEFAULT = 5, new ss_pin = 10, W5100Class::ss_pin = 5
W5100::init: W5500, SSIZE =8192
=========================
Currently Used SPI pinout:
MOSI:3
MISO:4
SCK:2
SS:5
=========================
Using mac index = 19
You're connected to the network, IP = 192.168.2.104
Packet received
Seconds since Jan 1 1900 = 3832635800
Unix time = 1623647000
The UTC time is 5:03:20
============================
05:03:21 Mon 14 Jun 2021 UTC
01:03:21 Mon 14 Jun 2021 EDT
============================
05:04:21 Mon 14 Jun 2021 UTC
01:04:21 Mon 14 Jun 2021 EDT
3. RP2040_RTC_Time_WiFiNINA on MBED NANO_RP2040_CONNECT with WiFiNINA using WiFiNINA_Generic Library
The following is the sample terminal output when running example RP2040_RTC_Time_WiFiNINA on MBED NANO_RP2040_CONNECT with WiFiNINA using WiFiNINA_Generic Library
Start RP2040_RTC_Time_WiFiNINA on MBED NANO_RP2040_CONNECT with WiFiNINA using WiFiNINA_Generic Library
RP2040_RTC v1.0.4
Timezone_Generic v1.5.0
Connecting to WPA SSID: HueNet1
You're connected to the network, IP = 192.168.2.153
Packet received
Seconds since Jan 1 1900 = 3832636844
Unix time = 1623648044
The UTC time is 5:20:44
============================
05:20:45 Mon 14 Jun 2021 UTC
01:20:45 Mon 14 Jun 2021 EDT
============================
05:21:45 Mon 14 Jun 2021 UTC
01:21:45 Mon 14 Jun 2021 EDT
The following is the sample terminal output when running example RP2040_RTC_Alarm_Ethernet on RASPBERRY_PI_PICO with W5x00 using EthernetLarge Library
Start RP2040_RTC_Alarm_Ethernet on RASPBERRY_PI_PICO with W5x00 using EthernetLarge Library
RP2040_RTC v1.0.4
Timezone_Generic v1.5.0
[EWS] =========== USE_ETHERNET_LARGE ===========
[EWS] Default SPI pinout:
[EWS] MOSI: 19
[EWS] MISO: 16
[EWS] SCK: 18
[EWS] SS: 17
[EWS] =========================
[EWS] Board : RASPBERRY_PI_PICO , setCsPin: 17
_pinCS = 0
W5100 init, using SS_PIN_DEFAULT = 10, new ss_pin = 10, W5100Class::ss_pin = 17
W5100::init: W5500, SSIZE =8192
=========================
Currently Used SPI pinout:
MOSI:19
MISO:16
SCK:18
SS:17
=========================
Using mac index = 2
You're connected to the network, IP = 192.168.2.107
Packet received
Seconds since Jan 1 1900 = 3832883807
Unix time = 1623895007
The UTC time is 1:56:47
============================
01:56:48 Thu 17 Jun 2021 UTC
21:56:48 Wed 16 Jun 2021 EDT
Set Repeatitive Alarm @ alarmSeconds = 5
============================
Alarm @
01:57:05 Thu 17 Jun 2021 UTC
21:57:05 Wed 16 Jun 2021 EDT
============================
01:57:48 Thu 17 Jun 2021 UTC
21:57:48 Wed 16 Jun 2021 EDT
============================
Alarm @
01:58:05 Thu 17 Jun 2021 UTC
21:58:05 Wed 16 Jun 2021 EDT
============================
01:58:48 Thu 17 Jun 2021 UTC
21:58:48 Wed 16 Jun 2021 EDT
============================
Alarm @
01:59:05 Thu 17 Jun 2021 UTC
21:59:05 Wed 16 Jun 2021 EDT
Start RP2040_RTC_Alarm_Ethernet on RASPBERRY_PI_PICO with W5x00 using EthernetLarge Library
RP2040_RTC v1.0.4
Timezone_Generic v1.5.0
[EWS] =========== USE_ETHERNET_LARGE ===========
[EWS] Default SPI pinout:
[EWS] MOSI: 19
[EWS] MISO: 16
[EWS] SCK: 18
[EWS] SS: 17
[EWS] =========================
[EWS] Board : RASPBERRY_PI_PICO , setCsPin: 17
_pinCS = 0
W5100 init, using SS_PIN_DEFAULT = 10, new ss_pin = 10, W5100Class::ss_pin = 17
W5100::init: W5500, SSIZE =8192
=========================
Currently Used SPI pinout:
MOSI:19
MISO:16
SCK:18
SS:17
=========================
Using mac index = 17
You're connected to the network, IP = 192.168.2.101
Packet received
Seconds since Jan 1 1900 = 3832639454
Unix time = 1623650654
The UTC time is 6:04:14
============================
06:04:15 Mon 14 Jun 2021 UTC
02:04:15 Mon 14 Jun 2021 EDT
Set One-time Alarm @ alarmSeconds = 5
============================
Alarm @
06:05:05 Mon 14 Jun 2021 UTC
02:05:05 Mon 14 Jun 2021 EDT
============================
06:05:15 Mon 14 Jun 2021 UTC
02:05:15 Mon 14 Jun 2021 EDT
============================
06:06:15 Mon 14 Jun 2021 UTC
02:06:15 Mon 14 Jun 2021 EDT
The following is the sample terminal output when running example RP2040_RTC_Alarm_Ethernet on MBED RASPBERRY_PI_PICO with W5x00 using EthernetLarge Library
Start RP2040_RTC_Alarm_Ethernet on MBED RASPBERRY_PI_PICO with W5x00 using EthernetLarge Library
RP2040_RTC v1.0.4
Timezone_Generic v1.5.0
[EWS] =========== USE_ETHERNET_LARGE ===========
[EWS] Default SPI pinout:
[EWS] MOSI: 3
[EWS] MISO: 4
[EWS] SCK: 2
[EWS] SS: 5
[EWS] =========================
[EWS] Board : MBED RASPBERRY_PI_PICO , setCsPin: 5
_pinCS = 0
W5100 init, using SS_PIN_DEFAULT = 5, new ss_pin = 10, W5100Class::ss_pin = 5
W5100::init: W5500, SSIZE =8192
=========================
Currently Used SPI pinout:
MOSI:3
MISO:4
SCK:2
SS:5
=========================
Using mac index = 3
You're connected to the network, IP = 192.168.2.119
Packet received
Seconds since Jan 1 1900 = 3832642047
Unix time = 1623653247
The UTC time is 6:47:27
============================
06:47:28 Mon 14 Jun 2021 UTC
02:47:28 Mon 14 Jun 2021 EDT
Set Repeatitive Alarm @ alarmSeconds = 5
============================
Alarm @
06:48:05 Mon 14 Jun 2021 UTC
02:48:05 Mon 14 Jun 2021 EDT
============================
06:48:28 Mon 14 Jun 2021 UTC
02:48:28 Mon 14 Jun 2021 EDT
============================
Alarm @
06:49:05 Mon 14 Jun 2021 UTC
02:49:05 Mon 14 Jun 2021 EDT
============================
06:49:28 Mon 14 Jun 2021 UTC
02:49:28 Mon 14 Jun 2021 EDT
============================
Alarm @
06:50:05 Mon 14 Jun 2021 UTC
02:50:05 Mon 14 Jun 2021 EDT
============================
06:50:28 Mon 14 Jun 2021 UTC
02:50:28 Mon 14 Jun 2021 EDT
============================
Alarm @
06:51:05 Mon 14 Jun 2021 UTC
02:51:05 Mon 14 Jun 2021 EDT
Start RP2040_RTC_Alarm_Ethernet on RASPBERRY_PI_PICO with W5x00 using EthernetLarge Library
RP2040_RTC v1.0.4
Timezone_Generic v1.5.0
[EWS] =========== USE_ETHERNET_LARGE ===========
[EWS] Default SPI pinout:
[EWS] MOSI: 19
[EWS] MISO: 16
[EWS] SCK: 18
[EWS] SS: 17
[EWS] =========================
[EWS] Board : RASPBERRY_PI_PICO , setCsPin: 17
_pinCS = 0
W5100 init, using SS_PIN_DEFAULT = 10, new ss_pin = 10, W5100Class::ss_pin = 17
W5100::init: W5500, SSIZE =8192
=========================
Currently Used SPI pinout:
MOSI:19
MISO:16
SCK:18
SS:17
=========================
Using mac index = 17
You're connected to the network, IP = 192.168.2.101
Packet received
Seconds since Jan 1 1900 = 3832639454
Unix time = 1623650654
The UTC time is 6:04:14
============================
06:04:15 Mon 14 Jun 2021 UTC
02:04:15 Mon 14 Jun 2021 EDT
Set One-time Alarm @ alarmSeconds = 5
============================
Alarm @
06:05:05 Mon 14 Jun 2021 UTC
02:05:05 Mon 14 Jun 2021 EDT
============================
06:05:15 Mon 14 Jun 2021 UTC
02:05:15 Mon 14 Jun 2021 EDT
============================
06:06:15 Mon 14 Jun 2021 UTC
02:06:15 Mon 14 Jun 2021 EDT
6. RP2040_RTC_Alarm_WiFiNINA on MBED NANO_RP2040_CONNECT with WiFiNINA using WiFiNINA_Generic Library
The following is the sample terminal output when running example RP2040_RTC_Alarm_WiFiNINA on MBED NANO_RP2040_CONNECT with WiFiNINA using WiFiNINA_Generic Library
Start RP2040_RTC_Alarm_WiFiNINA on MBED NANO_RP2040_CONNECT with WiFiNINA using WiFiNINA_Generic Library
RP2040_RTC v1.0.4
Timezone_Generic v1.5.0
Connecting to WPA SSID: HueNet1
You're connected to the network, IP = 192.168.2.153
Packet received
Seconds since Jan 1 1900 = 3832884378
Unix time = 1623895578
The UTC time is 2:06:18
============================
02:06:19 Thu 17 Jun 2021 UTC
22:06:19 Wed 16 Jun 2021 EDT
Set Repeatitive Alarm @ alarmSeconds = 5
============================
Alarm @
02:07:05 Thu 17 Jun 2021 UTC
22:07:05 Wed 16 Jun 2021 EDT
============================
02:07:19 Thu 17 Jun 2021 UTC
22:07:19 Wed 16 Jun 2021 EDT
============================
Alarm @
02:08:05 Thu 17 Jun 2021 UTC
22:08:05 Wed 16 Jun 2021 EDT
============================
02:08:19 Thu 17 Jun 2021 UTC
22:08:19 Wed 16 Jun 2021 EDT
Start RP2040_RTC_Alarm_WiFiNINA on MBED NANO_RP2040_CONNECT with WiFiNINA using WiFiNINA_Generic Library
RP2040_RTC v1.0.4
Timezone_Generic v1.5.0
Please upgrade the firmware
Connecting to WPA SSID: HueNet1
You're connected to the network, IP = 192.168.2.153
Packet received
Seconds since Jan 1 1900 = 3832885266
Unix time = 1623896466
The UTC time is 2:21:06
============================
02:21:07 Thu 17 Jun 2021 UTC
22:21:07 Wed 16 Jun 2021 EDT
Set One-time Alarm @ alarmSeconds = 5
============================
Alarm @
02:22:05 Thu 17 Jun 2021 UTC
22:22:05 Wed 16 Jun 2021 EDT
============================
02:22:07 Thu 17 Jun 2021 UTC
22:22:07 Wed 16 Jun 2021 EDT
If you get compilation errors, more often than not, you may need to install a newer version of the core for Arduino boards.
Sometimes, the library will only work if you update the board core to the latest version because I am using newly added functions.
- Using TimeLib instead of Time to avoid case-insensitive issue with Windows and MacOS.
- Add simple examples with manual time input
- Fix bug in display alarm time due to buggy
datetime_to_str()
function
- Fix
library.properties
to addmbed_nano
architecture for NANO_RP2040_CONNECT using Arduino-mbed RP2040 core
- Initial coding to support RP2040-based boards such as NANO_RP2040_CONNECT, RASPBERRY_PI_PICO, ADAFRUIT_FEATHER_RP2040 and GENERIC_RP2040 using Arduino-mbed RP2040 core or Earle Philhower's arduino-pico core.
Submit issues to: RP2040_RTC issues
- Search for bug and improvement.
- Basic RTC-wrapper library for RP2040-based boards, such as NANO_RP2040_CONNECT, RASPBERRY_PI_PICO, ADAFRUIT_FEATHER_RP2040 and GENERIC_RP2040, using Arduino-mbed RP2040 core or Earle Philhower's arduino-pico core.
- Add Version String
- Add Table of Contents
- Add simple examples with manual time input
Many thanks for everyone for bug reporting, new feature suggesting, testing and contributing to the development of this library.
- Thanks to kenb2054 to report bugs in Libraries updated to support new RP2040-based boards (RASPBERRY_PI_PICO, etc.) #43 leading to v1.0.4
kenb2054 |
If you want to contribute to this project:
- Report bugs and errors
- Ask for enhancements
- Create issues and pull requests
- Tell other people about this library
- The library is licensed under MIT
Copyright 2021- Khoi Hoang