#if defined(ESP32)
#include <WiFiMulti.h>
WiFiMulti wifiMulti;
#define DEVICE "ESP32"
#elif defined(ESP8266)
#include <ESP8266WiFiMulti.h>
ESP8266WiFiMulti wifiMulti;
#define DEVICE "ESP8266"
#endif
#include <InfluxDbClient.h>
#include <InfluxDbCloud.h>
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASSWORD ""
#define INFLUXDB_URL ""
#define INFLUXDB_TOKEN ""
#define INFLUXDB_ORG ""
#define INFLUXDB_BUCKET "test/test"
#define WRITE_PRECISION WritePrecision::S
// Set timezone string according to https://www.gnu.org/software/libc/manual/html_node/TZ-Variable.html
// Examples:
// Pacific Time: "PST8PDT"
// Eastern: "EST5EDT"
// Japanesse: "JST-9"
// Central Europe: "CET-1CEST,M3.5.0,M10.5.0/3"
#define TZ_INFO "WIB-7"
#define SEND_INTERVAL 1000
#define MAX_BATCH_SIZE 10
#define WRITE_BUFFER_SIZE 30
// InfluxDB client instance with preconfigured InfluxCloud certificate
InfluxDBClient client(INFLUXDB_URL, INFLUXDB_ORG, INFLUXDB_BUCKET, INFLUXDB_TOKEN, InfluxDbCloud2CACert);
// InfluxDB client instance without preconfigured InfluxCloud certificate for insecure connection
//InfluxDBClient client(INFLUXDB_URL, INFLUXDB_ORG, INFLUXDB_BUCKET, INFLUXDB_TOKEN);
// Data point
Point sensor("wifi_status");
unsigned long lastSendTime = 0;
void setup() {
Serial.begin(115200);
// Setup wifi
WiFi.mode(WIFI_STA);
wifiMulti.addAP(WIFI_SSID, WIFI_PASSWORD);
Serial.print("Connecting to wifi");
while (wifiMulti.run() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println();
// Add tags
sensor.addTag("device", DEVICE);
sensor.addTag("SSID", WiFi.SSID());
// Alternatively, set insecure connection to skip server certificate validation
//client.setInsecure();
client.setWriteOptions(WriteOptions().writePrecision(WRITE_PRECISION).batchSize(MAX_BATCH_SIZE).bufferSize(WRITE_BUFFER_SIZE));
// Accurate time is necessary for certificate validation and writing in batches
// For the fastest time sync find NTP servers in your area: https://www.pool.ntp.org/zone/
// Syncing progress and the time will be printed to Serial.
timeSync(TZ_INFO, "pool.ntp.org", "time.nis.gov");
// Check server connection
if (client.validateConnection()) {
Serial.print("Connected to InfluxDB: ");
Serial.println(client.getServerUrl());
} else {
Serial.print("InfluxDB connection failed: ");
Serial.println(client.getLastErrorMessage());
}
}
void loop() {
// Check if it's time to send data
if (millis() - lastSendTime >= SEND_INTERVAL) {
// Get the current time
time_t now = time(nullptr);
// Serial.print("It's time to send data: ");
// Serial.println(localtime(&now)->tm_sec);
// Check if the current second is 00
if (localtime(&now)->tm_sec == 0) {
// Store measured value into point
sensor.clearFields();
// Report RSSI of currently connected network
sensor.addField("rssi", WiFi.RSSI());
tm *localTime = localtime(&now);
time_t timestamp = mktime(localTime);
Serial.println(timestamp);
// Set the timestamp
sensor.setTime(timestamp);
// Print what are we exactly writing
Serial.print("Writing: ");
Serial.println(client.pointToLineProtocol(sensor));
// If no Wifi signal, try to reconnect it
if (wifiMulti.run() != WL_CONNECTED) {
Serial.println("Wifi connection lost");
}
// Write point
if (!client.writePoint(sensor)) {
Serial.print("InfluxDB write failed: ");
Serial.println(client.getLastErrorMessage());
}
// Update the last send time
lastSendTime = millis();
}
}
// // Store measured value into point
// sensor.clearFields();
// // Report RSSI of currently connected network
// sensor.addField("rssi", WiFi.RSSI());
// // Print what are we exactly writing
// Serial.print("Writing: ");
// Serial.println(client.pointToLineProtocol(sensor));
// // If no Wifi signal, try to reconnect it
// if (wifiMulti.run() != WL_CONNECTED) {
// Serial.println("Wifi connection lost");
// }
// // Write point
// if (!client.writePoint(sensor)) {
// Serial.print("InfluxDB write failed: ");
// Serial.println(client.getLastErrorMessage());
// }
// //Wait 10s
// Serial.println("Wait 10s");
// delay(10000);
}