Hello,
I discover esp32, ntp, ws2812.
I find a sketch working fine, but it use delay(1000).
Now I want blink color when sec or min or hour have same pixel.
I tryed with timer.
It work fine about Serial.print("information");
But when I use show() with timer esp32 reset.
What is wrong ?
This is my code
String compilation = "Compiled: " __DATE__ ", " __TIME__ ", " __VERSION__;
String nom_fichier = __FILE__ ;
#include <Adafruit_NeoPixel.h>
#define LED_PIN 15
#define LED_COUNT 60
Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);
#include <WiFi.h>
const char* ssid = "ssid";
const char* password = "password";
const char* ntpServer = "fr.pool.ntp.org";
struct tm mytime;
hw_timer_t *My_timer = NULL;
byte locsec = 99;
byte sequen = 88;
//###############################################################################
void verif_ws2812()
{ Serial.println("init ws2812");
uint led_color[] = { 0 ,strip.Color(255, 0, 0),strip.Color( 0, 255, 0),strip.Color(255, 255, 255), 0 };
strip.fill(0,0,strip.numPixels());
strip.show();
strip.setBrightness(10);
for(byte i = 0; i<5;i++)
{ strip.fill( led_color[i], 0 ,strip.numPixels());
strip.show(); delay(500);
}
}
//############################################################################
void IRAM_ATTR onTimer()
{/**/
Serial.println("########################### IRAM_ATTR onTimer() ");
if(!getLocalTime(&mytime))
{ Serial.println("Could not obtain time info - IRAM_ATTR ");
return;
}
if(locsec != mytime.tm_sec)
{
Serial.println(" - - - - - - - - - ");
Serial.println(asctime(&mytime));
locsec = mytime.tm_sec ;
sequen = 0;
}
Serial.println(" o o o o o o o o o o ");
Serial.print(&mytime, "%A %d %B %Y %H:%M:%S | ");
Serial.println(sequen++) ;
Serial.println(" 0-0-0-0-0-0-0-0-0-0 ");
Serial.println(asctime(&mytime));
strip.setPixelColor(locsec, strip.Color(0, 0, 0));
locsec = mytime.tm_sec ;
strip.setPixelColor(locsec, strip.Color(0, 0, 255));
Serial.println("########################### IRAM_ATTR onTimer() - before strip.show() ");
strip.show();
Serial.println("########################### IRAM_ATTR onTimer() - after strip.show() ");
}
//////////////////////////////////////////////////////////////////////////////
void setup()
{
Serial.begin(115200);
Serial.println(compilation);
Serial.println(nom_fichier);
strip.begin();
verif_ws2812(); // strip.show() in this function work fine at this time
WiFi.begin(ssid, password);
Serial.print("Connecting...");
while (WiFi.status() != WL_CONNECTED)
{ delay(500);
Serial.print("...");
}
Serial.print("\nConnected with success ");
Serial.print("IP locale : ");
Serial.println(WiFi.localIP());
My_timer = timerBegin(1, 80, true);
timerAttachInterrupt(My_timer, &onTimer, true);
timerAlarmWrite(My_timer, 333000, true);
timerAlarmEnable(My_timer);
configTzTime("CET-1CEST,M3.5.0/2,M10.5.0/3", ntpServer); // summer time for France
}
//////////////////////////////////////////////////////////////////////////////
void loop()
{ // here strip.show() work fine with delay(1000), but I want use timer
}
and this is serial monitor
Compiled: Sep 23 2022, 14:32:28, 5.2.0
file path an name.ino
init ws2812
Connecting...........................
Connected with success IP locale : 190.123.0.120
########################### IRAM_ATTR onTimer()
- - - - - - - - -
Fri Sep 23 11:43:58 2022
o o o o o o o o o o
Friday 23 September 2022 11:43:58 | 0
0-0-0-0-0-0-0-0-0-0
Fri Sep 23 11:43:58 2022
########################### IRAM_ATTR onTimer() - before strip.show()
abort() was called at PC 0x400873d1 on core 1
ELF file SHA256: 0000000000000000
Backtrace: 0x40088f9c:0x3ffbfd30 0x40089219:0x3ffbfd50 0x400873d1:0x3ffbfd70 0x400874fd:0x3ffbfda0 0x40130ba6:0x3ffbfdc0 0x400d0706:0x3ffbfdf0 0x400d091d:0x3ffbfe50 0x400811a6:0x3ffbfe70 0x400814f5:0x3ffbfe90 0x400878e5:0x3ffbfeb0 0x400d1e0d:0x3ffb1fb0 0x4008acde:0x3ffb1fd0
Rebooting...
Compiled: Sep 23 2022, 14:32:28, 5.2.0
file path an name.ino
init ws2812
Connecting...........................
Connected with success IP locale : 190.123.0.120
########################### IRAM_ATTR onTimer()
- - - - - - - - -
Fri Sep 23 11:44:05 2022
o o o o o o o o o o
Friday 23 September 2022 11:44:05 | 0
0-0-0-0-0-0-0-0-0-0
Fri Sep 23 11:44:05 2022
########################### IRAM_ATTR onTimer() - before strip.show()
abort() was called at PC 0x400873d1 on core 1
ELF file SHA256: 0000000000000000
Backtrace: 0x40088f9c:0x3ffbfd30 0x40089219:0x3ffbfd50 0x400873d1:0x3ffbfd70 0x400874fd:0x3ffbfda0 0x40130ba6:0x3ffbfdc0 0x400d0706:0x3ffbfdf0 0x400d091d:0x3ffbfe50 0x400811a6:0x3ffbfe70 0x400814f5:0x3ffbfe90 0x400878e5:0x3ffbfeb0 0x400d1e04:0x3ffb1fb0 0x4008acde:0x3ffb1fd0
Rebooting...
but I comment strip.show()
in timer function
Serial.println("########################### IRAM_ATTR onTimer() - before strip.show() ");
// strip.show();
Serial.println("########################### IRAM_ATTR onTimer() - after strip.show() ");
sketch work fine ...
this is serial monitor
Compiled: Sep 23 2022, 14:37:12, 5.2.0
file path an name.ino
init ws2812
Connecting...........................
Connected with success IP locale : 190.123.0.120
########################### IRAM_ATTR onTimer()
- - - - - - - - -
Fri Sep 23 14:38:40 2022
o o o o o o o o o o
Friday 23 September 2022 14:38:40 | 0
0-0-0-0-0-0-0-0-0-0
Fri Sep 23 14:38:40 2022
########################### IRAM_ATTR onTimer() - before strip.show()
########################### IRAM_ATTR onTimer() - after strip.show()
########################### IRAM_ATTR onTimer()
o o o o o o o o o o
Friday 23 September 2022 14:38:40 | 1
0-0-0-0-0-0-0-0-0-0
Fri Sep 23 14:38:40 2022
########################### IRAM_ATTR onTimer() - before strip.show()
########################### IRAM_ATTR onTimer() - after strip.show()
########################### IRAM_ATTR onTimer()
o o o o o o o o o o
Friday 23 September 2022 14:38:40 | 2
0-0-0-0-0-0-0-0-0-0
Fri Sep 23 14:38:40 2022
########################### IRAM_ATTR onTimer() - before strip.show()
########################### IRAM_ATTR onTimer() - after strip.show()
########################### IRAM_ATTR onTimer()
- - - - - - - - -
Fri Sep 23 14:38:41 2022
o o o o o o o o o o
Friday 23 September 2022 14:38:41 | 0
0-0-0-0-0-0-0-0-0-0
Fri Sep 23 14:38:41 2022
########################### IRAM_ATTR onTimer() - before strip.show()
########################### IRAM_ATTR onTimer() - after strip.show()
########################### IRAM_ATTR onTimer()
o o o o o o o o o o
Friday 23 September 2022 14:38:41 | 1
0-0-0-0-0-0-0-0-0-0
Fri Sep 23 14:38:41 2022
########################### IRAM_ATTR onTimer() - before strip.show()
########################### IRAM_ATTR onTimer() - after strip.show()
########################### IRAM_ATTR onTimer()
o o o o o o o o o o
Friday 23 September 2022 14:38:41 | 2
0-0-0-0-0-0-0-0-0-0
Fri Sep 23 14:38:41 2022
########################### IRAM_ATTR onTimer() - before strip.show()
########################### IRAM_ATTR onTimer() - after strip.show()
Thank you for yours answers.
PS: I do not want use millis() because bug after 47 days.