L'enregistreur de données ESP32 est un système d'acquisition de données rentable qui prend en charge des capteurs de fil vibrants et d'autres capteurs avec le protocole RS-485, TTL. Pour configurer le journaliste de données en tant qu'utilisateur final, vous pouvez le brancher sur votre ordinateur et configurer le journaliste dans un site Web à l'aide du navigateur. Pour les configurations avancées, vous pouvez programmer votre propre code et flasher le journaliste sur PC, en utilisant Platformoio ou Arduino IDE.
Utilisez ce guide: https://community.platformrio.org/t/redirect-esp32-log-messages-to-sd-card/33734, met à jour esp32-hal-log.h pour définir TAG
#ifdef USE_ESP_IDF_LOG
#ifndef TAG
#define TAG "myAPP"
#endif
Mettre à jour platformio.ini pour inclure:
build_flags= -DUSE_ESP_IDF_LOG -DCORE_DEBUG_LEVEL=5
Inclure les bibliothèques et définitions suivantes:
#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 Driver Numéro: https://arduino.stackexchange.com/questions/9111/how-to-install-ftdi-serial-drivers-on-mac
Activer le serveur Web async dans le
#define ELEGANTOTA_USE_ASYNC_WEBSERVER 1
Pour alimenter le kit de développement ESP32 via USB, une batterie 18650 est utilisée. Cependant, à des fins de production, un PCB personnalisé sera conçu et le module doit être alimenté via la broche 3V3 ou VIN pour minimiser la perte de puissance. Pour exploiter l'énergie solaire, le bouclier de 18650 est employé, facilitant l'alimentation de l'ESP32. Ce lien AliExpress fournit des détails sur le bouclier. La plage de tension d'entrée est spécifiée en 5V à 8V, bien que les tests préliminaires suggèrent qu'un panneau solaire 5V est fonctionnel. Une validation supplémentaire sera effectuée. SD semble seulement fonctionner avec la puissance de la broche VIN avec un convertisseur de mâle entre les deux.
Le tableau suivant décrit la consommation actuelle de l'ESP32 sous divers modes de fonctionnement:
| Mode | Consommation actuelle |
|---|---|
| WiFi TX, DSSS 1 Mbps, moue = +19,5 dBm | 240 mA |
| WiFi TX, OFDM 54 Mbps, Pout = +16 DBM | 190 MA |
| WiFi TX, OFDM MCS7, Pout = +14 DBM | 180 mA |
| WiFi Rx (écoute) | (95 ~ 100) MA |
| BT / BLE TX, POUT = 0 DBM | 130 mA |
| BT / BLE RX (écoute) | (95 ~ 100) MA |
Actuellement, la configuration comprend deux panneaux solaires de 0,3W 5 V, capables de fournir un maximum de 120 mA au bouclier.
L'enregistreur doit se synchroniser avec le serveur NTP lors de la mise sous configTime à l'aide de la bibliothèque time.h Utilisez getLocalTime(&timeinfo) pour obtenir l'heure actuelle. Cette fonction doit être appelée dans la fonction de journalisation pour obtenir l'heure exacte. Cependant, le temps ne serait pas conservé si le pouvoir était perdu. Un module RTC est nécessaire pour fournir du temps sans WiFi après Powerloss. Remarque: Je ne sais pas si l'implémentation actuelle (RTCLIB) interrogera périodiquement le serveur NTP. Cependant, les implémentations officielles par EspressIF interrogent périodiquement. https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/system/system_time.html
Notez que le DS1307 et l'écran OLED sont connectés au bus I2C, même bus mais adresse différente. Les bibliothèques sont conçues de telle sorte qu'ils peuvent scanner le bus I2C pour les adresses communes. Utilisez ce guide: https://esp32io.com/tutorials/esp32-ds1307-rtc-module Remarque que le minuscule module RTC ne fonctionne pas avec 3v3, mais VIN doit être fourni.
Documentation EspressIF sur les tables de partition: https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/partition-tables.html Si vous utilisez la plate-forme, la partition par défaut peut être trouvée dans cette répertoire: .platformio/packages/framework-arduinoespressif32/tools/partitions
https://components101.com/modules/micro-sd-card-module-pinout-features-datasheet-alternatives https://www.electronicwings.com/esp32/microsd-card-interfacing-with-esp32
Je ne sais pas, les fichiers de stockage par date peuvent être suffisants.
La fonction WiFi.onEvent() est utilisée pour enregistrer une fonction de rappel, WiFiEvent , qui sera invoquée lorsque des événements WiFi se produiront. Dans la fonction WiFevent, nous vérifions l'événement SYSTEM_EVENT_STA_DISCONNECTED , indiquant une déconnexion WiFi. Lorsque cet événement se produit, nous appelons reconnectToWiFi() pour tenter la reconnexion. De cette façon, la logique de reconnexion est encapsulée dans le rappel Wifivecent, en gardant la fonction Loop () sans code lié à la reconnexion.
FAIRE. Cette fonction est déclenchée lorsque l'interrupteur de bouton-poussoir physique est cliqué, l'ESP32 démarrera comme un point d'accès WiFi pour permettre à l'utilisateur de s'y connecter via WiFi. Un site Web de configuration de l'appareil sera servi sur le WiFi. https://dronebotworkshop.com/wifimanager/ Lisez ce numéro pour apprendre à effacer les paramètres wifi à partir de ESP32, lien. Sinon, l'ESP32 démarrera et utilisera automatiquement les paramètres précédents, peut vraiment gâcher.
ESP32 doit demander une IP statique au point d'accès (par exemple, routeur WiFi, routeur LTE); Une autre approche consiste à définir une IP statique dans la page d'administration du routeur pour l'ESP32. Le routeur peut avoir une adresse IP dynamique qui pourrait expirer tous les quelques jours, sauf si une IP statique est achetée auprès du FAI. TODO: API ESP32 pour mettre à jour IP vers le serveur de gestion.
Pour la plupart des applications d'infrastructure civile où la surveillance à faible latence n'est pas critique et les débits de données ne sont pas excessivement élevés, Lorawan apparaît en tant que norme de l'industrie. Cependant, dans les scénarios exigeant des débits de données plus élevés, ESP peut désormais être exploité pour des projets de distance plus courts. Pour les projets à distance plus longue, une approche alternative pourrait impliquer d'intégrer des modems cellulaires supplémentaires dans chaque station et de renoncer à l'interconnexion entre les stations. ESP MAINTENANT - PEER TO PEER ESP32 Communications
Référence: Intro à Lorawan par Andreas Spiess.
| Aspect | ESP-now | Lorawan |
|---|---|---|
| Gamme | Courte portée, région locale | Longue portée, grande zone |
| Consommation d'énergie | Faible puissance | Ultra-faible puissance |
| Taux de données | Taux de données élevés, en temps réel | Faibles débits de données, optimisés pour la plage |
| Topologie | Peer-to-peer (P2P) | Étoile des étoiles |
| Évolutivité | Réseaux petits et moyens | Réseaux à grande échelle |
| Réglementaire | Bande ISM 2,4 GHz | Bandes de l'ISM sous-gigahertz |
| Infrastructure | Inclus dans le module ESP32 nu | Appareils de passerelle requis |
Après avoir effectué des recherches, il semble que la mise en œuvre de Lorawan nécessite des appareils de passerelle. Cependant, Opter pour ESP-Now fournit une solution alternative et permet l'exploration des possibilités d'extension de plage. Lorawan peut être ajouté lorsque le budget est disponible.
Si une passerelle LORA n'est pas nécessaire, le micrologiciel pour tous les appareils ESP32 peut rester similaire. Seuls le «dispositif de passerelle» ou la station principale nécessite des ajustements pour gérer la communication de données et la combinaison de tableaux de données pour les demandes HTTP de clients distants. Les sous-stations doivent toujours prendre en charge la communication WiFi locale et servir des pages Web pour les utilisateurs dans les zones sans service cellulaire.
L'appareil sera configuré via l'interface WiFi Manager, qui sert essentiellement un site Web pour les utilisateurs pour définir des modes.
Des cartes de développement ESP-32 avec des connexions d'antenne externes disponibles sont recommandées: ESP32-wroom-u. Le mode à long terme ESP-NOW devrait être étudié dans les zones urbaines et rurales.
La fonction de journalisation des données doit prendre en charge différents modes de journalisation. Peut être généralisé en fonction du protocole utilisé: les lectures I2C, SPI, RS485, etc. doivent d'abord être enregistrées sur l'appareil, avant d'envoyer ESP-Now. La confirmation est nécessaire avant de supprimer le fichier.
Lors de l'interfaçage avec de nouveaux périphériques, ce moniteur GPIO PIN peut fournir à une surveillance à distance l'interface pour le prototypage.
TODO n'a pas encore testé de capteurs de fil vibrant, de capteurs analogiques, de SaaS. Je veux avoir les mêmes capacités: https://www.geoo-struments.com/technology/wireless-logger-networks/
Utilisez ESP32 VIN OUT pour l'alimentation électrique, le multimètre montre une tension d'environ 4,5 V. Connectez ESP32 VIN à V33 sur VM501, GND à GND. Initialiser le port UART 1 avec GPIO16 en tant que Rx et GPIO17 en tant que TX. Exécutez HardwareSerial VM(1); Pour configurer le port UART sur ESP32. Exécuter VM.begin(9600, SERIAL_8N1, 16, 17); Pour initialiser le port UART 1 avec GPIO16 en tant que Rx et GPIO17 en tant que TX. Les fonctions de protocole VM.Serial UART implémentées dans ce projet sont basées sur le protocole Modbus:
Actuellement, la version gratuite Elegantota est utilisée sans licence pour les applications commerciales. Documentaion: https://docs.elegantota.pro/ Pour les applications commerciales, une simple bibliothèque Arduino OTA Wrapper peut être développée pour éviter Elegantota. TODO DEVÉLOPE PROPRE VERSION D'OTA pour éviter les restrictions. Surtout, n'oubliez pas d'activer l'opétion du serveur Web asynchrone dans ElegantOTA.h dans ./pio/libdeps/esp32dev/ElegantOTA .
Une instance d'AsyncWebserver est créée sur le port 80. Une fonction de rappel est configurée pour gérer les demandes de GET HTTP entrantes sur la racine ("/") en répondant avec le contenu d'un fichier stocké dans le système de fichiers SPIFFS. Ajustez la variable de nom de fichier pour correspondre au fichier souhaité. Après la configuration du serveur, il est démarré avec server.begin() .
Implémenté à l'aide de la bibliothèque préférence.h.
credentials
{
"WIFI_SSID": "*********",
"WIFI_PASSWORD": "**********",
"gmtOffset_sec": "************"
}
L'enregistreur principal doit avoir une liste principale de toutes les informations du système de sous-station.
[
{
"macAddress": "30:83:98:00:52:8C",
"batteryVoltage": "3.7V"
},
{
"macAddress": "30:83:98:00:52:8C",
"batteryVoltage": "3.7V"
},
]
L'enregistreur doit se terminer sur l'itinéraire /api/readings pour les demandes de séquence de temps. Le client peut spécifier le sensorId , start et end et readingsOptions . Un exemple de demande devrait ressembler à ce qui suit:
/api/readings?sensorId=238&start=2024-02-06T13:40:00&end=2024-02-13T13:40:00&readingsOptions=0
Créé par Qiwei Mao
Tutoriels de nerd aléatoires: https://randomnerdtutorials.com/projects-esp32/ tableau de bord: https://github.com/ayushsharma82/esp-dash github référence https://github.com/topics/sensors-data-collection