Напиши скетч для arduin nano c подключенным модулем lora drf 1278F на SX1278 для передачи текстовых сообщений между пользвателями по радиосигналу lora на частоте 433.
#include <SPI.h>
#include <LoRa.h>
// Пины под вашу распайку
static const int PIN_CS = 10; // NSS/CS
static const int PIN_RST = 9; // RESET
static const int PIN_DIO0 = 2; // DIO0/IRQ
// Частота для SX1278 на 433 МГц
static const long LORA_FREQ = 433E6;
// Простейший "идентификатор" узла (можно оставить 1 и 2 на разных устройствах)
static const uint8_t NODE_ID = 1;
String inputLine;
void setup() {
Serial.begin(9600);
while (!Serial) { /* для совместимости */ }
Serial.println(F("LoRa chat (SX1278 / 433MHz)"));
LoRa.setPins(PIN_CS, PIN_RST, PIN_DIO0);
if (!LoRa.begin(LORA_FREQ)) {
Serial.println(F("LoRa init failed. Check wiring/power."));
while (true) {}
}
// Базовые настройки (можете менять под дальность/скорость)
// SF: 7..12 (выше = дальше, но медленнее)
LoRa.setSpreadingFactor(12);
// BW: 7.8E3..500E3 (уже = чувствительнее, но медленнее)
LoRa.setSignalBandwidth(125E3);
// CR: 5..8 (5 = 4/5 ... 8 = 4/8)
LoRa.setCodingRate4(5);
// TX power: обычно 2..17 dBm (зависит от модуля/пайки/антенны)
LoRa.setTxPower(17);
Serial.println(F("Type a line and press Enter to send."));
Serial.println(F("Listening..."));
}
void loop() {
// 1) Приём
int packetSize = LoRa.parsePacket();
if (packetSize) {
String msg;
while (LoRa.available()) {
msg += (char)LoRa.read();
}
int rssi = LoRa.packetRssi();
float snr = LoRa.packetSnr();
Serial.print(F("[RX] "));
Serial.print(msg);
Serial.print(F(" | RSSI="));
Serial.print(rssi);
Serial.print(F(" dBm, SNR="));
Serial.println(snr);
}
// 2) Отправка из Serial (построчно)
while (Serial.available()) {
char c = (char)Serial.read();
if (c == '\r') continue;
if (c == '\n') {
if (inputLine.length() > 0) {
sendMessage(inputLine);
inputLine = "";
}
} else {
inputLine += c;
if (inputLine.length() > 200) { // защита от слишком длинных строк
inputLine.remove(200);
}
}
}
}
void sendMessage(const String& text) {
// Простой формат: "ID:текст"
String payload = String(NODE_ID) + ":" + text;
LoRa.beginPacket();
LoRa.print(payload);
LoRa.endPacket(); // блокирующая отправка
Serial.print(F("[TX] "));
Serial.println(payload);
}