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 .
*
* 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
...