Двусторонняя связь с помощью 433Mhz RF link kit

blackhand
Offline
Зарегистрирован: 13.10.2012

Здравствуйте! Вроде подобной темы на форуме не было, так что спрошу: возможно ли осуществить двустороннюю связь между двумя Ардуинами с помощью 433Mhz RF link kit?

Дело в том, что я пока освоил звязь в одну сторону, то есть, одна ардуина посылает информацию второй, а та уже отображает значение в терминале на компе. А вот как сделать, чтобы можно было на другую ардуино ещё и собственноручно посылать данные? Два таких набора я уже купил, то есть, у меня два ресивера и два трансмиттера, так что в железном плане всё нормально. А вот как это отобразить в коде?

Вот прошивки на каждую ардуину, которые стоят сейчас и работают в одну сторону:

Ресивер


#include <VirtualWire.h>

void setup()
{
    Serial.begin(9600);	// Debugging only
    Serial.println("setup");

    // Initialise the IO and ISR
    vw_set_ptt_inverted(true); // Required for DR3100
    vw_setup(2000);	 // Bits per sec

    vw_rx_start();       // Start the receiver PLL running
}

void loop()
{
    uint8_t buf[VW_MAX_MESSAGE_LEN];
    uint8_t buflen = VW_MAX_MESSAGE_LEN;

    if (vw_get_message(buf, &buflen)) // Non-blocking
    {
	int i;

        digitalWrite(13, true); // Flash a light to show received good message
	// Message with a good checksum received, dump it.
	Serial.print("Got: ");
	
	for (i = 0; i < buflen; i++)
	{
 
	    Serial.print((char) buf[i] - '0');
	    Serial.print("");
	}
	Serial.println("");
        digitalWrite(13, false);
    }
    }

Трансмиттер


#include <VirtualWire.h>
#include <dht11.h> 


dht11 mysensor; //
int mysensorPIN = 2; //

int lm335=0;
void setup()
{
    Serial.begin(9600);	  // Debugging only
    Serial.println("setup");

    // Initialise the IO and ISR
    vw_set_ptt_inverted(true); // Required for DR3100
    vw_setup(2000);	 // Bits per sec

}

void loop()
{
double val = analogRead(lm335);
  double voltage = val*5.0/1024;
double temp = voltage*100 - 273.15;

int chk = mysensor.read(mysensorPIN); 
int a = (float)mysensor.humidity, mysensorPIN;
  
  int i = temp;
  int b = a ;
 
  String data = String(i) + "/" + String(b) ;
 char msg[50] ;
data.toCharArray(msg, data.length()+1);


digitalWrite(13, true); // 
  
 vw_send((byte*)msg, strlen(msg));
vw_wait_tx(); // 
    digitalWrite(13, false);
    delay(200);
   
}

Прошу помочь, подскажите хотя бы принцип, по которому можно это осуществить.

ustas
Offline
Зарегистрирован: 12.03.2012

Принцип скрывается за этим:

Симплекс: В радиосвязи симплекс означает передачу данных по единственному частотному каналу. Соответственно, данные могут передаваться в каждый момент времени только в одну сторону.

Wikly
Offline
Зарегистрирован: 20.01.2015

Т.е. По очереди возможно принимать и отправлять?

Например:

Имеется две платы ардуино, и 2 пары примеников и передатчиков, ставим на 1 ардуину пару приемник/передатчик, и на 2 так же. после отправки с 1-ой на 2-ую, 2-ая может принять сигнал и ПОСЛЕ приема отправить ответ на 1-ую. а 1-ая ПОСЛЕ отправки, будет ждать сигнал со 2-ой...

(не сильно запутал?)

Такое возможно?

Весь инет перекопал, не нашол такой реализации.. Может есть соображения на эту тему?

SLKH
Offline
Зарегистрирован: 17.08.2015

Wikly пишет:

Т.е. По очереди возможно принимать и отправлять?

Например:

Имеется две платы ардуино, и 2 пары примеников и передатчиков, ставим на 1 ардуину пару приемник/передатчик, и на 2 так же. после отправки с 1-ой на 2-ую, 2-ая может принять сигнал и ПОСЛЕ приема отправить ответ на 1-ую. а 1-ая ПОСЛЕ отправки, будет ждать сигнал со 2-ой...

(не сильно запутал?)

Такое возможно?

Полудуплекс.

b707
Offline
Зарегистрирован: 26.05.2017

Wikly пишет:

 

Весь инет перекопал, не нашол такой реализации.. Может есть соображения на эту тему?

соображение есть - и очень простое. Если в сети нет или мало подобных проектов - то это не потому, что до этого никто не додумался, а потому что существуют более простые и удобные альтернативы, кроме как городить на один МК отдельные приемник и передатчик.  Использовать на каждой ардуине пару RF433 - это, извините, секс в гамаке. Вместо этого есть масса решений, сразу предназначенных для двухсторонней связи - NRF24, HC-12, Лора. Блютуз, Вай-Фай...

SLKH
Offline
Зарегистрирован: 17.08.2015

b707 пишет:

Wikly пишет:

 

Весь инет перекопал, не нашол такой реализации.. Может есть соображения на эту тему?

соображение есть - и очень простое. Если в сети нет или мало подобных проектов - то это не потому, что до этого никто не додумался, а потому что существуют более простые и удобные альтернативы, кроме как городить на один МК отдельные приемник и передатчик.  Использовать на каждой ардуине пару RF433 - это, извините, секс в гамаке. Вместо этого есть масса решений, сразу предназначенных для двухсторонней связи - NRF24, HC-12, Лора. Блютуз, Вай-Фай...

Если 2 комплекта RF433 уже куплены - что там неудобного прицепить их к ардуине,  что-то передавать передатчику, а затем слушать приемник?