Created
October 9, 2022 00:41
-
-
Save ajokela/d2355a3c8d6a6e94293265450b36c190 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <lmic.h> | |
#include <hal/hal.h> | |
#include <DHT.h> | |
#define DHTTYPE DHT22 // DHT 22 (AM2302) | |
#define DHTPIN 8 | |
DHT dht(DHTPIN, DHTTYPE); | |
// LoRaWAN NwkSKey, network session **** DO NOT USE AS IS. NEEDS TO BE CHANGED AS PER TUTORIAL ****** | |
static const PROGMEM u1_t NWKSKEY[16] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; | |
// LoRaWAN AppSKey, application session key **** DO NOT USE AS IS. NEEDS TO BE CHANGED AS PER TUTORIAL ****** | |
static const u1_t PROGMEM APPSKEY[16] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; | |
// LoRaWAN end-device address (DevAddr) **** DO NOT USE AS IS. NEEDS TO BE CHANGED AS PER TUTORIAL ****** | |
static const u4_t DEVADDR = { 0xFFFFFFFF }; | |
// 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[] = "LoRa Device Test"; | |
static osjob_t sendjob; | |
// Schedule data trasmission in every this many seconds (might become longer due to duty | |
// cycle limitations). | |
// we set 10 seconds interval | |
const unsigned TX_INTERVAL = 10; | |
// Pin mapping according to Cytron LoRa Shield RFM | |
const lmic_pinmap lmic_pins = { | |
.nss = 10, | |
.rxtx = LMIC_UNUSED_PIN, | |
.rst = 7, | |
.dio = {2, 5, 6}, | |
}; | |
void onEvent (ev_t ev) { | |
switch(ev) { | |
case 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); | |
break; | |
default: | |
Serial.println(F("Unknown event")); | |
break; | |
} | |
} | |
void do_send(osjob_t* j){ | |
char ValueT[5]; | |
char ValueH[5]; | |
int Temperature; | |
int Humidity; | |
// Check if there is not a current TX/RX job running | |
if (LMIC.opmode & OP_TXRXPEND) { | |
Serial.println(F("OP_TXRXPEND, not sending")); | |
} else { | |
// Get Temperature | |
Temperature=int(dht.readTemperature()*10); | |
// Get humidity | |
Humidity=int(dht.readHumidity()*10); | |
// Format the values to be printed on OLED Screen | |
sprintf(ValueT, "%d.%d", int(dht.readTemperature()),int(dht.readTemperature()*10)-(int(dht.readTemperature())*10)); | |
sprintf(ValueH, "%d.%d", int(dht.readHumidity()),int(dht.readHumidity()*10)-(int(dht.readHumidity())*10)); | |
// prepare and schedule data for transmission | |
LMIC.frame[0] = Temperature >> 8; | |
LMIC.frame[1] = Temperature; | |
LMIC.frame[2] = Humidity >> 8; | |
LMIC.frame[3] = Humidity; | |
LMIC_setTxData2(1, LMIC.frame, 4, 0); // (port 1, 4 bytes, unconfirmed) | |
Serial.println(F("Packet queued")); | |
} | |
// Next TX is scheduled after TX_COMPLETE event. | |
} | |
void setup() { | |
Serial.begin(9600); | |
Serial.println(F("Starting")); | |
// Initialize Temp sensor device. | |
dht.begin(); | |
// LMIC init | |
os_init(); | |
// Reset the MAC state. Session and pending data transfers will be discarded. | |
LMIC_reset(); | |
// Set static session parameters. Instead of dynamically establishing a session | |
// by joining the network, precomputed session parameters are be provided. | |
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); | |
// Disable link check validation | |
LMIC_setLinkCheckMode(0); | |
// Disable ADR | |
LMIC_setAdrMode(false); | |
// 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() { | |
os_runloop_once(); | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment