INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
BME280 auf SD Karte loggen
29.01.2021, 11:52
Beitrag #1
BME280 auf SD Karte loggen
Ich würde gerne eine Datenlogger für einen BME 280 bauen, leider sind meine Programmierkenntnisse sehr beschränkt.
SD Karte und BME Sensor funktionieren getrennt auf dem Breadboard.
Mir würde auch ein fertiges Programm reichen, noch besser wäre ein minimalistisches Programm zum rumprobieren.
Habe ein fertiges auf Github gefunden, jedoch kann das Programm die Library nicht finden. Bin um jeden Tipp dankbar.


Angehängte Datei(en)
.zip  datalogger_bme280-master.zip (Größe: 13,95 KB / Downloads: 17)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.01.2021, 12:16
Beitrag #2
RE: BME280 auf SD Karte loggen
Einen Link zu Deinem Fund und die Fehlermeldung könnten evtl. eine Hilfe möglich machen.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.01.2021, 12:23
Beitrag #3
RE: BME280 auf SD Karte loggen
(29.01.2021 12:16)Tommy56 schrieb:  Einen Link zu Deinem Fund und die Fehlermeldung könnten evtl. eine Hilfe möglich machen.

Gruß Tommy

hier der link:

https://gsverhoeven.github.io/post/ardui...atalogger/
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.01.2021, 12:34
Beitrag #4
RE: BME280 auf SD Karte loggen
Ich vermute, da Du es nicht beantwortet hast, dass die BME280-Lib fehlt. Davon gibt es leider mehrere verschiedene.

Du hast 3 Möglichkeiten:

1. Du probierst die verschiedenen BME280-Libs aus (immer erst wieder deinstallieren) bis es geht
2. Du kontaktierst den Autor deines Datenloggers und fragst, welche Lib er benutzt hat.
3. Du suchst Dir ein anderes Beispiel, bei dem die Libquelle angegeben ist, z.B. hier.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.01.2021, 14:40
Beitrag #5
RE: BME280 auf SD Karte loggen
(29.01.2021 12:34)Tommy56 schrieb:  Ich vermute, da Du es nicht beantwortet hast, dass die BME280-Lib fehlt. Davon gibt es leider mehrere verschiedene.

Du hast 3 Möglichkeiten:

1. Du probierst die verschiedenen BME280-Libs aus (immer erst wieder deinstallieren) bis es geht
2. Du kontaktierst den Autor deines Datenloggers und fragst, welche Lib er benutzt hat.
3. Du suchst Dir ein anderes Beispiel, bei dem die Libquelle angegeben ist, z.B. hier.

Gruß Tommy

Das Beispiel sieht gut aus,
jedoch kommt ein Fehler beim kompilieren.

s. Foto


Angehängte Datei(en)
.ino  error_code.ino (Größe: 8,77 KB / Downloads: 13)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.01.2021, 14:43
Beitrag #6
RE: BME280 auf SD Karte loggen
Setze Deinen Sketch und die Fehlermeldungen bitte in Codetags.
Wie das geht, steht hier.
Das kannst Du auch noch nachträglich ändern.

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.01.2021, 14:50
Beitrag #7
RE: BME280 auf SD Karte loggen
(29.01.2021 14:43)Tommy56 schrieb:  Setze Deinen Sketch und die Fehlermeldungen bitte in Codetags.
Wie das geht, steht hier.
Das kannst Du auch noch nachträglich ändern.

Code:
/* Temperature, humidity & pressure data logger using Arduino UNO,
    SD card, BME280 sensor and DS3231 RTC.
* Time, date, temperature, humidity and pressure values are displayed on 20x4 LCD.
* This is a free software with NO WARRANTY.
* https://simple-circuit.com/
*/

#include <SD.h>               // include Arduino SD library
#include <LiquidCrystal.h>    // include Arduino LCD library
#include <RTClib.h>           // include Adafruit RTC library
#include <Adafruit_BME280.h>  // include Adafruit BME280 sensor library

// LCD module connections (RS, E, D4, D5, D6, D7)
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);

// initialize RTC library
RTC_DS3231 rtc;
DateTime   now;

// buttons definition
#define button1    A1   // button B1 is connected to Arduino pin A1
#define button2    A2   // button B2 is connected to Arduino pin A2

// define BME280 sensor I2C address: 0x76 or 0x77 (0x77 is library default address)
#define BME280_I2C_ADDRESS  0x76
// initialize Adafruit BME280 library
Adafruit_BME280  bme280;

boolean sd_ok = 0, sensor_ok = 0;

