sonstiges:tuerklingel
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
sonstiges:tuerklingel [2025-01-27 04:08] – [Sourcecode] schuballaa | sonstiges:tuerklingel [2025-02-05 20:12] (aktuell) – [Sender in Haustelefon einbauen] schuballaa | ||
---|---|---|---|
Zeile 21: | Zeile 21: | ||
Das Haustelefon ist vom Typ STR HT 3033. | Das Haustelefon ist vom Typ STR HT 3033. | ||
- | Das Steuergerät ist ein SP 333 ({{: | + | Das Steuergerät ist ein SP 333 ({{: |
===== Pinout ===== | ===== Pinout ===== | ||
Zeile 37: | Zeile 37: | ||
Da uns keine Leitung zwischen den Räumen Bornstr. 14-15 sowie 16-17 zur Verfügung steht, mussten wir auf eine [[http:// | Da uns keine Leitung zwischen den Räumen Bornstr. 14-15 sowie 16-17 zur Verfügung steht, mussten wir auf eine [[http:// | ||
- | Wenn geklingelt wird, wird über ein (spannungsteiler 3.7 > 3.3 volt 1K / 4.7 K) der Pin 04 HIGH und ein ESPNOW signal zu den Empfängern ,, | + | Änderungen am 04.02.2025: |
+ | |||
+ | Der Mosfet (siehe Bild) hat nicht mehr das Klingel Signal zum ESPNOW Sender weitergeleitet. Daher dedektiere ich das Klingelsignal nun über einen H11LX (Optokoppler) der beim Klingeln den Pin 04 LOW setzt und ein ESPNOW signal zu den Empfängern ,, | ||
+ | |||
+ | Zusätzlich habe ich den Empfängern mit einem Watchchdog und ein auto restart (jede Minute) ausgestattet. | ||
+ | |||
+ | Nachtrag am 05.02.2025: | ||
+ | |||
+ | Es kam gelegentlich zu Fehlauslösungen. Daher habe ich in der Software eingestellt, | ||
===== Sender in Haustelefon einbauen ===== | ===== Sender in Haustelefon einbauen ===== | ||
- | Der Sender ist ein ESP32 Lolin Lite welcher auf ein Trigger auf Pin 4 wartet | + | Der Sender ist ein ESP32 Lolin Lite welcher auf ein Trigger auf Pin 4 wartet. |
{{https:// | {{https:// | ||
+ | |||
===== Sourcecode ===== | ===== Sourcecode ===== | ||
Sender: | Sender: | ||
- | |||
< | < | ||
+ | |||
#include < | #include < | ||
#include < | #include < | ||
Zeile 131: | Zeile 140: | ||
pinMode(triggerPin, | pinMode(triggerPin, | ||
pinMode(testPin, | pinMode(testPin, | ||
- | attachInterrupt(digitalPinToInterrupt(triggerPin), | + | attachInterrupt(digitalPinToInterrupt(triggerPin), |
} | } | ||
Zeile 218: | Zeile 227: | ||
< | < | ||
- | #include < | + | #include < |
- | #include < | + | #include < |
#include < | #include < | ||
+ | #include < | ||
- | //Set MAC Address this device (bell receiver 1)\ | + | // Set MAC Address this device (bell receiver 1) |
- | uint8_t newMACAddress[] = {0x30, 0xAF, 0xA1, 0x05, 0x1D, 0x63}; uint8_t addr[] = {0x30, 0xAF, 0xA0, 0x05, 0x1D, 0x63}; unsigned long lastPrintoutTime = 0;\ | + | uint8_t newMACAddress[] = {0x30, 0xAF, 0xA1, 0x05, 0x1D, 0x63}; |
- | bool isTriggered | + | uint8_t addr[] = {0x30, 0xAF, 0xA0, 0x05, 0x1D, 0x63}; |
- | unsigned long lastTriggeredTime | + | unsigned long lastPrintoutTime = 0; |
- | uint64_t trigger;\ | + | unsigned long lastRebootTime |
- | } bell_struct; //Create a struct_message called myData\ | + | unsigned long lastDebugTime |
- | bell_struct myData; | + | const unsigned long DebugIntervall = 1000; |
+ | const unsigned long REBOOT_INTERVAL = 60000; // Periodischer Neustart nach 60 Sekunden | ||
- | void OnDataRecv(const uint8_t * mac, const uint8_t *incomingData, | + | bool isTriggered |
- | memcpy(& | + | unsigned long lastTriggeredTime |
- | Serial.print(" | + | |
- | Serial.println(len); | + | |
- | Serial.print(" | + | |
- | Serial.println(myData.trigger); | + | |
- | if (memcmp(mac, | + | |
- | Serial.println(" | + | |
- | if (myData.trigger | + | |
- | Serial.println(" | + | |
- | triggerbell(); | + | |
- | }\ | + | |
- | }\ | + | |
- | } void setup() { Serial.begin(115200); | + | |
- | Serial.println(WiFi.macAddress()); | + | |
- | // | + | |
- | esp_wifi_set_mac(WIFI_IF_STA, | + | |
- | Serial.print(" | + | int selftest = 0; |
- | Serial.println(WiFi.macAddress()); | + | |
- | pinMode(LED_BUILTIN, | + | typedef struct bell_struct { |
- | pinMode(4, OUTPUT); | + | uint64_t trigger; |
+ | } bell_struct; | ||
- | digitalWrite(LED_BUILTIN, | + | // Create |
- | digitalWrite(4, | + | bell_struct myData; |
- | delay(100); | + | |
- | digitalWrite(4, | + | |
- | digitalWrite(LED_BUILTIN, | + | |
- | delay(100); | + | |
- | WiFi.mode(WIFI_STA); | + | |
- | //Init ESP-NOW\ | + | //INITIALIZE WATCHDOG//////// |
- | if (esp_now_init() != ESP_OK) {\ | + | //watchdogCount==30 means it will wait 30 seconds before it will automatically reset on a hang |
- | Serial.println(" | + | //got this watchdog code from Andreas Spiess "The Guy with the Swiss Accent" |
- | ESP.restart(); | + | |
- | } //Once ESPNow is successfully Init, we will register for recv CB to\ | + | |
- | //get recv packer info\ | + | |
- | esp_now_register_recv_cb(OnDataRecv); | + | |
- | }\ | + | |
- | void triggerbell() {\ | + | |
- | if (!isTriggered || (millis() - lastTriggeredTime> | + | |
- | isTriggered | + | |
- | lastTriggeredTime | + | |
- | digitalWrite(4, | + | |
- | delay(100);\ | + | Ticker secondTick; |
- | digitalWrite(4, LOW);\ | + | volatile int watchdogCount = 0; |
- | digitalWrite(LED_BUILTIN, | + | |
- | Serial.println(" | + | void ISRwatchdog() { |
+ | watchdogCount ++; | ||
+ | | ||
+ | Serial.println(" | ||
+ | ESP.restart(); | ||
+ | } | ||
} | } | ||
+ | //END WATCHDOG | ||
+ | |||
+ | void printRestartReason() { | ||
+ | esp_reset_reason_t reason = esp_reset_reason(); | ||
+ | Serial.print(" | ||
+ | switch (reason) { | ||
+ | case ESP_RST_POWERON: | ||
+ | case ESP_RST_EXT: | ||
+ | case ESP_RST_SW: Serial.println(" | ||
+ | case ESP_RST_PANIC: | ||
+ | case ESP_RST_INT_WDT: | ||
+ | case ESP_RST_TASK_WDT: | ||
+ | case ESP_RST_WDT: | ||
+ | case ESP_RST_DEEPSLEEP: | ||
+ | case ESP_RST_BROWNOUT: | ||
+ | case ESP_RST_SDIO: | ||
+ | default: Serial.println(" | ||
+ | } | ||
} | } | ||
- | void loop() {\ | + | void OnDataRecv(const esp_now_recv_info_t *info, const uint8_t *incomingData, |
- | //Print out the `isTriggered` variable every second\ | + | |
- | if (millis() - lastPrintoutTime> | + | Serial.print(" |
- | Serial.print(" | + | Serial.println(len); |
- | Serial.println(isTriggered);\ | + | |
- | lastPrintoutTime = millis();\ | + | |
- | }// \ | + | |
- | \ | + | |
- | Reset the `isTriggered` variable after 5 seconds\ | + | |
- | if (millis() - lastTriggeredTime> | + | |
- | isTriggered | + | // Prüfen, ob die MAC-Adresse übereinstimmt |
+ | if (memcmp(info-> | ||
+ | Serial.println(" | ||
+ | if (myData.trigger == 8562190430) { | ||
+ | Serial.println(" | ||
+ | triggerbell(); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | void setup() { | ||
+ | Serial.begin(115200); | ||
+ | Serial.println(); | ||
+ | secondTick.attach(1, | ||
+ | printRestartReason(); | ||
+ | |||
+ | WiFi.mode(WIFI_STA); | ||
+ | Serial.print(" | ||
+ | Serial.println(WiFi.macAddress()); | ||
+ | |||
+ | esp_wifi_set_mac(WIFI_IF_STA, | ||
+ | Serial.print(" | ||
+ | Serial.println(WiFi.macAddress()); | ||
+ | |||
+ | pinMode(LED_BUILTIN, | ||
+ | pinMode(4, OUTPUT); | ||
+ | |||
+ | if (selftest == 1) { | ||
+ | Serial.println(" | ||
+ | digitalWrite(LED_BUILTIN, | ||
+ | digitalWrite(4, | ||
+ | delay(100); | ||
+ | digitalWrite(4, | ||
+ | digitalWrite(LED_BUILTIN, | ||
+ | delay(100); | ||
+ | } else { | ||
+ | Serial.println(" | ||
+ | } | ||
+ | |||
+ | WiFi.mode(WIFI_STA); | ||
+ | |||
+ | // ESP-NOW initialisieren | ||
+ | if (esp_now_init() != ESP_OK) { | ||
+ | Serial.println(" | ||
+ | ESP.restart(); | ||
+ | } | ||
+ | |||
+ | esp_now_register_recv_cb(OnDataRecv); | ||
+ | |||
+ | lastRebootTime = millis(); // Zeit des letzten Neustarts speichern | ||
} | } | ||
+ | void triggerbell() { | ||
+ | if (!isTriggered || (millis() - lastTriggeredTime> | ||
+ | isTriggered = true; | ||
+ | lastTriggeredTime = millis(); | ||
+ | digitalWrite(LED_BUILTIN, | ||
+ | digitalWrite(4, | ||
+ | |||
+ | delay(100); | ||
+ | digitalWrite(4, | ||
+ | digitalWrite(LED_BUILTIN, | ||
+ | Serial.println(" | ||
+ | } | ||
+ | } | ||
+ | |||
+ | void loop() { | ||
+ | |||
+ | // Reset der `isTriggered`-Variable nach 5 Sekunden | ||
+ | if (millis() - lastTriggeredTime> | ||
+ | isTriggered = false; | ||
+ | } | ||
+ | |||
+ | // Periodischer Neustart alle 60 Sekunden | ||
+ | if (millis() - lastRebootTime> | ||
+ | Serial.println(" | ||
+ | ESP.restart(); | ||
+ | } | ||
+ | |||
+ | if (millis() - lastDebugTime> | ||
+ | lastDebugTime = millis(); | ||
+ | Serial.print(" | ||
+ | Serial.println(isTriggered); | ||
+ | } | ||
+ | |||
+ | watchdogCount = 0; | ||
} | } | ||
Zeile 305: | Zeile 387: | ||
< | < | ||
- | #include < | + | #include < |
- | #include < | + | #include < |
#include < | #include < | ||
+ | #include < | ||
- | //Set MAC Address this device (bell receiver 2)\ | + | // Set MAC Address this device (bell receiver 2) |
- | uint8_t newMACAddress[] = {0x30, 0xAF, 0xA2, 0x05, 0x1D, 0x63}; uint8_t addr[] = {0x30, 0xAF, 0xA0, 0x05, 0x1D, 0x63}; unsigned long lastPrintoutTime = 0;\ | + | uint8_t newMACAddress[] = {0x30, 0xAF, 0xA2, 0x05, 0x1D, 0x63}; |
- | bool isTriggered | + | uint8_t addr[] = {0x30, 0xAF, 0xA0, 0x05, 0x1D, 0x63}; |
- | unsigned long lastTriggeredTime | + | unsigned long lastPrintoutTime = 0; |
- | uint64_t trigger;\ | + | unsigned long lastRebootTime |
- | } bell_struct; //Create a struct_message called myData\ | + | unsigned long lastDebugTime |
- | bell_struct myData; | + | const unsigned long DebugIntervall = 1000; |
+ | const unsigned long REBOOT_INTERVAL = 60000; // Periodischer Neustart nach 60 Sekunden | ||
- | void OnDataRecv(const uint8_t * mac, const uint8_t *incomingData, | + | bool isTriggered |
- | memcpy(& | + | unsigned long lastTriggeredTime |
- | Serial.print(" | + | |
- | Serial.println(len); | + | |
- | Serial.print(" | + | |
- | Serial.println(myData.trigger); | + | |
- | if (memcmp(mac, | + | |
- | Serial.println(" | + | |
- | if (myData.trigger | + | |
- | Serial.println(" | + | |
- | triggerbell(); | + | |
- | }\ | + | |
- | }\ | + | |
- | } void setup() { Serial.begin(115200); | + | |
- | Serial.println(WiFi.macAddress()); | + | |
- | // | + | |
- | esp_wifi_set_mac(WIFI_IF_STA, | + | |
- | Serial.print(" | + | int selftest = 0; |
- | Serial.println(WiFi.macAddress()); | + | |
- | pinMode(LED_BUILTIN, | + | typedef struct bell_struct { |
- | pinMode(4, OUTPUT); | + | uint64_t trigger; |
+ | } bell_struct; | ||
- | digitalWrite(LED_BUILTIN, | + | // Create |
- | digitalWrite(4, | + | bell_struct myData; |
- | delay(100); | + | |
- | digitalWrite(4, | + | |
- | digitalWrite(LED_BUILTIN, | + | |
- | delay(100); | + | |
- | WiFi.mode(WIFI_STA); | + | |
- | //Init ESP-NOW\ | + | //INITIALIZE WATCHDOG//////// |
- | if (esp_now_init() != ESP_OK) {\ | + | //watchdogCount==30 means it will wait 30 seconds before it will automatically reset on a hang |
- | Serial.println(" | + | //got this watchdog code from Andreas Spiess "The Guy with the Swiss Accent" |
- | ESP.restart(); | + | |
- | } //Once ESPNow is successfully Init, we will register for recv CB to\ | + | |
- | //get recv packer info\ | + | |
- | esp_now_register_recv_cb(OnDataRecv); | + | |
- | }\ | + | |
- | void triggerbell() {\ | + | |
- | if (!isTriggered || (millis() - lastTriggeredTime> | + | |
- | isTriggered | + | |
- | lastTriggeredTime | + | |
- | digitalWrite(4, | + | |
- | delay(100);\ | + | Ticker secondTick; |
- | digitalWrite(4, | + | volatile int watchdogCount = 0; |
- | digitalWrite(LED_BUILTIN, | + | |
- | Serial.println(" | + | |
+ | void ISRwatchdog() { | ||
+ | watchdogCount ++; | ||
+ | if (watchdogCount> | ||
+ | Serial.println(" | ||
+ | ESP.restart(); | ||
+ | } | ||
} | } | ||
+ | //END WATCHDOG | ||
+ | |||
+ | void printRestartReason() { | ||
+ | esp_reset_reason_t reason = esp_reset_reason(); | ||
+ | Serial.print(" | ||
+ | switch (reason) { | ||
+ | case ESP_RST_POWERON: | ||
+ | case ESP_RST_EXT: | ||
+ | case ESP_RST_SW: Serial.println(" | ||
+ | case ESP_RST_PANIC: | ||
+ | case ESP_RST_INT_WDT: | ||
+ | case ESP_RST_TASK_WDT: | ||
+ | case ESP_RST_WDT: | ||
+ | case ESP_RST_DEEPSLEEP: | ||
+ | case ESP_RST_BROWNOUT: | ||
+ | case ESP_RST_SDIO: | ||
+ | default: Serial.println(" | ||
+ | } | ||
} | } | ||
- | void loop() {\ | + | void OnDataRecv(const esp_now_recv_info_t *info, const uint8_t *incomingData, |
- | //Print out the `isTriggered` variable every second\ | + | |
- | if (millis() - lastPrintoutTime> | + | Serial.print(" |
- | Serial.print(" | + | Serial.println(len); |
- | Serial.println(isTriggered);\ | + | |
- | lastPrintoutTime = millis();\ | + | |
- | }// \ | + | |
- | \ | + | |
- | Reset the `isTriggered` variable after 5 seconds\ | + | |
- | if (millis() - lastTriggeredTime> | + | |
- | isTriggered | + | // Prüfen, ob die MAC-Adresse übereinstimmt |
+ | if (memcmp(info-> | ||
+ | Serial.println(" | ||
+ | if (myData.trigger == 8562190430) { | ||
+ | Serial.println(" | ||
+ | triggerbell(); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | void setup() { | ||
+ | Serial.begin(115200); | ||
+ | Serial.println(); | ||
+ | secondTick.attach(1, | ||
+ | printRestartReason(); | ||
+ | |||
+ | WiFi.mode(WIFI_STA); | ||
+ | Serial.print(" | ||
+ | Serial.println(WiFi.macAddress()); | ||
+ | |||
+ | esp_wifi_set_mac(WIFI_IF_STA, | ||
+ | Serial.print(" | ||
+ | Serial.println(WiFi.macAddress()); | ||
+ | |||
+ | pinMode(LED_BUILTIN, | ||
+ | pinMode(4, OUTPUT); | ||
+ | |||
+ | if (selftest == 1) { | ||
+ | Serial.println(" | ||
+ | digitalWrite(LED_BUILTIN, | ||
+ | digitalWrite(4, | ||
+ | delay(100); | ||
+ | digitalWrite(4, | ||
+ | digitalWrite(LED_BUILTIN, | ||
+ | delay(100); | ||
+ | } else { | ||
+ | Serial.println(" | ||
+ | } | ||
+ | |||
+ | WiFi.mode(WIFI_STA); | ||
+ | |||
+ | // ESP-NOW initialisieren | ||
+ | if (esp_now_init() != ESP_OK) { | ||
+ | Serial.println(" | ||
+ | ESP.restart(); | ||
+ | } | ||
+ | |||
+ | esp_now_register_recv_cb(OnDataRecv); | ||
+ | |||
+ | lastRebootTime = millis(); // Zeit des letzten Neustarts speichern | ||
} | } | ||
+ | void triggerbell() { | ||
+ | if (!isTriggered || (millis() - lastTriggeredTime> | ||
+ | isTriggered = true; | ||
+ | lastTriggeredTime = millis(); | ||
+ | digitalWrite(LED_BUILTIN, | ||
+ | digitalWrite(4, | ||
+ | |||
+ | delay(100); | ||
+ | digitalWrite(4, | ||
+ | digitalWrite(LED_BUILTIN, | ||
+ | Serial.println(" | ||
+ | } | ||
+ | } | ||
+ | |||
+ | void loop() { | ||
+ | |||
+ | // Reset der `isTriggered`-Variable nach 5 Sekunden | ||
+ | if (millis() - lastTriggeredTime> | ||
+ | isTriggered = false; | ||
+ | } | ||
+ | |||
+ | // Periodischer Neustart alle 60 Sekunden | ||
+ | if (millis() - lastRebootTime> | ||
+ | Serial.println(" | ||
+ | ESP.restart(); | ||
+ | } | ||
+ | |||
+ | if (millis() - lastDebugTime> | ||
+ | lastDebugTime = millis(); | ||
+ | Serial.print(" | ||
+ | Serial.println(isTriggered); | ||
+ | } | ||
+ | |||
+ | watchdogCount = 0; | ||
} | } | ||
sonstiges/tuerklingel.1737947310.txt.gz · Zuletzt geändert: 2025-01-27 04:08 von schuballaa