Arduino – передача данных по радиоканалу на частоте 433.920 МГц
GeekElectronics » Arduino от А до Я » Arduino – передача данных по радиоканалу на частоте 433.920 МГц
В этой статье я постараюсь подробно описать процесс организации передачи данных между контролерами Arduino по радиоканалу с использованием передатчика MX-F01 и приемника MX-RM-5V.
Эти модули планирую использовать в своей умной метеостанции, чтобы избавиться от лишних проводов.
Для начала, давайте познакомимся с железом.
Технические характеристики передатчик MX-F01
- Напряжение питания: 3-12 В
- Ток потребления в режиме ожидания: 0 мА
- Ток потребления в режиме передачи: 20-28 мА
- Рабочая частота: 433.920 МГц (Есть на частоту 315 МГц)
- Выходная мощность передатчика: 40 мВт
- Дальность передачи: до 500 м в зоне прямой видимости с дополнительной антенной длинной 17,5, 35 или 70 см
- Тип модуляции: амплитудная
- Температурный диапазон: –10…+70 °C
- Размеры: 19х19х8 мм
Назначение выводов передатчика MX-F01
- ATAD — данные
- VCC — питание «+»
- GND — питание «-«
- ANT — антенна
Технические характеристики приемника MX-RM-5V
- Напряжение питания: 5 В
- Ток потребления: 4 мА
- Рабочая частота: 433.920 МГц (Есть на частоту 315 МГц)
- Размеры: 30х14х7 мм
Назначение выводов приемника MX-RM-5V
- GND — питание «-«
- DATA — данные
- VCC — питание «+»
- ANT — антенна
Базовую информацию получили – пора приступать к практической части.
Подключение передатчика MX-F01 к Arduino
Для управления передатчиком MX-F01 я буду использовать Arduino Mega 2560.
- ATAD на MX-F01 подключаем к 12 дискретному выводу Arduino Mega 2560
- VCC на MX-F01 подключаем к +5V Arduino Mega 2560
- GND на MX-F01 подключаем к GND Arduino Mega 2560
- ANT на MX-F01 к антенне в виде куска провода длинной 17,5, 35 или 70 см (я пока антенну не припаивал)
Подключение приемника MX-RM-5V к Arduino
Для управления приемником я буду использовать Arduino Nano ATmega328.
- DATA на MX-RM-5V подключаем к 12 дискретному выводу Arduino Nano ATmega328
- VCC на MX-RM-5Vподключаем к +5V Arduino Nano ATmega328
- GND на MX-RM-5V подключаем к GND Arduino Nano ATmega328
- ANT на MX-RM-5V к антенне в виде куска провода длинной 17,5, 35 или 70 см (я пока антенну не припаивал)
Библиотека VirtualWire
Чтобы упростить написания кода для работы с радиомодулями, была создана библиотека: VirtualWire.
VirtualWire.rar (17,3 KiB, 5 373 hits)
Распакуйте содержимое архива в папку /libraries/, которая находится в каталоге среды разработки Arduino.
Примеры кода для работы с передатчиком MX-F01 с использованием библиотеки VirtualWire
Пример 1
Данный скетч будет отправлять раз в секунду сообщение «Hello World». Для наглядности, в начале передачи будет загораться светодиод, а после окончания – гаснуть.
const int led_pin = 13; // Пин светодиода
const int transmit_pin = 12; // Пин подключения передатчика
void setup()
<
vw_set_tx_pin(transmit_pin);
vw_setup(2000); // Скорость передачи (Бит в секунду)
pinMode(led_pin, OUTPUT);
>
void loop()
<
const char *msg = «Hello World»; // Передаваемое сообщение
digitalWrite(led_pin, HIGH); // Зажигаем светодиод в начале передачи
vw_send((uint8_t *)msg, strlen(msg)); // Отправка сообщения
vw_wait_tx(); // Ожидаем окончания отправки сообщения
digitalWrite(led_pin, LOW); // Гасим светодиод в конце передачи
delay(1000); // Пауза 1 секунда
>
Пример 2
Данный скетч будет отправлять раз в секунду сообщение, которое содержит количество миллисекунд, прошедшее с момента начала выполнения текущей программы. Для наглядности, в начале передачи будет загораться светодиод, а после окончания – гаснуть.
const int led_pin = 13; // Пин светодиода
const int transmit_pin = 12; // Пин подключения передатчика
void setup()
<
vw_set_tx_pin(transmit_pin);
vw_setup(2000); // Скорость передачи (Бит в секунду)
pinMode(led_pin, OUTPUT);
>
void loop()
<
digitalWrite(led_pin, HIGH); // Зажигаем светодиод в начале передачи
String millisresult = String(millis()); // Присваиваем переменной значение, равное количеству миллисекунд с момента начала выполнения текущей программы
char msg[14];
millisresult.toCharArray(msg, 14);
vw_send((uint8_t *)msg, strlen(msg)); // Отправка сообщения
vw_wait_tx(); // Ожидаем окончания отправки сообщения
digitalWrite(led_pin, LOW); // Гасим светодиод в конце передачи
delay(1000); // Пауза 1 секунда
>
Пример кода для работы с приемником MX-RM-5V с использованием библиотеки VirtualWire
byte message[VW_MAX_MESSAGE_LEN]; // Буфер для хранения принимаемых данных
byte messageLength = VW_MAX_MESSAGE_LEN; // Размер сообщения
const int led_pin = 13; // Пин светодиода
const int receiver_pin = 12; // Пин подключения приемника
void setup()
<
Serial.begin(9600); // Скорость передачиданных
Serial.println(«MX-RM-5V is ready»);
vw_set_rx_pin(receiver_pin); // Пин подключения приемника
vw_setup(2000); // Скорость передачи данных (бит в секунду)
vw_rx_start(); // Активация применика
>
void loop()
<
if (vw_get_message(message, &messageLength)) // Если есть данные..
<
digitalWrite(led_pin, HIGH); // Зажигаем светодиод в начале приема пакета
for (int i = 0; i
Для “Пример 2” кода передатчика
Не забудьте припаять антенны, а то без них дальность передачи будет всего несколько сантиметров.
Частота 433.920 МГц выделена для работы маломощных цифровых передатчиков таких как: радиобрелки автосигнализаций, брелки управления шлагбаумами на стоянках и другие подобные системы.
Источник
Передача данных от Arduino Uno на веб-страницу с помощью WiFi
Беспроводная связь между современными электронными устройствами с каждым годом становится все более актуальной с учетом все большего доминирования концепции интернета вещей (Internet of Things). Протокол HTTP и язык HTML делают возможным передачу данных в любое место на Земле где есть сеть интернет. Ранее на нашем сайте мы уже рассматривали похожие проекты:
В этой же статье мы рассмотрим передачу данных от платы Arduino Uno на веб-страницу (Webpage) с помощью технологии WiFi. Для демонстрации возможностей этого проекта нам будет необходим IP адрес и сервер (локальный или глобальный). В целях упрощения демонстрации мы будем использовать локальный сервер.
Необходимые компоненты
- Плата Arduino Uno (купить на AliExpress).
- Wi-Fi модуль ESP8266 (купить на AliExpress).
- USB кабель.
- Соединительные провода.
- Ноутбук (или персональный компьютер).
- Источник питания.
Внешний вид Wi-Fi модуля ESP8266 показан на следующем рисунке.
Работа схемы
Схема устройства представлена на следующем рисунке.
Основными элементами схемы являются плата Arduino и Wi-Fi модуль ESP8266. Контакты Vcc и GND Wi-Fi модуля ESP8266 непосредственно подключены к контактам 3.3V и GND платы Arduino, а контакт CH_PD Wi-Fi модуля также подключен к 3.3V. Контакты Tx и Rx модуля ESP8266 подключены к контактам 2 и 3 платы Arduino. Software Serial Library (библиотека последовательной связи) используется для осуществления последовательной связи на контактах 2 и 3 платы Arduino (вместо контактов 0 и 1, которые используются для последовательной связи в плате Arduino по умолчанию). В статье про передачу Email с использованием Arduino мы достаточно подробно останавливались на подключении WiFi модуля ESP8266 к плате Arduino, поэтому здесь эти вопросы рассматривать не будем.
Примечание: чтобы видеть ответы модуля ESP8266 на поступающие команды откройте монитор последовательного порта (Serial Monitor) в программной среде Arduino IDE.
В программе первым делом нам необходимо будет соединить наш Wi-Fi модуль с Wi-Fi роутером чтобы подключить Wi-Fi модуль к сети интернет. Затем мы должны сконфигурировать локальный сервер, передать данные на веб-страницу и закрыть соединение. Для этого нам необходимо выполнить следующую последовательность действий:
1. Сначала нам необходимо произвести тест Wi-Fi модуля при помощи передачи ему AT команды, он должен ответить OK.
2. После этого мы должны выбрать необходимый режим работы с помощью команды AT+CWMODE=mode_id , мы будем использовать Mode Полный же список доступных режимов выглядит следующим образом:
1 = Station mode (client) (режим станции, клиента)
2 = AP mode (host) (режим базовой станции, хоста)
3 = AP + Station mode (Yes, ESP8266 has a dual mode!) (режим станции + хоста – модуль ESP8266 поддерживает этот двойной режим).
3. Затем мы должны отсоединить наш Wi-Fi модуль от прежней Wi-Fi сети с помощью команды AT+CWQAP поскольку модуль ESP8266 по умолчанию автоматически соединяется с предыдущей использованной сетью Wi-Fi.
4. После этого можно сбросить модуль командой AT+RST – это необязательный шаг.
5. После этого мы должны соединить модуль ESP8266 с Wi-Fi роутером с помощью команды:
AT+CWJAP=”wifi_username”,”wifi_password” .
6. После этого мы должны получить IP адрес с помощью команды AT+CIFSR , которая вернет нам IP адрес.
7. После этого нам необходимо задействовать режим мультиплексирования с помощью команды AT+CIPMUX=1 (1 для соединения с мультиплексированием и 0 для одиночного соединения).
8. Теперь сконфигурируем ESP8266 как сервер с помощью команды AT+CIPSERVER=1,port_no (port может быть 80). Теперь наш Wi-Fi готов. В представленной команде ‘1’ используется для создания сервера и ‘0’ для удаления сервера.
9. Теперь с помощью соответствующих команд можно передавать данные на созданный локальный сервер:
AT+CIPSEND =id, length of data
Id = ID no. of transmit connection (номер соединения)
Length = Max length of data is 2 kb (максимальная длина данный 2 Кбайта).
10. После передачи ID (номера, идентификатора) и Length (длины данных) на сервер мы можем передавать данные, к примеру: Serial.println(“circuitdigest@gmail.com”);
11. После передачи данных нам необходимо закрыть соединение с помощью команды:
AT+CIPCLOSE=0
После этого данные будет переданы на локальный сервер.
12. Теперь вы можете набрать IP адрес в строке адреса вашего браузера и нажать Enter. После этого вы увидите переданные данные на веб-странице.
Все описанные шаги можно более наглядно посмотреть в видео в конце статьи.
Исходный код программы
1. В программе нам сначала необходимо подключить SoftwareSerial Library чтобы задействовать последовательную связь на контактах PIN 2 и 3 и объявить некоторые переменные и строки.
#include
SoftwareSerial client(2,3); //RX, TX
String webpage=»»;
int i=0,k=0;
String readString;
int x=0;
boolean No_IP=false;
String IP=»»;
char temp1=’0′;
2. После этого мы должны определить ряд функций, необходимых для решения наших задач.
В функции Setup() мы инициализируем встроенный последовательный приемопередатчик для подключения модуля ESP8266 с помощью команды client.begin(9600) – для бодовой скорости 9600 бод/с.
void setup()
<
Serial.begin(9600);
client.begin(9600);
wifi_init();
Serial.println(«System Ready..»);
>
3. В функции wifi_init() мы инициализируем wifi модуль при помощи передачи ему ряда команд, например, reset, set mode, connect to router, configure connection и т.д. Эти команды были объяснены в предыдущей части статьи.
void wifi_init()
<
connect_wifi(«AT»,100);
connect_wifi(«AT+CWMODE=3»,100);
connect_wifi(«AT+CWQAP»,100);
connect_wifi(«AT+RST»,5000);
. .
. .
- В функции connect_wifi() мы передаем команды и данные модулю ESP8266 и получаем (считываем) на них ответы.
void connect_wifi(String cmd, int t)
<
int temp=0,i=0;
while(1)
<
Serial.println(cmd);
. .
. .
5. Функция sendwebdata( ) используется для передачи данных на локальный сервер или веб-страницу.
void sendwebdata(String webPage)
<
int ii=0;
while(1)
<
unsigned int l=webPage.length();
Serial.print(«AT+CIPSEND=0,»);
client.print(«AT+CIPSEND=0,»);
. .
. .
6. Функция void send() используется для передачи строк в функцию sendwebdata(), которые затем передаются на веб-страницу.
Welcome to Circuit Digest
7. Функция get_ip() используется для получения IP адреса от созданного локального сервера.
8. В функции void loop() мы передаем инструкции пользователю обновить страницу и проверить соединен ли сервер или нет. Когда пользователь обновляет или запрашивает веб-страницу, данные автоматически передаются на тот же самый IP адрес.
void loop()
<
k=0;
Serial.println(«Please Refresh your Page»);
while(k
. .
. .
Аналогичным образом мы можем передавать на веб-страницу, получаемые платой Arduino от различных датчиков: влажность и температура в комнате, GPS время, GPS координаты, частоту сердечных сокращений и т.д.
Источник