arduino-lmic icon indicating copy to clipboard operation
arduino-lmic copied to clipboard

Dragino shield V1.3 : Pin mapping

Open urs8000 opened this issue 8 years ago • 11 comments

for the documentation // Pin mapping for Dragino Board Version 1.3 (open J_DIO5) const lmic_pinmap lmic_pins = { .nss = 10, .rxtx = LMIC_UNUSED_PIN, .rst = 9, .dio = {2, 6, 7}, // Specify pin numbers for DIO0, 1, 2 // connected to D2, D6, D7 }; not tested with LoRa/GPS shield!

urs8000 avatar Dec 25 '16 12:12 urs8000

ANY INFO: Dragino Board Version 1.4 ? Thanks

kazi93 avatar Apr 05 '17 17:04 kazi93

The pin mapping for dragino board version 1.4 are the same.

henri98 avatar Jan 13 '18 08:01 henri98

I can confirm it works with Dragino Board Version 1.4

MatGit5 avatar Mar 18 '18 20:03 MatGit5

may i ask it will also work with the Arduino Mega 2560 ? i did try since 2 days an i am not sure i am sending data.....gateway is recieving nothing at all. i dont have an UNO or an Feather...... Do you know there are special needs for the Mega ? Thank you so much for your help

Sasch600xt avatar Aug 28 '18 03:08 Sasch600xt

Actually not - it works fine with 2560 Core also: https://www.aliexpress.com/item/Mega2560-CORE-mini-2560-Arduino-compatible-3-3V-5V-for-Arduino-mega-2560/32603415477.html Just be carefull with pin mappings - there is many more pins on 2560

Roberto6969 avatar Aug 28 '18 06:08 Roberto6969

well....i am not a pro right now. "Just be carefull with pin mappings - there is many more pins on 2560"

ummm......i have no idea how to do the pin mapping..... I know i am asking for very much, but could one of you maybe have a look at the Arduino Mega pinout and tell me what to do ?

I think we talking about this section : `// Pin mapping const lmic_pinmap lmic_pins = { .nss = 10, .rxtx = LMIC_UNUSED_PIN, .rst = 9, .dio = {2, 6, 7}, };

by the way, it is a Dragino Shield

Thank you so much for your help ! Sascha`

Sasch600xt avatar Aug 28 '18 07:08 Sasch600xt

Here is my mappings: const lmic_pinmap lmic_pins = { .nss = 53, // 10 Connected to pin D10 .rxtx = LMIC_UNUSED_PIN, // 0 For placeholder only, Do not connected on RFM92/RFM95 .rst = 30, // 9 Needed on RFM92/RFM95? (probably not) .dio = {5, 6, 7}, // Specify pin numbers for RFM95 DIO0, 1, 2

In my case i use only RFM95 module (not Dragino) connected directly to 2560 Core. Used pins between RFM95 and 2560 Core are: RFM95 - 2560 Core name and pin number

MISO - PB3 22
MOSI - PB2 21
SCK - PB1 20
NSS - PB0 19
RESET - RESET 30 DIO0 - PE3 5
DIO1 - PH3 15
DIO2 - PH4 16

If you use Dragino this will help you: http://wiki.dragino.com/index.php?title=Lora_Shield

Roberto6969 avatar Aug 28 '18 07:08 Roberto6969

Can anyone tell me what the dragino pin mappings are with Leonardo?

I tried the following and almost bricked my leonardo.

const lmic_pinmap lmic_pins = { .nss = 10, .rxtx = LMIC_UNUSED_PIN, .rst = 9, .dio = {2, 6, 7}, };

mantoles avatar Oct 18 '20 03:10 mantoles

@mantoles, the Leonardo should have the same pin numbers for digital I/O as the Uno, so that pin mapping should be correct. However, the Leonardo does not have SPI pins available on digital pin 11/12/13, only on the 2x3pin ICSP connector. I haven't checked the dragino board, but if that board assumes SPI on 11/12/13 and does not have the 2x3 pin connector, you'll have to reroute the SPI connections somehow (i.e. add wires, maybe cut pins or traces on the Dragino).

See also https://www.arduino.cc/en/reference/SPI

matthijskooijman avatar Oct 18 '20 09:10 matthijskooijman

@matthijskooijman Much appreciate your response. Now it makes more sense. The leonardo has the 2x3 ISP connector so it should be connected to the spi bus directly.

mantoles avatar Oct 18 '20 13:10 mantoles

Good morning, I am using an Arduino Mega 2560 board with a LoRa Shield having the RFM95W radio module. However I use LMIC to send my data to a Dragino LPS8N gateway. And when I upload my program to the Arduino board nothing happens and I get the error displayed on the serial monitor: Arduino\libraries\LMIC-Arduino\src\lmic\radio.c:689

I thought at first it was a pin mapping problem but I still have the same problem. Help me please. Here is my test code on arduino:

const int test =13; //---------------------------------------------------

#include <lmic.h> #include <hal/hal.h> #include <SPI.h>

// LoRaWAN NwkSKey, network session key // This is the default Semtech key, which is used by the early prototype TTN // network. static const PROGMEM u1_t NWKSKEY[16] = { 0x91, 0xA4, 0xAE, 0x05, 0x61, 0x89, 0x16, 0xCF, 0x09, 0x73, 0x51, 0x70, 0x19, 0xD1, 0xC3, 0xE2 };

// LoRaWAN AppSKey, application session key // This is the default Semtech key, which is used by the early prototype TTN // network. static const u1_t PROGMEM APPSKEY[16] = { 0x79, 0xDB, 0xD8, 0xE4, 0x98, 0xF8, 0x19, 0xE1, 0xA6, 0x52, 0x5D, 0x4F, 0x79, 0x43, 0x71, 0x5D };

// LoRaWAN end-device address (DevAddr) static const u4_t DEVADDR = 0x010C2D70; // <-- Change this address for every node!

// These callbacks are only used in over-the-air activation, so they are // left empty here (we cannot leave them out completely unless // DISABLE_JOIN is set in config.h, otherwise the linker will complain). void os_getArtEui (u1_t* buf) { } void os_getDevEui (u1_t* buf) { } void os_getDevKey (u1_t* buf) { }

static uint8_t mydata[] = "Hello, world!"; static osjob_t sendjob;

// Schedule TX every this many seconds (might become longer due to duty // cycle limitations). const unsigned TX_INTERVAL = 10;

// Pin mapping const lmic_pinmap lmic_pins = { .nss = 10, .rxtx = LMIC_UNUSED_PIN, .rst = 9, .dio = {2, 6, 7}, };

void onEvent (ev_t ev) { Serial.print(os_getTime()); Serial.print(": "); switch(ev) { case EV_SCAN_TIMEOUT: Serial.println(F("EV_SCAN_TIMEOUT")); break; case EV_BEACON_FOUND: Serial.println(F("EV_BEACON_FOUND")); break; case EV_BEACON_MISSED: Serial.println(F("EV_BEACON_MISSED")); break; case EV_BEACON_TRACKED: Serial.println(F("EV_BEACON_TRACKED")); break; case EV_JOINING: Serial.println(F("EV_JOINING")); break; case EV_JOINED: Serial.println(F("EV_JOINED")); break; case EV_RFU1: Serial.println(F("EV_RFU1")); break; case EV_JOIN_FAILED: Serial.println(F("EV_JOIN_FAILED")); break; case EV_REJOIN_FAILED: Serial.println(F("EV_REJOIN_FAILED")); break; case EV_TXCOMPLETE: Serial.println(F("EV_TXCOMPLETE (includes waiting for RX windows)")); if (LMIC.txrxFlags & TXRX_ACK) Serial.println(F("Received ack")); if (LMIC.dataLen) { Serial.println(F("Received ")); Serial.println(LMIC.dataLen); Serial.println(F(" bytes of payload")); } // Schedule next transmission os_setTimedCallback(&sendjob, os_getTime()+sec2osticks(TX_INTERVAL), do_send); break; case EV_LOST_TSYNC: Serial.println(F("EV_LOST_TSYNC")); break; case EV_RESET: Serial.println(F("EV_RESET")); break; case EV_RXCOMPLETE: // data received in ping slot Serial.println(F("EV_RXCOMPLETE")); break; case EV_LINK_DEAD: Serial.println(F("EV_LINK_DEAD")); break; case EV_LINK_ALIVE: Serial.println(F("EV_LINK_ALIVE")); break; default: Serial.println(F("Unknown event")); break; } }

void do_send(osjob_t* j){ // Check if there is not a current TX/RX job running if (LMIC.opmode & OP_TXRXPEND) { Serial.println(F("OP_TXRXPEND, not sending")); } else {

 uint8_t buff[3];

 buff[0] = 1;
LMIC_setTxData2(1, buff, sizeof(buff), 0);
Serial.println(F("Packet queued"));

} // Next TX is scheduled after TX_COMPLETE event. }

void setup() { Serial.begin(115200); #ifdef VCC_ENABLE // For Pinoccio Scout boards pinMode(VCC_ENABLE, OUTPUT); digitalWrite(VCC_ENABLE, HIGH); delay(1000); #endif //---------------------------------------------------- pinMode(test, OUTPUT);

// LMIC init os_init(); // Reset the MAC state. Session and pending data transfers will be discarded. LMIC_reset(); LMIC_setClockError(MAX_CLOCK_ERROR * 10 / 100); // Set static session parameters. Instead of dynamically establishing a session // by joining the network, precomputed session parameters are be provided. #ifdef PROGMEM // On AVR, these values are stored in flash and only copied to RAM // once. Copy them to a temporary buffer here, LMIC_setSession will // copy them into a buffer of its own again. uint8_t appskey[sizeof(APPSKEY)]; uint8_t nwkskey[sizeof(NWKSKEY)]; memcpy_P(appskey, APPSKEY, sizeof(APPSKEY)); memcpy_P(nwkskey, NWKSKEY, sizeof(NWKSKEY)); LMIC_setSession (0x1, DEVADDR, nwkskey, appskey); #else // If not running an AVR with PROGMEM, just use the arrays directly LMIC_setSession (0x1, DEVADDR, NWKSKEY, APPSKEY); #endif

#if defined(CFG_eu868) // Set up the channels used by the Things Network, which corresponds // to the defaults of most gateways. Without this, only three base // channels from the LoRaWAN specification are used, which certainly // works, so it is good for debugging, but can overload those // frequencies, so be sure to configure the full frequency range of // your network here (unless your network autoconfigures them). // Setting up channels should happen after LMIC_setSession, as that // configures the minimal channel set. // NA-US channels 0-71 are configured automatically LMIC_setupChannel(0, 868100000, DR_RANGE_MAP(DR_SF12, DR_SF7), BAND_CENTI); // g-band LMIC_setupChannel(1, 868300000, DR_RANGE_MAP(DR_SF12, DR_SF7B), BAND_CENTI); // g-band LMIC_setupChannel(2, 868500000, DR_RANGE_MAP(DR_SF12, DR_SF7), BAND_CENTI); // g-band LMIC_setupChannel(3, 867100000, DR_RANGE_MAP(DR_SF12, DR_SF7), BAND_CENTI); // g-band LMIC_setupChannel(4, 867300000, DR_RANGE_MAP(DR_SF12, DR_SF7), BAND_CENTI); // g-band LMIC_setupChannel(5, 867500000, DR_RANGE_MAP(DR_SF12, DR_SF7), BAND_CENTI); // g-band LMIC_setupChannel(6, 867700000, DR_RANGE_MAP(DR_SF12, DR_SF7), BAND_CENTI); // g-band LMIC_setupChannel(7, 867900000, DR_RANGE_MAP(DR_SF12, DR_SF7), BAND_CENTI); // g-band LMIC_setupChannel(8, 868800000, DR_RANGE_MAP(DR_FSK, DR_FSK), BAND_MILLI); // g2-band // TTN defines an additional channel at 869.525Mhz using SF9 for class B // devices' ping slots. LMIC does not have an easy way to define set this // frequency and support for class B is spotty and untested, so this // frequency is not configured here. #elif defined(CFG_us915) // NA-US channels 0-71 are configured automatically // but only one group of 8 should (a subband) should be active // TTN recommends the second sub band, 1 in a zero based count. // https://github.com/TheThingsNetwork/gateway-conf/blob/master/US-global_conf.json LMIC_selectSubBand(1); #endif

// Disable link check validation LMIC_setLinkCheckMode(0);

// TTN uses SF9 for its RX2 window. LMIC.dn2Dr = DR_SF9;

// Set data rate and transmit power for uplink (note: txpow seems to be ignored by the library) LMIC_setDrTxpow(DR_SF7,14);

// Start job

do_send(&sendjob); }

//---------------------------------------------------------------------- void loop() { // put your main code here, to run repeatedly: os_runloop_once(); digitalWrite(test,HIGH); delay(1000); digitalWrite(test,LOW); delay(1000);

}

Phairou18 avatar Jun 01 '23 09:06 Phairou18