Меню

Ардуино беспроводная передача данных от датчиков

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; // Пин подключения передатчика

Читайте также:  Датчик подножки honda steed 400

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 адрес и сервер (локальный или глобальный). В целях упрощения демонстрации мы будем использовать локальный сервер.

Читайте также:  Как проверить датчик скорости уаз буханка 409

Необходимые компоненты

  1. Плата Arduino Uno (купить на AliExpress).
  2. Wi-Fi модуль ESP8266 (купить на AliExpress).
  3. USB кабель.
  4. Соединительные провода.
  5. Ноутбук (или персональный компьютер).
  6. Источник питания.

Внешний вид 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’ для удаления сервера.

Читайте также:  006418 датчик давления в магистрали усилит тормозн привода

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);
. .
. .

  1. В функции 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 координаты, частоту сердечных сокращений и т.д.

Источник

Adblock
detector