void setup()
{
  pinMode(button1, INPUT_PULLUP);
  pinMode(button2, INPUT_PULLUP);

  rtc.begin();          // initialize RTC chip
  lcd.begin(20, 4);     // initialize LCD module
  lcd.setCursor(0,  0);  lcd.print("TIME:");
  lcd.setCursor(0,  1);  lcd.print("DATE:");

  // open serial communications and wait for port to open:
  Serial.begin(9600);
  Serial.print("Initializing SD card...");

  // initialize the SD card
  if ( !SD.begin() )
    Serial.println("failed!");  // initialization error

  else {   // initialization OK
    sd_ok = true;
    Serial.println("OK.");
    if( SD.exists("Log.txt") == 0 )   // test if file with name 'Log.txt' already exists
    {  // create a text file named 'Log.txt'
      Serial.print("\r\nCreate 'Log.txt' file...");
      File dataLog;
      dataLog = SD.open("Log.txt", FILE_WRITE);   // create (&open) file Log.txt
      if(dataLog) {                               // if the file opened okay, write to it:
        Serial.println("OK");
        // write some texts to 'Log.txt' file
        dataLog.println("   DATE    |   TIME   | TEMPERATURE | HUMIDITY | PRESSURE");
        dataLog.close();   // close the file
      }
      else
        Serial.println("failed!");
    }
  }

  // initialize the BME280 sensor
  Serial.print("\r\nInitializing BME280 sensor...");
  if( bme280.begin(BME280_I2C_ADDRESS) )
  {
    Serial.println("done.");
    lcd.setCursor(0,  2);  lcd.print("T:");
    lcd.setCursor(10, 2);  lcd.print("|H:");
    lcd.setCursor(0,  3);  lcd.print("P:");
    lcd.setCursor(8, 2);
    lcd.write(223);      // print degree symbol (°)
    lcd.write('C');
    sensor_ok = true;
  }
  else
  {  // connection error or device address wrong!
    Serial.println("failed!");
    lcd.setCursor(0, 3);
    lcd.print("BME280 Sensor Error!");
  }

  Serial.println("\r\n   DATE    |   TIME   | TEMPERATURE | HUMIDITY | PRESSURE");
}

// main loop
void loop()
{
  now = rtc.now();  // read current time and date from the RTC chip
  RTC_display();    // diaplay time & calendar

  if( !digitalRead(button1) )  // if B1 is pressed
  if( debounce() )             // call debounce function (make sure B1 is pressed)
  {
    while( debounce() );  // call debounce function (wait for B1 to be released)

    byte hour   = edit( now.hour() );         // edit hours
    byte minute = edit( now.minute() );       // edit minutes
    byte day    = edit( now.day() );          // edit date
    byte month  = edit( now.month() );        // edit month
    byte year   = edit( now.year() - 2000 );  // edit year

    // write time & date data to the RTC chip
    rtc.adjust(DateTime(2000 + year, month, day, hour, minute, 0));

    while(debounce());  // call debounce function (wait for button B1 to be released)
  }

  static byte p_second;
  if( p_second != now.second() )
  {   // read & print sensor data every 1 second
    char temp_a[7], humi_a[7], pres_a[12];
    char buffer1[22];
    p_second = now.second();
    if( sensor_ok )
    {
      // read temperature, humidity and pressure from the BME280 sensor
      float temp = bme280.readTemperature();    // get temperature in °C
      float humi = bme280.readHumidity();       // get humidity in rH%
      float pres = bme280.readPressure();       // get pressure in Pa
      // save all data to arrays
      // 1: temperature
      if(temp < 0)   // if temperature is negative
        sprintf( temp_a, "-%02u.%02u", (int)abs(temp), (int)(abs(temp) * 100) % 100 );
      else
        sprintf( temp_a, " %02u.%02u", (int)temp, (int)(temp * 100) % 100 );
      // 2: humidity
      sprintf( humi_a, "%02u.%02u%%", (int)humi, (int)(humi * 100) % 100 );
      // 3: pressure
      sprintf( pres_a, "%04u.%02u hPa", (int)(pres/100), (int)((uint32_t)pres % 100) );
      // print sensor data on the LCD
      lcd.setCursor(2,  2);  lcd.print(temp_a);   // print temperature
      lcd.setCursor(14, 2);  lcd.print(humi_a);   // print humidity
      lcd.setCursor(3,  3);  lcd.print(pres_a);   // print pressure
    }

    sprintf( buffer1, "%02u-%02u-%04u | %02u:%02u:%02u", now.day(), now.month(), now.year(),
                       now.hour(), now.minute(), now.second() );

    Serial.print(buffer1);
    Serial.print(" |  ");
    if(sensor_ok) {
      Serial.print(temp_a);
      Serial.print("°C   |  ");
      Serial.print(humi_a);
      Serial.print("  | ");
      Serial.println(pres_a);
    }
    else
      Serial.println("  Error    |  Error   |  Error");

    // write data to SD card
    if(sd_ok)
    {  // if the SD card was successfully initialized
      // open Log.txt file with write permission
      File dataLog;
      dataLog = SD.open("Log.txt", FILE_WRITE);
      dataLog.print(buffer1);
      dataLog.print(" |  ");
      if(sensor_ok) {
        dataLog.print(temp_a);
        dataLog.print("°C   |  ");
        dataLog.print(humi_a);
        dataLog.print("  | ");
        dataLog.println(pres_a);
      }
      else
        dataLog.println("  Error    |  Error   |  Error");
      dataLog.close();   // close the file
    }

  }

  delay(100);   // wait 100ms
}

