Presentación.
En muchas ocasiones nos encontramos ante un proyecto que requiere un número importante de puertos y esta labor se la encomendamos a unos dispositivos que ya conocemos como son el sistema I2C-Bus, el cual nos da una solución sencilla y rápida de servicio, en esos casos, la cuestión es direccionar cada dispositivo, es decir, utilizar las distintas direcciones únicas para cada uno.
Normalmente, ante una tabla de direcciones, podemos elegir la correspondiente a cada dispositivo y habremos solucionado el contratiempo. Sin embargo, la cuestión es que, cada dispositivo tiene una dirección única y sin la cual no podemos acceder al dispositivo. En cuantas ocasiones nos encontramos ante esta situación o que, después de un tiempo o en caso de una fortuita ampliación del sistema, tenemos que conocer la dirección del nuevo dispositivo.
En esta página, vamos a dar respuesta a esta situación con un código libre que se puede encontrar en distintos sitios. El código es muy sencillo y no hace «nada más», sólo nos muestra la dirección que le corresponde a cada dispositivo.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
/* * i2c_scanner * * Version 1 * Este programa (código que aparece) se pueden encontrar en muchos sitios. * Por ejemplo, en el foro Arduino.cc. * El autor original no se conoce. * Version 2, Juni 2012, Using Arduino 1.0.1 * Adaptado para ser lo más simple posible por usuario Krodal Arduino.cc * Version 3, Feb 26 2013 by louarnold * Version 4, March 3, 2013, Using Arduino 1.0.3 * by Arduino.cc user Krodal. * Version 5, March 28, 2013 * Como la versión 4, pero las exploraciones de direcciones ahora a 127. * * Este boceto prueba las direcciones estándar de 7 bits. * Los dispositivos con dirección de bits más alta * no pueden ser vistas correctamente. */ #include "Wire.h" ; si no aparece la librería es por motivos del soft "< " void setup() { Wire.begin(); Serial.begin(9600); Serial.println("\nI2C Scanner"); } void loop() { byte error, address; int nDevices; Serial.println("Scanning..."); nDevices = 0; for(address = 1; address < 127; address++ ) { // El i2c_scanner utiliza el valor devuelto o el // Write.endTransmisstion para ver si un // dispositivo reconoció la dirección. Wire.beginTransmission(address); error = Wire.endTransmission(); if (error == 0) { Serial.print("Dispositivo I2C en dirección 0x"); if (address<16) Serial.print("0"); Serial.print(address,HEX); Serial.println(" !"); nDevices++; } else if (error==4) { Serial.print("Error desconocido en dirección 0x"); if (address<16) Serial.print("0"); Serial.println(address,HEX); } } if (nDevices == 0) Serial.println("Dispositivo I2C No hallado.\n"); else Serial.println("hecho\n"); delay(5000); // espera 5 segundos para otro scan } |
Copie y pegue este código compile y súbalo a su Arduino. Ahora, abra la ventana del monitor serie, para ver los mensajes que se producen en cada captura. Si usted no ha conectado ningún dispositivo I2C o si estuviera en mal estado, se mostraría la siguiente imagen.
En el caso de tener conectado un dispositivo I2C en buen estado, le mostrará un mensaje similar al siguiente, en el que se aprecia la dirección única de dicho dispositivo.
Esta es una aplicación de ayuda para facilitar la tarea del programador. La siguiente es una foto del uso del escaner.
Si le ha servido de ayuda me consideraré complacido.
Excelente. Me fue de utilidad.
Hola. La linea 20 (#include) arroja este error:
—————————————–
i2c_scanner:20: error: #include expects «FILENAME» or
#include
^
exit status 1
#include expects «FILENAME» or
———————–
muchas gracias
Hola Andres Bravo.
Tienes que añadir la librería que por culpa del sistema de wordpres no muestra lo que va entre ««. Ya he rectificado el problema, ahora no debería darte problemas.
Saludos.
Buenas, A mi me muestra varias direcciones y van cambiando, voy probando una a una pero no me funciona. Me van apareciendo estas y me parece muy raro. Alguna idea? Muchas gracias.
0x34
0x11
0x39
0x0B
0x71
0x18
0x23
0x18
0x15
0x51
0x72
0x7d
0x64
0x68
0x41
Hola Federico.
Por lo que dices más parece que se trata de un problema del código. Revisa tu código y prueba de nuevo no veo otra razón. Salvo que estuvieras utilizando un dispositivo más allá de los 127 primeros valores.
Espero me digas si lo has resuelto.
Un saludo.
Buenas noches.
A mi sólo me muestra:
I2C Scanner
Scanning…
Y no hace más nada…
Hola JUAN CAMILO AVILES RIVERO.
Estoy seguro que tienes un problema que apunta a las librerías y en último caso al propio programa que tienes alguna errata, te aseguro que está muy probado y no es una cuestión a discutir, en todo caso busca en google y verás que todos los programas se rigen por los mismos parámetros. Revisa todo.
Saludos.
Tengo problemas I2C con LCD de 4×20
Baje la librería de arduino
Para la aplicación I2C?
Ejecute el programa y solo aparece la 1era letra por linea
Hola Mauricio.
Por lo que me indicas no creo que tengas problemas con las librerías, puesto que según dices aparecen la 1era letra de cada línea. Supongo que compilas bien tu código sin problemas.
Aun a riesgo de errar, creo que se trata de un problema en el código de tu boceto, por lo que recomiendo que lo revises con atención, es más, toma otro ejemplo de código y compílalo, luego trata de mostrar en el monitor Serial si se muestran todos los caracteres de cada línea, eso te dará una idea de porqué esta fallando tu boceto.
No tengo más información de tu código y si se trata del código que se muestra en el artículo, te aseguro que funciona bien.
Revisa la librería que utilizas, se han publicado varias actualizaciones de las librerías de diferentes autores (me estoy refiriendo a las librerías de LiquidCrystali2C una de Fmalpartida que es muy completa, sin embargo, no es del todo compatible con ciertos códigos, revisa estos puntos.
Espero haberte orientado.
Saludos y cuídate.
Buenas una vez tenemos esa dirección por ejemplo lo aplique en el siguiente dispositivo
https://a.aliexpress.com/_uwSHgN
Como puedo leer los datos del mismo?
Hola Rafael Ortí.
No he probado nunca ese dispositivo.
Lo siento.
Saludos y cuídate.