diff --git a/thingsnetwork/Sodaq_RN2483.cpp b/basic_sodaq_one/Sodaq_RN2483.cpp similarity index 100% rename from thingsnetwork/Sodaq_RN2483.cpp rename to basic_sodaq_one/Sodaq_RN2483.cpp diff --git a/thingsnetwork/Sodaq_RN2483.h b/basic_sodaq_one/Sodaq_RN2483.h similarity index 100% rename from thingsnetwork/Sodaq_RN2483.h rename to basic_sodaq_one/Sodaq_RN2483.h diff --git a/thingsnetwork/StringLiterals.h b/basic_sodaq_one/StringLiterals.h similarity index 100% rename from thingsnetwork/StringLiterals.h rename to basic_sodaq_one/StringLiterals.h diff --git a/thingsnetwork/Switchable_Device.cpp b/basic_sodaq_one/Switchable_Device.cpp similarity index 100% rename from thingsnetwork/Switchable_Device.cpp rename to basic_sodaq_one/Switchable_Device.cpp diff --git a/thingsnetwork/Switchable_Device.h b/basic_sodaq_one/Switchable_Device.h similarity index 100% rename from thingsnetwork/Switchable_Device.h rename to basic_sodaq_one/Switchable_Device.h diff --git a/thingsnetwork/Utils.h b/basic_sodaq_one/Utils.h similarity index 100% rename from thingsnetwork/Utils.h rename to basic_sodaq_one/Utils.h diff --git a/basic_sodaq_one/basic_sodaq_one.ino b/basic_sodaq_one/basic_sodaq_one.ino new file mode 100644 index 0000000..6596c37 --- /dev/null +++ b/basic_sodaq_one/basic_sodaq_one.ino @@ -0,0 +1,343 @@ +#include "Sodaq_RN2483.h" +#include "Arduino.h" + +#define debugSerial SerialUSB +#define loraSerial Serial1 + +/* The number of the device: 1,2,3,4 */ +#define deviceNo 1 + +#define beePin ENABLE_PIN_IO + +#define LOUDNESS_SENSOR 0 +#define LIGHT_SENSOR 2 +#define WATER_SENSOR 6 +#define BUZZER 8 +#define MAGNETIC_SWITCH 12 +#define TEMPERATURE 13 + +int loudness; + +void BLUE() { + digitalWrite(LED_RED, HIGH); + digitalWrite(LED_GREEN, HIGH); + digitalWrite(LED_BLUE, LOW); +} + +void RED() { + digitalWrite(LED_RED, LOW); + digitalWrite(LED_GREEN, HIGH); + digitalWrite(LED_BLUE, HIGH); +} + +void YELLOW() { + digitalWrite(LED_RED, LOW); + digitalWrite(LED_GREEN, LOW); + digitalWrite(LED_BLUE, HIGH); +} + +void WHITE() { + digitalWrite(LED_RED, LOW); + digitalWrite(LED_GREEN, LOW); + digitalWrite(LED_BLUE, LOW); +} + + +void GREEN() { + digitalWrite(LED_RED, HIGH); + digitalWrite(LED_GREEN, LOW); + digitalWrite(LED_BLUE, HIGH); +} + +void CLEAR() { + digitalWrite(LED_RED, HIGH); + digitalWrite(LED_GREEN, HIGH); + digitalWrite(LED_BLUE, HIGH); +} + +void blink(int length) { + switch(deviceNo) { + case 1: + BLUE(); + break; + case 2: + RED(); + break; + case 3: + GREEN(); + break; + case 4: + WHITE(); + break; + } + delay(length); + CLEAR(); +} + +void beep(int howlong) { + buzzOn(); + delay(howlong); + buzzOff(); +} + +void buzzOn() { + digitalWrite(BUZZER, HIGH); +} + +void buzzOff() { + digitalWrite(BUZZER, LOW); +} + + +void setupLED() { + pinMode(LED_RED, OUTPUT); + pinMode(LED_GREEN, OUTPUT); + pinMode(LED_BLUE, OUTPUT); +} + + +// OTAA +// Random numbers chosen + device id +uint8_t DevEUI[8] = { 0x9c, 0xd9, 0x0b, 0xb5, 0x2b, 0x6a, 0x1d, deviceNo }; + +uint8_t AppEUI[8] = { 0xd4, 0x16, 0xcd, 0x0b, 0x7b, 0xcf, 0x2d, 0x5c }; + +uint8_t AppKey[16] = { 0xa9, 0xbc, 0x8b, 0x6a, 0x81, 0x75, 0xf6, 0x33, +0xe0, 0xd6, 0x64, 0xd9, 0x2b, 0xcb, 0x13, 0x78 }; + +uint8_t counter; + +void setupLoRaOTAA(){ + if (LoRaBee.initOTA(loraSerial, DevEUI, AppEUI, AppKey, true)) + { + debugSerial.println("Communication to LoRaBEE successful."); + } + else + { + debugSerial.println("OTAA Setup failed!"); + } +} + +int readLoudness() +{ + return analogRead(LOUDNESS_SENSOR); +} + +int readLight() +{ + int sensorValue = analogRead(LIGHT_SENSOR); + return map(sensorValue, 11, 27333, 0, 413); +} + +void setupWater() { + pinMode(WATER_SENSOR, INPUT); +} + +boolean hasWater() +{ + if(digitalRead(WATER_SENSOR) == LOW) { + return true; + } else { + return false; + } +} + +void setupTemp() { + pinMode(TEMPERATURE, INPUT); +} + +float readTemp() +{ + float temperature; + int B=4250; //B value of the thermistor + float resistance; + int a; + + a=analogRead(TEMPERATURE); + resistance=(float)(1023-a)*10000/a; //get the resistance of the sensor; + temperature=1/(log(resistance/10000)/B+1/298.15)-273.15;//convert to temperature via datasheet ; + + return temperature; +} + + +void setupBuzzer() +{ + pinMode(BUZZER, OUTPUT); +} + + +void setupMagnet() +{ + pinMode(MAGNETIC_SWITCH, INPUT); +} + +boolean isMagnetic() +{ + if(digitalRead(MAGNETIC_SWITCH) == HIGH) + return true; + else + return false; +} + + + +void setup() { + //Power up the LoRaBEE - on loraone/sodaq one + pinMode(ENABLE_PIN_IO, OUTPUT); // ONE + + digitalWrite(beePin, HIGH); // ONE + delay(3000); + + /* Enable the pins 2/3, 6/7 and 8/9 */ + pinMode(11, OUTPUT); + digitalWrite(11, HIGH); + + while ((!SerialUSB) && (millis() < 10000)){ + // Wait 10 seconds for the Serial Monitor + } + + //Set baud rate + debugSerial.begin(57600); + loraSerial.begin(LoRaBee.getDefaultBaudRate()); + + // Debug output from LoRaBee + // LoRaBee.setDiag(debugSerial); // optional + + setupLED(); + blink(60); + + /* used for blinking */ + counter=0; + + loudness = 0; + + //connect to the LoRa Network + setupLoRa(); + + setupWater(); + setupBuzzer(); + setupMagnet(); + +} + +void setupLoRa(){ + setupLoRaOTAA(); +} + +void sendPacket(String packet){ + switch (LoRaBee.sendReqAck(1, (uint8_t*)packet.c_str(), packet.length(), 8)) + { + case NoError: + debugSerial.println("Successful transmission."); + break; + case NoResponse: + debugSerial.println("There was no response from the device."); + setupLoRa(); + break; + case Timeout: + debugSerial.println("Connection timed-out. Check your serial connection to the device! Sleeping for 20sec."); + delay(20000); + break; + case PayloadSizeError: + debugSerial.println("The size of the payload is greater than allowed. Transmission failed!"); + break; + case InternalError: + debugSerial.println("Oh No! This shouldn't happen. Something is really wrong! Try restarting the device!\r\nThe network connection will reset."); + setupLoRa(); + break; + case Busy: + debugSerial.println("The device is busy. Sleeping for 10 extra seconds."); + delay(10000); + break; + case NetworkFatalError: + debugSerial.println("There is a non-recoverable error with the network connection. You should re-connect.\r\nThe network connection will reset."); + setupLoRa(); + break; + case NotConnected: + debugSerial.println("The device is not connected to the network. Please connect to the network before attempting to send data.\r\nThe network connection will reset."); + setupLoRa(); + break; + case NoAcknowledgment: + debugSerial.println("There was no acknowledgment sent back!"); + // When you this message you are probaly out of range of the network. + break; + default: + break; + } +} + +void loop() { + + + /* Announce begin of code */ + blink(20); delay(50); + blink(20); delay(50); + blink(20); delay(50); + + loudness = readLoudness(); + + String data_loudness = String("loudness=" + String(loudness, DEC)); + debugSerial.println(data_loudness); + + String data_light = String("light=" + String(readLight(), 3)); + debugSerial.println(data_light); + + String data_temp = String("temp=" + String(readTemp(), 3)); + debugSerial.println(data_temp); + + + String data_water; + if(hasWater()) { + data_water = String("water=1"); + buzzOn(); + } else { + data_water = String("water=0"); + buzzOff(); + } + debugSerial.println(data_water); + + String data_magnet; + if(isMagnetic()) { + data_magnet = String("magnet=1"); + } else { + data_magnet = String("magnet=0"); + } + debugSerial.println(data_magnet); + + + sendPacket(data_loudness); + blink(20); delay(2980); + sendPacket(data_temp); + blink(20); delay(2980); + sendPacket(data_light); + blink(20); delay(2980); + sendPacket(data_water); + blink(20); delay(2980); + sendPacket(data_magnet); + + + /* Blink long after sending packet + if(counter >= 10) { + // Beep(20); + blink(20); + delay(10); + blink(20); + sendPacket(data_temp); + blink(500); + sendPacket(data_loudness); + blink(500); + sendPacket(data_light); + blink(500); + sendPacket(data_water); + blink(500); + sendPacket(data_magnet); + counter = 0; + } else { + blink(30); + counter++; + } + */ + + // delay(1000); +} diff --git a/thethingsnetwork/Sodaq_RN2483.cpp b/thethingsnetwork/Sodaq_RN2483.cpp new file mode 120000 index 0000000..5102a89 --- /dev/null +++ b/thethingsnetwork/Sodaq_RN2483.cpp @@ -0,0 +1 @@ +../Sodaq_RN2483.cpp \ No newline at end of file diff --git a/thethingsnetwork/Sodaq_RN2483.h b/thethingsnetwork/Sodaq_RN2483.h new file mode 120000 index 0000000..515c9e8 --- /dev/null +++ b/thethingsnetwork/Sodaq_RN2483.h @@ -0,0 +1 @@ +../Sodaq_RN2483.h \ No newline at end of file diff --git a/thethingsnetwork/StringLiterals.h b/thethingsnetwork/StringLiterals.h new file mode 120000 index 0000000..83e008e --- /dev/null +++ b/thethingsnetwork/StringLiterals.h @@ -0,0 +1 @@ +../StringLiterals.h \ No newline at end of file diff --git a/thethingsnetwork/Switchable_Device.cpp b/thethingsnetwork/Switchable_Device.cpp new file mode 120000 index 0000000..5fb5dda --- /dev/null +++ b/thethingsnetwork/Switchable_Device.cpp @@ -0,0 +1 @@ +../Switchable_Device.cpp \ No newline at end of file diff --git a/thethingsnetwork/Switchable_Device.h b/thethingsnetwork/Switchable_Device.h new file mode 120000 index 0000000..0c82682 --- /dev/null +++ b/thethingsnetwork/Switchable_Device.h @@ -0,0 +1 @@ +../Switchable_Device.h \ No newline at end of file diff --git a/thethingsnetwork/Utils.h b/thethingsnetwork/Utils.h new file mode 120000 index 0000000..70d35c6 --- /dev/null +++ b/thethingsnetwork/Utils.h @@ -0,0 +1 @@ +../Utils.h \ No newline at end of file diff --git a/thingsnetwork/thethingsnetwork.ino b/thethingsnetwork/thethingsnetwork.ino similarity index 98% rename from thingsnetwork/thethingsnetwork.ino rename to thethingsnetwork/thethingsnetwork.ino index a2b6f62..136b1ae 100644 --- a/thingsnetwork/thethingsnetwork.ino +++ b/thethingsnetwork/thethingsnetwork.ino @@ -319,8 +319,11 @@ void loop() { */ -// sendPacket(data_loudness); - blink(20); delay(2980); + int wait = 10000; + + debugSerial.println(String("wait=" + String(wait))); + sendPacket(data_loudness); + blink(20); delay(wait); /*sendPacket(data_temp);