//////////////////////////////////////// RTC functions ////////////////////////////////////////
void RTC_display()
{
  char _buffer[12];
  char dow_matrix[7][4] = {"SUN", "MON", "TUE", "WED",
                             "THU", "FRI", "SAT"};
  lcd.setCursor(6, 1);
  lcd.print( dow_matrix[now.dayOfTheWeek()] );

  // print time
  sprintf( _buffer, "%02u:%02u:%02u", now.hour(), now.minute(), now.second() );
  lcd.setCursor(10, 0);
  lcd.print(_buffer);
  // print date
  sprintf( _buffer, "-%02u-%02u-%04u", now.day(), now.month(), now.year() );
  lcd.setCursor(9, 1);
  lcd.print(_buffer);
}

byte edit(byte parameter)
{
  static byte i = 0, y_pos,
              x_pos[5] = {10, 13, 10, 13, 18};
  char text[3];
  sprintf(text,"%02u", parameter);

  if(i < 2)
    y_pos = 0;
  else
    y_pos = 1;

  while( debounce() );   // call debounce function (wait for B1 to be released)

  while(true) {
    while( !digitalRead(button2) ) {  // while B2 is pressed
      parameter++;
      if(i == 0 && parameter > 23)    // if hours > 23 ==> hours = 0
        parameter = 0;
      if(i == 1 && parameter > 59)    // if minutes > 59 ==> minutes = 0
        parameter = 0;
      if(i == 2 && parameter > 31)    // if day > 31 ==> day = 1
        parameter = 1;
      if(i == 3 && parameter > 12)    // If month > 12 ==> month = 1
        parameter = 1;
      if(i == 4 && parameter > 99)    // If year > 99 ==> year = 0
        parameter = 0;

      sprintf(text,"%02u", parameter);
      lcd.setCursor(x_pos[i], y_pos);
      lcd.print(text);
      delay(200);       // wait 200ms
    }

    lcd.setCursor(x_pos[i], y_pos);
    lcd.print("  ");
    unsigned long previous_m = millis();
    while( (millis() - previous_m < 250) && digitalRead(button1) && digitalRead(button2) ) ;
    lcd.setCursor(x_pos[i], y_pos);
    lcd.print(text);
    previous_m = millis();
    while( (millis() - previous_m < 250) && digitalRead(button1) && digitalRead(button2) ) ;

    if(!digitalRead(button1))
    {                     // if button B1 is pressed
      i = (i + 1) % 5;    // increment 'i' for the next parameter
      return parameter;   // return parameter value and exit
    }
  }
}

// a small function for button1 (B1) debounce
bool debounce ()
{
  byte count = 0;
  for(byte i = 0; i < 5; i++)
  {
    if ( !digitalRead(button1) )
      count++;
    delay(10);
  }

  if(count > 2)  return 1;
  else           return 0;
}
////////////////////////////////////// end RTC functions //////////////////////////////////////

// end of code.

Hoffe das Passt so.
Erstmal danke für deine Hilfe !
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.01.2021, 14:51
Beitrag #8
RE: BME280 auf SD Karte loggen
Und die Fehlermeldung?

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Datei von PC auf SD-Karte speichern Karl Stanger 6 79 Heute 16:42
Letzter Beitrag: Tommy56
  Objekt auf SC-Karte schreiben Karl Stanger 2 367 03.03.2021 18:42
Letzter Beitrag: Karl Stanger
  Daten zeilenweise von SD-Karte lesen Karl Stanger 3 496 06.01.2021 13:00
Letzter Beitrag: Tommy56
  Variable mit Werten von SD-Karte füllen DO3GE 16 2.341 14.04.2020 19:38
Letzter Beitrag: Corvus
  Binärdaten auf SD-Karte schreiben ingo46 25 3.013 15.03.2020 21:40
Letzter Beitrag: ingo46
  SD shield / Kein Zugriff auf Karte Ernie70 33 4.300 10.01.2020 18:06
Letzter Beitrag: Tommy56
  Welche Library für BMP/BME280 ggf. BME680 Arduino4Fun 4 2.004 22.12.2019 11:03
Letzter Beitrag: Franz54
  Schreiben von Arduino Nano auf SD Karte mit 80 Hertz Joshua_Gunjah 8 1.932 27.11.2019 18:43
Letzter Beitrag: Tommy56
  SD-Karte Ersten und Letzten wert anzeigen Luis90 1 1.108 12.11.2019 12:23
Letzter Beitrag: Tommy56
  SD Karte sicher entfernen Peter05 6 1.974 28.06.2019 22:42
Letzter Beitrag: GuaAck

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste