Поменять адрес I2C на BME280

blackbird5
Offline
Зарегистрирован: 16.12.2016

Вот приехал ко мне такой вот датчик. По умолчанию у него адрес I2C 0x76. Согласно даташиту, чтобы сменить его на 0x77, необходимо ногу (подписанную на рисунке как SW) переключить с GND (LOW), на 3.3V (HIGH). Сейчас нога прибита к площадке указанной на рисунке. Кто-нибудь занимался подобным? Есть ли возможность в домашних условиях переключить ногу. Пока не соображу даже как копать.

Araris
Araris аватар
Offline
Зарегистрирован: 09.11.2012

Всё верно, разрезать и припаять. Источник : https://forum.arduino.cc/index.php?topic=404946.0

blackbird5
Offline
Зарегистрирован: 16.12.2016

Ну как водится в тот момент когда сформулировал проблему пришла догадка, что соседняя справа площадка и есть 3.3V. Нужно всего ли разрезать перемычку слева от центральной площадки и перекинуть ее направо. Вечером попробую - напишу.

blackbird5
Offline
Зарегистрирован: 16.12.2016

А вот и ответ появился подтверждающий. Спасибо! )

blackbird5
Offline
Зарегистрирован: 16.12.2016

Ну и сопутствующий вопрос (умозрительный). Свою проблему (два датчика) я то решил. А если предположим надо их десяток? Это уже программными методами решать?

sadman41
Offline
Зарегистрирован: 19.10.2016

blackbird5 пишет:

Ну и сопутствующий вопрос (умозрительный). Свою проблему (два датчика) я то решил. А если предположим надо их десяток? Это уже программными методами решать?

Железно - I2C мультиплексор (https://learn.adafruit.com/adafruit-tca9548a-1-to-8-i2c-multiplexer-brea...), программно - Software TWI.

blackbird5
Offline
Зарегистрирован: 16.12.2016

Спасибо. Утащил в закладки.

bwn
Offline
Зарегистрирован: 25.08.2014

Вот только сообразить не могу, а на хрена десяток датчиков атмосферного давления на одном МК?

blackbird5
Offline
Зарегистрирован: 16.12.2016

А ничего что он еще умеет в температуру и влажность?

bwn
Offline
Зарегистрирован: 25.08.2014

Температуру и DS18B20 умеет, а их хоть гирлянду елочную вешай. Влажность кстати тоже умеет (весьма точно), но с физическими хаками.

blackbird5
Offline
Зарегистрирован: 16.12.2016

Ну вешайте свою гирлянду где хотите. А свое непонимание оставьте при себе.

sadman41
Offline
Зарегистрирован: 19.10.2016

bwn пишет:

Температуру и DS18B20 умеет, а их хоть гирлянду елочную вешай. Влажность кстати тоже умеет (весьма точно), но с физическими хаками.

Дырку в нем сверлить или в психометр ставить? ))

bwn
Offline
Зарегистрирован: 25.08.2014

Второе.))))

Bagunda
Offline
Зарегистрирован: 04.04.2012

У меня вот такой BME280.

Как на нём сменить i2c адрес???

 

sadman41
Offline
Зарегистрирован: 19.10.2016

The I²C interface uses the following pins:

- SCK: serial clock (SCL)
- SDI: data (SDA)
- SDO: Slave address LSB (GND = ‘0’, VDDIO = ‘1’)

The 7-bit device address is 111011x. The 6 MSB bits are fixed. The last bit is changeable by SDO value and can be changed during operation. Connecting SDO to GND results in slave address 1110110 (0x76); connection it to VDDIO results in slave address 1110111 (0x77), which is the same as BMP280’s I²C address. The SDO pin cannot be left floating; if left floating, the I²C address will be undefined.

Bagunda
Offline
Зарегистрирован: 04.04.2012

Ух ты. Спасибо. А где вы нашли такое описание?

И я оставил SDO неподключенным.

И модуль работает на адресе 0x76

sadman41
Offline
Зарегистрирован: 19.10.2016

Bagunda пишет:

Ух ты. Спасибо. А где вы нашли такое описание?

https://cdn-shop.adafruit.com/product-files/2652/2652.pdf

Bagunda пишет:

И я оставил SDO неподключенным.

И модуль работает на адресе 0x76

На плате подтянут резистором, наверно. Надо по дорожкам посмотреть - куда он идет.

GVS
GVS аватар
Offline
Зарегистрирован: 26.04.2018

извините за назойливость, а как решили то? Тоже сижу играюсь с датчиком и есть проблемма с подключением пары...

GVS
GVS аватар
Offline
Зарегистрирован: 26.04.2018

Ну не знаю может и дичь сморозил, но решил вопрос с двумя DHT11 вот таким вот извращением:

[code]
#include "DHT.h"
#define DHTPIN 5 // датчик номер раз
#define DHTPIN1 6 // датчик номер два
DHT dht(DHTPIN, DHT11);
DHT dht1(DHTPIN1, DHT11);
void setup() {
  Serial.begin(9600);
  dht.begin();
  dht1.begin();
}
void loop() {
  delay(2000); // 2 секунды задержки
  float h = dht.readHumidity(); //Измеряем влажность датчик номер раз
  float t = dht.readTemperature(); //Измеряем температуру датчик номер раз
  if (isnan(h) || isnan(t)) {  // Проверка. Если не удается считать показания, выводится «Ошибка считывания», и программа завершает работу
    Serial.println("Error read");
    return;
  }

//Вывод показателей на экран датчик номер раз  Serial.print("Vlahznost: ");
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Temperatura: ");
  Serial.print(t);
  Serial.println(" *C "); 


  delay(2000); // 2 секунды задержки
  h = dht1.readHumidity(); //Измеряем влажность датчик номер два
  t = dht1.readTemperature(); //Измеряем температуру датчик номер два
  if (isnan(h) || isnan(t)) {  // Проверка. Если не удается считать показания, выводится «Ошибка считывания», и программа завершает работу
    Serial.println("Error read");
    return;
  }
//Вывод показателей на экран датчик номер два
  Serial.print("Vlahznost: ");
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Temperatura: ");
  Serial.print(t);
  Serial.println(" *C "); //Вывод показателей на экран

}
[/code]