Главная
 
PDA-NN.3dn.ruЧетверг, 03.07.2025, 14:02



Приветствуем вас Гость | RSS
Главная
Меню сайта

Категории раздела
Девайсы [16]
Софт [2]
Операционные системы [10]
Разное [12]

Наш опрос
Стоит ли удалить раздел WindowsMobile ?
Всего ответов: 17

Мини-чат

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0


Передача нескольких переменных через RF 433 MHz
Как то собирая свой блок управления печкой столкнулся с проблемой огромного количества проводов от датчиков температуры. К тому же у датчиков DS18B20 очень ограниченна длинна сигнального провода, при длине провода в 2м сигнал уже не доходил до контроллера. Перепайка резистора с 10КОм на 4К7 не сильно помогла. По этому решил обратиться за помощью к радио каналам, а в частности RF 433 MHz. Преимуществом этого радио модуля даже в том что стоят они сущие копейки. Заказывал на АлиЭкспресс



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

Итак начнем со схемы подключения.

Тут думаю все очень просто



Переходим к программированию контроллеров (В моем случае это Arduino R3 Nano естественно китайская копия)

Начнем с передатчика:

Код

// Тестировалось на Arduino IDE 1.8.1
#include <VirtualWire.h> // Библиотека RF 433
#include <OneWire.h> // Библиотека шины датчиков температуры
#include <DallasTemperature.h> // Библиотека Датчиков
#define ONE_WIRE_BUS 8 // Pin для подключения DS18B20
OneWire oneWire(ONE_WIRE_BUS); // Инициализирум шину
DallasTemperature sensors(&oneWire); // Инициализируем датчики

void setup(void)
{
  sensors.begin(); //Датчики  
  vw_set_ptt_inverted(true); // Необходимо для DR3100
  vw_setup(2000); // Устанавливаем скорость передачи (бит/с)
}

void loop(void)
{
  sensors.requestTemperatures(); //читаем температуру  
  int t1 =sensors.getTempCByIndex(0); // присваиваем переменной значение температуры  
  int t2 =sensors.getTempCByIndex(1); // присваиваем переменной значение температуры  
  String strMsg = "z "; //создаем стринговую переменнну с символом для идентификации приемником к которой прибавляем  
  strMsg += " "; // Пробел для более удобной читаемости  
  strMsg += t1; // переменная температуры 1
  strMsg += " "; // пробел
  strMsg += t2; //переменная температуры 2
  strMsg += " "; //пробел
   
   
  char msg[255]; //вот этот момент не понял  
   
  strMsg.toCharArray(msg, 255); // начинаем процесс отправки  
   
  Serial.println(msg); //зачем то отправляем в сериал  
   
  vw_send((uint8_t *)msg, strlen(msg)); // процесс отправки  
  vw_wait_tx(); // Ждем пока передача будет окончена
  delay(200);  
}


Скетч приемника
Код

// Тестировалось на Arduino IDE 1.8.1
#include <VirtualWire.h> // Бибилиотека для RF 433 Mhz

void setup()
{
  Serial.begin(9600); // скорость сериал для общения с пк
  vw_set_ptt_inverted(true); // Необходимо для DR3100
  vw_setup(2000); // Задаем скорость приема
  vw_rx_start(); // Начинаем мониторинг эфира
  Serial.println("RF 433 MHz The radio module is activated");
}

void loop()
{
  uint8_t buf[VW_MAX_MESSAGE_LEN]; // Буфер для сообщения
  uint8_t buflen = VW_MAX_MESSAGE_LEN; // Длина буфера

  if (vw_get_message(buf, &buflen)) // Если принято сообщение
  {
  // Начинаем разбор
  int i;
  // Если сообщение адресовано не нам, выходим
  if (buf[0] != 'z') //если идентификационного символа в сообщение нет то  
  {
  return; // команда на начало скетча  
  }

  // далее нам надо выковырнуть наши данные с датчиков они начнутся с 3 символа для этого:  
  i = 3; // переменную i приравняем к 3
  int t1 = 0; // создаем переменную температуры 1
  // Поскольку передача идет посимвольно, то нужно преобразовать набор символов в число
  while (buf[i] != ' ')
  {
  t1 *= 10;
  t1 += buf[i] - '0';
  i++;
  }
  i = 6; //вторая температура начинается с 6-ого символа  
  int t2 = 0; //создаем переменную второй температуры
  // Поскольку передача идет посимвольно, то нужно преобразовать набор символов в число
  while (buf[i] != ' ')
  {
  t2 *= 10;
  t2 += buf[i] - '0';
  i++;
  }
  //печатаем в сериал наши переменные полученные в результает преобразования  
  Serial.print("t1"); // текст
  Serial.print(" "); //пробел
  Serial.println(t1); //переменная первого датчика
  Serial.print("t2"); //текст
  Serial.print(" "); // пробел
  Serial.println(t2); //переменная второго датчика
  Serial.println("*********************"); //просто текст для разделения сообщений  
  }

}


Постарался все как можно подробнее раскомментировать, что сам понял

В итоге



Библиотеки и готовые скетчи можно скачать вот отсюда Скачать с Облако Mail.Ru
Категория: Разное | Добавил: Дымок(R) (22.01.2017)
Просмотров: 1812 | Теги: rf, радио, 433, RF 433 MHz, Arduino, переменные | Рейтинг: 4.8/4
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Вход на сайт

Поиск

Друзья сайта


Copyright MyCorp © 2025
Сайт создан в системе uCoz