Двусторонняя связь с помощью 433Mhz RF link kit
- Войдите на сайт для отправки комментариев
Здравствуйте! Вроде подобной темы на форуме не было, так что спрошу: возможно ли осуществить двустороннюю связь между двумя Ардуинами с помощью 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); }
Прошу помочь, подскажите хотя бы принцип, по которому можно это осуществить.
Принцип скрывается за этим:
Симплекс: В радиосвязи симплекс означает передачу данных по единственному частотному каналу. Соответственно, данные могут передаваться в каждый момент времени только в одну сторону.
Т.е. По очереди возможно принимать и отправлять?
Например:
Имеется две платы ардуино, и 2 пары примеников и передатчиков, ставим на 1 ардуину пару приемник/передатчик, и на 2 так же. после отправки с 1-ой на 2-ую, 2-ая может принять сигнал и ПОСЛЕ приема отправить ответ на 1-ую. а 1-ая ПОСЛЕ отправки, будет ждать сигнал со 2-ой...
(не сильно запутал?)
Такое возможно?
Весь инет перекопал, не нашол такой реализации.. Может есть соображения на эту тему?
Т.е. По очереди возможно принимать и отправлять?
Например:
Имеется две платы ардуино, и 2 пары примеников и передатчиков, ставим на 1 ардуину пару приемник/передатчик, и на 2 так же. после отправки с 1-ой на 2-ую, 2-ая может принять сигнал и ПОСЛЕ приема отправить ответ на 1-ую. а 1-ая ПОСЛЕ отправки, будет ждать сигнал со 2-ой...
(не сильно запутал?)
Такое возможно?
Весь инет перекопал, не нашол такой реализации.. Может есть соображения на эту тему?
соображение есть - и очень простое. Если в сети нет или мало подобных проектов - то это не потому, что до этого никто не додумался, а потому что существуют более простые и удобные альтернативы, кроме как городить на один МК отдельные приемник и передатчик. Использовать на каждой ардуине пару RF433 - это, извините, секс в гамаке. Вместо этого есть масса решений, сразу предназначенных для двухсторонней связи - NRF24, HC-12, Лора. Блютуз, Вай-Фай...
Весь инет перекопал, не нашол такой реализации.. Может есть соображения на эту тему?
соображение есть - и очень простое. Если в сети нет или мало подобных проектов - то это не потому, что до этого никто не додумался, а потому что существуют более простые и удобные альтернативы, кроме как городить на один МК отдельные приемник и передатчик. Использовать на каждой ардуине пару RF433 - это, извините, секс в гамаке. Вместо этого есть масса решений, сразу предназначенных для двухсторонней связи - NRF24, HC-12, Лора. Блютуз, Вай-Фай...