6 Commits

Author SHA1 Message Date
Alex 03525ebe93 Merge branch 'main' of https://github.com/GyverLibs/Gyver433 2022-01-06 00:50:23 +03:00
Alex 9d18b80bb6 upd 2022-01-06 00:50:15 +03:00
Alex 415de7a97a Update README.md 2021-12-16 01:45:57 +03:00
Alex 970e454920 Update README.md 2021-12-15 15:40:41 +03:00
Alex b416ae981a Update README.md 2021-12-11 14:34:17 +03:00
Alex e66a74de62 upd 2021-12-11 14:33:29 +03:00
8 changed files with 47 additions and 18 deletions
+42 -14
View File
@@ -14,6 +14,8 @@
## Содержание ## Содержание
- [Установка](#install) - [Установка](#install)
- [Интерфейс](#interface)
- [Подключение](#wiring)
- [Инициализация](#init) - [Инициализация](#init)
- [Использование](#usage) - [Использование](#usage)
- [Пример](#example) - [Пример](#example)
@@ -33,6 +35,31 @@
- (Arduino IDE) автоматическая установка из .zip: *Скетч/Подключить библиотеку/Добавить .ZIP библиотеку…* и указать скачанный архив - (Arduino IDE) автоматическая установка из .zip: *Скетч/Подключить библиотеку/Добавить .ZIP библиотеку…* и указать скачанный архив
- Читай более подробную инструкцию по установке библиотек [здесь](https://alexgyver.ru/arduino-first/#%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B1%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA) - Читай более подробную инструкцию по установке библиотек [здесь](https://alexgyver.ru/arduino-first/#%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B1%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA)
<a id="interface"></a>
## Интерфейс
- Перед отправкой данных идёт синхронизирующий импульс, *TRAIN* мс
- Далее старт импульс, *START* мс, LOW
- Данные кодируются длиной импульса
- Завершает отправку стоп импульс, *TRAIN* мс
![scheme](/doc/interface.png)
![scheme](/doc/timing.png)
<a id="wiring"></a>
## Подключение
![scheme](/doc/radio433.png)
Передатчики:
- SYN115, маленький чип: 1.8-3.6V, макс. скорость 8000
- FS1000A: 3-12V, макс. скорость 10000
- WL102-341: 2.0-3.6V, макс. скорость 6000
Приёмники:
- SYN480R, крупный чип: 3.3-5.5V
- MX-RM-5V (RF-5V): 5V
- RX470 (WL101-341): 3-5V
![scheme](/doc/scheme.jpg)
![scheme](/doc/radio.png)
<a id="init"></a> <a id="init"></a>
## Инициализация ## Инициализация
```cpp ```cpp
@@ -56,14 +83,16 @@ Gyver433_RX<пин, буфер, CRC> rx;
// ========= Gyver433_TX ========= // ========= Gyver433_TX =========
void sendData(T &data); // отправить данные любого типа (CRC добавляется автоматически) void sendData(T &data); // отправить данные любого типа (CRC добавляется автоматически)
void write(uint8_t* buf, uint8_t size); // отправить массив байт указанного размера (CRC не добавляется) void write(uint8_t* buf, uint8_t size); // отправить массив байт указанного размера (CRC не добавляется)
uint8_t buffer[]; // доступ к буферу приёма
uint8_t byteBuf; // доступ к буферу принятого байта
// ========= Gyver433_RX ========= // ========= Gyver433_RX =========
// приём в прерывании
void tickISR(); // тикер приёма для вызова в прерывании по CHANGE void tickISR(); // тикер приёма для вызова в прерывании по CHANGE
uint8_t tickISRraw(); // ручной приём в прерывании по CHANGE. Вернёт 1 (начало приёма), 2 (принят байт), 3 (конец пакета) uint8_t tickISRraw(); // ручной приём в прерывании по CHANGE. Вернёт 1 (начало приёма), 2 (принят байт), 3 (конец пакета)
// приём в loop
uint16_t tick(); // неблокирующий приём. Вернёт количество успешно принятых байт uint16_t tick(); // неблокирующий приём. Вернёт количество успешно принятых байт
uint16_t tickWait(); // блокирующий приём. Вернёт количество успешно принятых байт uint16_t tickWait(); // блокирующий приём. Вернёт количество успешно принятых байт
bool readData(T &data); // прочитает буфер в любой тип данных (в указанную переменную) bool readData(T &data); // прочитает буфер в любой тип данных (в указанную переменную)
uint16_t getSize(); // получить размер принятых данных uint16_t getSize(); // получить размер принятых данных
uint16_t gotData(); // вернёт количество успешно принятых в tickISR() байт (см. пример isr_rx) uint16_t gotData(); // вернёт количество успешно принятых в tickISR() байт (см. пример isr_rx)
@@ -87,10 +116,19 @@ uint8_t G433_crc_xor(uint8_t *buffer, uint8_t size); // ручной CRC XOR
#define G433_CUT_RSSI // [RX] убрать расчёт RSSI из кода (сэкономит чуть памяти) #define G433_CUT_RSSI // [RX] убрать расчёт RSSI из кода (сэкономит чуть памяти)
``` ```
### Работа приёмника без прерываний
Для приёма данных достаточно вызывать в основном цикле метод `tick()`, он сам опрашивает пин радио.
- Если в программе есть блокирующие места и loop() выполняется с задержками - будет потеря данных
- Для более надёжного приёма рекомендуется вызывать `tickWait()`, она блокирует выполнение кода на время приёма.
### Работа приёмника с прерываниями
Рекомендуется использовать приём в прерывании по CHANGE, для этого нужно вызывать в нём `tickISR()`.
Тогда приём будет асинхронный и будет работать даже в загруженной программе.
- Если стандартных пинов прерываний не хватает, можно задействовать PCINT. Вручную или с помощью библиотеки https://github.com/NicoHood/PinChangeInterrupt
<a id="example"></a> <a id="example"></a>
## Примеры ## Примеры
Остальные примеры смотри в **examples**! Остальные примеры смотри в **examples**!
![scheme](/doc/scheme.jpg)
### Отправка ### Отправка
```cpp ```cpp
#include <Gyver433.h> #include <Gyver433.h>
@@ -136,17 +174,6 @@ void loop() {
} }
``` ```
## Заметка по модулям:
Передатчики:
- SYN115, маленький чип: 1.8-3.6V, макс. скорость 8000
- FS1000A: 3-12V, макс. скорость 10000
- WL102-341: 2.0-3.6V, макс. скорость 6000
Приёмники:
- SYN480R, крупный чип: 3.3-5.5V
- MX-RM-5V (RF-5V): 5V
- RX470 (WL101-341): 3-5V
<a id="versions"></a> <a id="versions"></a>
## Версии ## Версии
- v1.0 - v1.0
@@ -156,6 +183,7 @@ void loop() {
- v1.4 - переделан FastIO - v1.4 - переделан FastIO
- v1.4.1 - убран FastIO, CRC вынесен отдельно - v1.4.1 - убран FastIO, CRC вынесен отдельно
- v2.0 - убран буфер на отправку, убран манчестер, полностью переделан и оптимизирован интерфейс связи - v2.0 - убран буфер на отправку, убран манчестер, полностью переделан и оптимизирован интерфейс связи
- v2.0.1 - fix compiler warnings
<a id="feedback"></a> <a id="feedback"></a>
## Баги и обратная связь ## Баги и обратная связь
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 183 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 222 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 333 KiB

After

Width:  |  Height:  |  Size: 172 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

+1 -1
View File
@@ -1,5 +1,5 @@
name=Gyver433 name=Gyver433
version=2.0 version=2.0.1
author=AlexGyver <alex@alexgyver.ru> author=AlexGyver <alex@alexgyver.ru>
maintainer=AlexGyver <alex@alexgyver.ru> maintainer=AlexGyver <alex@alexgyver.ru>
sentence=Simple library for 433 MHz radio sentence=Simple library for 433 MHz radio
+3 -2
View File
@@ -21,6 +21,7 @@
v1.4 - переделан FastIO v1.4 - переделан FastIO
v1.4.1 - убран FastIO, CRC вынесен отдельно v1.4.1 - убран FastIO, CRC вынесен отдельно
v2.0 - убран буфер на отправку, убран манчестер, полностью переделан и оптимизирован интерфейс связи v2.0 - убран буфер на отправку, убран манчестер, полностью переделан и оптимизирован интерфейс связи
v2.0.1 - fix compiler warnings
*/ */
#ifndef _Gyver433_h #ifndef _Gyver433_h
@@ -53,7 +54,7 @@
#define G433_EDGE_S (G433_START + G433_WINDOW) #define G433_EDGE_S (G433_START + G433_WINDOW)
// жоский delay для avr // жоский delay для avr
#ifdef AVR #ifdef _delay_us
#define G433_DELAY(x) _delay_us(x) #define G433_DELAY(x) _delay_us(x)
#else #else
#define G433_DELAY(x) delayMicroseconds(x) #define G433_DELAY(x) delayMicroseconds(x)
@@ -85,7 +86,7 @@ public:
// отправка, блокирующая. Кушает любой тип данных // отправка, блокирующая. Кушает любой тип данных
template <typename T> template <typename T>
bool sendData(T &data) { void sendData(T &data) {
uint8_t *ptr = (uint8_t*) &data; uint8_t *ptr = (uint8_t*) &data;
write(ptr, sizeof(T)); write(ptr, sizeof(T));
} }