Arduino

Introduction

This Arduino code allows you to create a cheap 433MHz wireless transceiver to control electric switches and other home appliances. It can use USB or WiFi to connect to a computer to receive and send commands. It is mainly used for the homebridge-433-arduino plugin but can of course be used otherwise as well.

The project uses the PlatformIO IDE and runs on Arduino as well as ESP hardware. To decode signals the rc-switch or ESPiLight libraries can be used. Simple 433MHz receiver/sender hardware or more advanced CC1101 based transceiver modules are supported to send and receive 433MHz switch signals.

This is not meant to be an advanced firmware but a hobby software that is simple to use, build and understand.

Увеличение дальности радиочастотных модулей 433 МГц

Антенна, которую вы используете как для передатчика, так и для приемника, может реально повлиять на дальность передачи, которую вы сможете получить с помощью этих радиочастотных модулей. На самом деле без антенны вы сможете общаться на расстоянии не более метра.

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

Антенна не должна быть сложной. Простой кусок одножильного провода может послужить отличной антеной для передатчика и приемника. Диаметр антенны вряд ли имеет какое-либо значение, если длина антенны правильная.

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

Длина волны частоты рассчитывается как:

Длина волны = скорость распространения (v) / частота (f)

В воздухе скорость передачи равна скорости света, которая, если быть точным, составляет 299 792 458 м/с. Итак, для частоты 433 МГц длина волны равна:

Длина волны = 299 792 458 м/с / 433 000 000 Гц = 0,6924 м

Полноволновая антенна длиной 69,24 см довольно длинная, ее использование не очень удобно. Вот почему мы выберем четвертьволновую антенну, длина которой составляет 17,3 см.

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

Электрический паяльник с регулировкой температуры
Мощность: 60/80 Вт, температура: 200’C-450’C, высококачествен…

Подробнее

Скетч Arduino для радиочастотного передатчика 433 МГц

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

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

// Подключаем библиотеку RadioHead Amplitude Shift Keying
#include <RH_ASK.h>
// Подключаем библиотеку SPI Library 
#include <SPI.h> 
 
// Создаем объект управления смещением амплитуды
RH_ASK rf_driver;
 
void setup()
{
    // Инициализируем объект ASK
    rf_driver.init();
}
 
void loop()
{
    const char *msg = "Hello World";
    rf_driver.send((uint8_t *)msg, strlen(msg));
    rf_driver.waitPacketSent();
    delay(1000);
}

Это довольно короткий набросок, но это все, что вам нужно для передачи сигнала.

Код  начинается с подключением библиотеки RadioHead ASK. Мы также должны подключить библиотеку SPI Arduino,  так как от нее зависит библиотека RadioHead.

#include <RH_ASK.h>
#include <SPI.h>

Далее нам нужно создать объект ASK, чтобы получить доступ к специальным функциям, связанным с библиотекой RadioHead ASK.

// Создаем объект управления смещением амплитуды
RH_ASK rf_driver;

В функции setup() нам нужно инициализировать объект ASK.

// Инициализируем объект ASK
    rf_driver.init();

В функции loop() мы начинаем с подготовку сообщения. Это простая текстовая строка, которая хранится в char с именем msg. Знайте, что ваше сообщение может быть любым, но не должно превышать 27 символов для лучшей производительности. И обязательно посчитайте количество символов в нем, так как вам понадобится это количество в коде получателя. В нашем случае у нас 11 символов.

// Готовим сообщение
const char *msg = "Hello World";

Затем сообщение передается с использованием функции send(). Он имеет два параметра: первый — это массив данных, а второй — количество байтов (длина данных), подлежащих отправке. За  send() функцией обычно следует  waitPacketSent() функция, которая ожидает завершения передачи любого предыдущего передаваемого пакета. После этого код ждет секунду, чтобы дать нашему приемнику время разобраться во всем.

rf_driver.send((uint8_t *)msg, strlen(msg));
rf_driver.waitPacketSent();
delay(1000);

RadioHead Library — универсальная библиотека для беспроводных модулей

Прежде чем мы начнем программировать, установим библиотеку RadioHead в Arduino IDE.

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

Библиотека RadioHead собирает наши данные, инкапсулирует их в пакет данных, который включает в себя CRC (проверку циклически избыточного кода), а затем отправляет его с необходимой преамбулой и заголовком на другую Arduino. Если данные получены правильно, принимающая плата Arduino проинформирует о наличии доступных данных и приступит к их декодированию и выполнению.

