mirror of https://github.com/sqfmi/Watchy.git
Finaly can build.
parent
8e6c4a5693
commit
4e8f5fc1fb
|
@ -20,6 +20,8 @@
|
||||||
{ "name": "Arduino_JSON" },
|
{ "name": "Arduino_JSON" },
|
||||||
{ "name": "DS3232RTC" },
|
{ "name": "DS3232RTC" },
|
||||||
{ "name": "NTPClient" },
|
{ "name": "NTPClient" },
|
||||||
|
{ "name": "ESP32 BLE Arduino" },
|
||||||
|
{ "name": "Adafruit BusIO" },
|
||||||
{
|
{
|
||||||
"name": "Rtc_Pcf8563",
|
"name": "Rtc_Pcf8563",
|
||||||
"version": "https://github.com/orbitalair/Rtc_Pcf8563.git#master"
|
"version": "https://github.com/orbitalair/Rtc_Pcf8563.git#master"
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
#include "BLE.h"
|
#include "BLE.h"
|
||||||
|
|
||||||
|
// Expanded
|
||||||
|
#include "watchy_config.h"
|
||||||
|
|
||||||
#define SERVICE_UUID_ESPOTA "cd77498e-1ac8-48b6-aba8-4161c7342fce"
|
#define SERVICE_UUID_ESPOTA "cd77498e-1ac8-48b6-aba8-4161c7342fce"
|
||||||
#define CHARACTERISTIC_UUID_ID "cd77498f-1ac8-48b6-aba8-4161c7342fce"
|
#define CHARACTERISTIC_UUID_ID "cd77498f-1ac8-48b6-aba8-4161c7342fce"
|
||||||
|
|
||||||
|
|
1012
src/Watchy.cpp
1012
src/Watchy.cpp
File diff suppressed because it is too large
Load Diff
90
src/Watchy.h
90
src/Watchy.h
|
@ -1,90 +0,0 @@
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <Arduino.h>
|
|
||||||
#include <WiFiManager.h>
|
|
||||||
#include <HTTPClient.h>
|
|
||||||
#include <NTPClient.h>
|
|
||||||
#include <WiFiUdp.h>
|
|
||||||
#include <Arduino_JSON.h>
|
|
||||||
#include <GxEPD2_BW.h>
|
|
||||||
#include <Wire.h>
|
|
||||||
#include <Fonts/FreeMonoBold9pt7b.h>
|
|
||||||
#include "DSEG7_Classic_Bold_53.h"
|
|
||||||
#include "WatchyRTC.h"
|
|
||||||
#include "BLE.h"
|
|
||||||
#include "bma.h"
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
typedef struct weatherData{
|
|
||||||
int8_t temperature;
|
|
||||||
int16_t weatherConditionCode;
|
|
||||||
bool isMetric;
|
|
||||||
String weatherDescription;
|
|
||||||
}weatherData;
|
|
||||||
|
|
||||||
typedef struct watchySettings{
|
|
||||||
//Weather Settings
|
|
||||||
String cityID;
|
|
||||||
String weatherAPIKey;
|
|
||||||
String weatherURL;
|
|
||||||
String weatherUnit;
|
|
||||||
String weatherLang;
|
|
||||||
int8_t weatherUpdateInterval;
|
|
||||||
//NTP Settings
|
|
||||||
String ntpServer;
|
|
||||||
int gmtOffset;
|
|
||||||
int dstOffset;
|
|
||||||
} watchySettings;
|
|
||||||
|
|
||||||
class Watchy
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
static WatchyRTC RTC;
|
|
||||||
static GxEPD2_BW<GxEPD2_154_D67, GxEPD2_154_D67::HEIGHT> display;
|
|
||||||
tmElements_t currentTime;
|
|
||||||
watchySettings settings;
|
|
||||||
public:
|
|
||||||
explicit Watchy(const watchySettings& s) : settings(s){} //constructor
|
|
||||||
void init(String datetime = "");
|
|
||||||
void deepSleep();
|
|
||||||
static void displayBusyCallback(const void*);
|
|
||||||
float getBatteryVoltage();
|
|
||||||
void vibMotor(uint8_t intervalMs = 100, uint8_t length = 20);
|
|
||||||
|
|
||||||
void handleButtonPress();
|
|
||||||
void showMenu(byte menuIndex, bool partialRefresh);
|
|
||||||
void showFastMenu(byte menuIndex);
|
|
||||||
void showAbout();
|
|
||||||
void showBuzz();
|
|
||||||
void showAccelerometer();
|
|
||||||
void showUpdateFW();
|
|
||||||
void showSyncNTP();
|
|
||||||
bool syncNTP();
|
|
||||||
bool syncNTP(long gmt, int dst, String ntpServer);
|
|
||||||
void setTime();
|
|
||||||
void setupWifi();
|
|
||||||
bool connectWiFi();
|
|
||||||
weatherData getWeatherData();
|
|
||||||
weatherData getWeatherData(String cityID, String units, String lang, String url, String apiKey, uint8_t updateInterval);
|
|
||||||
void updateFWBegin();
|
|
||||||
|
|
||||||
void showWatchFace(bool partialRefresh);
|
|
||||||
virtual void drawWatchFace(); //override this method for different watch faces
|
|
||||||
|
|
||||||
// Expanded
|
|
||||||
JSONVar& getWeatherJSON();
|
|
||||||
JSONVar& getWeatherJSON(String cityID, String units, String lang, String url, String apiKey,
|
|
||||||
uint8_t updateInterval);
|
|
||||||
|
|
||||||
private:
|
|
||||||
void _bmaConfig();
|
|
||||||
static void _configModeCallback(WiFiManager *myWiFiManager);
|
|
||||||
static uint16_t _readRegister(uint8_t address, uint8_t reg, uint8_t *data, uint16_t len);
|
|
||||||
static uint16_t _writeRegister(uint8_t address, uint8_t reg, uint8_t *data, uint16_t len);
|
|
||||||
};
|
|
||||||
|
|
||||||
extern RTC_DATA_ATTR int guiState;
|
|
||||||
extern RTC_DATA_ATTR int menuIndex;
|
|
||||||
extern RTC_DATA_ATTR BMA423 sensor;
|
|
||||||
extern RTC_DATA_ATTR bool WIFI_CONFIGURED;
|
|
||||||
extern RTC_DATA_ATTR bool BLE_CONFIGURED;
|
|
|
@ -9,10 +9,7 @@
|
||||||
// Fonts
|
// Fonts
|
||||||
#include <Fonts/FreeMonoBold9pt7b.h>
|
#include <Fonts/FreeMonoBold9pt7b.h>
|
||||||
|
|
||||||
// Watchy
|
CWatchyExpanded::CWatchyExpanded() : m_display(GxEPD2_154_D67(wcd::cs, wcd::dc, wcd::reset, wcd::busy))
|
||||||
#include "WatchyRTC.h"
|
|
||||||
|
|
||||||
CWatchyExpanded::CWatchyExpanded() : m_display(GxEPD2_154_D67(DISPLAY_CS, DISPLAY_DC, DISPLAY_RES, DISPLAY_BUSY))
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,7 +22,7 @@ void CWatchyExpanded::Init()
|
||||||
{
|
{
|
||||||
const esp_sleep_wakeup_cause_t wakeup_reason = esp_sleep_get_wakeup_cause(); //get wake up reason
|
const esp_sleep_wakeup_cause_t wakeup_reason = esp_sleep_get_wakeup_cause(); //get wake up reason
|
||||||
Wire.begin(SDA, SCL); //init i2c
|
Wire.begin(SDA, SCL); //init i2c
|
||||||
RTC.init();
|
m_rtc.init();
|
||||||
|
|
||||||
// Init the display here for all cases, if unused, it will do nothing
|
// Init the display here for all cases, if unused, it will do nothing
|
||||||
m_display.init(0, true, 10, true); // 10ms by spec, and fast pulldown reset
|
m_display.init(0, true, 10, true); // 10ms by spec, and fast pulldown reset
|
||||||
|
@ -34,9 +31,9 @@ void CWatchyExpanded::Init()
|
||||||
switch (wakeup_reason)
|
switch (wakeup_reason)
|
||||||
{
|
{
|
||||||
case ESP_SLEEP_WAKEUP_EXT0: //RTC Alarm
|
case ESP_SLEEP_WAKEUP_EXT0: //RTC Alarm
|
||||||
if(m_guiState == kWatchFace_State)
|
if(m_guiState == wc::kWatchFace_State)
|
||||||
{
|
{
|
||||||
RTC.read(m_currentTime);
|
m_rtc.read(m_currentTime);
|
||||||
UpdateScreen(); //partial updates on tick
|
UpdateScreen(); //partial updates on tick
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -55,7 +52,7 @@ void CWatchyExpanded::Init()
|
||||||
|
|
||||||
void CWatchyExpanded::DisplayBusyCallback(const void*)
|
void CWatchyExpanded::DisplayBusyCallback(const void*)
|
||||||
{
|
{
|
||||||
gpio_wakeup_enable((gpio_num_t)BUSY, GPIO_INTR_LOW_LEVEL);
|
gpio_wakeup_enable(static_cast<gpio_num_t>(wcd::busy), GPIO_INTR_LOW_LEVEL);
|
||||||
esp_sleep_enable_gpio_wakeup();
|
esp_sleep_enable_gpio_wakeup();
|
||||||
esp_light_sleep_start();
|
esp_light_sleep_start();
|
||||||
}
|
}
|
||||||
|
@ -67,7 +64,7 @@ void CWatchyExpanded::UpdateScreen()
|
||||||
DrawBasicClock(); // Temp
|
DrawBasicClock(); // Temp
|
||||||
|
|
||||||
m_display.display(true); //partial refresh
|
m_display.display(true); //partial refresh
|
||||||
m_guiState = kWatchFace_State;
|
m_guiState = wc::kWatchFace_State;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CWatchyExpanded::DrawBasicClock()
|
void CWatchyExpanded::DrawBasicClock()
|
||||||
|
@ -98,12 +95,12 @@ void CWatchyExpanded::DrawBasicClock()
|
||||||
void CWatchyExpanded::DeepSleep()
|
void CWatchyExpanded::DeepSleep()
|
||||||
{
|
{
|
||||||
m_display.hibernate();
|
m_display.hibernate();
|
||||||
RTC.clearAlarm(); //resets the alarm flag in the RTC
|
m_rtc.clearAlarm(); //resets the alarm flag in the RTC
|
||||||
|
|
||||||
for(int i=0; i<40; i++) // Set pins 0-39 to input to avoid power leaking out
|
for(int i=0; i<40; i++) // Set pins 0-39 to input to avoid power leaking out
|
||||||
pinMode(i, INPUT);
|
pinMode(i, INPUT);
|
||||||
|
|
||||||
esp_sleep_enable_ext0_wakeup((gpio_num_t)RTC_INT_PIN, 0); //enable deep sleep wake on RTC interrupt
|
esp_sleep_enable_ext0_wakeup(wc::rtc_pin, 0); //enable deep sleep wake on RTC interrupt
|
||||||
esp_sleep_enable_ext1_wakeup(BTN_PIN_MASK, ESP_EXT1_WAKEUP_ANY_HIGH); //enable deep sleep wake on button press
|
esp_sleep_enable_ext1_wakeup(wc::btn_pin_mask, ESP_EXT1_WAKEUP_ANY_HIGH); //enable deep sleep wake on button press
|
||||||
esp_deep_sleep_start();
|
esp_deep_sleep_start();
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,10 +10,11 @@
|
||||||
#include <TimeLib.h>
|
#include <TimeLib.h>
|
||||||
|
|
||||||
// Watchy
|
// Watchy
|
||||||
#include "config.h"
|
#include "WatchyRTC.h"
|
||||||
|
|
||||||
// Expanded
|
// Expanded
|
||||||
#include "WatchFace.h"
|
#include "WatchFace.h"
|
||||||
|
#include "watchy_config.h"
|
||||||
|
|
||||||
// Defs
|
// Defs
|
||||||
class CWatchFace;
|
class CWatchFace;
|
||||||
|
@ -40,5 +41,6 @@ class CWatchyExpanded
|
||||||
|
|
||||||
GxEPD2_BW<GxEPD2_154_D67, GxEPD2_154_D67::HEIGHT> m_display;
|
GxEPD2_BW<GxEPD2_154_D67, GxEPD2_154_D67::HEIGHT> m_display;
|
||||||
tmElements_t m_currentTime;
|
tmElements_t m_currentTime;
|
||||||
std::int8_t m_guiState = kWatchFace_State;
|
std::int8_t m_guiState = wc::kWatchFace_State;
|
||||||
|
WatchyRTC m_rtc;
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,14 +1,9 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
//display
|
|
||||||
#define DISPLAY_WIDTH 200
|
|
||||||
#define DISPLAY_HEIGHT 200
|
|
||||||
#define BTN_PIN_MASK MENU_BTN_MASK|BACK_BTN_MASK|UP_BTN_MASK|DOWN_BTN_MASK
|
|
||||||
//wifi
|
//wifi
|
||||||
#define WIFI_AP_TIMEOUT 60
|
#define WIFI_AP_TIMEOUT 60
|
||||||
#define WIFI_AP_SSID "Watchy AP"
|
#define WIFI_AP_SSID "Watchy AP"
|
||||||
//menu
|
//menu
|
||||||
constexpr std::int8_t kWatchFace_State{-1};
|
|
||||||
#define MAIN_MENU_STATE 0
|
#define MAIN_MENU_STATE 0
|
||||||
#define APP_STATE 1
|
#define APP_STATE 1
|
||||||
#define FW_UPDATE_STATE 2
|
#define FW_UPDATE_STATE 2
|
||||||
|
@ -31,3 +26,36 @@ constexpr std::int8_t kWatchFace_State{-1};
|
||||||
#define HARDWARE_VERSION_MINOR 0
|
#define HARDWARE_VERSION_MINOR 0
|
||||||
//Versioning
|
//Versioning
|
||||||
#define WATCHY_LIB_VER "1.4.0"
|
#define WATCHY_LIB_VER "1.4.0"
|
||||||
|
|
||||||
|
namespace watchy_config
|
||||||
|
{
|
||||||
|
|
||||||
|
// Menu
|
||||||
|
constexpr std::int8_t kWatchFace_State{-1};
|
||||||
|
|
||||||
|
namespace display
|
||||||
|
{
|
||||||
|
// Display
|
||||||
|
#define DISPLAY_WIDTH 200
|
||||||
|
#define DISPLAY_HEIGHT 200
|
||||||
|
|
||||||
|
// display pins
|
||||||
|
constexpr std::uint8_t cs{5}; // Unsure what this means.
|
||||||
|
constexpr std::uint8_t dc{10}; // Unsure what this means.
|
||||||
|
constexpr std::uint8_t reset{9};
|
||||||
|
constexpr std::uint8_t busy{19};
|
||||||
|
};
|
||||||
|
|
||||||
|
// RTC pins
|
||||||
|
constexpr gpio_num_t rtc_pin{GPIO_NUM_27};
|
||||||
|
|
||||||
|
// btn pins & masks
|
||||||
|
constexpr std::uint64_t menu_btn_mask{GPIO_SEL_26};
|
||||||
|
constexpr std::uint64_t back_btn_mask{GPIO_SEL_25};
|
||||||
|
constexpr std::uint64_t up_btn_mask{GPIO_SEL_32};
|
||||||
|
constexpr std::uint64_t down_btn_mask{GPIO_SEL_4};
|
||||||
|
constexpr std::uint64_t btn_pin_mask{menu_btn_mask|back_btn_mask|up_btn_mask|down_btn_mask};
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace wc = watchy_config;
|
||||||
|
namespace wcd = watchy_config::display;
|
Loading…
Reference in New Issue