Bernd, OK & thanks. Iâll walk through.
Below code (sorry) - does that make sense? Or am I completely off base?
note: OTAA_DEVEUI, OTAA_APPEUI, OTAA_APPKEY deleted for this topicâŚ
#define DEEPSLEEP_PERIOD_MS (15000)
#define OTAA_BAND RAK_REGION_EU868
uint8_t OTAA_DEVEUI = {};
uint8_t OTAA_APPEUI = {};
uint8_t OTAA_APPKEY = {};
uint8_t collected_data[64] = {0};
void recvCallback(SERVICE_LORA_RECEIVE_T *data) {
if (data->BufferSize > 0) {
Serial.println(âSomething received!â);
for (int i = 0; i < data->BufferSize; i++) {
Serial.printf(â%xâ, data->Buffer[i]);
}
Serial.print(â\r\nâ);
}
}
void joinCallback(int32_t status) {
Serial.printf(âJoin status: %d\r\nâ, status);
}
void sendCallback(int32_t status) {
if (status == RAK_LORAMAC_STATUS_OK) {
Serial.println(âSuccessfully sentâ);
} else {
Serial.println(âSending failedâ);
}
Serial.printf(âGoing to deep sleep for %u msâŚ\r\nâ, DEEPSLEEP_PERIOD_MS);
api.system.sleep.all(DEEPSLEEP_PERIOD_MS);
}
void uplink_routine() {
const char *message = âHelloâ;
uint8_t data_len = strlen(message);
memcpy(collected_data, message, data_len);
Serial.println(âData Packet:â);
for (int i = 0; i < data_len; i++) {
Serial.printf(â0x%02X â, collected_data[i]);
}
Serial.println(ââ);
if (api.lorawan.send(data_len, collected_data, 2, false, 1)) {
Serial.println(âSending is requestedâ);
} else {
Serial.println(âSending failedâ);
Serial.printf(âSending failed, going to deep sleep for %u msâŚ\r\nâ, DEEPSLEEP_PERIOD_MS);
api.system.sleep.all(DEEPSLEEP_PERIOD_MS);
}
}
void setup() {
Serial.begin(115200);
delay(2000);
Serial.println(â------------------------------------------------------â);
Serial.println(âRAK3172 started or woke up!â);
Serial.println(â------------------------------------------------------â);
api.lorawan.registerRecvCallback(recvCallback);
api.lorawan.registerJoinCallback(joinCallback);
api.lorawan.registerSendCallback(sendCallback);
if (api.lorawan.njs.get() == 0) {
Serial.println(âFirst boot, initializing LoRaWANâŚâ);
if (!api.lorawan.appeui.set(OTAA_APPEUI, 8)) {
Serial.println(âLoRaWan OTAA - set application EUI is incorrect!â);
return;
}
if (!api.lorawan.appkey.set(OTAA_APPKEY, 16)) {
Serial.println(âLoRaWan OTAA - set application key is incorrect!â);
return;
}
if (!api.lorawan.deui.set(OTAA_DEVEUI, 8)) {
Serial.println(âLoRaWan OTAA - set device EUI is incorrect!â);
return;
}
if (!api.lorawan.band.set(OTAA_BAND)) {
Serial.println(âLoRaWan OTAA - set band is incorrect!â);
return;
}
if (!api.lorawan.deviceClass.set(RAK_LORA_CLASS_A)) {
Serial.println(âLoRaWan OTAA - set device class is incorrect!â);
return;
}
if (!api.lorawan.njm.set(RAK_LORA_OTAA)) {
Serial.println(âLoRaWan OTAA - set network join mode is incorrect!â);
return;
}
Serial.println(âJoining LoRaWAN networkâŚâ);
if (!api.lorawan.join()) {
Serial.println(âLoRaWan OTAA - join fail!â);
return;
}
time_t join_start_time = millis();
while (api.lorawan.njs.get() == 0) {
Serial.print(âWait for LoRaWAN joinâŚâ);
delay(10000);
if (millis() - join_start_time > 120000) {
Serial.println(âJoin failed, rebooting.â);
api.system.reboot();
}
}
Serial.println(âJoin success!â);
} else {
Serial.println(âDevice woke up and is already joined.â);
}
if (api.lorawan.njs.get() == 1) {
uplink_routine();
} else {
Serial.println(âNot joined, skipping uplink.â);
Serial.printf(âNot joined, going to deep sleep for %u msâŚ\r\nâ, DEEPSLEEP_PERIOD_MS);
api.system.sleep.all(DEEPSLEEP_PERIOD_MS);
}
}
void loop() {}