вторник, 30 апреля 2013 г.

Работа с 433Mhz TX/RX Arduino Module

Соединить пару arduino-к с помощью FS1000A / XY-MK-5V 433Mhz TX/RX Module не просто... А элементарно просто =)
Выглядят они вот так:
Для примера будем пересылать температуру, полученную с датчика DS18B20.
В подключении к arduino ничего сложного нет, три провода: Vcc, GND, DATA - соответственно на "5V", "GND" и любой свободный пин (в данном случае 7).

Скетч для ардуины с трансмиттером:

//Transmitter
#include <VirtualWire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
// Data-нога датчика (или датчиков) к 12 пину ардуины
#define ONE_WIRE_BUS 12
// настройка oneWire для работы с любыми другими OneWire девайсами (не только Maxim/Dallas датчиками температуры)
OneWire oneWire(ONE_WIRE_BUS);
// подключаем Dallas Temperature.
DallasTemperature sensors(&oneWire);
void setup()
{
  Serial.begin(9600);

  vw_setup(2000); // bits per sec
  vw_set_tx_pin(7); // пин, соединенный с DATA трансмиттера
  Serial.println("Transmitter");
  Serial.print("\n");
  // Start up the library
  sensors.begin(); // датчики темп.
}
void loop()
{
  char msg[24];
  sensors.requestTemperatures();  // опрос датчиков
  dtostrf(sensors.getTempCByIndex(0), 6, 2, msg); //получение и форматирование Т в msg
  vw_send((uint8_t *)msg, strlen(msg)); // отправляем
  vw_wait_tx(); // ждем полного завершения передачи
}


Рессивер подключается точно так же. Код для второй ардуины:
//Reciever
#include <VirtualWire.h>
void setup()
{
  Serial.begin(9600);
  pinMode(13,OUTPUT);
  digitalWrite(13,LOW);
  Serial.print("Reciever");
  Serial.print("\n");
  vw_set_ptt_inverted(true);
  vw_setup(2000);
  vw_set_rx_pin(7);
  vw_rx_start();
}
void loop()
{
  char res[24];
  uint8_t buflen = VW_MAX_MESSAGE_LEN;
  uint8_t buf[VW_MAX_MESSAGE_LEN];

  if(vw_get_message(buf, &buflen))
  {
    digitalWrite(13,!digitalRead(13));
    Serial.print("msg recieved...");
    Serial.print("\n");
    for(int i = 0;i < buflen;i++)
    {
      res[i] = buf[i];
    }
    digitalWrite(13,!digitalRead(13));
    Serial.print(res);
    Serial.print("\n");
  }
}
Это все. Дальше заливаем на девайсы, запускаем монитор порта ардуины с рессивером и видим заветное
msg recieved...
26.44
Помимо передачи данных на этих дешевых датчиках можно построить и беспроводное управление, все делается аналогично.

Ссылки по теме:
Библиотека VirtualWire
dtostrf()

Эти модули можно найти на aliexpress.com или dx.com по цене в районе $5. Для обратной связи потребуется 2 пары...

2 комментария:

  1. спасибо тебе огромное!!!

    ОтветитьУдалить
  2. Неплохо,надо теперь попробовать контроллер датчиков на attiny13 поменять, а на uno экран добавить с кнопками

    ОтветитьУдалить