Tengo una arquitectura como esta:
Maestro: contiene un chip de comunicación RF. Todos los nodos dependen de Master para recibir y enviar datos a una unidad central.
Nodo: tiene algunas funciones básicas de GPIO. Puede haber 4-5 tipos diferentes de nodos, cada uno de los cuales requiere un recuento de GPIO diferente. En aras de la simplicidad de diseño, planeo lanzar un microcontrolador barato en cada nodo y manejar todos los GPIO localmente. De esa manera, solo necesito un paquete de datos de control predefinido del maestro para realizar cualquier tarea. De manera similar, el nodo enviará un paquete predefinido que el maestro comprenderá. La definición del paquete contendrá el tipo de nodo.
Los nodos pueden cambiar en número y preferiblemente deberían ser intercambiables en caliente. La comunicación funciona así:
Dos nodos no se comunican directamente.
El maestro puede tener un paquete de datos que desea enviar a cualquier nodo en particular.
Cualquier nodo puede tener un paquete de datos que desea enviar al maestro.
La distancia máxima entre un nodo y un maestro será inferior a 50 cm.
Después de pensarlo un poco, este es el plan que se me ocurrió:
Haga que todos los nodos se comuniquen a través de i2c. 16 nodos por maestro parece ser un buen número, así que puedo poner un interruptor DIP de 4 bits para configurar la dirección i2c de cada nodo. Básicamente haré una lectura digital en 4 gpio y estableceré la dirección en consecuencia.
Esto será perfecto cuando el maestro quiera leer o escribir datos en los nodos.
Para el momento en que el nodo desea enviar datos, necesito tener un GPIO adicional por nodo que avise al maestro de que algunos datos están presentes. Alternativamente, puedo seguir leyendo todos los nodos en el bucle y verificar si hay algunos datos disponibles.
¿Hay una solución mejor para este problema?