Buenas gente, es probable que tenga que realizar un proyecto que implique comunicación entre varios arduinos de manera inalámbrica.
Mi pregunta es la siguiente, se puede realizar la comunicación (duplex) desde un ordenador a varios arduinos y viceversa? He estado leyendo por ahi y la cosa seria hacerlo con zigbee... La comunicación implicaría poder activar una salida digital de cada uno de los arduinos, con una id o algo para que se pudiera elegir el arduino en el que quieras realizar lo que sea...
espero alguna respuesta que me ayude a guiarme un poco , Gracias por adelantado!
Efectivamente, la mejor manera es utilizando zigbee pero tendrás que utilizar o desarrollar un protocolo de comunicaciones para que el ordenador (maestro) pueda hablar o entenderse con los arduinos que están en la red (esclavos). Puedes hacerte un protocolo sencillo pero si no sabes de que va la cosa te recomiendo que utilices MODBUS:
Si el modbus te resulta complicado puedes hacerte un protocolo sencillo como por ejemplo que el maestro (ordenador) transmita una cadena donde está encapsulado una dirección que identifica el arduino que quieres manejar, la salida que quieres controlar y finalmente el estado de la salida:
[:][DIRECCION][SALIDA][ESTADO]
DIRECCIÓN: 2 caracteres
SALIDA: 2 caracteres
ESTADO: 1 caracter
Los dos puntos es para que los esclavos sepan que es el inicio de trama.
Un ejemplo sería transmitir la siguiente cadena:
":03021" (activar la salida 2 del arduino nº 3)
":01040" (desactivar la salida 4 del arduino nº 1)
Estas tramas son recibidas por todos los arduinos que están en la red zigbee, pero sólo el que corresponde con su dirección hará caso al mensaje.
Un saludo.
Gracias, habia pensado en algo parecido. Ahora me tendre que empapar de como se puede hacer una red de xbee con arduino. He estado leyendo por ahi y por ahora no lo tengo claro. Tendré que encargar unos cuantos modulos a Libellium y hacer pruebas.
Por cierto, en la comunicacion a los arduinos, tendré que controlar el estado de mas de uno a la vez. Me explico, por ejemplo tendre que activar 6 arduinos a a la vez (o los que sean). Estaria bien mandar un string (siguiendo con tu ejemplo) como:
":03021:01040:02010" .....
Despues en cada arduino hago un split de ese string y cargo en un array todos los valores. Que cada arduino mire si en dicho array esta su codigo identificador, y si es asi mirar el estado de la salida?
depende de para que deberias de hacer algun tipo de comprobacion de la trama enviada a los diferentes "bichos" ya que si por ejemplo:
Master -> Slave
:01031 -> El esclavo 1 pone en marcha la salida 3
:01032 -> El esclavo 1 no sabe que hacer porque no esta programado, pero realmente el Master envio :01030 o sea que
queria parar la salida 3 pero por cosas de la vida el puerto serie recibio un 2.
Aqui es donde realmente se debe de poner en funcionamiento un sistema de comprobacion de errores y de respuestas del esclavo.
Master:
:01031C -> Poner en marcha salida 3 del esclavo 1 y la trama tiene un checksum igual a 'C', si no esta correcto el checksum el esclavo deveria de responder con un error, para dar a entender al master que no ha entendido el mensaje.
Con modbus ten en cuenta que no podras utilizar RTU ya que al ser en modo binario el bootloader de arduino muchas veces "salta"
Soliset