Comunicacion bidireccional

Hola, quiero realizar una comunicación bidireccional inalámbrica entre dos arduinos. He probado usando los módulos de radiofrecuencia a 433MHz poniendo un emisor y un receptor en un arduino y un emisor y un receptor en el otro arduino pero no se realiza correctamente la comunicación. Alguien podría decirme si eso se puede realizar? o tengo que usar módulos de distintas frecuencias? Un saludo.

Primero:
Cual es el proyecto electronico7?
Porque posteaste en subForo Proyecto. Esto debió ir en Hardware en todo caso.

Respondo tu consulta:
Usa nRF24L01 y tendras tu comunicación bidireccional.
Hay un tutorial en curso en Documentación y sino google: Arduino nRF24L01
Usa las librerias de Maniac o Tmrh20 (yo uso esta última)

surbyte:
Primero:
Cual es el proyecto electronico7?
Porque posteaste en subForo Proyecto. Esto debió ir en Hardware en todo caso.

Respondo tu consulta:
Usa nRF24L01 y tendras tu comunicación bidireccional.
Hay un tutorial en curso en Documentación y sino google: Arduino nRF24L01
Usa las librerias de Maniac o Tmrh20 (yo uso esta última)

Perdón pero no sabía donde colocar la consulta. Para el protocolo de comunicación uso modbus mediante la librería SimpleModbus. Serviría esta librería para la comunicación con nRF24L01? Un saludo.

Como siempre digo, la información con cuenta gotas.

El comunicador es independiente del protocolo que uses, eso siempre o acaso tus emisores/receptores son Modbus? Pues no. Claro que no. Implementas la trama modbus y envias la serie de bytes por ese medio de comunicación.

Inalámbrico tambien seria IR un emisor/receptor Infrarojo. No se si te satisface.
Como dije puede ser el nRF24L01, XBEE o bien algo WIFI.

surbyte:
Como siempre digo, la información con cuenta gotas.

El comunicador es independiente del protocolo que uses, eso siempre o acaso tus emisores/receptores son Modbus? Pues no. Claro que no. Implementas la trama modbus y envias la serie de bytes por ese medio de comunicación.

Inalámbrico tambien seria IR un emisor/receptor Infrarojo. No se si te satisface.
Como dije puede ser el nRF24L01, XBEE o bien algo WIFI.

Gracias por responder. Es que la librería modbus usa el puerto serie de arduino para transmitir y los nRF24L01 creo que tienen varios aspectos a controlar y no solo una patilla contectada al TxD o RxD del Arduino, no?

Pero existe Modbus TCP/IP asi que si tu quieres enviar datos los encapsulas dentro del nRF24L01 y luego los recuperas y le haces creer al nodo que recibiste esto.
Cual es el problema? Solo es adaptar tu librería modbus y cambiar el Serial por los datos recibidos via tu sistema de comunicación.
Como ibas a hacer lo mismo con los transmisores 433Mhz?

surbyte:
Pero existe Modbus TCP/IP asi que si tu quieres enviar datos los encapsulas dentro del nRF24L01 y luego los recuperas y le haces creer al nodo que recibiste esto.
Cual es el problema? Solo es adaptar tu librería modbus y cambiar el Serial por los datos recibidos via tu sistema de comunicación.
Como ibas a hacer lo mismo con los transmisores 433Mhz?

La libreria que uso utiliza modbus sobre RS485 y la he probado conectando el RxD del maestro al TxD del esclavo y el TxD del maestro al RxD del esclavo y ha funcionado. Luego intenté ponerle un modulo receptor de RF a 433MHz al RxD del maestro y otro al RxD del esclavo y luego un modulo transmisor al TxD del esclavo y otro al TxD del maestro pero no consigo que se comuniquen.

Te adjunto el archivo de la función principal de la libreria que uso.

SimpleModbusMaster.cpp (11.3 KB)

Coloca los códigos de los dos sketch, de otra manera no podremos ayudarte.

Saludos

PeterKantTropus:
Coloca los códigos de los dos sketch, de otra manera no podremos ayudarte.

Saludos

Te refieres a los de la función encargada de enviar la trama del maestro y la del esclavo?

No, a los sketch que estas cargando en los Arduinos.

saludos

Te adjunto los sketchs.
Conectando mediante cable los RxD y los TxD de los arduinos maestro y esclavo si realiza bien la comunicación pero si conecto dos receptores de RF y dos emisores RF no se comunican.
Un saludo.

SimpleModbusMasterArduino.ino (6.88 KB)

SimpleModbusSlaveArduino.ino (3.67 KB)

Son los ejemplos tal cual, es obvio que no te funcionen, todos los módulos de comunicaciones deben estar configurados e inicializados. Luego debes heredar las propiedades de comunicación sobre Modbus. Intenta primero hacer funcionar los módulos de comunicación.

Saludos.

PeterKantTropus:
Son los ejemplos tal cual, es obvio que no te funcionen, todos los módulos de comunicaciones deben estar configurados e inicializados. Luego debes heredar las propiedades de comunicación sobre Modbus. Intenta primero hacer funcionar los módulos de comunicación.

Saludos.

Pero debería funcioner con dos emisores de RF y dos receptores de RF de 433MHz? o tienen que ser de diferente frecuencia? Un saludo.

PeterKantTropus:
Son los ejemplos tal cual, es obvio que no te funcionen, todos los módulos de comunicaciones deben estar configurados e inicializados. Luego debes heredar las propiedades de comunicación sobre Modbus. Intenta primero hacer funcionar los módulos de comunicación.

Saludos.

Los módulos que yo uso no hace falta configurarlos simplemente escribes y lees del puerto serie y cogen bien la información.

Como posible, es posible, pero no deben transmitir al mismo tiempo, como en un walkie talkie. es mejor como te aconsejo surbyte utilizar algún bus que permita comunicación bidireccional.

PeterKantTropus:
Como posible, es posible, pero no deben transmitir al mismo tiempo, como en un walkie talkie. es mejor como te aconsejo surbyte utilizar algún bus que permita comunicación bidireccional.

No puede ser que al transmitir el emisor de RF del maestro lo detecte también su propio receptor y cree un conflicto en la comunicación? Habría alguna forma de inhabilitar la parte RxD del puerto serie de un arduino para que no recibiera datos su propio receptor? Un saludo.

La pregunta que me hago es porque debe ser bidireccional usando MODBUS.
Es suficientemente rápido para ni darte cuenta que es unidireccional aun a velocidades lentas como 9600 bps.
Asi que pq razón debe ser bidireccional?
Porque te fijas un problema que claro que puede resolverse pero si aceptaras la comunicación unidireccional entonces no hay que hacer nada incluso con tus modulos 433Mhz.

surbyte:
La pregunta que me hago es porque debe ser bidireccional usando MODBUS.
Es suficientemente rápido para ni darte cuenta que es unidireccional aun a velocidades lentas como 9600 bps.
Asi que pq razón debe ser bidireccional?
Porque te fijas un problema que claro que puede resolverse pero si aceptaras la comunicación unidireccional entonces no hay que hacer nada incluso con tus modulos 433Mhz.

La comunicación tiene que ser bidireccional porque el maestro le solicita al esclavo un dato y el esclavo le tiene que responder devolviéndole el dato que la ha solicitado el maestro.

Pero tienes un concepto equivocado ya que eso no ocurre simultáneamente.
El maestro le pregunta al esclavo en T1 tiempo, y el esclavo responde en T2.
O sea.. el maestro ocupa el emisor1 y el esclavo ocupa el receptor1 y completa el primer mensaje esto en el instante T1.
Ahora el esclavo responde en el instante T2 ocupando el emisor2 y el maestro recibi el mensaje ocupando el receptor 2.
Como ves. fue bidireccional pero usé pares de comunicación emisor-receptor unidireccionales.

Mas aún, normalmente esto se hace con un MAX485 que es un dispositivo de serial diferencial. El dispositivo solo se comunica con otro MSX485 que siempre esta escuchando o sea en modo receptor.
Y la comunicación es unidireccional aunque el maestro pregunte y el esclavo responda.

surbyte:
Pero tienes un concepto equivocado ya que eso no ocurre simultáneamente.
El maestro le pregunta al esclavo en T1 tiempo, y el esclavo responde en T2.
O sea.. el maestro ocupa el emisor1 y el esclavo ocupa el receptor1 y completa el primer mensaje esto en el instante T1.
Ahora el esclavo responde en el instante T2 ocupando el emisor2 y el maestro recibi el mensaje ocupando el receptor 2.
Como ves. fue bidireccional pero usé pares de comunicación emisor-receptor unidireccionales.

Mas aún, normalmente esto se hace con un MAX485 que es un dispositivo de serial diferencial. El dispositivo solo se comunica con otro MSX485 que siempre esta escuchando o sea en modo receptor.
Y la comunicación es unidireccional aunque el maestro pregunte y el esclavo responda.

Entonces puedo hacerlo poniendo un emisor de RF en el TxD del maestro y un receptor de RF en el RxD del maestro y en el esclavo lo mismo? Porque aunque la comunicación no sea en el mismo instante el emisor tiene que ser capaz de enviar y recibir y el esclavo igual.