Приветствую Вас Гость | RSS
Главная | Каталог статей | Регистрация | Вход

Урааа

Меню сайта

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

Вход на сайт

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

Мини-чат

Друзья сайта
  • Яндекс Диск
  • Радикал-Фото
  • 4pda.ru

  • Поиск

    Статистика

    Онлайн всего: 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)
    Просмотров: 1700 | Теги: rf, радио, 433, RF 433 MHz, Arduino, переменные | Рейтинг: 4.8/4
    Всего комментариев: 0
    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]
    Copyright MyCorp © 2024 Шаблоны и скрипты | Сайт создан в системе uCoz