Connections and Library for Adafruit RFM95


(Mpastorini) #1

Hi there! I searched all the week for the connections and library to connect to TTN with an adafruit RFM95. I found a lot of information for the adafruit feather but not for the plain adafruit RFM95: https://www.adafruit.com/product/3072

I wanted to connect to the TTN using the “arduino-lmic” library, but the connections of the Adafruit are not the same as the crude RFM95. For example, the adafruit doesnt have the DIO0, DIO1, DIO2.

If anyone can help me please. Thank you very much


#2

you realize that you need a processor to control this radio module ?
if you look at the schematic you see that DIO0 to DIO 5 are available on JP1 as G1 to G5

these pins have no levelconverter so don’t use a 5v arduino directly

  • basically you can follow this tutorial

(Amedee) #3

The DIOn pins are marked Gn on the breakout…


(Mpastorini) #4

Oh perfect! Yes I am using an arduino. So this will be my mapping from adafruit RFM95 to the crude RFM95:

DI0 = G0
Dio1 = G1
DIO2 = G2
NSS = CS
RESET=RST

I will connect VIN to 3.3V as @BoRRoZ said, the Gn pins have no level converter

Am I correct?


#5

you set the pin mapping in your software (depending on mcu board and personal preferences)

example:

// Pin mapping
const lmic_pinmap lmic_pins = {
.nss = 6,
.rxtx = LMIC_UNUSED_PIN,
.rst = 5,
.dio = {2, 3, 4},
};

see https://github.com/tijnonlijn/RFM-node for ABP and OTAA example code


(Mpastorini) #6

yes, I have that mapping. But I need to map my adafruit with that pins. So moving with your example, would be for me like this:

// Pin mapping
const lmic_pinmap lmic_pins = {
.nss = 6, (Adafruit CS)
.rxtx = LMIC_UNUSED_PIN,
.rst = 5, (Adafruit Rst)
.dio = {2, 3, 4}, (Adafruit: G0, G1, G2)
};

If you can confirm me this please, this is the module: https://www.adafruit.com/product/3072


#7

yes that should work (I hope :wink:)


(Mpastorini) #8

Perfect, thank you very much!


(Amedee) #9

You might want to tell us which microprocessor you are using…

As @BoRRoZ already outlined the RFM95 is 3v3 logic; the Adafruit breakout has a level shifter for the SPI bus, but not for the DIO lines.

As far as I know, all DIO pins are Input (on the MCU side), so it won’t destroy anything, but the MCU might not detect level change…

Side note: for LoRa you only need GIO 0 and 1, DIO2 is not used.


(Mpastorini) #10

I am using arduino uno atmega328p, I am connecting the adafruit RFM95 to arduino, and using LMIC library to connect to lorawan.
Am I ok if I connect like this:

// Pin mapping
const lmic_pinmap lmic_pins = {
.nss = 6, (Adafruit CS)
.rxtx = LMIC_UNUSED_PIN,
.rst = 5, (Adafruit Rst)
.dio = {2, 3, 4}, (Adafruit: G0, G1, G2)
};


#11

NO … arduino uno has 5 v gpio, then you need a level shifter

or build one

https://randomnerdtutorials.com/how-to-level-shift-5v-to-3-3v/


(Amedee) #12

@BoRRoZ

The AtMega consider any voltage > 3.0v as a logical 1.

The Adafruit breakout has level shifter for all RFM95 inputs (not really a level shifter it is a 74HC4050, but it makes the input 5v tolerant)

  • SPI MISO is 3v3
  • DIOs are 3v3 as well

These are all input for the Arduino, and the AtMega should recognize the levels properly.

So all in all, it might work – no guarantee though – in any case you won’t destroy anything.

(Reading the full Adafruit article make me think that Adafruit is confident it will work with 5v MCUs; but they clearly say output logic from the breakout is 3v3)