Hi, I’m using wireless stick light. My program goes into a deep sleep every 10 Seconds and wakes by 2 sources,
1- Timer source: This is the Normal mode.
2- Touch sensor connected to GPIO pin 2
The program works fine with The LoRaWAN & the Touch sensor wakes the µController. Now i want to add a new feature which is touching the Touch Sensor 2 times will drive the program into a subroutine. I managed to do that by the recommended way that Esspressif uses (by interrupts on the GPIO) as follow:
static void TTP223_Setup(void)
{
Serial.println("TTP223_Setup ");
// Define the LED
gpio_pad_select_gpio(LED_PIN);
gpio_set_direction(LED_PIN, GPIO_MODE_OUTPUT);
gpio_config_t io_conf
{
io_conf.pin_bit_mask = GPIO_TOUCH_PIN_SEL, // Pin bitMask
io_conf.mode = GPIO_MODE_INPUT,
io_conf.pull_up_en = GPIO_PULLUP_ENABLE,
io_conf.pull_down_en = GPIO_PULLDOWN_DISABLE,
io_conf.intr_type = GPIO_INTR_POSEDGE, // GPIO_INTR_NEGEDGE
};
gpio_config (&io_conf);
gpio_install_isr_service (ESP_INTR_FLAG_DEFAULT);
gpio_isr_handler_add (Touch_PIN, Touch_ISR_Handler, (void *) Touch_PIN); // (void *)
Touch_PIN
}
The Interrupt handler is :
static void IRAM_ATTR Touch_ISR_Handler (void * Touch)
{
Serial.print("Triggered by ");
Serial.println((int)Touch);
WU_R = Touch_Mode;
Touch_Count++;
if(Touch_Count <= 1) // 1st Touch
{
Serial.print(" 1st Touch..Start To2_Timer ");
}
else // 2nd Touch before Timer Time_Out ...otherwise, reset Touch_Count
{
Serial.print(" 2nd Touch ");
// DeepSleep_Disabler = true; // Stop Deep Sleep
}
}
Once i activate the TTP223_Setup function on the setup loop the program crashes:
rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 188777542, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0018,len:4
load:0x3fff001c,len:1044
load:0x40078000,len:10124
load:0x40080400,len:5828
entry 0x400806a8
TTP223_Setup
ESP32 MCU init...
ESP32 MCU inited OK!
Guru Meditation Error: Core 1 panic'ed (LoadProhibited). Exception was unhandled.
Core 1 register dump:
PC : 0x40159daf PS : 0x00060b30 A0 : 0x800e309c A1 : 0x3ffb1eb0
A2 : 0x00000000 A3 : 0x00000000 A4 : 0x4008133c A5 : 0x00000000
A6 : 0x3ffc24cc A7 : 0x00000000 A8 : 0x80143ba6 A9 : 0x3ffb1e60
A10 : 0x00000105 A11 : 0x0000040e A12 : 0x00000000 A13 : 0x00000000
A14 : 0x4008133c A15 : 0x00000000 SAR : 0x0000001d EXCCAUSE: 0x0000001c
EXCVADDR: 0x00000000 LBEG : 0x400014fd LEND : 0x4000150d LCOUNT : 0xffffffff
ELF file SHA256: 0000000000000000
Backtrace: 0x40159daf:0x3ffb1eb0 0x400e3099:0x3ffb1ed0 0x400e30f5:0x3ffb1f00 0x400d5ee4:0x3ffb1f20 0x400d1f59:0x3ffb1f50 0x400d2454:0x3ffb1f70 0x400e5272:0x3ffb1fb0 0x4008bd6a:0x3ffb1fd0
Rebooting...
ets Jun 8 2016 00:22:57
I Tested the same GPIO functions (Setup & Interrupt Handler) on different ESP32 (without LoRaWAN) and it works fine.
this is my setup loop:
void setup()
{
Serial_Setup();
Wire.begin();
TTP223_Setup();
LoRaWAN_Setup();
Wakeup_reason();
Serial.flush();
esp_sleep_enable_timer_wakeup( DL_P.Deep_Sleep_Time * uS_TO_S_FACTOR);
esp_sleep_enable_ext0_wakeup(Touch_PIN, Touch_Level);
}
commenting the TTP223_Setup(); The program works fine. Don’t know what is the issue here!?