Actualizar las particiones RainMaker en las placas ESP32

Recientemente, tuve un problema al intentar cargar código con la partición Rainmaker, logré resolverlo bajando la versión de la 3.1.3 a la 2.0.17, pero logré obtener el archivo que tiene todas las particiones y agregué la partición Rainmaker de esa versión 2.0.17 a el archivo de la nueva versión, pero no lo actualiza, sigue apareciendo Rainmaker 4M la de 4 M sin OTA y la de 8M.
El archivo donde aparecen las particiones en MacOS:
$HOME/Library/Arduino15/packages/esp32/hardware/esp32/3.1.3/boards.txt

El archivo donde aparecen las particiones en Windows:
%userprofile%\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\boards.txt

¿Cómo hago para que al seleccionar particiones aparezca la nueva que coloque en el archivo?
Al parecer está haciendo un caché de la vieja configuración, no sé como actualizar los cambios.
La placa que estoy usando es: ESP32 Dev Module

No es lo que pides pero por lo que comenta tu partición debería ajustarse a lo que este tutorial propone con particiones customizadas.

Se ve muy interesante, aunque no es lo que buscaba. Porque lo único que quiero es que tome la actualización que le hice al archivo.
Pero lo analizaré para ver si lo puedo implementar con Rainmaker.
Te lo agradezco.

Siii ya se que no es, pero si te orienta.
Tal vez te permita tener otra mirada.

Fijate que board.txt no se guarde también en alguna otra carpeta y los tome desde esa.

La verdad me tiene con un dolor de cabeza eso. :angry::angry::angry:.
La partición que usa como RainMaker 4MB de la versión de las placas 3.1.3 es la misma que la que usa en la versión 2.0.17 en la cual funciona pero el límite de carga es: 1966080 y en la versión de las placas esp32 donde funciona ósea de la 2.0.14 a la 2.0.17 el límite de carga es: 3145728.
Modifique el archivo boards.txt y deje la partición con la misma configuración que tenia en las versiones pasadas, es más hice que apreciera en el menú de particiones como RainMaker y NADA.
Ahora es peor, en la terminal solo se reinicia y se reinicia.
Este es el error si lo configuro como RainMaker 4MB no OTA:


No pasa de allí.

Sinceramente no conozco nada de Rainmaker, no puedo aportar nada más. :man_facepalming:

Porque no pones información links de Rainmaker, yo tampoco se nada del tema.

Por supuesto.
Proyecto:

Librería en Arduino:

Lista de YouTube para RainMaker con ESP-IDF:

RainMaker y Arduino IDE en español:

Explicación de RainMaker y Arduino IDE en Inglés:

Todos usan versiones antiguas del Arduino IDE.

Aquí la solución fue colocar la versión 2.0.17 de las placas esp32 en el administrador de placas.
No obstante, no es muy estable, solo funciona bien en la versión antigua de Arduino IDE, antes de las versiones 2.x:

Yo lo logré hacerlo funcionar sin problemas con el framework de ESP-IDF, pero la idea es usarlo con Arduino IDE, por su facilidad de uso.
Pero aun es la hora que no lo he logrado.

Esto me respondió ChatGPT, tal vez lo hayas intentado:

El problema que mencionas sobre la configuración de particiones y que no se actualicen al modificar el archivo boards.txt probablemente se deba a que Arduino IDE guarda una copia en caché de los archivos de configuración. Aquí tienes los pasos para asegurarte de que se reconozcan los cambios realizados en el archivo boards.txt:


Pasos para actualizar las particiones:

  1. Edita el archivo boards.txt correctamente:
  • Asegúrate de haber agregado correctamente la nueva configuración de partición en el archivo boards.txt bajo la sección de tu placa (esp32.name=ESP32 Dev Module o similar).
  • Verifica que los parámetros y el formato de la partición sean correctos y consistentes con las configuraciones ya existentes.
  1. Borra el caché de Arduino IDE:
  • En MacOS, borra el caché en la siguiente ruta:

bash

CopiarEditar

$HOME/Library/Arduino15
  • En Windows, borra el caché en esta ruta:

bash

CopiarEditar

%userprofile%\AppData\Local\Arduino15
  • Advertencia: Borra únicamente las carpetas relacionadas con el ESP32 (como packages/esp32) para evitar eliminar configuraciones importantes de otras placas.
  1. Reinicia Arduino IDE:
  • Después de borrar el caché, cierra y vuelve a abrir Arduino IDE para que cargue nuevamente las configuraciones desde el archivo actualizado boards.txt.
  1. Selecciona la nueva partición:
  • Ve a Herramientas > Particiones y verifica si aparece la nueva partición que agregaste.
  1. Verifica la configuración personalizada:
  • Si no aparece, revisa si hay algún error en la línea de configuración que agregaste al archivo boards.txt. Por ejemplo:

plaintext

CopiarEditar

esp32.menu.PartitionScheme.custom=Rainmaker Custom (4MB OTA)
esp32.menu.PartitionScheme.custom.build.partitions=rainmaker_custom
esp32.menu.PartitionScheme.custom.upload.maximum_size=3145728
  • Asegúrate de que el archivo de partición (rainmaker_custom.csv) esté presente en la carpeta de particiones (tools/partitions o ruta configurada).
  1. Prueba forzar la actualización manual:
  • Si los pasos anteriores no funcionan, fuerza la actualización manual del IDE eliminando y reinstalando el paquete ESP32 desde el gestor de tarjetas.Para hacerlo:
  • Ve a Herramientas > Placas > Gestor de tarjetas.
  • Busca "ESP32" y desinstala el paquete.
  • Reinstala la versión 3.1.3 y repite el proceso de edición.

Si sigues estos pasos y todavía tienes problemas, comparte el fragmento específico que añadiste al archivo boards.txt para ayudarte a verificarlo. :blush:

NOTA:
Desconocía el enfoque RainMaker y esta muy interesante.

Surbyte, mil gracias por tu gran aporte.
Ya lo había hecho, es más, logré poner la partición dentro del menú del Arduino IDE.
Pero lamentablemente así no se solucionó.

Por fin encontré el problema.
El gran problema son las versiones.
Resulta que la versión que funciona con el Arduino IDE 2.3.4 y la placa DOIT ESP32 DevKit V1 es la versión 2.0.17.
Hay algo muy importante y son las versiones.
Existen versiones específicas para cada módulo o placa de desarrollo.
Porque lamentablemente veo que las versiones de las placas ESP32 o el ESP32 Arduino Core están compiladas para módulo específico y es algo que no dicen. Pues lo normal es actualizar la versión para tener la última, pero NO, lo que debemos usar es la versión compilada para nuestro módulo para trabajar con RainMaker. Las últimas versiones como la 3.x son para los módulos ESP32 C6 y la 2.0.17 para la C3.
No podemos usar una versión que no sea compatible con nuestro módulo, así sea la última versión, también debemos estar pendiente de Python, a veces no es compatible, debemos probar las versiones, una versión anterior.

Este es el gran dolor de cabeza de estos tiempos.
MUCHO OJO!! y es lo primero que hay que ver.
Identificar fecha de la librería y bajar al core adecuado.

Ojo, hay grandes cambios entre las versiones 2.x y 3.x del core del ESP32 y toda la información está disponible en la documentación del core.
No es que cada versión es para determinado modelo de ESP, agrega los más nuevos pero justo con la v3 hubo un gran cambio en la API.
A lo que me refiero es que mucho código que compila perfectamente con la v2 no lo hace con la v3 sin importar cuál sea el ESP destino.
Seguramente esos cambios influyen en tu problema.
Te sugiero que revises la documentación de Espresiff

Yo uso un ESP32S3 con partición personalizada creando el archivo partitions.csv en la misma carpeta del sketch y seleccionando Custom en el IDE.

Yo hice una partición personalizada y aun así no funcionó. Porque estaba usando la versión 3.1.3 del ESP32 para arduino.
El mío tiene el chip ESP32-D0WD-V3. Es un módulo ESP32-WROOM-32D.

Ese es el asunto estas librerías, por ejemplo:
RMaker.h viene incorporada con el Core de ESP32.
Por eso toca saber cual es el Core adecuado para la placa.

Ya me pongo en esa tarea, de revisar los cambios en las API, pero, yo tomé el ejemplo que traía el Core del ESP32 versión 3.1.3 "RMakerSwitch" y nunca funcionó con el módulo ESP-WROOM-32D.
Me tocó bajar al Core 2.0.17 para que funcione y más abajo tampoco funciona porque presenta incompatibilidad con la versión de Python.
Revisaré el ejemplo si tiene algún cambio en la API o si están usando el mismo ejemplo que usaban en la versión 2.0.17, en la versión 3.1.3. De ser así, allí está el error, de lo contrario es porque compilan esas versiones para algunas placas.
Ya me pongo a la tarea de revisar el código y le informaré.

Apuesto a qué si y que tal como dices el error parte de allí.

Ya revisé el código, no veo nada que no se ajuste a la nueva versión. Debería funcionar, pero no lo hace, en cuanto a la partición la modifiqué para que quede igual a la que se usa en la versión: 2.0.17 y tampoco funcionó así, por lo que veo solo funciona con esa o con las versiones anteriores a la 3.0.
Con las placas que lleven estos módulos ESP-WROOM-32D o ESP-WROOM-32 funciona perfectamente el Core 2.0.17 de allí para arriba no funciona en estas placas.
Abriré un nuevo post preguntando, si alguien lo logró.
Gracias eternamente por su gran colaboración.

He logrado usar RainMaker con el Arduino IDE 2 pero usando el esp32 Core versión: 2.0.17
Pero no he logrado ejecutar el programa RMakerSwitch con el Arduino IDE 2 usando el esp32 Core versión: 3.1.3
Me informaron que podía ser algo relacionado con la nueva API, pero realmente no hay nada de la nueva versión de la API que afecte ese programa.

Aclaro usando placas que tengan los módulos:

  • ESP-WROOM-32
  • ESP-WROOM-32D
// This example demonstrates the ESP RainMaker with a standard Switch device.
#include "RMaker.h"
#include "WiFi.h"
#include "WiFiProv.h"
#include "AppInsights.h"

#define DEFAULT_POWER_MODE true
const char *service_name = "PROV_1234";
const char *pop = "abcd1234";

// GPIO for push button
#if CONFIG_IDF_TARGET_ESP32C3
static int gpio_0 = 9;
static int gpio_switch = 7;
#else
// GPIO for virtual device
static int gpio_0 = 0;
static int gpio_switch = 2;
#endif

/* Variable for reading pin status*/
bool switch_state = true;

// The framework provides some standard device types like switch, lightbulb,
// fan, temperaturesensor.
static Switch *my_switch = NULL;

void sysProvEvent(arduino_event_t *sys_event)
{
    switch (sys_event->event_id) {
    case ARDUINO_EVENT_PROV_START:
#if CONFIG_IDF_TARGET_ESP32S2
        Serial.printf("\nProvisioning Started with name \"%s\" and PoP \"%s\" on SoftAP\n",
                      service_name, pop);
        printQR(service_name, pop, "softap");
#else
        Serial.printf("\nProvisioning Started with name \"%s\" and PoP \"%s\" on BLE\n",
                      service_name, pop);
        printQR(service_name, pop, "ble");
#endif
        break;
    case ARDUINO_EVENT_PROV_INIT:
        wifi_prov_mgr_disable_auto_stop(10000);
        break;
    case ARDUINO_EVENT_PROV_CRED_SUCCESS:
        wifi_prov_mgr_stop_provisioning();
        break;
    default:;
    }
}

