Skocz do zawartości

I2C + BMP280 Problem z połączeniem


Pomocna odpowiedź

Napisano

Witam, podłączyłem przez I2C moduł BMP280:

https://elty.pl/pl/p/Modul-z-czujnikiem-cisnienia-BMP280/1912

Po wgraniu I2C scannera zwraca mi adres 0x76, ale po wgraniu:

#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>

#define BMP_SCK 13
#define BMP_MISO 12
#define BMP_MOSI 11 
#define BMP_CS 10

Adafruit_BMP280 bme; // I2C
//Adafruit_BMP280 bme(BMP_CS); // hardware SPI
//Adafruit_BMP280 bme(BMP_CS, BMP_MOSI, BMP_MISO,  BMP_SCK);

void setup() {
 Serial.begin(9600);
 Serial.println(F("BMP280 test"));

 if (!bme.begin()) {  
   Serial.println("Could not find a valid BMP280 sensor, check wiring!");
   while (1);
 }
}

void loop() {
   Serial.print("Temperature = ");
   Serial.print(bme.readTemperature());
   Serial.println(" *C");

   Serial.print("Pressure = ");
   Serial.print(bme.readPressure());
   Serial.println(" Pa");

   Serial.print("Approx altitude = ");
   Serial.print(bme.readAltitude(1013.25)); // this should be adjusted to your local forcase
   Serial.println(" m");

   Serial.println();
   delay(2000);
}

t.j. przykładowy kod biblioteki, nie działa tzn wyświetla "Could not find a valid BMP280 sensor, check wiring".

Mam gdzieś uzupełnić w kodzie ten adres, o co chodzi?

Wczoraj podłączyłem wyświetlacz i i RTC1307 po I2C i śmiga, choć mnie zdziwiło, że nie musiałem nigdzie wpisywać adresu RTC1307...

oto kod:

#include <Wire.h>   // standardowa biblioteka Arduino
#include <LiquidCrystal_I2C.h> // dolaczenie pobranej biblioteki I2C dla LCD
#include "RTClib.h"
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Ustawienie adresu ukladu na 0x27
RTC_DS1307 czas;

void setup()  
{

 Serial.begin(9600);
 Wire.begin();
 czas.begin();
 lcd.begin(20,4);   // Inicjalizacja LCD 2x16
 lcd.backlight(); // zalaczenie podwietlenia 

}

void loop() 
{
  DateTime now = czas.now();
 lcd.setCursor(0,0); // Ustawienie kursora w pozycji 0,0 (pierwszy wiersz, pierwsza kolumna)
 lcd.print("Hello, world!");
 lcd.setCursor(0,1); //Ustawienie kursora w pozycji 0,0 (drugi wiersz, pierwsza kolumna)
 lcd.print("BOTLAND.com.pl");
 lcd.setCursor(5,2);
 lcd.print(now.day(), DEC);
 lcd.print('.');
 lcd.print(now.month(), DEC);
 lcd.print('.');
 lcd.print(now.year(), DEC);
 lcd.setCursor(7,3);
 lcd.print(now.hour(), DEC);
 if(now.minute()<10){
 lcd.print(':0');
 }
 else{
   lcd.print(":");
 }
 lcd.print(now.minute(), DEC);
 lcd.print(':');
 lcd.print(now.second(), DEC);

}

Ktoś pomoże?

EDIT:

ok, był jakiś problem z bibliotekami. Żadna ze standardowych mi nie działała.

Znalazłem taką:

https://drive.google.com/drive/folders/0B6jYtDau3UoBM0I5MExjWHF6dEU

Wszystko śmiga, gdyby ktoś miał problem z tym modułem podpiętym do klona arduino MEGA, to ta konkretna biblioteka zadziałała.

Pozostaje pytanie moje:

dlaczego nie trzeba nigdzie wpisywać adresów kolejnych sprzętów podpiętych pod I2C?

Musiałem tylko wpisać do LCD, a BMP280, HTU21D i RTC1307 już nie...

Dlaczego?

Pozostaje pytanie moje:

dlaczego nie trzeba nigdzie wpisywać adresów kolejnych sprzętów podpiętych pod I2C?

Musiałem tylko wpisać do LCD, a BMP280, HTU21D i RTC1307 już nie...

Dlaczego?

Trzeba wpisywać. Najczęściej po prostu biblioteka ma zaszyty jakiś domyślny adres, pod którym szuka urządzenia. Jak się uda "to trafi" jak nie, to układ nie będzie działał. Większość bibliotek pozwala jednak wybrać adres - inaczej byłoby to zupełnie bez sensu. Czasami robi się to dodatkowym "poleceniem", a czasami trzeba edytować ręcznie pliki.

Aby się tego dowiedzieć trzeba czytać dokumentację lub zaglądać do plików nagłówkowych biblioteki. W przypadku Twojego pierwszego wyboru: "Adafruit_BMP280" w pliku angłówkowym masz linie, w których podany jest adres. Tutaj 0x77, dlatego nie działało z Twoim modułem na 0x76.

/*=========================================================================
   I2C ADDRESS/BITS/SETTINGS
   -----------------------------------------------------------------------*/
   #define BMP280_ADDRESS                (0x77)
   #define BMP280_CHIPID                 (0x58)
/*=========================================================================*/

Dzięki bardzo 🙂 , nawet udało mi się je znaleźć🙂). Poprawiłem i działa 😅

Szkoda, że wcześniej nie wiedziałem, zaoszczędziłbym pół dnia na szukanie przyczyny...

Dziękuję

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...