Teste Flash

Dependencies:   pulga-lorawan-drv Si1133 BME280

Committer:
ruschigo
Date:
Tue Mar 02 18:22:16 2021 +0000
Revision:
65:4090220e19d2
Parent:
64:ed68ddac6360
Child:
66:f40f985a6b97
Test ok

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 0:7037ed05f54f 1 /**
mbed_official 0:7037ed05f54f 2 * Copyright (c) 2017, Arm Limited and affiliates.
mbed_official 0:7037ed05f54f 3 * SPDX-License-Identifier: Apache-2.0
mbed_official 0:7037ed05f54f 4 *
mbed_official 0:7037ed05f54f 5 * Licensed under the Apache License, Version 2.0 (the "License");
mbed_official 0:7037ed05f54f 6 * you may not use this file except in compliance with the License.
mbed_official 0:7037ed05f54f 7 * You may obtain a copy of the License at
mbed_official 0:7037ed05f54f 8 *
mbed_official 0:7037ed05f54f 9 * http://www.apache.org/licenses/LICENSE-2.0
mbed_official 0:7037ed05f54f 10 *
mbed_official 0:7037ed05f54f 11 * Unless required by applicable law or agreed to in writing, software
mbed_official 0:7037ed05f54f 12 * distributed under the License is distributed on an "AS IS" BASIS,
mbed_official 0:7037ed05f54f 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
mbed_official 0:7037ed05f54f 14 * See the License for the specific language governing permissions and
mbed_official 0:7037ed05f54f 15 * limitations under the License.
mbed_official 0:7037ed05f54f 16 */
mbed_official 0:7037ed05f54f 17 #include <stdio.h>
ruschigo 62:89df9529dbb0 18 #include "mbed.h"
mbed_official 3:8c7198d1a2a1 19
ruschigo 64:ed68ddac6360 20 //#include "lorawan/LoRaWANInterface.h"
ruschigo 64:ed68ddac6360 21 //#include "lorawan/system/lorawan_data_structures.h"
ruschigo 64:ed68ddac6360 22 //#include "events/EventQueue.h"
mbed_official 0:7037ed05f54f 23
mbed_official 0:7037ed05f54f 24 // Application helpers
pancotinho 59:a4fc1efb1569 25 //#include "DummySensor.h"
mbed_official 0:7037ed05f54f 26 #include "trace_helper.h"
ruschigo 64:ed68ddac6360 27 //#include "lora_radio_helper.h"
brunnobbco 61:65744bc8ab55 28 //#include "BME280.h"
mbed_official 0:7037ed05f54f 29
ruschigo 62:89df9529dbb0 30 #include "serial.h"
ruschigo 63:4ec1808fb547 31 #include "gps.h"
ruschigo 62:89df9529dbb0 32
ruschigo 64:ed68ddac6360 33
mbed_official 0:7037ed05f54f 34 using namespace events;
mbed_official 0:7037ed05f54f 35
ruschigo 62:89df9529dbb0 36
ruschigo 62:89df9529dbb0 37 //mbed::RawSerial pc(P0_28, P0_25);
ruschigo 62:89df9529dbb0 38 //Ticker serial_rx_ticker;
mbed_official 12:5015dfead3f2 39 // Max payload size can be LORAMAC_PHY_MAXPAYLOAD.
mbed_official 12:5015dfead3f2 40 // This example only communicates with much shorter messages (<30 bytes).
mbed_official 12:5015dfead3f2 41 // If longer messages are used, these buffers must be changed accordingly.
ruschigo 64:ed68ddac6360 42 //uint8_t tx_buffer[256];
ruschigo 64:ed68ddac6360 43 //uint8_t rx_buffer[30];
mbed_official 0:7037ed05f54f 44
mbed_official 0:7037ed05f54f 45 /*
mbed_official 0:7037ed05f54f 46 * Sets up an application dependent transmission timer in ms. Used only when Duty Cycling is off for testing
mbed_official 0:7037ed05f54f 47 */
mbed_official 0:7037ed05f54f 48 #define TX_TIMER 10000
mbed_official 0:7037ed05f54f 49
mbed_official 0:7037ed05f54f 50 /**
mbed_official 0:7037ed05f54f 51 * Maximum number of events for the event queue.
mbed_official 12:5015dfead3f2 52 * 10 is the safe number for the stack events, however, if application
mbed_official 0:7037ed05f54f 53 * also uses the queue for whatever purposes, this number should be increased.
mbed_official 0:7037ed05f54f 54 */
mbed_official 12:5015dfead3f2 55 #define MAX_NUMBER_OF_EVENTS 10
mbed_official 0:7037ed05f54f 56
mbed_official 0:7037ed05f54f 57 /**
mbed_official 0:7037ed05f54f 58 * Maximum number of retries for CONFIRMED messages before giving up
mbed_official 0:7037ed05f54f 59 */
mbed_official 0:7037ed05f54f 60 #define CONFIRMED_MSG_RETRY_COUNTER 3
mbed_official 0:7037ed05f54f 61
mbed_official 0:7037ed05f54f 62 /**
mbed_official 0:7037ed05f54f 63 * Dummy pin for dummy sensor
mbed_official 0:7037ed05f54f 64 */
pancotinho 59:a4fc1efb1569 65 //#define PC_9 0
mbed_official 0:7037ed05f54f 66
mbed_official 0:7037ed05f54f 67 /**
mbed_official 0:7037ed05f54f 68 * Dummy sensor class object
mbed_official 0:7037ed05f54f 69 */
pancotinho 59:a4fc1efb1569 70 //DS1820 ds1820(PC_9);
brunnobbco 60:c4f9e9202fb4 71 //BME280 sensor_amb(P0_13, P0_15, 0x77 << 1) ;
pancotinho 59:a4fc1efb1569 72
pancotinho 59:a4fc1efb1569 73 /**
pancotinho 59:a4fc1efb1569 74 * Sensors Variables
pancotinho 59:a4fc1efb1569 75 */
brunnobbco 61:65744bc8ab55 76 // uint32_t lux = 0;
brunnobbco 61:65744bc8ab55 77 // uint32_t amb = 0;
brunnobbco 61:65744bc8ab55 78 // float sensor_get = 0;
mbed_official 0:7037ed05f54f 79
ruschigo 62:89df9529dbb0 80 void serial_post_to_queue(void);
ruschigo 62:89df9529dbb0 81
mbed_official 0:7037ed05f54f 82 /**
mbed_official 0:7037ed05f54f 83 * This event queue is the global event queue for both the
mbed_official 0:7037ed05f54f 84 * application and stack. To conserve memory, the stack is designed to run
mbed_official 0:7037ed05f54f 85 * in the same thread as the application and the application is responsible for
mbed_official 0:7037ed05f54f 86 * providing an event queue to the stack that will be used for ISR deferment as
mbed_official 0:7037ed05f54f 87 * well as application information event queuing.
mbed_official 0:7037ed05f54f 88 */
mbed_official 46:a124538e2891 89 static EventQueue ev_queue(MAX_NUMBER_OF_EVENTS *EVENTS_EVENT_SIZE);
mbed_official 0:7037ed05f54f 90
mbed_official 0:7037ed05f54f 91 /**
mbed_official 0:7037ed05f54f 92 * Event handler.
mbed_official 0:7037ed05f54f 93 *
mbed_official 0:7037ed05f54f 94 * This will be passed to the LoRaWAN stack to queue events for the
mbed_official 0:7037ed05f54f 95 * application which in turn drive the application.
mbed_official 0:7037ed05f54f 96 */
ruschigo 64:ed68ddac6360 97 //static void lora_event_handler(lorawan_event_t event);
mbed_official 0:7037ed05f54f 98
mbed_official 0:7037ed05f54f 99 /**
mbed_official 46:a124538e2891 100 * Constructing Mbed LoRaWANInterface and passing it the radio object from lora_radio_helper.
mbed_official 0:7037ed05f54f 101 */
ruschigo 64:ed68ddac6360 102 //static LoRaWANInterface lorawan(radio);
mbed_official 0:7037ed05f54f 103
mbed_official 0:7037ed05f54f 104 /**
mbed_official 0:7037ed05f54f 105 * Application specific callbacks
mbed_official 0:7037ed05f54f 106 */
mbed_official 0:7037ed05f54f 107 static lorawan_app_callbacks_t callbacks;
mbed_official 0:7037ed05f54f 108
mbed_official 0:7037ed05f54f 109 /**
mbed_official 0:7037ed05f54f 110 * Entry point for application
mbed_official 0:7037ed05f54f 111 */
pancotinho 59:a4fc1efb1569 112
ruschigo 65:4090220e19d2 113 mbed::DigitalOut _alive_led(P1_13, 0);
ruschigo 65:4090220e19d2 114 mbed::DigitalOut _actuated_led(P1_14,1);
ruschigo 63:4ec1808fb547 115 //int lat=0;
ruschigo 63:4ec1808fb547 116 //int lon=0;
brunnobbco 61:65744bc8ab55 117 int latitude=0;
brunnobbco 61:65744bc8ab55 118 int longitude=0;
brunnobbco 61:65744bc8ab55 119
brunnobbco 61:65744bc8ab55 120
brunnobbco 61:65744bc8ab55 121 //Temperature, Pressure, Humidity Sensor
brunnobbco 61:65744bc8ab55 122 #include "BME280.txt"
brunnobbco 61:65744bc8ab55 123 #include "BMX160.txt"
ruschigo 63:4ec1808fb547 124 //#include "gps.txt"
brunnobbco 61:65744bc8ab55 125
brunnobbco 61:65744bc8ab55 126 void BMX160Read (void)
brunnobbco 61:65744bc8ab55 127 {
brunnobbco 61:65744bc8ab55 128 /*Le os Registradores do Acelerometro*/
brunnobbco 61:65744bc8ab55 129 i2c_reg_buffer[0] = 0x12;
brunnobbco 61:65744bc8ab55 130 i2c.write(BMI160_ADDR, i2c_reg_buffer, 1, true);
brunnobbco 61:65744bc8ab55 131 i2c.read(BMI160_ADDR, (char *)&acc_sample_buffer, sizeof(acc_sample_buffer), false);
brunnobbco 61:65744bc8ab55 132
brunnobbco 61:65744bc8ab55 133 /*Le os Registradores do Giroscopio*/
brunnobbco 61:65744bc8ab55 134 i2c_reg_buffer[0] = 0x0C;
brunnobbco 61:65744bc8ab55 135 i2c.write(BMI160_ADDR, i2c_reg_buffer, 1, true);
brunnobbco 61:65744bc8ab55 136 i2c.read(BMI160_ADDR, (char *)&gyr_sample_buffer, sizeof(gyr_sample_buffer), false);
brunnobbco 61:65744bc8ab55 137
brunnobbco 61:65744bc8ab55 138 /*Ajusta dados brutos Acelerometro em unidades de g */
brunnobbco 61:65744bc8ab55 139 acc_result_buffer[0] = (acc_sample_buffer[0]/16384.0);
brunnobbco 61:65744bc8ab55 140 acc_result_buffer[1] = (acc_sample_buffer[1]/16384.0);
brunnobbco 61:65744bc8ab55 141 acc_result_buffer[2] = (acc_sample_buffer[2]/16384.0);
brunnobbco 61:65744bc8ab55 142
brunnobbco 61:65744bc8ab55 143 /*Ajusta dados Brutos do Giroscopio em unidades de deg/s */
brunnobbco 61:65744bc8ab55 144 gyr_result_buffer[0] = (gyr_sample_buffer[0]/131.2);
brunnobbco 61:65744bc8ab55 145 gyr_result_buffer[1] = (gyr_sample_buffer[1]/131.2);
brunnobbco 61:65744bc8ab55 146
brunnobbco 61:65744bc8ab55 147 /*Calcula os Angulos de Inclinacao com valor do Acelerometro*/
brunnobbco 61:65744bc8ab55 148 accel_ang_x=atan(acc_result_buffer[0]/sqrt(pow(acc_result_buffer[1],2) + pow(acc_result_buffer[2],2)))*RAD_DEG;
brunnobbco 61:65744bc8ab55 149 accel_ang_y=atan(acc_result_buffer[1]/sqrt(pow(acc_result_buffer[0],2) + pow(acc_result_buffer[2],2)))*RAD_DEG;
brunnobbco 61:65744bc8ab55 150
brunnobbco 61:65744bc8ab55 151 /*Calcula os Angulos de Rotacao com valor do Giroscopio e aplica filtro complementar realizando a fusao*/
brunnobbco 61:65744bc8ab55 152 tiltx = (0.98*(tiltx_prev+(gyr_result_buffer[0]*0.001)))+(0.02*(accel_ang_x));
brunnobbco 61:65744bc8ab55 153 tilty = (0.98*(tilty_prev+(gyr_result_buffer[1]*0.001)))+(0.02*(accel_ang_y));
brunnobbco 61:65744bc8ab55 154
brunnobbco 61:65744bc8ab55 155 tiltx_prev = tiltx;
brunnobbco 61:65744bc8ab55 156 tilty_prev = tilty;
brunnobbco 61:65744bc8ab55 157
brunnobbco 61:65744bc8ab55 158 /*Imprime os dados ACC pre-formatados*/
brunnobbco 61:65744bc8ab55 159 printf("%.3f,%.3f;",tiltx, tilty);
brunnobbco 61:65744bc8ab55 160
brunnobbco 61:65744bc8ab55 161 }
brunnobbco 61:65744bc8ab55 162
brunnobbco 61:65744bc8ab55 163 void GPS_Read(void)
brunnobbco 61:65744bc8ab55 164 {
brunnobbco 61:65744bc8ab55 165 gps_print_local();
ruschigo 63:4ec1808fb547 166 pc.printf ("gps longitude=%d \n",get_longitude());
ruschigo 63:4ec1808fb547 167 pc.printf ("gps latitude=%d \n",get_latitude());
brunnobbco 61:65744bc8ab55 168 if(lat!=0 && lon!=0){
ruschigo 63:4ec1808fb547 169 longitude=get_longitude();
ruschigo 63:4ec1808fb547 170 latitude=get_latitude();
brunnobbco 61:65744bc8ab55 171 // led1 = !led1;
ruschigo 63:4ec1808fb547 172 }
ruschigo 63:4ec1808fb547 173 }
ruschigo 64:ed68ddac6360 174
ruschigo 62:89df9529dbb0 175 void serial_rx(){
ruschigo 62:89df9529dbb0 176 if(pc.readable()){
ruschigo 62:89df9529dbb0 177 pc.printf("rx: %c\n", pc.getc());
ruschigo 62:89df9529dbb0 178 }
ruschigo 62:89df9529dbb0 179 pc.attach(&serial_post_to_queue, RawSerial::RxIrq);
ruschigo 62:89df9529dbb0 180 return;
ruschigo 62:89df9529dbb0 181 }
ruschigo 62:89df9529dbb0 182
ruschigo 62:89df9529dbb0 183 void serial_post_to_queue(void){
ruschigo 62:89df9529dbb0 184 //disable serial rx interrupt
ruschigo 62:89df9529dbb0 185 pc.attach(NULL, RawSerial::RxIrq);
ruschigo 62:89df9529dbb0 186 //enqueue the serial rx reception as a normal task
ruschigo 62:89df9529dbb0 187 ev_queue.call(SerialRx);
ruschigo 62:89df9529dbb0 188 return;
ruschigo 62:89df9529dbb0 189 }
pancotinho 59:a4fc1efb1569 190
mbed_official 46:a124538e2891 191 int main(void)
mbed_official 0:7037ed05f54f 192 {
ruschigo 62:89df9529dbb0 193 pc.printf("init\n");
ruschigo 62:89df9529dbb0 194 pc.baud(9600);
ruschigo 62:89df9529dbb0 195 pc.printf("config9600\n");
ruschigo 62:89df9529dbb0 196 //enable serial rx interrupt
ruschigo 62:89df9529dbb0 197 pc.attach(&serial_post_to_queue, RawSerial::RxIrq);
brunnobbco 61:65744bc8ab55 198 gps_config();
brunnobbco 61:65744bc8ab55 199 gps_leBootMsg();
brunnobbco 61:65744bc8ab55 200 gps_config_gnss ();
brunnobbco 61:65744bc8ab55 201 init();
brunnobbco 61:65744bc8ab55 202
brunnobbco 61:65744bc8ab55 203 //BMX160 Declaration######################################
brunnobbco 61:65744bc8ab55 204 // pc.printf("Teste BMI160\n\r");
brunnobbco 61:65744bc8ab55 205 // printf("Configurando BMX160...\n\r");
brunnobbco 61:65744bc8ab55 206 wait_ms(250);
brunnobbco 61:65744bc8ab55 207
brunnobbco 61:65744bc8ab55 208 /*Config Freq. I2C Bus*/
brunnobbco 61:65744bc8ab55 209 i2c.frequency(20000);
brunnobbco 61:65744bc8ab55 210
brunnobbco 61:65744bc8ab55 211 /*Reset BMI160*/
brunnobbco 61:65744bc8ab55 212 i2c_reg_buffer[0] = 0x7E;
brunnobbco 61:65744bc8ab55 213 i2c_reg_buffer[1] = 0xB6;
brunnobbco 61:65744bc8ab55 214 i2c.write(BMI160_ADDR, i2c_reg_buffer, sizeof(i2c_reg_buffer), false);
brunnobbco 61:65744bc8ab55 215 wait_ms(200);
brunnobbco 61:65744bc8ab55 216 // printf("BMI160 Resetado\n\r");
brunnobbco 61:65744bc8ab55 217
brunnobbco 61:65744bc8ab55 218 /*Habilita o Acelerometro*/
brunnobbco 61:65744bc8ab55 219 i2c_reg_buffer[0] = 0x7E;
brunnobbco 61:65744bc8ab55 220 i2c_reg_buffer[1] = 0x11; //PMU Normal
brunnobbco 61:65744bc8ab55 221 i2c.write(BMI160_ADDR, i2c_reg_buffer, sizeof(i2c_reg_buffer), false);
brunnobbco 61:65744bc8ab55 222 // printf("Acc Habilitado\n\r");
brunnobbco 61:65744bc8ab55 223
brunnobbco 61:65744bc8ab55 224 /*Habilita o Giroscopio*/
brunnobbco 61:65744bc8ab55 225 i2c_reg_buffer[0] = 0x7E;
brunnobbco 61:65744bc8ab55 226 i2c_reg_buffer[1] = 0x15; //PMU Normal
brunnobbco 61:65744bc8ab55 227 i2c.write(BMI160_ADDR, i2c_reg_buffer, sizeof(i2c_reg_buffer), false);
brunnobbco 61:65744bc8ab55 228 // printf("Gyr Habilitado\n\r");
brunnobbco 61:65744bc8ab55 229
brunnobbco 61:65744bc8ab55 230 /*Config o Data Rate ACC em 1600Hz*/
brunnobbco 61:65744bc8ab55 231 i2c_reg_buffer[0] = 0x40;
brunnobbco 61:65744bc8ab55 232 i2c_reg_buffer[1] = 0x2C;
brunnobbco 61:65744bc8ab55 233 i2c.write(BMI160_ADDR, i2c_reg_buffer, sizeof(i2c_reg_buffer), false);
brunnobbco 61:65744bc8ab55 234 // printf("Data Rate ACC Selecionado a 1600Hz\n\r");
brunnobbco 61:65744bc8ab55 235
brunnobbco 61:65744bc8ab55 236 /*Config o Data Rate GYR em 1600Hz*/
brunnobbco 61:65744bc8ab55 237 i2c_reg_buffer[0] = 0x42;
brunnobbco 61:65744bc8ab55 238 i2c_reg_buffer[1] = 0x2C;
brunnobbco 61:65744bc8ab55 239 i2c.write(BMI160_ADDR, i2c_reg_buffer, sizeof(i2c_reg_buffer), false);
brunnobbco 61:65744bc8ab55 240 // printf("Data Rate GYR Selecionado a 1600Hz\n\r");
brunnobbco 61:65744bc8ab55 241
brunnobbco 61:65744bc8ab55 242 /*Config o Range GYR em 250º/s*/
brunnobbco 61:65744bc8ab55 243 i2c_reg_buffer[0] = 0x43;
brunnobbco 61:65744bc8ab55 244 i2c_reg_buffer[1] = 0x03;
brunnobbco 61:65744bc8ab55 245 i2c.write(BMI160_ADDR, i2c_reg_buffer, sizeof(i2c_reg_buffer), false);
brunnobbco 61:65744bc8ab55 246 // printf("Range GYR Selecionado a 250deg/s\n\r");
brunnobbco 61:65744bc8ab55 247
ruschigo 62:89df9529dbb0 248 pc.printf("BMX160 Configurado\n\r");
brunnobbco 61:65744bc8ab55 249
brunnobbco 61:65744bc8ab55 250 //########################################################
mbed_official 0:7037ed05f54f 251 // setup tracing
mbed_official 0:7037ed05f54f 252 setup_trace();
mbed_official 0:7037ed05f54f 253
mbed_official 0:7037ed05f54f 254 // stores the status of a call to LoRaWAN protocol
mbed_official 0:7037ed05f54f 255 lorawan_status_t retcode;
mbed_official 0:7037ed05f54f 256
mbed_official 0:7037ed05f54f 257 // Initialize LoRaWAN stack
ruschigo 64:ed68ddac6360 258 /*if (lorawan.initialize(&ev_queue) != LORAWAN_STATUS_OK) {
ruschigo 62:89df9529dbb0 259 pc.printf("\r\n LoRa initialization failed! \r\n");
mbed_official 0:7037ed05f54f 260 return -1;
ruschigo 64:ed68ddac6360 261 }*/
ruschigo 64:ed68ddac6360 262
ruschigo 64:ed68ddac6360 263 if(lorawan_initialize_stack(&ev_queue) != 0){
ruschigo 64:ed68ddac6360 264 return -1;
mbed_official 0:7037ed05f54f 265 }
mbed_official 0:7037ed05f54f 266
ruschigo 62:89df9529dbb0 267 pc.printf("\r\n Mbed LoRaWANStack initialized \r\n");
mbed_official 0:7037ed05f54f 268
mbed_official 0:7037ed05f54f 269 // prepare application callbacks
ruschigo 64:ed68ddac6360 270 /*callbacks.events = mbed::callback(lora_event_handler);
mbed_official 2:dc95ac6d6d4e 271 lorawan.add_app_callbacks(&callbacks);
ruschigo 64:ed68ddac6360 272 */
ruschigo 64:ed68ddac6360 273
ruschigo 64:ed68ddac6360 274 callbacks.events = mbed::callback(lora_event_handler);
ruschigo 64:ed68ddac6360 275 lorawan_add_callbacks(callbacks);
ruschigo 64:ed68ddac6360 276
mbed_official 0:7037ed05f54f 277 // Set number of retries in case of CONFIRMED messages
ruschigo 64:ed68ddac6360 278 /*if (lorawan.set_confirmed_msg_retries(CONFIRMED_MSG_RETRY_COUNTER)
mbed_official 46:a124538e2891 279 != LORAWAN_STATUS_OK) {
ruschigo 62:89df9529dbb0 280 pc.printf("\r\n set_confirmed_msg_retries failed! \r\n\r\n");
mbed_official 0:7037ed05f54f 281 return -1;
ruschigo 64:ed68ddac6360 282 }*/
ruschigo 64:ed68ddac6360 283
ruschigo 64:ed68ddac6360 284 if(lorawan_set_confirmed_msg_retries(CONFIRMED_MSG_RETRY_COUNTER) != 0){
ruschigo 64:ed68ddac6360 285 pc.printf("\r\n set_confirmed_msg_retries failed! \r\n\r\n");
ruschigo 64:ed68ddac6360 286 return -1;
mbed_official 0:7037ed05f54f 287 }
ruschigo 64:ed68ddac6360 288
mbed_official 0:7037ed05f54f 289
ruschigo 62:89df9529dbb0 290 pc.printf("\r\n CONFIRMED message retries : %d \r\n",
mbed_official 0:7037ed05f54f 291 CONFIRMED_MSG_RETRY_COUNTER);
ruschigo 64:ed68ddac6360 292 /*
mbed_official 0:7037ed05f54f 293 // Enable adaptive data rate
mbed_official 2:dc95ac6d6d4e 294 if (lorawan.enable_adaptive_datarate() != LORAWAN_STATUS_OK) {
ruschigo 62:89df9529dbb0 295 pc.printf("\r\n enable_adaptive_datarate failed! \r\n");
mbed_official 0:7037ed05f54f 296 return -1;
mbed_official 0:7037ed05f54f 297 }
ruschigo 64:ed68ddac6360 298 */
ruschigo 64:ed68ddac6360 299
ruschigo 64:ed68ddac6360 300 if(lorawan_enable_adaptive_datarate() != 0){
ruschigo 64:ed68ddac6360 301 pc.printf("\r\n enable_adaptive_datarate failed! \r\n");
ruschigo 64:ed68ddac6360 302 return -1;
ruschigo 64:ed68ddac6360 303 }
ruschigo 64:ed68ddac6360 304
mbed_official 0:7037ed05f54f 305
ruschigo 62:89df9529dbb0 306 pc.printf("\r\n Adaptive data rate (ADR) - Enabled \r\n");
ruschigo 64:ed68ddac6360 307
ruschigo 64:ed68ddac6360 308 /*
mbed_official 2:dc95ac6d6d4e 309 retcode = lorawan.connect();
mbed_official 0:7037ed05f54f 310
mbed_official 0:7037ed05f54f 311 if (retcode == LORAWAN_STATUS_OK ||
mbed_official 46:a124538e2891 312 retcode == LORAWAN_STATUS_CONNECT_IN_PROGRESS) {
mbed_official 0:7037ed05f54f 313 } else {
ruschigo 62:89df9529dbb0 314 pc.printf("\r\n Connection error, code = %d \r\n", retcode);
mbed_official 0:7037ed05f54f 315 return -1;
mbed_official 0:7037ed05f54f 316 }
ruschigo 64:ed68ddac6360 317 */
ruschigo 64:ed68ddac6360 318
ruschigo 64:ed68ddac6360 319 if(lorawan_connect() != 0){
ruschigo 64:ed68ddac6360 320 pc.printf("\r\n Connection error, code = %d \r\n", retcode);
ruschigo 64:ed68ddac6360 321 return -1;
ruschigo 64:ed68ddac6360 322 }
ruschigo 64:ed68ddac6360 323
ruschigo 62:89df9529dbb0 324 pc.printf("\r\n Connection - In Progress ...\r\n");
pancotinho 59:a4fc1efb1569 325
ruschigo 65:4090220e19d2 326 _actuated_led =0;
ruschigo 65:4090220e19d2 327
ruschigo 64:ed68ddac6360 328 //
mbed_official 0:7037ed05f54f 329 // make your event queue dispatching events forever
mbed_official 0:7037ed05f54f 330 ev_queue.dispatch_forever();
mbed_official 3:8c7198d1a2a1 331 return 0;
mbed_official 0:7037ed05f54f 332 }
mbed_official 0:7037ed05f54f 333
mbed_official 0:7037ed05f54f 334 /**
mbed_official 0:7037ed05f54f 335 * Sends a message to the Network Server
mbed_official 0:7037ed05f54f 336 */
ruschigo 64:ed68ddac6360 337 /*
mbed_official 0:7037ed05f54f 338 static void send_message()
mbed_official 0:7037ed05f54f 339 {
mbed_official 0:7037ed05f54f 340 uint16_t packet_len;
mbed_official 0:7037ed05f54f 341 int16_t retcode;
mbed_official 56:39847849d219 342 int32_t sensor_value;
brunnobbco 61:65744bc8ab55 343 gps_print_local();
pancotinho 59:a4fc1efb1569 344
ruschigo 63:4ec1808fb547 345 packet_len = sprintf((char *) tx_buffer, "%2.2f, %04.2f, %2.2f, %d, %d\n", getTemperature(), getPressure(), getHumidity(), get_longitude(), get_latitude());
mbed_official 0:7037ed05f54f 346
mbed_official 2:dc95ac6d6d4e 347 retcode = lorawan.send(MBED_CONF_LORA_APP_PORT, tx_buffer, packet_len,
mbed_official 47:b6d132f1079f 348 MSG_UNCONFIRMED_FLAG);
mbed_official 0:7037ed05f54f 349
mbed_official 0:7037ed05f54f 350 if (retcode < 0) {
ruschigo 62:89df9529dbb0 351 retcode == LORAWAN_STATUS_WOULD_BLOCK ? pc.printf("send - WOULD BLOCK\r\n")
ruschigo 62:89df9529dbb0 352 : pc.printf("\r\n send() - Error code %d \r\n", retcode);
mbed_official 26:f07f5febf97f 353
mbed_official 26:f07f5febf97f 354 if (retcode == LORAWAN_STATUS_WOULD_BLOCK) {
mbed_official 26:f07f5febf97f 355 //retry in 3 seconds
mbed_official 26:f07f5febf97f 356 if (MBED_CONF_LORA_DUTY_CYCLE_ON) {
brunnobbco 61:65744bc8ab55 357 ev_queue.call_in(10000, send_message);
mbed_official 26:f07f5febf97f 358 }
mbed_official 26:f07f5febf97f 359 }
mbed_official 0:7037ed05f54f 360 return;
mbed_official 0:7037ed05f54f 361 }
mbed_official 0:7037ed05f54f 362
ruschigo 62:89df9529dbb0 363 pc.printf("%2.2f;%04.2f;%2.2f;", getTemperature(), getPressure(), getHumidity());
brunnobbco 61:65744bc8ab55 364 BMX160Read();
ruschigo 63:4ec1808fb547 365 pc.printf ("%d;",get_longitude());
ruschigo 63:4ec1808fb547 366 pc.printf ("%d \r\n",get_latitude());
brunnobbco 61:65744bc8ab55 367 // printf("\r\n %d bytes scheduled for transmission \r\n", retcode);
mbed_official 12:5015dfead3f2 368 memset(tx_buffer, 0, sizeof(tx_buffer));
mbed_official 0:7037ed05f54f 369 }
ruschigo 64:ed68ddac6360 370 */
mbed_official 0:7037ed05f54f 371
mbed_official 0:7037ed05f54f 372 /**
mbed_official 0:7037ed05f54f 373 * Receive a message from the Network Server
mbed_official 0:7037ed05f54f 374 */
ruschigo 64:ed68ddac6360 375 /*static void receive_message()
mbed_official 0:7037ed05f54f 376 {
mbed_official 47:b6d132f1079f 377 uint8_t port;
mbed_official 47:b6d132f1079f 378 int flags;
mbed_official 47:b6d132f1079f 379 int16_t retcode = lorawan.receive(rx_buffer, sizeof(rx_buffer), port, flags);
mbed_official 0:7037ed05f54f 380
mbed_official 0:7037ed05f54f 381 if (retcode < 0) {
brunnobbco 61:65744bc8ab55 382 // printf("\r\n receive() - Error code %d \r\n", retcode);
mbed_official 0:7037ed05f54f 383 return;
mbed_official 0:7037ed05f54f 384 }
mbed_official 0:7037ed05f54f 385
brunnobbco 61:65744bc8ab55 386 // printf(" RX Data on port %u (%d bytes): ", port, retcode);
mbed_official 0:7037ed05f54f 387 for (uint8_t i = 0; i < retcode; i++) {
ruschigo 62:89df9529dbb0 388 pc.printf("%02x ", rx_buffer[i]);
mbed_official 0:7037ed05f54f 389 }
ruschigo 62:89df9529dbb0 390 pc.printf("\r\n");
mbed_official 47:b6d132f1079f 391
mbed_official 12:5015dfead3f2 392 memset(rx_buffer, 0, sizeof(rx_buffer));
mbed_official 0:7037ed05f54f 393 }
ruschigo 64:ed68ddac6360 394 */
mbed_official 0:7037ed05f54f 395
mbed_official 0:7037ed05f54f 396 /**
mbed_official 0:7037ed05f54f 397 * Event handler
mbed_official 0:7037ed05f54f 398 */
ruschigo 64:ed68ddac6360 399 void lora_event_handler(lorawan_event_t event)
mbed_official 0:7037ed05f54f 400 {
mbed_official 0:7037ed05f54f 401 switch (event) {
mbed_official 0:7037ed05f54f 402 case CONNECTED:
ruschigo 62:89df9529dbb0 403 pc.printf("\r\n Connection - Successful \r\n");
mbed_official 0:7037ed05f54f 404 if (MBED_CONF_LORA_DUTY_CYCLE_ON) {
ruschigo 64:ed68ddac6360 405 //send_message();
ruschigo 65:4090220e19d2 406 //lora_send_message((uint8_t*)"testeLora", (uint16_t)10);
ruschigo 64:ed68ddac6360 407 } //else {
ruschigo 64:ed68ddac6360 408 //ev_queue.call_every(TX_TIMER, (void)lora_send_message((uint8_t*)"testeLoraEvery", (uint16_t)15));
ruschigo 64:ed68ddac6360 409 //}
mbed_official 0:7037ed05f54f 410
mbed_official 0:7037ed05f54f 411 break;
mbed_official 0:7037ed05f54f 412 case DISCONNECTED:
mbed_official 0:7037ed05f54f 413 ev_queue.break_dispatch();
ruschigo 62:89df9529dbb0 414 pc.printf("\r\n Disconnected Successfully \r\n");
mbed_official 0:7037ed05f54f 415 break;
mbed_official 0:7037ed05f54f 416 case TX_DONE:
brunnobbco 61:65744bc8ab55 417 // printf("\r\n Message Sent to Network Server \r\n");
mbed_official 0:7037ed05f54f 418 if (MBED_CONF_LORA_DUTY_CYCLE_ON) {
ruschigo 65:4090220e19d2 419 //lora_send_message((uint8_t*)"teste", (uint16_t)6);
mbed_official 0:7037ed05f54f 420 }
mbed_official 0:7037ed05f54f 421 break;
mbed_official 0:7037ed05f54f 422 case TX_TIMEOUT:
brunnobbco 61:65744bc8ab55 423 // printf("\r\n Transmission Error TX_Timeout");
ruschigo 62:89df9529dbb0 424 break;
mbed_official 0:7037ed05f54f 425 case TX_ERROR:
brunnobbco 61:65744bc8ab55 426 // printf("\r\n Transmission Error TX_Error");
ruschigo 62:89df9529dbb0 427 break;
mbed_official 0:7037ed05f54f 428 case TX_CRYPTO_ERROR:
brunnobbco 61:65744bc8ab55 429 // printf("\r\n Transmission Error TX_Crypto_Error");
ruschigo 62:89df9529dbb0 430 break;
mbed_official 0:7037ed05f54f 431 case TX_SCHEDULING_ERROR:
brunnobbco 61:65744bc8ab55 432 // printf("\r\n Transmission Error - EventCode = %d \r\n", event);
mbed_official 0:7037ed05f54f 433 // try again
mbed_official 0:7037ed05f54f 434 if (MBED_CONF_LORA_DUTY_CYCLE_ON) {
ruschigo 65:4090220e19d2 435 //lora_send_message((uint8_t*)"teste2", (uint16_t)7);
mbed_official 0:7037ed05f54f 436 }
mbed_official 0:7037ed05f54f 437 break;
mbed_official 0:7037ed05f54f 438 case RX_DONE:
brunnobbco 61:65744bc8ab55 439 // printf("\r\n Received message from Network Server \r\n");
ruschigo 64:ed68ddac6360 440 lora_receive_message();
mbed_official 0:7037ed05f54f 441 break;
mbed_official 0:7037ed05f54f 442 case RX_TIMEOUT:
brunnobbco 61:65744bc8ab55 443 // printf("\r\n Transmission Error RX_Timeout");
ruschigo 62:89df9529dbb0 444 break;
mbed_official 0:7037ed05f54f 445 case RX_ERROR:
brunnobbco 61:65744bc8ab55 446 // printf("\r\n Error in reception - Code = %d \r\n", event);
mbed_official 0:7037ed05f54f 447 break;
mbed_official 0:7037ed05f54f 448 case JOIN_FAILURE:
brunnobbco 61:65744bc8ab55 449 // printf("\r\n OTAA Failed - Check Keys \r\n");
mbed_official 0:7037ed05f54f 450 break;
mbed_official 26:f07f5febf97f 451 case UPLINK_REQUIRED:
brunnobbco 61:65744bc8ab55 452 // printf("\r\n Uplink required by NS \r\n");
mbed_official 26:f07f5febf97f 453 if (MBED_CONF_LORA_DUTY_CYCLE_ON) {
ruschigo 65:4090220e19d2 454 //lora_send_message((uint8_t*)"uplink", (uint16_t)7);
mbed_official 26:f07f5febf97f 455 }
mbed_official 26:f07f5febf97f 456 break;
mbed_official 0:7037ed05f54f 457 default:
mbed_official 0:7037ed05f54f 458 MBED_ASSERT("Unknown Event");
ruschigo 62:89df9529dbb0 459 break;
mbed_official 0:7037ed05f54f 460 }
mbed_official 0:7037ed05f54f 461 }
mbed_official 0:7037ed05f54f 462
mbed_official 0:7037ed05f54f 463 // EOF