Подключение WL101-341 и WL102-341 к Arduino

Рано или поздно, в создаваемых проектах Arduino появится необходимость дистанционного управления. Одним из самых бюджетных решений является использование радиоприемника и радиопередатчика, такими являются WL101-341 и WL102-341. Подключаются WL101-341 и WL102-341 к Arduino очень просто, библиотеки уже существуют (к примеру RadioHead), так что не составит большого труда обмениваться данными между ардуинками. Простейший пример их использования вы найдете в данной статье, а дальше все зависит только от ваших нужд и фантазии.

Установка библиотеки RadioHead

RadioHead Packet Radio — это библиотека для встроенных микропроцессоров. RadioHead предоставляет полную объектно-ориентированную библиотеку для отправки и получения пакетированных сообщений через различные распространенные радиопередачи данных и другие виды транспорта на ряде встроенных микропроцессоров/микроконтроллеров. Установить библиотеки можно следующим образом:

  1. Скачиваем библиотеку с сайта RadioHead, на данный момент последняя версия: RadioHead-1.89.zip;
    Установка библиотеки RadioHead - Скачиваем библиотеку
  2. Распаковываем архив в \Documents\Arduino\libraries;
    Установка библиотеки RadioHead - Распаковываем архив
  3. Библиотека установлена.

Описание методов класса RH_ASK

Для работы с данными радиомодулями будет использован класс RH_ASK. RH_ASK работает с рядом недорогих РЧ трансиверов ASK (амплитудная манипуляция), таких как RX-B1 (также известный как ST-RX04-ASK); Передатчик TX-C1 и приемопередатчик DR3100; Приемопередатчик FS1000A / XY-MK-5V; HopeRF RFM83C / RFM85. Поддерживает ASK (OOK).

RH_ASK ()

Конструктор. В настоящее время поддерживается только один экземпляр RH_ASK на скетч.

RH_ASK::RH_ASK (uint16_t  	speed = 2000,
		uint8_t  	rxPin = 11,
		uint8_t  	txPin = 12,
		uint8_t  	pttPin = 10,
		bool  	pttInverted = false 
		)

Параметры:
speed — Желаемая скорость в битах в секунду
rxPin — Пин, который используется для получения данных от приемника
txPin — Пин, который используется для отправки данных на передатчик
pttPin — Пин, который подключен к EN передатчика. Будет установлено ВЫСОКОЕ состояние, чтобы включить передатчик (по умолчания pttInverted = true).
pttInverted — true, если вы хотите, чтобы pttin был инвертирован, чтобы НИСКОЕ состояние включило передатчик.

virtual bool init()

Инициализирует драйвер. Убедитесь, что драйвер настроен правильно перед вызовом init().

bool RH_ASK::init()

Возвращает:
истина, если инициализация прошла успешно.

virtual bool available()

Проверяет, доступно ли новое сообщение из драйвера. Также переводит драйвер в режим RHModeRx до тех пор, пока сообщение не будет фактически получено транспортом, когда оно будет возвращено в RHModeIdle. Это может быть вызвано несколько раз в цикле ожидания.

bool RH_ASK::available()

Возвращает:
true, если новое, полное, безошибочное несобранное сообщение доступно для извлечения с помощью recv().

virtual bool recv (uint8_t *buf, uint8_t *len)

Включает приемник, если он еще не включен. Если доступно допустимое сообщение, копирует его в buf и возвращает true, иначе возвращает false. Если сообщение копируется, *len устанавливается длина (Внимание, сообщения 0 длины разрешены). Вы должны вызывать эту функцию достаточно часто, чтобы не пропустить ни одного сообщения. Рекомендуется вызывать ее в основном цикле.

bool RH_ASK::recv(uint8_t * buf, uint8_t * len)

Параметры:
buf — место для копирования полученного сообщения
len — указатель на доступное пространство в буфере. Устанавливает фактическое количество скопированных октетов.
Возвращает:
true, если действительное сообщение было скопировано в buf.

virtual bool send(const uint8_t *data, uint8_t len)

Ожидание завершения передачи любого предыдущего передаваемого пакета с помощью waitPacketSent(). Затем загружает сообщение в передатчик и запускает передатчик. Обратите внимание, что длина сообщения 0 НЕ допускается.

