Hoihoi,
Ik ben bezig met een project waarbij ik gebruik maak van KPN LoRa. Op dit moment heb ik hiervoor een freemium account. Vanuit een ESP32-bord met een LoRa module probeer ik verbinding te maken door middel van een join request.
Ik heb met een RF scanner gecontroleerd en waargenomen dat mijn hardware werkt en een signaal uitstuurt. Toch komt er niets binnen in het KPN things portaal.
Ik programmeer de ESP32 vanuit visual studio code met de ESP-IDF. Ik kan echter nergens precies vinden hoe ik vanuit mijn C-code dit joinrequest moet formatteren.
De ene bron zegt dat ik de APP_EUI en DEV_EUI nodig heb, een andere bron zegt dat ik ook een appKey nodig heb.. ik weet het zo gauw niet meer.
Onderstaande codesnippet illustreert mijn aanpak. In de hoofdfunctie worden wat stappen gezet voor het ontvangen van de join-accept, maar gezien ik nog niets zie gebeuren in mijn things portal, kan ik daar toch nog niet mee bezig.
Wat gaat hier fout?
edit: ik had al behoorlijk wat speurwerk gedaan, en veel dingen al geprobeerd. Ik gebruik SF12 en ik zou coverage moeten hebben volgens de map. DevEUI = 0059AC00001B2797
const uint8_t DEV_EUI[8] = { 0xXX, 0xXX, 0xXX 0xXX, 0xXX, 0xXX, 0xXX, 0xXX };
const uint8_t JOIN_EUI[8] = { 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX };
uint8_t join_request[JOIN_REQUEST_SIZE];
// Construct the Join Request message
memcpy(join_request, JOIN_EUI, 8); // Copy JOIN_EUI
memcpy(join_request + 8, DEV_EUI, 8); // Copy DEV_EUI
uint16_t dev_nonce = rand() % 65536;
join_request[16] = (dev_nonce >> 8) & 0xFF;
join_request[17] = dev_nonce & 0xFF;
join_request[18] = 0x01; // Set to 0x01 for LoRaWAN 1.1
Lora_send_packet(join_request, JOIN_REQUEST_SIZE)
int lora_send_packet(uint8_t *buf, int size) {
// Idle mode before sending packet
lora_idle();
spi_write_reg(REG_FIFO_ADDR_PTR, 0);
// Write packet data to FIFO
for(int i = 0; i < size; i++)
spi_write_reg(REG_FIFO, *buf++);
// Set payload length
spi_write_reg(REG_PAYLOAD_LENGTH, size);
// Start transmission
spi_write_reg(REG_OP_MODE, MODE_LONG_RANGE_MODE | MODE_TX);
// Wait for transmission to complete or timeout
uint32_t start_time = time();
while (!(spi_read_reg(REG_IRQ_FLAGS) & IRQ_TX_DONE_MASK)) {
if ((time() - start_time) > TRANSMISSION_TIMEOUT_MS) {
spi_write_reg(REG_OP_MODE, MODE_LONG_RANGE_MODE | MODE_STDBY); // Put LoRa module back to standby mode
return -1; // Transmission failed
}
//delay_ms(10); // Adjust delay according to your application's timing requirements
}
// Clear IRQ flags
spi_write_reg(REG_IRQ_FLAGS, IRQ_TX_DONE_MASK);
return 1; // Transmission successful
}