Buon giorno a tutti…
Ho un piccolo grande problema in un mio progetto dove sto usando diverse librerie che funzionano ottimamente senza conflitti tra loro.
Ma ora devo trasferire delle variabili tra un NANO ed ESP 32 38 pin usando la libreria WIRE attraverso I2c.
Risultato non ho trasferimento dati tra i due processori LCD non funziona e BME 680 non viene riconosciuto.
In sintesi
NANO deve inviare dati di una variabile (x nel mio caso) attraverso I2c
ESP 32 deve riceve dati con I2c usando libreria WIRE
ESP 32 ha collegato con I2c una display LCD 24x4
ESP 32 ha collegato con I2c un BME 680
GND in comune alimentazione 5V.
ecc.
Tutti i servizi con I2c funzionano perfettamente senza libreria WIRE
Appena inserisco quest’ultima nel progetto non avviene alcun trasferimento tra NANO ed ESP 32.
Le istruzioni funzionano perfettamente tra NANO ed ESP 32 usando solo la WIRE ed eliminando l’utilizzo delle altre periferiche che sfruttano I2c
Collegamenti ridottissimi 10cm circa.
Attraverso la seriale mi viene aggiornata solo la variabile x del Loop con la stampa dello zero assegnata precedentemente, ma non aggiornata dal receiveEvent(int howMany).
Qualche idea? Devo usare una libreria diversa? Ci sono problemi noti con ESP 32 e la WIRE?
Ho già cercato un problema simile in rete, ma non ho trovato nulla per il mio caso.
Grazie in anticipo per l’attenzione.
#include <Wire.h> // Library for I2C communication
#define I2C_DEV_ADDR 0x55
#include <LiquidCrystal_I2C.h> // Library for LCD
//------------------------------------------------------------------------ SENSOR BME 680 //
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include "MutichannelGasSensor.h"
#include "Adafruit_BME680.h"
#define SEALEVELPRESSURE_HPA (1022.6) //(1013.25)
float correzione_temperatura = 2.08;
float correzione_pressione = 12.5;
Adafruit_BME680 bme;
float temperature;
float pressure;
float humidity;
float gas_resistance;
float readAltitude;
//------------------------------------------------------------------------ SENSOR BME 680 //
//--------------------------------------------------------------------------- LCD DISPLAY //
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
int x = 0;
void setup() {
//--------------------------------------------------------------------------- LCD DISPLAY //
Wire.begin((uint8_t)I2C_DEV_ADDR); // Inizializzazione I2c
Wire.onReceive(receiveEvent);
Serial.begin(115200); // Inizializzazione Seriale
// ---- S E T U P - LCD ----//
lcd.backlight(); // // Backlight ON LCD
lcd.begin(20, 4); // // Inizializzazione Display LCD 20x4
// ---- S E T U P - LCD ----//
// ---- S E T U P - BME 680 ----//
if (!bme.begin()) {
Serial.println(F("Could not find a valid BME680 sensor, check wiring!"));
//while (1);
}
// Set up oversampling and filter initialization
bme.setTemperatureOversampling(BME680_OS_8X);
bme.setHumidityOversampling(BME680_OS_2X);
bme.setPressureOversampling(BME680_OS_4X);
bme.setIIRFilterSize(BME680_FILTER_SIZE_3);
bme.setGasHeater(320, 150); // 320*C for 150 ms
// ---- S E T U P - BME 680 ----//
}
void loop() {
BME_680(); // aggiorna valori dei Sensor
delay(100);
Serial.print("x nel loop ");
Serial.println(x);
lcd.setCursor(0, 0);
lcd.print(x);
}
void receiveEvent(int howMany) {
x = Wire.read();
Serial.print("x nella ricezione evento ");
Serial.println(x);
}
//------------------------------------------------------------------------ SENSOR BME 680 //
void BME_680() {
if (!bme.performReading()) {
Serial.println("Failed to perform reading :(");
return;
}
temperature = bme.temperature - correzione_temperatura; // fattore di correzione
pressure = (bme.pressure / 100.0) + correzione_pressione;
humidity = bme.humidity;
gas_resistance = bme.gas_resistance / 1000.0;
readAltitude = bme.readAltitude(SEALEVELPRESSURE_HPA);
// Obtain measurement results from BME680. Note that this operation isn't
// instantaneous even if milli() >= endTime due to I2C/SPI latency.
if (!bme.endReading()) {
Serial.println(F("Failed to complete reading :("));
return;
}
}