v0.9.250
This commit is contained in:
14
README.md
14
README.md
@@ -79,6 +79,9 @@ https://aliexpress.com/item/4000699838567.html
|
|||||||
https://www.aliexpress.com/item/33009687492.html
|
https://www.aliexpress.com/item/33009687492.html
|
||||||
- Touchscreen https://aliexpress.com/item/33048191074.html
|
- Touchscreen https://aliexpress.com/item/33048191074.html
|
||||||
|
|
||||||
|
##### RTC
|
||||||
|
- DS1307 or DS3231 https://aliexpress.com/item/4001130860369.html
|
||||||
|
|
||||||
---
|
---
|
||||||
## Connection tables
|
## Connection tables
|
||||||
##### Use [this tool](https://e2002.github.io/docs/myoptions-generator.html) to build your own connection table and myoptions.h file.
|
##### Use [this tool](https://e2002.github.io/docs/myoptions-generator.html) to build your own connection table and myoptions.h file.
|
||||||
@@ -89,7 +92,7 @@ https://e2002.github.io/docs/myoptions-generator.html
|
|||||||
---
|
---
|
||||||
## Dependencies
|
## Dependencies
|
||||||
#### Libraries:
|
#### Libraries:
|
||||||
**Library Manager**: Adafruit_GFX, Adafruit_ST7735\*, Adafruit_SSD1306\*, Adafruit_PCD8544\*, Adafruit_SH110X\*, Adafruit_SSD1327\*, Adafruit_ILI9341\*, Adafruit_SSD1305\*, TFT_22_ILI9225\* (\* depending on display model), OneButton, IRremoteESP8266, XPT2046_Touchscreen \
|
**Library Manager**: Adafruit_GFX, Adafruit_ST7735\*, Adafruit_SSD1306\*, Adafruit_PCD8544\*, Adafruit_SH110X\*, Adafruit_SSD1327\*, Adafruit_ILI9341\*, Adafruit_SSD1305\*, TFT_22_ILI9225\* (\* depending on display model), OneButton, IRremoteESP8266, XPT2046_Touchscreen, RTCLib \
|
||||||
**Github**: ~~[ESPAsyncWebServer](https://github.com/me-no-dev/ESPAsyncWebServer), [AsyncTCP](https://github.com/me-no-dev/AsyncTCP), [async-mqtt-client](https://github.com/marvinroger/async-mqtt-client) (if you need MQTT support)~~ <<< **starting with version 0.8.920, these libraries have been moved into the project, and there is no need to install them additionally.**
|
**Github**: ~~[ESPAsyncWebServer](https://github.com/me-no-dev/ESPAsyncWebServer), [AsyncTCP](https://github.com/me-no-dev/AsyncTCP), [async-mqtt-client](https://github.com/marvinroger/async-mqtt-client) (if you need MQTT support)~~ <<< **starting with version 0.8.920, these libraries have been moved into the project, and there is no need to install them additionally.**
|
||||||
|
|
||||||
#### Tool:
|
#### Tool:
|
||||||
@@ -226,6 +229,15 @@ Work is in progress...
|
|||||||
|
|
||||||
---
|
---
|
||||||
## Version history
|
## Version history
|
||||||
|
#### v0.9.250
|
||||||
|
- added support for DS1307 or DS3231 RTC module (you need to install the RTCLib library in the library manager)
|
||||||
|
- setup
|
||||||
|
```
|
||||||
|
#define RTC_MODULE DS3231 /* or DS1307 */
|
||||||
|
#define RTC_SDA <pin>
|
||||||
|
#define RTC_SCL <pin>
|
||||||
|
```
|
||||||
|
|
||||||
#### v0.9.242
|
#### v0.9.242
|
||||||
- fixed a hang bug when scrolling through an SD playlist with an encoder in configurations with VS1053B
|
- fixed a hang bug when scrolling through an SD playlist with an encoder in configurations with VS1053B
|
||||||
- fixed a hang bug when quickly switching SD / WEB modes from the WEB interface in configurations with VS1053B
|
- fixed a hang bug when quickly switching SD / WEB modes from the WEB interface in configurations with VS1053B
|
||||||
|
|||||||
@@ -34,6 +34,17 @@ bool Config::_isFSempty() {
|
|||||||
void Config::init() {
|
void Config::init() {
|
||||||
EEPROM.begin(EEPROM_SIZE);
|
EEPROM.begin(EEPROM_SIZE);
|
||||||
sdog.begin();
|
sdog.begin();
|
||||||
|
bootInfo();
|
||||||
|
#if RTCSUPPORTED
|
||||||
|
_rtcFound = false;
|
||||||
|
BOOTLOG("RTC begin(SDA=%d,SCL=%d)", RTC_SDA, RTC_SCL);
|
||||||
|
if(rtc.init()){
|
||||||
|
BOOTLOG("done");
|
||||||
|
_rtcFound = true;
|
||||||
|
}else{
|
||||||
|
BOOTLOG("[ERROR] - Couldn't find RTC");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
emptyFS = true;
|
emptyFS = true;
|
||||||
#if IR_PIN!=255
|
#if IR_PIN!=255
|
||||||
irindex=-1;
|
irindex=-1;
|
||||||
@@ -69,7 +80,7 @@ void Config::init() {
|
|||||||
backupSDStation = 0;
|
backupSDStation = 0;
|
||||||
//checkSD();
|
//checkSD();
|
||||||
_bootDone=false;
|
_bootDone=false;
|
||||||
bootInfo();
|
//bootInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_SD
|
#ifdef USE_SD
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
#include <SPIFFS.h>
|
#include <SPIFFS.h>
|
||||||
#include "SD.h"
|
#include "SD.h"
|
||||||
#include "options.h"
|
#include "options.h"
|
||||||
|
#include "rtcsupport.h"
|
||||||
|
|
||||||
#define EEPROM_SIZE 768
|
#define EEPROM_SIZE 768
|
||||||
#define EEPROM_START 500
|
#define EEPROM_START 500
|
||||||
@@ -220,11 +221,17 @@ class Config {
|
|||||||
void clearCardStatus() { if(_cardStatus!=CS_NONE) _cardStatus=CS_NONE; }
|
void clearCardStatus() { if(_cardStatus!=CS_NONE) _cardStatus=CS_NONE; }
|
||||||
bool spiffsCleanup();
|
bool spiffsCleanup();
|
||||||
FS* SDPLFS(){ return _SDplaylistFS; }
|
FS* SDPLFS(){ return _SDplaylistFS; }
|
||||||
|
#if RTCSUPPORTED
|
||||||
|
bool isRTCFound(){ return _rtcFound; };
|
||||||
|
#endif
|
||||||
private:
|
private:
|
||||||
template <class T> int eepromWrite(int ee, const T& value);
|
template <class T> int eepromWrite(int ee, const T& value);
|
||||||
template <class T> int eepromRead(int ee, T& value);
|
template <class T> int eepromRead(int ee, T& value);
|
||||||
cardStatus_e _cardStatus;
|
cardStatus_e _cardStatus;
|
||||||
bool _bootDone;
|
bool _bootDone;
|
||||||
|
#if RTCSUPPORTED
|
||||||
|
bool _rtcFound;
|
||||||
|
#endif
|
||||||
FS* _SDplaylistFS;
|
FS* _SDplaylistFS;
|
||||||
void setDefaults();
|
void setDefaults();
|
||||||
Ticker _sleepTimer;
|
Ticker _sleepTimer;
|
||||||
|
|||||||
@@ -18,8 +18,13 @@ void ticks() {
|
|||||||
|
|
||||||
static const uint16_t weatherSyncInterval=1800;
|
static const uint16_t weatherSyncInterval=1800;
|
||||||
//static const uint16_t weatherSyncIntervalFail=10;
|
//static const uint16_t weatherSyncIntervalFail=10;
|
||||||
|
#if RTCSUPPORTED
|
||||||
|
static const uint32_t timeSyncInterval=86400;
|
||||||
|
static uint32_t timeSyncTicks = 0;
|
||||||
|
#else
|
||||||
static const uint16_t timeSyncInterval=3600;
|
static const uint16_t timeSyncInterval=3600;
|
||||||
static uint16_t timeSyncTicks = 0;
|
static uint16_t timeSyncTicks = 0;
|
||||||
|
#endif
|
||||||
static uint16_t weatherSyncTicks = 0;
|
static uint16_t weatherSyncTicks = 0;
|
||||||
static bool divrssi;
|
static bool divrssi;
|
||||||
timeSyncTicks++;
|
timeSyncTicks++;
|
||||||
@@ -36,12 +41,17 @@ void ticks() {
|
|||||||
weatherSyncTicks=0;
|
weatherSyncTicks=0;
|
||||||
network.forceWeather = true;
|
network.forceWeather = true;
|
||||||
}
|
}
|
||||||
|
#if RTCSUPPORTED
|
||||||
if(network.timeinfo.tm_year>100) {
|
rtc.getTime(&network.timeinfo);
|
||||||
|
mktime(&network.timeinfo);
|
||||||
|
display.putRequest(CLOCK);
|
||||||
|
#else
|
||||||
|
if(network.timeinfo.tm_year>100 || network.status == SDREADY) {
|
||||||
network.timeinfo.tm_sec++;
|
network.timeinfo.tm_sec++;
|
||||||
mktime(&network.timeinfo);
|
mktime(&network.timeinfo);
|
||||||
display.putRequest(CLOCK);
|
display.putRequest(CLOCK);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
if(player.isRunning() && config.getMode()==PM_SDCARD) netserver.requestOnChange(SDPOS, 0);
|
if(player.isRunning() && config.getMode()==PM_SDCARD) netserver.requestOnChange(SDPOS, 0);
|
||||||
if(divrssi) {
|
if(divrssi) {
|
||||||
netserver.setRSSI(WiFi.RSSI());
|
netserver.setRSSI(WiFi.RSSI());
|
||||||
@@ -137,6 +147,11 @@ void Network::begin() {
|
|||||||
}else if(strlen(config.store.sntp1)>0){
|
}else if(strlen(config.store.sntp1)>0){
|
||||||
configTime(config.store.tzHour * 3600 + config.store.tzMin * 60, config.getTimezoneOffset(), config.store.sntp1);
|
configTime(config.store.tzHour * 3600 + config.store.tzMin * 60, config.getTimezoneOffset(), config.store.sntp1);
|
||||||
}
|
}
|
||||||
|
#if RTCSUPPORTED
|
||||||
|
rtc.getTime(&network.timeinfo);
|
||||||
|
mktime(&network.timeinfo);
|
||||||
|
display.putRequest(CLOCK);
|
||||||
|
#endif
|
||||||
ctimer.attach(1, ticks);
|
ctimer.attach(1, ticks);
|
||||||
if (network_on_connect) network_on_connect();
|
if (network_on_connect) network_on_connect();
|
||||||
}
|
}
|
||||||
@@ -187,6 +202,9 @@ void doSync( void * pvParameters ) {
|
|||||||
mktime(&network.timeinfo);
|
mktime(&network.timeinfo);
|
||||||
display.putRequest(CLOCK);
|
display.putRequest(CLOCK);
|
||||||
network.requestTimeSync(true);
|
network.requestTimeSync(true);
|
||||||
|
#if RTCSUPPORTED
|
||||||
|
if (config.isRTCFound()) rtc.setTime(&network.timeinfo);
|
||||||
|
#endif
|
||||||
}else{
|
}else{
|
||||||
if(tsFailCnt<4){
|
if(tsFailCnt<4){
|
||||||
network.forceTimeSync = true;
|
network.forceTimeSync = true;
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
#include <Ticker.h>
|
#include <Ticker.h>
|
||||||
#include "time.h"
|
#include "time.h"
|
||||||
#include "WiFi.h"
|
#include "WiFi.h"
|
||||||
|
#include "rtcsupport.h"
|
||||||
|
|
||||||
#define apSsid "yoRadioAP"
|
#define apSsid "yoRadioAP"
|
||||||
#define apPassword "12345987"
|
#define apPassword "12345987"
|
||||||
@@ -10,7 +11,7 @@
|
|||||||
#define TSYNC_DELAY 3600000 // 1000*60*60 = 1 hour
|
#define TSYNC_DELAY 3600000 // 1000*60*60 = 1 hour
|
||||||
#define WEATHER_STRING_L 254
|
#define WEATHER_STRING_L 254
|
||||||
|
|
||||||
enum n_Status_e { CONNECTED, SOFT_AP, FAILED };
|
enum n_Status_e { CONNECTED, SOFT_AP, FAILED, SDREADY };
|
||||||
|
|
||||||
class Network {
|
class Network {
|
||||||
public:
|
public:
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#ifndef options_h
|
#ifndef options_h
|
||||||
#define options_h
|
#define options_h
|
||||||
|
|
||||||
#define YOVERSION "0.9.242"
|
#define YOVERSION "0.9.250"
|
||||||
|
|
||||||
/*******************************************************
|
/*******************************************************
|
||||||
DO NOT EDIT THIS FILE.
|
DO NOT EDIT THIS FILE.
|
||||||
@@ -121,9 +121,6 @@ The connection tables are located here https://github.com/e2002/yoradio#connecti
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* SDCARD */
|
/* SDCARD */
|
||||||
#ifndef SDC_SPI
|
|
||||||
#define SDC_SPI 18, 19, 23 // SDCARD SPI pins (SCK, MISO, MOSI)
|
|
||||||
#endif
|
|
||||||
#ifndef SDC_CS
|
#ifndef SDC_CS
|
||||||
#define SDC_CS 255 // SDCARD CS pin
|
#define SDC_CS 255 // SDCARD CS pin
|
||||||
#endif
|
#endif
|
||||||
@@ -245,6 +242,21 @@ The connection tables are located here https://github.com/e2002/yoradio#connecti
|
|||||||
#define LCD_D7 255
|
#define LCD_D7 255
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* RTC */
|
||||||
|
#define RTC_MODULE_UNDEFINED 0
|
||||||
|
#define DS3231 1
|
||||||
|
#define DS1307 2
|
||||||
|
|
||||||
|
#ifndef RTC_MODULE
|
||||||
|
#define RTC_MODULE RTC_MODULE_UNDEFINED /* DS3231 or DS1307 */
|
||||||
|
#endif
|
||||||
|
#ifndef RTC_SDA
|
||||||
|
#define RTC_SDA 255
|
||||||
|
#endif
|
||||||
|
#ifndef RTC_SCL
|
||||||
|
#define RTC_SCL 255
|
||||||
|
#endif
|
||||||
|
|
||||||
/* ESP DEVBOARD */
|
/* ESP DEVBOARD */
|
||||||
#ifndef LED_BUILTIN
|
#ifndef LED_BUILTIN
|
||||||
#define LED_BUILTIN 255
|
#define LED_BUILTIN 255
|
||||||
|
|||||||
43
yoRadio/src/core/rtcsupport.cpp
Normal file
43
yoRadio/src/core/rtcsupport.cpp
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
#include "rtcsupport.h"
|
||||||
|
|
||||||
|
#if RTCSUPPORTED
|
||||||
|
#include <Wire.h>
|
||||||
|
|
||||||
|
TwoWire RTCWire = TwoWire(0);
|
||||||
|
|
||||||
|
RTC rtc;
|
||||||
|
|
||||||
|
bool RTC::init(){
|
||||||
|
RTCWire.begin(RTC_SDA, RTC_SCL);
|
||||||
|
return begin(&RTCWire);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool RTC::isRunning(){
|
||||||
|
#if RTC_MODULE==DS3231
|
||||||
|
return !lostPower();
|
||||||
|
#elif RTC_MODULE==DS1307
|
||||||
|
return isrunning();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void RTC::getTime(struct tm* tinfo){
|
||||||
|
if(isRunning()){
|
||||||
|
DateTime nowTm = now();
|
||||||
|
tinfo->tm_sec = nowTm.second();
|
||||||
|
tinfo->tm_min = nowTm.minute();
|
||||||
|
tinfo->tm_hour = nowTm.hour();
|
||||||
|
tinfo->tm_wday = nowTm.dayOfTheWeek();
|
||||||
|
tinfo->tm_mday = nowTm.day();
|
||||||
|
tinfo->tm_mon = nowTm.month() - 1;
|
||||||
|
tinfo->tm_year = nowTm.year() - 1900;
|
||||||
|
}else{
|
||||||
|
tinfo->tm_sec++;
|
||||||
|
mktime(tinfo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void RTC::setTime(struct tm* tinfo){
|
||||||
|
adjust(DateTime(tinfo->tm_year + 1900, tinfo->tm_mon + 1, tinfo->tm_mday, tinfo->tm_hour, tinfo->tm_min, tinfo->tm_sec));
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
26
yoRadio/src/core/rtcsupport.h
Normal file
26
yoRadio/src/core/rtcsupport.h
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
#ifndef rtcsupport_h
|
||||||
|
#define rtcsupport_h
|
||||||
|
#include "options.h"
|
||||||
|
|
||||||
|
#define RTCSUPPORTED (RTC_SDA!=255 && RTC_SCL!=255 && (RTC_MODULE==DS3231 || RTC_MODULE==DS1307))
|
||||||
|
|
||||||
|
#if RTCSUPPORTED
|
||||||
|
#include "RTClib.h"
|
||||||
|
|
||||||
|
#if RTC_MODULE==DS3231
|
||||||
|
class RTC: public RTC_DS3231 {
|
||||||
|
#elif RTC_MODULE==DS1307
|
||||||
|
class RTC: public RTC_DS1307 {
|
||||||
|
#else
|
||||||
|
# error ONLY DS3231 OR DS1307 MODULE SUPPORTED
|
||||||
|
#endif
|
||||||
|
public:
|
||||||
|
bool init();
|
||||||
|
bool isRunning();
|
||||||
|
void getTime(struct tm* tinfo);
|
||||||
|
void setTime(struct tm* tinfo);
|
||||||
|
};
|
||||||
|
extern RTC rtc;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
Reference in New Issue
Block a user