Development v12

Warning - Product Update

All the resources present on this section belong to Waspmote v12, Waspmote Plug & Sense! v12 and Meshlium v3.8.

If you have a Waspmote v15, Waspmote Plug & Sense! v15 or Meshlium v4.0 please go to the new Development Section.

Check what is your version and what are the differences between the old and the new one in this document.

» SX 07a: TX Frame ACK wRetries

This example shows how to send a Waspmote Frame via SX1272 module. Steps performed: - Configure the LoRa mode - Create a new Waspmote Frame - Send a packet

Required Materials

1 x Waspmote PRO
1 x Battery
1 x MiniUSB wire
1 x SX1272 module (LoRa)
1 x Receiver module with SX_07b example

Notes

* This is part of a two-code example. A receiver Waspmote needs to be used with the related 07b example.
* The SX1272 module is provided with a special 4.5 dBi antenna, which enables maximum range. The only exception is Smart Parking; in this case the antenna is smaller, 0 dBi, to fit inside the enclosure.
* It is not recommended to work without an antenna screwed to the module. The module could be damaged due to RF reflections.
* The SX1272 module can only be used in special Waspmote units which have been modified to drive the SPI pins to SOCKET0. (only SOCKET0 is available for SX1272)
* This module does not save the configuration. So, the network settings as the mode or the channel MUST be configured every time it is switched on.

Code

/*  
 *  ------ [SX_07a] - TX LoRa with ACKs and Retries -------- 
 *  
 *  Explanation: This example shows how to send a Waspmote Frame
 *  via SX1272 module. Steps performed:
 *    - Configurate the LoRa mode
 *    - Create a new Waspmote Frame
 *    - Send a packet
 *  
 *  Copyright (C) 2014 Libelium Comunicaciones Distribuidas S.L. 
 *  http://www.libelium.com 
 *  
 *  This program is free software: you can redistribute it and/or modify  
 *  it under the terms of the GNU General Public License as published by  
 *  the Free Software Foundation, either version 3 of the License, or  
 *  (at your option) any later version.  
 *   
 *  This program is distributed in the hope that it will be useful,  
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of  
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  
 *  GNU General Public License for more details.  
 *   
 *  You should have received a copy of the GNU General Public License  
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.  
 *  
 *  Version:           0.1
 *  Design:            David Gascón
 *  Implementation:    Covadonga Albiñana, Yuri Carmona
 */

// Include these libraries to transmit frames with sx1272
#include <WaspSX1272.h>
#include <WaspFrame.h>


// define the destination address to send packets
uint8_t rx_address = 2;


// define the Waspmtoe ID
////////////////////////////////
char nodeID[] = "node_001";
////////////////////////////////

// define status variable
int e;


void setup()
{
  // Init USB port
  USB.ON();
  USB.println(F("SX_07a example"));
  USB.println(F("Semtech SX1272 module. TX LoRa with Waspmote Frame, ACKs and Retries"));

  // set node ID
  frame.setID(nodeID);

  // Init Accelerometer
  ACC.ON();


  USB.println(F("----------------------------------------"));
  USB.println(F("Setting configuration:")); 
  USB.println(F("----------------------------------------"));

  // Init sx1272 module
  sx1272.ON();

  // Select frequency channel
  e = sx1272.setChannel(CH_11_868);
  USB.print(F("Setting Channel CH_11_868.\t state ")); 
  USB.println(e);

  // Select implicit (off) or explicit (on) header mode
  e = sx1272.setHeaderON();
  USB.print(F("Setting Header ON.\t\t state "));
  USB.println(e); 

  // Select mode: from 1 to 10
  e = sx1272.setMode(1);  
  USB.print(F("Setting Mode '1'.\t\t state ")); 
  USB.println(e);  

  // Select CRC on or off
  e = sx1272.setCRC_ON();
  USB.print(F("Setting CRC ON.\t\t\t state "));
  USB.println(e);  

  // Select output power (Max, High or Low)
  e = sx1272.setPower('H');
  USB.print(F("Setting Power to 'H'.\t\t state ")); 
  USB.println(e); 

  // Select the node address value: from 2 to 255
  e = sx1272.setNodeAddress(3);
  USB.print(F("Setting Node Address to '3'.\t state "));
  USB.println(e);

  // Select the maximum number of retries: from '0' to '5'
  e = sx1272.setRetries(3);
  USB.print(F("Setting Max retries to '3'.\t state "));
  USB.println(e);
  USB.println();

  delay(1000);  

  USB.println(F("----------------------------------------"));
  USB.println(F("Sending:")); 
  USB.println(F("----------------------------------------"));
}


void loop()
{  
  
  ///////////////////////////////////////////
  // 1. Create ASCII frame
  ///////////////////////////////////////////  

  // Creating frame to send
  frame.createFrame(ASCII);
  USB.println(F("Frame created"));

  // Adding sensor battery
  frame.addSensor(SENSOR_BAT, (uint8_t) PWR.getBatteryLevel());
  USB.println(F("Battery level added"));

  // Adding accelerometer
  frame.addSensor(SENSOR_ACC, ACC.getX(), ACC.getY(), ACC.getZ() );
  USB.println(F("Accelerometer added"));

  // Printing frame
  frame.showFrame(); 
  
  

  ///////////////////////////////////////////
  // 2. Send packet
  ///////////////////////////////////////////  
  
  // 2.1. Sending packet, with retries if failure, and waiting an ACK response
  e = sx1272.sendPacketTimeoutACKRetries( rx_address, frame.buffer, frame.length);
  
  
  // 2.2. Check sending status
  if( e == 0 ) 
  {
    USB.println(F("--> Packet sent OK"));     
  }
  else 
  {
    USB.println(F("--> Error sending the packet"));  
    USB.print(F("state: "));
    USB.println(e, DEC);
  } 

  USB.println();
  delay(5000);
}

Output

E#
SX_07a example
Semtech SX1272 module. TX LoRa with Waspmote Frame, ACKs and Retries
----------------------------------------
Setting configuration:
----------------------------------------
Setting Channel CH_11_868. state 0
Setting Header ON. state 0
Setting Mode '1'. state 0
Setting CRC ON. state 0
Setting Power to 'H'. state 0
Setting Node Address to '3'. state 0
Setting Max retries to '3'. state 0

----------------------------------------
Sending:
----------------------------------------
Frame created
Battery level added
Accelerometer added
===============================
Current ASCII Frame:
Length: 48
Frame Type: 128
frame (HEX): 3C3D3E800223333837323536303030236E6F64655F3030312330234241543A3938234143433A34323B353B3130333623
frame (STR): <=>€#387256000#node_001#0#BAT:98#ACC:42;5;1036#
===============================
--> Packet sent OK

Frame created
Battery level added
Accelerometer added
===============================
Current ASCII Frame:
Length: 48
Frame Type: 128
frame (HEX): 3C3D3E800223333837323536303030236E6F64655F3030312331234241543A3939234143433A33343B333B3130333523
frame (STR): <=>€#387256000#node_001#1#BAT:99#ACC:34;3;1035#
===============================
--> Packet sent OK

...

Quick Publish: