Passa al contenuto

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

28 marzo 2025 di
Dimmer with ESP32 – ESP RainMaker Cloud platform + Mobile APP.
Administrator
| Ancora nessun commento

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/ 

Supporto integrato per l'integrazione con Amazon Alexa & Google Assistant tramite skill e azioni per la casa intelligente. È possibile anche creare skill personalizzati.

È incluso uno sketch di esempio per un dimmer. Diamo una rapida occhiata al codice che rende tutto questo possibile.

  1. //Questo esempio dimostra ESP RainMaker con il dimmer
  2. #include "RMaker.h"
  3. #include "WiFi.h"
  4. #include "WiFiProv.h"
  5. #include <RBDdimmer.h> //Collegamento del dimmer al microcontroller e libreria 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 per il pulsante
  11. #if CONFIG_IDF_TARGET_ESP32C3
  12. static int gpio_0 = 9;
  13. static int gpio_dimmer = 7;
  14. static int gpio_zerocross 5 // configurazione dei pin
  15. #else
  16. //GPIO per il dispositivo virtuale
  17. static int gpio_0 = 0;
  18. static int gpio_dimmer = 23;
  19. static int gpio_zerocross 5 // configurazione dei pin
  20. #endif
  21. dimmerLamp dimmer(gpio_dimmer, gpio_zerocross);
  22. bool dimmer_state = true;
  23. // Il framework fornisce alcuni tipi di dispositivi standard come interruttore, lampadina, ventilatore, sensore di temperatura.
  24. // Ma è possibile anche definire dispositivi personalizzati utilizzando l'oggetto della classe base 'Device', come mostrato qui
  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); // DIMMERIZZAZIONE
  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. //Creare un dispositivo dimmer personalizzato
  64. my_device.addNameParam();
  65. my_device.addPowerParam(DEFAULT_POWER_MODE);
  66. my_device.assignPrimaryParam(my_device.getParamByName(ESP_RMAKER_DEF_POWER_NAME));
  67. //Creare e aggiungere un parametro di livello personalizzato
  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. //Aggiungere il dispositivo dimmer personalizzato al nodo
  74. my_node.addDevice(my_device);
  75. //Questo è opzionale
  76. RMaker.enableOTA(OTA_USING_PARAMS);
  77. //Se si desidera abilitare la pianificazione, impostare il fuso orario della propria regione con setTimeZone().
  78. //L'elenco dei valori disponibili è fornito qui https://rainmaker.espressif.com/docs/time-service.html
  79. // RMaker.setTimeZone("Asia/Shanghai");
  80. // In alternativa, abilitare il servizio di fuso orario e lasciare che le app impostino il fuso orario appropriato
  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) { //Pulsante premuto
  94. // Gestione dell'antirimbalzo
  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. // Se il pulsante viene tenuto premuto per più di 10 secondi, ripristinare tutto
  101. Serial.printf("Reset to factory.\n");
  102. RMakerFactoryReset(2);
  103. } else if ((endTime - startTime) > 3000) {
  104. Serial.printf("Reset Wi-Fi.\n");
  105. // Se il pulsante viene tenuto premuto per più di 3 secondi, ma meno di 10, ripristinare il Wi-Fi
  106. RMakerWiFiReset(2);
  107. } else {
  108. // Commutare lo stato 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. }

L'interruttore può essere controllato tramite l'applicazione mobile, nonché con gli skill degli assistenti vocali Alexa e Google.

Quando eseguiamo questo codice:

  • Il dispositivo verificherà innanzitutto se è configurata una rete Wi-Fi. Se la rete non è configurata, verrà avviato il processo di provisioning. Il dispositivo può quindi essere configurato utilizzando le applicazioni mobili menzionate sopra.
  • Se viene trovata una configurazione Wi-Fi, si connetterà alla rete configurata.
  • Una volta connesso, si collegherà al cloud RainMaker e attenderà comandi per modificare i propri parametri (in questo caso lo stato dell'interruttore).
  • Il dispositivo cercherà anche comandi nella rete Wi-Fi locale.
  • Quando qualcuno modifica lo stato dell'interruttore tramite le applicazioni mobili o le integrazioni vocali, viene chiamata la funzione write_callback().


Per iniziare

Prima di iniziare, alcuni punti da tenere presente

  • 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 volta configurato Arduino con il supporto ESP32, seguire questi passaggi

  1. Aprire l'Arduino IDE, andare su Tools e impostare quanto segue
  • Board: «ESP32 Dev Module»
  • Flash Size: «4MB» (in base al proprio controller ESP32)
  • Partition Scheme: «RainMaker»
  • Core Debug Level: «Info»
  • Port: Scegliere la porta ESP32 appropriata in base alla propria piattaforma host dall'elenco. Collegando/scollegando la scheda ESP32, è possibile determinare il numero di porta.

2. Caricare lo sketch sulla scheda ESP32 facendo clic sul pulsante Upload nell'IDE, oppure andare su Sketch -> Upload

3. Andare su Tools -> Serial Monitor. Scegliere 115200 come velocità in baud. Se non si vede nulla nella finestra del monitor, resettare la scheda (usando il pulsante RST).

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

5. Seguire le istruzioni nel Serial Monitor per aggiungere l'interruttore dall'applicazione RainMaker. (Se le istruzioni non vengono visualizzate, verificare l'opzione «Core Debug Level: Info» in Tools)

Qualsiasi controllo dall'applicazione mobile dovrebbe ora riflettersi sul dispositivo e qualsiasi modifica sul dispositivo (premendo il pulsante BOOT) dovrebbe riflettersi nell'applicazione mobile.

È possibile tenere premuto il pulsante BOOT per più di 3 secondi e poi rilasciare per ripristinare il Wi-Fi, oppure per più di 10 secondi per ripristinare le impostazioni di fabbrica.

1

 

2

 

3

 

1

 

2

 

3

 



Condividi articolo
Accedi per lasciare un commento