Der ESP32-Datenlogger ist ein kosteneffizientes Datenerfassungssystem, das vibrierende Kabelsensoren und andere Sensoren mit RS-485, TTL-Protokoll unterstützt. Um den Datenprotokoll als Endbenutzer einzurichten, können Sie ihn an Ihren Computer anschließen und den Protokoll in einer Website mit dem Browser konfigurieren. Für erweiterte Konfigurationen können Sie Ihren eigenen Code programmieren und den Logger auf dem PC mithilfe von Platformio oder Arduino IDE flashen.
Verwenden esp32-hal-log.h TAG Anleitung
#ifdef USE_ESP_IDF_LOG
#ifndef TAG
#define TAG "myAPP"
#endif
Aktualisieren Sie platformio.ini , um zu beinhalten:
build_flags= -DUSE_ESP_IDF_LOG -DCORE_DEBUG_LEVEL=5
Fügen Sie die folgenden Bibliotheken und Definitionen hinzu:
#include "esp_log.h"
#include "esp32-hal-log.h"
#define LOG_LEVEL ESP_LOG_WARN
#define MY_ESP_LOG_LEVEL ESP_LOG_INFO
Mac OS-Treiberausgabe: https://arduino.stackexchange.com/questions/91111/how-t-install-ftdi-serial-drivers-on-mac
Aktivieren Sie den asynchronen Webserver in der
#define ELEGANTOTA_USE_ASYNC_WEBSERVER 1
Für die Leistung des ESP32 -Entwicklungskits über USB wird eine Batterie von 18650 verwendet. Für Produktionszwecke wird jedoch eine benutzerdefinierte Leiterplatte ausgelegt, und das Modul sollte über den 3V3- oder Vin -Stift angetrieben werden, um den Stromverlust zu minimieren. Um Solarenergie zu nutzen, wird der Schild von 18650 beschäftigt und erleichtert die Stromversorgung des ESP32. Dieser Aliexpress -Link enthält Details zum Schild. Der Eingangsspannungsbereich wird als 5 V bis 8 V angegeben, obwohl vorläufige Tests darauf hindeuten, dass ein 5 -V -Sonnenfeld funktionsfähig ist. Eine weitere Validierung wird durchgeführt. SD scheint nur mit Strom von Vin Pin mit einem Buck -Konverter dazwischen zu funktionieren.
Die folgende Tabelle beschreibt den aktuellen Verbrauch des ESP32 im Rahmen verschiedener Betriebsmodi:
| Modus | Aktueller Verbrauch |
|---|---|
| WiFi TX, DSSS 1 Mbit / s, Pout = +19,5 dBm | 240 ma |
| WiFi TX, OFDM 54 Mbit / s, Pout = +16 dBm | 190 ma |
| WiFi TX, OFDM MCS7, Pout = +14 dBm | 180 ma |
| WiFi RX (Zuhören) | (95 ~ 100) ma |
| BT/BLE TX, POUT = 0 DBM | 130 ma |
| BT/BLE RX (Hören) | (95 ~ 100) ma |
Derzeit umfasst das Setup zwei 0,3 -W -5 -V -Sonnenkollektoren, die dem Schild maximal 120 mA versorgen können.
Der Logger sollte beim Einschalten mit dem NTP-Server mit configTime aus der time.h -Bibliothek synchronisiert werden. Verwenden Sie getLocalTime(&timeinfo) , um die aktuelle Zeit zu erhalten. Diese Funktion sollte innerhalb der Protokollierungsfunktion aufgerufen werden, um die genaue Zeit zu erhalten. Die Zeit würde jedoch nicht gehalten, wenn die Stromversorgung verloren geht. Ein RTC -Modul ist erforderlich, um Zeit ohne WLAN nach Powerloss zu liefern. Hinweis: Nicht sicher, ob die aktuelle Implementierung (RTCLIB) den NTP -Server regelmäßig abfragt. Die offiziellen Implementierungen von Espresssif werden jedoch regelmäßig umfragen. https://docs.espresssif.com/projects/esp-idf/en/stable/esp32/api-reference/system/system_time.html
Beachten Sie, dass sowohl der DS1307 als auch der OLED -Bildschirm mit dem I2C -Bus, demselben Bus, aber einer anderen Adresse verbunden sind. Die Bibliotheken sind so gestaltet, dass sie den I2C -Bus nach allgemeinen Adressen scannen können. Verwenden Sie diese Anleitung: https://esp32io.com/tutorials/esp32-ds1307-rtc-module Beachten Sie, dass das winzige RTC-Modul nicht mit 3v3 funktioniert, statt Vin sollte geliefert werden.
Espresssif-Dokumentation zu Partitionstabellen: https://docssif.com/projects/esp-idf/en/latest/esp32/api-guides/partition-tables.html Wenn die Verwendung von Plattform .platformio/packages/framework-arduinoespressif32/tools/partitions Partition in diesem Verzeichnis in diesem Verzeichnis gefunden werden:
https://components101.com/modules/micro-sd-card-module-pinoutes-datasheet-alternatives https://www.electronicwings.com/esp32/microsd-card-interfacing-with-esp32
Ich bin mir nicht sicher, dass Dateien nach Datum ausreichend sein können.
Mit der Funktion WiFi.onEvent() wird eine WiFiEvent , die bei WLAN -Ereignissen auftritt, angerufen wird. In der Wifievent -Funktion suchen wir nach dem Ereignis SYSTEM_EVENT_STA_DISCONNECTED , was auf eine WLAN -Trennung hinweist. Wenn dieses Ereignis auftritt, nennen wir reconnectToWiFi() um eine Wiederverbindung zu versuchen. Auf diese Weise wird die Wiederverbindungslogik im Wifievent-Rückruf eingekapselt, wodurch die Loop () -Funktion frei von einem erneuerungsbezogenen Code bleibt.
Todo. Diese Funktion wird ausgelöst, wenn der physische Druckschaltflächenschalter klickt. Der ESP32 beginnt als WLAN -Zugriffspunkt, damit der Benutzer über WLAN herstellen kann. Eine Gerätekonfigurations -Website wird über WLAN bedient. https://dronebotworkshop.com/wifimanager/ Lesen Sie dieses Problem, um zu erfahren, wie Sie WLAN -Einstellungen von ESP32, Link löschen. Andernfalls startet der ESP32 und verwendet die vorherigen Einstellungen automatisch, und kann es wirklich durcheinander bringen.
ESP32 sollte statische IP vom Zugriffspunkt anfordern (z. B. WiFi -Router, LTE -Router); Ein weiterer Ansatz besteht darin, die statische IP auf der Router -Administratorseite für die ESP32 festzulegen. Der Router hat möglicherweise eine dynamische IP -Adresse, die alle paar Tage auslaufen kann, es sei denn, eine statische IP wird vom ISP gekauft. TODO: ESP32 -API zum Aktualisieren von IP auf Management Server.
Bei den meisten zivilen Infrastrukturanwendungen, bei denen die Überwachung der niedrigen Latenz nicht kritisch ist und die Datenraten nicht übermäßig hoch sind, tritt Lorawan als Branchenstandard auf. In Szenarien, die höhere Datenraten fordern, kann ESP jedoch für kürzere Distanzprojekte genutzt werden. Bei längeren Distanzprojekten könnte ein alternativer Ansatz die Integration zusätzlicher Zellmodems in jede Station und die Aufgabe der Verbindung zwischen den Stationen beinhalten. ESP jetzt - Peer to Peer ESP32 -Kommunikation
Referenz: Intro nach Lorawan von Andreas Spiess.
| Aspekt | ESP-now | Lorawan |
|---|---|---|
| Reichweite | Kurzstrecke, lokale Gebiet | Langstrecke, breite Fläche |
| Stromverbrauch | Niedrige Leistung | Ultra-niedrige Leistung |
| Datenrate | Hohe Datenraten, Echtzeit | Niedrige Datenraten, optimiert für den Bereich |
| Topologie | Peer-to-Peer (P2P) | Star-of-Stars |
| Skalierbarkeit | Kleine bis mittlere Netzwerke | Große Netzwerke |
| Regulatorisch | 2,4 GHz ISM Band | Sub-Gigahertz ISM-Bänder |
| Infrastruktur | Im bare ESP32 -Modul enthalten | Gateway -Geräte erforderlich |
Nach der Durchführung der Forschung scheint es, dass die Implementierung von Lorawan Gateway -Geräte erfordert. Die Entscheidung für ESP-Now bietet jedoch eine alternative Lösung und ermöglicht die Erforschung von Möglichkeiten zur Erweiterung der Reichweite. Lorawan kann hinzugefügt werden, wenn das Budget verfügbar ist.
Wenn ein Lora -Gateway nicht erforderlich ist, kann die Firmware für alle ESP32 -Geräte ähnlich bleiben. Nur das "Gateway -Gerät" oder die Hauptstation benötigt Anpassungen, um die Kombination aus der Datenkommunikation und der Datentabelle für HTTP -Anforderungen von Remote -Clients zu verarbeiten. Umspannwerke sollten weiterhin die lokale WLAN -Kommunikation unterstützen und Webseiten für Benutzer in Bereichen ohne Zellservice bedienen.
Das Gerät wird über die WiFi -Manager -Schnittstelle konfiguriert, die im Wesentlichen eine Website für Benutzer zum Festlegen von Modi bedient.
ESP-32 Dev Boards mit verfügbaren externen Antennenverbindungen werden empfohlen: ESP32-Waom-U. Der ESP-Now-Langstreckenmodus sollte sowohl in städtischen als auch in ländlichen Gebieten untersucht werden.
Die Datenprotokollierungsfunktion sollte verschiedene Protokollierungsmodi unterstützen. Könnte auf der Grundlage des verwendeten Protokolls verallgemeinert werden: I2C, SPI, RS485 usw. Die Bestätigung ist vor dem Löschen der Datei erforderlich.
Bei der Schnittstelle mit neuen Peripheriegeräten kann dieser GPIO -PIN -Monitor eine Remote -Überwachung von UserInterface für das Prototyping bereitstellen.
Todo noch nicht getestet, vibrierende Drahtsensoren, analoge Sensoren, SaaS. Ich möchte die gleichen Funktionen haben: https://www.geo-instruments.com/technology/wireless-logger-networks/
Verwenden Sie ESP32 Vin Out für die Stromversorgung, Multimeter zeigt eine Spannung von ungefähr 4,5 V. Verbinden Sie ESP32 Vin mit V33 auf VM501, GND mit GND. Initialisieren Sie den UART -Port 1 mit GPIO16 als RX und GPIO17 als TX. HardwareSerial VM(1); So konfigurieren Sie den UART -Port auf ESP32. Run VM.begin(9600, SERIAL_8N1, 16, 17); Um UART -Port 1 mit GPIO16 als RX und GPIO17 als TX zu initialisieren. In diesem Projekt implementierte VM.Serial -UART -Protokollfunktionen basieren auf dem Modbus -Protokoll:
Derzeit wird die freie Version von Elegantota ohne Lizenz für kommerzielle Anwendungen verwendet. Documentaion: https://docs.elegantota.pro/ Für kommerzielle Anwendungen kann eine einfache Arduino OTA -Wrapper -Bibliothek entwickelt werden, um Elegantota zu vermeiden. Todo Develope eigene Version von OTA, um Einschränkungen zu vermeiden. Denken Sie daran, dass die Async -Webserver -Opetion in ElegantOTA.h in ./pio/libdeps/esp32dev/ElegantOTA ermöglicht werden kann.
Auf Port 80 wird eine Instanz von AsyncWebserver erstellt. Eine Rückruffunktion wird eingerichtet, um eingehende HTTP -GETP -Anforderungen im Stamm zu verarbeiten ("/"), indem mit dem Inhalt einer Datei, die im SPIFFS -Dateisystem gespeichert ist, antwortet. Passen Sie die Dateiname -Variable an die gewünschte Datei an. Nach dem Konfigurieren des Servers wird er mit server.begin() gestartet.
Impletement unter Verwendung der Präferenz.h -Bibliothek.
credentials
{
"WIFI_SSID": "*********",
"WIFI_PASSWORD": "**********",
"gmtOffset_sec": "************"
}
Der Master Logger sollte eine Masterliste aller Umspannsysteminformationen haben.
[
{
"macAddress": "30:83:98:00:52:8C",
"batteryVoltage": "3.7V"
},
{
"macAddress": "30:83:98:00:52:8C",
"batteryVoltage": "3.7V"
},
]
Der Logger sollte auf Route /api/readings für Timeseries -Anfragen einleiten. Der Client kann die sensorId , start und end und readingsOptions angeben. Eine Beispielanforderung sollte wie folgt aussehen:
/api/readings?sensorId=238&start=2024-02-06T13:40:00&end=2024-02-13T13:40:00&readingsOptions=0
Erstellt von Qiwei Mao
Zufällige Nerd-Tutorials: https://randomnerdtutorials.com/projects-esp32/ Dashboard: https://github.com/ayushsharma82/esp-dash GitHub Referenz https://github.com/topics/sens-data-collection