upd
This commit is contained in:
@@ -2,15 +2,15 @@
|
||||

|
||||
# Gyver433
|
||||
Библиотека для радиомодулей 433 МГц и Arduino
|
||||
- Супер лёгкая либа, заведётся даже на тини13 (отправка)
|
||||
- Поддержка кривых китайских модулей
|
||||
- Интерфейс Manchester или Pulselength
|
||||
- Встроенный CRC контроль целостности (CRC8 или XOR)
|
||||
- Встроенный CRC контроль целостности
|
||||
- Ускоренный алгоритм IO для AVR Arduino
|
||||
- Опционально работа в прерывании (приём данных)
|
||||
- Асинхронный приём в прерывании
|
||||
- Супер лёгкая либа, заведётся даже на тини13
|
||||
|
||||
### Совместимость
|
||||
Совместима со всеми Arduino платформами (используются Arduino-функции)
|
||||
- При подключении прерывания на esp8266 не забудь аттрибут `IRAM_ATTR`
|
||||
|
||||
## Содержание
|
||||
- [Установка](#install)
|
||||
@@ -36,27 +36,18 @@
|
||||
<a id="init"></a>
|
||||
## Инициализация
|
||||
```cpp
|
||||
// === КЛАССЫ ===
|
||||
// Gyver433_RX - приёмник
|
||||
// Gyver433_TX - передатчик
|
||||
// === ПЕРЕДАТЧИК ===
|
||||
Gyver433_TX<пин> tx;
|
||||
Gyver433_TX<пин, CRC> tx;
|
||||
|
||||
// === ПРИЁМНИК ===
|
||||
Gyver433_RX<пин> rx;
|
||||
Gyver433_RX<пин, буфер> rx;
|
||||
Gyver433_RX<пин, буфер, CRC> rx;
|
||||
|
||||
// === ИНИЦИАЛИЗАЦИЯ ===
|
||||
Gyver433_xx<пин> xx;
|
||||
Gyver433_xx<пин, буфер> xx;
|
||||
Gyver433_xx<пин, буфер, CRC> xx;
|
||||
// пин: цифровой пин
|
||||
// буфер: размер буфера в байтах. На "ручную" отправку буфер не нужен. По умолч. 64
|
||||
// буфер: размер буфера в байтах, по умолч. 64
|
||||
// CRC: проверка целостности данных: G433_CRC8 (надёжный), G433_XOR (лёгкий), G433_NOCRC (отключено). По умолч. G433_CRC8
|
||||
|
||||
|
||||
// === ДЕФАЙНЫ-НАСТРОЙКИ ===
|
||||
// вызывать перед подключением библиотеки
|
||||
#define G433_FAST // [TX] короткая синхронизация для зелёных модулей
|
||||
#define G433_MEDIUM // [TX] средняя синхронизация при отправке на SYN480R ЧАЩЕ 400мс (активно по умолчанию)
|
||||
#define G433_SLOW // [TX] длинная синхронизация при отправке на SYN480R РЕЖЕ 400мс
|
||||
#define G433_MANCHESTER // [должно быть одинаково на RX и TX] интерфейс Manchester Coding для экспериментов =)
|
||||
#define G433_SPEED 1000 // [должно быть одинаково на RX и TX] скорость 100-8000 бит/с, по умолч. 2000 бит/с
|
||||
#define G433_RSSI_COUNT 10 // [RX] количество успешно принятых пакетов для расчёта RSSI (по умолч. 10)
|
||||
```
|
||||
|
||||
<a id="usage"></a>
|
||||
@@ -65,22 +56,35 @@ Gyver433_xx<пин, буфер, CRC> xx;
|
||||
// ========= Gyver433_TX =========
|
||||
void sendData(T &data); // отправить данные любого типа (CRC добавляется автоматически)
|
||||
void write(uint8_t* buf, uint8_t size); // отправить массив байт указанного размера (CRC не добавляется)
|
||||
uint8_t buffer[]; // доступ к буферу для отладки
|
||||
uint8_t buffer[]; // доступ к буферу приёма
|
||||
uint8_t byteBuf; // доступ к буферу принятого байта
|
||||
|
||||
// ========= Gyver433_RX =========
|
||||
uint16_t tick(); // неблокирующий приём, вернёт кол-во успешно принятых байт
|
||||
uint16_t tickWait(); // блокирующий приём (более надёжный), вернёт кол-во успешно принятых байт
|
||||
uint16_t tickISR(); // тикер для прерывания по CHANGE (см. пример isr_rx)
|
||||
void tickISR(); // тикер приёма для вызова в прерывании по CHANGE
|
||||
uint8_t tickISRraw(); // ручной приём в прерывании по CHANGE. Вернёт 1 (начало приёма), 2 (принят байт), 3 (конец пакета)
|
||||
uint16_t tick(); // неблокирующий приём. Вернёт количество успешно принятых байт
|
||||
uint16_t tickWait(); // блокирующий приём. Вернёт количество успешно принятых байт
|
||||
bool readData(T &data); // прочитает буфер в любой тип данных (в указанную переменную)
|
||||
uint16_t getSize(); // получить размер принятых данных
|
||||
uint16_t gotData(); // вернёт количество успешно принятых в tickISR() байт (см. пример isr_rx)
|
||||
uint8_t buffer[]; // доступ к буферу для отладки
|
||||
uint8_t getRSSI(); // получить качество приёма (процент успешных передач)
|
||||
uint8_t getRSSI(); // получить качество приёма (процент успешных передач 0.. 100)
|
||||
|
||||
uint8_t buffer[]; // доступ к буферу приёма
|
||||
uint8_t byteBuf; // доступ к буферу принятого байта
|
||||
|
||||
// ============= CRC =============
|
||||
// можно использовать встроенные функции для генерации байта CRC для ручной упаковки пакетов
|
||||
uint8_t G433_crc8(uint8_t *buffer, uint8_t size); // ручной CRC8
|
||||
uint8_t G433_crc_xor(uint8_t *buffer, uint8_t size); // ручной CRC XOR
|
||||
|
||||
// ====== ДЕФАЙНЫ-НАСТРОЙКИ ======
|
||||
// вызывать перед подключением библиотеки
|
||||
#define G433_FAST // [TX] короткая синхронизация для зелёных модулей
|
||||
#define G433_MEDIUM // [TX] средняя синхронизация при отправке на SYN480R ЧАЩЕ 400мс (активно по умолчанию)
|
||||
#define G433_SLOW // [TX] длинная синхронизация при отправке на SYN480R РЕЖЕ 400мс
|
||||
#define G433_SPEED 1000 // [одинаково на RX и TX] скорость 100-10000 бит/с, по умолч. 2000 бит/с
|
||||
#define G433_RSSI_COUNT 10 // [RX] количество успешно принятых пакетов для расчёта RSSI (по умолч. 10)
|
||||
#define G433_CUT_RSSI // [RX] убрать расчёт RSSI из кода (сэкономить места)
|
||||
```
|
||||
|
||||
<a id="example"></a>
|
||||
@@ -90,7 +94,7 @@ uint8_t G433_crc_xor(uint8_t *buffer, uint8_t size); // ручной CRC XOR
|
||||
### Отправка
|
||||
```cpp
|
||||
#include <Gyver433.h>
|
||||
Gyver433_TX<2, 20> tx; // указали пин и размер буфера
|
||||
Gyver433_TX<2> tx; // указали пин
|
||||
|
||||
void setup() {
|
||||
}
|
||||
@@ -108,23 +112,6 @@ void loop() {
|
||||
}
|
||||
```
|
||||
|
||||
### Приём
|
||||
```cpp
|
||||
#include <Gyver433.h>
|
||||
Gyver433_RX<2, 20> rx; // указали пин и размер буфера
|
||||
|
||||
void setup() {
|
||||
Serial.begin(9600);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
if (rx.tickWait()) { // если успешно принято больше 0
|
||||
Serial.write(rx.buffer, rx.size); // выводим
|
||||
Serial.println();
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Приём в прерывании
|
||||
```cpp
|
||||
#include <Gyver433.h>
|
||||
@@ -135,8 +122,9 @@ void setup() {
|
||||
attachInterrupt(0, isr, CHANGE); // прерывание пина радио по CHANGE
|
||||
}
|
||||
|
||||
// спец. тикер вызывается в прерывании
|
||||
void isr() {
|
||||
rx.tickISR(); // спец. тикер вызывается в прерывании
|
||||
rx.tickISR();
|
||||
}
|
||||
|
||||
void loop() {
|
||||
@@ -144,10 +132,21 @@ void loop() {
|
||||
Serial.write(rx.buffer, rx.size); // выводим
|
||||
Serial.println();
|
||||
}
|
||||
delay(200); // имитация загруженного кода
|
||||
delay(50); // имитация загруженного кода
|
||||
}
|
||||
```
|
||||
|
||||
## Заметка по модулям:
|
||||
Передатчики:
|
||||
- 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>
|
||||
## Версии
|
||||
- v1.0
|
||||
@@ -156,6 +155,7 @@ void loop() {
|
||||
- v1.3 - добавлен вывод RSSI
|
||||
- v1.4 - переделан FastIO
|
||||
- v1.4.1 - убран FastIO, CRC вынесен отдельно
|
||||
- v2.0 - убран буфер на отправку, убран манчестер, полностью переделан и оптимизирован интерфейс связи
|
||||
|
||||
<a id="feedback"></a>
|
||||
## Баги и обратная связь
|
||||
|
||||
Reference in New Issue
Block a user