bool RH_ASK::send(const uint8_t * data, uint8_t len)

Параметры:
data — массив данных для отправки
len — Количество байтов данных для отправки (> 0)
Возвращает:
истина, если длина сообщения была правильной, и оно была правильно поставлена в очередь для передачи

virtual uint8_t maxMessageLength()

Возвращает максимальную длину сообщения, доступную в этом драйвере.

uint8_t RH_ASK::maxMessageLength()

Возвращает:
Максимальная допустимая длина сообщения

void setModeIdle()

Если текущий режим — Rx или Tx, он переключается в режим ожидания. Если передатчик или приемник работает, отключает их.

void INTERRUPT_ATTR RH_ASK::setModeIdle()

void setModeRx()

Если текущий режим Tx или Idle, изменяет его на Rx. Запускает приемник в RF69.

void RH_ASK::setModeRx()

void setModeTx()

Если текущий режим Rx или Idle, изменяет его на Rx. F Запускает передатчик в RF69.

void RH_ASK::setModeTx()

void handleTimerInterrupt()

не вызывайте этот метод, он используется обработчиком прерываний

uint16_t speed()

Возвращает текущую скорость в битах в секунду.

uint16_t RH_ASK::speed()

Возвращает:
Текущая скорость в битах в секунду

Подключение WL101-341 и WL102-341 к Arduino

Схема подключения WL101-341 к Arduino

Схема подключения приёмника WL101-341 к Arduino

Arduino WL101-341
3.3В Vin
GND GND
11 DO

Пример скетча для приёмника

Приёмник будет получать числа от 0 до 255 по нарастающей. Если ожидаемое число получено не будет, тогда выводим в терминал ‘*’.

/*
  Добавляем необходимые библиотеки
*/
#include <RH_ASK.h>

#define SPEED         (uint16_t)1200
#define RX_PIN        (uint8_t)11
#define TX_PIN        (uint8_t)12
#define PTT_PIN       (uint8_t)10
#define PTT_INVERTED  false

/*
  Создаём экземпляр класса RH_ASK приёмника
*/
RH_ASK driver(SPEED, RX_PIN, TX_PIN, PTT_PIN, PTT_INVERTED);

void setup() {
  /*
    задаем скорость общения с компьютером
  */
  Serial.begin(115200);

  /*
    Инициализируем приёмник
  */
  if (! driver.init()) {
    Serial.println(F("RF init failed!"));
    while (true) {
      delay(1);
    }
  }
  /*
     Настройка встроенного светодиода
  */
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  static uint8_t estdata;
  uint8_t data;
  uint8_t buflen = sizeof(data);
  /*
     Проверяем наличие новых данных
  */
  if (driver.recv((uint8_t*)&data, &buflen)) {
    /*
      Гасим светодиод
    */
    digitalWrite(LED_BUILTIN, LOW);
    /*
      Выводим в терминал '*' если полученные данные не совпадают с ожидаемыми
    */
    if (data != estdata) {
      Serial.print('*');
    }
    /*
      Выводим в терминал полученные данные
    */
    Serial.print("RX: ");
    Serial.println(data);
    /*
      Инкрементируем значение
    */
    estdata = data + 1;
    /*
      Включаем светодиод
    */
    digitalWrite(LED_BUILTIN, HIGH);
  }
}

Схема подключения WL102-341 к Arduino

Вывод данных WL102-341 не толерантный к 5 вольтам поэтому, если вы используете пятивольтовую arduino, то подать 3.3 вольта можно через резистивный делитель (R1 = 1к, R2 = 2к).

Схема подключения WL102-341 к Arduino

На данном модуле линия EN неактивна, так как на плате установлена перемычка, соединяющая 1-й вывод микросхемы (EN) с линией питания, то есть модуль постоянно работал при подаче питания. Можно отпаять перемычку, чтобы иметь возможность управления передатчиком.
WL102-341 - линия EN (перемычка)

Arduino WL102-341
GND GND / —
3.3В Vin / +
DAT 12
EN 10

Пример скетча для передатчика

Передатчик будет отправлять числа от 0 до 255 по нарастающей.

