Ir al contenido

Dimmer with ESP32 – ESP RainMaker Cloud platform + Mobile APP.

28 de marzo de 2025 por
Dimmer with ESP32 – ESP RainMaker Cloud platform + Mobile APP.
Administrator
| Sin comentarios aún

ESP RainMaker® is a complete system for building AIoT products with a minimal amount of code, empowering your team to develop and deploy secure, customized AIoT solutions. It covers all Espressif chips and modules, device firmware, voice-assistant integrations, phone apps and cloud backend. This helps you save a large investment in cloud, gain independence and focus on innovating your core-value offering.

In this Dimmer tutorial, we will introduce you to ESP RainMaker with ESP32 using Arduino IDE. Create Arduino code for dimming, upload to the microcontroller, and connect to the mobile APP. https://rainmaker.espressif.com/ 

Soporte integrado para la integración de Amazon Alexa & Google Assistant a través de skills y acciones de hogar inteligente. También puede crear sus propios skills personalizados.

Se ha incluido un sketch de ejemplo para un dimmer. Echemos un vistazo rápido al código que lo hace posible.

  1. //Este ejemplo demuestra ESP RainMaker con el dimmer
  2. #include "RMaker.h"
  3. #include "WiFi.h"
  4. #include "WiFiProv.h"
  5. #include <RBDdimmer.h> //Conexión del dimmer al microcontrolador y biblioteca Arduino. https://rocketcontroller.com/dimmer-connection-to-microcontroller-and-arduino-library-examples/
  6. #define DEFAULT_POWER_MODE true
  7. #define DEFAULT_DIMMER_LEVEL 50
  8. const char *service_name = "PROV_1234";
  9. const char *pop = "abcd1234";
  10. //GPIO para el botón pulsador
  11. #if CONFIG_IDF_TARGET_ESP32C3
  12. static int gpio_0 = 9;
  13. static int gpio_dimmer = 7;
  14. static int gpio_zerocross 5 // configuración de pines
  15. #else
  16. //GPIO para dispositivo virtual
  17. static int gpio_0 = 0;
  18. static int gpio_dimmer = 23;
  19. static int gpio_zerocross 5 // configuración de pines
  20. #endif
  21. dimmerLamp dimmer(gpio_dimmer, gpio_zerocross);
  22. bool dimmer_state = true;
  23. // El framework proporciona algunos tipos de dispositivos estándar como interruptor, bombilla, ventilador, sensor de temperatura.
  24. // Pero también puede definir dispositivos personalizados usando el objeto de clase base 'Device', como se muestra aquí
  25. static Device my_device("Dimmer", "custom.device.dimmer", &gpio_dimmer);
  26. void sysProvEvent(arduino_event_t *sys_event)
  27. {
  28. switch (sys_event->event_id) {
  29. case ARDUINO_EVENT_PROV_START:
  30. #if CONFIG_IDF_TARGET_ESP32S2
  31. Serial.printf("\nProvisioning Started with name \"%s\" and PoP \"%s\" on SoftAP\n", service_name, pop);
  32. printQR(service_name, pop, "softap");
  33. #else
  34. Serial.printf("\nProvisioning Started with name \"%s\" and PoP \"%s\" on BLE\n", service_name, pop);
  35. printQR(service_name, pop, "ble");
  36. #endif
  37. break;
  38. default:;
  39. }
  40. }
  41. void write_callback(Device *device, Param *param, const param_val_t val, void *priv_data, write_ctx_t *ctx)
  42. {
  43. const char *device_name = device->getDeviceName();
  44. const char *param_name = param->getParamName();
  45. if(strcmp(param_name, "Power") == 0) {
  46. Serial.printf("Received value = %s for %s - %s\n", val.val.b? "true" : "false", device_name, param_name);
  47. dimmer_state = val.val.b;
  48. (dimmer_state == false) ? dimmer.setPower(OFF) : dimmer.setPower(ON);
  49. param->updateAndReport(val);
  50. } else if (strcmp(param_name, "Level") == 0) {
  51. Serial.printf("\nReceived value = %d for %s - %s\n", val.val.i, device_name, param_name);
  52. param->updateAndReport(val);
  53. dimmer.setPower(val.val.i); // ATENUACIÓN
  54. }
  55. }
  56. void setup()
  57. {
  58. Serial.begin(115200);
  59. pinMode(gpio_0, INPUT);
  60. dimmer.begin(NORMAL_MODE, ON);
  61. Node my_node;
  62. my_node = RMaker.initNode("ESP RainMaker Node");
  63. //Crear dispositivo dimmer personalizado
  64. my_device.addNameParam();
  65. my_device.addPowerParam(DEFAULT_POWER_MODE);
  66. my_device.assignPrimaryParam(my_device.getParamByName(ESP_RMAKER_DEF_POWER_NAME));
  67. //Crear y agregar un parámetro de nivel personalizado
  68. Param level_param("Level", "custom.param.level", value(DEFAULT_DIMMER_LEVEL), PROP_FLAG_READ | PROP_FLAG_WRITE);
  69. level_param.addBounds(value(0), value(100), value(1));
  70. level_param.addUIType(ESP_RMAKER_UI_SLIDER);
  71. my_device.addParam(level_param);
  72. my_device.addCb(write_callback);
  73. //Agregar dispositivo dimmer personalizado al nodo
  74. my_node.addDevice(my_device);
  75. //Esto es opcional
  76. RMaker.enableOTA(OTA_USING_PARAMS);
  77. //Si desea habilitar la programación, establezca la zona horaria de su región usando setTimeZone().
  78. //La lista de valores disponibles se encuentra aquí https://rainmaker.espressif.com/docs/time-service.html
  79. // RMaker.setTimeZone("Asia/Shanghai");
  80. // Alternativamente, habilite el servicio de zona horaria y deje que las aplicaciones móviles establezcan la zona horaria apropiada
  81. RMaker.enableTZService();
  82. RMaker.enableSchedule();
  83. RMaker.start();
  84. WiFi.onEvent(sysProvEvent);
  85. #if CONFIG_IDF_TARGET_ESP32S2
  86. WiFiProv.beginProvision(WIFI_PROV_SCHEME_SOFTAP, WIFI_PROV_SCHEME_HANDLER_NONE, WIFI_PROV_SECURITY_1, pop, service_name);
  87. #else
  88. WiFiProv.beginProvision(WIFI_PROV_SCHEME_BLE, WIFI_PROV_SCHEME_HANDLER_FREE_BTDM, WIFI_PROV_SECURITY_1, pop, service_name);
  89. #endif
  90. }
  91. void loop()
  92. {
  93. if(digitalRead(gpio_0) == LOW) { //Botón pulsador presionado
  94. // Manejo del rebote del botón
  95. delay(100);
  96. int startTime = millis();
  97. while(digitalRead(gpio_0) == LOW) delay(50);
  98. int endTime = millis();
  99. if ((endTime - startTime) > 10000) {
  100. // Si el botón se mantiene más de 10 segundos, restablecer todo
  101. Serial.printf("Reset to factory.\n");
  102. RMakerFactoryReset(2);
  103. } else if ((endTime - startTime) > 3000) {
  104. Serial.printf("Reset Wi-Fi.\n");
  105. // Si el botón se mantiene más de 3 segundos, pero menos de 10, restablecer Wi-Fi
  106. RMakerWiFiReset(2);
  107. } else {
  108. // Alternar el estado del dispositivo
  109. dimmer_state = !dimmer_state;
  110. Serial.printf("Toggle State to %s.\n", dimmer_state ? "true" : "false");
  111. my_device.updateAndReportParam(ESP_RMAKER_DEF_POWER_NAME, dimmer_state);
  112. (dimmer_state == false) ? dimmer.setPower(OFF) : dimmer.setPower(ON);
  113. }
  114. }
  115. delay(100);
  116. }