Пакет RadioHead формируется следующим образом: 36-битный поток из пар «1» и «0», называемый «обучающей преамбулой», отправляется в начале каждой передачи. Эти биты необходимы приемнику для регулировки его усиления до получения фактических данных. Затем следует 12-битный «Начальный символ», а затем фактические данные (полезная нагрузка).

Последовательность проверки или CRC добавляется в конец пакета, который пересчитывается RadioHead на стороне приемника, и если проверка CRC верна, приемное устройство получает предупреждение. Если проверка CRC не пройдена, пакет отбрасывается.

Весь пакет выглядит примерно так:

Схема подключения передатчика и приемника 433 МГц к Arduino UNO

Теперь, когда мы знаем все о модулях, пришло время использовать их!

Поскольку мы будем передавать данные между двумя платами Arduino, нам, конечно, понадобятся две платы Arduino, две макетные платы и пара соединительных проводов.

Схема для передатчика довольно проста. У него всего три соединения. Подключите контакт VCC к контакту 5 В и минус к Arduino. Контакт Data-In должен быть подключен к цифровому контакту Arduino № 12. Вы должны использовать  контакт 12, так как по умолчанию библиотека, которую мы будем использовать в нашем скетче, использует этот контакт для ввода данных.

На следующем рисунке показана схема соединения.

После подключения передатчика вы можете перейти к приемнику. Подключение приемника так же просто, как и передатчика.

Так же нужно сделать только три соединения. Подключите контакт VCC к контакту 5 В и минус на Arduino. Любой из двух средних выводов Data-Out должен быть подключен к цифровому выводу № 11 на Arduino.

Вот так должна выглядеть схема соединения для приемника.

Теперь, когда передатчик и приемник подключены, нам нужно написать код и отправить его на соответствующие платы Arduino. Поскольку у вас, вероятно, только один компьютер, мы начнем с передатчика. Как только код будет загружен, мы перейдем к приемнику. Arduino, к которому подключен передатчик, может питаться от источника питания или батареи.

Description

Throughout this tutorial we’ll be using the FS1000A transmitter and corresponding receiver, but the instructions provided also work with other 433MHz transmitter/receiver modules that work in a similar fashion. These RF modules are very popular among the Arduino tinkerers and are used on a wide variety of applications that require wireless control.

These modules are very cheap and you can use them with any microcontroller, whether it’s an Arduino, ESP8266, or ESP32.

Specifications RF 433MHz Receiver

  • Frequency Range: 433.92 MHz
  • Modulation: ASK
  • Input Voltage: 5V
  • Price: $1 to $2

Specifications RF 433MHz Transmitter

  • Frequency Range: 433.92MHz
  • Input Voltage: 3-12V
  • Price: $1 to $2

Where to buy?

You can purchase these modules for just a few dollars. Click here to compare the RF 433MHz transmitter/receiver on several stores and find the best price.

ASK — Amplitude Shift Keying

Как обсуждалось выше, для отправки цифровых данных по радиоканалу, эти модули используют технику, называемую Amplitude Shift Keying или ASK (амплитудная модуляция). Это когда амплитуда (то есть уровень) несущей волны (в нашем случае это сигнал 433 МГц) изменяется в ответ на входящий сигнал данных.

Это очень похоже на аналоговую технику амплитудной модуляции, с которой вы, возможно, знакомы, если вы собирали AM-радио. Иногда это называется двоичной амплитудной манипуляцией, потому что нам необходимо только два уровня. Вы можете представить это как переключатель  ВКЛ / ВЫКЛ.

  • Для лог. 1 — несущая в полную силу
  • Для лог. 0 — несущая отключена

Амплитудная модуляция имеет преимущество в том, что она очень проста в реализации. На ее основе довольно просто спроектировать схему декодера. Также для ASK требуется меньшая полоса пропускания, чем другим методам модуляции, таким как FSK (частотная модуляция). Это одна из причин того дешевизны модулей.

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

Что такое LoRa

