From c591066f96fdf557e7778b68a5b0b118c36cd130 Mon Sep 17 00:00:00 2001 From: Joachim Hummel Date: Thu, 21 Nov 2019 08:00:03 +0100 Subject: [PATCH] Added new Sketch --- BME-280-LoraWAN-Node.png | Bin 65406 -> 0 bytes bme280-lorawan-sensor.ino | 235 ++++++++++++++++++++++++++++++++++++++ lorawan-sensor.ino | 223 ------------------------------------ 3 files changed, 235 insertions(+), 223 deletions(-) delete mode 100644 BME-280-LoraWAN-Node.png create mode 100644 bme280-lorawan-sensor.ino delete mode 100644 lorawan-sensor.ino diff --git a/BME-280-LoraWAN-Node.png b/BME-280-LoraWAN-Node.png deleted file mode 100644 index 0ff2f5e28257ef03bc80716d04e85c2ac19ebfe1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65406 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 diff --git a/bme280-lorawan-sensor.ino b/bme280-lorawan-sensor.ino new file mode 100644 index 0000000..278049d --- /dev/null +++ b/bme280-lorawan-sensor.ino @@ -0,0 +1,235 @@ +/******************************************************************************* + Copyright (c) 2015 Thomas Telkamp and Matthijs Kooijman + Copyright (c) 2019 Severin Schols + + Permission is hereby granted, free of charge, to anyone + obtaining a copy of this document and accompanying files, + to do whatever they want with them without any restriction, + including, but not limited to, copying, modification and redistribution. + NO WARRANTY OF ANY KIND IS PROVIDED. + + This example reads a BME280 or BMP280 sensor and sends a valid LoRaWAN + packet with the readings alongside the current input voltage, using + frequency and encryption settings matching those of the The Things Network. + + This uses OTAA (Over-the-air activation), where where a DevEUI and + application key is configured, which are used in an over-the-air + activation procedure where a DevAddr and session keys are + assigned/generated for use with all further communication. + + Note: LoRaWAN per sub-band duty-cycle limitation is enforced (1% in + g1, 0.1% in g2), but not the TTN fair usage policy (which is probably + violated by this sketch when left running for longer)! + + To use this sketch, first register your application and device with + the things network, to set or generate an AppEUI, DevEUI and AppKey. + Multiple devices can use the same AppEUI, but each device has its own + DevEUI and AppKey. + + Do not forget to define the radio type correctly in config.h. + + *******************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include "config.h" + +void os_getArtEui (u1_t* buf) { + memcpy_P(buf, APPEUI, 8); +} +void os_getDevEui (u1_t* buf) { + memcpy_P(buf, DEVEUI, 8); +} +void os_getDevKey (u1_t* buf) { + memcpy_P(buf, APPKEY, 16); +} + +static osjob_t sendjob; + +// Schedule TX every this many seconds (might become longer due to duty +// cycle limitations). +const unsigned TX_INTERVAL = 30; + +const lmic_pinmap lmic_pins = { + .nss = 4, + .rxtx = LMIC_UNUSED_PIN, + .rst = LMIC_UNUSED_PIN, // hardwired to AtMega RESET + .dio = {12, 13, LMIC_UNUSED_PIN} // .dio = {4, 5, LMIC_UNUSED_PIN}, +}; + +CayenneLPP lpp(51); +BME280I2C bme; + + +// https://provideyourown.com/2012/secret-arduino-voltmeter-measure-battery-voltage/ +long readVcc() { + // Read 1.1V reference against AVcc + // set the reference to Vcc and the measurement to the internal 1.1V reference +#if defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) + ADMUX = _BV(REFS0) | _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1); +#elif defined (__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) + ADMUX = _BV(MUX5) | _BV(MUX0); +#elif defined (__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) + ADMUX = _BV(MUX3) | _BV(MUX2); +#else + ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1); +#endif + + delay(2); // Wait for Vref to settle + ADCSRA |= _BV(ADSC); // Start conversion + while (bit_is_set(ADCSRA, ADSC)); // measuring + + uint8_t low = ADCL; // must read ADCL first - it then locks ADCH + uint8_t high = ADCH; // unlocks both + + long result = (high << 8) | low; + + result = 1125300L / result; // Calculate Vcc (in mV); 1125300 = 1.1*1023*1000 + return result; // Vcc in millivolts +} + +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")); + + // Disable link check validation (automatically enabled + // during join, but not supported by TTN at this time). + LMIC_setLinkCheckMode(0); + 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; + 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")); + } + /*Serial.print(F("Frequency: ")); + Serial.println(LMIC.freq); + Serial.print(F("RSSI: ")); + Serial.println(LMIC.rssi); + Serial.print(F("SNR: ")); + Serial.println(LMIC.snr); + Serial.print(F("txpow: ")); + Serial.println(LMIC.txpow);*/ + Serial.print(F("adrTxPow: ")); + Serial.println(LMIC.adrTxPow); + Serial.print(F("txChnl: ")); + Serial.println(LMIC.txChnl); + Serial.println(); + // 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 { + float temp(NAN), hum(NAN), pres(NAN), voltage(NAN); + + BME280::TempUnit tempUnit(BME280::TempUnit_Celcius); + BME280::PresUnit presUnit(BME280::PresUnit_hPa); + + // Read BME280/BMP280 sensor + bme.read(pres, temp, hum, tempUnit, presUnit); + + voltage = readVcc() / 1000.0 ; + + // Build CayenneLPP message + lpp.reset(); + lpp.addTemperature(1, temp); + lpp.addRelativeHumidity(2, hum); + lpp.addBarometricPressure(3, pres); + lpp.addAnalogInput(4, voltage); + + // Prepare upstream data transmission at the next possible time. + LMIC_setTxData2(1, lpp.getBuffer(), lpp.getSize(), 0); + + Serial.println(F("Packet queued")); + } + // Next TX is scheduled after TX_COMPLETE event. +} + +void setup() { + Serial.begin(9600); + Serial.println(F("Starting TTN Muc Sensor 4")); + + Wire.begin(); + + while (!bme.begin()) { + Serial.println("Could not find BME280 sensor!"); + delay(1000); + } + + // LMIC init + os_init(); + + // Reset the MAC state. Session and pending data transfers will be discarded. + LMIC_reset(); + + // Let LMIC compensate for +/- 1% clock error + LMIC_setClockError(MAX_CLOCK_ERROR * 1 / 100); + + // Start job (sending automatically starts OTAA too) + do_send(&sendjob); +} + +void loop() { + os_runloop_once(); +} + diff --git a/lorawan-sensor.ino b/lorawan-sensor.ino deleted file mode 100644 index 628c87c..0000000 --- a/lorawan-sensor.ino +++ /dev/null @@ -1,223 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2015 Thomas Telkamp and Matthijs Kooijman - * - * Permission is hereby granted, free of charge, to anyone - * obtaining a copy of this document and accompanying files, - * to do whatever they want with them without any restriction, - * including, but not limited to, copying, modification and redistribution. - * NO WARRANTY OF ANY KIND IS PROVIDED. - * - * This example sends a valid LoRaWAN packet with payload "Hello, - * world!", using frequency and encryption settings matching those of - * the The Things Network. - * - * This uses OTAA (Over-the-air activation), where where a DevEUI and - * application key is configured, which are used in an over-the-air - * activation procedure where a DevAddr and session keys are - * assigned/generated for use with all further communication. - * - * Note: LoRaWAN per sub-band duty-cycle limitation is enforced (1% in - * g1, 0.1% in g2), but not the TTN fair usage policy (which is probably - * violated by this sketch when left running for longer)! - * To use this sketch, first register your application and device with - * the things network, to set or generate an AppEUI, DevEUI and AppKey. - * Multiple devices can use the same AppEUI, but each device has its own - * DevEUI and AppKey. - * - * Do not forget to define the radio type correctly in config.h. - * - *******************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include -#include "config.h" - -void os_getArtEui (u1_t* buf) { memcpy_P(buf, APPEUI, 8);} -void os_getDevEui (u1_t* buf) { memcpy_P(buf, DEVEUI, 8);} -void os_getDevKey (u1_t* buf) { memcpy_P(buf, APPKEY, 16);} - -static uint8_t mydata[] = "ping"; -static osjob_t sendjob; - -// Schedule TX every this many seconds (might become longer due to duty -// cycle limitations). -const unsigned TX_INTERVAL = 30; - -const lmic_pinmap lmic_pins = { - .nss = 10, - .rxtx = LMIC_UNUSED_PIN, - .rst = LMIC_UNUSED_PIN, // hardwired to AtMega RESET - .dio = {4,5,LMIC_UNUSED_PIN}// .dio = {4, 5, LMIC_UNUSED_PIN}, -}; - -CayenneLPP lpp(51); -BME280I2C bme; - -long readVcc() { - // Read 1.1V reference against AVcc - // set the reference to Vcc and the measurement to the internal 1.1V reference - #if defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) - ADMUX = _BV(REFS0) | _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1); - #elif defined (__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) - ADMUX = _BV(MUX5) | _BV(MUX0); - #elif defined (__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) - ADMUX = _BV(MUX3) | _BV(MUX2); - #else - ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1); - #endif - - delay(2); // Wait for Vref to settle - ADCSRA |= _BV(ADSC); // Start conversion - while (bit_is_set(ADCSRA,ADSC)); // measuring - - uint8_t low = ADCL; // must read ADCL first - it then locks ADCH - uint8_t high = ADCH; // unlocks both - - long result = (high<<8) | low; - - result = 1125300L / result; // Calculate Vcc (in mV); 1125300 = 1.1*1023*1000 - return result; // Vcc in millivolts -} - -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")); - - // Disable link check validation (automatically enabled - // during join, but not supported by TTN at this time). - LMIC_setLinkCheckMode(0); - 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; - 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")); - } - /*Serial.print(F("Frequency: ")); - Serial.println(LMIC.freq); - Serial.print(F("RSSI: ")); - Serial.println(LMIC.rssi); - Serial.print(F("SNR: ")); - Serial.println(LMIC.snr); - Serial.print(F("txpow: ")); - Serial.println(LMIC.txpow);*/ - Serial.print(F("adrTxPow: ")); - Serial.println(LMIC.adrTxPow); - Serial.print(F("txChnl: ")); - Serial.println(LMIC.txChnl); - Serial.println(); - // 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 { - float temp(NAN), hum(NAN), pres(NAN); - - BME280::TempUnit tempUnit(BME280::TempUnit_Celsius); - BME280::PresUnit presUnit(BME280::PresUnit_hPa); - - bme.read(pres, temp, hum, tempUnit, presUnit); - - float voltage = readVcc() / 1000.0 ; - - lpp.reset(); - lpp.addTemperature(1, temp); - lpp.addRelativeHumidity(2, hum); - lpp.addBarometricPressure(3, pres); - lpp.addAnalogInput(4, voltage); - // Prepare upstream data transmission at the next possible time. - LMIC_setTxData2(1, lpp.getBuffer(), lpp.getSize(), 0); - Serial.println(F("Packet queued")); - } - // Next TX is scheduled after TX_COMPLETE event. -} - -void setup() { - Serial.begin(9600); - Serial.println(F("Starting TTN Muc Cayenne Sensor 1")); - - while(!bme.begin()) - { - Serial.println("Could not find BME280 sensor!"); - delay(1000); - } - - - - // LMIC init - os_init(); - - // Reset the MAC state. Session and pending data transfers will be discarded. - LMIC_reset(); - - // Let LMIC compensate for +/- 1% clock error - LMIC_setClockError(MAX_CLOCK_ERROR * 1 / 100); - - // Start job (sending automatically starts OTAA too) - do_send(&sendjob); -} - -void loop() { - os_runloop_once(); -}