Ciao, mi accingo ad effettuare la mia prima richiesta di aiuto sperando sia anche l'ultima...
Seguendo il tutorial per postare i dati da sensori su Adafruit IO attraverso un modulo HUZZAH-ESP8266 ho modificato ed implementato il codice implementando senza problemi i sensori di temperatura e umidità e il sensore per gli UV (è analogico; potrei aver sbagliato la conversione il voltaggio letto e la restituzione dell'indice UV) e il tutto funziona a dovere (se poi il codice poteva essere scritto in modo più efficace o ridotto non lo so; ma fa il suo lavoro e a me basta per ora).
Ora ho acquistato un sensore per la luce, il TSL2591, che utilizzato in fase di prova, da solo, funziona a dovere mentre nel momento di aggiungerlo agli altri non riesco a farlo andare. Nello specifico non capisco, a differenza degli altri sensori, come far leggere il valore dei lux da postare poi nell'IO.
Vi allego il codice intanto
// Libraries
#include <ESP8266WiFi.h>
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
#include "Adafruit_SHT31.h"
#include "Adafruit_TSL2591.h"
#include <Adafruit_Sensor.h>
// WiFi parameters
#define WLAN_SSID "xxxx"
#define WLAN_PASS "xxxx"
// Adafruit IO
#define AIO_SERVER "io.adafruit.com"
#define AIO_SERVERPORT 1883
#define AIO_USERNAME "xxxx"
#define AIO_KEY "xxxx"
Adafruit_SHT31 sht;
Adafruit_TSL2591 tsl = Adafruit_TSL2591(2591);
//Dichiaro il pin analogico
int analogPin = 12;
int val = 12;
void configureSensor (void) {
tsl.setGain(TSL2591_GAIN_MED);
tsl.setTiming(TSL2591_INTEGRATIONTIME_100MS);
}
// Functions
void connect();
// Create an ESP8266 WiFiClient class to connect to the MQTT server.
WiFiClient client;
// Setup the MQTT client class by passing in the WiFi client and MQTT server and login details.
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
/****************************** Feeds ***************************************/
// Setup feeds for temperature & humidity
Adafruit_MQTT_Publish temperature = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/temperatura");
Adafruit_MQTT_Publish humidity = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/umidità");
Adafruit_MQTT_Publish uvin = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/UVI");
Adafruit_MQTT_Publish lux = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/lux");
/*************************** Sketch Code ************************************/
void setup() {
// Init sensor
sht.begin();
tsl.begin();
configureSensor();
Serial.begin(115200);
Serial.println(F("Esempio di trasmissione verso Adafruit"));
// Connect to WiFi access point.
Serial.println(); Serial.println();
delay(10);
Serial.print(F("Connessione a "));
Serial.println(WLAN_SSID);
WiFi.begin(WLAN_SSID, WLAN_PASS);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(F("."));
}
Serial.println();
Serial.println(F("WiFi connesso"));
Serial.println(F("Indirizzo IP: "));
Serial.println(WiFi.localIP());
// connect to adafruit io
connect();
}
void unifiedSensorAPIRead(void)
{
/* Get a new sensor event */
sensors_event_t event;
tsl.getEvent(&event);
if ((event.light == 0) |
(event.light > 4294966000.0) |
(event.light <-4294966000.0))
{
/* If event.light = 0 lux the sensor is probably saturated */
/* and no reliable data could be generated! */
/* if event.light is +/- 4294967040 there was a float over/underflow */
Serial.println(F("Invalid data (adjust gain or timing)"));
}
else
{
Serial.print(event.light); Serial.println(F(" lux"));
}
}
void loop() {
// ping adafruit io a few times to make sure we remain connected
if (! mqtt.ping(3)) {
// reconnect to adafruit io
if (! mqtt.connected())
connect();
}
// Grab the current state of the sensor
float humidity_data = (float)sht.readHumidity();
float temperature_data = (float)sht.readTemperature();
float sensorValue = analogRead(analogPin);
float sensorVoltage = sensorValue / 1024 * 3.3;
float uvin_data = sensorVoltage / 0.1;
float lux_data = unifiedSensorAPIRead();
// Publish data
if (! temperature.publish(temperature_data))
Serial.println(F("Pubblicazione temperatura fallita"));
else
Serial.println(F("Temperatura pubblicata!"));
if (! humidity.publish(humidity_data))
Serial.println(F("Pubblicazione umidità fallita"));
else
Serial.println(F("Umidità pubblicata!"));
if (! uvin.publish(uvin_data))
Serial.println(F("Pubblicazione uv fallita"));
else
Serial.println(F("UV Pubblicati"));
if(! lux.publish(lux_data))
Serial.print(F("Pubblicazione Lux fallita"));
else
Serial.print(F("Lux pubblicati"));
// 360e4 è la pausa da un'ora
delay(360e4);
}
// connect to adafruit io via MQTT
void connect() {
Serial.print(F("Connessione ad Adafruit IO... "));
int8_t ret;
while ((ret = mqtt.connect()) != 0) {
switch (ret) {
case 1: Serial.println(F("Wrong protocol")); break;
case 2: Serial.println(F("ID rejected")); break;
case 3: Serial.println(F("Server unavail")); break;
case 4: Serial.println(F("Bad user/pass")); break;
case 5: Serial.println(F("Not authed")); break;
case 6: Serial.println(F("Failed to subscribe")); break;
default: Serial.println(F("Connection failed")); break;
}
if (ret >= 0)
mqtt.disconnect();
Serial.println(F("Riprovando a connettersi..."));
delay(10000);
}
Serial.println(F("Adafruit IO Connessa!"));
}
Come vedete non c'è molto di mio all'interno, ho aggiunto il deepSleep e non avendo acnora un RTC (già ordinato) l'ho dovuto un attimo tarare rispetto all'ora di sonno che dovrebbe rispettare (adesso resta in deep per un'ora e un secondo circa e mi va bene ancora) ma appena avrò il RTC utilizzerò quello sicuramente.
Con questo codice, andando a verificarlo ho questo errore
exit status 1
void value not ignored as it ought to be
capisco, o almeno credo, che il problema sia nel codice per la lettura dei lux, ma le mie scarse conoscenze non mi permettono di risolvere la questione. Dovrei creare una variabile nella quale inserire la lettura dei lux e poi mandarla verso la pubblicazione? La dovrei indicare prima del setup o dentro? il fatto che utilizzo il unifiedSensorAPIRead() mi permette di inserirlo in un'altra variabile? non è già una variabile di suo?
Insomma come si capisce dalle ultime domande non so come uscire da questo blocco e credo che già essere indirizzato verso una soluzione potrebbe aiutarmi.
Grazie a chi vorrà aiutarmi