Problem: When Pi transmits, Arduino doesn't show any received data (via serial monitor)
(The reverse direction, i.e. Arduino as sender, Pi as receiver, works.)
Hardware and software setup/config per various Adafruit tutorials/examples.
1. Running rfm95x_check.py code on Pi, the output shows
RFM9x: Detected
RFM9x: Detected
RFM9x: Detected
rfm95x_check.py code
Code: Select all
import time
import busio
from digitalio import DigitalInOut, Direction, Pull
import board
import adafruit_rfm9x
CS = DigitalInOut(board.CE1)
RESET = DigitalInOut(board.D25)
spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO)
while True:
try:
rfm9x = adafruit_rfm9x.RFM9x(spi, CS, RESET, 915.0)
print('RFM9x: Detected')
except RuntimeError as error:
print('RFM9x Error: ', error)
time.sleep(1)
Code: Select all
import time
import busio
from digitalio import DigitalInOut, Direction, Pull
import digitalio
import board
import adafruit_rfm9x
CS = DigitalInOut(board.CE1)
RESET = DigitalInOut(board.D25)
spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO)
rfm9x = adafruit_rfm9x.RFM9x(spi, CS, RESET, 915.0)
rfm9x.tx_power = 23
LED = digitalio.DigitalInOut(board.D18)
LED.direction = digitalio.Direction.OUTPUT
rfm9x.send(bytes("Hello world!\r\n", "utf-8"))
print("Sent Hello World message!")
Code: Select all
// Arduino9x_RX
// -*- mode: C++ -*-
// Example sketch showing how to create a simple messaging client (receiver)
// with the RH_RF95 class. RH_RF95 class does not provide for addressing or
// reliability, so you should only use RH_RF95 if you do not need the higher
// level messaging abilities.
// It is designed to work with the other example Arduino9x_TX
#include <SPI.h>
#include <RH_RF95.h>
#define RFM95_CS 4
#define RFM95_RST 2
#define RFM95_INT 3 //G0
// Change to 434.0 or other frequency, must match RX's freq!
#define RF95_FREQ 915.0
// Singleton instance of the radio driver
RH_RF95 rf95(RFM95_CS, RFM95_INT);
// Blinky on receipt
#define LED 13
void setup()
{
pinMode(LED, OUTPUT);
pinMode(RFM95_RST, OUTPUT);
digitalWrite(RFM95_RST, HIGH);
while (!Serial);
//Serial.begin(9600);
Serial.begin(115200);
delay(100);
Serial.println("Arduino LoRa RX Test!");
// manual reset
digitalWrite(RFM95_RST, LOW);
delay(10);
digitalWrite(RFM95_RST, HIGH);
delay(10);
while (!rf95.init()) {
Serial.println("LoRa radio init failed");
while (1);
}
Serial.println("LoRa radio init OK!");
// Defaults after init are 434.0MHz, modulation GFSK_Rb250Fd250, +13dbM
if (!rf95.setFrequency(RF95_FREQ)) {
Serial.println("setFrequency failed");
while (1);
}
Serial.print("Set Freq to: "); Serial.println(RF95_FREQ);
// Defaults after init are 434.0MHz, 13dBm, Bw = 125 kHz, Cr = 4/5, Sf = 128chips/symbol, CRC on
// The default transmitter power is 13dBm, using PA_BOOST.
// If you are using RFM95/96/97/98 modules which uses the PA_BOOST transmitter pin, then
// you can set transmitter powers from 5 to 23 dBm:
rf95.setTxPower(23, false);
}
void loop()
{
if (rf95.available())
{
// Should be a message for us now
uint8_t buf[RH_RF95_MAX_MESSAGE_LEN];
uint8_t len = sizeof(buf);
if (rf95.recv(buf, &len))
{
digitalWrite(LED, HIGH);
RH_RF95::printBuffer("Received: ", buf, len);
Serial.print("Got: ");
Serial.println((char*)buf);
Serial.print("RSSI: ");
Serial.println(rf95.lastRssi(), DEC);
digitalWrite(LED, LOW);
}
else
{
Serial.println("Receive failed");
}
}
}
After uploading the above Arduino code, Arduino serial monitor shows
16:21:22.938 -> Arduino LoRa RX Test!
16:21:23.085 -> LoRa radio init OK!
16:21:23.085 -> Set Freq to: 915.00
Then, after running the above Python code on Pi, the Pi side shows
Sent Hello World message!
Arduino side doesn't show the message "Hello World!"
6. RFM95x board's G0 is not connected to anything on the Pi side.
What did I do wrong?
Any help would be appreciated. Thanks.