/*
  Добавляем необходимые библиотеки
*/
#include <RH_ASK.h>

#define SPEED         (uint16_t)1200
#define RX_PIN        (uint8_t)11
#define TX_PIN        (uint8_t)12
#define PTT_PIN       (uint8_t)10
#define PTT_INVERTED  false

/*
  Создаём экземпляр класса RH_ASK передатчика
*/
RH_ASK driver(SPEED, RX_PIN, TX_PIN, PTT_PIN, PTT_INVERTED);

void setup() {
  /*
    задаем скорость общения с компьютером
  */
  Serial.begin(115200);

  /*
    Инициализируем передатчик
  */
  if (!driver.init()) {
    Serial.println(F("RF init failed!"));
    while (true) {
      delay(1);
    }
  }
  /*
     Настройка встроенного светодиода
  */
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  static uint8_t data = 0;

  /*
     Гасим светодиод
  */
  digitalWrite(LED_BUILTIN, LOW);
  /*
     Передаём данные
  */
  driver.send((uint8_t*)&data, sizeof(data));
  /*
    Ждем пока передача будет окончена
  */
  driver.waitPacketSent();
  /*
     Выводим в терминал отправленные данные
  */
  Serial.print("TX: ");
  Serial.println(data);
  /*
      Инкрементируем значение
  */
  ++data;
  /*
    Включаем светодиод
  */
  digitalWrite(LED_BUILTIN, HIGH);
  /*
    Ждём
  */
  delay(100);
}

Результат

Отправленные данные:
Подключение WL101-341 к Arduino - Отправленные данные

Полученные данные:
Подключение WL101-341 к Arduino - Полученные данные

Пример передачи данных рандомной длины

Для большего понимания принципа работы библиотеки, создал ещё один пример обмена данными между ардуинками. Передатчик будет отправлять массив данных uint8_t data[10] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'}; с интервалом в одну секунду. Количество отправленных байт будет неизвестно, потому что применяется функция random(1, 10). Принимающая сторона принимает эти данные и выводит их и их количество в терминал.

Скетч для передатчика

/*
  Добавляем необходимые библиотеки
*/
#include <RH_ASK.h>

#define SPEED         (uint16_t)2000
#define RX_PIN        (uint8_t)11
#define TX_PIN        (uint8_t)12
#define PTT_PIN       (uint8_t)10
#define PTT_INVERTED  false

/*
  Создаём экземпляр класса RH_ASK передатчика
*/
RH_ASK driver(SPEED, RX_PIN, TX_PIN, PTT_PIN, PTT_INVERTED);

void setup() {
  /*
    задаем скорость общения с компьютером
  */
  Serial.begin(115200);
  /*
    Инициализируем передатчик
  */
  if (! driver.init()) {
    Serial.println(F("RF init failed!"));
    while (true) {
      delay(1);
    }
  }
  /*
     Настройка встроенного светодиода
  */
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  /*
    Буфер данных для отправки
  */
  uint8_t data[10] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};

  /*
     Гасим светодиод
  */
  digitalWrite(LED_BUILTIN, LOW);
  /*
    Передаём массив данных случайной длины (от 1 до 10)
  */
  driver.send(data,  random(1, 10));
  /*
    Ждем пока передача будет окончена
  */
  driver.waitPacketSent();
  /*
    Включаем светодиод
  */
  digitalWrite(LED_BUILTIN, HIGH);
  /*
    Ждём секунду
  */
  delay(1000);
}

Скетч для приёмника

/*
  Добавляем необходимые библиотеки
*/
#include <RH_ASK.h>

#define SPEED         (uint16_t)2000
#define RX_PIN        (uint8_t)11
#define TX_PIN        (uint8_t)12
#define PTT_PIN       (uint8_t)10
#define PTT_INVERTED  false

/*
  Создаём экземпляр класса RH_ASK приёмника
*/
RH_ASK driver(SPEED, RX_PIN, TX_PIN, PTT_PIN, PTT_INVERTED);

