This commit is contained in:
Alex
2021-06-14 18:36:58 +03:00
parent ef9eca0f9f
commit cb09165d3e
15 changed files with 560 additions and 301 deletions
+52 -15
View File
@@ -2,9 +2,12 @@
![author](https://img.shields.io/badge/author-AlexGyver-informational.svg)
# Gyver433
Библиотека для радиомодулей 433 МГц и Arduino
- Не использует прерывания и таймеры (кроме нулевого, читает micros())
- Встроенный CRC контроль целостности
- Супер лёгкая либа, заведётся даже на тини13 (отправка)
- Поддержка кривых китайских модулей
- Интерфейс Manchester Coding (v1.1)
- Встроенный CRC контроль целостности (CRC8 или XOR)
- Ускоренный алгоритм IO для AVR Arduino
- Опционально работа в прерывании (приём данных)
### Совместимость
Совместима со всеми Arduino платформами (используются Arduino-функции)
@@ -33,22 +36,40 @@
<a id="init"></a>
## Инициализация
```cpp
// указать пин
Gyver433_RX rx(2);
Gyver433_TX tx(2);
//Классы:
Gyver433_RX // приёмник
Gyver433_TX // передатчик
Gyver433_xx<пин, буфер, CRC> xx;
// пин: цифровой пин
// буфер: размер буфера в байтах. На "ручную" отправку буфер не нужен (пример raw_tx). По умолч. 64 байта
// CRC: проверка целостности данных: G433_CRC8 (надёжный), G433_XOR (лёгкий), G433_NOCRC (отключено). По умолч. G433_CRC8
// Дефайны-настройки перед подключением библиотеки
#define G433_SLOW_MODE // "медленный режим" для синих модулей SYN480R
#define G433_SPEED 1000 // скорость 100-8000 бит/с, по умолч. 2000 бит/с
```
<a id="usage"></a>
## Использование
```cpp
// ========= Gyver433_TX =========
void sendData(T &data); // отправить данные любого типа
void sendData(T &data); // отправить данные любого типа (CRC добавится автоматически)
void write(uint8_t* buf, uint8_t size); // отправить массив байт указанного размера (CRC не добавляется)
uint8_t buffer[]; // доступ к буферу для отладки
// ========= Gyver433_RX =========
uint8_t tick(); // неблокирующий приём, вернёт кол-во успешно принятых байт
uint8_t tickWait(); // блокирующий приём, вернёт кол-во успешно принятых байт
bool readData(T &data); // прочитает буфер в любой тип данных (в указанную переменную)
int getSize(); // получить размер принятых данных
bool gotData(); // вернёт true при получении корректных данных (если tick опрашивается в другом месте)
uint8_t buffer[]; // доступ к буферу для отладки
// ============= 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
```
<a id="example"></a>
@@ -56,26 +77,41 @@ int getSize(); // получить размер принятых д
Остальные примеры смотри в **examples**!
### Отправка
```cpp
// мелкий передатчик 3.6V SYN115
#define G433_BUFSIZE 50 // размер буфера
#define G433_SPEED 2000 // скорость бит/сек (минимальная)
// ======== ПЕРЕДАТЧИК =========
#define G433_SLOW_MODE
#include <Gyver433.h>
Gyver433_TX tx(2); // указали пин
Gyver433_TX<2, 20> tx; // указали пин и размер буфера
void setup() {
}
char data[] = "Hello from #xx";
byte count = 0;
char data[] = "Hello from #xx"; // строка для отправки
byte count = 0; // счётчик для отправки
void loop() {
// добавляем счётчик в строку
data[12] = (count / 10) + '0';
data[13] = (count % 10) + '0';
if (++count >= 100) count = 0;
tx.sendData(data);
tx.sendData(data);
delay(100);
}
// ======== ПРИЁМНИК =========
#define G433_SLOW_MODE
#include <Gyver433.h>
Gyver433_RX<2, 20> rx; // указали пин и размер буфера
void setup() {
Serial.begin(9600);
}
void loop() {
if (rx.tickWait()) {
Serial.write(rx.buffer, rx.size);
Serial.println();
}
}
```
### Приём
@@ -107,6 +143,7 @@ void loop() {
<a id="versions"></a>
## Версии
- v1.0
- v1.1 - оптимизация, новый интерфейс, поддержка дешёвых синих модулей, работа в прерывании
<a id="feedback"></a>
## Баги и обратная связь