So I’m testing my TTGO Lora32 board with the RIOT-OS operating system to connect to the The Things Network, and while at first I had some success, then out of the blue things didn’t worked anymore.
The code that I’m using is based on the standard RIOT-Os Loramac example but with supporting code for ABP instead of the OTA activation.
The code is available at this Github repository.
Since I saw no activity on any channel for the Lora transmission by using the RTLSDR dongle, I suspected that something was up.
The Arduino based code from for connecting to TTN using Lorawan worked fine, and so it excluded an issue with the hardware.
By going to RIOT-OS installation directory, under drivers and on the sx127x directory, I’ve enabled on th sx127x.c file the debug to 1, since enabling debug on the semtech_loramac.c file held no useful information:
#define ENABLE_DEBUG (1)
With debug enabled, lo and behold, at startup:
2019-01-22 14:11:02,993 - INFO # [sx127x] error: failed to initialize SPI_0 device (code -1) 2019-01-22 14:11:02,993 - INFO # [sx127x] error: failed to initialize SPI
This is rather strange since at the initial tests the sx127x was detected and worked.
The only thing that changed is that I periodically update the RIOT local repository, and checking my board definition with other ESP32 boards that have a sx127x transceiver, the way that the pins where declared were quite different from what I had initially.
So I’ve changed the way that the pins for the SPI and the sx127x peripheral where defined, and the result:
2019-01-22 14:28:00,847 - INFO # -> Node activation by: ABP 2019-01-22 14:28:00,847 - INFO # [sx127x] SPI_0 initialized with success 2019-01-22 14:28:00,848 - INFO # Set ABP information.
And the data arrives at TTN without any issue:
So either I had initially had the pins for SPI and the sx127x defined wrong or the latest RIOT build changed the way pins where defined.
A more complete example, working with multiple threads, is also available at this Github repository.