Se rendre au contenu

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

28 mars 2025 par
Dimmer with ESP32 – ESP RainMaker Cloud platform + Mobile APP.
Administrator
| Aucun commentaire pour l'instant

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/ 

Prise en charge intégrée de l'intégration Amazon Alexa & Google Assistant via les skills et actions de maison connectée. Vous pouvez également créer vos propres skills personnalisés.

Un sketch d'exemple pour un variateur a été inclus. Examinons rapidement le code qui rend cela possible.

  1. //Cet exemple illustre ESP RainMaker avec le variateur
  2. #include "RMaker.h"
  3. #include "WiFi.h"
  4. #include "WiFiProv.h"
  5. #include <RBDdimmer.h> //Connexion du variateur au microcontrôleur et bibliothèque 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 pour le bouton-poussoir
  11. #if CONFIG_IDF_TARGET_ESP32C3
  12. static int gpio_0 = 9;
  13. static int gpio_dimmer = 7;
  14. static int gpio_zerocross 5 // configuration des broches
  15. #else
  16. //GPIO pour le périphérique virtuel
  17. static int gpio_0 = 0;
  18. static int gpio_dimmer = 23;
  19. static int gpio_zerocross 5 // configuration des broches
  20. #endif
  21. dimmerLamp dimmer(gpio_dimmer, gpio_zerocross);
  22. bool dimmer_state = true;
  23. // Le framework fournit des types d'appareils standard comme interrupteur, ampoule, ventilateur, capteur de température.
  24. // Mais vous pouvez aussi définir des appareils personnalisés en utilisant l'objet de classe de base 'Device', comme montré ici
  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); // VARIATION
  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. //Créer un périphérique variateur personnalisé
  64. my_device.addNameParam();
  65. my_device.addPowerParam(DEFAULT_POWER_MODE);
  66. my_device.assignPrimaryParam(my_device.getParamByName(ESP_RMAKER_DEF_POWER_NAME));
  67. //Créer et ajouter un paramètre de niveau personnalisé
  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. //Ajouter le périphérique variateur personnalisé au nœud
  74. my_node.addDevice(my_device);
  75. //Ceci est optionnel
  76. RMaker.enableOTA(OTA_USING_PARAMS);
  77. //Si vous voulez activer la planification, définissez le fuseau horaire de votre région avec setTimeZone().
  78. //La liste des valeurs disponibles est fournie ici https://rainmaker.espressif.com/docs/time-service.html
  79. // RMaker.setTimeZone("Asia/Shanghai");
  80. // Vous pouvez aussi activer le service de fuseau horaire et laisser les applications mobiles définir le fuseau approprié
  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) { //Bouton-poussoir appuyé
  94. // Gestion de l'anti-rebond
  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 le bouton est appuyé pendant plus de 10 s, tout réinitialiser
  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 le bouton est appuyé pendant plus de 3 s mais moins de 10, réinitialiser le Wi-Fi
  106. RMakerWiFiReset(2);
  107. } else {
  108. // Basculer l'état de l'appareil
  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'interrupteur peut être contrôlé avec l'application mobile, ainsi qu'avec les skills Alexa et Google Voice Assistant.

Lorsque nous exécutons ce code :

  • L'appareil vérifie d'abord si un réseau Wi-Fi est configuré. Si le réseau n'est pas configuré, il lance le processus de provisionnement. L'appareil peut alors être configuré à l'aide des applications mobiles mentionnées ci-dessus.
  • Si une configuration Wi-Fi est trouvée, il se connecte au réseau configuré.
  • Une fois connecté, il se connecte au cloud RainMaker, à la recherche de commandes pour modifier ses paramètres (l'état de l'interrupteur dans ce cas).
  • L'appareil recherche également des commandes sur le réseau Wi-Fi local.
  • Lorsque quelqu'un modifie l'état de l'interrupteur via les applications mobiles ou les intégrations vocales, la fonction write_callback() est appelée.


Prise en main

Avant de commencer, quelques points à noter

  • 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.

Une fois votre Arduino configuré avec le support ESP32, suivez ces étapes

  1. Ouvrez Arduino IDE, allez dans Outils et définissez les paramètres suivants
  • Board : « ESP32 Dev Module »
  • Flash Size : « 4MB » (selon votre contrôleur ESP32)
  • Partition Scheme : « RainMaker »
  • Core Debug Level : « Info »
  • Port : Choisissez le port ESP32 approprié selon votre plateforme hôte dans la liste. En connectant/déconnectant votre carte ESP32, vous pouvez identifier le numéro de port.

2. Téléversez le sketch sur votre carte ESP32 en cliquant sur le bouton Téléverser dans l'IDE, ou en allant dans Sketch -> Upload

3. Allez dans Outils -> Moniteur série. Choisissez 115200 comme débit en bauds. Si vous ne voyez rien dans la fenêtre du moniteur, réinitialisez votre carte (avec le bouton RST).

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

5. Suivez les instructions dans le moniteur série pour ajouter l'interrupteur depuis l'application RainMaker. (Si vous ne voyez pas les instructions, vérifiez l'option « Core Debug Level: Info » dans Outils)

Tout contrôle depuis l'application mobile devrait maintenant se refléter sur l'appareil et tout changement sur l'appareil (en appuyant sur le bouton BOOT) devrait se refléter dans l'application mobile.

Vous pouvez maintenir le bouton BOOT enfoncé pendant plus de 3 secondes puis relâcher pour réinitialiser le Wi-Fi, et pendant plus de 10 secondes pour une réinitialisation aux paramètres d'usine.

1

 

2

 

3

 

1

 

2

 

3

 



Partager cet article
Se connecter pour laisser un commentaire.