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

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

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

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 вот таким вот извращением:

01[code]
02#include "DHT.h"
03#define DHTPIN 5 // датчик номер раз
04#define DHTPIN1 6 // датчик номер два
05DHT dht(DHTPIN, DHT11);
06DHT dht1(DHTPIN1, DHT11);
07void setup() {
08  Serial.begin(9600);
09  dht.begin();
10  dht1.begin();
11}
12void loop() {
13  delay(2000); // 2 секунды задержки
14  float h = dht.readHumidity(); //Измеряем влажность датчик номер раз
15  float t = dht.readTemperature(); //Измеряем температуру датчик номер раз
16  if (isnan(h) || isnan(t)) {  // Проверка. Если не удается считать показания, выводится «Ошибка считывания», и программа завершает работу
17    Serial.println("Error read");
18    return;
19  }
20 
21//Вывод показателей на экран датчик номер раз  Serial.print("Vlahznost: ");
22  Serial.print(h);
23  Serial.print(" %\t");
24  Serial.print("Temperatura: ");
25  Serial.print(t);
26  Serial.println(" *C ");
27 
28 
29  delay(2000); // 2 секунды задержки
30  h = dht1.readHumidity(); //Измеряем влажность датчик номер два
31  t = dht1.readTemperature(); //Измеряем температуру датчик номер два
32  if (isnan(h) || isnan(t)) {  // Проверка. Если не удается считать показания, выводится «Ошибка считывания», и программа завершает работу
33    Serial.println("Error read");
34    return;
35  }
36//Вывод показателей на экран датчик номер два
37  Serial.print("Vlahznost: ");
38  Serial.print(h);
39  Serial.print(" %\t");
40  Serial.print("Temperatura: ");
41  Serial.print(t);
42  Serial.println(" *C "); //Вывод показателей на экран
43 
44}
45[/code]

 

PavelN
Offline
Зарегистрирован: 29.03.2017

Я просто подключил питание не на Vcc, а на SDO. Получил адрес 77 и смог подключить 2 датчика.