Hi, I am new to the forum so please excuse me if this is has already been answered but I have searched both the forum and the LMIC lib for answers.
My Setup: I am using an esp32 and rfm95 with arduino to connect my nodes. The device trasnmits evey 30minutes and then goes back to sleep.
My Problem: Every time the device wakes up it takes 6 seconds for my message to send, is there a way to reduce the wait time of the LMIC lib, I see it only checks for joins every 2 seconds.
If someone can just point me in the right direction, that would be great.
Your device must not do a new join every time it wakes up, this would use up your usage allowance in no time and is simply not allowed.
A LoRaWAN device must retain state in between transmission; this is a bit harder to achieve on the ESP32 than more typical MCUs, but it can be done, and there are existing threads on it here.
Hi thanks for the reply. I am saving the old LMIC state before going to sleep, I was wondering if there was a way to disable the waiting for RX windows and to only try sending?
That would make the device non compliant and not a LoRaWAN capable device, which then should not be used on TTN. The V3 stack is more rigorous in enforcing and needing a more fully capable device. Indeed the forum is awash with instances where old loosely implemented devices (and specifically not handling downlinks correctly, if at all) that were tollerated by the NS under V2 no longer function under V3 and/or cause multiple (disruptive) downlinks/MAC commands etc.
A solution for that problem would be to implement the LMIC hal_sleep() and hal_checkTimer() functions properly. The hal_sleep() should put the MCU to sleep, and the hal_checkTimer() should setup a timer that wakes it up again by interrupt. In addition the GPIOs of the LoRa modem should also wake the CPU by interrupt. With that it is possible that the CPU enters low power mode for the wait time between TX and RX1/RX2.
The LMIC does, but the Arduino layer for LMIC does not. This was the reason for me not to use Arduino for my nodes working with STM32, where I used LMIC with an adapted HAL to support low power whenever the LMIC triggers that by calling hal_sleep(). Unfortunately I do not have such a ready to use example for ESP32. I’m not sure if the OP wants to go away from Arduino, which is for beginners a big step. The lmic-arduino community seems to be aware of that issue, there is a open discussion about low power on the arudino-lmic issues list: Low power example · Issue #533 · mcci-catena/arduino-lmic · GitHub
It there was more than one button, I’d have pressed it! This will hopefully expand the possibilities for using smaller 32-bit MCU’s which in these desperate times of MCU Unobtainium is sorely needed.
Extra for
or got ahead of yourself and skipped the --recurse-submodules you can fix things by running git submodule update --init