Датчик ВМР 180

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем Amifor, 12 ноя 2019.

  1. Amifor

    Amifor Нерд

    Всем привет. Как я понял датчик вмр 180 подключается по i2c. Есть необходимость подключить два датчика в линию. Перерыл куча скетчей везде подключают 1 датчик. И не могу понять как ему задают номер до работы по i2c линии.
    Использовал скетч который снизу. С одного датчика считывает отлично)
    Код (C++):
    #include <SFE_BMP180.h>
    #include <Wire.h>

    SFE_BMP180 pressure;// Объявляем переменную для доступа к SFE_BMP180

    voidsetup()
    {
    Serial.begin(9600);// Задаем скорость передачи данных
    Serial.println("REBOOT");// Печать текста "Перезагрузка"

    if(pressure.begin()) // Инициализация датчика
    Serial.println("BMP180 init success"); // Печать текста "BMP180 подключен"
    else{// В противном случаи, датчик не подключен
    Serial.println("BMP180 init fail\n\n");// Печать текста "BMP180 не подключен"
    while(1);// Пауза.
    }
    }

    voidloop()
    {
    charstatus;
    doubleT,P,p0,a;

    /* Так как давление зависит от температуры, надо сначало узнать температуру
    * Считывание температуры занимает какоето время.
    * Если все хорошо, функция pressure.startTemperature вернет status с количеством милисикунд
    * которые нужно подождать. Ксли какае то проблема, то функция вернет 0.
    */


    status=pressure.startTemperature(); // Считывание показания
    if(status!=0){// Если значение status не 0, выполняем следующию команду.
    delay(status); // Ждем
    status=pressure.getTemperature(T); // Полученые показания, сохраняем в переменную T
    if(status!=0){// Если все хорошо, функция вернет 1, иначе вернет 0
    Serial.print("Temperature: "); // Печать текста "Температура"
    Serial.print(T,2); // Печать показания переменной "Т"
    Serial.println(" C, ");// Печать текста "С"

    /* Определяем показания атмосферного давления
    * Параметр указывает расширение, от 0 до 3 (чем больше расширение, тем больше точность, тем долше ждать)
    * Если все хорошо, функция pressure.startTemperature вернет status с количеством милисикунд
    * которые нужно подождать. Ксли какае то проблема, то функция вернет 0.
    */


    status=pressure.startPressure(3); // Считывание показания
    if(status!=0){// Если значение status не 0, выполняем следующию команду.
    delay(status); // Ждем
    status=pressure.getPressure(P,T);// Полученные показания, сохраняем в переменную P
    if(status!=0){// Если все хорошо, функция вернет 1, иначе вернет 0
    Serial.print("Absolute pressure: ");// Печать текста "Атмосферное давление"
    Serial.print(P,2);// Печать показания переменной mBar
    Serial.print(" mbar, ");// Печать текста "mBar"
    Serial.print(P*0.7500637554192,2);// Печать показания в mmHg
    Serial.println(" mmHg");} // Печать текста "mmHg"

    elseSerial.println("error retrieving pressure measurement\n");}// Ошибка получения давления
    elseSerial.println("error starting pressure measurement\n");}// Ошибка запуска получения давления
    elseSerial.println("error retrieving temperature measurement\n");}// Ошибка получения температуры
    elseSerial.println("error starting temperature measurement\n");// Ошибка запуска получения температуры
    delay(5000);// Пауза в 5с
     
    Последнее редактирование: 12 ноя 2019
  2. asam

    asam Гик

    BMP-180 имеет фиксированный I2C адрес и два датчика на одну линию просто так повесить нельзя.
     
  3. Amifor

    Amifor Нерд

    да к этому я вчера вечером и пришел((((
    Подключать на разные линии?! Плата Мега.
    Или другой датчик например вмр280?!
     
  4. ИгорьК

    ИгорьК Гуру

  5. parovoZZ

    parovoZZ Гуру

    а надо было всего один раз прочитать даташит)

    не только

    да
     
  6. asam

    asam Гик

    Да? И по какому же еще интерфейсу его можно подключить?
     
  7. asam

    asam Гик

    Насколько я помню у меги два аппаратных I2C так что можно на них развести. Или использовать одну I2C шину, но коммутировать датчики дополнительным железом.
     
  8. DetSimen

    DetSimen Guest

    по SPI вроде тоже можно (но это не точно, не помню я).
     
  9. Amifor

    Amifor Нерд

    Те линии на которые будет подключён датчик вмр180 можно использовать для других i2c устройств?!
    Пробывал кстати вчера подключать второй датчик к второй шине но информации с него не получил) буду разбираться пока ещё не пробывал толком ))спасибо.
     
  10. Amifor

    Amifor Нерд

    По моему это только вмр280 можно
     
    DetSimen нравится это.
  11. asam

    asam Гик

    На одну шину можно вешать много устройств, но у них у всех должны быть разные адреса.
     
  12. asam

    asam Гик

    Нетути у BMP180 SPI; Увы
     
  13. parovoZZ

    parovoZZ Гуру

    его ещё можно подключить по интерфейсу TWI)
     
    DetSimen нравится это.
  14. DetSimen

    DetSimen Guest

    Да, я спьяну невнимателен, думал у тебя 280. За 180 я ничо не знаю, не довелось пащюпать.
     
  15. Tomasina

    Tomasina Сушитель лампочек Модератор

    А зачем их два? Давление-то не изменится, а для температуры есть более удобные и точные датчики.
     
  16. Ermine882

    Ermine882 Нерд

    Попробуй TCA9548A, мультиплексор I2C для подключения устройств с одинаковыми адресами (8 шт.).
    Почитай мою тему.
     
    DetSimen нравится это.
  17. asam

    asam Гик

    TWI это и есть i2C
     
    Daniil нравится это.
  18. parovoZZ

    parovoZZ Гуру

    так говорить нельзя, иначе придется платить филипсу патентные отчисления.