Add Controller Time example sketch
parent
642c24a5e7
commit
d514d6a049
@ -0,0 +1,149 @@
|
||||
// FARM DATA RELAY SYSTEM
|
||||
//
|
||||
// Example sketch to provide several examples to obtain and use time
|
||||
// from a gateway
|
||||
// This sketch retrieves the time from a nearby FDRS gateway using ESP-NOW.
|
||||
// After retrieving the time, at 60 second intervals, it prints out each field of the time
|
||||
// in two different methods.
|
||||
//
|
||||
// Developed by Timm Bogner (timmbogner@gmail.com) in Urbana, Illinois, USA
|
||||
// FDRS Timekeeping was developed and contributed by Jeff Lehman (aviateur17)
|
||||
//
|
||||
//
|
||||
|
||||
#include "fdrs_node_config.h"
|
||||
#include <fdrs_node.h>
|
||||
|
||||
unsigned long printJob = 0;
|
||||
struct tm timeData;
|
||||
char strftime_buf[80];
|
||||
|
||||
static char dayNames[][12] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" };
|
||||
static char monthNames[][12] = { "January", "February", "March", "April", "May", "June",
|
||||
"July", "August", "September", "October", "November", "December" };
|
||||
bool isPM = false;
|
||||
|
||||
void setup() {
|
||||
DBG("FDRS ControllerTime example.");
|
||||
|
||||
beginFDRS();
|
||||
|
||||
// Request that the gateway send us the current time
|
||||
DBG("Requesting time from gateway");
|
||||
reqTimeFDRS();
|
||||
delay(1000);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
loopFDRS();
|
||||
|
||||
// If time is valid, prints time out every 60 seconds (60,000 ms)
|
||||
if(millis() - printJob > (1000 * 60) || printJob == 0)
|
||||
{
|
||||
// Check to see that we have a valid time
|
||||
if(validTime())
|
||||
{
|
||||
// time is valid
|
||||
|
||||
DBG("");
|
||||
DBG("Configured Standard Time offset from UTC: " + String(STD_OFFSET) + " hours.");
|
||||
DBG("Configured Daylight Savings Time offset from UTC: " + String(DST_OFFSET) + " hours.");
|
||||
|
||||
// Option 1 - use strftime function
|
||||
// Local time
|
||||
// time is stored in UTC so add offset to convert to local time
|
||||
time_t localt = time(NULL) + (isDST?dstOffset:stdOffset);
|
||||
// convert from time_t format to struct tm format
|
||||
localtime_r(&localt, &timeData);
|
||||
// Store the date/time in a character array
|
||||
// https://www.tutorialspoint.com/c_standard_library/c_function_strftime.htm
|
||||
strftime(strftime_buf, sizeof(strftime_buf), "%c", &timeData);
|
||||
// Print out the character array to display the local date/time
|
||||
DBG("---- strftime() function output ----");
|
||||
DBG("Local date/time is: " + String(strftime_buf) + (isDST?" DST":" STD"));
|
||||
|
||||
strftime(strftime_buf, sizeof(strftime_buf), "%Y", &timeData);
|
||||
DBG("Year: " + String(strftime_buf)); // %Y - year in 4 digits
|
||||
strftime(strftime_buf, sizeof(strftime_buf), "%m", &timeData);
|
||||
DBG("Month: " + String(strftime_buf)); // %m - Month as a decimal number
|
||||
strftime(strftime_buf, sizeof(strftime_buf), "%B", &timeData);
|
||||
DBG("Month Name: " + String(strftime_buf)); // %B - Month Full Name
|
||||
strftime(strftime_buf, sizeof(strftime_buf), "%d", &timeData);
|
||||
DBG("Day of Month: " + String(strftime_buf)); // %d - day of the month (1 - 31)
|
||||
strftime(strftime_buf, sizeof(strftime_buf), "%w", &timeData);
|
||||
DBG("Day of Week: " + String(strftime_buf)); // %w - Days since Sunday = 0
|
||||
strftime(strftime_buf, sizeof(strftime_buf), "%A", &timeData);
|
||||
DBG("Day Name: " + String(strftime_buf)); // %A - Full weekday name
|
||||
strftime(strftime_buf, sizeof(strftime_buf), "%j", &timeData);
|
||||
DBG("Day of Year: " + String(strftime_buf)); // %j - days since January 1st = 0
|
||||
strftime(strftime_buf, sizeof(strftime_buf), "%H", &timeData);
|
||||
DBG("Hour (24 hour format): " + String(strftime_buf)); // %H - Hours since mindnight in 24 hour format
|
||||
strftime(strftime_buf, sizeof(strftime_buf), "%I", &timeData);
|
||||
DBG("Hour (12 hour format): " + String(strftime_buf)); // %I - Hours since mindnight in 12 hour format
|
||||
strftime(strftime_buf, sizeof(strftime_buf), "%M", &timeData);
|
||||
DBG("Minute: " + String(strftime_buf)); // %M - Minutes
|
||||
strftime(strftime_buf, sizeof(strftime_buf), "%S", &timeData);
|
||||
DBG("Second: " + String(strftime_buf)); // %S - Seconds
|
||||
strftime(strftime_buf, sizeof(strftime_buf), "%p", &timeData);
|
||||
DBG("AM/PM: " + String(strftime_buf)); // %p - AM/PM
|
||||
DBG("Daylight Savings: " + String((isDST ? " DST (yes)" : " STD (no)")));
|
||||
strftime(strftime_buf, sizeof(strftime_buf), "%A, %m/%d/%Y %H:%M:%S %p", &timeData);
|
||||
DBG("US format: " + String(strftime_buf) + String((isDST ? " DST" : " STD"))); // Day, MM/DD/YYYY HH:MM:SS AM/PM DST/STD
|
||||
strftime(strftime_buf, sizeof(strftime_buf), "%A, %d/%m/%Y %I:%M:%S", &timeData);
|
||||
DBG("European format: " + String(strftime_buf) + String((isDST ? " DST" : " STD"))); // Day, DD/MM/YYYY HH:MM:SS DST/STD
|
||||
|
||||
|
||||
|
||||
// Option 2 - read directly from the tm struct
|
||||
// Local time
|
||||
// time is stored in UTC so add offset to convert to local time
|
||||
localt = time(NULL) + (isDST?dstOffset:stdOffset);
|
||||
// convert from time_t format to struct tm format
|
||||
localtime_r(&localt, &timeData);
|
||||
// Struct tm provides the date/time elements split out
|
||||
// https://www.tutorialspoint.com/c_standard_library/c_function_strftime.htm
|
||||
DBG("---- struct tm output ----");
|
||||
DBG("Year: " + String(timeData.tm_year + 1900)); // tm_year returns number of years since 1900 so we add 1900
|
||||
DBG("Month: " + String(timeData.tm_mon + 1)); // Jan = 0 so add 1 to (1 - 12)
|
||||
DBG("Month Name: " + String(monthNames[timeData.tm_mon]));
|
||||
DBG("Day of Month: " + String(timeData.tm_mday)); // day of the month (1 - 31)
|
||||
DBG("Day of Week: " + String(timeData.tm_wday)); // Days since Sunday = 0
|
||||
DBG("Day Name: " + String(dayNames[timeData.tm_wday]));
|
||||
DBG("Day of Year: " + String(timeData.tm_yday + 1)); // days since January 1st = 0
|
||||
DBG("Hour (24 hour format): " + String(timeData.tm_hour)); // Hours since mindnight in 24 hour format
|
||||
if(timeData.tm_hour >= 12 && timeData.tm_hour <= 23)
|
||||
{
|
||||
isPM = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
isPM = false;
|
||||
}
|
||||
if(timeData.tm_hour >= 13)
|
||||
{
|
||||
timeData.tm_hour = timeData.tm_hour - 12;
|
||||
}
|
||||
DBG("Hour (12 hour format): " + String(timeData.tm_hour) + " " + String((isPM ? "PM" : "AM"))); // Hours since mindnight in 12 hour format
|
||||
DBG("Minute: " + String(timeData.tm_min));
|
||||
DBG("Second: " + String(timeData.tm_sec));
|
||||
DBG("Daylight Savings: " + String((isDST ? " DST (yes)" : " STD (no)")));
|
||||
DBG("Local Time: " + String(dayNames[timeData.tm_wday]) + ", " + String(timeData.tm_mon + 1) + "/" + String(timeData.tm_mday) + "/"
|
||||
+ String(timeData.tm_year + 1900) + " " + String(timeData.tm_hour) + ":" + String(timeData.tm_min) + ":" + String(timeData.tm_sec)
|
||||
+ String((isPM ? " PM" : " AM")) + String((isDST ? " DST" : " STD")));
|
||||
DBG("");
|
||||
DBG("");
|
||||
|
||||
printJob = millis();
|
||||
}
|
||||
else // Time is not valid. Request time from the gateway
|
||||
{
|
||||
DBG("Time not valid.");
|
||||
DBG("Check gateway is running and has valid time.");
|
||||
DBG("");
|
||||
reqTimeFDRS();
|
||||
|
||||
// Try again in 20 seconds
|
||||
printJob = printJob + 20000;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,35 @@
|
||||
// FARM DATA RELAY SYSTEM
|
||||
//
|
||||
// Sensor Configuration
|
||||
|
||||
#include <fdrs_globals.h>
|
||||
|
||||
#define READING_ID 1 //Unique ID for this sensor
|
||||
#define GTWY_MAC 0x01 //Address of the nearest gateway
|
||||
|
||||
#define USE_ESPNOW
|
||||
//#define USE_LORA
|
||||
#define DEEP_SLEEP
|
||||
//#define POWER_CTRL 14
|
||||
#define FDRS_DEBUG
|
||||
//#define DBG_LEVEL 0 // 0 for minimal messaging, 1 for troubleshooting, 2 for development
|
||||
|
||||
// LoRa Configuration
|
||||
#define RADIOLIB_MODULE SX1276
|
||||
#define LORA_SS 18
|
||||
#define LORA_RST 14
|
||||
#define LORA_DIO 26
|
||||
#define LORA_BUSY 33
|
||||
//#define USE_SX126X
|
||||
|
||||
#define LORA_TXPWR 17 // LoRa TX power in dBm (: +2dBm - +17dBm (for SX1276-7) +20dBm (for SX1278))
|
||||
#define LORA_ACK // Request LoRa acknowledgment.
|
||||
|
||||
//#define USE_LR // Use ESP-NOW LR mode (ESP32 only)
|
||||
|
||||
// Time settings
|
||||
#define USDST
|
||||
// #define EUDST
|
||||
#define STD_OFFSET (-6) // Local standard time offset in hours from UTC - if unsure, check https://time.is
|
||||
#define DST_OFFSET (STD_OFFSET + 1) // Local savings time offset in hours from UTC - if unsure, check https://time.is
|
||||
#define TIME_PRINTTIME 99 // Time, in minutes, between printing local time to debug
|
Loading…
Reference in New Issue