Ciao a tutti! sto cercando di utilizzare il BME280 ed in primis ho svolto il test I2C:
#include <Wire.h>
void setup()
{
Wire.begin();
Serial.begin(9600);
while (!Serial); // Leonardo: wait for serial monitor
Serial.println("\nI2C Scanner");
}
void loop()
{
byte error, address;
int nDevices;
Serial.println("Scanning...");
nDevices = 0;
for(address = 1; address < 127; address++ )
{
// The i2c_scanner uses the return value of
// the Write.endTransmisstion to see if
// a device did acknowledge to the address.
Wire.beginTransmission(address);
error = Wire.endTransmission();
Serial.println(error);
delay(500);
if (error == 0)
{
Serial.print("I2C device found at address 0x");
if (address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println(" !");
nDevices++;
}
else if (error==4)
{
Serial.print("Unknown error at address 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
}
if (nDevices == 0)
Serial.println("No I2C devices found\n");
else
Serial.println("done\n");
delay(5000); // wait 5 seconds for next scan
}
L'ho eseguito sia con Arduino Uno che con l'ESP32, ottenendo sempre il medesimo risultato: errore 2. Il collegamento che ho effettuato, ad esempio con Arduino Uno, la Vin-->3.3V, SDA-->A4, SCL-->A5, GND-->GND. L'errore da cosa è dovuto e come faccio a risolverlo? In attesa di un gentile riscontro vi ringrazio anticipatamente
Guarda, ho avuto modo di fare la stessa prova proprio un paio di giorni fa ... avevo dei modulini BME280 presi tempo fa su AliExpress e non sapevo quale indirizzo usassero né se fossero funzionanti ... stesso tuo collegamento con Arduino UNO ed al primo colpo li ha individuati su 0x77 quindi ... ricontrolla i collegamenti e ... se sono giusti i ... moduli sono probabilmente guasti.
Ah ... io uso un multispeed scanner ... provalo:
//
// FILE: MultiSpeedI2CScanner.ino
// AUTHOR: Rob Tillaart
// VERSION: 0.1.01
// PURPOSE: I2C scanner @different speeds
// DATE: 2013-11-05
// URL:
//
// Released to the public domain
//
#include <Wire.h>
#include <Arduino.h>
#define PRINTALL true
int speed[] = {
10, 50, 100, 200, 400 };
const int speeds = sizeof(speed)/sizeof(speed[0]);
void setup()
{
Serial.begin(115200);
Serial.println("Multispeed - I2C Scanner - V0.1 - \n");
Wire.begin();
I2Cscan();
}
void loop()
{
}
void I2Cscan()
{
// HEADER
Serial.print("ADDR\tADDR\t");
for (uint8_t s = 0; s < speeds; s++)
{
Serial.print("\t");
Serial.print(speed[s]);
}
Serial.println("\t[KHz]");
Serial.println("-----------------------------------------------------------------------");
// TEST
for (uint8_t address = 0; address < 128; address++)
{
bool printLine = PRINTALL;
bool found[speeds];
for (uint8_t s = 0; s < speeds ; s++)
{
TWBR = (F_CPU/speed[s] - 16)/2;
Wire.beginTransmission (address);
found[s] = (Wire.endTransmission () == 0);
printLine |= found[s];
}
if (printLine)
{
Serial.print(address, DEC);
Serial.print("\t0x");
Serial.print(address, HEX);
Serial.print("\t");
for (uint8_t s = 0; s < speeds ; s++)
{
Serial.print("\t");
Serial.print(found[s]? "V":".");
}
Serial.println();
}
}
Serial.println("\ndone...");
}