void write_callback(Device *device, Param *param, const param_val_t val,
                    void *priv_data, write_ctx_t *ctx)
{
    const char *device_name = device->getDeviceName();
    const char *param_name = param->getParamName();

    if (strcmp(param_name, "Power") == 0) {
        Serial.printf("Received value = %s for %s - %s\n",
                      val.val.b ? "true" : "false", device_name, param_name);
        switch_state = val.val.b;
        (switch_state == false) ? digitalWrite(gpio_switch, LOW)
        : digitalWrite(gpio_switch, HIGH);
        param->updateAndReport(val);
    }
}

void setup()
{
    Serial.begin(115200);
    pinMode(gpio_0, INPUT);
    pinMode(gpio_switch, OUTPUT);
    digitalWrite(gpio_switch, DEFAULT_POWER_MODE);

    Node my_node;
    my_node = RMaker.initNode("ESP RainMaker Node");

    // Initialize switch device
    my_switch = new Switch("Interruptor", &gpio_switch);
    if (!my_switch) {
        return;
    }
    // Standard switch device
    my_switch->addCb(write_callback);

    // Add switch device to the node
    my_node.addDevice(*my_switch);

    // This is optional
    RMaker.enableOTA(OTA_USING_TOPICS);
    // If you want to enable scheduling, set time zone for your region using
    // setTimeZone(). The list of available values are provided here
    // https://rainmaker.espressif.com/docs/time-service.html
    //  RMaker.setTimeZone("Asia/Shanghai");
    //  Alternatively, enable the Timezone service and let the phone apps set the
    //  appropriate timezone
    RMaker.enableTZService();

    RMaker.enableSchedule();

    RMaker.enableScenes();
    // Enable ESP Insights. Insteads of using the default http transport, this function will
    // reuse the existing MQTT connection of Rainmaker, thereby saving memory space.
    initAppInsights();

    RMaker.enableSystemService(SYSTEM_SERV_FLAGS_ALL, 2, 2, 2);

    RMaker.start();

    WiFi.onEvent(sysProvEvent);
#if CONFIG_IDF_TARGET_ESP32S2
    WiFiProv.beginProvision(WIFI_PROV_SCHEME_SOFTAP, WIFI_PROV_SCHEME_HANDLER_NONE,
                            WIFI_PROV_SECURITY_1, pop, service_name);
#else
    WiFiProv.beginProvision(WIFI_PROV_SCHEME_BLE, WIFI_PROV_SCHEME_HANDLER_FREE_BTDM,
                            WIFI_PROV_SECURITY_1, pop, service_name);
#endif
}

void loop()
{
    if (digitalRead(gpio_0) == LOW) {  // Push button pressed

        // Key debounce handling
        delay(100);
        int startTime = millis();
        while (digitalRead(gpio_0) == LOW) {
            delay(50);
        }
        int endTime = millis();

        if ((endTime - startTime) > 10000) {
            // If key pressed for more than 10secs, reset all
            Serial.printf("Reset to factory.\n");
            RMakerFactoryReset(2);
        } else if ((endTime - startTime) > 3000) {
            Serial.printf("Reset Wi-Fi.\n");
            // If key pressed for more than 3secs, but less than 10, reset Wi-Fi
            RMakerWiFiReset(2);
        } else {
            // Toggle device state
            switch_state = !switch_state;
            Serial.printf("Toggle State to %s.\n", switch_state ? "true" : "false");
            if (my_switch) {
                my_switch->updateAndReportParam(ESP_RMAKER_DEF_POWER_NAME,
                                                switch_state);
            }
            (switch_state == false) ? digitalWrite(gpio_switch, LOW)
            : digitalWrite(gpio_switch, HIGH);
        }
    }
    delay(100);
}