Arduino Nano ESP32 Web Table avec la Bibliothèque DIYables ESP32 WebApps

Aperçu

Ce tutoriel couvre la classe DIYablesWebTablePage de la bibliothèque DIYables ESP32 WebApps. La page affiche un tableau à deux colonnes attribut-valeur dans le navigateur. Les lignes sont définies une fois sur l'Arduino Nano ESP32 au démarrage avec addRow(). Pendant le fonctionnement, les valeurs individuelles sont mises à jour via WebSocket en appelant updateValue(). Le navigateur met automatiquement en surbrillance les valeurs en cours de changement (rouge) par rapport aux valeurs qui se sont stabilisées (bleu), sans code de sketch supplémentaire.

Arduino Nano ESP32 Web Table

Ce que ce Tutoriel Couvre

  • Définir les lignes du tableau avec des noms d'attributs dans setup()
  • Envoyer des mises à jour de valeurs au moment de l'exécution
  • Comprendre la mise en surbrillance automatique de détection de changement du navigateur
  • Limites du nombre de lignes du tableau

Matériel Requis

1×Arduino Nano ESP32
1×Câble USB Type-A vers Type-C (pour PC USB-A)
1×Câble USB Type-C vers Type-C (pour PC USB-C)
1×Recommandé: Carte d'extension à bornier à vis pour Arduino Nano
1×Recommandé: Carte d'extension breakout pour Arduino Nano
1×Recommandé: Répartiteur d'alimentation pour Arduino Nano ESP32

Ou vous pouvez acheter les kits suivants:

1×Kit de Capteurs DIYables (18 capteurs/écrans)
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.

Étapes

Suivez ces instructions étape par étape :

  • Si c'est la première fois que vous utilisez l'Arduino Nano ESP32, consultez le tutoriel sur Installation du logiciel Arduino Nano ESP32..
  • Connectez la carte Arduino Nano ESP32 à votre ordinateur avec un câble USB.
  • Lancez l'IDE Arduino sur votre ordinateur.
  • Sélectionnez la carte appropriée (ex. Arduino Nano ESP32) et le port COM.
  • Naviguez vers l'icône Bibliothèques dans la barre gauche de l'IDE Arduino.
  • Cherchez "DIYables ESP32 WebApps", puis trouvez la bibliothèque DIYables ESP32 WebApps de DIYables
  • Cliquez sur le bouton Installer pour installer la bibliothèque.
  • Search for DIYables ESP32 WebApps created by DIYables and click the Install button.
Newbiely | Arduino IDE 2.3.8
──
File
Edit
Sketch
Tools
Help
Arduino Nano ESP32
Library Manager
Type:
All
Topic:
All
DIYables ESP32 WebApps by DIYables
A comprehensive library designed for ESP32 that provides multiple professional web applications including Web Monitor, Chat, Digital Pin Control, Sliders, Joystick, Analog Gauge, Rotator Control, and Temperature Display via WebSocket communication. Features modular architecture for memory efficiency, automatic config handling, and perfect for IoT projects, robotics, sensor monitoring, servo/stepper control, temperature monitoring, and remote ESP32 control. More info
1.0.1
INSTALL
Newbiely.ino
···
1 void setup() {
Output
Serial Monitor
Ln 1, Col 1
Arduino Nano ESP32 on COM15
1
  • On vous demandera d'installer d'autres dépendances de bibliothèques
  • Cliquez sur le bouton Installer tout pour installer toutes les dépendances de bibliothèques.
  • Dans l'IDE Arduino, allez dans Fichier Exemples DIYables ESP32 WebApps WebTable, ou copiez le code ci-dessus et collez-le dans l'éditeur de l'IDE Arduino
/* * DIYables ESP32 WebApps Library - WebTable Example * * This example demonstrates how to create a web-based table interface * that displays real-time data in a two-column format (attribute-value pairs). * * Features: * - Two-column table with attributes and real-time values * - WebSocket-based real-time updates * - Configurable table rows in setup() * - Dynamic value updates during runtime * - Modern responsive web interface * * Hardware: ESP32 Boards * * Instructions: * 1. Update WiFi credentials below * 2. Upload the code to your Arduino * 3. Open Serial Monitor to get the IP address * 4. Open web browser and go to: * - Home page: http://[ARDUINO_IP]/ * - WebTable: http://[ARDUINO_IP]/web-table * 5. Watch real-time data updates in the table * * Created by DIYables * Visit: https://diyables.com for more tutorials and projects */ #include <DIYables_ESP32_Platform.h> #include <DIYablesWebApps.h> // WiFi credentials - Update these with your network details const char WIFI_SSID[] = "YOUR_WIFI_SSID"; const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD"; // Initialize web server and pages ESP32ServerFactory serverFactory; DIYablesWebAppServer server(serverFactory, 80, 81); DIYablesHomePage homePage; DIYablesWebTablePage tablePage; // Variables to simulate sensor data float temperature = 20.5; float humidity = 65.0; int lightLevel = 512; unsigned long uptime = 0; bool ledState = false; int counter = 0; void setup() { Serial.begin(9600); Serial.println("DIYables ESP32 WebApp - Web Table Example"); // Initialize built-in LED pinMode(LED_BUILTIN, OUTPUT); // Add web apps server.addApp(&homePage); server.addApp(&tablePage); // Optional: Add 404 page for better user experience server.setNotFoundPage(DIYablesNotFoundPage()); // Start the WebApp server server.begin(WIFI_SSID, WIFI_PASSWORD); // Set up callback for data requests tablePage.onTableValueRequest(onDataRequested); // Configure table structure in setup - attributes are set once setupTableStructure(); Serial.println("WebTable Server started!"); } void loop() { server.loop(); // Update sensor values every 2 seconds static unsigned long lastUpdate = 0; if (millis() - lastUpdate > 2000) { updateSensorValues(); sendRealTimeUpdates(); lastUpdate = millis(); } // Toggle LED every 5 seconds static unsigned long lastLedToggle = 0; if (millis() - lastLedToggle > 5000) { ledState = !ledState; digitalWrite(LED_BUILTIN, ledState); // Send LED status update to web interface tablePage.sendValueUpdate("LED Status", ledState ? "ON" : "OFF"); lastLedToggle = millis(); } delay(10); } // Setup table structure - called once in setup() void setupTableStructure() { Serial.println("Setting up table structure..."); // Add table rows with attributes only (no values stored) tablePage.addRow("Device Name"); tablePage.addRow("Temperature"); tablePage.addRow("Humidity"); tablePage.addRow("Light Level"); tablePage.addRow("Uptime"); tablePage.addRow("LED Status"); tablePage.addRow("Counter"); tablePage.addRow("WiFi SSID"); tablePage.addRow("IP Address"); tablePage.addRow("Free Memory"); Serial.println("Table structure configured with " + String(tablePage.getRowCount()) + " rows"); } // Simulate sensor readings and send values to web interface void updateSensorValues() { // Simulate temperature sensor (20-30°C range) temperature = 20.0 + (sin(millis() / 10000.0) * 5.0) + random(-10, 10) / 10.0; // Simulate humidity sensor (40-80% range) humidity = 60.0 + (cos(millis() / 8000.0) * 15.0) + random(-20, 20) / 10.0; // Simulate light sensor (0-1023 range) lightLevel = 512 + (sin(millis() / 5000.0) * 400) + random(-50, 50); if (lightLevel < 0) lightLevel = 0; if (lightLevel > 1023) lightLevel = 1023; // Update uptime uptime = millis() / 1000; // Increment counter counter++; } // Send real-time updates to web interface void sendRealTimeUpdates() { // Send individual value updates to web clients tablePage.sendValueUpdate("Temperature", String(temperature, 1) + "°C"); tablePage.sendValueUpdate("Humidity", String(humidity, 1) + "%"); tablePage.sendValueUpdate("Light Level", String(lightLevel)); tablePage.sendValueUpdate("Uptime", formatUptime(uptime)); tablePage.sendValueUpdate("Counter", String(counter)); tablePage.sendValueUpdate("Free Memory", String(getFreeMemory()) + " bytes"); } // Callback function called when web client requests table data void onDataRequested() { Serial.println("Web client requested table data"); // Send all current values to web interface tablePage.sendValueUpdate("Device Name", "ESP32"); tablePage.sendValueUpdate("Temperature", String(temperature, 1) + "°C"); tablePage.sendValueUpdate("Humidity", String(humidity, 1) + "%"); tablePage.sendValueUpdate("Light Level", String(lightLevel)); tablePage.sendValueUpdate("Uptime", formatUptime(uptime)); tablePage.sendValueUpdate("LED Status", ledState ? "ON" : "OFF"); tablePage.sendValueUpdate("Counter", String(counter)); tablePage.sendValueUpdate("WiFi SSID", WIFI_SSID); tablePage.sendValueUpdate("IP Address", WiFi.localIP().toString()); tablePage.sendValueUpdate("Free Memory", String(getFreeMemory()) + " bytes"); } // Format uptime in human-readable format String formatUptime(unsigned long seconds) { unsigned long days = seconds / 86400; unsigned long hours = (seconds % 86400) / 3600; unsigned long minutes = (seconds % 3600) / 60; unsigned long secs = seconds % 60; String result = ""; if (days > 0) result += String(days) + "d "; if (hours > 0) result += String(hours) + "h "; if (minutes > 0) result += String(minutes) + "m "; result += String(secs) + "s"; return result; } // Get approximate free memory int getFreeMemory() { // Simple approximation for demonstration // In a real application, you might use a more accurate method return 2048 - (counter % 1024); }
  • Mettez à jour les identifiants WiFi dans le sketch :
const char WIFI_SSID[] = "YOUR_WIFI_NETWORK"; const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD";
  • Cliquez sur le bouton Téléverser dans l'IDE Arduino pour téléverser le code sur l'Arduino Nano ESP32
  • Ouvrez le Moniteur Série
  • La sortie du Moniteur Série devrait ressembler à ceci :
Newbiely | Arduino IDE 2.3.8
──
File
Edit
Sketch
Tools
Help
Arduino Nano ESP32
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano ESP32' on 'COM15')
New Line
9600 baud
DIYables WebApp - Web Table Example INFO: Added app / INFO: Added app /web-table DIYables WebApp Library Platform: Arduino Nano ESP32 Network connected! IP address: 192.168.0.2 HTTP server started on port 80 Configuring WebSocket server callbacks... WebSocket server started on port 81 WebSocket URL: ws://192.168.0.2:81 WebSocket server started on port 81 ========================================== DIYables WebApp Ready! ========================================== Web Interface: http://192.168.0.2 WebSocket: ws://192.168.0.2:81 Available Applications: Home Page: http://192.168.0.2/ Web Table: http://192.168.0.2/web-table ==========================================
Ln 11, Col 1
Arduino Nano ESP32 on COM15
2
  • Si rien n'apparaît, appuyez sur le bouton de réinitialisation de la carte.
  • Entrez l'adresse IP du Moniteur Série dans un navigateur sur le même réseau.
  • Exemple : http://192.168.0.2
  • La page d'accueil affiche une carte pour l'application de tableau :
Arduino Nano ESP32 DIYables WebApp page d'accueil avec l'application Web Table
  • Sélectionnez la carte Web Table pour ouvrir la page de tableau de données :
Arduino Nano ESP32 DIYables WebApp application Web Table
  • La page est également directement accessible à http://192.168.0.2/web-table.

Définition de la Structure du Tableau

Appelez addRow() à l'intérieur de setupTableStructure() pour définir chaque nom d'attribut. L'ordre des appels addRow() détermine l'ordre d'affichage dans le navigateur.

void setupTableStructure() { tablePage.addRow("Device Name"); tablePage.addRow("Firmware Version"); tablePage.addRow("Uptime (s)"); tablePage.addRow("Temperature (C)"); tablePage.addRow("Free Heap (bytes)"); }

Le nombre maximum de lignes est de 20.

Envoi de Mises à Jour de Valeurs

Valeurs Initiales au Démarrage

Définissez les valeurs initiales pour chaque ligne immédiatement après avoir défini la structure :

tablePage.updateValue("Device Name", "Arduino Nano ESP32"); tablePage.updateValue("Firmware Version", "1.0.0");

Mises à Jour en Temps Réel dans la Boucle

Envoyez de nouvelles valeurs pendant le fonctionnement. Chaque appel met à jour la ligne d'attribut correspondante dans le navigateur sans reconstruire le tableau complet :

void loop() { webAppsServer.loop(); tablePage.updateValue("Uptime (s)", String(millis() / 1000)); tablePage.updateValue("Temperature (C)", String(readTemperature(), 1)); delay(1000); }

Mise en Surbrillance de Détection de Changement

Le navigateur suit l'historique des valeurs de chaque ligne en interne. Aucun état côté sketch n'est requis :

Couleur Signification
Rouge La valeur a changé dans le dernier intervalle de mise à jour
Bleu La valeur est stable depuis plusieurs intervalles
Blanc La valeur a été envoyée une fois et n'a pas été renvoyée

Le suivi des valeurs est entièrement côté client. L'Arduino Nano ESP32 ne stocke aucune valeur précédente.

Dépannage

Les lignes du tableau apparaissent dans le mauvais ordre

  • Les lignes s'affichent dans l'ordre où addRow() est appelé dans setupTableStructure()
  • N'appelez pas addRow() après webAppsServer.begin()

Les valeurs arrêtent de se mettre à jour

  • Confirmez que webAppsServer.loop() est appelé à chaque itération de loop()
  • Évitez les valeurs delay() supérieures à votre intervalle de mise à jour

Le nombre de lignes dépasse le maximum

  • La bibliothèque supporte jusqu'à 20 lignes
  • Combinez les valeurs liées en une seule chaîne pour réduire le nombre de lignes si nécessaire

Page inaccessible

  • Vérifiez l'adresse IP du Moniteur Série
  • Confirmez que l'appareil du navigateur et la carte sont sur le même réseau WiFi

※ NOS MESSAGES

  • N'hésitez pas à partager le lien de ce tutoriel. Cependant, veuillez ne pas utiliser notre contenu sur d'autres sites web. Nous avons investi beaucoup d'efforts et de temps pour créer ce contenu, veuillez respecter notre travail !