#include <lorawan.h>
// ABP Credentials
const char *devAddr = "669dd80b";
const char *nwkSKey = "669dd80b610dd1bba4a5b011e8002249";
const char *appSKey = "669dd80be09eafff281b1c0ee0fb66c0";
const unsigned long interval = 10000;
unsigned long previousMillis = 0;
unsigned int counter = 0;
const int soilSensorPin = 34;
const int tempSensorPin = 35; // Temperature sensor pin
int soilMoistureValue;
int temperatureValue;
char myStr[50];
char msg[100];
char outStr[255];
byte recvStatus = 0;
int channel;
#if defined (ARDUINO_ESP32_DEV)
const sRFM_pins RFM_pins = {
.CS = 2,
.RST = 18,
.DIO0 = 14,
.DIO1 = 12,
};
#elif defined (ARDUINO_B_L072Z_LRWAN1)
const sRFM_pins RFM_pins = {
.CS = PA15,
.RST = PC0,
.DIO0 = PB4,
.DIO1 = PB1,
};
#else
#error *** ONLY SUPPORTS LYNX32 AND B-L072Z-LRWAN1 ***
#endif
void setup() {
#if defined (ARDUINO_B_L072Z_LRWAN1)
SPI.setMOSI(PA7);
SPI.setMISO(PA6);
SPI.setSCLK(PB3);
SPI.begin();
#elif !defined (ARDUINO_ESP32_DEV)
#error *** ONLY SUPPORTS LYNX32 AND B-L072Z-LRWAN1 ***
#endif
Serial.begin(115200);
delay(2000);
if (!lora.init()) {
Serial.println("RFM95 not detected");
delay(5000);
return;
}
lora.setDeviceClass(CLASS_A);
lora.setDataRate(SF10BW125);
lora.setChannel(MULTI);
lora.setTxPower1(15);
lora.setNwkSKey(nwkSKey);
lora.setAppSKey(appSKey);
lora.setDevAddr(devAddr);
Serial.println("LoRaWAN setup completed");
}
void loop() {
if (millis() - previousMillis > interval) {
previousMillis = millis();
soilMoistureValue = analogRead(soilSensorPin);
temperatureValue = analogRead(tempSensorPin); // Read temperature sensor value
sprintf(myStr, "Lora Counter-%d", counter);
snprintf(msg, sizeof(msg), "{\"counter\": %d, \"soilMoisture\": %d, \"temperature\": %d}", counter, soilMoistureValue, temperatureValue);
Serial.print("Sending : ");
Serial.println(myStr);
Serial.println(msg);
lora.sendUplink(msg, strlen(msg), 0, 5);
Serial.println("Messages sent");
counter++;
channel = lora.getChannel();
Serial.print(F("Ch : "));
Serial.print(channel);
Serial.println(" ");
}
lora.update();
recvStatus = lora.readData(outStr);
if (recvStatus) {
int counter = 0;
for (int i = 0; i < recvStatus; i++) {
if (((outStr[i] >= 32) && (outStr[i] <= 126)) || (outStr[i] == 10) || (outStr[i] == 13))
counter++;
}
if (counter == recvStatus) {
Serial.print(F("Received String : "));
for (int i = 0; i < recvStatus; i++) {
Serial.print(char(outStr[i]));
}
} else {
Serial.print(F("Received Hex : "));
for (int i = 0; i < recvStatus; i++) {
Serial.print(outStr[i], HEX);
Serial.print(" ");
}
}
Serial.println();
}
}