Технология модуляции LoRa (Long Range) представляет собой метод модуляции, который обеспечивает значительно бóльшую дальность связи (зону покрытия), чем другие конкурирующие с ним способы и при этом отличается низким потреблением энергии. Метод основывается на технологии модуляции с расширенным спектром и вариации линейной частотной модуляции (Chirp Spread Spectrum, CSS) с интегрированной прямой коррекцией ошибок (Forward Error Correction, FEC). Технология LoRa значительно повышает чувствительность приемника и, аналогично другим методам модуляции с расширенным спектром, использует всю ширину полосы пропускания канала для передачи сигнала, что делает его устойчивым к канальным шумам и нечувствительным к смещениям, вызванным неточностями в настройке частот при использовании недорогих опорных кварцевых резонаторов. Технология LoRa позволяет осуществлять демодуляцию сигналов с уровнями на 19,5 дБ ниже уровня шумов, притом что для правильной демодуляции большинству систем с частотной манипуляцией (Frequency Shift Keying, FSK) нужна мощность сигнала как минимум на 8-10 дБ выше уровня шума. Модуляция LoRa определяет тот физический уровень (Physical Layer, PHY, иногда его называют слой), который может быть использован с различными протоколами и в различных вариантах сетевой архитектуры, таких как сетка (Mesh), звезда (Star), точка-к-точке (point-to-point) и т. п.

Все эти перечисленные факторы делают технологию LoRa отличным решением для проектов в сфере интернета вещей (IoT — Internet of Things). В этой статье мы рассмотрим использование данной технологии вместе с платами Arduino, позволяя им взаимодействовать между собой на больших расстояниях.

Introduction

This plugin allows you to use cheap 433MHz wireless switches as lamps, fans or generic switches in HomeKit and control them using Siri. You can also use your 433Mhz remote to control things in HomeKit, like for example start scenes.

Improvements over other similar plugins

  • Bidirectional, can send and receive switch signals
  • Virtually no CPU load on the server (RasPi) even when receiving
  • Sending signals works properly and sequentially, no broken signals when many devices are controlled
  • Rock-solid RF signal quality and timing through external micro controller
  • Transceiver can use WiFi so it doesn’t need a physical connection to the homebridge server
  • Supports homebridge-config-ui-x to set up switches via web interface

Why use an external microcontroller?

There is plugins out there that use the Raspberry Pi GPIO functions to send and receive 433 MHZ data. The problem with these is that especially the receiving part requires quite a lot of CPU power as the RasPi lacks real hardware interrupts on its GPIO ports. Sending works okay most of the time if the RasPi isn’t under much load. The RasPi 1 can struggle to get accurate RF timing with short pulse durations even under low load however.

Additionally, the RasPi works on 3.3V and most simple 433MHz receivers/transmitters work best at 5V. The Arduino micro for example runs on 5V and allows a much more stable connection to the receivers and transmitters.

Supported switches

Most cheap 433 MHz switches should work, the transceiver can use either rc-switch or ESPiLight to encode and decode signals. ESPiLight is recommended as it supports more switch types but as the name suggests it requires ESP hardware.

Исходный код программы (скетча)

Код программы для передающей части

Arduino

#include <SoftwareSerial.h>

SoftwareSerial loraSerial(2, 3); // TX, RX контакты для подключения модуля lora e32

void setup() {
Serial.begin(9600);
loraSerial.begin(9600); // инициализация последовательной связи с модулем lora e32

}

void loop() {
loraSerial.println(«Hello RX»);
Serial.println(«Sending»);
delay(1000);
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

#include <SoftwareSerial.h>
 

SoftwareSerialloraSerial(2,3);// TX, RX контакты для подключения модуля lora e32

voidsetup(){

Serial.begin(9600);

loraSerial.begin(9600);// инициализация последовательной связи с модулем lora e32

 
}
 

voidloop(){

loraSerial.println(«Hello RX»);

Serial.println(«Sending»);

delay(1000);

}

Код программы для приемной части

Arduino

#include <SoftwareSerial.h>
#include <Adafruit_NeoPixel.h> // библиотека для работы со светодиодной лентой

Adafruit_NeoPixel pixels(6, 5, NEO_GRB + NEO_KHZ800); // количество светодиодов и пин-код управления

SoftwareSerial loraSerial(2, 3); // TX, RX контакты для подключения модуля lora e32

void setup() {
Serial.begin(9600);
loraSerial.begin(9600); // инициализация последовательной связи с модулем lora e32
pixels.begin();

}

void loop() {
while (loraSerial.available()) {
Serial.write(loraSerial.read());// считываем данные с модуля lora e32

for (int i = 0; i < 6; i++) { //перебираем все светодиоды ленты
pixels.setPixelColor(i, pixels.Color(0, 255, 0));
pixels.show();
}
}
pixels.clear(); // очищаем светодиоды ленты
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

#include <SoftwareSerial.h>
#include <Adafruit_NeoPixel.h> // библиотека для работы со светодиодной лентой
 

Adafruit_NeoPixelpixels(6,5,NEO_GRB+NEO_KHZ800);// количество светодиодов и пин-код управления

SoftwareSerialloraSerial(2,3);// TX, RX контакты для подключения модуля lora e32

voidsetup(){

Serial.begin(9600);

loraSerial.begin(9600);// инициализация последовательной связи с модулем lora e32

pixels.begin();

 
}
 

voidloop(){

while(loraSerial.available()){

Serial.write(loraSerial.read());// считываем данные с модуля lora e32

for(inti=;i<6;i++){//перебираем все светодиоды ленты

pixels.setPixelColor(i,pixels.Color(,255,));

pixels.show();

}

}

pixels.clear();// очищаем светодиоды ленты

}

The Software

Configuration

To configure the transceiver open and change/uncomment the following parameters.

These values are needed and represent the input (receiver) and output (transmitter) pins. The microcontroller has to support interrupts on the input pin for the receiver, almost any output pin can be used for the transmitter. Note that these are actual pin numbers, not interrupt numbers.

Usual Values:

  • ESP8266
    • Receiver on pin (IRQ4)
    • Sender on pin
  • Arduino Micro
    • Receiver on pin (IRQ 0)
    • Sender on pin
  • Arduino Nano
    • Receiver on pin (IRQ 0)
    • Sender on pin

You can use a more advanced CC1101 based transceiver module instead of simple 433MHz receiver/sender pairs. These modules also have send and receive pins but are additionally connected via SPI for configuration.

Works on Arduino and ESP.

You can use WiFi to connect to the computer instead of USB.

This will create a websocket server to send/receive data in addition to the serial port, default hostname is , port 80. Specify your WiFi credentials in and .

Works on ESP.

You can use ESPilight insted of rc-switch to decode switches.

The send/receive data format will change to JSON, with and content. Additionally pilight debug messages, always beginning with might be generated.

Works on ESP.

Adding support for unsupported switches when using rc-switch

If you have a 433 device that doesn’t work you can try and download a different version of the rcswitch library and run a «discovery application» that suggests how to extend the rcswitch.cpp file to add support for the unknown signal:

Use the branch in that repository, it includes the Arduino discovery application example.

Transceiver transmit protocol

Note: If you’re using homebridge-433-arduino you can skip this section unless you’re interested in the interna of the transceiver communication.

In its default mode the transceiver will use the USB serial port to send rc-switch data (code, pulse, protocol) in a format like when any 433MHz codes are received and decoded. When receiving serial data in the same format the transceiver will send the corresponding 433MHz data and return an message. The serial data is terminated by .

In ESPiLight mode the transceiver will send received signals in a JSON based format like . When sending data the format changes slightly to . See the ESPiLight documentation for more info.

Accordingly, the transceiver will only ever output 4 types of messages:

  • Message -> after receiving a message and sending the corresponding code
  • Message starting with -> JSON data when using ESPiLight
  • Message starting with -> debug data when using ESPiLight
  • Message starting with a number -> code/pulse/protocol message when using rc-switch

Note that when sending RC data the transceiver can not receive any new commands, wait until the message has been sent back before sending any new commands.

Arduino with RF 433MHz Transmitter/Receiver Modules

In this section, we’ll build a simple example that sends a message from an Arduino to another Arduino board using 433 MHz. An Arduino board will be connected to a 433 MHz transmitter and will send the “Hello World!” message. The other Arduino board will be connected to a 433 MHz receiver to receive the messages.

Parts Required

You need the following components for this example:

  • 2x Arduino – read Best Arduino Starter Kits
  • RF 433MHz Receiver/Transmitter 
  • Breadboard
  • Jumper wires

You can use the preceding links or go directly to MakerAdvisor.com/tools to find all the parts for your projects at the best price!

Installing the RadioHead Library

The RadioHead library provides an easy way to work with the 433 MHz transmitter/receiver with the Arduino. Follow the next steps to install that library in the Arduino IDE:

  1. Click here to download the RadioHead library. You should have a .zip folder in your Downloads folder.
  2. Unzip the RadioHead library.
  3. Move the RadioHead library folder to the Arduino IDE installation libraries folder.
  4. Restart your Arduino IDE

The RadioHead library is great and it works with almost all RF modules in the market. You can read more about the RadioHead library here.

Transmitter Circuit

Wire the transmitter module to the Arduino by following the next schematic diagram.

Important: always check the pinout for the transmitter module you’re using. Usually, there are labels next to the pins. Alternatively, you can also take a look at your module’s datasheet.

Transmitter Sketch

Upload the following code to the Arduino board that will act as a transmitter.

How the transmitter sketch works

First, include the RadioHead ASK library.

This library needs the SPI library to work. So, you also need to include the SPI library.

After that, create a RH_ASK object called driver.

In the setup(), initialize the RH_ASK object by using the init() method.

In the loop(), we write and send our message. The message is saved on the msg variable. Please note that the message needs to be of type char.

This message contains the “Hello World!” message, but you can send anything you want as long as it is in char format.

Finally, we send our message as follows:

The message is being sent every second, but you can adjust this delay time.

Receiver Circuit

Wire the receiver module to another Arduino by following the next schematic diagram.

Important: always check the pinout for the transmitter module you’re using. Usually, there are labels next to the pins. Alternatively, you can also take a look at your module’s datasheet.

Receiver Sketch

Upload the code below to the Arduino connected to the receiver.

How the receiver sketch works

Similarly to the previous sketch, you start by including the necessary libraries:

You create a RH_ASK object called driver:

In the setup(), initialize the RH_ASKobject.

In the loop(), we need to set a buffer that matches the size of the message we’ll receive. “Hello World!” has 12 characters. You should adjust the buffer size accordingly to the message you’ll receive (spaces and punctuation also count).

Then, check if you’ve received a valid message. If you receive a valid message, print it in the serial monitor.

Demonstration

In this project the transmitter is sending a message “Hello World!” to the receiver via RF. Those messages are being displayed in receiver’s serial monitor. The following figure shows what you should see in your Arduino IDE serial monitor.

Радио приемник FS1000A/XD-FST 433Mhz

Характеристики FS1000A/XD-FST

Рабочее напряжение: DC 5VРабочий ток: 4 мАРежим модуляции: ООК (AM)Рабочая температура: -10 ° C ~ +70 ° CПолучать чувствительность:-110dBРабочая частота: 433MHzРазмер: 30 х 14 х 7 мм

Приемник работает на основе колебательного контура с усилителем. Подключается с помощью выводов PIN1 VCC, PIN2/3 DATA, PIN5 GND. Выход радио модуля логический по уровню, но сигнал принимает аналоговый. По тому задача декодирования послания лежит на плечах устройства (обычно Arduino) которое принимает сигнал.

Схема подключения радио модулей 433 Mgz к Arduino представлена ниже. Выходы выходы приемника и передатчика подключаются к Digital портам Arduino, которые способны обрабатывать модулированный сигнал.

Для существенного увеличения дальности приема можно к приемо-передающим устройствам подпаять антенну. Самый простой вариант — кусок провода длиной 17 см с сопротивлением 50 Ом. Такая длина будет резанировать на частоте 433 Mgz т.к. ее длина равна 1/4 волны.

Для кодирования.декодирования передаваемого сигнала на Arduino удобно применять библиотеку VirtualWire.hПриведу пару примеров использования библиотеки для передачи цифровых данных.

Передатчик:

#include "VirtualWire.h"

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, Arduinomania"; // Передаваемое сообщение
	digitalWrite(led_pin, HIGH); // Зажигаем светодиод в начале передачи
	vw_send((uint8_t *)msg, strlen(msg)); // Отправка сообщения
	vw_wait_tx(); // Ожидаем окончания отправки сообщения
	digitalWrite(led_pin, LOW); // Гасим светодиод в конце передачи
	delay(1000); // Пауза 1 секунда
}

Приемник:

#include "VirtualWire.h"

byte message; // Буфер для хранения принимаемых данных
byte messageLength = VW_MAX_MESSAGE_LEN; // Размер сообщения

const int led_pin = 13; // Пин светодиода
const int receiver_pin = 11; // Пин подключения приемника

void setup()
{
	Serial.begin(9600); // Скорость передачиданных
	Serial.println("Read 433mHz begin");
	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 < messageLength; i++)
		{
			Serial.write(message); // выводим их в одной строке
		}
		Serial.println();
		digitalWrite(led_pin, LOW); // Гасим светодиод в конце
	}
}

