GPS to Pulga

Dependencies:   Si1133 BME280

Committer:
brunnobbco
Date:
Fri Dec 11 18:59:00 2020 +0000
Revision:
26:1e1776201716
Parent:
24:595155aa83c3
Pulga_GPS

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pancotinho 24:595155aa83c3 1 #include "DummySensor.h"
pancotinho 24:595155aa83c3 2 using namespace events;
pancotinho 24:595155aa83c3 3
pancotinho 24:595155aa83c3 4 // Max payload size can be LORAMAC_PHY_MAXPAYLOAD.
pancotinho 24:595155aa83c3 5 // This example only communicates with much shorter messages (<30 bytes).
pancotinho 24:595155aa83c3 6 // If longer messages are used, these buffers must be changed accordingly.
pancotinho 24:595155aa83c3 7 uint8_t tx_buffer[30];
pancotinho 24:595155aa83c3 8 uint8_t rx_buffer[30];
pancotinho 24:595155aa83c3 9 int lora_cont=0;
pancotinho 24:595155aa83c3 10
pancotinho 24:595155aa83c3 11 /*
pancotinho 24:595155aa83c3 12 * Sets up an application dependent transmission timer in ms. Used only when Duty Cycling is off for testing
pancotinho 24:595155aa83c3 13 */
pancotinho 24:595155aa83c3 14 #define TX_TIMER 10000
pancotinho 24:595155aa83c3 15
pancotinho 24:595155aa83c3 16 /**
pancotinho 24:595155aa83c3 17 * Maximum number of events for the event queue.
pancotinho 24:595155aa83c3 18 * 10 is the safe number for the stack events, however, if application
pancotinho 24:595155aa83c3 19 * also uses the queue for whatever purposes, this number should be increased.
pancotinho 24:595155aa83c3 20 */
pancotinho 24:595155aa83c3 21 #define MAX_NUMBER_OF_EVENTS 10
pancotinho 24:595155aa83c3 22
pancotinho 24:595155aa83c3 23 /**
pancotinho 24:595155aa83c3 24 * Maximum number of retries for CONFIRMED messages before giving up
pancotinho 24:595155aa83c3 25 */
pancotinho 24:595155aa83c3 26 #define CONFIRMED_MSG_RETRY_COUNTER 3
pancotinho 24:595155aa83c3 27
pancotinho 24:595155aa83c3 28 /**
pancotinho 24:595155aa83c3 29 * Dummy pin for dummy sensor
pancotinho 24:595155aa83c3 30 */
pancotinho 24:595155aa83c3 31 #define PC_9 0
pancotinho 24:595155aa83c3 32
pancotinho 24:595155aa83c3 33 /**
pancotinho 24:595155aa83c3 34 * Dummy sensor class object
pancotinho 24:595155aa83c3 35 */
pancotinho 24:595155aa83c3 36 DS1820 ds1820(PC_9);
pancotinho 24:595155aa83c3 37
pancotinho 24:595155aa83c3 38
pancotinho 24:595155aa83c3 39 /**
pancotinho 24:595155aa83c3 40 * Sensors Variables
pancotinho 24:595155aa83c3 41 */
pancotinho 24:595155aa83c3 42
pancotinho 24:595155aa83c3 43 /**
pancotinho 24:595155aa83c3 44 * This event queue is the global event queue for both the
pancotinho 24:595155aa83c3 45 * application and stack. To conserve memory, the stack is designed to run
pancotinho 24:595155aa83c3 46 * in the same thread as the application and the application is responsible for
pancotinho 24:595155aa83c3 47 * providing an event queue to the stack that will be used for ISR deferment as
pancotinho 24:595155aa83c3 48 * well as application information event queuing.
pancotinho 24:595155aa83c3 49 */
pancotinho 24:595155aa83c3 50 static EventQueue ev_queue(MAX_NUMBER_OF_EVENTS *EVENTS_EVENT_SIZE);
pancotinho 24:595155aa83c3 51
pancotinho 24:595155aa83c3 52 /**
pancotinho 24:595155aa83c3 53 * Event handler.
pancotinho 24:595155aa83c3 54 *
pancotinho 24:595155aa83c3 55 * This will be passed to the LoRaWAN stack to queue events for the
pancotinho 24:595155aa83c3 56 * application which in turn drive the application.
pancotinho 24:595155aa83c3 57 */
pancotinho 24:595155aa83c3 58 static void lora_event_handler(lorawan_event_t event);
pancotinho 24:595155aa83c3 59
pancotinho 24:595155aa83c3 60 /**
pancotinho 24:595155aa83c3 61 * Constructing Mbed LoRaWANInterface and passing it the radio object from lora_radio_helper.
pancotinho 24:595155aa83c3 62 */
pancotinho 24:595155aa83c3 63 static LoRaWANInterface lorawan(radio);
pancotinho 24:595155aa83c3 64
pancotinho 24:595155aa83c3 65 /**
pancotinho 24:595155aa83c3 66 * Application specific callbacks
pancotinho 24:595155aa83c3 67 */
pancotinho 24:595155aa83c3 68 static lorawan_app_callbacks_t callbacks;
pancotinho 24:595155aa83c3 69
pancotinho 24:595155aa83c3 70 /**
pancotinho 24:595155aa83c3 71 * Entry point for application
pancotinho 24:595155aa83c3 72 */
pancotinho 24:595155aa83c3 73
pancotinho 24:595155aa83c3 74
pancotinho 24:595155aa83c3 75
pancotinho 24:595155aa83c3 76
pancotinho 24:595155aa83c3 77 /**
pancotinho 24:595155aa83c3 78 * Sends a message to the Network Server
pancotinho 24:595155aa83c3 79 */
pancotinho 24:595155aa83c3 80 static void send_message()
pancotinho 24:595155aa83c3 81 {
pancotinho 24:595155aa83c3 82 uint16_t packet_len;
pancotinho 24:595155aa83c3 83 int16_t retcode;
pancotinho 24:595155aa83c3 84 int32_t sensor_value;
pancotinho 24:595155aa83c3 85
pancotinho 24:595155aa83c3 86 if (lora_cont<1024){
pancotinho 24:595155aa83c3 87 packet_len = sprintf((char *) tx_buffer, "\r\n Buffering \r\n");
pancotinho 24:595155aa83c3 88 retcode = lorawan.send(MBED_CONF_LORA_APP_PORT, tx_buffer, packet_len,
pancotinho 24:595155aa83c3 89 MSG_UNCONFIRMED_FLAG);
pancotinho 24:595155aa83c3 90
pancotinho 24:595155aa83c3 91 lora_cont=lora_cont+retcode;
pancotinho 24:595155aa83c3 92 }
pancotinho 24:595155aa83c3 93 else{
pancotinho 24:595155aa83c3 94
pancotinho 24:595155aa83c3 95 Sensor_Read(1);
pancotinho 24:595155aa83c3 96 GPS_Read();
pancotinho 24:595155aa83c3 97 printf("\r\n Temp Sensor Value = %f Lat = %d Long = %d \r\n", sensor_get_0, latitude, longitude);
pancotinho 24:595155aa83c3 98 packet_len = sprintf((char *) tx_buffer, "\r\n %f, %d, %d \r\n",
pancotinho 24:595155aa83c3 99 sensor_get_0, latitude, longitude);
pancotinho 24:595155aa83c3 100 retcode = lorawan.send(MBED_CONF_LORA_APP_PORT, tx_buffer, packet_len,
pancotinho 24:595155aa83c3 101 MSG_UNCONFIRMED_FLAG);
pancotinho 24:595155aa83c3 102 }
pancotinho 24:595155aa83c3 103
pancotinho 24:595155aa83c3 104 if (retcode < 0) {
pancotinho 24:595155aa83c3 105 retcode == LORAWAN_STATUS_WOULD_BLOCK ? printf("send - WOULD BLOCK\r\n")
pancotinho 24:595155aa83c3 106 : printf("\r\n send() - Error code %d \r\n", retcode);
pancotinho 24:595155aa83c3 107
pancotinho 24:595155aa83c3 108 if (retcode == LORAWAN_STATUS_WOULD_BLOCK) {
pancotinho 24:595155aa83c3 109 //retry in 3 seconds
pancotinho 24:595155aa83c3 110 if (MBED_CONF_LORA_DUTY_CYCLE_ON) {
pancotinho 24:595155aa83c3 111 ev_queue.call_in(3000, send_message);
pancotinho 24:595155aa83c3 112 }
pancotinho 24:595155aa83c3 113 }
pancotinho 24:595155aa83c3 114 return;
pancotinho 24:595155aa83c3 115 }
pancotinho 24:595155aa83c3 116
pancotinho 24:595155aa83c3 117 printf("\r\n %d bytes scheduled for transmission \r\n", retcode);
pancotinho 24:595155aa83c3 118 memset(tx_buffer, 0, sizeof(tx_buffer));
pancotinho 24:595155aa83c3 119 }
pancotinho 24:595155aa83c3 120
pancotinho 24:595155aa83c3 121 /**
pancotinho 24:595155aa83c3 122 * Receive a message from the Network Server
pancotinho 24:595155aa83c3 123 */
pancotinho 24:595155aa83c3 124 static void receive_message()
pancotinho 24:595155aa83c3 125 {
pancotinho 24:595155aa83c3 126 uint8_t port;
pancotinho 24:595155aa83c3 127 int flags;
pancotinho 24:595155aa83c3 128 int16_t retcode = lorawan.receive(rx_buffer, sizeof(rx_buffer), port, flags);
pancotinho 24:595155aa83c3 129
pancotinho 24:595155aa83c3 130 if (retcode < 0) {
pancotinho 24:595155aa83c3 131 printf("\r\n receive() - Error code %d \r\n", retcode);
pancotinho 24:595155aa83c3 132 return;
pancotinho 24:595155aa83c3 133 }
pancotinho 24:595155aa83c3 134
pancotinho 24:595155aa83c3 135 printf(" RX Data on port %u (%d bytes): ", port, retcode);
pancotinho 24:595155aa83c3 136 for (uint8_t i = 0; i < retcode; i++) {
pancotinho 24:595155aa83c3 137 printf("%02x ", rx_buffer[i]);
pancotinho 24:595155aa83c3 138 }
pancotinho 24:595155aa83c3 139 printf("\r\n");
pancotinho 24:595155aa83c3 140
pancotinho 24:595155aa83c3 141 memset(rx_buffer, 0, sizeof(rx_buffer));
pancotinho 24:595155aa83c3 142 }
pancotinho 24:595155aa83c3 143
pancotinho 24:595155aa83c3 144 /**
pancotinho 24:595155aa83c3 145 * Event handler
pancotinho 24:595155aa83c3 146 */
pancotinho 24:595155aa83c3 147 static void lora_event_handler(lorawan_event_t event)
pancotinho 24:595155aa83c3 148 {
pancotinho 24:595155aa83c3 149 switch (event) {
pancotinho 24:595155aa83c3 150 case CONNECTED:
pancotinho 24:595155aa83c3 151 printf("\r\n Connection - Successful \r\n");
pancotinho 24:595155aa83c3 152 if (MBED_CONF_LORA_DUTY_CYCLE_ON) {
pancotinho 24:595155aa83c3 153 send_message();
pancotinho 24:595155aa83c3 154 } else {
pancotinho 24:595155aa83c3 155 ev_queue.call_every(TX_TIMER, send_message);
pancotinho 24:595155aa83c3 156 }
pancotinho 24:595155aa83c3 157
pancotinho 24:595155aa83c3 158 break;
pancotinho 24:595155aa83c3 159 case DISCONNECTED:
pancotinho 24:595155aa83c3 160 ev_queue.break_dispatch();
pancotinho 24:595155aa83c3 161 printf("\r\n Disconnected Successfully \r\n");
pancotinho 24:595155aa83c3 162 break;
pancotinho 24:595155aa83c3 163 case TX_DONE:
pancotinho 24:595155aa83c3 164 printf("\r\n Message Sent to Network Server \r\n");
pancotinho 24:595155aa83c3 165 if (MBED_CONF_LORA_DUTY_CYCLE_ON) {
pancotinho 24:595155aa83c3 166 send_message();
pancotinho 24:595155aa83c3 167 }
pancotinho 24:595155aa83c3 168 break;
pancotinho 24:595155aa83c3 169 case TX_TIMEOUT:
pancotinho 24:595155aa83c3 170 printf("\r\n Transmission Error TX_Timeout");
pancotinho 24:595155aa83c3 171 case TX_ERROR:
pancotinho 24:595155aa83c3 172 printf("\r\n Transmission Error TX_Error");
pancotinho 24:595155aa83c3 173 case TX_CRYPTO_ERROR:
pancotinho 24:595155aa83c3 174 printf("\r\n Transmission Error TX_Crypto_Error");
pancotinho 24:595155aa83c3 175 case TX_SCHEDULING_ERROR:
pancotinho 24:595155aa83c3 176 printf("\r\n Transmission Error - EventCode = %d \r\n", event);
pancotinho 24:595155aa83c3 177 // try again
pancotinho 24:595155aa83c3 178 if (MBED_CONF_LORA_DUTY_CYCLE_ON) {
pancotinho 24:595155aa83c3 179 send_message();
pancotinho 24:595155aa83c3 180 }
pancotinho 24:595155aa83c3 181 break;
pancotinho 24:595155aa83c3 182 case RX_DONE:
pancotinho 24:595155aa83c3 183 printf("\r\n Received message from Network Server \r\n");
pancotinho 24:595155aa83c3 184 receive_message();
pancotinho 24:595155aa83c3 185 break;
pancotinho 24:595155aa83c3 186 case RX_TIMEOUT:
pancotinho 24:595155aa83c3 187 printf("\r\n Transmission Error RX_Timeout");
pancotinho 24:595155aa83c3 188 case RX_ERROR:
pancotinho 24:595155aa83c3 189 printf("\r\n Error in reception - Code = %d \r\n", event);
pancotinho 24:595155aa83c3 190 break;
pancotinho 24:595155aa83c3 191 case JOIN_FAILURE:
pancotinho 24:595155aa83c3 192 printf("\r\n OTAA Failed - Check Keys \r\n");
pancotinho 24:595155aa83c3 193 break;
pancotinho 24:595155aa83c3 194 case UPLINK_REQUIRED:
pancotinho 24:595155aa83c3 195 printf("\r\n Uplink required by NS \r\n");
pancotinho 24:595155aa83c3 196 if (MBED_CONF_LORA_DUTY_CYCLE_ON) {
pancotinho 24:595155aa83c3 197 send_message();
pancotinho 24:595155aa83c3 198 }
pancotinho 24:595155aa83c3 199 break;
pancotinho 24:595155aa83c3 200 default:
pancotinho 24:595155aa83c3 201 MBED_ASSERT("Unknown Event");
pancotinho 24:595155aa83c3 202 }
pancotinho 24:595155aa83c3 203 }
pancotinho 24:595155aa83c3 204
pancotinho 24:595155aa83c3 205 // EOF