Zum Inhalt springen

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

28. März 2025 durch
Dimmer with ESP32 – ESP RainMaker Cloud platform + Mobile APP.
Administrator
| Noch keine Kommentare

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/ 

Integrierte Unterstützung für Amazon Alexa & Google Assistant Integration über Smart-Home-Skills und -Aktionen. Sie können auch eigene benutzerdefinierte Skills erstellen.

Ein Beispiel-Sketch für einen Dimmer ist enthalten. Werfen wir einen kurzen Blick auf den Code, der dies ermöglicht.

  1. //Dieses Beispiel demonstriert ESP RainMaker mit dem Dimmer
  2. #include "RMaker.h"
  3. #include "WiFi.h"
  4. #include "WiFiProv.h"
  5. #include <RBDdimmer.h> //Dimmer-Anschluss an Mikrocontroller und Arduino-Bibliothek. 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 für Taster
  11. #if CONFIG_IDF_TARGET_ESP32C3
  12. static int gpio_0 = 9;
  13. static int gpio_dimmer = 7;
  14. static int gpio_zerocross 5 // Pin-Einstellungen
  15. #else
  16. //GPIO für virtuelles Gerät
  17. static int gpio_0 = 0;
  18. static int gpio_dimmer = 23;
  19. static int gpio_zerocross 5 // Pin-Einstellungen
  20. #endif
  21. dimmerLamp dimmer(gpio_dimmer, gpio_zerocross);
  22. bool dimmer_state = true;
  23. // Das Framework stellt einige Standardgerätetypen bereit wie Schalter, Glühbirne, Ventilator, Temperatursensor.
  24. // Sie können aber auch benutzerdefinierte Geräte mit dem Basisklassenobjekt 'Device' definieren, wie hier gezeigt
  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); // DIMMEN
  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. //Benutzerdefiniertes Dimmer-Gerät erstellen
  64. my_device.addNameParam();
  65. my_device.addPowerParam(DEFAULT_POWER_MODE);
  66. my_device.assignPrimaryParam(my_device.getParamByName(ESP_RMAKER_DEF_POWER_NAME));
  67. //Benutzerdefinierten Level-Parameter erstellen und hinzufügen
  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. //Benutzerdefiniertes Dimmer-Gerät zum Knoten hinzufügen
  74. my_node.addDevice(my_device);
  75. //Dies ist optional
  76. RMaker.enableOTA(OTA_USING_PARAMS);
  77. //Wenn Sie die Zeitplanung aktivieren möchten, setzen Sie die Zeitzone für Ihre Region mit setTimeZone().
  78. //Die Liste der verfügbaren Werte finden Sie hier https://rainmaker.espressif.com/docs/time-service.html
  79. // RMaker.setTimeZone("Asia/Shanghai");
  80. // Alternativ aktivieren Sie den Zeitzonen-Dienst und lassen die Telefon-Apps die entsprechende Zeitzone einstellen
  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) { //Taster gedrückt
  94. // Tastenentprellung
  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. // Wenn Taste länger als 10 Sekunden gedrückt, alles zurücksetzen
  101. Serial.printf("Reset to factory.\n");
  102. RMakerFactoryReset(2);
  103. } else if ((endTime - startTime) > 3000) {
  104. Serial.printf("Reset Wi-Fi.\n");
  105. // Wenn Taste länger als 3 Sekunden, aber weniger als 10, Wi-Fi zurücksetzen
  106. RMakerWiFiReset(2);
  107. } else {
  108. // Gerätezustand umschalten
  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. }

Der Schalter kann über die mobile APP sowie über Alexa- und Google Voice Assistant-Skills gesteuert werden.

Wenn wir diesen Code ausführen:

  • Das Gerät prüft zunächst, ob ein Wi-Fi-Netzwerk konfiguriert ist. Wenn das Netzwerk nicht konfiguriert ist, wird der Provisioning-Prozess gestartet. Das Gerät kann dann mit den oben genannten Telefon-Apps konfiguriert werden.
  • Wenn eine Wi-Fi-Konfiguration gefunden wird, verbindet es sich mit dem konfigurierten Netzwerk.
  • Nach der Verbindung stellt es eine Verbindung zur RainMaker-Cloud her und wartet auf Befehle zur Änderung seiner Parameter (in diesem Fall der Schalterzustand).
  • Das Gerät sucht auch nach Befehlen im lokalen Wi-Fi-Netzwerk.
  • Wenn jemand den Schalterzustand über Telefon-Apps oder Sprachintegrationen ändert, wird die Funktion write_callback() aufgerufen.


Erste Schritte

Bevor Sie beginnen, beachten Sie einige Punkte

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

Sobald Ihre Arduino-Umgebung mit ESP32-Unterstützung eingerichtet ist, folgen Sie diesen Schritten

  1. Öffnen Sie die Arduino IDE, gehen Sie zu Tools und stellen Sie Folgendes ein
  • Board: „ESP32 Dev Module"
  • Flash Size: „4MB" (entsprechend Ihres ESP32-Controllers)
  • Partition Scheme: „RainMaker"
  • Core Debug Level: „Info"
  • Port: Wählen Sie den entsprechenden ESP32-Port je nach Ihrer Host-Plattform aus der Liste. Durch An-/Abstecken Ihres ESP32-Boards können Sie die Portnummer ermitteln.

2. Laden Sie den Sketch auf Ihr ESP32-Board hoch, indem Sie auf die Upload-Schaltfläche in der IDE klicken, oder gehen Sie zu Sketch -> Upload

3. Gehen Sie zu Tools -> Serial Monitor. Wählen Sie 115200 als Baudrate. Wenn im Monitor-Fenster nichts angezeigt wird, setzen Sie Ihr Board zurück (über die RST-Taste).

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

5. Folgen Sie den Anweisungen im Serial Monitor, um den Schalter über die RainMaker-App hinzuzufügen. (Wenn die Anweisungen nicht angezeigt werden, überprüfen Sie die Option „Core Debug Level: Info" unter Tools)

Jede Steuerung über die Telefon-App sollte sich nun auf dem Gerät widerspiegeln, und jede Änderung am Gerät (durch Drücken der BOOT-Taste) sollte in der mobilen App angezeigt werden.

Sie können die BOOT-Taste länger als 3 Sekunden gedrückt halten und dann loslassen, um Wi-Fi zurückzusetzen, oder länger als 10 Sekunden, um auf Werkseinstellungen zurückzusetzen.

1

 

2

 

3

 

1

 

2

 

3

 



Diesen Beitrag teilen
Anmelden , um einen Kommentar zu hinterlassen