Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <WiFi.h>
- #include <TinyGPS++.h>
- #include <WebServer.h>
- #define RXD2 16
- #define TXD2 17
- #define GPS_BAUD 9600
- TinyGPSPlus gps;
- HardwareSerial gpsSerial(2);
- const char* ssid = "ESP32-Server";
- const char* password = "12345678";
- WebServer server(80);
- String latestData = "No data received yet";
- unsigned long lastCheckTime = 0;
- const unsigned long checkInterval = 1000;
- bool dataReceived = false;
- float totalTemp = 0, totalHumidity = 0, totalDust = 0, totalMQ135 = 0, totalMQ2 = 0;
- int sampleCount = 0;
- float latestTemp, latestHumidity, latestDust, latestMQ135, latestMQ2;
- String lat = "14.8", lon = "121.7";
- void handleRoot() {
- String html = R"rawliteral(
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="UTF-8">
- <meta http-equiv='refresh' content='2'>
- <title>ESP32 Telemetry</title>
- <style>
- body {
- font-family: Arial, sans-serif;
- background-color: #f0f8ff;
- text-align: center;
- padding: 50px;
- }
- table {
- margin: auto;
- border-collapse: collapse;
- width: 80%;
- background-color: #ffffff;
- box-shadow: 0 0 10px rgba(0,0,0,0.1);
- }
- th, td {
- padding: 12px 15px;
- border-bottom: 1px solid #ddd;
- }
- th {
- background-color: #007acc;
- color: white;
- }
- tr:hover {
- background-color: #f1f1f1;
- }
- </style>
- </head>
- <body>
- <h2>ESP32 Telemetry Data</h2>
- <table>
- <tr><th>Parameter</th><th>Latest</th><th>Average</th></tr>
- )rawliteral";
- if (sampleCount > 0) {
- html += "<tr><td>Temperature</td><td>" + String(latestTemp, 1) + " °C</td><td>" + String(totalTemp / sampleCount, 1) + " °C</td></tr>";
- html += "<tr><td>Humidity</td><td>" + String(latestHumidity, 1) + " %</td><td>" + String(totalHumidity / sampleCount, 1) + " %</td></tr>";
- html += "<tr><td>Dust</td><td>" + String(latestDust, 2) + " µg/m³</td><td>" + String(totalDust / sampleCount, 2) + " µg/m³</td></tr>";
- html += "<tr><td>MQ135</td><td>" + String(latestMQ135, 2) + " ppm</td><td>" + String(totalMQ135 / sampleCount, 2) + " ppm</td></tr>";
- html += "<tr><td>MQ2</td><td>" + String(latestMQ2, 2) + " ppm</td><td>" + String(totalMQ2 / sampleCount, 2) + " ppm</td></tr>";
- html += "<tr><td>Latitude</td><td colspan='2'>" + lat + " °</td></tr>";
- html += "<tr><td>Longitude</td><td colspan='2'>" + lon + " °</td></tr>";
- } else {
- html += "<tr><td colspan='3'>" + latestData + "</td></tr>";
- }
- html += "</table></body></html>";
- server.send(200, "text/html", html);
- }
- void setup() {
- Serial.begin(9600);
- Serial.setTimeout(100);
- WiFi.softAP(ssid, password);
- IPAddress IP = WiFi.softAPIP();
- Serial.print("Access Point IP address: ");
- Serial.println(IP);
- gpsSerial.begin(GPS_BAUD, SERIAL_8N1, RXD2, TXD2);
- server.on("/", handleRoot);
- server.begin();
- Serial.println("Web server started");
- lastCheckTime = millis();
- }
- void loop() {
- server.handleClient();
- if (Serial.available()) {
- String input = Serial.readStringUntil('\n');
- Serial.println("Received: " + input);
- latestData = input + ", Lat: 14.8, Long: 121.7";
- int t1 = input.indexOf("Temp:");
- int h1 = input.indexOf("Humidity:");
- int d1 = input.indexOf("Dust:");
- int m1 = input.indexOf("MQ135:");
- int m2 = input.indexOf("MQ2:");
- if (t1 != -1 && h1 != -1 && d1 != -1 && m1 != -1 && m2 != -1) {
- latestTemp = input.substring(t1 + 5, h1).toFloat();
- latestHumidity = input.substring(h1 + 9, d1).toFloat();
- latestDust = input.substring(d1 + 5, m1).toFloat();
- latestMQ135 = input.substring(m1 + 6, m2).toFloat();
- latestMQ2 = input.substring(m2 + 4).toFloat();
- totalTemp += latestTemp;
- totalHumidity += latestHumidity;
- totalDust += latestDust;
- totalMQ135 += latestMQ135;
- totalMQ2 += latestMQ2;
- sampleCount++;
- }
- dataReceived = true;
- lastCheckTime = millis();
- }
- if (!dataReceived && millis() - lastCheckTime >= checkInterval) {
- latestData = "No data received";
- lastCheckTime = millis();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement