Tengo que conectara un Arduino UNO un sensor (BMP280, versión con 8 pines) de temperatura, presión y altura a través de SDA-A4 y SCL-A5 y un sensor (CCS811, versión con 8 pines) de calidad del aire también a través de SDA-A4 y SCL-A5. El BMP 280 tiene el contacto SD0 a 3,3 voltios, creo que sirve para que mida constantemente, sin dar el valor cada x tiempo. El protocolo de comunicación es I2C.
El primero (BMP280), con el sketch y la librería (Adafruit) de ejemplo funciona bien. Y el CCS811 con el sketch y la librería de ejemplo (Adafruit), también. El problema viene cuando los dos coexisten en el circuito. El ejemplo del BMP280 funciona bien y el otro no. Del código con el que intento medir de los dos sensores a la vez mejor no hablar (de momento).
No sé si el problema es de que el BMP280 se alimenta con 3,3 voltios y el CCS con 811 con 5 V.
He probado a ejecutar un programa que te muestra la dirección de memoria de cada sensor y me devuelve lo siguiente.
Con solo el BMP 280 conectado 0x69 y 0x77
Con solo el CCS811 conectado 0x5A
Con los dos conectados 0x69 y 0x77 ¿¿??
Con los dos desconectados no me aparece nada.
Les comparto el esquema de conexiones. El Shield incluye también un APC220 para comunicación por radio. El código lo pueden encontrar en los ejemplos si incluyen las librerías Adafruit de este par de sensores; pero si quieren verlo, se lo puedo agregar.
No puedes tener en el mismo bus algo a 3.3 y otra cosa a 5V. Debes usar level shifter o sea adapatadores de nivel para que todos esten a 5V en el BUS I2C como ocurre en un UNO.
Asi que el CCS811 lo conectas como esta
El BMP280 lo pasas por un adaptador de niveles y de las salidas y entradas a 5V del adapator lo conectas a SDA y SCL del UNO. Se entiende?
Por lo demas, usa I2CScanner para reconocer ambas direcciones cuando esten juntas o si ya sabes cuales son indivualmente deberian funcionar juntas.
Cualquier duda a tus órdenes.
Hemos empezado a investigar lo de si era posible alimentar la tarjetita del BMP280 directamente con 5V y ahorrarnos lo del adaptador (ya tengo las PCB's encargadas a EasyEda y preferiría no tener que desecharlas) y me encuentro con que lo que me vendieron como un BMP280 en realidad era un GY-91 MPU9250 BMP280 10DOF, esto es, una tarjeta con un BMP280 y un MPU9250 que es un giroscopio, brújula, etc.
La noticia buena es que funciona con 5 voltios. Lo de los 3,3 voltios era una salida, que no una alimentación, que, está por comprobar, podría usarse para cambiar la dirección esclava del I2C.
Mañana probaremos. A ver si se soluciona la compatibilidad con el CCS811.
Tanto el BMP280 como el MPU9250 se alimentan con 3.6V como máximo (el mismo valor para sus niveles lógicos), por eso la placa incorpora el regulador de 3.3V
Afortunadamente también incorpora adaptadores de niveles tanto para las señales SDA como SCL, por eso puedes usarla sin problemas.
Pero si tienen adaptadores porque no te funciona cuando pones todo junto?
Corre el I2CScanner y verifica las direcciones que te responen a ver si coinciden con tus códigos individuales. Deberían!!
Me acabo de dar cuenta de algo...
En el post #1 hablabas de que el I2Cscanner te devolvía 2 direcciones para el BMP y era raro.
No tenías en cuenta que la placa tiene también el MPU, entonces estaba bien que devolviese 2 direcciones, 0x77 es la del BMP y 0x69 la del MPU.
Pues tras cambiar la alimentación del BMP280 a 5 voltios (en el contacto Vin) y conectar 3v3 de este sensor con CDO, ya lee los dos sensores (BMP280 y CCS811) y hasta hemos conseguido hacer funcionar un programa que lee los dos sensores.
Hemos intentado también leer el sensor que va incluido, el MPU9250. Hemos hecho una búsqueda en bibliotecas con el término GY-91: no hay nada. O con 10DOF, lo mismo. Cuando hemos probado con dos bibliotecas que sí incluían el término MPU9250, hemos probado con los programas de ejemplo correspondientes y nos da error de compilado.
Pero eso es secundario. Lo importante es comprobar que podemos leer el BMP280 y el CCS811. Ya dejaré aquí información de los avances.
Muchas gracias por la información, Máximo Esfuerzo y Surbyte.