[M] Dropped Sleep for now (IRQ Isssues)
This commit is contained in:
		
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1 +1,3 @@ | |||||||
| env.h | env.h | ||||||
|  | build/ | ||||||
|  | .vscode/ | ||||||
|   | |||||||
							
								
								
									
										113
									
								
								metesp.ino
									
									
									
									
									
								
							
							
						
						
									
										113
									
								
								metesp.ino
									
									
									
									
									
								
							| @@ -1,44 +1,39 @@ | |||||||
| /* Includes ------------------------------------------------------------------*/ | /* Includes ------------------------------------------------------------------*/ | ||||||
| #include "env.h" | #include "env.h" | ||||||
|  |  | ||||||
| #include "src/epd/epd_cfg.h" |  | ||||||
| #include "src/epd/epd_driver.h" |  | ||||||
| #include "src/epd/epd_paint.h" |  | ||||||
|  |  | ||||||
| #include "src/ntp/ntp.h" |  | ||||||
| #include "src/owm/owm.h" |  | ||||||
|  |  | ||||||
| #include "src/sensor/sensor.h"  |  | ||||||
| #include "src/touch/gt1151.h" |  | ||||||
|  |  | ||||||
| #include "src/influxdb/influx.h" |  | ||||||
|  |  | ||||||
| #include "src/display/display.h" |  | ||||||
| #include "src/timedfun/timedfun.h" |  | ||||||
|  |  | ||||||
| #include <Arduino.h> | #include <Arduino.h> | ||||||
|  |  | ||||||
| #include <Wire.h> | #include <Wire.h> | ||||||
| #include <stdlib.h> | #include <stdlib.h> | ||||||
| #include <WiFi.h> | #include <WiFi.h> | ||||||
| #include <WiFiMulti.h> | #include <WiFiMulti.h> | ||||||
|  |  | ||||||
|  | #include "src/epd/epd_cfg.h" | ||||||
|  | #include "src/epd/epd_driver.h" | ||||||
|  | #include "src/epd/epd_paint.h" | ||||||
|  | #include "src/ntp/ntp.h" | ||||||
|  | #include "src/owm/owm.h" | ||||||
|  | #include "src/sensor/sensor.h"  | ||||||
|  | #include "src/touch/gt1151.h" | ||||||
|  | #include "src/influxdb/influx.h" | ||||||
|  | #include "src/display/display.h" | ||||||
|  | #include "src/timedfun/timedfun.h" | ||||||
|  |  | ||||||
|  |  | ||||||
| #define PIN_SDA 18 | #define PIN_SDA 18 | ||||||
| #define PIN_SCL 23 | #define PIN_SCL 23 | ||||||
|  |  | ||||||
|  |  | ||||||
| #define uS_TO_S_FACTOR 1000000  //Conversion factor for micro seconds to seconds | #define uS_TO_S_FACTOR 1000000  //Conversion factor for micro seconds to seconds | ||||||
| #define TIME_TO_SLEEP  (60*5) | #define TIME_TO_SLEEP  (60*5) | ||||||
|  | #define BUTTON_PIN_BITMASK 0x8000 | ||||||
|  |  | ||||||
|  |  | ||||||
| /* Global Variables -----------------------------------------------------------*/ | /* Global Variables -----------------------------------------------------------*/ | ||||||
|  |  | ||||||
| static WiFiMulti wifiMulti; | static WiFiMulti wifiMulti; | ||||||
| static TwoWire I2C = TwoWire(0); | static TwoWire I2C = TwoWire(0); | ||||||
| TaskHandle_t task_measure; | TaskHandle_t task_measure; | ||||||
| TaskHandle_t task_draw; | TaskHandle_t task_draw; | ||||||
| TaskHandle_t task_touch; | TaskHandle_t task_touch; | ||||||
|  |  | ||||||
|  |  | ||||||
| static NTPtime* ntp = new NTPtime(NTP_URL); | static NTPtime* ntp = new NTPtime(NTP_URL); | ||||||
| static Sensor* sensor = new Sensor(&I2C); | static Sensor* sensor = new Sensor(&I2C); | ||||||
| static GT1151* touch = new GT1151(&I2C); | static GT1151* touch = new GT1151(&I2C); | ||||||
| @@ -46,15 +41,10 @@ static OWM* owm[6] = {new OWM(LOCATION_0, OPENWEATHER_API), | |||||||
|                      new OWM(LOCATION_1, OPENWEATHER_API),  |                      new OWM(LOCATION_1, OPENWEATHER_API),  | ||||||
|                      new OWM(LOCATION_2, OPENWEATHER_API),  |                      new OWM(LOCATION_2, OPENWEATHER_API),  | ||||||
|                      NULL,NULL,NULL}; |                      NULL,NULL,NULL}; | ||||||
|  |  | ||||||
| static Influx* iflx = new Influx(NULL, owm);//TODO: Add sensor | static Influx* iflx = new Influx(NULL, owm);//TODO: Add sensor | ||||||
|  |  | ||||||
| static TimedFun* tf = new TimedFun(); | static TimedFun* tf = new TimedFun(); | ||||||
|  |  | ||||||
| static bool time_update = true, view_update = true, view_refresh = false; | static bool time_update = true, view_update = true, view_refresh = false; | ||||||
| static bool shutdownt = false; |  | ||||||
| static int  shutdownc = 0; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| static const int8_t views_size = 6; | static const int8_t views_size = 6; | ||||||
| static DisplayWrapper* views[views_size] = { | static DisplayWrapper* views[views_size] = { | ||||||
| @@ -65,9 +55,6 @@ static DisplayWrapper* views[views_size] = { | |||||||
|   new AirDisplay(sensor), |   new AirDisplay(sensor), | ||||||
|   new LightDisplay(sensor), |   new LightDisplay(sensor), | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /* IRQ ------------------------------------------------------------------------*/ | /* IRQ ------------------------------------------------------------------------*/ | ||||||
| hw_timer_t * timer = NULL;  | hw_timer_t * timer = NULL;  | ||||||
| void IRAM_ATTR onSecondTimer() { | void IRAM_ATTR onSecondTimer() { | ||||||
| @@ -89,29 +76,16 @@ void IRAM_ATTR onSecondTimer() { | |||||||
|     view_update = true; |     view_update = true; | ||||||
|     time_update = true; |     time_update = true; | ||||||
|     tf->minuteTick(); |     tf->minuteTick(); | ||||||
|   } |  | ||||||
|   if(touch->dev.holding) shutdownc++; |  | ||||||
|   else shutdownc = 0; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void IRAM_ATTR onTouch(int8_t contacts, GTPoint *points) { |  | ||||||
|   if(touch->dev.holding){ |  | ||||||
|     // Serial.printf("Draging:\n"); |  | ||||||
|     // Serial.printf("C0: #0 %d,%d \n", touch->dev.dx, touch->dev.dy); |  | ||||||
|     return; |  | ||||||
|   } |   } | ||||||
|   // Serial.printf("Contacts: %d\n", contacts); | } | ||||||
|   // for (uint8_t i = 0; i < contacts; i++) { | void IRAM_ATTR onTouch(int8_t contacts, GTPoint *points) { | ||||||
|   //   Serial.printf("C%d: #%d %d,%d s:%d\n", i, points[i].id, points[i].x, points[i].y, points[i].a); |   if(touch->dev.holding) return; | ||||||
|   //   yield(); |  | ||||||
|   // } |  | ||||||
|   if(points[0].y < 125) Display::nextView(); |   if(points[0].y < 125) Display::nextView(); | ||||||
|   else Display::prevView(); |   else Display::prevView(); | ||||||
|   view_update = true; |   view_update = true; | ||||||
| } | } | ||||||
|  |  | ||||||
| /* Setup Functions -----------------------------------------------------------*/ | /* Setup Functions -----------------------------------------------------------*/ | ||||||
|  |  | ||||||
| void setup_TOUCH() { | void setup_TOUCH() { | ||||||
|   touch->setHandler(onTouch); |   touch->setHandler(onTouch); | ||||||
|   touch->begin(); |   touch->begin(); | ||||||
| @@ -150,19 +124,14 @@ void setup_TIMEDFUN() { | |||||||
| } | } | ||||||
|  |  | ||||||
| void setup_POWER() { | void setup_POWER() { | ||||||
|   gpio_wakeup_enable(GPIO_NUM_15,GPIO_INTR_HIGH_LEVEL); |  | ||||||
|   esp_sleep_enable_gpio_wakeup(); |  | ||||||
|   esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR); |  | ||||||
|  |  | ||||||
|   // esp_sleep_enable_ext0_wakeup(GPIO_NUM_15, 1); |  | ||||||
|   // esp_sleep_pd_config(ESP_PD_DOMAIN_VDDSDIO,ESP_PD_OPTION_ON); |  | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| /* Setup Functions --------------------------------------------------------------*/ | /* Setup Functions --------------------------------------------------------------*/ | ||||||
| void setup(){ | void setup(){ | ||||||
|   Serial.begin(115200); |   Serial.begin(115200); | ||||||
|   I2C.begin(PIN_SDA, PIN_SCL); |   I2C.begin(PIN_SDA, PIN_SCL); | ||||||
|  |  | ||||||
|   setup_POWER(); |   setup_POWER(); | ||||||
|  |  | ||||||
|   Display::setup(); |   Display::setup(); | ||||||
| @@ -174,9 +143,8 @@ void setup(){ | |||||||
|  |  | ||||||
|   iflx->check(); |   iflx->check(); | ||||||
|   Display::setViews(views,views_size); |   Display::setViews(views,views_size); | ||||||
|  |  | ||||||
|   tf->updateForce(); |   tf->updateForce(); | ||||||
|   shutdownc = 0; |   tf->setTick(ntp->dt.minute); | ||||||
|    |    | ||||||
|   xTaskCreatePinnedToCore( |   xTaskCreatePinnedToCore( | ||||||
|     loop_MEASURE, "Task LMeasure", |     loop_MEASURE, "Task LMeasure", | ||||||
| @@ -185,7 +153,6 @@ void setup(){ | |||||||
|   xTaskCreatePinnedToCore( |   xTaskCreatePinnedToCore( | ||||||
|     loop_DRAW, "Task LDraw", |     loop_DRAW, "Task LDraw", | ||||||
|     10000, NULL, 1, &task_draw, 1); |     10000, NULL, 1, &task_draw, 1); | ||||||
|  |  | ||||||
|   xTaskCreatePinnedToCore( |   xTaskCreatePinnedToCore( | ||||||
|     loop_TOUCH, "Task LTouch", |     loop_TOUCH, "Task LTouch", | ||||||
|     10000, NULL, 1, &task_touch, 1); |     10000, NULL, 1, &task_touch, 1); | ||||||
| @@ -193,44 +160,13 @@ void setup(){ | |||||||
|   Serial.println("Completed Setup"); |   Serial.println("Completed Setup"); | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| /* The main loop -------------------------------------------------------------*/ | /* The main loop -------------------------------------------------------------*/ | ||||||
| void wakeup(){ |  | ||||||
|     view_refresh = true; |  | ||||||
|     view_update = true; |  | ||||||
|     time_update = true; |  | ||||||
|     setup_WIFI(); |  | ||||||
|     ntp->updateNTPtime(); |  | ||||||
|     vTaskDelay(200); |  | ||||||
|     shutdownc = 0; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void loop(){ | void loop(){ | ||||||
|   delay(500); |   delay(5000); | ||||||
|  |  | ||||||
|   if(shutdownc >= 3){ |  | ||||||
|     Display::clearTime(); |  | ||||||
|     EPD_2IN13_V2_Sleep(); |  | ||||||
|     Serial.println("Shuting down"); |  | ||||||
|     while(touch->dev.holding || touch->dev.pressing){ |  | ||||||
|       touch->update(); |  | ||||||
|       delay(100); |  | ||||||
|     } |  | ||||||
|     delay(500); |  | ||||||
|     touch->update(); |  | ||||||
|     strDateTime odt = (ntp->dt); |  | ||||||
|     delay(2000); |  | ||||||
|     esp_light_sleep_start();//IRQ Raised for some reason |  | ||||||
|     Serial.println("Wakey Wakey"); |  | ||||||
|     wakeup(); |  | ||||||
|     tf->minuteTick(ntp->dt.minute - odt.minute); |  | ||||||
|   } |  | ||||||
| } | } | ||||||
|  |  | ||||||
| void loop_DRAW(void * pvParameters ){ | void loop_DRAW(void * pvParameters ){ | ||||||
|   for(;;){ |   for(;;){ | ||||||
|     if(shutdownc >= 2){vTaskDelay(500);continue;} |  | ||||||
|  |  | ||||||
|     if(view_refresh) Display::refresh(); |     if(view_refresh) Display::refresh(); | ||||||
|     if(view_update) Display::update(); |     if(view_update) Display::update(); | ||||||
|     if(time_update) Display::drawTime(&(ntp->dt)); |     if(time_update) Display::drawTime(&(ntp->dt)); | ||||||
| @@ -238,23 +174,24 @@ void loop_DRAW(void * pvParameters ){ | |||||||
|     view_refresh = false; |     view_refresh = false; | ||||||
|     view_update = false; |     view_update = false; | ||||||
|     time_update = false; |     time_update = false; | ||||||
|  |  | ||||||
|     vTaskDelay(100); |     vTaskDelay(100); | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
| void loop_TOUCH(void * pvParameters ){ | void loop_TOUCH(void * pvParameters ){ | ||||||
|   for(;;){ |   for(;;){ | ||||||
|     if(shutdownc >= 2){vTaskDelay(500);continue;} |  | ||||||
|     touch->update(); |     touch->update(); | ||||||
|     if(!touch->dev.holding) shutdownc = 0; |  | ||||||
|     vTaskDelay(10); |     vTaskDelay(10); | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
| void loop_MEASURE(void * pvParameters ){ | void loop_MEASURE(void * pvParameters ){ | ||||||
|   for(;;){ |   for(;;){ | ||||||
|     if(shutdownc >= 2){vTaskDelay(500);continue;} |  | ||||||
|     tf->update(); |     tf->update(); | ||||||
|  |  | ||||||
|     vTaskDelay(200); |     vTaskDelay(200); | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -18,8 +18,6 @@ void DrawMain(bool v){ | |||||||
|  |  | ||||||
| void Display::setup(){ | void Display::setup(){ | ||||||
|     DEV_Module_Init(); |     DEV_Module_Init(); | ||||||
|     // EPD_2IN13_V2_Init(EPD_2IN13_V2_FULL); |  | ||||||
|     // EPD_2IN13_V2_Clear(); |  | ||||||
|  |  | ||||||
|     uint16_t Imagesize = ((EPD_2IN13_V2_WIDTH % 8 == 0) ? (EPD_2IN13_V2_WIDTH / 8 ) : (EPD_2IN13_V2_WIDTH / 8 + 1)) * EPD_2IN13_V2_HEIGHT; |     uint16_t Imagesize = ((EPD_2IN13_V2_WIDTH % 8 == 0) ? (EPD_2IN13_V2_WIDTH / 8 ) : (EPD_2IN13_V2_WIDTH / 8 + 1)) * EPD_2IN13_V2_HEIGHT; | ||||||
|     if ((BlackImage = (uint8_t *)malloc(Imagesize)) == NULL) exit(1); |     if ((BlackImage = (uint8_t *)malloc(Imagesize)) == NULL) exit(1); | ||||||
| @@ -33,6 +31,7 @@ void Display::setup(){ | |||||||
|  |  | ||||||
| void Display::clearTime(){ | void Display::clearTime(){ | ||||||
|   Paint_ClearWindows(170, EPD_2IN13_V2_WIDTH - Font24.Height+2, 170 + Font24.Width * 4.5, EPD_2IN13_V2_WIDTH, WHITE); |   Paint_ClearWindows(170, EPD_2IN13_V2_WIDTH - Font24.Height+2, 170 + Font24.Width * 4.5, EPD_2IN13_V2_WIDTH, WHITE); | ||||||
|  |   EPD_2IN13_V2_DisplayPart(BlackImage); | ||||||
| } | } | ||||||
|  |  | ||||||
| void Display::drawTime(strDateTime* dt){ | void Display::drawTime(strDateTime* dt){ | ||||||
|   | |||||||
| @@ -29,6 +29,11 @@ class TimedFun { | |||||||
|             counter += m; |             counter += m; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         void setTick(int64_t m){ | ||||||
|  |             counter = m; | ||||||
|  |             old_counter = m; | ||||||
|  |         } | ||||||
|  |  | ||||||
|         void update(){ |         void update(){ | ||||||
|             uint64_t ccounter = old_counter; |             uint64_t ccounter = old_counter; | ||||||
|             old_counter = counter; |             old_counter = counter; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user