Hallo ich versuche verzweifelt mit Arduino Mini Pro 3.3 V, 8Mh, einen Sensoren auszulesen. Ich verwende ausschliesslich in der Arduino IDE vorhandene Beispielcodes, um folgende Sensoren auszuprobieren. BME280, SI7021, SHT31. Die Programme bleiben immer bei [sensor].begin() stehen. Die Sensoren sind auf Breakouts und verwenden die i2c Schnittstelle SDA, SCL, GND und VIN. Kann mir irgendjemand einen Tip geben, woran das liegen könnte? Danke Christian
Zeige uns deinen Sketch und die komplette Fehlermeldung.
Bitte poste beides in Code-Tags.
Es gibt SensorBoards, die benötigen 5V, weil die einen Spannungsregler drauf haben.
Wenn Du die mit 3V fütterst, gehen die nicht.
Was macht folgender Code, Du musst mindestens einen Sensor dran haben - kannst aber auch alle. Die sollten unterschiedliche Adressen haben.
#include<Wire.h>
void setup(){
Wire.begin();
Serial.begin(115200);
Serial.println("I2C Scanner ist bereit.");
Serial.println();
}
void loop() {
scanI2C(100000);
scanI2C(400000);
// scanI2C(1000000); // nur aktivieren, wenn der Microcontroller diese Frequenz unterstützt
// scanI2C(3400000); // nur aktivieren, wenn der Microcontroller diese Frequenz unterstützt
// scanI2C(5000000); // nur aktivieren, wenn der Microcontroller diese Frequenz unterstützt
Serial.println("****************************");
Serial.println();
delay(3000);
}
void scanI2C(long frequency){
String normal = "standard mode (100 kHz):";
String fast = "fast mode (400 kHz):";
String fastPlus = "fast mode plus (1 MHz):";
String highSpeed = "high speed mode (3.4 MHz):";
String ultraSpeed = "ultra fast mode (5.0 MHz):";
String defaultStr = " !!!!! Unzulässige Frequenz !!!!!";
bool error = true;
bool addressFound = false;
Serial.print("Scanne im ");
switch(frequency){
case 100000:
Serial.println(normal);
break;
case 400000:
Serial.println(fast);
break;
case 1000000:
Serial.println(fastPlus);
break;
case 3400000:
Serial.println(highSpeed);
break;
case 5000000:
Serial.println(ultraSpeed);
break;
default:
Serial.println(defaultStr);
break;
}
Wire.setClock(frequency);
for(int i=1; i<128; i++){
Wire.beginTransmission(i);
error = Wire.endTransmission();
if(error == 0){
addressFound = true;
Serial.print("0x");
Serial.println(i,HEX);
}
}
if(!addressFound){
Serial.println("Keine Adresse erkannt");
}
Serial.println();
}
(Achte drauf, ich hab die Serielle Schnittstelle auf 115200 gesetzt)
Hallo HotSystems
/*
BME280 I2C Test.ino
This code shows how to record data from the BME280 environmental sensor
using I2C interface. This file is an example file, part of the Arduino
BME280 library.
GNU General Public License
Written: Dec 30 2015.
Last Updated: Oct 07 2017.
Connecting the BME280 Sensor:
Sensor -> Board
-----------------------------
Vin (Voltage In) -> 3.3V
Gnd (Ground) -> Gnd
SDA (Serial Data) -> A4 on Uno/Pro-Mini, 20 on Mega2560/Due, 2 Leonardo/Pro-Micro
SCK (Serial Clock) -> A5 on Uno/Pro-Mini, 21 on Mega2560/Due, 3 Leonardo/Pro-Micro
*/
#include <BME280I2C.h>
#include <Wire.h>
#define SERIAL_BAUD 9600
BME280I2C bme; // Default : forced mode, standby time = 1000 ms
// Oversampling = pressure ×1, temperature ×1, humidity ×1, filter off,
//////////////////////////////////////////////////////////////////
void setup()
{
Serial.begin(SERIAL_BAUD);
while(!Serial) {} // Wait
Wire.begin();
Serial.println("Start sensor!");
while(!bme.begin())
{
Serial.println("Could not find BME280 sensor!");
delay(1000);
}
switch(bme.chipModel())
{
case BME280::ChipModel_BME280:
Serial.println("Found BME280 sensor! Success.");
break;
case BME280::ChipModel_BMP280:
Serial.println("Found BMP280 sensor! No Humidity available.");
break;
default:
Serial.println("Found UNKNOWN sensor! Error!");
}
}
//////////////////////////////////////////////////////////////////
void loop()
{
printBME280Data(&Serial);
delay(500);
}
//////////////////////////////////////////////////////////////////
void printBME280Data
(
Stream* client
)
{
float temp(NAN), hum(NAN), pres(NAN);
BME280::TempUnit tempUnit(BME280::TempUnit_Celsius);
BME280::PresUnit presUnit(BME280::PresUnit_Pa);
bme.read(pres, temp, hum, tempUnit, presUnit);
client->print("Temp: ");
client->print(temp);
client->print("°"+ String(tempUnit == BME280::TempUnit_Celsius ? 'C' :'F'));
client->print("\t\tHumidity: ");
client->print(hum);
client->print("% RH");
client->print("\t\tPressure: ");
client->print(pres);
client->println("Pa");
delay(1000);
}
Fehlermeldung gibt es keine. Der Monitor gibt noch meine Serial.println() Messages bis zu [sensor].begin() aus, anschliessend nichts mehr.
Danke, sieht soweit auch Ok aus.
Hast du deine Verkabelung geprüft ?
Ja, ich habe extra Pinouts studiert und entsprechend die Kabel gelegt. SDA->SDA, SCL->SCL, VIN->3.3 GND->GND
Und du hast auch tatsächlich einen BME280 ?
Und das Vin an 3,3 irritiert mich.
Wie betreibst du den Arduino ?
Mit 3,3V an Vin ?
Dann funktioniert das nicht.
Zeige doch mal dein Schaltbild.
Hallo, die Meldung kommt nicht ?
das würde ja bedeuten er wird erkannt.
Heinz
Nachtrag gib mal einen Link zu dem Sensor
Das ist mit sehr großer Wahrscheinlichkeit kein 3.3V Sensorshield.
Wo hast Du den her? -> Link
Schritt 1
mit einem I2C Scanner (gibt es unter File/Examples/Wire/i2c_scanner) nachsehen ob das Modul erkannt wird.
Ergebnis hier mit Copy Paste posten
Schritt 2
Bilder vom Aufbau machen. JEDES Kabel zwischen Arduino und Modul muss eindeutig erkennbar sein. Wenn deine Anschlüsse hinten sind, dann Bilder von hinten und vorne. Vernünftige Kabelfarben verwenden (rot VCC, schwarz GND, SDA/SCL zwei verschiedene Farben).
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.