Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: pulga-lorawan-drv SX1272
Diff: lora.cpp
- Revision:
- 7:37dc9ce68914
- Child:
- 8:856f7a8cc20c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lora.cpp Fri Mar 19 20:26:32 2021 +0000
@@ -0,0 +1,255 @@
+ #include "lora.h"
+
+
+DigitalOut led1(P1_13);
+DigitalOut led2(P1_14);
+
+uint8_t buffer[255];
+uint8_t message[255];
+uint8_t message_pong[]="Pong";
+uint8_t message_ping[]="Ping";
+
+int e;
+int cont =0;
+uint8_t r_size;
+int loraMode=LORAMODE;
+
+
+
+ ////////////////////////////////////////
+// SETUP SX1272 initialisation
+////////////////////////////////////////
+void setup()
+{
+
+
+ printf("------Coragem LoRa temperature sensor -------------\n");
+ //sx1272.ON(); // Power ON the module
+
+ int error_config_sx1272=0;
+
+ // Set transmission mode and print the result
+ e = sx1272.setMode(loraMode);
+ printf("Mode: %d\n",loraMode);
+ if (e) error_config_sx1272=1;
+ printf("Setting Mode: state %d\n",e);
+
+ // enable carrier sense
+ sx1272._enableCarrierSense=true;
+
+ // for LOW POWER
+ sx1272._RSSIonSend=false;
+
+
+ // Select frequency channel
+ e = sx1272.setChannel(DEFAULT_CHANNEL);
+ if (e) error_config_sx1272=1;
+ printf("Setting Channel: state %d\n",e);
+
+ // Select amplifier line; PABOOST or RFO
+// #ifdef PABOOST
+// printf("pabboost\n");
+// sx1272._needPABOOST=true;
+// // previous way for setting output power
+// // powerLevel='x';
+// #else
+// // previous way for setting output power
+// // powerLevel='M';
+// #endif
+
+ // previous way for setting output power
+ // e = sx1272.setPower(powerLevel);
+
+ e = sx1272.setPowerDBM((uint8_t)MAX_DBM);
+ if (e) error_config_sx1272=1;
+ printf("Setting Power: state %d\n",e);
+
+ // Set the node address and print the result
+ e = sx1272.setNodeAddress(node_addr);
+ if (e) error_config_sx1272=1;
+ printf("Setting node addr: state %d\n",e);
+
+ // Print a success message
+ if (!error_config_sx1272) printf("SX1272 successfully configured\n");
+ else printf("ERROR CONFIGURATION SX1272\n");
+
+ wait_ms(400);
+}
+void send_packet (uint8_t *payload, uint8_t length8) // envia pacote
+{
+ printf("Samira - send_packet ( ) - ENTER..\n");
+
+ //write on FIFO
+ sx1272.writeRegister(REG_IRQ_FLAGS,255);//clear flags
+ sx1272.writeRegister(REG_OP_MODE, LORA_STANDBY_MODE); // Stdby LoRa mode to write in FIFO
+ sx1272.writeRegister(REG_PAYLOAD_LENGTH_LORA, length8);
+ sx1272.writeRegister(REG_FIFO_TX_BASE_ADDR,0x00);
+ sx1272.writeRegister(REG_FIFO_ADDR_PTR,0x00);
+
+ for(unsigned int i = 0; i <= length8; i++) {
+ printf("Samira - send_packet ( ) - FOR..\n");
+ sx1272.writeRegister(REG_FIFO, payload[i]); // Writing the payload in FIFO
+ }
+
+ //________________Send Data__________________
+ sx1272.writeRegister(REG_IRQ_FLAGS,255);//clear flags
+ sx1272.writeRegister(REG_OP_MODE, LORA_TX_MODE); // LORA mode - Tx
+
+ unsigned long exitTime = millis()+2000;//2 segundos para sair do for
+ unsigned long Time= millis();
+ char value = sx1272.readRegister(REG_IRQ_FLAGS);
+/*
+int bitCounter = 0;
+ while ((bitRead(value, 3) == 0) && (Time < exitTime)) {
+ bitCounter ++;
+ printf("bitCounter = %d", bitCounter);
+ printf("\n");
+ value=sx1272.readRegister(REG_IRQ_FLAGS);
+ Time= millis();
+ wait_ms(50);
+ }
+ */
+ printf("Samira - send_packet ( ) - OUT..\n");
+ //wait_ms(50);
+
+}
+
+void send_data(int mode) //data predefined
+{
+ led1=1;
+ led2=1;
+ printf("Samira - enter send_data () ..\n");
+ printf("number=%d\n",cont);
+ sx1272.writeRegister(REG_OP_MODE,129);//standby
+ if (mode == DATA ) {
+ printf("Samira - send_data (DATA) ..\n");
+ r_size=sprintf((char*)message,"RANDOM MESSAGE");
+ send_packet(message,r_size);
+ printf("packet send :\n%s\nrsize=%d\n",message,r_size);
+// //samira// it is sending sensors data
+
+
+ //============= internet of turtles =============
+// sprintf(float_breathing_time,"%04.2f", last_breathing_time);
+// sprintf(float_diving_time,"%04.2f", last_diving_time);
+// r_size=sprintf((char*)message,"\\!#Dt%04.2f_Bt%04.2f_%s°C_%shPa_%s%%",last_diving_time,last_breathing_time,float_temp,float_press,float_hum);
+ // ==============================================
+
+ //size=sprintf((char*)message,"\\!#%s°C_%shPa_%s%%",float_temp,float_press,float_hum);
+
+ // send_packet(message,r_size);
+ // sx1272.sendPacketTimeout(DEFAULT_DEST_ADDR,/* (uint8_t*)*/message, r_size);
+ // printf("packet send :\n%s\nrsize=%d\n",message,r_size);
+
+
+ } else if (mode == PING ) {
+
+ printf("Samira - send_data (PING) ..\n");
+ //sx1272.sendPacketTimeout(DEFAULT_DEST_ADDR, message_ping, sizeof(message_ping));
+ send_packet(message_ping,sizeof(message_ping));
+ printf("packet sent : %s ",message_ping);
+ printf("packet size : %d \n",sizeof(message_ping));//samira//
+ printf("waiting for POng ... \n");
+
+
+ } else if (mode == PONG ) {
+ printf("sending a PONG ... ");
+ //sx1272.sendPacketTimeout(DEFAULT_DEST_ADDR, message_pong, sizeof(message_pong));
+ send_packet(message_pong,sizeof(message_pong));
+ printf("packet send :\n%s\n",message_pong);
+ }
+
+ led1=0;
+ led2=0;
+ //wait_ms(300);
+
+ sx1272.writeRegister(REG_IRQ_FLAGS,255);//clear flags
+ sx1272.writeRegister(REG_OP_MODE,133); //leitura continua
+ cont++;
+}
+void send_msg(char *msg_lora) //data predefined
+{
+ led1=1;
+ led2=1;
+ uint8_t *msg;
+ msg = (uint8_t*)msg_lora;
+ sx1272.writeRegister(REG_OP_MODE,129);//standby
+ //send_packet(msg_lora,sizeof(msg_lora));
+ //uint8_t
+ //printf("packet send :\n%s\nrsize=%d\n",msg, sizeof(msg));
+ //sx1272.sendPacketTimeout(DEFAULT_DEST_ADDR,/* (uint8_t*)*/msg, sizeof(msg));
+ led1=0;
+ led2=0;
+
+ sx1272.writeRegister(REG_IRQ_FLAGS,255);//clear flags
+ sx1272.writeRegister(REG_OP_MODE,133); //leitura continua
+ cont++;
+}
+
+void print_packet()
+{
+
+ printf("Samira - print_packet () Enter ..\n");
+ //led2=1;
+ sx1272.writeRegister(REG_OP_MODE,129);//standby
+
+ uint8_t pac_size;
+
+ sx1272.writeRegister(REG_FIFO_ADDR_PTR,sx1272.readRegister(REG_FIFO_RX_CURRENT_ADDR));//set fifo pointer to read packet
+ pac_size = sx1272.readRegister(REG_RX_NB_BYTES);//read size of packet
+ printf("Samira - print_packet () pac_size = %d ..\n", pac_size);
+ for(int i =0 ; i<pac_size ; i++) { //print packet
+ buffer[i]=sx1272.readRegister(REG_FIFO);
+ /* if (buffer[i]== '\n') printf(" \\n");
+ if (buffer[i]== 0x0B) printf("tab");*/
+ printf("%c",buffer[i]);//print packet
+ }
+ printf("\n");
+
+
+ for(int i =0 ; i<pac_size ; i++) { //look for Ping in packet
+ if ((buffer[i] =='P') && (buffer[i+1] =='i') && (buffer[i+2] =='n') && (buffer[i+3] =='g') ) {
+ led1=1;
+ led2=1;
+ wait(1);
+ sx1272.writeRegister(0x12,255);//clear flags
+ led1=0;
+ led2=0;
+ printf("There is a wait before sending PONG \n");
+ printf("sending PONG");
+ send_data(PONG);
+ i=pac_size;
+ }
+ }
+
+ for(int i =0 ; i<pac_size ; i++) { //look for Pong in packet
+ if ((buffer[i] =='P') && (buffer[i+1] =='o') && (buffer[i+2] =='n') && (buffer[i+3] =='g') ) {
+ led1=1;
+ led2=1;
+ sx1272.writeRegister(0x12,255);//clear flags
+ printf("pong received \n");
+ wait(1);
+ led1=0;
+ led2=0;
+
+ i=pac_size;
+ }
+ }
+
+
+ for(int i =0 ; i<pac_size ; i++) { //look for Reset in packet
+ if ((buffer[i] =='R') && (buffer[i+1] =='e') && (buffer[i+2] =='s') && (buffer[i+3] =='e') && (buffer[i+4] =='t') ) {
+ uint32_t *ptr;
+ ptr = (uint32_t *)1073743132;// endereço gpregret 0x4000051C
+ *ptr = 0xB1;//BOOTLOADER_DFU_START
+ NVIC_SystemReset();
+ }
+ }
+
+ wait_ms(30);
+ sx1272.writeRegister(REG_IRQ_FLAGS,255);//clear flags
+ sx1272.writeRegister(REG_OP_MODE,133); //leitura continua
+ led2=0;
+ printf("Samira - print_packet () OUT ..\n");
+
+}
\ No newline at end of file