El interruptor se puede controlar con la aplicación móvil, así como con los skills de los asistentes de voz Alexa y Google.

Cuando ejecutamos este código:

  • El dispositivo primero verificará si hay una red Wi-Fi configurada. Si la red no está configurada, se iniciará el proceso de aprovisionamiento. El dispositivo puede entonces configurarse usando las aplicaciones móviles mencionadas anteriormente.
  • Si se encuentra una configuración Wi-Fi, se conectará a la red configurada.
  • Una vez conectado, se conectará a la nube de RainMaker y buscará comandos para modificar sus parámetros (el estado del interruptor en este caso).
  • El dispositivo también buscará comandos en la red Wi-Fi local.
  • Cuando alguien cambia el estado del interruptor usando aplicaciones móviles o integraciones de voz, se llama a la función write_callback().


Primeros pasos

Antes de comenzar, algunos puntos a tener en cuenta

  • For using RainMaker, you first have to get started with the ESP32 support in Arduino.
  • RainMaker support is not yet part of a stable esp32-arduino release. So we will use the master branch of the ESP32 Arduino repository. We will update here and elsewhere once this support is available in a stable release.

Una vez que su Arduino esté configurado con el soporte de ESP32, siga estos pasos

  1. Abra Arduino IDE, vaya a Tools y configure lo siguiente
  • Board: «ESP32 Dev Module»
  • Flash Size: «4MB» (según su controlador ESP32)
  • Partition Scheme: «RainMaker»
  • Core Debug Level: «Info»
  • Port: Elija el puerto ESP32 apropiado según su plataforma host de la lista. Conectando/desconectando su placa ESP32, puede determinar el número de puerto.

2. Cargue el sketch en su placa ESP32 haciendo clic en el botón Upload en el IDE, o vaya a Sketch -> Upload

3. Vaya a Tools -> Serial Monitor. Elija 115200 como velocidad en baudios. Si no ve nada en la ventana del monitor, reinicie su placa (usando el botón RST).

4. Download the ESP RainMaker phone app, sign-up or sign-in and you are ready to go.

5. Siga las instrucciones en el Serial Monitor para agregar el interruptor desde la aplicación RainMaker. (Si no ve las instrucciones, verifique la opción «Core Debug Level: Info» en Tools)

Cualquier control desde la aplicación móvil debería reflejarse ahora en el dispositivo y cualquier cambio en el dispositivo (presionando el botón BOOT) debería reflejarse en la aplicación móvil.

Puede mantener presionado el botón BOOT durante más de 3 segundos y luego soltar para restablecer Wi-Fi, o durante más de 10 segundos para restablecer a los valores de fábrica.

1

 

2

 

3

 

1

 

2

 

3

 



Compartir esta publicación
Iniciar sesión para dejar un comentario