Edgent data consumption

hello again, is it normal for blynk edgent to consume 25 gigabytes per month with two esp 32 and 5 digital inputs and one analog input?.
It’s that I have a gsm router and the consumption data is too high. Is there a way to fix it by extending the reading time every 5 seconds for example.
and in which edgent tab this time data can be modified.
thank you very much from now on.

Thats a lot of data !!

I have never seen such huge data being used by ESP32 or ESP8266.

You can change the timer interval to 5sec or more to send data. But i guess something else is eating up your data and not the ESP32.

Post your code properly formatted with ( ``` ) triple backticks. Lets see if something really eating up the data.

Will your device be connected to the cloud al the time or will there be any disconnects? I am asking this because your void loop is not looking good in terms of blynk.

Read this

Https://docs.blynk.io/en/legacy-platform/legacy-articles/keep-your-void-loop-clean

I am sure this particular device is not consuming all the data you mentioned. If you are streaming video or sending pictures, that may consume a bit of data. But the code you have mentioned doesn’t do that.

Have you connected any other devices to the same wifi network?

There are only those two devices connected to the network, they do not send any images, but I will look at it more carefully to see if the measures I have taken were wrong. thanks for your help. And I’ll report if I missed something.

In your previous topic about this project you said…

and clearly that isn’t the case.

As far as the data consumption is concerned, have you been using Blynk.Air to ship code updates to the devices?
And, if you’ve only just discovered the SIM card has limitations to the data plan and changed this (as you said in the other topic) how can you have sensible monthly data consumption figures?

Pete.

1 Like

Good morning Pete, as you can see, I made some arrangements, the delays are minimal, I thought that’s what you were referring to, but well, I’ll see what else I can do since the code works fine, but I’ll have to refine it over time and I think that now it’s the least I have, I apologize if this was not the modification you thought. And to what you mean, I haven’t done blynk air uploads since the data plan that I have, as you can see, is still very low.
Regarding the communication data, I have made an estimate based on an hour of traffic, it was consuming around 10kb/s and doing the math if this is continuous and we add a little more data becomes 25gb per month between the two devices and I plan to put 40 in the factory.
In any case, as I told my partner, I have to make a stricter statement about consumption since I have based myself in a short time.
The fact is that they have told me that the gsm card is 10gb and it no longer has it, it is not normal that 10gb have been consumed, it seems excessive to me, imagine when there are 40!!!
In any case, I will share my experiences. If something occurs to you please my eyes and ears are open.
Thank you very much for helping me as always, greetings from Spain (Madrid).

Your code will be fixed when your void loop looks like this…

void loop()
{
  BlynkEdgent.run();
  timer.run();
}

and millis() and delay() don’t appear anywhere in your code (other than ones that were part of the Edgent example).

If you do that then I think you’re going to run into problems with event limits, as these are per template, and you’ll presumably be using one template for all of your devices (and will have limited templates in your subscription anyway).

Personally, I’d say that this sounds like a perfect case where Node-Red and MQTT could be used, with Node-Red acting as the gateway connecting the system to Blynk.

Does your factory have any internet access, maybe in an office, that could be used instead of GSM?

Pete.

Good Pete, my factory has Wi-Fi but the problem is that they won’t let me access it since it’s internal and you can’t leave the factory, due to hackers, and I’m considering putting a gsm card with unlimited movistar data that has a lot of coverage, do you think Would this work,
or would it be another added problem. I am studying in depth your article that you mentioned to me about the timers,
te problem is that I am a bit slow to learn and I need more time to correct the program but I promise that when I correct it you will see it and thanks for the advice you are giving me, all the best.
The NODE-RED thing I still don’t understand very much, I’ll look at it, but now I need these two devices to move forward.

I have planned to increase the subscription of devices up to 40 or more if necessary.

Most GSM providers don’t offer true unlimited data allowances, there is usually a “fair use” clause.
Also, some mobile data providers sometimes block Blynk data traffic. I don’t know if Movistar is one of these.

But, you seem to have misunderstood my question. I wasn’t asking if you have an internal WiFi system, I was asking if there is an internet connection into the building.

Whichever approach you take, it won’t affect the points I raised about event logging.

Pete.

Yes, there is an internet connection in the building but it is disabled as I told you because the computer does not allow access to the outside so the project would not work

This provider does offer this without limitation of data or speed, in any case when hiring it an agreement will have to be reached. one provider or another will end up giving up.

No, what you said was that there is an internal WiFi system that has no external access, which is different .

My approach would be to set-up an internal WiFi network that is just used for your IoT devices (which is effectively what you’ve done already) and instead of connecting this to the internet via a GSM modem connect it to the internet via a fibre modem.
This is actually more secure, and far more reliable (and probably cheaper) than a GSM connection.

Pete.

Oki, I’ll keep that in mind and see if I can request the fiber, that’s a good idea, thanks Pete, I’ll see. all the best

Also, for cellular devices it may have sense to keep device offline and only connect when the data update is available.

We see our clients mostly using HTTP API for cellular devices. This can significantly reduce data consumption.

So, you have 12 timers that are all trying to execute ar exactly the same time, every 1000ms, but you don’t have a device that is capable of multi-tasking.

I guess you didn’t read the “Staggering Times” part of my BlynkTimer guide.

Also, as I said before, I’d probably use interrupts rather than polling four switches. At the very least, you should combine all of your switch polling into one function, and give it a better name.

What is this piece of code meant to achieve?..

You seem to be sending temperature data to Blynk every second. Is this really necessary?
How is this data being used?
Would it make a significant difference if you changed this to every 10 seconds?

Pete.

Hello good mornig for everyone. In my code when I put an interrupt I get the following error and it restarts, I have put everything correctly.
esp32 is restarted,

09:31:03.226 -> 
09:31:03.226 -> Core  1 register dump:
09:31:03.226 -> PC      : 0x40090f9e  PS      : 0x00060a35  A0      : 0x8008f55a  A1      : 0x3ffbee2c  
09:31:03.226 -> A2      : 0x3ffd2af4  A3      : 0x3ffb8890  A4      : 0x00000004  A5      : 0x00060a23  
09:31:03.226 -> A6      : 0x00060a23  A7      : 0x00000001  A8      : 0x3ffb8890  A9      : 0x00000018  
09:31:03.226 -> A10     : 0x3ffb8890  A11     : 0x00000018  A12     : 0x3ffc729c  A13     : 0x00060a23  
09:31:03.226 -> A14     : 0x007bf698  A15     : 0x003fffff  SAR     : 0x00000018  EXCCAUSE: 0x00000006  
09:31:03.272 -> EXCVADDR: 0x00000000  LBEG    : 0x40089c50  LEND    : 0x40089c66  LCOUNT  : 0xffffffff  
09:31:03.272 -> Core  1 was running in ISR context:
09:31:03.272 -> EPC1    : 0x400f1d17  EPC2    : 0x00000000  EPC3    : 0x00000000  EPC4    : 0x00000000
09:31:03.272 -> 
09:31:03.272 -> 
09:31:03.272 -> Backtrace: 0x40090f9b:0x3ffbee2c |<-CORRUPTED
09:31:03.272 -> 
09:31:03.272 -> 
09:31:03.272 -> Core  0 register dump:
09:31:03.272 -> PC      : 0x4009112f  PS      : 0x00060435  A0      : 0x8009010b  A1      : 0x3ffb32e0  
09:31:03.272 -> A2      : 0x3ffbf698  A3      : 0xb33fffff  A4      : 0x0000abab  A5      : 0x00060423  
09:31:03.272 -> A6      : 0x00060423  A7      : 0x0000cdcd  A8      : 0x0000abab  A9      : 0xffffffff  
09:31:03.319 -> A10     : 0x3ffbef24  A11     : 0x3ffb342c  A12     : 0x000000e7  A13     : 0x0000a6f5  
09:31:03.319 -> A14     : 0x007bf698  A15     : 0x003fffff  SAR     : 0x00000017  EXCCAUSE: 0x00000006  
09:31:03.319 -> EXCVADDR: 0x00000000  LBEG    : 0x40089c50  LEND    : 0x40089c66  LCOUNT  : 0xffffffff  
09:31:03.319 -> 
09:31:03.319 -> 
09:31:03.319 -> Backtrace: 0x4009112c:0x3ffb32e0 0x40090108:0x3ffb3320 0x4008ddfa:0x3ffb3340 0x4008e2d6:0x3ffb3360 0x4010c62e:0x3ffb33a0 0x4010c942:0x3ffb33c0 0x4010db8f:0x3ffb33e0 0x4010f2ad:0x3ffb3400 0x400fd33b:0x3ffb3420
09:31:03.319 -> 
09:31:03.319 -> 
09:31:03.319 -> 
09:31:03.319 -> 
09:31:03.319 -> ELF file SHA256: abae7a8b2fe8b16f
09:31:03.366 -> 
09:31:03.507 -> Rebooting...
09:31:03.507 -> ets Jul 29 2019 12:21:46
09:31:03.507 -> 
09:31:03.507 -> rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
09:31:03.507 -> configsip: 0, SPIWP:0xee
09:31:03.507 -> clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
09:31:03.555 -> mode:DIO, clock div:1
09:31:03.555 -> load:0x3fff0030,len:1344
09:31:03.555 -> load:0x40078000,len:13836
09:31:03.555 -> load:0x40080400,len:3608
09:31:03.555 -> entry 0x400805f0
09:31:04.209 -> E (332) ledc: ledc_get_duty(739): LEDC is not init indent preformatted text by 4 spaces

Este es el fragmento de codigo que me da el fallo no se en que puedo estar cometiendo el error.
And this is the code of the program that I made with one of the signals to test the interruption but the

void IRAM_ATTR operario()
{

  llamadaoperario = digitalRead(12);//  12 LLAMADA OPERARIO ES U positivo LA SEÑAL ES DE ENTRADA
  if ( (llamadaoperario == HIGH) && ( k == 1) && (o == 0))
  {
    digitalWrite(luzboton, HIGH);
    Serial.println("se ha pulsado boton de llamada");
    Blynk.logEvent("llamaope");
    ledblynk1();
    o = 1;
  }
}



void setup()
{
  Serial.begin(115200);
  preference.begin("my-app", false);
  w = preference.getUInt("parcial", 0);
  z = preference.getUInt("fijo", 0);
  u8g2.begin();
  timer.setInterval(15000L, temperatura);
  timer.setInterval(10000L, ledblynk);//baliza roja
  timer.setInterval(8000L, aceite);
  timer.setInterval(6000L, ledblynk2);//nivel aceite
  timer.setInterval(7000L, contadorcero);
  timer.setInterval(3000L, conteo);
  timer.setInterval(2500L, ledblynk3);//conteo de cajas
  timer.setInterval(2000L, pantalla);
  timer.setInterval(1700L, baliza);
  timer.setInterval(900L, ledblynk1);//led lamada operario cada 900ms   
 ------- attachInterrupt(digitalPinToInterrupt(12), operario, RISING);
  timer.setInterval(600L, finalave);// se vigila cada 600ms
  timer.setTimeout(600, []() {
    timer.setTimer(1000L, logoser, 1);
  });

  BlynkEdgent.begin();
  pinMode(luzboton, OUTPUT);
  pinMode(14, INPUT_PULLDOWN);
  pinMode(12, INPUT_PULLDOWN);
  pinMode(32, INPUT_PULLDOWN);
  pinMode(33, INPUT_PULLDOWN);
  pinMode(4, INPUT_PULLDOWN);
}

I don’t know if it is because it does not run fast because it has to see other variables that it does not have, I need advice thanks for All the help,
I know that these are things that I should know.
As you can see, I have alternated the timers but I don’t know if it will be correct.
I think there is no encounter between them. If it were worth it, I would leave it that way, but I like interruptions better. all the best.

You need to sort-out the formatting of the information you’ve just posted, and post your full sketch, not just a snippet.

Pete.

I’m sorry, I didn’t put the quotes correctly

Hello good mornig for everyone. In my code when I put an interrupt I get the following error and it restarts, I have put everything correctly.
esp32 restarts,

09:31:03.226 -> 
09:31:03.226 -> Core  1 register dump:
09:31:03.226 -> PC      : 0x40090f9e  PS      : 0x00060a35  A0      : 0x8008f55a  A1      : 0x3ffbee2c  
09:31:03.226 -> A2      : 0x3ffd2af4  A3      : 0x3ffb8890  A4      : 0x00000004  A5      : 0x00060a23  
09:31:03.226 -> A6      : 0x00060a23  A7      : 0x00000001  A8      : 0x3ffb8890  A9      : 0x00000018  
09:31:03.226 -> A10     : 0x3ffb8890  A11     : 0x00000018  A12     : 0x3ffc729c  A13     : 0x00060a23  
09:31:03.226 -> A14     : 0x007bf698  A15     : 0x003fffff  SAR     : 0x00000018  EXCCAUSE: 0x00000006  
09:31:03.272 -> EXCVADDR: 0x00000000  LBEG    : 0x40089c50  LEND    : 0x40089c66  LCOUNT  : 0xffffffff  
09:31:03.272 -> Core  1 was running in ISR context:
09:31:03.272 -> EPC1    : 0x400f1d17  EPC2    : 0x00000000  EPC3    : 0x00000000  EPC4    : 0x00000000
09:31:03.272 -> 
09:31:03.272 -> 
09:31:03.272 -> Backtrace: 0x40090f9b:0x3ffbee2c |<-CORRUPTED
09:31:03.272 -> 
09:31:03.272 -> 
09:31:03.272 -> Core  0 register dump:
09:31:03.272 -> PC      : 0x4009112f  PS      : 0x00060435  A0      : 0x8009010b  A1      : 0x3ffb32e0  
09:31:03.272 -> A2      : 0x3ffbf698  A3      : 0xb33fffff  A4      : 0x0000abab  A5      : 0x00060423  
09:31:03.272 -> A6      : 0x00060423  A7      : 0x0000cdcd  A8      : 0x0000abab  A9      : 0xffffffff  
09:31:03.319 -> A10     : 0x3ffbef24  A11     : 0x3ffb342c  A12     : 0x000000e7  A13     : 0x0000a6f5  
09:31:03.319 -> A14     : 0x007bf698  A15     : 0x003fffff  SAR     : 0x00000017  EXCCAUSE: 0x00000006  
09:31:03.319 -> EXCVADDR: 0x00000000  LBEG    : 0x40089c50  LEND    : 0x40089c66  LCOUNT  : 0xffffffff  
09:31:03.319 -> 
09:31:03.319 -> 
09:31:03.319 -> Backtrace: 0x4009112c:0x3ffb32e0 0x40090108:0x3ffb3320 0x4008ddfa:0x3ffb3340 0x4008e2d6:0x3ffb3360 0x4010c62e:0x3ffb33a0 0x4010c942:0x3ffb33c0 0x4010db8f:0x3ffb33e0 0x4010f2ad:0x3ffb3400 0x400fd33b:0x3ffb3420
09:31:03.319 -> 
09:31:03.319 -> 
09:31:03.319 -> 
09:31:03.319 -> 
09:31:03.319 -> ELF file SHA256: abae7a8b2fe8b16f
09:31:03.366 -> 
09:31:03.507 -> Rebooting...

This is the code snippet that gives me the error. I don’t know where I could be making the mistake.
And this is the code of the program that I made with one of the signals to test the interrupt but the


//21 luz boton
//14 aceite bajo
//35 analogica entrada temperatura 10k a ,masa y potenciometro de 100k puesto a 21k
//4 baliza roja
//12 llamada operario
//32 conteo caja
//33 final de averia
//pantalla lcd 128x64 st 7920---------------
//BLK-GND
//BLA-3,3v
//RST-22
//PBS-GND
//E  -18
//R/W-23
//RS -5
//VCC-5v
//GND-GND
#define BLYNK_TEMPLATE_ID ""
#define BLYNK_DEVICE_NAME ""
#define BLYNK_FIRMWARE_VERSION        "0.1.0"
#define BLYNK_PRINT Serial
#include <Preferences.h>
//#define BLYNK_DEBUG
#define APP_DEBUG
#define USE_WROVER_BOARD
#include "BlynkEdgent.h"
#include <Arduino.h>
#include <U8g2lib.h>
#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif
unsigned long h;
int i = 0;
int j = 0;
int l = 0;
int n = 0;
int r = 0;
int k = 0;
int o = 0;
int q = 0;
int w = 0;
int x = 0;
int z = 0;
U8G2_ST7920_128X64_F_SW_SPI u8g2(U8G2_R0, /* clock=*/ 18, /* data=*/ 23, /* CS=*/ 5, /* reset=*/ 22); // ESP32 ACTUAL
int luzboton = 21;
int aceitedepo = 14;
int capacitiveValue = 100;
int threshold = 20;
unsigned long tiempo_guardado  ;
unsigned long tiempo_guardado1  ;
int llamadaoperario;
int finalaveria;
int bl ;//   BALIZA ROJA 
int ma = 0;
float temp = 35; //etiqueta para lectura anal�gica PARA SENSOR DE TEMPERAURA
int y = 0;
Preferences preference;

BLYNK_WRITE(V6) { //SENSOR MINIMO ACEITE DEL DEPOSITO esta asociada a la aplicacion atraves de V0 y V0 es correo
  int pinValue = param.asInt();//asocia pinValue a un entero en este caso es V0 que es pin 5 de wemos que D1
  digitalWrite(aceitedepo, pinValue);//V0 es correo
}
//-------------------------------------boleanos para los leds de la aplicacion.

BlynkTimer timer;
WidgetLED led3(V2);//ESTE ES EL LED DE LA BALIZA ROJA ES UN BOLEANO QUE VIGILA LA SEÑAL PARA CAMBIAR DE ESSTADO

boolean btnState = false;
void ledblynk()
{

  boolean isPressed = (digitalRead(4) == HIGH);

  if (isPressed != btnState) {
    if (isPressed) {
      led3.on();
      r = 1;
    } else {
      led3.off();
      r = 0;
    }
    btnState = isPressed;
  }
}
WidgetLED led4(V3);//ESTE ES EL LED DE LLAMADA DE OPERARIO ES UN BOLEANO QUE VIGILA LA SEÑAL PARA CAMBIAR DE ESSTADO

boolean btnState1 = false;
void ledblynk1()
{

  boolean isPressed = (digitalRead(12) == HIGH);

  if (isPressed != btnState1) {
    if (isPressed) {
      led4.on();
      k = 1;
    }
    btnState1 = isPressed;
  }
}
WidgetLED led5(V6);//ESTE ES EL LED DE NIVEL MINIMO DE DEPOSITO ES UN BOLEANO QUE VIGILA LA SEÑAL PARA CAMBIAR DE ESSTADO

boolean btnState2 = false;
void ledblynk2()
{

  boolean isPressed = (digitalRead(14) == HIGH);

  if (isPressed != btnState2) {
    if (isPressed) {
      led5.off();
      unsigned long tiempo = millis();
      tiempo_guardado = tiempo;
    } else {
      led5.on();
      q = 0;
    }
    btnState2 = isPressed;
  }
}

WidgetLED led6(V5);//ESTE ES EL LED de conteo de las cajas rodadas

boolean btnState3 = false;
void ledblynk3()
{
  unsigned long tiempo = millis();
  boolean isPressed = (digitalRead(32) == LOW);

  if (isPressed != btnState3) {
    if (isPressed) {
      led6.off();
    } else {
      led6.on();
      tiempo_guardado1 = tiempo;
      x = 1;
      delay(100);
    }
    btnState3 = isPressed;
  }
}
void temperatura()
{
  //++++++++++++++++++++++++++++++++++analogica de temperatura
  int pot;
  pot = analogRead(temp);
  y = map(pot, 0, 4095, 0, 100); //funci�n map para escalado
  Blynk.virtualWrite(V0, y);
  Serial.println(y);
  if ( y >= 80)
  {
    Serial.println("temperatura alta");
    Blynk.logEvent("tempalta");
  }
}
void logoser()
{
  //-----------------------------------------LOGO DE JOHN DEERE Y SERVEO
  u8g2.setFont(u8g2_font_lucasarts_scumm_subtitle_r_tf);
  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 46, 128, 64, 7);
  u8g2.drawStr(4, 60, "SERVEO    ");
  u8g2.drawStr(0, 80, "in association ");
  u8g2.drawStr(0, 100, "  JOHN DEERE  ");
  u8g2.sendBuffer();
  delay(10);
  u8g2.clearBuffer();
  u8g2.sendBuffer();

  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 44, 128, 64, 7);
  u8g2.drawStr(4, 58, "SERVEO     ");
  u8g2.drawStr(0, 78, "in association ");
  u8g2.drawStr(0, 98, "  JOHN DEERE  ");
  u8g2.sendBuffer();
  delay(10);
  u8g2.clearBuffer();
  u8g2.sendBuffer();

  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 42, 128, 64, 7);
  u8g2.drawStr(4, 56, "SERVEO    ");
  u8g2.drawStr(0, 76, "in association ");
  u8g2.drawStr(0, 96, "  JOHN DEERE  ");
  u8g2.sendBuffer();
  delay(10);
  u8g2.clearBuffer();
  u8g2.sendBuffer();


  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 40, 128, 64, 7);
  u8g2.drawStr(4, 54, "SERVEO    ");
  u8g2.drawStr(0, 74, "in association ");
  u8g2.drawStr(0, 94, "  JOHN DEERE  ");
  u8g2.sendBuffer();
  delay(10);
  u8g2.clearBuffer();
  u8g2.sendBuffer();

  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 38, 128, 64, 7);
  u8g2.drawStr(4, 52, "SERVEO    ");
  u8g2.drawStr(0, 72, "in association ");
  u8g2.drawStr(0, 92, "  JOHN DEERE  ");
  u8g2.sendBuffer();
  delay(10);
  u8g2.clearBuffer();
  u8g2.sendBuffer();

  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 36, 128, 64, 7);
  u8g2.drawStr(4, 50, "SERVEO    ");
  u8g2.drawStr(0, 70, "in association ");
  u8g2.drawStr(0, 90, "  JOHN DEERE  ");
  u8g2.sendBuffer();
  delay(10);
  u8g2.clearBuffer();
  u8g2.sendBuffer();

  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 34, 128, 64, 7);
  u8g2.drawStr(4, 48, "SERVEO     ");
  u8g2.drawStr(0, 68, "in association ");
  u8g2.drawStr(0, 88, "  JOHN DEERE  ");
  u8g2.sendBuffer();
  delay(10);
  u8g2.clearBuffer();
  u8g2.sendBuffer();

  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 32, 128, 64, 7);
  u8g2.drawStr(4, 46, "SERVEO   ");
  u8g2.drawStr(0, 66, "in association ");
  u8g2.drawStr(0, 86, "  JOHN DEERE  ");
  u8g2.sendBuffer();
  delay(10);
  u8g2.clearBuffer();
  u8g2.sendBuffer();

  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 30, 128, 64, 7);
  u8g2.drawStr(4, 44, "SERVEO    ");
  u8g2.drawStr(0, 64, "in association ");
  u8g2.drawStr(0, 84, "  JOHN DEERE  ");
  u8g2.sendBuffer();
  delay(10);
  u8g2.clearBuffer();
  u8g2.sendBuffer();

  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 28, 128, 64, 7);
  u8g2.drawStr(4, 42, "SERVEO    ");
  u8g2.drawStr(0, 62, "in association ");
  u8g2.drawStr(0, 82, "  JOHN DEERE  ");
  u8g2.sendBuffer();
  delay(10);
  u8g2.clearBuffer();
  u8g2.sendBuffer();

  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 26, 128, 64, 7);
  u8g2.drawStr(4, 40, "SERVEO   ");
  u8g2.drawStr(0, 60, "in association ");
  u8g2.drawStr(0, 80, "  JOHN DEERE  ");
  u8g2.sendBuffer();
  delay(10);
  u8g2.clearBuffer();
  u8g2.sendBuffer();

  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 24, 128, 64, 7);
  u8g2.drawStr(4, 38, "SERVEO   ");
  u8g2.drawStr(0, 58, "in association ");
  u8g2.drawStr(0, 78, "  JOHN DEERE  ");
  u8g2.sendBuffer();
  delay(10);
  u8g2.clearBuffer();
  u8g2.sendBuffer();

  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 22, 128, 64, 7);
  u8g2.drawStr(4, 36, "SERVEO    ");
  u8g2.drawStr(0, 56, "in association ");
  u8g2.drawStr(0, 76, "  JOHN DEERE  ");
  u8g2.sendBuffer();
  delay(10);
  u8g2.clearBuffer();
  u8g2.sendBuffer();


  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 20, 128, 64, 7);
  u8g2.drawStr(4, 34, "SERVEO    ");
  u8g2.drawStr(0, 54, "in association ");
  u8g2.drawStr(0, 74, "  JOHN DEERE  ");
  u8g2.sendBuffer();
  delay(10);
  u8g2.clearBuffer();
  u8g2.sendBuffer();

  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 18, 128, 64, 7);
  u8g2.drawStr(4, 32, "SERVEO    ");
  u8g2.drawStr(0, 52, "in association ");
  u8g2.drawStr(0, 72, "  JOHN DEERE  ");
  u8g2.sendBuffer();
  delay(10);
  u8g2.clearBuffer();
  u8g2.sendBuffer();

  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 16, 128, 64, 7);
  u8g2.drawStr(4, 30, "SERVEO    ");
  u8g2.drawStr(0, 50, "in association ");
  u8g2.drawStr(0, 70, "  JOHN DEERE  ");
  u8g2.sendBuffer();
  delay(10);
  u8g2.clearBuffer();
  u8g2.sendBuffer();

  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 14, 128, 64, 7);
  u8g2.drawStr(4, 28, "SERVEO    ");
  u8g2.drawStr(0, 48, "in association ");
  u8g2.drawStr(0, 68, "  JOHN DEERE  ");
  u8g2.sendBuffer();
  delay(10);
  u8g2.clearBuffer();
  u8g2.sendBuffer();


  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 12, 128, 64, 7);
  u8g2.drawStr(4, 26, "SERVEO     ");
  u8g2.drawStr(0, 46, "in association ");
  u8g2.drawStr(0, 66, "  JOHN DEERE  ");
  u8g2.sendBuffer();
  delay(10);
  u8g2.clearBuffer();
  u8g2.sendBuffer();
  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 10, 128, 64, 7);
  u8g2.drawStr(4, 24, "SERVEO    ");
  u8g2.drawStr(0, 44, "in association ");
  u8g2.drawStr(0, 64, "  JOHN DEERE  ");
  u8g2.sendBuffer();
  delay(10);
  u8g2.clearBuffer();
  u8g2.sendBuffer();

  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 8, 128, 64, 7);
  u8g2.drawStr(4, 22, "SERVEO     ");
  u8g2.drawStr(0, 42, "in association ");
  u8g2.drawStr(0, 62, "  JOHN DEERE  ");
  u8g2.sendBuffer();
  delay(10);
  u8g2.clearBuffer();
  u8g2.sendBuffer();
  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 6, 128, 64, 7);
  u8g2.drawStr(4, 20, "SERVEO    ");
  u8g2.drawStr(0, 40, "in association ");
  u8g2.drawStr(0, 60, "  JOHN DEERE  ");
  u8g2.sendBuffer();
  delay(10);
  u8g2.clearBuffer();
  u8g2.sendBuffer();

  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 4, 128, 64, 7);
  u8g2.drawStr(4, 18, "SERVEO    ");
  u8g2.drawStr(0, 38, "in association ");
  u8g2.drawStr(0, 58, "  JOHN DEERE  ");
  u8g2.sendBuffer();
  delay(10);
  u8g2.clearBuffer();
  u8g2.sendBuffer();
  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 2, 128, 64, 7);
  u8g2.drawStr(4, 16, "SERVEO     ");
  u8g2.drawStr(0, 36, "in association ");
  u8g2.drawStr(0, 56, "  JOHN DEERE  ");
  u8g2.sendBuffer();
  delay(10);
  u8g2.clearBuffer();
  u8g2.sendBuffer();
  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 0, 128, 64, 7);
  u8g2.drawStr(4, 14, "SERVEO    ");
  u8g2.drawStr(0, 34, "in association ");
  u8g2.drawStr(0, 54, "  JOHN DEERE  ");
  u8g2.sendBuffer();
  delay(1000);

  u8g2.setFont(u8g2_font_squeezed_b6_tr );
  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 0, 128, 64, 7);
  u8g2.drawStr(0, 14, " ANGEL PALACIOS");
  u8g2.drawStr(0, 34, " PATRICK KOLBUSZOWSKI ");
  u8g2.sendBuffer();

}
void IRAM_ATTR operario()
{

  llamadaoperario = digitalRead(12);//  12 LLAMADA OPERARIO ES U positivo LA SEÑAL ES DE ENTRADA
  if ( (llamadaoperario == HIGH) && ( k == 1) && (o == 0))
  {
    digitalWrite(luzboton, HIGH);
    Serial.println("se ha pulsado boton de llamada");
    Blynk.logEvent("llamaope");
    ledblynk1();
    o = 1;
  }
}

void finalave()
{
  finalaveria = digitalRead(33);
  if  ((finalaveria == HIGH) && (o == 1))
  {

    led4.off();
    Blynk.virtualWrite(V7, 33);
    Serial.println("se ha terminado la averia");
    Blynk.logEvent("finalaveria");
    o = 0;
    digitalWrite(luzboton, LOW);
  }
}
//----------------BALIZA ROJA
void baliza()
{
  bl = digitalRead(4);
  if ( (bl == HIGH) && (r == 0))
  {
    Serial.println("baliza roja encendida");
    Blynk.logEvent("balizaroja");
    ledblynk();
  }
}

//-----------------------señales de pantalla
void pantalla()
{
  h = digitalRead(14); // SENSOR DE ACEITE ES POSITIVO LA SEÑAL DE ENTRADA
  i = digitalRead(26); //  CONTEO DE PRUEBAS REALIZADAS
  j = digitalRead(12); //  LLAMADA OPERARIO ES un positivo LA SEÑAL ES DE ENTRADA
  l = digitalRead(4); //   BALIZA ROJA ACTIVA  LA SEÑAL DE ENTRADA ES positivo
  n = digitalRead(33); // final averia ES positivo LA SEÑAL DE ENTRADA
  //-----------------------------------DIBIJO DE CUADROS Y SEÑALES DE ENTRADA Y SALIDA
  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 0, 128, 10, 0);
  u8g2.setFont(u8g2_font_u8glib_4_hr);
  u8g2.drawStr(4, 7, "ENTRADAS Y SALIDAS ");
  u8g2.drawStr(92, 7, "ESTADO");
  u8g2.drawStr(4, 17, "SENSOR DE ACEITE.......");
  u8g2.drawStr(4, 25, "NUMERO DE RODAJES....");
  u8g2.drawStr(4, 33, "LLAMADA OPERARIO.....");
  u8g2.drawStr(4, 41, "BALIZA ROJA........");
  u8g2.drawStr(4, 49, "FINAL AVERIA.............");
  u8g2.drawStr(4, 59, "TEMPERATURA ACEITE");
  u8g2.drawRFrame(0, 9, 90, 55, 0);
  u8g2.drawRFrame(89, 0, 39, 64, 0);
  if (h == 0) {
    u8g2.setCursor(93, 17);
    u8g2.print("LLENO");
  }
  if (h != 0) {
    u8g2.setCursor(93, 17);
    u8g2.print("FALTA");
  }

  u8g2.setCursor(93, 25);
  u8g2.print(w);

  if (j == 0) {
    u8g2.setCursor(93, 33);
    u8g2.print("NO PULS");
  }
  if (j != 0) {
    u8g2.setCursor(93, 33);
    u8g2.print("PULSADO");
  }
  if (l != 0) {
    u8g2.setCursor(93, 41);
    u8g2.print("ACTIVA");
  }
  if (l == 0) {
    u8g2.setCursor(93, 41);
    u8g2.print("NO ACTV");
  }
  if (n != 0) {
    u8g2.setCursor(93, 49);
    u8g2.print("PULSADO");
  }
  if (n == 0) {
    u8g2.setCursor(93, 49);
    u8g2.print("NO PULS");
  }

  u8g2.setFont(u8g2_font_courB10_tf);
  u8g2.setCursor(100, 61);
  u8g2.print(y);
  u8g2.sendBuffer();
}
void contadorcero()
{
  //++++++++++++++++++++++++++++++++++resear contador dos botones pulsados a la vez pulsado 10 segundos
  capacitiveValue = touchRead(13);
  if (capacitiveValue < threshold ) {
    w = 0;
    preference.remove("parcial");
    Blynk.virtualWrite(V1, w);
    Serial.println("parcial a cero");
  }
}
void conteo()
{
  //--------------------------------------cuenta caja cada vez que se rueda 5 minutos seguidos para llevar preventivos en cuenta

  unsigned long tiempo = millis();
  int cuenta = digitalRead(32);//conteo cajas
  if ((cuenta == 1) && (tiempo - tiempo_guardado1 >= 300000) && (btnState3 == LOW) && (x == 1)) {

    preference.putUInt("parcial", w);
    w++;
    Blynk.virtualWrite(V1, w);
    preference.putUInt("fijo", z);
    z++;
    Blynk.virtualWrite(V8, z);
    x = 0;
    Serial.println("caja rodada ");

  }
}

void aceite()
{
  unsigned long tiempo = millis();
  if ((tiempo - tiempo_guardado >= 10000) && (btnState2 == 1) && (q == 0)) //envia a los 10 segundos de falta de aceite
  {
    q = 1;
    Serial.println("bajo  nivel de aceite");
    Blynk.logEvent("minimoaceite");
    ledblynk2();
  }
}
void setup()
{
  Serial.begin(115200);
  preference.begin("my-app", false);
  w = preference.getUInt("parcial", 0);
  z = preference.getUInt("fijo", 0);
  u8g2.begin();
  timer.setInterval(15000L, temperatura);
  timer.setInterval(10000L, ledblynk);//baliza roja
  timer.setInterval(8000L, aceite);
  timer.setInterval(6000L, ledblynk2);//nivel aceite
  timer.setInterval(7000L, contadorcero);
  timer.setInterval(3000L, conteo);
  timer.setInterval(2500L, ledblynk3);//conteo de cajas
  timer.setInterval(2000L, pantalla);
  timer.setInterval(1700L, baliza);
  timer.setInterval(900L, ledblynk1);//led lamada operario cada 900ms   
  attachInterrupt(digitalPinToInterrupt(12), operario, RISING);
  timer.setInterval(600L, finalave);// se vigila cada 600ms
  timer.setTimeout(600, []() {
    timer.setTimer(1000L, logoser, 1);
  });

  BlynkEdgent.begin();
  pinMode(luzboton, OUTPUT);
  pinMode(14, INPUT_PULLDOWN);
  pinMode(12, INPUT_PULLDOWN);
  pinMode(32, INPUT_PULLDOWN);
  pinMode(33, INPUT_PULLDOWN);
  pinMode(4, INPUT_PULLDOWN);
}
void loop() {
  BlynkEdgent.run();
  timer.run();
}````

I don’t know if it’s because it doesn’t run fast because it has to see other variables that it doesn’t have, I need advice thanks for all the help, I know what they are
things i should know
As you can see, I have alternated the timers but I don’t know if it will be correct.
I think there is no meeting between them. If it was worth it, I’d leave it like that, but I like interruptions better. all the best.

Okay. When you replace your snippet of code with the full sketch I’ll take a look.

Pete.

With this I want it to run only once at startup.
Is the message above correct?