The test are based on the Arduino library for SX12XX https://github.com/StuartsProjects/SX12XX-LoRa
Add the Espressif toolchain https://dl.espressif.com/dl/package_esp32_index.json
into Preferences > URL of Board manager
Select the ESP32 board into Tools > Board type > ESP32 Arduino > ESP32 Dev Module
Download the lib https://codeload.github.com/StuartsProjects/SX12XX-LoRa/zip/refs/heads/master
Install the lib with Sketch > Include Lib > Add Zip Lib
Set the serial console to 115200 8N1
.
#define MIKROBUS0_LAMBDA80
//#define MIKROBUS0_E28
//#define MIKROBUS1_LAMBDA80
//#define MIKROBUS1_E28
#include "Settings.h" //include the setiings file, frequencies, LoRa settings etc
...
By default, the SettingsModulation.h
file is compatible with the Multitech 2G4 MCard parameters.
Open the sketch TinyGS_2G4_LoRa_Transmitter_Detailed_Setup
Build and download on the TinyGS 2G4 station which play the role of transmitter.
Open the Arduino console.
The trace is:
MAC Address: 44E399A4AE30
18:18:15 Apr 15 2024
V1.1
TinyGS 2G4 :: LoRa_Transmitter_Detailed_Setup Starting
LoRa Device found
SX1280
SX1280,PACKET_TYPE_LORA,2483499776hz,SF12,BW812500,CR4:9
SX1280,PACKET_TYPE_LORA,Preamble_8,Explicit,PayloadL_255,CRC_ON,IQ_NORMAL,LNAgain_LowPowerRX
Reg 0 1 2 3 4 5 6 7 8 9 A B C D E F
0x900 80 FF C9 4D 20 FA BF 09 E8 80 00 00 00 00 00 61
0x910 9C 44 00 00 00 19 00 00 00 19 87 65 43 21 7F FF
0x920 FF FF FF 00 70 32 0A 50 C0 80 00 C0 5F D2 8F 0A
0x930 00 C0 00 00 00 24 00 21 68 B0 30 0D 01 52 C6 08
0x940 58 0B 32 0A 14 24 6A 96 00 18 00 00 00 00 00 00
0x950 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x960 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FF FF
0x970 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 04
0x980 00 0B 18 70 00 00 00 4C 00 F0 64 00 00 00 00 00
0x990 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x9A0 00 08 EC B8 9D 8A E6 66 04 00 00 00 00 00 00 00
0x9B0 00 08 EC B8 9D 8A E6 66 04 00 00 00 00 00 00 00
0x9C0 00 16 00 3F E8 01 FF FF FF FF 5E 4D 25 10 55 55
0x9D0 55 55 55 55 55 55 55 55 55 55 55 55 55 00 00 00
0x9E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x9F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Transmitter ready
0dBm Packet> 44E399A4AE30;fcnt:0,pow:0 BytesSent,25 CRC,2710 TransmitTime,229mS PacketsSent,1
1dBm Packet> 44E399A4AE30;fcnt:1,pow:1 BytesSent,25 CRC,8F50 TransmitTime,228mS PacketsSent,2
2dBm Packet> 44E399A4AE30;fcnt:2,pow:2 BytesSent,25 CRC,67B1 TransmitTime,228mS PacketsSent,3
3dBm Packet> 44E399A4AE30;fcnt:3,pow:3 BytesSent,25 CRC,CFF1 TransmitTime,228mS PacketsSent,4
4dBm Packet> 44E399A4AE30;fcnt:4,pow:4 BytesSent,25 CRC,A652 TransmitTime,228mS PacketsSent,5
5dBm Packet> 44E399A4AE30;fcnt:5,pow:5 BytesSent,25 CRC,E12 TransmitTime,228mS PacketsSent,6
6dBm Packet> 44E399A4AE30;fcnt:6,pow:6 BytesSent,25 CRC,E6F3 TransmitTime,228mS PacketsSent,7
7dBm Packet> 44E399A4AE30;fcnt:7,pow:7 BytesSent,25 CRC,4EB3 TransmitTime,228mS PacketsSent,8
8dBm Packet> 44E399A4AE30;fcnt:8,pow:8 BytesSent,25 CRC,35B5 TransmitTime,228mS PacketsSent,9
9dBm Packet> 44E399A4AE30;fcnt:9,pow:9 BytesSent,25 CRC,9DF5 TransmitTime,228mS PacketsSent,10
10dBm Packet> 44E399A4AE30;fcnt:10,pow:10 BytesSent,27 CRC,BB40 TransmitTime,239mS PacketsSent,11
0dBm Packet> 44E399A4AE30;fcnt:11,pow:0 BytesSent,26 CRC,DCF3 TransmitTime,233mS PacketsSent,12
1dBm Packet> 44E399A4AE30;fcnt:12,pow:1 BytesSent,26 CRC,1450 TransmitTime,233mS PacketsSent,13
2dBm Packet> 44E399A4AE30;fcnt:13,pow:2 BytesSent,26 CRC,9C52 TransmitTime,233mS PacketsSent,14
Close the console
Open the sketch TinyGS_2G4_LoRa_Receiver_Detailed_Setup
Build and download on the TinyGS 2G4 station which play the role of receiver.
Open the Arduino console.
Power the transmitter station with an USB cable.
The trace is:
MAC Address: 80B825FB0BAC
TinyGS 2G4 :: LoRa_Receiver_Detailed_Setup Starting
LoRa Device found
SX1280,PACKET_TYPE_LORA,2483499776hz,SF12,BW812500,CR4:9
SX1280,PACKET_TYPE_LORA,Preamble_8,Explicit,PayloadL_255,CRC_ON,IQ_NORMAL,LNAgain_LowPowerRX
Reg 0 1 2 3 4 5 6 7 8 9 A B C D E F
0x900 80 FF C9 4D 20 FA BF 09 E8 80 00 00 00 00 00 61
0x910 9C 44 00 00 00 19 00 00 00 19 87 65 43 21 7F FF
0x920 FF FF FF 00 70 32 0A 50 C0 80 00 C0 5F D2 8F 0A
0x930 00 C0 00 00 00 24 00 21 68 B0 30 0D 01 52 C6 08
0x940 58 0B 32 0A 14 24 6A 96 00 18 00 00 00 00 00 00
0x950 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x960 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FF FF
0x970 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 04
0x980 00 0B 18 70 00 00 00 4C 00 F0 64 00 00 00 00 00
0x990 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x9A0 00 08 EC B8 9D 8A E6 66 04 00 00 00 00 00 00 00
0x9B0 00 08 EC B8 9D 8A E6 66 04 00 00 00 00 00 00 00
0x9C0 00 16 00 3F E8 01 FF FF FF FF 5E 4D 25 10 55 55
0x9D0 55 55 55 55 55 55 55 55 55 55 55 55 55 00 00 00
0x9E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x9F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Receiver ready - RXBUFFER_SIZE 255
4s 44E399A4AE30;fcnt:0,pow:0,CRC,2710,RSSI,-53dBm,SNR,7dB,Length,25,Packets,1,Errors,0,IRQreg,8012
5s 44E399A4AE30;fcnt:1,pow:1,CRC,8F50,RSSI,-52dBm,SNR,7dB,Length,25,Packets,2,Errors,0,IRQreg,8012
7s 44E399A4AE30;fcnt:2,pow:2,CRC,67B1,RSSI,-51dBm,SNR,6dB,Length,25,Packets,3,Errors,0,IRQreg,8012
8s 44E399A4AE30;fcnt:3,pow:3,CRC,CFF1,RSSI,-49dBm,SNR,7dB,Length,25,Packets,4,Errors,0,IRQreg,8012
9s 44E399A4AE30;fcnt:4,pow:4,CRC,A652,RSSI,-49dBm,SNR,6dB,Length,25,Packets,5,Errors,0,IRQreg,8012
10s 44E399A4AE30;fcnt:5,pow:5,CRC,E12,RSSI,-49dBm,SNR,7dB,Length,25,Packets,6,Errors,0,IRQreg,8012
12s 44E399A4AE30;fcnt:6,pow:6,CRC,E6F3,RSSI,-47dBm,SNR,5dB,Length,25,Packets,7,Errors,0,IRQreg,8012
13s 44E399A4AE30;fcnt:7,pow:7,CRC,4EB3,RSSI,-46dBm,SNR,6dB,Length,25,Packets,8,Errors,0,IRQreg,8012
14s 44E399A4AE30;fcnt:8,pow:8,CRC,35B5,RSSI,-46dBm,SNR,6dB,Length,25,Packets,9,Errors,0,IRQreg,8012
15s 44E399A4AE30;fcnt:9,pow:9,CRC,9DF5,RSSI,-45dBm,SNR,6dB,Length,25,Packets,10,Errors,0,IRQreg,8012
16s 44E399A4AE30;fcnt:10,pow:10,CRC,BB40,RSSI,-44dBm,SNR,5dB,Length,27,Packets,11,Errors,0,IRQreg,8012
18s 44E399A4AE30;fcnt:11,pow:0,CRC,DCF3,RSSI,-52dBm,SNR,7dB,Length,26,Packets,12,Errors,0,IRQreg,8012
19s 44E399A4AE30;fcnt:12,pow:1,CRC,1450,RSSI,-56dBm,SNR,6dB,Length,26,Packets,13,Errors,0,IRQreg,8012
20s 44E399A4AE30;fcnt:13,pow:2,CRC,9C52,RSSI,-55dBm,SNR,6dB,Length,26,Packets,14,Errors,0,IRQreg,8012
21s 44E399A4AE30;fcnt:14,pow:3,CRC,9537,RSSI,-60dBm,SNR,5dB,Length,26,Packets,15,Errors,0,IRQreg,8012
23s 44E399A4AE30;fcnt:15,pow:4,CRC,5DB1,RSSI,-57dBm,SNR,6dB,Length,26,Packets,16,Errors,0,IRQreg,8012
Build and download TinyGS_2G4_LoRa_Transmitter_Detailed_Setup
on a third TinyGS 2G4 station which play the role of transmitter.
Observe the frame collisions between the two boards 44E399A4AE30
and 84156DC63C94
.
2s 44E399A4AE30;fcnt:20,pow:9,CRC,3DCE,RSSI,-32dBm,SNR,6dB,Length,26,Packets,1,Errors,0,IRQreg,8012
3s 44E399A4AE30;fcnt:21,pow:10,CRC,D1D7,RSSI,-31dBm,SNR,6dB,Length,27,Packets,2,Errors,0,IRQreg,8012
4s PacketError,RSSI,-39dBm,SNR,0dB,Length,27,Packets,2,Errors,1,IRQreg,8052,IRQ_RX_DONE,IRQ_HEADER_VALID,IRQ_CRC_ERROR,IRQ_PREAMBLE_DETECTED
6s 44E399A4AE30;fcnt:23,pow:1,CRC,6444,RSSI,-39dBm,SNR,6dB,Length,26,Packets,3,Errors,1,IRQreg,8012
7s 44E399A4AE30;fcnt:24,pow:2,CRC,4D63,RSSI,-38dBm,SNR,7dB,Length,26,Packets,4,Errors,1,IRQreg,8012
8s 44E399A4AE30;fcnt:25,pow:3,CRC,E523,RSSI,-37dBm,SNR,7dB,Length,26,Packets,5,Errors,1,IRQreg,8012
9s 44E399A4AE30;fcnt:26,pow:4,CRC,4D46,RSSI,-37dBm,SNR,7dB,Length,26,Packets,6,Errors,1,IRQreg,8012
11s PacketError,RSSI,-35dBm,SNR,0dB,Length,26,Packets,6,Errors,2,IRQreg,8052,IRQ_RX_DONE,IRQ_HEADER_VALID,IRQ_CRC_ERROR,IRQ_PREAMBLE_DETECTED
12s PacketError,RSSI,-34dBm,SNR,2dB,Length,26,Packets,6,Errors,3,IRQreg,8052,IRQ_RX_DONE,IRQ_HEADER_VALID,IRQ_CRC_ERROR,IRQ_PREAMBLE_DETECTED
13s 84156DC63C94;fcnt:72,pow:6,CRC,CCBE,RSSI,-29dBm,SNR,2dB,Length,26,Packets,7,Errors,3,IRQreg,8012
14s 84156DC63C94;fcnt:73,pow:7,CRC,64FE,RSSI,-28dBm,SNR,0dB,Length,26,Packets,8,Errors,3,IRQreg,8012
16s PacketError,RSSI,-52dBm,SNR,-2dB,Length,26,Packets,8,Errors,4,IRQreg,8052,IRQ_RX_DONE,IRQ_HEADER_VALID,IRQ_CRC_ERROR,IRQ_PREAMBLE_DETECTED
17s PacketError,RSSI,-51dBm,SNR,-1dB,Length,26,Packets,8,Errors,5,IRQreg,8052,IRQ_RX_DONE,IRQ_HEADER_VALID,IRQ_CRC_ERROR,IRQ_PREAMBLE_DETECTED
18s 84156DC63C94;fcnt:76,pow:10,CRC,669,RSSI,-49dBm,SNR,5dB,Length,27,Packets,9,Errors,5,IRQreg,8012
19s PacketError,RSSI,-51dBm,SNR,-1dB,Length,26,Packets,9,Errors,6,IRQreg,8052,IRQ_RX_DONE,IRQ_HEADER_VALID,IRQ_CRC_ERROR,IRQ_PREAMBLE_DETECTED
21s PacketError,RSSI,-51dBm,SNR,-1dB,Length,26,Packets,9,Errors,7,IRQreg,8052,IRQ_RX_DONE,IRQ_HEADER_VALID,IRQ_CRC_ERROR,IRQ_PREAMBLE_DETECTED
22s PacketError,RSSI,-36dBm,SNR,0dB,Length,26,Packets,9,Errors,8,IRQreg,8052,IRQ_RX_DONE,IRQ_HEADER_VALID,IRQ_CRC_ERROR,IRQ_PREAMBLE_DETECTED
23s PacketError,RSSI,-35dBm,SNR,0dB,Length,26,Packets,9,Errors,9,IRQreg,8052,IRQ_RX_DONE,IRQ_HEADER_VALID,IRQ_CRC_ERROR,IRQ_PREAMBLE_DETECTED
24s PacketError,RSSI,-35dBm,SNR,-1dB,Length,26,Packets,9,Errors,10,IRQreg,8052,IRQ_RX_DONE,IRQ_HEADER_VALID,IRQ_CRC_ERROR,IRQ_PREAMBLE_DETECTED
25s PacketError,RSSI,-52dBm,SNR,-2dB,Length,26,Packets,9,Errors,11,IRQreg,8052,IRQ_RX_DONE,IRQ_HEADER_VALID,IRQ_CRC_ERROR,IRQ_PREAMBLE_DETECTED
27s PacketError,RSSI,-31dBm,SNR,0dB,Length,26,Packets,9,Errors,12,IRQreg,8052,IRQ_RX_DONE,IRQ_HEADER_VALID,IRQ_CRC_ERROR,IRQ_PREAMBLE_DETECTED
28s PacketError,RSSI,-31dBm,SNR,-1dB,Length,26,Packets,9,Errors,13,IRQreg,8052,IRQ_RX_DONE,IRQ_HEADER_VALID,IRQ_CRC_ERROR,IRQ_PREAMBLE_DETECTED
29s 84156DC63C94;fcnt:85,pow:8,CRC,EDF6,RSSI,-50dBm,SNR,0dB,Length,26,Packets,10,Errors,13,IRQreg,8012
30s PacketError,RSSI,-50dBm,SNR,0dB,Length,26,Packets,10,Errors,14,IRQreg,8052,IRQ_RX_DONE,IRQ_HEADER_VALID,IRQ_CRC_ERROR,IRQ_PREAMBLE_DETECTED
32s 84156DC63C94;fcnt:87,pow:10,CRC,D9EE,RSSI,-29dBm,SNR,5dB,Length,27,Packets,11,Errors,14,IRQreg,8012
33s PacketError,RSSI,-39dBm,SNR,-1dB,Length,26,Packets,11,Errors,15,IRQreg,8052,IRQ_RX_DONE,IRQ_HEADER_VALID,IRQ_CRC_ERROR,IRQ_PREAMBLE_DETECTED
34s PacketError,RSSI,-37dBm,SNR,-1dB,Length,26,Packets,11,Errors,16,IRQreg,8052,IRQ_RX_DONE,IRQ_HEADER_VALID,IRQ_CRC_ERROR,IRQ_PREAMBLE_DETECTED
35s PacketError,RSSI,-36dBm,SNR,-1dB,Length,26,Packets,11,Errors,17,IRQreg,8052,IRQ_RX_DONE,IRQ_HEADER_VALID,IRQ_CRC_ERROR,IRQ_PREAMBLE_DETECTED
37s 84156DC63C94;fcnt:91,pow:3,CRC,DA88,RSSI,-33dBm,SNR,3dB,Length,26,Packets,12,Errors,17,IRQreg,8012
38s PacketError,RSSI,-35dBm,SNR,-1dB,Length,26,Packets,12,Errors,18,IRQreg,8052,IRQ_RX_DONE,IRQ_HEADER_VALID,IRQ_CRC_ERROR,IRQ_PREAMBLE_DETECTED
39s 84156DC63C94;fcnt:93,pow:5,CRC,DAAD,RSSI,-31dBm,SNR,4dB,Length,26,Packets,13,Errors,18,IRQreg,8012
40s 84156DC63C94;fcnt:94,pow:6,CRC,F38A,RSSI,-51dBm,SNR,-1dB,Length,26,Packets,14,Errors,18,IRQreg,8012
42s 84156DC63C94;fcnt:95,pow:7,CRC,5BCA,RSSI,-29dBm,SNR,0dB,Length,26,Packets,15,Errors,18,IRQreg,8012
43s PacketError,RSSI,-31dBm,SNR,-1dB,Length,26,Packets,15,Errors,19,IRQreg,8052,IRQ_RX_DONE,IRQ_HEADER_VALID,IRQ_CRC_ERROR,IRQ_PREAMBLE_DETECTED
44s 84156DC63C94;fcnt:97,pow:9,CRC,DAE7,RSSI,-27dBm,SNR,3dB,Length,26,Packets,16,Errors,19,IRQreg,8012
45s 84156DC63C94;fcnt:98,pow:10,CRC,EB0F,RSSI,-29dBm,SNR,4dB,Length,27,Packets,17,Errors,19,IRQreg,8012
46s PacketError,RSSI,-40dBm,SNR,3dB,Length,26,Packets,17,Errors,20,IRQreg,8052,IRQ_RX_DONE,IRQ_HEADER_VALID,IRQ_CRC_ERROR,IRQ_PREAMBLE_DETECTED
48s 84156DC63C94;fcnt:100,pow:1,CRC,AEAD,RSSI,-37dBm,SNR,0dB,Length,27,Packets,18,Errors,20,IRQreg,8012
49s 44E399A4AE30;fcnt:58,pow:3,CRC,C831,RSSI,-37dBm,SNR,7dB,Length,26,Packets,19,Errors,20,IRQreg,8012
50s 44E399A4AE30;fcnt:59,pow:4,CRC,B7,RSSI,-36dBm,SNR,7dB,Length,26,Packets,20,Errors,20,IRQreg,8012
51s 84156DC63C94;fcnt:0,pow:0,CRC,AD08,RSSI,-42dBm,SNR,5dB,Length,25,Packets,21,Errors,20,IRQreg,8012
51s 44E399A4AE30;fcnt:60,pow:5,CRC,F32F,RSSI,-34dBm,SNR,6dB,Length,26,Packets,22,Errors,20,IRQreg,8012
52s 84156DC63C94;fcnt:1,pow:1,CRC,548,RSSI,-42dBm,SNR,5dB,Length,25,Packets,23,Errors,20,IRQreg,8012
53s 44E399A4AE30;fcnt:61,pow:6,CRC,7B2D,RSSI,-34dBm,SNR,6dB,Length,26,Packets,24,Errors,20,IRQreg,8012
54s 84156DC63C94;fcnt:2,pow:2,CRC,EDA9,RSSI,-40dBm,SNR,7dB,Length,25,Packets,25,Errors,20,IRQreg,8012
54s 44E399A4AE30;fcnt:62,pow:7,CRC,B38E,RSSI,-33dBm,SNR,7dB,Length,26,Packets,26,Errors,20,IRQreg,8012
Add a true random delay into the TinyGS_2G4_LoRa_Transmitter_Detailed_Setup
at line 87: delay(packet_delay);
Observe the LoRa frame collisions.
- add a frame counter instead of 1234567890
- Test other examples from https://github.com/StuartsProjects/SX12XX-LoRa/tree/master/examples/SX128x_examples
- Test SX1280 examples from TinyGS RadioLib
- Add LoRaWAN-like frame