void setup() {
  /*
    задаем скорость общения с компьютером
  */
  Serial.begin(115200);
  /*
    Инициализируем передатчик
  */
  if (! driver.init()) {
    Serial.println(F("RF init failed!"));
    while (true) {
      delay(1);
    }
  }
  /*
    Настройка встроенного светодиода
  */
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  /*
     Буфер полученных данных
  */
  uint8_t data[16];
  /*
     Размер полученных данных
  */
  uint8_t buflen = sizeof(data);
  uint8_t i;
  /*
     Проверяем наличие новых данных
  */
  if (driver.recv(data, &buflen)) {
    /*
      Гасим светодиод
    */
    digitalWrite(LED_BUILTIN, LOW);
    /*
      Выводим в терминал полученные данные
    */
    Serial.print("Size: ");
    Serial.print(buflen);
    Serial.println();
    Serial.print("Data: ");
    for (i = 0; i < buflen; i++) {
      Serial.print((char)data[i]);
      Serial.print(' ');
    }
    Serial.println();
    /*
      Включаем светодиод
    */
    digitalWrite(LED_BUILTIN, HIGH);
  }
}

Результат

Подключение WL101-341 к Arduino - Полученные рандомных данные

Материалы

WL101-341 и WL102-341 — Обзор супергетеродинного приемника и передатчика
VirtualWire
RadioHead
RF 433 MHz модули SYN115/SYN480R и WL101-341/WL102-341

Похожие записи

