Спасибо BABOS.
Борода про шар всегда уместна и улыбает 
И так, в этом коде есть передача, ее видно на SDR, что важно т. к. иногда консоль пишет а эфир молчит.
RSSI приемлемый -88dbm но похоже мертвый, хотя при работе на передачу соседнего модуля падает до-17dbm и не поднимается назад.. Приема пакетов разумеется нет. Контроль TXEN RXEN.
#include <Arduino.h>
#include <SPI.h>
#include <RadioLib.h>
// ==================== ПИНЫ ====================
#define PIN_NSS PA4
#define PIN_SCK PA5
#define PIN_MOSI PA7
#define PIN_MISO PA6
#define PIN_BUSY PA1
#define PIN_DIO1 PB0
#define PIN_NRST PA2
#define PIN_TXEN PB10
#define PIN_RXEN PB2
#define PIN_PTT PA3
#define PIN_LED PC13
LLCC68 radio = new Module(PIN_NSS, PIN_DIO1, PIN_NRST, PIN_BUSY);
// ==================== ПЕРЕМЕННЫЕ ====================
bool radioReady = false;
bool pttActive = false;
uint32_t packetCount = 0;
uint32_t rxCount = 0;
uint32_t lastRssiPrint = 0;
// ==================== УПРАВЛЕНИЕ ПЕРЕКЛЮЧАТЕЛЕМ ====================
void setTxenRxen(bool txen, bool rxen) {
digitalWrite(PIN_TXEN, txen ? HIGH : LOW);
digitalWrite(PIN_RXEN, rxen ? HIGH : LOW);
delayMicroseconds(10);
}
// ==================== ИНИЦИАЛИЗАЦИЯ РАДИО ====================
void initRadio() {
Serial.println("");
Serial.println("=== RADIO INIT ===");
pinMode(PIN_TXEN, OUTPUT);
pinMode(PIN_RXEN, OUTPUT);
setTxenRxen(false, true);
pinMode(PIN_NRST, OUTPUT);
digitalWrite(PIN_NRST, LOW);
delay(10);
digitalWrite(PIN_NRST, HIGH);
delay(100);
pinMode(PIN_NSS, OUTPUT);
digitalWrite(PIN_NSS, HIGH);
pinMode(PIN_BUSY, INPUT);
pinMode(PIN_DIO1, INPUT);
SPI.begin();
int state = radio.begin();
Serial.print("radio.begin(): ");
Serial.println(state);
if (state != RADIOLIB_ERR_NONE) {
radioReady = false;
Serial.println("Radio FAILED");
return;
}
radio.setFrequency(433.9);
radio.setBandwidth(125.0);
radio.setSpreadingFactor(9);
radio.setCodingRate(7);
radio.setSyncWord(0x1424);
radio.setOutputPower(22);
radio.setPreambleLength(8);
radio.setCRC(true);
radio.standby();
delay(1);
radio.startReceive();
radioReady = true;
Serial.println("Radio OK");
Serial.println("Radio in RX mode");
float rssi = radio.getRSSI();
Serial.print("RSSI: ");
Serial.print(rssi);
Serial.println(" dBm");
Serial.println("=== RADIO READY ===");
Serial.println("");
}
// ==================== ОТПРАВКА ПАКЕТА ====================
void sendPacket() {
if (!radioReady) return;
packetCount++;
char data[32];
sprintf(data, "PKT #%lu", packetCount);
Serial.print("Sending: ");
Serial.println(data);
setTxenRxen(true, false);
delay(1);
int state = radio.transmit(data);
radio.standby();
delay(1);
setTxenRxen(false, true);
radio.startReceive();
if (state == RADIOLIB_ERR_NONE) {
Serial.println("Sent OK");
digitalWrite(PIN_LED, HIGH);
} else {
Serial.print("Send error: ");
Serial.println(state);
}
}
// ==================== ПРИЁМ ПАКЕТА ====================
void receivePacket() {
if (!radioReady) return;
uint8_t buffer[64];
int state = radio.readData(buffer, sizeof(buffer));
if (state > 0) {
rxCount++;
buffer[state] = '\0';
Serial.print("RX #");
Serial.print(rxCount);
Serial.print(": ");
Serial.println((char*)buffer);
float rssi = radio.getRSSI();
float snr = radio.getSNR();
Serial.print(" RSSI: ");
Serial.print(rssi);
Serial.print(" dBm SNR: ");
Serial.println(snr);
digitalWrite(PIN_LED, !digitalRead(PIN_LED));
radio.startReceive();
}
}
// ==================== ОБРАБОТКА PTT ====================
void handlePTT() {
static bool lastState = HIGH;
static unsigned long debounceTime = 0;
const unsigned long DEBOUNCE_DELAY = 50;
bool reading = digitalRead(PIN_PTT);
unsigned long now = millis();
if (reading != lastState) {
debounceTime = now;
lastState = reading;
return;
}
if (now - debounceTime < DEBOUNCE_DELAY) return;
if (reading == LOW && !pttActive) {
pttActive = true;
digitalWrite(PIN_LED, LOW);
sendPacket();
pttActive = false;
}
}
// ==================== ДИАГНОСТИКА RSSI ====================
void printRSSI() {
if (!radioReady) return;
float rssi = radio.getRSSI();
float snr = radio.getSNR();
Serial.print("RSSI: ");
Serial.print(rssi);
Serial.print(" dBm SNR: ");
Serial.print(snr);
Serial.print(" dB TXEN: ");
Serial.print(digitalRead(PIN_TXEN));
Serial.print(" RXEN: ");
Serial.println(digitalRead(PIN_RXEN));
}
// ==================== SETUP ====================
void setup() {
Serial.begin(115200);
delay(1000);
Serial.println("");
Serial.println("=================================");
Serial.println(" LoRa TX/RX TEST v3");
Serial.println(" Press PTT to send packet");
Serial.println("=================================");
Serial.println("");
pinMode(PIN_PTT, INPUT_PULLUP);
pinMode(PIN_LED, OUTPUT);
digitalWrite(PIN_LED, HIGH);
initRadio();
Serial.println("Ready! Press PTT to send...");
Serial.println("");
}
// ==================== LOOP ====================
void loop() {
uint32_t now = millis();
handlePTT();
receivePacket();
if (!pttActive && now - lastRssiPrint > 5000) {
lastRssiPrint = now;
printRSSI();
}
delay(10);
}
консоль-прием тишины, передача локальная, прием второго модуля. RSSI виснет на -17.00дбм
09:43:15.734 -> RSSI: -88.00 dBm | SNR: 31.00 dB | TXEN: 0 | RXEN: 1
09:43:20.674 -> RSSI: -88.00 dBm | SNR: 31.00 dB | TXEN: 0 | RXEN: 1
09:43:22.114 -> Sending: PKT #4
09:43:22.274 -> Sent
09:43:22.274 -> Sending: PKT #5
09:43:22.394 -> Sent
09:43:25.554 -> RSSI: -88.00 dBm | SNR: 31.00 dB | TXEN: 0 | RXEN: 1
09:43:30.474 -> RSSI: -17.00 dBm | SNR: 10.50 dB | TXEN: 0 | RXEN: 1
09:43:35.404 -> RSSI: -17.00 dBm | SNR: 10.50 dB | TXEN: 0 | RXEN: 1