¿Cómo conectar ATTiny45 a Arduino vía serial/spi/i2c y enviar datos?

Estoy tratando de crear un sistema de alarma inteligente para mi casa. Quiero tener un arduino como maestro y varios otros AtTiny como esclavos para recopilar datos como temperatura, humedad, concentración de gas, puertas abiertas, etc.

¿Cómo conecto varios AtTiny con cable a un Arduino maestro? ¿Cuál es la forma más inteligente de comunicarse entre ellos? He leído que AtTiny's no es compatible con spi o i2c, pero puedes "hackearlo" de alguna manera.

EDITAR: la distancia entre el maestro y el esclavo puede ser de 1 a 10 metros.

¿Está buscando una solución con cable o inalámbrica? Si se lo puede permitir ($$$, distribución de energía), la solución inalámbrica como XBee tiene la ventaja de manejar perfectamente la comunicación de múltiples nodos.
Nordic nRF24L01+ es mi próximo paso. Pero también necesito algunos diminutos con cable.

Respuestas (2)

Si usa esos ATtiny que no tienen soporte de hardware de SPI o I2C, es probable que pueda implementar eso en el software, asumiendo que no tendrá ningún procesamiento pesado de CPU ejecutándose en el ATtiny (que suele ser el caso para la mera lectura del sensor) . Dicho esto, a excepción de los de 6 pines, la mayoría de los ATtiny tienen soporte de hardware tanto para I2C como para SPI (consulte el selector de productos ).

Al elegir entre I2C y SPI, elegiría el primero dada la configuración de múltiples esclavos y el número limitado de pines del ATtiny (se necesitan 2 pines para I2C y 4 para SPI).

i2c es una buena decisión.
¿Cómo conecto el 328 con el tiny45? No puedo encontrar un tutorial sobre qué puertos del tiny debo usar, solo algunas referencias a los puertos SCK y SLA.
Compruebe, por ejemplo, este instructivo .

En realidad, los ATTinys tienen hardware compatible con TWI (la variante I2C) o SPI, conocida como "Interfaz serial universal". Puedes hacer uno de ellos a la vez, no el otro. Además, debe hacer cosas de protocolo como "buscar la dirección esclava adecuada" en el software: el hardware detectará la condición de inicio por usted y mantendrá el reloj bajo hasta que esté listo para recibir un byte, pero luego tiene que compare ese byte con su propia dirección y luego ingrese un ciclo de sondeo si coincide. (Tenga en cuenta que los tiempos de subida/bajada de I2C no están garantizados en estos dispositivos).

Lo mismo para SPI; puede obtener interrupciones y datos para la selección del esclavo SPI y la transferencia de datos, y también puede transferir datos de usted al maestro en el hardware, pero debe alimentar cada byte manualmente, y como maestro, en realidad tiene que generar el reloj manualmente (ingresando un bucle que estrobosquea el bit del reloj).

He usado I2C para comunicaciones de bus de media distancia en un robot y funcionó bien. No sé si funcionaría como está a más de 10 metros; es posible que desee modular en un par de cables RS-485 y demodular en el otro extremo, por ejemplo. Eso probablemente funcionaría muy bien, a 100 kHz más o menos. Los circuitos del controlador RS-485 son baratos y fáciles de usar. Necesitaría dos pares trenzados para las comunicaciones, así que cableado telefónico normal. (Más si también desea enviar energía).

Si eso es demasiado para usted, le sugiero que use XBees para comunicaciones con firmware de la serie 1 (por lo tanto, "cables de aire" regulares para UART). Attinys no hace UART de forma nativa, pero puede emularlo con el USI ( solo dúplex simple) o golpes de bits (velocidades de datos lentas solamente).

Dicho esto, ¿por qué estás usando ATTinys? El costo de un ATmega en cantidad 25 es algo así como $2. También podría tener un chip real en cada extremo :-)

Tenía algunos mcu de repuesto en mi cajón (Attiny26 y 45) y como los pedidos tardan mucho en entregarse aquí, quiero tomar la decisión más sabia. He pedido muchos nRF24L01+s para comunicación inalámbrica (los XBees eran demasiado caros para mí) y, al mismo tiempo, quiero tener algunas miniestaciones cableadas conectadas a la base. Los inalámbricos tendrán una batería conectada, por lo que sería bueno tener un chip que consuma 2,7 o 3,3 voltios en lugar de 5V. También los tinys tienen la mitad del tamaño de los megas.
Y finalmente, lo que quiero que haga el mcu es leer el estado "encendido/apagado" de un sensor de contacto de ventana y enviar algunos bytes "la puerta está abierta" o leer un sensor de temperatura analógico y enviar las lecturas.
El mega funciona bien a 8 MHz con un resonador incorporado, al igual que el Tiny. Si solicita piezas DIP a granel, solo obtenga un montón de megas en lugar de Tinys, la diferencia de costo es pequeña :-) Si ya tiene los Tinys, o si el tamaño realmente importa , entonces haga I2C como se indica arriba. Aunque necesitará hacer SPI para el nRF24L01+ IIRC. Afortunadamente, el USI también puede hacer SPI, cuando se maneja correctamente.