Комментарии 27

  • Спасибо за статью! Не подскажите как подобрать скорость в бит/сек? поставил 1250 вместо 2000, работает лучше.

    • Проблема этих модулей — это их скорость передачи данных. Если я не ошибаюсь, максимальная рабочая скорость где то 1650, но для стабильной работы лучше поставить чуть меньше.

  • Ознакомьтесь с полным процессом регистрации некоммерческой организации – кликните и узнайте больше

    https://registracia-nko.ru/ — форма регистрации некоммерческой организации

  • Узнайте, как зарегистрировать НКО с минимальными затратами и временными издержками

    https://registracia-nko.ru/ — заявление на регистрацию нко


  • Продажа мини-погрузчиков Lonking

    Продажа мини-погрузчиков Lonking на территории России от официального
    дистрибьютора. Новая многофункциональная техника для любых задач.
    Наши машины предназначены для того, чтобы упростить вашу работу:
    от строительных площадок до складских операций.

    Высокая эффективность, надежность и инновационные решения — все,
    что вам нужно для успешных проектов. Погрузите свой бизнес в будущее
    с мини-погрузчиками Lonking!

    47% российских покупателей выбрали мини-погрузчики Lonking в 2023 году продано более 1200 единиц.
    Мини-погрузчики Lonking


  • Интернет-магазин плитки и керамики «ИнфоПлитка»

    Интернет-магазин керамической плитки и керамогранита «Infoplitka» (infoplitka.ru)
    предлагает широкий ассортимент высококачественной плитки и керамогранита от ведущих производителей.
    Мы стремимся предложить нашим клиентам только лучшее, поэтому в ассортименте представлены товары,
    отвечающие самым высоким стандартам качества и дизайна.

    Мы понимаем, что выбор керамической плитки и керамогранита – это важный этап в создании
    комфортного и стильного интерьера. Поэтому наша команда профессионалов готова помочь вам в
    подборе идеального варианта для вашего проекта. Независимо от того, нужны ли вам плитка
    для ванной комнаты, кухни, гостиной, или же керамогранит для облицовки пола, вы всегда найдете
    у нас разнообразные и актуальные коллекции, соответствующие последним тенденциям в области
    дизайна интерьеров.
    Официальный сайт «ИнфоПлитка»

  • Найти специалиста по независимой экспертизе и оценке!

    Сайт-агрегатор компаний и услуг в сфере независимой экспертизы и оценки.
    Мы создали этот проект, чтобы помочь вам найти надежных и опытных профессионалов
    для решения ваших задач.

    Главная цель — сделать процесс поиска специалистов по независимой экспертизе
    и оценке максимально простым и эффективным. Мы стремимся предоставить вам
    доступ к компаниям, которые гарантируют высокое качество услуг.
    С нами вы сможете быстро найти нужного эксперта и сравнить различные предложения.

    На нашем сайте собраны карточки компаний, каждая из которых содержит подробную
    информацию о предоставляемых услугах. Посетители могут фильтровать предложения
    по различным критериям:

    Локация
    Направление экспертизы
    Стоимость услуг
    Отзывы клиентов

    Наш сайт Специалисты по независимой экспертизе и оценке.

  • Please tell your friends.
    to cut rates A single chart has the lowest prices for the usual how to take cialis 20mg at the lowest price
    Mangina — for woosies in the ED.

  • Women Should there be a concern about taking menopause-based medicine with insulin?
    Good pharmacies offer discounts when you viagra pharmacy prices affordably to treat your condition
    Gastroenterologists perform more colonoscopies by far than any other specialty.

  • In the majority of cases where Stachybotrys is found indoors, water damage has gone unnoticed or ignored since it requires extended periods of time with increased levels of moisture for growth to occur.
    Are there any places where online pharmacy australia viagra . Get one now! You can’t find more affordable prices.
    My uncle is suffering with extreme body pain.

  • All the foods I used to eat a lot make me naucious, and Im extremely tired all the time.
    When you shop online for an effective treatment, you want to cialis use . More info’s awaits you.
    In order to prevent the complications of diabetic neuropathy, it is important for people with diabetes to take particular care to check their feet regularly, keep them clean and protect them from injury.

  • An immediate reaction can occur as a result of allergic hypersensitivity.
    An internet store has ohio board of pharmacy adipex laws can be as simple as checking review sites.
    Don’t miss our one-on-one interviews with your favorite stars!

  • Mosby’s EMT-Intermediate Textbook for the 1985 National Standard Curriculum.
    Protect your health and online pharmacy viagra prescription you want to compare costs from pharmacies
    Doctors diagnose DVT with the use of ultrasound scanning, which can reveal the size and location of a DVT.

  • Treatment for bowel cancer Surgery is the main treatment for bowel cancer.
    Verify prices before you buy does cialis expire ? Shop with us.
    Unfortunately, episodic treatment does not reduce the frequency of outbreaks.

  • I am only 17 years old and know that this is not normal.
    Shop around for cheap prices on canadian cialis . Get one now! You can’t find more affordable prices.
    It is also very important to avoid infection with toxoplasmosis if you are pregnant, as toxo can be passed on to your baby and can cause more serious health problems congenital toxoplasmosis.

  • Regular menstruation comes back 4 to 6 weeks after a medical abortion.
    for the drugs you need and get a low price of Tadalis SX sold on the Internet have been removed because of safety.
    Also known as just «HPV test».

  • Terms of Use — Privacy Policy — Back to Top document.
    For great prices, https://cilisfastmed.com/ discount cialis from one of these pharmacies
    A baby born with herpes might: Be born early Have brain, skin, or eye problems Not survive If you are pregnant, you should tell your health care provider if you have herpes.

  • Since September, almost every month, I get a Z pack from my doctor Azithromycin antibiotic but this time, it didn’t even help.
    As the Internet becomes accessible buying https://ivermectinfastmed.com/ cost of ivermectin 1% cream Buy
    Iron chelation therapy should be started in patients with SCD receiving regular blood transfusions to reduce excess iron levels.

  • To help prevent DVT, move your legs often during long plane trips, car trips, and other situations in which you are sitting or lying down for long periods of time.
    Consider first-rate online pharmacies the moment you decide to https://ivermectinfastmed.com/ ivermectin 3 mg tablet dosage benefit the elderly?
    Ann Phys Rehabil Med.

  • Colposcopy is uncomfortable, but not painful, and can be done in your gynecologist’s office.
    Take off problems of erection. Follow this link https://cilisfastmed.com/ is cialis covered by insurance from Internet pharmacies.
    Fill out a PR Newswire membership form or contact us at 888 776-0942.

  • No, there is normal risk as for the other women.
    Get the fastest result at https://ivermectinfastmed.com/ ivermectin 50 will be correct when you buy it online.
    It would be wonderful if we had such a test for dogs.

  • In the meantime, top breast cancer experts say women should become as familiar with their own bodies as possible and be alert for any changes.
    sells drugs at discountsInstead of buying https://cilisfastmed.com/ how to get maximum effect from cialis by buying it online.
    Apply a warm heating pad to your abdomen to ease bladder discomfort.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *