mirror of https://github.com/sqfmi/Watchy.git
Merge branch 'sqfmi:master' into custom
commit
992df52ba7
|
@ -16,10 +16,15 @@ void Watchy7SEG::drawWatchFace(){
|
||||||
drawSteps();
|
drawSteps();
|
||||||
drawWeather();
|
drawWeather();
|
||||||
drawBattery();
|
drawBattery();
|
||||||
display.drawBitmap(120, 77, WIFI_CONFIGURED ? wifi : wifioff, 26, 18, DARKMODE ? GxEPD_WHITE : GxEPD_BLACK);
|
display.drawBitmap(116, 75, WIFI_CONFIGURED ? wifi : wifioff, 26, 18, DARKMODE ? GxEPD_WHITE : GxEPD_BLACK);
|
||||||
if(BLE_CONFIGURED){
|
if(BLE_CONFIGURED){
|
||||||
display.drawBitmap(100, 75, bluetooth, 13, 21, DARKMODE ? GxEPD_WHITE : GxEPD_BLACK);
|
display.drawBitmap(100, 73, bluetooth, 13, 21, DARKMODE ? GxEPD_WHITE : GxEPD_BLACK);
|
||||||
}
|
}
|
||||||
|
#ifdef ARDUINO_ESP32S3_DEV
|
||||||
|
if(USB_PLUGGED_IN){
|
||||||
|
display.drawBitmap(140, 75, charge, 16, 18, DARKMODE ? GxEPD_WHITE : GxEPD_BLACK);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void Watchy7SEG::drawTime(){
|
void Watchy7SEG::drawTime(){
|
||||||
|
@ -81,25 +86,25 @@ void Watchy7SEG::drawSteps(){
|
||||||
display.println(stepCount);
|
display.println(stepCount);
|
||||||
}
|
}
|
||||||
void Watchy7SEG::drawBattery(){
|
void Watchy7SEG::drawBattery(){
|
||||||
display.drawBitmap(154, 73, battery, 37, 21, DARKMODE ? GxEPD_WHITE : GxEPD_BLACK);
|
display.drawBitmap(158, 73, battery, 37, 21, DARKMODE ? GxEPD_WHITE : GxEPD_BLACK);
|
||||||
display.fillRect(159, 78, 27, BATTERY_SEGMENT_HEIGHT, DARKMODE ? GxEPD_BLACK : GxEPD_WHITE);//clear battery segments
|
display.fillRect(163, 78, 27, BATTERY_SEGMENT_HEIGHT, DARKMODE ? GxEPD_BLACK : GxEPD_WHITE);//clear battery segments
|
||||||
int8_t batteryLevel = 0;
|
int8_t batteryLevel = 0;
|
||||||
float VBAT = getBatteryVoltage();
|
float VBAT = getBatteryVoltage();
|
||||||
if(VBAT > 4.1){
|
if(VBAT > 4.0){
|
||||||
batteryLevel = 3;
|
batteryLevel = 3;
|
||||||
}
|
}
|
||||||
else if(VBAT > 3.95 && VBAT <= 4.1){
|
else if(VBAT > 3.6 && VBAT <= 4.0){
|
||||||
batteryLevel = 2;
|
batteryLevel = 2;
|
||||||
}
|
}
|
||||||
else if(VBAT > 3.80 && VBAT <= 3.95){
|
else if(VBAT > 3.20 && VBAT <= 3.6){
|
||||||
batteryLevel = 1;
|
batteryLevel = 1;
|
||||||
}
|
}
|
||||||
else if(VBAT <= 3.80){
|
else if(VBAT <= 3.20){
|
||||||
batteryLevel = 0;
|
batteryLevel = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
for(int8_t batterySegments = 0; batterySegments < batteryLevel; batterySegments++){
|
for(int8_t batterySegments = 0; batterySegments < batteryLevel; batterySegments++){
|
||||||
display.fillRect(159 + (batterySegments * BATTERY_SEGMENT_SPACING), 78, BATTERY_SEGMENT_WIDTH, BATTERY_SEGMENT_HEIGHT, DARKMODE ? GxEPD_WHITE : GxEPD_BLACK);
|
display.fillRect(163 + (batterySegments * BATTERY_SEGMENT_SPACING), 78, BATTERY_SEGMENT_WIDTH, BATTERY_SEGMENT_HEIGHT, DARKMODE ? GxEPD_WHITE : GxEPD_BLACK);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -189,6 +189,14 @@ const unsigned char wifioff [] PROGMEM = {
|
||||||
0x01, 0xff, 0xc0, 0x00, 0x07, 0xe1, 0xc0, 0x00, 0x0f, 0xc0, 0x80, 0x00, 0x1f, 0x0c, 0x00, 0x00,
|
0x01, 0xff, 0xc0, 0x00, 0x07, 0xe1, 0xc0, 0x00, 0x0f, 0xc0, 0x80, 0x00, 0x1f, 0x0c, 0x00, 0x00,
|
||||||
0x3c, 0x1e, 0x00, 0x00, 0xf8, 0x0c, 0x00, 0x00
|
0x3c, 0x1e, 0x00, 0x00, 0xf8, 0x0c, 0x00, 0x00
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 'charge', 16x18px
|
||||||
|
const unsigned char charge [] PROGMEM = {
|
||||||
|
0x00, 0x10, 0x00, 0x70, 0x00, 0xe0, 0x01, 0xe0, 0x03, 0xe0, 0x07, 0xc0, 0x0f, 0xc0, 0x1f, 0xff,
|
||||||
|
0x3f, 0xfe, 0x7f, 0xfc, 0x7f, 0xf8, 0x03, 0xf0, 0x03, 0xe0, 0x07, 0xc0, 0x07, 0x80, 0x07, 0x00,
|
||||||
|
0x0e, 0x00, 0x0c, 0x00
|
||||||
|
};
|
||||||
|
|
||||||
// 'chip', 48x32px
|
// 'chip', 48x32px
|
||||||
const unsigned char chip [] PROGMEM = {
|
const unsigned char chip [] PROGMEM = {
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "Watchy",
|
"name": "Watchy",
|
||||||
"version": "1.4.13",
|
"version": "1.4.14",
|
||||||
"description": "Watchy - An Open Source E-Paper Watch by SQFMI",
|
"description": "Watchy - An Open Source E-Paper Watch by SQFMI",
|
||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
name=Watchy
|
name=Watchy
|
||||||
version=1.4.13
|
version=1.4.14
|
||||||
author=SQFMI
|
author=SQFMI
|
||||||
maintainer=SQFMI
|
maintainer=SQFMI
|
||||||
sentence=Watchy - An Open Source E-Paper Watch by SQFMI
|
sentence=Watchy - An Open Source E-Paper Watch by SQFMI
|
||||||
|
|
|
@ -19,11 +19,9 @@
|
||||||
RTC_DATA_ATTR bool displayFullInit = true;
|
RTC_DATA_ATTR bool displayFullInit = true;
|
||||||
|
|
||||||
void WatchyDisplay::busyCallback(const void *) {
|
void WatchyDisplay::busyCallback(const void *) {
|
||||||
#ifndef ARDUINO_ESP32S3_DEV
|
|
||||||
gpio_wakeup_enable((gpio_num_t)DISPLAY_BUSY, GPIO_INTR_LOW_LEVEL);
|
gpio_wakeup_enable((gpio_num_t)DISPLAY_BUSY, GPIO_INTR_LOW_LEVEL);
|
||||||
esp_sleep_enable_gpio_wakeup();
|
esp_sleep_enable_gpio_wakeup();
|
||||||
esp_light_sleep_start();
|
esp_light_sleep_start();
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
WatchyDisplay::WatchyDisplay() :
|
WatchyDisplay::WatchyDisplay() :
|
||||||
|
|
|
@ -19,6 +19,7 @@ RTC_DATA_ATTR weatherData currentWeather;
|
||||||
RTC_DATA_ATTR int weatherIntervalCounter = -1;
|
RTC_DATA_ATTR int weatherIntervalCounter = -1;
|
||||||
RTC_DATA_ATTR long gmtOffset = 0;
|
RTC_DATA_ATTR long gmtOffset = 0;
|
||||||
RTC_DATA_ATTR bool alreadyInMenu = true;
|
RTC_DATA_ATTR bool alreadyInMenu = true;
|
||||||
|
RTC_DATA_ATTR bool USB_PLUGGED_IN = false;
|
||||||
RTC_DATA_ATTR tmElements_t bootTime;
|
RTC_DATA_ATTR tmElements_t bootTime;
|
||||||
RTC_DATA_ATTR uint32_t lastIPAddress;
|
RTC_DATA_ATTR uint32_t lastIPAddress;
|
||||||
RTC_DATA_ATTR char lastSSID[30];
|
RTC_DATA_ATTR char lastSSID[30];
|
||||||
|
@ -32,7 +33,6 @@ void Watchy::init(String datetime) {
|
||||||
Wire.begin(SDA, SCL); // init i2c
|
Wire.begin(SDA, SCL); // init i2c
|
||||||
#endif
|
#endif
|
||||||
RTC.init();
|
RTC.init();
|
||||||
|
|
||||||
// Init the display since is almost sure we will use it
|
// Init the display since is almost sure we will use it
|
||||||
display.epd2.initWatchy();
|
display.epd2.initWatchy();
|
||||||
|
|
||||||
|
@ -67,9 +67,23 @@ void Watchy::init(String datetime) {
|
||||||
case ESP_SLEEP_WAKEUP_EXT1: // button Press
|
case ESP_SLEEP_WAKEUP_EXT1: // button Press
|
||||||
handleButtonPress();
|
handleButtonPress();
|
||||||
break;
|
break;
|
||||||
|
#ifdef ARDUINO_ESP32S3_DEV
|
||||||
|
case ESP_SLEEP_WAKEUP_EXT0: // USB plug in
|
||||||
|
pinMode(USB_DET_PIN, INPUT);
|
||||||
|
USB_PLUGGED_IN = (digitalRead(USB_DET_PIN) == 1);
|
||||||
|
if(guiState == WATCHFACE_STATE){
|
||||||
|
RTC.read(currentTime);
|
||||||
|
showWatchFace(true);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
default: // reset
|
default: // reset
|
||||||
RTC.config(datetime);
|
RTC.config(datetime);
|
||||||
_bmaConfig();
|
_bmaConfig();
|
||||||
|
#ifdef ARDUINO_ESP32S3_DEV
|
||||||
|
pinMode(USB_DET_PIN, INPUT);
|
||||||
|
USB_PLUGGED_IN = (digitalRead(USB_DET_PIN) == 1);
|
||||||
|
#endif
|
||||||
gmtOffset = settings.gmtOffset;
|
gmtOffset = settings.gmtOffset;
|
||||||
RTC.read(currentTime);
|
RTC.read(currentTime);
|
||||||
RTC.read(bootTime);
|
RTC.read(bootTime);
|
||||||
|
@ -85,9 +99,16 @@ void Watchy::deepSleep() {
|
||||||
display.hibernate();
|
display.hibernate();
|
||||||
RTC.clearAlarm(); // resets the alarm flag in the RTC
|
RTC.clearAlarm(); // resets the alarm flag in the RTC
|
||||||
#ifdef ARDUINO_ESP32S3_DEV
|
#ifdef ARDUINO_ESP32S3_DEV
|
||||||
|
esp_sleep_enable_ext0_wakeup((gpio_num_t)USB_DET_PIN, USB_PLUGGED_IN ? LOW : HIGH); //// enable deep sleep wake on USB plug in/out
|
||||||
|
rtc_gpio_set_direction((gpio_num_t)USB_DET_PIN, RTC_GPIO_MODE_INPUT_ONLY);
|
||||||
|
rtc_gpio_pullup_en((gpio_num_t)USB_DET_PIN);
|
||||||
|
|
||||||
esp_sleep_enable_ext1_wakeup(
|
esp_sleep_enable_ext1_wakeup(
|
||||||
BTN_PIN_MASK,
|
BTN_PIN_MASK,
|
||||||
ESP_EXT1_WAKEUP_ANY_LOW); // enable deep sleep wake on button press
|
ESP_EXT1_WAKEUP_ANY_LOW); // enable deep sleep wake on button press
|
||||||
|
rtc_gpio_set_direction((gpio_num_t)UP_BTN_PIN, RTC_GPIO_MODE_INPUT_ONLY);
|
||||||
|
rtc_gpio_pullup_en((gpio_num_t)UP_BTN_PIN);
|
||||||
|
|
||||||
rtc_clk_32k_enable(true);
|
rtc_clk_32k_enable(true);
|
||||||
//rtc_clk_slow_freq_set(RTC_SLOW_FREQ_32K_XTAL);
|
//rtc_clk_slow_freq_set(RTC_SLOW_FREQ_32K_XTAL);
|
||||||
struct tm timeinfo;
|
struct tm timeinfo;
|
||||||
|
@ -108,7 +129,6 @@ void Watchy::deepSleep() {
|
||||||
BTN_PIN_MASK,
|
BTN_PIN_MASK,
|
||||||
ESP_EXT1_WAKEUP_ANY_HIGH); // enable deep sleep wake on button press
|
ESP_EXT1_WAKEUP_ANY_HIGH); // enable deep sleep wake on button press
|
||||||
#endif
|
#endif
|
||||||
gpio_deep_sleep_hold_dis();
|
|
||||||
esp_deep_sleep_start();
|
esp_deep_sleep_start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,8 @@
|
||||||
#include "soc/rtc_cntl_reg.h"
|
#include "soc/rtc_cntl_reg.h"
|
||||||
#include "time.h"
|
#include "time.h"
|
||||||
#include "esp_sntp.h"
|
#include "esp_sntp.h"
|
||||||
|
#include "hal/rtc_io_types.h"
|
||||||
|
#include "driver/rtc_io.h"
|
||||||
#define uS_TO_S_FACTOR 1000000ULL //Conversion factor for micro seconds to seconds
|
#define uS_TO_S_FACTOR 1000000ULL //Conversion factor for micro seconds to seconds
|
||||||
#define ADC_VOLTAGE_DIVIDER ((360.0f+100.0f)/360.0f) //Voltage divider at battery ADC
|
#define ADC_VOLTAGE_DIVIDER ((360.0f+100.0f)/360.0f) //Voltage divider at battery ADC
|
||||||
#else
|
#else
|
||||||
|
@ -116,5 +118,6 @@ extern RTC_DATA_ATTR int menuIndex;
|
||||||
extern RTC_DATA_ATTR BMA423 sensor;
|
extern RTC_DATA_ATTR BMA423 sensor;
|
||||||
extern RTC_DATA_ATTR bool WIFI_CONFIGURED;
|
extern RTC_DATA_ATTR bool WIFI_CONFIGURED;
|
||||||
extern RTC_DATA_ATTR bool BLE_CONFIGURED;
|
extern RTC_DATA_ATTR bool BLE_CONFIGURED;
|
||||||
|
extern RTC_DATA_ATTR bool USB_PLUGGED_IN;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue