Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // MIT License
- // https://github.com/gonzalocasas/arduino-uno-dragino-lorawan/blob/master/LICENSE
- // Based on examples from https://github.com/matthijskooijman/arduino-lmic
- // Copyright (c) 2015 Thomas Telkamp and Matthijs Kooijman
- // Adaptions: Andreas Spiess
- #include <lmic.h>
- #include <hal/hal.h>
- //#include <credentials.h>
- #include <math.h>
- #include <stdlib.h>
- #ifdef CREDENTIALS
- static const u1_t NWKSKEY[16] = NWKSKEY1;
- static const u1_t APPSKEY[16] = APPSKEY1;
- static const u4_t DEVADDR = DEVADDR1;
- #else
- static const u1_t NWKSKEY[16] = { key };
- static const u1_t APPSKEY[16] = { key };
- static const u4_t DEVADDR = 0xthingymcjigger;
- #endif
- // 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 osjob_t sendjob;
- // Schedule TX every this many seconds (might become longer due to duty
- // cycle limitations).
- const unsigned TX_INTERVAL = 20;
- // Pin mapping Dragino Shield
- const lmic_pinmap lmic_pins = {
- .nss = 10,
- .rxtx = LMIC_UNUSED_PIN,
- .rst = 9,
- .dio = {2, 6, 7},
- };
- int sensorPin = A5; // select the input pin for the potentiometer
- void onEvent (ev_t ev) {
- if (ev == EV_TXCOMPLETE) {
- Serial.println(F("EV_TXCOMPLETE (includes waiting for RX windows)"));
- // Schedule next transmission
- os_setTimedCallback(&sendjob, os_getTime()+sec2osticks(TX_INTERVAL), do_send);
- }
- }
- double read_thermistor(int RawADC) {
- double Temp;
- Temp = log(10000.0*((1024.0/RawADC-1)));
- Temp = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * Temp * Temp ))* Temp );
- Temp = Temp - 273.15; // Convert Kelvin to Celcius
- //Temp = (Temp * 9.0)/ 5.0 + 32.0; // Convert Celcius to Fahrenheit
- return Temp;
- }
- void convert_to_string(char * outStr, int length, double val){
- Serial.println(F("Converting..."));
- dtostrf(val,2,0,outStr);
- Serial.println(outStr);
- }
- void do_send(osjob_t* j){
- // Payload to send (uplink)
- uint8_t message[8];
- int A = analogRead(sensorPin);
- double temp = read_thermistor(A);
- convert_to_string(message,8,A);
- // Check if there is not a current TX/RX job running
- if (LMIC.opmode & OP_TXRXPEND) {
- Serial.println(F("OP_TXRXPEND, not sending"));
- } else {
- // Prepare upstream data transmission at the next possible time.
- LMIC_setTxData2(1, message,2, 0);
- // LMIC_setTxData2(1, message, sizeof(message)-1, 0);
- Serial.println(F("Sending uplink packet..."));
- // Serial.println(temp);
- }
- // Next TX is scheduled after TX_COMPLETE event.
- }
- void setup() {
- Serial.begin(115200);
- Serial.println(F("Starting..."));
- // LMIC init
- os_init();
- // Reset the MAC state. Session and pending data transfers will be discarded.
- LMIC_reset();
- // Set static session parameters.
- LMIC_setSession (0x1, DEVADDR, NWKSKEY, APPSKEY);
- // 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_SF12,14);
- // Start job
- do_send(&sendjob);
- }
- void loop() {
- os_runloop_once();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement