Skocz do zawartości

I2C + BMP280 Problem z połączeniem


SOYER

Pomocna odpowiedź

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?

Link do komentarza
Share on other sites

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)
/*=========================================================================*/
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.