Simple receiver application for SX127x radio.

Dependencies:   MbedJSONValue SX127x sx12xx_hal

Committer:
corymast
Date:
Wed Oct 16 22:36:06 2019 +0000
Revision:
4:fed69c9a3bbf
Parent:
3:cfbb4ffd0cbd
Added functionality for parsing sensor data.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
LoRaToolbox 0:f843ca4a8e98 1 #include "radio.h"
corymast 2:fef452211079 2 #include "MbedJSONValue/MbedJSONValue.h"
LoRaToolbox 0:f843ca4a8e98 3
LoRaToolbox 1:8cd5f8492271 4 // Semtech radio definitions for SX127x, SX126x and SX128x
LoRaToolbox 1:8cd5f8492271 5
LoRaToolbox 0:f843ca4a8e98 6 #if defined(SX127x_H)
LoRaToolbox 0:f843ca4a8e98 7 #define BW_KHZ 500
LoRaToolbox 1:8cd5f8492271 8 #define SPREADING_FACTOR 11
LoRaToolbox 1:8cd5f8492271 9 #define CF_HZ 912000000
LoRaToolbox 0:f843ca4a8e98 10 #elif defined(SX126x_H)
LoRaToolbox 0:f843ca4a8e98 11 #define BW_KHZ 500
LoRaToolbox 0:f843ca4a8e98 12 #define SPREADING_FACTOR 10
LoRaToolbox 0:f843ca4a8e98 13 #define CF_HZ 913000000
LoRaToolbox 0:f843ca4a8e98 14 #elif defined(SX128x_H)
LoRaToolbox 0:f843ca4a8e98 15 #define BW_KHZ 200
LoRaToolbox 0:f843ca4a8e98 16 #define SPREADING_FACTOR 7
LoRaToolbox 0:f843ca4a8e98 17 #define CF_HZ 2487000000
LoRaToolbox 0:f843ca4a8e98 18 #endif
LoRaToolbox 0:f843ca4a8e98 19
LoRaToolbox 0:f843ca4a8e98 20 DigitalOut myled(LED1);
LoRaToolbox 0:f843ca4a8e98 21
LoRaToolbox 0:f843ca4a8e98 22 /**********************************************************************/
LoRaToolbox 0:f843ca4a8e98 23
LoRaToolbox 0:f843ca4a8e98 24 void txDoneCB()
LoRaToolbox 0:f843ca4a8e98 25 {
LoRaToolbox 0:f843ca4a8e98 26 }
LoRaToolbox 0:f843ca4a8e98 27
LoRaToolbox 0:f843ca4a8e98 28 void rxDoneCB(uint8_t size, float rssi, float snr)
LoRaToolbox 0:f843ca4a8e98 29 {
corymast 2:fef452211079 30 MbedJSONValue message;
LoRaToolbox 0:f843ca4a8e98 31 printf("%.1fdBm snr:%.1fdB\t", rssi, snr);
LoRaToolbox 0:f843ca4a8e98 32
LoRaToolbox 0:f843ca4a8e98 33 myled.write(!myled.read()); // toggle LED
LoRaToolbox 0:f843ca4a8e98 34
corymast 2:fef452211079 35 //Determine if the packet is JSON formatted by checking first character
corymast 2:fef452211079 36 if(Radio::radio.rx_buf[0] == '{')
corymast 2:fef452211079 37 {
corymast 2:fef452211079 38 printf("JSON Format!\r\n");
corymast 2:fef452211079 39 // Display payload packet information
corymast 2:fef452211079 40 char* json = (char*)Radio::radio.rx_buf;
corymast 3:cfbb4ffd0cbd 41 printf("Message: %s\r\n", json);
corymast 2:fef452211079 42 parse(message, (char*)json);
corymast 2:fef452211079 43 printf("\r\n\n");
corymast 3:cfbb4ffd0cbd 44 if(message.hasMember("btn_count"))
corymast 3:cfbb4ffd0cbd 45 {
corymast 3:cfbb4ffd0cbd 46 printf("btn_count: %d\r\n", message["btn_count"].get<int>());
corymast 3:cfbb4ffd0cbd 47 }
corymast 3:cfbb4ffd0cbd 48 if(message.hasMember("btn_timer"))
corymast 3:cfbb4ffd0cbd 49 {
corymast 3:cfbb4ffd0cbd 50 printf("btn_timer: %f\r\n", message["btn_timer"].get<double>());
corymast 3:cfbb4ffd0cbd 51 }
corymast 4:fed69c9a3bbf 52 if(message.hasMember("light_val"))
corymast 4:fed69c9a3bbf 53 {
corymast 4:fed69c9a3bbf 54 printf("light_val: %f\r\n", message["light_val"].get<double>());
corymast 4:fed69c9a3bbf 55 }
corymast 4:fed69c9a3bbf 56 if(message.hasMember("light_resistance"))
corymast 4:fed69c9a3bbf 57 {
corymast 4:fed69c9a3bbf 58 printf("light_resistance: %f\r\n", message["light_resistance"].get<double>());
corymast 4:fed69c9a3bbf 59 }
corymast 4:fed69c9a3bbf 60 if(message.hasMember("temperature"))
corymast 4:fed69c9a3bbf 61 {
corymast 4:fed69c9a3bbf 62 printf("temperature: %f\r\n", message["temperature"].get<double>());
corymast 4:fed69c9a3bbf 63 }
corymast 3:cfbb4ffd0cbd 64 if(message.hasMember("my_str"))
corymast 3:cfbb4ffd0cbd 65 {
corymast 3:cfbb4ffd0cbd 66 printf("my_str: %s\r\n", message["my_str"].get<string>().c_str());
corymast 3:cfbb4ffd0cbd 67 }
corymast 3:cfbb4ffd0cbd 68 if(message.hasMember("my_boolean"))
corymast 3:cfbb4ffd0cbd 69 {
corymast 3:cfbb4ffd0cbd 70 printf("my_bool: %s\r\n", message["my_boolean"].get<bool>() ? "true" : "false");
corymast 3:cfbb4ffd0cbd 71 }
corymast 2:fef452211079 72 printf("\r\n\n");
LoRaToolbox 0:f843ca4a8e98 73 }
corymast 2:fef452211079 74 else
corymast 2:fef452211079 75 {
corymast 2:fef452211079 76 printf("Byte Format!\r\n");
corymast 2:fef452211079 77 // Display payload packet information
corymast 2:fef452211079 78 for (int i = 0; i < size; i++) {
corymast 2:fef452211079 79 printf("%02d ", Radio::radio.rx_buf[i]); // Changed to "%02d \n"
corymast 2:fef452211079 80 }
corymast 2:fef452211079 81 printf("\r\n\n");
corymast 2:fef452211079 82 }
corymast 2:fef452211079 83
LoRaToolbox 0:f843ca4a8e98 84 }
LoRaToolbox 0:f843ca4a8e98 85
LoRaToolbox 0:f843ca4a8e98 86 const RadioEvents_t rev = {
LoRaToolbox 0:f843ca4a8e98 87 /* Dio0_top_half */ NULL,
LoRaToolbox 0:f843ca4a8e98 88 /* TxDone_topHalf */ NULL,
LoRaToolbox 0:f843ca4a8e98 89 /* TxDone_botHalf */ txDoneCB,
LoRaToolbox 0:f843ca4a8e98 90 /* TxTimeout */ NULL,
LoRaToolbox 0:f843ca4a8e98 91 /* RxDone */ rxDoneCB,
LoRaToolbox 0:f843ca4a8e98 92 /* RxTimeout */ NULL,
LoRaToolbox 0:f843ca4a8e98 93 /* RxError */ NULL,
LoRaToolbox 0:f843ca4a8e98 94 /* FhssChangeChannel */NULL,
LoRaToolbox 0:f843ca4a8e98 95 /* CadDone */ NULL
LoRaToolbox 0:f843ca4a8e98 96 };
LoRaToolbox 0:f843ca4a8e98 97
LoRaToolbox 0:f843ca4a8e98 98 int main()
LoRaToolbox 0:f843ca4a8e98 99 {
LoRaToolbox 1:8cd5f8492271 100
corymast 2:fef452211079 101 // POR & Reset debug message
LoRaToolbox 0:f843ca4a8e98 102 printf("\r\nreset-rx\r\n");
LoRaToolbox 0:f843ca4a8e98 103
LoRaToolbox 0:f843ca4a8e98 104 Radio::Init(&rev);
LoRaToolbox 0:f843ca4a8e98 105
LoRaToolbox 1:8cd5f8492271 106 // Radio Start
LoRaToolbox 1:8cd5f8492271 107
LoRaToolbox 0:f843ca4a8e98 108 Radio::Standby();
LoRaToolbox 0:f843ca4a8e98 109 Radio::LoRaModemConfig(BW_KHZ, SPREADING_FACTOR, 1);
LoRaToolbox 0:f843ca4a8e98 110 Radio::SetChannel(CF_HZ);
LoRaToolbox 0:f843ca4a8e98 111
LoRaToolbox 1:8cd5f8492271 112 // preambleLen, fixLen, crcOn, invIQ
LoRaToolbox 1:8cd5f8492271 113
LoRaToolbox 0:f843ca4a8e98 114 Radio::LoRaPacketConfig(8, false, true, false);
LoRaToolbox 1:8cd5f8492271 115
LoRaToolbox 1:8cd5f8492271 116 // Start radio receiver, wait for packets from transmitter
LoRaToolbox 0:f843ca4a8e98 117
LoRaToolbox 0:f843ca4a8e98 118 Radio::Rx(0);
LoRaToolbox 0:f843ca4a8e98 119
LoRaToolbox 0:f843ca4a8e98 120 for (;;) {
LoRaToolbox 0:f843ca4a8e98 121 Radio::service();
LoRaToolbox 0:f843ca4a8e98 122 }
LoRaToolbox 0:f843ca4a8e98 123 }