influx DB

Buon giorno,

ho un arduino MKR 1010 WiFi ed un modulo (MKR env Shield) per la rilevazione di alcuni dati quali temperatura, umididità ecc.

Ho cercato un file di esempio per rilevare e inserire via wifi questi dati in un DB influx.
Ed ho trovato questo di seguito.

Il problema è che in fase di compilazione mi da un errore sulla libreria WiFiUDP.h.
fatal error: WiFiUDP.h: No such file or directory

Ma io questa libreria non la trovo! ho trovato un singolo file su gitlab, il WiFiUDP.h ma non uno zip da caricare come libreria e non so come uscirne.

Chiedo a voi un aiuto per risolvere questo problema oppure se avete un esempio migliore per prendere ed inviare questi dati al DB via wifi.

Grazie!

#include <WiFiUDP.h>

#include <SPI.h>
#include <WiFi.h>
#include <WiFiUDP.h>

char ssid[] = "your network name";     //  your network SSID (name) 
char pass[] = "network password";    // your network password
int status = WL_IDLE_STATUS;     // the Wifi radio's status

// the IP address of your InfluxDB host
byte host[] = {10, 0, 1, 11};

// the port that the InfluxDB UDP plugin is listening on
int port = 8888;

WiFiUDP udp;

void setup() {
  // initialize serial port
  Serial.begin(9600);

  // attempt to connect using WPA2 encryption
  Serial.println("Attempting to connect to WPA network...");
  status = WiFi.begin(ssid, pass);

  // if unable to connect, halt
  if ( status != WL_CONNECTED) { 
    Serial.println("Couldn't get a WiFi connection");
    while(true);
  } 
  // if the conneciton succeeded, print network info
  else {
    Serial.println("Connected to network");
    // print your WiFi shield's IP address:
    IPAddress ip = WiFi.localIP();
    Serial.print("IP Address: ");
    Serial.println(ip);

    // print the received signal strength:
    long rssi = WiFi.RSSI();
    Serial.print("signal strength (RSSI):");
    Serial.print(rssi);
    Serial.println(" dBm");
  }
}

float getTemperature() {
  // get the reading from the temperature sensor
  int reading = analogRead(0);
 
  // convert that reading to voltage
  float voltage = reading * 5.0;
  voltage /= 1024.0; 
 
  // convert the voltage to temperature in Celsius (10mV per degree + 500mV offset)
  float temperatureC = (voltage - 0.5) * 100 ;  
  
  // now convert to Fahrenheit
  float temperatureF = (temperatureC * 9.0 / 5.0) + 32.0;

  return temperatureF;
}

void loop() {
  String line, temperature;

  // wait 1 second
  delay(1000);
  
  // get the current temperature from the sensor, to 2 decimal places
  temperature = String(getTemperature(), 2);

  // concatenate the temperature into the line protocol
  line = String("temperature value=" + temperature);
  Serial.println(line);
  
  // send the packet
  Serial.println("Sending UDP packet...");
  udp.beginPacket(host, port);
  udp.print(line);
  udp.endPacket();
}

Benvenuto, FrankLevis! :slight_smile:

Per cortesia, come da regolamento, per prima cosa presentati nell'apposita discussione spiegando bene quali esperienze hai in elettronica e programmazione, affinché possiamo conoscere la tua esperienza ed esprimerci con termini adeguati.

Poi leggi attentamente tutto il regolamento e impegnati a rispettarlo.

Ti ricordo che, purtroppo, fino a quando non avrai fatto la presentazione, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto. :slight_smile:

A dire il vero l'ho già scritta e la stavo inviando ma mi da il blocco dei 5 min :smiley:

appena passati posto!
Grazie!

Benvenuto :slight_smile:

Ho anche io da poco una MKR1010 Wifi
Pare che non sia bene usare la libreria WIFI in generale, ma meglio usare la WIFININA per la MKR
#include <WiFiNINA.h> invece di WiFi.h
#include <WiFiUdp.h>

Vedi se così compila.
Se non trova la WiFiNINA, prova a scaricarla da gestione librerie, a volte trova anche librerie correlate e ti chiede se scaricarle.

P.S. che versione IDE usi ? Scaricato come exe installante o come zip ?

Grazie per le informazioni!
Sto usando, per provare, sia la versione via web che quella installata via file exe.

Il mio problema, ne ho tanti eh, ma in questo caso è che non sono un programmatore e faccio un po fatica. Speravo di trovare un file di esempio per collegamento via wifi e passaggio file al db ma per ora sbatto solo la testa contro al muro :smiley:

La libreria wifinina l'ho trovata ed importata.

>FrankLevis: Quando si quota un post, NON è necessario riportarlo (inutilmente) tutto; bastano poche righe per far capire di cosa si parla ed a cosa ci si riferisce, inoltre, se si risponde al post immediatamente precedente, normalmente NON è necessario alcun "quote" dato che è sottinteso. :slight_smile:

Gli utenti da device "mobile" ringrazieranno per la cortesia :wink:

Guglielmo

P.S.: Ho eliminato io il "quote" dal tuo post qui sopra :wink:

FrankLevis:
La libreria wifinina l'ho trovata ed importata.

Ma ora compila ?
Qui un link ad un esempio generico invio stringa via UDP per MKR1010Wifi

Vedi che le #include sono quelle che ti ho indicato io.
Se hai ancora problemi a compilare, per me la prima soluzione è eliminare del tutto IDE installato tramite exe e scaricare la versione zip.

Ma domanda banale... Nell'IDE hai scaricato da Gestore Schede la MKR1010 ?

Dopo vari tentativi e ricerche ho costruito il seguente codice:

#include <SPI.h>
#include <WiFi.h>
#include <WiFiUDP.h>
#include <Arduino_MKRENV.h>

char ssid[] = "OrmaSpot";
char pass[] = "orma2014";
int status = WL_IDLE_STATUS;

float temperature = 0;
float humidity = 0;
float pressure = 0;
float UVA = 0;
float UVB = 0;
float UVIndex = 0;

byte host[] = {192, 168, 103, 11};
int port = 8888;
WiFiUDP udp;

void setup() {
  Serial.begin(9600);
  Serial.println("Attempting to connect to WPA network...");
  status = WiFi.begin(ssid, pass);

  if ( status != WL_CONNECTED) {
    Serial.println("Couldn't get a WiFi connection");
    while (true);
  }

  else {
    Serial.println("Connected to network");
    IPAddress ip = WiFi.localIP();
    Serial.print("IP Address: ");
    Serial.println(ip);
    long rssi = WiFi.RSSI();
    Serial.print("signal strength (RSSI):");
    Serial.print(rssi);
    Serial.println(" dBm");
  }
}

void loop() {

  if (!ENV.begin()) {
    Serial.println("Failed to initialize MKR ENV shield!");
    while (1);
  }

  temperature = ENV.readTemperature();
  humidity = ENV.readHumidity();
  pressure = ENV.readPressure();
  UVA = ENV.readUVA();
  UVB = ENV.readUVB();
  UVIndex = ENV.readUVIndex();

  String line, temperature, humidity, pressure, UVA, UVB, UVIndex;
  delay(1000);

  line = String("temperature value=" + temperature + humidity + pressure + UVA + UVB + UVIndex);
  Serial.println(line);

  Serial.println("Sending UDP packet...");
  udp.beginPacket(host, port);
  udp.print(line);
  udp.endPacket();
}

in fase di compilazione non mi restituisce nessun errore ma devo ancora testarlo sul campo. Sto aspettando che il mio collega mi abiliti l’UDP su influxdb.

Vi pare corretto?

Inoltre volevo abilitare il monitor seriale per leggere cosa succede ma non mi restituisce nulla, sempre in bianco. Sbaglio qualche cosa?

Grazie a tutti per qualsiasi aiuto

Non stampa neanche questo?
Serial.println("Attempting to connect to WPA network...");

nulla… ma ora ho fatto un passo indietro. Abbiamo deciso di inviare i dati normalmente e non via UDP.

Ho deciso quindi di usare la libreria WiFiNina per il wifi e la libreria influxdb per aggiornare i dati.

Ma quando vado in compilazione, sia con l’esempio originale e non toccato sia con la versione da me personalizzata mi restituisce degli errori e non ne vengo a capo. Non sono un programmatore, ho qualche difficoltà.

Da quanto ho capito l’errore è riferito alla libreria influxdb… se uso solo wifinina va tutto perfettamente.

questo l’errore:

Arduino:1.8.10 (Windows 10), Scheda:"Arduino MKR WiFi 1010"

In file included from c:\users\frank\appdata\local\arduino15\packages\arduino\tools\arm-none-eabi-gcc\7-2017q4\arm-none-eabi\include\c++\7.2.1\list:60:0,

                 from C:\Users\Frank\Documents\Arduino\libraries\ESP8266_Influxdb/InfluxDb.h:17,

                 from C:\Users\Frank\Documents\Arduino\wifi\wifi.ino:5:

c:\users\frank\appdata\local\arduino15\packages\arduino\tools\arm-none-eabi-gcc\7-2017q4\arm-none-eabi\include\c++\7.2.1\bits\stl_algobase.h:243:56: error: macro "min" passed 3 arguments, but takes just 2

     min(const _Tp& __a, const _Tp& __b, _Compare __comp)

                                                        ^

c:\users\frank\appdata\local\arduino15\packages\arduino\tools\arm-none-eabi-gcc\7-2017q4\arm-none-eabi\include\c++\7.2.1\bits\stl_algobase.h:265:56: error: macro "max" passed 3 arguments, but takes just 2

     max(const _Tp& __a, const _Tp& __b, _Compare __comp)

                                                        ^

Più di una libreria trovata per "WiFiNINA.h"
Usata: C:\Users\Frank\Documents\Arduino\libraries\WiFiNINA
Più di una libreria trovata per "InfluxDb.h"
Usata: C:\Users\Frank\Documents\Arduino\libraries\ESP8266_Influxdb
Più di una libreria trovata per "SPI.h"
Usata: C:\Users\Frank\AppData\Local\Arduino15\packages\arduino\hardware\samd\1.8.4\libraries\SPI
exit status 1
Errore durante la compilazione per la scheda Arduino MKR WiFi 1010.

questo il codice:

#include <SPI.h>
#include <WiFiNINA.h>
#include <InfluxDb.h>

#include "arduino_secrets.h"

char ssid[] = SECRET_SSID;
char pass[] = SECRET_PASS;
int status = WL_IDLE_STATUS;

#define INFLUXDB_HOST "192.168.103.11"
#define INFLUXDB_USER "arduino_dev"
#define INFLUXDB_PASS "123456"

Influxdb influx(INFLUXDB_HOST);

void setup() {
  Serial.begin(9600);
  Serial.println(" ### Hello ###");

  influx.setDbAuth("arduino_dev", INFLUXDB_USER, INFLUXDB_PASS);
  Serial.println("Setup done");
  

}

int loopCount = 0;
void loop() {
  loopCount++;

  InfluxData row("temperature");
  row.addTag("device", "alpha");
  row.addTag("sensor", "one");
  row.addTag("mode", "pwm");
  row.addValue("loopCount", loopCount);
  row.addValue("value", random(10, 40));

  influx.write(row);

  delay(5000);
}

demoralizzato :confused:

La libreria InfluxDB che cerchi di usare è per ESP8266 oppure ESP32 (cosi scrivono).
La compili per una MRK1010 è normale trovare incompatibilità.
Già solo ad inizio della InfluxDB.h trovi scritto:

#if defined(ESP8266)
#include <ESP8266HTTPClient.h>
#include <WiFiClientSecure.h>
#elif defined(ESP32)
#include <WiFi.h>
#include <HTTPClient.h>
#endif

Sembra che la InfluxDB richiede una libreria STL per gestire le liste (ovvero quel #include )
E forse la libreria STL del core per la MKR è diversa da quella sviluppata per ESP.
Come prova, se hai anche installato la board esp8266, compila settando una esp8266 e vedi se compila. Puoi leggere come installare la board qui: esp8266

Io in internet vedo anche una InfluxV2 (versione 2), non sò se risolve, non conosco Influx ne queste librerie scritte da non si sà chi. Tu da dove l’hai scaricata ?

FrankLevis:
Inoltre volevo abilitare il monitor seriale per leggere cosa succede ma non mi restituisce nulla, sempre in bianco. Sbaglio qualche cosa?

Grazie a tutti per qualsiasi aiuto

Se nel codice della setup() scrivi Serial.begin(9600); anche nel monitor seriale devi settare 9600
E poi potresti anche cliccare sul monitor seriale quando il msg è stato inviato. Prova a mettere una delay(1000); dopo la Serial.begin e prima della stampa della frase.

Intanto grazie mille per le risposte ed i consigli...

le librerie influxdb le ho cercate via google e poi trovate qui:

Ho provato anche le V2 ma mi restituisce esattamente gli stessi errori

FrankLevis:
Ho provato anche le V2 ma mi restituisce esattamente gli stessi errori

Se ho letto bene, la V2 si riferisce alla versione del database InfluxDB, si vede che i "comandi" sono diversi.

Così facendo la compilazione va a buon fine.

A questo punto mi conviene prendere un modulo wifi esp8266 e attaccarlo dove? Perchè sul sito non trovo nulla. Se faccio una ricerca per "esp8266" mi fa vedere solo i vari 1010 che ho già...

nid69ita:
Come prova, se hai anche installato la board esp8266, compila settando una esp8266 e vedi se compila. Puoi leggere come installare la board qui: esp8266

FrankLevis:
Così facendo la compilazione va a buon fine.
A questo punto mi conviene prendere un modulo wifi esp8266 e attaccarlo dove? Perchè sul sito non trovo nulla

Frank !!... quale sito ? Senza info specifiche non si capisce nulla ^-^
Se Arduino create/IoT purtroppo gratis solo x MKR mentre x Esp devi pagare.

Bisognerebbe prendere la lib influxDB e "modificarla" per core MKR

perdonami, sul sito ufficiale arduino non trovo moduli ESP8266 da compare o dove leggere specifiche e requisiti.

La cosa migliore sarebbe sicuramente modificare la libreria ma non ne ho le competenze e mi costerebbe di piu (in tempo perso) che compare l'hardware giusto per quella libreria

Arduino non ha fa schede ESP8266 o ESP32

FrankLevis:
La cosa migliore sarebbe sicuramente modificare la libreria ma non ne ho le competenze e mi costerebbe di piu (in tempo perso) che compare l’hardware giusto per quella libreria

Guarda, io sono un programmatore, ma purtroppo non conosco la libreria HttpClient usata in quella InfluxDB.
Ti posso dire che l’ho scaricata ed alcuni errori (quei min/max) li ho corretti.
Dentro la libreria c’e’ il file InfluxDb.h e dentro a quel file ad un certo punto c’e’ #include
Prima di quella basta aggiungere

#undef min
#undef max
#include <list>

e l’errore di compilazione su min e max scompare.

Poi però alcuni include li fa solo se hai ESP32 o ESP8266, quindi questo:

#if defined(ESP8266)
#include <ESP8266HTTPClient.h>
#include <WiFiClientSecure.h>
#elif defined(ESP32)
#include <WiFi.h>
#include <HTTPClient.h>
#endif

compilando per MKR non trova poi HTTPClient.
Per MRK si potrebbe installare la libreria ArduinoHttpClient e mettere un bel
#include <ArduinoHttpClient.h>dopo quel #endif o al posto di tutto quel blocco di codice
e devi anche cambiare questa riga:
HttpClient http; //HTTPClient http; questa la vecchia versione

Però poi da altri errori perchè la Influx usa dei comandi che probabilmente tra ArduinoHttpClient e HTTPClient sono diversi

Se qualcuno conosce la HttpClient potrebbe aiutarti