/* * Author: JP Meijers * Date: 2016-09-07 * * This program is meant to be used on a The Things Uno board. * * Transmit a one byte packet via TTN. This happens as fast as possible, * while still keeping to the 1% duty cycle rules enforced by the RN2483's built * in LoRaWAN stack. Even though this is allowed by the radio regulations of the * 868MHz band, the fair use policy of TTN may prohibit this. * * CHECK THE RULES BEFORE USING THIS PROGRAM! * * CHANGE ADDRESS! * Change the device address, network (session) key, and app (session) key to * the values that are registered via the TTN dashboard. * The appropriate line is "myLora.initABP(XXX);" or "myLora.initOTAA(XXX);" * When using ABP, it is advised to enable "relax frame count" on the dashboard. * */ #include //create an instance of the rn2483 library, using the given Serial port rn2xx3 myLora(Serial1); // the setup routine runs once when you press reset: void setup() { //output LED pin pinMode(13, OUTPUT); led_on(); // Open serial communications and wait for port to open: Serial.begin(57600); //serial port to computer Serial1.begin(57600); //serial port to radio // make sure usb serial connection is available, // or after 10s go on anyway for 'headless' use of the // node. while ((!Serial) && (millis() < 10000)); Serial.println("Startup"); initialize_radio(); //transmit a startup message myLora.tx("TTN Mapper on TTN Uno node"); led_off(); delay(2000); } void initialize_radio() { delay(100); //wait for the RN2xx3's startup message Serial1.flush(); //print out the HWEUI so that we can register it via ttnctl String hweui = myLora.hweui(); while(hweui.length() != 16) { Serial.println("Communication with RN2xx3 unsuccessful. Power cycle the TTN UNO board."); delay(10000); hweui = myLora.hweui(); } Serial.println("When using OTAA, register this DevEUI: "); Serial.println(hweui); Serial.println("RN2xx3 firmware version:"); Serial.println(myLora.sysver()); //configure your keys and join the network Serial.println("Trying to join TTN"); bool join_result = false; //ABP: initABP(String addr, String AppSKey, String NwkSKey); join_result = myLora.initABP("02017201", "8D7FFEF938589D95AAD928C2E2E7E48F", "AE17E567AECC8787F749A62F5541D522"); //OTAA: initOTAA(String AppEUI, String AppKey); //join_result = myLora.initOTAA("70B3D57ED00001A6", "A23C96EE13804963F8C2BD6285448198"); while(!join_result) { Serial.println("Unable to join. Are your keys correct, and do you have TTN coverage?"); delay(60000); //delay a minute before retry join_result = myLora.init(); } Serial.println("Successfully joined TTN"); } // the loop routine runs over and over again forever: void loop() { led_on(); Serial.println("TXing"); myLora.tx("!"); //one byte, blocking function led_off(); delay(200); } void led_on() { digitalWrite(13, 1); } void led_off() { digitalWrite(13, 0); }