Wrapping Up

You need to have some realistic expectations when using this module. They work very well when the receiver and transmitter are close to each other. If you separate them too far apart you’ll lose the communication. The communication range will vary. It depends on how much voltage you’re supplying to your transmitter module, RF noise in your environment, and if you’re using an external antenna.

If you want to use 433 MHz remote controls to communicate with your Arduino, follow this tutorial: Decode and Send 433 MHz RF Signals with Arduino.

If you are an Arduino beginner, we recommend following our Arduino Mini Course. It will help you quickly getting started with this amazing board (and it is free!).

You may also like the following resources:

  • Arduino Step-by-step Projects course
  • Guide to SD card module with Arduino
  • Guide to DHT11/DHT22 Humidity and Temperature Sensor with Arduino
  • Guide to Ultrasonic Sensor with Arduino

You can find all our Arduino projects and tutorials here.

Share this post with a friend that also likes electronics!

If you like this post probably you might like my next ones, so please support me by subscribing our blog.

Thanks for reading.

January 19, 2019

Модули LoRa 433MHz

Модули LoRa 433MHz работают с другими подключенными устройствами по последовательному порту связи используя для этого контакты TX и RX. В связи с этим их подключение к платам Arduino не вызовет никаких проблем.

Дальность связи в нашем проекте может достигать 3 километров и будет зависеть от используемых антенн, условий окружающей среды и уровня электромагнитных помех в месте развертывания системы.

Эти модули имеют 4 возможных режима работы. Мы в нашем проекте будем использовать самый простой режим — Normal Mode. В этом режиме контакты M0 и M1 модуля должны быть замкнуты на землю (GND). Другие возможные режимы работы модулей LoRa – это режим энергосбережения (Power Saving), спящий режим (Sleep) и режим пробуждения (Wake-up Mode).

Назначение контактов (распиновка) модуля Lora E32 представлено на следующем рисунке (если кому нужно, могу перевести таблицу с этого рисунка).

Примеры кода для работы с передатчиком 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; millisresult.toCharArray(msg, 14);

vw_send((uint8_t *)msg, strlen(msg)); // Отправка сообщения vw_wait_tx(); // Ожидаем окончания отправки сообщения digitalWrite(led_pin, LOW); // Гасим светодиод в конце передачи delay(1000); // Пауза 1 секунда >

Hardware Options

Microcontrollers

  • ESP8266 / D1 Mini Board (3.3V) — recommended with CC1101, needed for WiFi and ESPiLight
  • Arduino Micro (5V) — best for the simple receivers/senders as they work at 5V
  • Arduino Nano (3.3V) — for CC1101 without WiFi or ESPiLight
  • Other Arduinos, ESP32 (see below)

The PlatformIO project is by default set up for the D1 Mini board. Support for Arduino Micro is also prepared, change in platformio.ini to to switch. See the PlatformIO documentation on how to compile for other boards / hardware. Note that you will have to change the input/output pin values in the software for each type of microcontroller (see below).

Simple 433MHz sender / receivers

  • Use 5V power
  • Cheap (0.5-2$)
  • For the sender these modules (e.g FS1000A) seem to work fine for me
  • For the receiver the very cheap modules didn’t receive from very far for me

Superheterodyne 433MHz receiver

  • Uses 5V power
  • These «superheterodyne» (NOT superregeneration) receivers worked much better for me than the simple receivers
  • Still Cheap (2-5$)

CC1101 based 433MHz transceiver

  • Uses 3.3V power
  • Can receive and send in one module
  • Configurable via SPI
  • Often comes with a proper antenna
  • These modules work much better in general but might be more expensive (8-15$)

Simple Modules

For the simple modules and the superheterodyne receiver, connect a 173mm piece of solid wire as antenna to the ANT pin, connect VCC to 5V on the micorcontroller board and connect GND to ground on the microcontroller board. See below for which pin on the microcontroller to use for the receiver/sender DATA pins.

CC1101

For the CC1101 module, see this repository for info and images showing how to connect these transceivers to various microcontrollers. See below for enabling support for the CC1101 module in the transceiver code.

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
Добавить комментарий