Skip to content

Instantly share code, notes, and snippets.

@cpave3
Created November 1, 2021 10:59
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save cpave3/cdd11daeafdef11b371d02996172d749 to your computer and use it in GitHub Desktop.
Save cpave3/cdd11daeafdef11b371d02996172d749 to your computer and use it in GitHub Desktop.
#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>
#include "DHT.h"
#define DHTPIN 4 // Digital pin connected to the DHT sensor
#define DHTTYPE DHT11 // DHT 11
// Set up your WiFi connection here
// WiFi AP SSID
#define WIFI_SSID "<your ssid>"
// WiFi password
#define WIFI_PASSWORD "<your password>"
// Set up your InfluxDB details here
// InfluxDB v2 server url (Use: InfluxDB UI -> Load Data -> Client Libraries)
#define INFLUXDB_URL "http://<your ip>:8086"
// InfluxDB v2 server or cloud API authentication token (Use: InfluxDB UI -> Data -> Tokens -> <select token>)
#define INFLUXDB_TOKEN "O24__XgbcJyoctWgsEjot6lW2Eh_xX-Jrw54cJ5YLssz8EIYAEd62Xgj_ulSeBeH4w-4o5PpLGbWeE7dpM8tcg=="
// InfluxDB v2 organization id (Use: InfluxDB UI -> User -> About -> Common Ids )
#define INFLUXDB_ORG "<your org>"
// InfluxDB v2 bucket name (Use: InfluxDB UI -> Data -> Buckets)
#define INFLUXDB_BUCKET "<your bucket>"
// Set timezone string according to https://www.gnu.org/software/libc/manual/html_node/TZ-Variable.html
#define TZ_INFO "CET-1CEST,M3.5.0,M10.5.0/3"
// InfluxDB client instance with preconfigured InfluxCloud certificate
InfluxDBClient client(INFLUXDB_URL, INFLUXDB_ORG, INFLUXDB_BUCKET, INFLUXDB_TOKEN, InfluxDbCloud2CACert);
// Create your Data Point here
Point sensor("climate");
// Set up the DHT connection
DHT dht(DHTPIN, DHTTYPE);
void setup() {
// Start Serial for monitoring
Serial.begin(115200);
// Init the DHT sensor
dht.begin();
// 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(100);
}
Serial.println();
// Add tags. Here we will track which device our data is coming from
sensor.addTag("device", DEVICE);
// 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() {
// Clear fields for reusing the point. Tags will remain untouched
sensor.clearFields();
// Read the temperature and humidity from the sensor, and add them to your data point, along with a calculated heat index
float h = dht.readHumidity();
float t = dht.readTemperature();
sensor.addField("humidity", h);
sensor.addField("temperature", t);
sensor.addField("heat_index", dht.computeHeatIndex(t, h, false));
// Print what are we exactly writing
Serial.print("Writing: ");
Serial.println(sensor.toLineProtocol());
// If no Wifi signal, try to reconnect it
if ((WiFi.RSSI() == 0) && (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);
}
@hongbo-miao
Copy link

Thanks for sharing! 😊

@korrakot-kan
Copy link

Can I omit time sync? And how to write the code? Thanks!

@cpave3
Copy link
Author

cpave3 commented Jan 23, 2024

Can I omit time sync? And how to write the code? Thanks!

@korrakot-kan you might be able to get away without time sync if you're target influxdb server isn't using SSL. Best thing to try is just removing it and seeing if everything still works as intended.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment