kopia lustrzana https://github.com/pjalocha/esp32-ogn-tracker
Attempt to enter sleep/shutdown when button pressed for 4sec
rodzic
a9a6a71159
commit
a1a1dca5c3
|
@ -5,21 +5,21 @@
|
||||||
#define DEFAULT_FreqPlan 0
|
#define DEFAULT_FreqPlan 0
|
||||||
|
|
||||||
// #define WITH_HELTEC // HELTEC module: PCB LED on GPI025
|
// #define WITH_HELTEC // HELTEC module: PCB LED on GPI025
|
||||||
// #define WITH_TTGO // TTGO module: PCB LED on GPIO2, GPIO25 free to use as DAC2 output
|
#define WITH_TTGO // TTGO module: PCB LED on GPIO2, GPIO25 free to use as DAC2 output
|
||||||
#define WITH_TBEAM // T-Beam module
|
// #define WITH_TBEAM // T-Beam module
|
||||||
// #define WITH_FollowMe // by Avionix
|
// #define WITH_FollowMe // by Avionix
|
||||||
|
|
||||||
#define WITH_RFM95
|
#define WITH_RFM95
|
||||||
// #define WITH_RFM69
|
// #define WITH_RFM69
|
||||||
|
|
||||||
// #define WITH_OLED // OLED display on the I2C: some TTGO modules are without OLED display
|
#define WITH_OLED // OLED display on the I2C: some TTGO modules are without OLED display
|
||||||
// #define WITH_OLED2 // 2nd OLED display, I2C address next higher
|
// #define WITH_OLED2 // 2nd OLED display, I2C address next higher
|
||||||
|
|
||||||
// #define WITH_LED_RX
|
// #define WITH_LED_RX
|
||||||
// #define WITH_LED_TX
|
// #define WITH_LED_TX
|
||||||
|
|
||||||
// #define WITH_GPS_ENABLE // use GPS_ENABLE control line to turn the GPS ON/OFF
|
// #define WITH_GPS_ENABLE // use GPS_ENABLE control line to turn the GPS ON/OFF
|
||||||
// #define WITH_GPS_PPS // use the PPS signal from GPS for precise time-sync.
|
#define WITH_GPS_PPS // use the PPS signal from GPS for precise time-sync.
|
||||||
#define WITH_GPS_CONFIG // attempt to configure higher GPS baud rate and airborne mode
|
#define WITH_GPS_CONFIG // attempt to configure higher GPS baud rate and airborne mode
|
||||||
#define WITH_GPS_UBX // GPS understands UBX
|
#define WITH_GPS_UBX // GPS understands UBX
|
||||||
// #define WITH_GPS_MTK // GPS understands MTK
|
// #define WITH_GPS_MTK // GPS understands MTK
|
||||||
|
@ -31,7 +31,7 @@
|
||||||
|
|
||||||
// #define WITH_BMP180 // BMP180 pressure sensor
|
// #define WITH_BMP180 // BMP180 pressure sensor
|
||||||
// #define WITH_BMP280 // BMP280 pressure sensor
|
// #define WITH_BMP280 // BMP280 pressure sensor
|
||||||
#define WITH_BME280 // BMP280 with humidity (but still works with BMP280)
|
// #define WITH_BME280 // BMP280 with humidity (but still works with BMP280)
|
||||||
// #define WITH_MS5607 // MS5607 pressure sensor
|
// #define WITH_MS5607 // MS5607 pressure sensor
|
||||||
|
|
||||||
#define WITH_PFLAA // PFLAU and PFLAA for compatibility with XCsoar and LK8000
|
#define WITH_PFLAA // PFLAU and PFLAA for compatibility with XCsoar and LK8000
|
||||||
|
@ -41,8 +41,8 @@
|
||||||
// #define WITH_BEEPER
|
// #define WITH_BEEPER
|
||||||
|
|
||||||
// #define WITH_SD // use the SD card in SPI mode and FAT file system
|
// #define WITH_SD // use the SD card in SPI mode and FAT file system
|
||||||
#define WITH_SPIFFS // use SPIFFS file system in Flash
|
// #define WITH_SPIFFS // use SPIFFS file system in Flash
|
||||||
#define WITH_LOG // log own positions and other received to SPIFFS and possibly to uSD
|
// #define WITH_LOG // log own positions and other received to SPIFFS and possibly to uSD
|
||||||
|
|
||||||
#define WITH_BT_SPP // Bluetooth serial port for smartphone/tablet link
|
#define WITH_BT_SPP // Bluetooth serial port for smartphone/tablet link
|
||||||
// #define WITH_WIFI // attempt to connect to the wifi router for uploading the log files
|
// #define WITH_WIFI // attempt to connect to the wifi router for uploading the log files
|
||||||
|
|
|
@ -245,8 +245,6 @@ static void ProcessCtrlL(void) // print syste
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static void ProcessInput(void)
|
static void ProcessInput(void)
|
||||||
{ for( ; ; )
|
{ for( ; ; )
|
||||||
{ uint8_t Byte; int Err=CONS_UART_Read(Byte); if(Err<=0) break; // get byte from console, if none: exit the loop
|
{ uint8_t Byte; int Err=CONS_UART_Read(Byte); if(Err<=0) break; // get byte from console, if none: exit the loop
|
||||||
|
@ -286,8 +284,9 @@ void vTaskCTRL(void* pvParameters)
|
||||||
|
|
||||||
LED_TimerCheck(1); // update the LED flashes
|
LED_TimerCheck(1); // update the LED flashes
|
||||||
#ifdef WITH_BEEPER
|
#ifdef WITH_BEEPER
|
||||||
Play_TimerCheck(); // update the LED flashes
|
Play_TimerCheck(1); // read the button(s)
|
||||||
#endif
|
#endif
|
||||||
|
Button_TimerCheck();
|
||||||
|
|
||||||
uint32_t Time=TimeSync_Time();
|
uint32_t Time=TimeSync_Time();
|
||||||
GPS_Position *GPS = GPS_getPosition();
|
GPS_Position *GPS = GPS_getPosition();
|
||||||
|
@ -297,12 +296,16 @@ void vTaskCTRL(void* pvParameters)
|
||||||
PrevTime=Time; PrevGPS=GPS;
|
PrevTime=Time; PrevGPS=GPS;
|
||||||
|
|
||||||
#ifdef WITH_OLED
|
#ifdef WITH_OLED
|
||||||
esp_err_t StatErr=ESP_OK;
|
if(Button_SleepRequest)
|
||||||
esp_err_t PosErr=ESP_OK;
|
{ OLED_DisplayON(0); }
|
||||||
if(TimeChange)
|
else
|
||||||
{ StatErr = OLED_DisplayStatus(Time, 0); }
|
{ esp_err_t StatErr=ESP_OK;
|
||||||
if(GPSchange)
|
esp_err_t PosErr=ESP_OK;
|
||||||
{ PosErr = OLED_DisplayPosition(GPS, 2); }
|
if(TimeChange)
|
||||||
|
{ StatErr = OLED_DisplayStatus(Time, 0); }
|
||||||
|
if(GPSchange)
|
||||||
|
{ PosErr = OLED_DisplayPosition(GPS, 2); }
|
||||||
|
}
|
||||||
#ifdef DEBUG_PRINT
|
#ifdef DEBUG_PRINT
|
||||||
xSemaphoreTake(CONS_Mutex, portMAX_DELAY);
|
xSemaphoreTake(CONS_Mutex, portMAX_DELAY);
|
||||||
if(TimeChange)
|
if(TimeChange)
|
||||||
|
|
|
@ -404,6 +404,12 @@ static void GPS_NMEA(void) // wh
|
||||||
if(NMEA.isGxRMC()) GPS_Burst.GxRMC=1;
|
if(NMEA.isGxRMC()) GPS_Burst.GxRMC=1;
|
||||||
if(NMEA.isGxGGA()) GPS_Burst.GxGGA=1;
|
if(NMEA.isGxGGA()) GPS_Burst.GxGGA=1;
|
||||||
if(NMEA.isGxGSA()) GPS_Burst.GxGSA=1;
|
if(NMEA.isGxGSA()) GPS_Burst.GxGSA=1;
|
||||||
|
if(Button_SleepRequest)
|
||||||
|
{
|
||||||
|
#ifdef WITH_GPS_MTK
|
||||||
|
Format_String(GPS_UART_Write, "$PMTK225,4*2F\r\n", 15, 0); // request to the GPS to enter sleep
|
||||||
|
#endif
|
||||||
|
}
|
||||||
#ifdef DEBUG_PRINT
|
#ifdef DEBUG_PRINT
|
||||||
xSemaphoreTake(CONS_Mutex, portMAX_DELAY);
|
xSemaphoreTake(CONS_Mutex, portMAX_DELAY);
|
||||||
Format_UnsDec(CONS_UART_Write, TimeSync_Time()%60);
|
Format_UnsDec(CONS_UART_Write, TimeSync_Time()%60);
|
||||||
|
|
93
main/hal.cpp
93
main/hal.cpp
|
@ -123,7 +123,7 @@ PSRM32 = SDIO ?
|
||||||
|
|
||||||
GPIO HELTEC TTGO JACEK T-Beam FollowMe Restrictions
|
GPIO HELTEC TTGO JACEK T-Beam FollowMe Restrictions
|
||||||
|
|
||||||
0 .
|
0 Button
|
||||||
1 CONS/TxD CONS/TxD CONS/TxD CONS/TxD Console/Program
|
1 CONS/TxD CONS/TxD CONS/TxD CONS/TxD Console/Program
|
||||||
2 SD/MISO . LED Bootstrap: LOW to enter UART download mode
|
2 SD/MISO . LED Bootstrap: LOW to enter UART download mode
|
||||||
3 CONS/RxD CONS/RxD CONS/RxD CONS/RxD Console/Program
|
3 CONS/RxD CONS/RxD CONS/RxD CONS/RxD Console/Program
|
||||||
|
@ -288,6 +288,12 @@ uint8_t BARO_I2C = (uint8_t)I2C_BUS;
|
||||||
#define PIN_SD_SCK GPIO_NUM_14
|
#define PIN_SD_SCK GPIO_NUM_14
|
||||||
#define PIN_SD_CS GPIO_NUM_15
|
#define PIN_SD_CS GPIO_NUM_15
|
||||||
|
|
||||||
|
#ifdef WITH_FollowMe
|
||||||
|
#define PIN_BUTTON GPIO_NUM_39
|
||||||
|
#else
|
||||||
|
#define PIN_BUTTON GPIO_NUM_0
|
||||||
|
#endif
|
||||||
|
|
||||||
// ======================================================================================================
|
// ======================================================================================================
|
||||||
// 48-bit unique ID of the chip
|
// 48-bit unique ID of the chip
|
||||||
|
|
||||||
|
@ -337,6 +343,11 @@ void LED_PCB_On (void) { }
|
||||||
void LED_PCB_Off (void) { }
|
void LED_PCB_Off (void) { }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef PIN_BUTTON
|
||||||
|
void Button_Dir (void) { gpio_set_direction(PIN_BUTTON, GPIO_MODE_INPUT); }
|
||||||
|
bool Button_isPressed(void) { return !gpio_get_level(PIN_BUTTON); }
|
||||||
|
#endif
|
||||||
|
|
||||||
// ========================================================================================================
|
// ========================================================================================================
|
||||||
|
|
||||||
// ~/esp-idf/components/bt/bluedroid/api/include/esp_spp_api.h
|
// ~/esp-idf/components/bt/bluedroid/api/include/esp_spp_api.h
|
||||||
|
@ -742,6 +753,17 @@ esp_err_t OLED_Init(uint8_t DispIdx)
|
||||||
i2c_cmd_link_delete(cmd);
|
i2c_cmd_link_delete(cmd);
|
||||||
return espRc; }
|
return espRc; }
|
||||||
|
|
||||||
|
esp_err_t OLED_DisplayON(uint8_t ON, uint8_t DispIdx)
|
||||||
|
{ i2c_cmd_handle_t cmd = i2c_cmd_link_create();
|
||||||
|
i2c_master_start(cmd);
|
||||||
|
i2c_master_write_byte(cmd, ((OLED_I2C_ADDR+DispIdx)<<1) | I2C_MASTER_WRITE, true);
|
||||||
|
i2c_master_write_byte(cmd, OLED_CONTROL_BYTE_CMD_STREAM, true);
|
||||||
|
i2c_master_write_byte(cmd, OLED_CMD_DISPLAY_OFF+ON, true);
|
||||||
|
i2c_master_stop(cmd);
|
||||||
|
esp_err_t espRc = i2c_master_cmd_begin(I2C_BUS, cmd, 10);
|
||||||
|
i2c_cmd_link_delete(cmd);
|
||||||
|
return espRc; }
|
||||||
|
|
||||||
esp_err_t OLED_SetContrast(uint8_t Contrast, uint8_t DispIdx)
|
esp_err_t OLED_SetContrast(uint8_t Contrast, uint8_t DispIdx)
|
||||||
{ i2c_cmd_handle_t cmd = i2c_cmd_link_create();
|
{ i2c_cmd_handle_t cmd = i2c_cmd_link_create();
|
||||||
i2c_master_start(cmd);
|
i2c_master_start(cmd);
|
||||||
|
@ -874,6 +896,62 @@ void LED_TimerCheck(uint8_t Ticks)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Button_SleepRequest = 0;
|
||||||
|
|
||||||
|
const int8_t Button_FilterTime = 20; // [ms]
|
||||||
|
const int8_t Button_FilterThres = Button_FilterTime/2;
|
||||||
|
static int8_t Button_Filter=(-Button_FilterTime);
|
||||||
|
|
||||||
|
void Sleep(void)
|
||||||
|
{
|
||||||
|
// #ifdef PIN_PERIPH_RST
|
||||||
|
// gpio_set_level(PIN_PERIPH_RST, 0);
|
||||||
|
// #endif
|
||||||
|
#ifdef PIN_GPS_ENA
|
||||||
|
gpio_set_level(PIN_GPS_ENA, 0);
|
||||||
|
#endif
|
||||||
|
esp_light_sleep_start();
|
||||||
|
Button_SleepRequest = 0;
|
||||||
|
// #ifdef PIN_PERIPH_RST
|
||||||
|
// gpio_set_level(PIN_PERIPH_RST, 0);
|
||||||
|
//
|
||||||
|
// gpio_set_level(PIN_PERIPH_RST, 1);
|
||||||
|
// #endif
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t Button_PressTime=0; // [ms] counts for how long the button is kept pressed
|
||||||
|
void Button_keptPressed(uint8_t Ticks)
|
||||||
|
{ Button_PressTime+=Ticks;
|
||||||
|
Button_SleepRequest = Button_PressTime>=4000; } // [ms] setup SleepRequest if button pressed for >= 4sec
|
||||||
|
|
||||||
|
void Button_keptReleased(uint8_t Ticks)
|
||||||
|
{
|
||||||
|
if(Button_PressTime)
|
||||||
|
{ Format_String(CONS_UART_Write, "Button released:");
|
||||||
|
Format_UnsDec(CONS_UART_Write, Button_PressTime);
|
||||||
|
Format_String(CONS_UART_Write, "\n");
|
||||||
|
if(Button_SleepRequest)
|
||||||
|
{ Format_String(CONS_UART_Write, "Sleep in 1 sec\n");
|
||||||
|
vTaskDelay(1000);
|
||||||
|
Sleep(); }
|
||||||
|
}
|
||||||
|
Button_PressTime=0; }
|
||||||
|
|
||||||
|
void Button_TimerCheck(uint8_t Ticks)
|
||||||
|
{
|
||||||
|
#ifdef PIN_BUTTON
|
||||||
|
if(Button_isPressed())
|
||||||
|
{ Button_Filter+=Ticks; if(Button_Filter>Button_FilterTime) Button_Filter=Button_FilterTime;
|
||||||
|
if(Button_Filter>=Button_FilterThres) { Button_keptPressed(Ticks); }
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{ Button_Filter-=Ticks; if(Button_Filter<(-Button_FilterTime)) Button_Filter=(-Button_FilterTime);
|
||||||
|
if(Button_Filter<=(-Button_FilterThres)) { Button_keptReleased(Ticks); }
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
extern "C"
|
extern "C"
|
||||||
void vApplicationIdleHook(void) // when RTOS is idle: should call "sleep until an interrupt"
|
void vApplicationIdleHook(void) // when RTOS is idle: should call "sleep until an interrupt"
|
||||||
|
@ -925,6 +1003,9 @@ void IO_Configuration(void)
|
||||||
LED_PCB_Dir();
|
LED_PCB_Dir();
|
||||||
LED_PCB_Off();
|
LED_PCB_Off();
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef PIN_BUTTON
|
||||||
|
Button_Dir();
|
||||||
|
#endif
|
||||||
|
|
||||||
RFM_IRQ_Dir();
|
RFM_IRQ_Dir();
|
||||||
RFM_RESET_Dir();
|
RFM_RESET_Dir();
|
||||||
|
@ -1050,16 +1131,6 @@ void IO_Configuration(void)
|
||||||
|
|
||||||
// esp_register_freertos_tick_hook(&vApplicationTickHook);
|
// esp_register_freertos_tick_hook(&vApplicationTickHook);
|
||||||
|
|
||||||
/*
|
|
||||||
#ifdef PIN_PERIPH_RST
|
|
||||||
gpio_set_level(PIN_PERIPH_RST, 0);
|
|
||||||
#endif
|
|
||||||
#ifdef PIN_GPS_ENA
|
|
||||||
gpio_set_level(PIN_GPS_ENA, 0);
|
|
||||||
#endif
|
|
||||||
esp_light_sleep_start();
|
|
||||||
*/
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ======================================================================================================
|
// ======================================================================================================
|
||||||
|
|
|
@ -117,6 +117,7 @@ void RFM_RESET(uint8_t On); // RF module reset
|
||||||
bool RFM_IRQ_isOn(void); // query the IRQ state
|
bool RFM_IRQ_isOn(void); // query the IRQ state
|
||||||
|
|
||||||
#ifdef WITH_OLED
|
#ifdef WITH_OLED
|
||||||
|
int OLED_DisplayON(uint8_t ON, uint8_t DispIdx=0);
|
||||||
int OLED_SetContrast(uint8_t Contrast, uint8_t DispIdx=0);
|
int OLED_SetContrast(uint8_t Contrast, uint8_t DispIdx=0);
|
||||||
int OLED_PutLine(uint8_t Line, const char *Text, uint8_t DispIdx=0);
|
int OLED_PutLine(uint8_t Line, const char *Text, uint8_t DispIdx=0);
|
||||||
#endif
|
#endif
|
||||||
|
@ -169,6 +170,9 @@ void LED_RX_Flash(uint8_t Time=100);
|
||||||
|
|
||||||
void LED_TimerCheck(uint8_t Ticks=1);
|
void LED_TimerCheck(uint8_t Ticks=1);
|
||||||
|
|
||||||
|
extern bool Button_SleepRequest;
|
||||||
|
void Button_TimerCheck(uint8_t Ticks=1);
|
||||||
|
|
||||||
void IO_Configuration(void); // Configure I/O
|
void IO_Configuration(void); // Configure I/O
|
||||||
|
|
||||||
int NVS_Init(void); // initialize non-volatile-storage in the Flash
|
int NVS_Init(void); // initialize non-volatile-storage in the Flash
|
||||||
|
|
|
@ -207,6 +207,9 @@ extern "C"
|
||||||
|
|
||||||
for( ; ; )
|
for( ; ; )
|
||||||
{
|
{
|
||||||
|
while(Button_SleepRequest)
|
||||||
|
{ TRX.WriteMode(RF_OPMODE_SLEEP);
|
||||||
|
vTaskDelay(100); }
|
||||||
|
|
||||||
uint32_t RxRssiSum=0; uint16_t RxRssiCount=0; // measure the average RSSI for lower frequency
|
uint32_t RxRssiSum=0; uint16_t RxRssiCount=0; // measure the average RSSI for lower frequency
|
||||||
do
|
do
|
||||||
|
|
Ładowanie…
Reference in New Issue