Ebyte LoRa E32 device for Arduino, esp32 or esp8266: fixed transmission - 4 (original) (raw)

We will now understand the various transmission types of our E32 UART LoRa device based on popular SX1276/SX1278 Wireless Modules.

LoRa E32-TTL-100

You can find module here AliExpress (433MHz 5Km) - AliExpress (433MHz 8Km) - AliExpress (433MHz 16Km) - AliExpress (868MHz 915MHz 5.5Km) - AliExpress (868MHz 915MHz 8Km)

In the first part, we’ve used a transparent transmission, so we send to all and receive from all that have the same address e channel.

LoRa E32 transmitting scenarios

But It isn’t a standard scenario, and we usually want to send to a specified point and receive a response.

If you have trouble with the device’s freeze, you must put a pull-up 4.7k resistor or better connect to the device AUX pin.

Toggle

Normal mode

For normal transmission, you must set M0 and M1 to LOW, and It’s better if you connect the AUX pin to have a better synchronization, but not needed. You can check the connection of the AUX pin in the library complete example connection, and you only must add the pin number to the constructor.

LoRa E32-TTL-100 Arduino breadboard

LoRa E32-TTL-100 Wemos D1 breadboard

So you must only instantiate the constructor

// Arduino constructor LoRa_E32 e32ttl100(2, 3); // e32 TX e32 RX // LoRa_E32 e32ttl100(2, 3, 5); // e32 TX e32 RX, AUX If you want use AUX pin

// Wemos D1 constructor LoRa_E32 e32ttl100(D2, D3); // e32 TX e32 RX // LoRa_E32 e32ttl100(D2, D3, D5); // e32 TX e32 RX, AUX If you want use AUX pin

Transparent transmission

Arduino sketch:

/*

#include "Arduino.h" #include "LoRa_E32.h"

LoRa_E32 e32ttl100(2, 3); // e32 TX e32 RX

void setup() { Serial.begin(9600); delay(500);

Serial.println("Hi, I'm going to send message!");

// Startup all pins and UART e32ttl100.begin();

// Send message ResponseStatus rs = e32ttl100.sendMessage("Hello, world?"); // Check If there is some problem of successfully send Serial.println(rs.getResponseDescription()); }

void loop() { // If something available if (e32ttl100.available()>1) { // read the String message ResponseContainer rc = e32ttl100.receiveMessage(); // Is something goes wrong print error if (rc.status.code!=1){ rc.status.getResponseDescription(); }else{ // Print the data received Serial.println(rc.data); } } if (Serial.available()) { String input = Serial.readString(); e32ttl100.sendMessage(input); } }

Here is the Wemos D1 (esp8266) sketch:

/*

#include "Arduino.h" #include "LoRa_E32.h"

LoRa_E32 e32ttl100(D2, D3); // e32 TX e32 RX

void setup() { Serial.begin(9600); delay(500);

Serial.println("Hi, I'm going to send message!");

// Startup all pins and UART e32ttl100.begin();

// Send message ResponseStatus rs = e32ttl100.sendMessage("Hello, world?"); // Check If there is some problem of successfully send Serial.println(rs.getResponseDescription()); }

void loop() { // If something available if (e32ttl100.available()>1) { // read the String message ResponseContainer rc = e32ttl100.receiveMessage(); // Is something goes wrong print error if (rc.status.code!=1){ rc.status.getResponseDescription(); }else{ // Print the data received Serial.println(rc.data); } } if (Serial.available()) { String input = Serial.readString(); e32ttl100.sendMessage(input); } }

If you have already changed the configuration, you must restore the base parameter:

// If you have ever change configuration you must restore It ResponseStructContainer c; c = e32ttl100.getConfiguration(); Configuration configuration = (Configuration) c.data; Serial.println(c.status.getResponseDescription()); configuration.CHAN = 0x17; configuration.OPTION.fixedTransmission = FT_TRANSPARENT_TRANSMISSION; e32ttl100.setConfiguration(configuration, WRITE_CFG_PWR_DWN_SAVE);

Fixed transmission

For fixed transmission, you must set M0 and M1 to LOW, and as for transparent transmission, It’s better to connect the AUX pin to have a better synchronization.

Fixed transmission: point to point

To use this type of transmission, we must set a parameter on configuration and set a specified address for every device.

LoRa E32 Fixed message to a specified device

So first, we must set M0 and M1 pin to HIGH to enter on program/sleep mode and set correct address and fixed transmission flag.

If we want to replicate the condition of the sender in the upper image, we must do this configuration.

ResponseStructContainer c;
c = e32ttl.getConfiguration();
Configuration configuration = *(Configuration*) c.data;
configuration.ADDL = 0;
configuration.ADDH = 1;
configuration.CHAN = 2;
configuration.OPTION.fixedTransmission = FT_FIXED_TRANSMISSION;
e32ttl.setConfiguration(configuration, WRITE_CFG_PWR_DWN_SAVE);

Then for the receiver device, we must set this configuration.

ResponseStructContainer c;
c = e32ttl.getConfiguration();
Configuration configuration = *(Configuration*) c.data;
configuration.ADDL = 0;
configuration.ADDH = 3;
configuration.CHAN = 4;
configuration.OPTION.fixedTransmission = FT_FIXED_TRANSMISSION;
e32ttl.setConfiguration(configuration, WRITE_CFG_PWR_DWN_SAVE);

Now we just sent a message to the specified device.

    ResponseStatus rs = e32ttl.sendFixedMessage(0, 3, 4, "Message to 00 03 04 device");
Serial.println(rs.getResponseDescription());

The receiver is more transparent because the device manages the address and channel.

void loop() { if (e32ttl.available() > 1){ ResponseContainer rs = e32ttl.receiveMessage(); // First of all get the data String message = rs.data;

    Serial.println(rs.status.getResponseDescription());
    Serial.println(message);
}

}

If you want to add another receiving device to complete a test, create one with this configuration.

ResponseStructContainer c;
c = e32ttl.getConfiguration();
Configuration configuration = *(Configuration*) c.data;
configuration.ADDL = 0;
configuration.ADDH = 5;
configuration.CHAN = 4;
configuration.OPTION.fixedTransmission = FT_FIXED_TRANSMISSION;
e32ttl.setConfiguration(configuration, WRITE_CFG_PWR_DWN_SAVE);

So, you can check that no data has arrived.

Send sketch (If you don’t attach all pins first, you must put on program mode then restore normal mode):

/*

#include "Arduino.h" #include "LoRa_E32.h"

// ---------- esp8266 pins -------------- //LoRa_E32 e32ttl(D2, D3, D5, D7, D6); //LoRa_E32 e32ttl(D2, D3, D5, D7, D6); // Config without connect AUX and M0 M1 #include <SoftwareSerial.h> SoftwareSerial mySerial(D2, D3); // e32 TX e32 RX LoRa_E32 e32ttl(&mySerial, D5, D7, D6);

//#include <SoftwareSerial.h> //SoftwareSerial mySerial(D2, D3);// e32 TX e32 RX //LoRa_E32 e32ttl(&mySerial, D5, D7, D6); // -------------------------------------

// ---------- Arduino pins -------------- //LoRa_E32 e32ttl(2, 3, 5, 7, 6); //LoRa_E32 e32ttl(2, 3); // Config without connect AUX and M0 M1

//#include <SoftwareSerial.h> //SoftwareSerial mySerial(2, 3); // e32 TX e32 RX //LoRa_E32 e32ttl(&mySerial, 5, 7, 6); // -------------------------------------

void printParameters(struct Configuration configuration); void printModuleInformation(struct ModuleInformation moduleInformation); //The setup function is called once at startup of the sketch void setup() { Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for native USB } delay(100);

e32ttl.begin();

// After set configuration comment set M0 and M1 to low
// and reboot if you directly set HIGH M0 and M1 to program
ResponseStructContainer c;
c = e32ttl.getConfiguration();
Configuration configuration = *(Configuration*) c.data;
configuration.ADDL = 0x01;
configuration.ADDH = 0x00;
configuration.CHAN = 0x04;
configuration.OPTION.fixedTransmission = FT_FIXED_TRANSMISSION;
e32ttl.setConfiguration(configuration, WRITE_CFG_PWR_DWN_SAVE);
printParameters(configuration);
// ---------------------------

}

// The loop function is called in an endless loop void loop() { delay(2000);

Serial.println("Send message to 00 03 04");
ResponseStatus rs = e32ttl.sendFixedMessage(0, 3, 0x04, "Message to 00 03 04 device");
Serial.println(rs.getResponseDescription());

}

void printParameters(struct Configuration configuration) { Serial.println("----------------------------------------");

Serial.print(F("HEAD : "));  Serial.print(configuration.HEAD, BIN);Serial.print(" ");Serial.print(configuration.HEAD, DEC);Serial.print(" ");Serial.println(configuration.HEAD, HEX);
Serial.println(F(" "));
Serial.print(F("AddH : "));  Serial.println(configuration.ADDH, BIN);
Serial.print(F("AddL : "));  Serial.println(configuration.ADDL, BIN);
Serial.print(F("Chan : "));  Serial.print(configuration.CHAN, DEC); Serial.print(" -> "); Serial.println(configuration.getChannelDescription());
Serial.println(F(" "));
Serial.print(F("SpeedParityBit     : "));  Serial.print(configuration.SPED.uartParity, BIN);Serial.print(" -> "); Serial.println(configuration.SPED.getUARTParityDescription());
Serial.print(F("SpeedUARTDatte  : "));  Serial.print(configuration.SPED.uartBaudRate, BIN);Serial.print(" -> "); Serial.println(configuration.SPED.getUARTBaudRate());
Serial.print(F("SpeedAirDataRate   : "));  Serial.print(configuration.SPED.airDataRate, BIN);Serial.print(" -> "); Serial.println(configuration.SPED.getAirDataRate());

Serial.print(F("OptionTrans        : "));  Serial.print(configuration.OPTION.fixedTransmission, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getFixedTransmissionDescription());
Serial.print(F("OptionPullup       : "));  Serial.print(configuration.OPTION.ioDriveMode, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getIODroveModeDescription());
Serial.print(F("OptionWakeup       : "));  Serial.print(configuration.OPTION.wirelessWakeupTime, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getWirelessWakeUPTimeDescription());
Serial.print(F("OptionFEC          : "));  Serial.print(configuration.OPTION.fec, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getFECDescription());
Serial.print(F("OptionPower        : "));  Serial.print(configuration.OPTION.transmissionPower, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getTransmissionPowerDescription());

Serial.println("----------------------------------------");

} void printModuleInformation(struct ModuleInformation moduleInformation) { Serial.println("----------------------------------------"); Serial.print(F("HEAD BIN: ")); Serial.print(moduleInformation.HEAD, BIN);Serial.print(" ");Serial.print(moduleInformation.HEAD, DEC);Serial.print(" ");Serial.println(moduleInformation.HEAD, HEX);

Serial.print(F("Freq.: "));  Serial.println(moduleInformation.frequency, HEX);
Serial.print(F("Version  : "));  Serial.println(moduleInformation.version, HEX);
Serial.print(F("Features : "));  Serial.println(moduleInformation.features, HEX);
Serial.println("----------------------------------------");

}

Receiver code (If you don’t attach all pins first, you must put on program mode than reset in normal mode) :

/*

#include "Arduino.h" #include "LoRa_E32.h"

// ---------- esp8266 pins -------------- //LoRa_E32 e32ttl(D2, D3, D5, D7, D6); //LoRa_E32 e32ttl(D2, D3); // Config without connect AUX and M0 M1

//#include <SoftwareSerial.h> //SoftwareSerial mySerial(D2, D3); // e32 TX e32 RX //LoRa_E32 e32ttl(&mySerial, D5, D7, D6); // -------------------------------------

// ---------- Arduino pins -------------- //LoRa_E32 e32ttl(2, 3, 5, 7, 6); LoRa_E32 e32ttl(2, 3); // Config without connect AUX and M0 M1

//#include <SoftwareSerial.h> //SoftwareSerial mySerial(2, 3);// e32 TX e32 RX //LoRa_E32 e32ttl(&mySerial, 5, 7, 6); // ------------------------------------- void printParameters(struct Configuration configuration); void printModuleInformation(struct ModuleInformation moduleInformation); //The setup function is called once at startup of the sketch void setup() { Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for native USB } delay(100);

e32ttl.begin();

// e32ttl.resetModule(); // After set configuration comment set M0 and M1 to low // and reboot if you directly set HIGH M0 and M1 to program ResponseStructContainer c; c = e32ttl.getConfiguration(); Configuration configuration = (Configuration) c.data; configuration.ADDL = 0x03; configuration.ADDH = 0x00; configuration.CHAN = 0x04; configuration.OPTION.fixedTransmission = FT_FIXED_TRANSMISSION; e32ttl.setConfiguration(configuration, WRITE_CFG_PWR_DWN_SAVE); printParameters(configuration); // --------------------------- Serial.println(); Serial.println("Start listening!"); }

// The loop function is called in an endless loop void loop() { if (e32ttl.available() > 1){ ResponseContainer rs = e32ttl.receiveMessage(); // First of all get the data String message = rs.data;

    Serial.println(rs.status.getResponseDescription());
    Serial.println(message);
}

}

void printParameters(struct Configuration configuration) { Serial.println("----------------------------------------");

Serial.print(F("HEAD : "));  Serial.print(configuration.HEAD, BIN);Serial.print(" ");Serial.print(configuration.HEAD, DEC);Serial.print(" ");Serial.println(configuration.HEAD, HEX);
Serial.println(F(" "));
Serial.print(F("AddH : "));  Serial.println(configuration.ADDH, DEC);
Serial.print(F("AddL : "));  Serial.println(configuration.ADDL, DEC);
Serial.print(F("Chan : "));  Serial.print(configuration.CHAN, DEC); Serial.print(" -> "); Serial.println(configuration.getChannelDescription());
Serial.println(F(" "));
Serial.print(F("SpeedParityBit     : "));  Serial.print(configuration.SPED.uartParity, BIN);Serial.print(" -> "); Serial.println(configuration.SPED.getUARTParityDescription());
Serial.print(F("SpeedUARTDatte  : "));  Serial.print(configuration.SPED.uartBaudRate, BIN);Serial.print(" -> "); Serial.println(configuration.SPED.getUARTBaudRate());
Serial.print(F("SpeedAirDataRate   : "));  Serial.print(configuration.SPED.airDataRate, BIN);Serial.print(" -> "); Serial.println(configuration.SPED.getAirDataRate());

Serial.print(F("OptionTrans        : "));  Serial.print(configuration.OPTION.fixedTransmission, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getFixedTransmissionDescription());
Serial.print(F("OptionPullup       : "));  Serial.print(configuration.OPTION.ioDriveMode, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getIODroveModeDescription());
Serial.print(F("OptionWakeup       : "));  Serial.print(configuration.OPTION.wirelessWakeupTime, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getWirelessWakeUPTimeDescription());
Serial.print(F("OptionFEC          : "));  Serial.print(configuration.OPTION.fec, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getFECDescription());
Serial.print(F("OptionPower        : "));  Serial.print(configuration.OPTION.transmissionPower, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getTransmissionPowerDescription());

Serial.println("----------------------------------------");

} void printModuleInformation(struct ModuleInformation moduleInformation) { Serial.println("----------------------------------------"); Serial.print(F("HEAD BIN: ")); Serial.print(moduleInformation.HEAD, BIN);Serial.print(" ");Serial.print(moduleInformation.HEAD, DEC);Serial.print(" ");Serial.println(moduleInformation.HEAD, HEX);

Serial.print(F("Freq.: "));  Serial.println(moduleInformation.frequency, HEX);
Serial.print(F("Version  : "));  Serial.println(moduleInformation.version, HEX);
Serial.print(F("Features : "));  Serial.println(moduleInformation.features, HEX);
Serial.println("----------------------------------------");

}

If you change the address or channel to the receiver sketch, you don’t receive messages anymore.

Fixed transmisison: broadcast

We can test the broadcast communication with the exact configuration of the address and channel.

Broadcast message to a set of channel devices

With my library, you can use two types of transmission methods.

ResponseStatus rs = e32ttl.sendBroadcastFixedMessage(4, "Send message to channel 4");
Serial.println(rs.getResponseDescription());

Or

ResponseStatus rs = e32ttl.sendFixedMessage(BROADCAST_ADDRESS, BROADCAST_ADDRESS, 4, "Send message to channel 4");
Serial.println(rs.getResponseDescription());

The receiver, as described, has the same code because the device manages the preamble with Address and Channel.

Here is the sender sketch (If you don’t attach all pins first, you must put on program mode then reset in normal mode) :

/*

#include "Arduino.h" #include "LoRa_E32.h"

// ---------- esp8266 pins -------------- //LoRa_E32 e32ttl(D2, D3, D5, D7, D6); //LoRa_E32 e32ttl(D2, D3, D5, D7, D6); // Config without connect AUX and M0 M1 #include <SoftwareSerial.h> SoftwareSerial mySerial(D2, D3);// e32 TX e32 RX LoRa_E32 e32ttl(&mySerial, D5, D7, D6);

//#include <SoftwareSerial.h> //SoftwareSerial mySerial(D2, D3); // e32 TX e32 RX //LoRa_E32 e32ttl(&mySerial, D5, D7, D6); // -------------------------------------

// ---------- Arduino pins -------------- //LoRa_E32 e32ttl(2, 3, 5, 7, 6); //LoRa_E32 e32ttl(2, 3); // Config without connect AUX and M0 M1

//#include <SoftwareSerial.h> //SoftwareSerial mySerial(2, 3);// e32 TX e32 RX //LoRa_E32 e32ttl(&mySerial, 5, 7, 6); // -------------------------------------

void printParameters(struct Configuration configuration); void printModuleInformation(struct ModuleInformation moduleInformation); //The setup function is called once at startup of the sketch void setup() { Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for native USB } delay(100);

e32ttl.begin();

// After set configuration comment set M0 and M1 to low
// and reboot if you directly set HIGH M0 and M1 to program
ResponseStructContainer c;
c = e32ttl.getConfiguration();
Configuration configuration = *(Configuration*) c.data;
configuration.ADDL = 0x01;
configuration.ADDH = 0x00;
configuration.CHAN = 0x04;
configuration.OPTION.fixedTransmission = FT_FIXED_TRANSMISSION;
e32ttl.setConfiguration(configuration, WRITE_CFG_PWR_DWN_SAVE);
printParameters(configuration);
// ---------------------------

}

// The loop function is called in an endless loop void loop() { delay(2000);

Serial.println("Broadcast message to channel 04");
ResponseStatus rs = e32ttl.sendBroadcastFixedMessage(0x04, "Broadcast message to channel 04");
Serial.println(rs.getResponseDescription());

}

void printParameters(struct Configuration configuration) { Serial.println("----------------------------------------");

Serial.print(F("HEAD : "));  Serial.print(configuration.HEAD, BIN);Serial.print(" ");Serial.print(configuration.HEAD, DEC);Serial.print(" ");Serial.println(configuration.HEAD, HEX);
Serial.println(F(" "));
Serial.print(F("AddH : "));  Serial.println(configuration.ADDH, BIN);
Serial.print(F("AddL : "));  Serial.println(configuration.ADDL, BIN);
Serial.print(F("Chan : "));  Serial.print(configuration.CHAN, DEC); Serial.print(" -> "); Serial.println(configuration.getChannelDescription());
Serial.println(F(" "));
Serial.print(F("SpeedParityBit     : "));  Serial.print(configuration.SPED.uartParity, BIN);Serial.print(" -> "); Serial.println(configuration.SPED.getUARTParityDescription());
Serial.print(F("SpeedUARTDatte  : "));  Serial.print(configuration.SPED.uartBaudRate, BIN);Serial.print(" -> "); Serial.println(configuration.SPED.getUARTBaudRate());
Serial.print(F("SpeedAirDataRate   : "));  Serial.print(configuration.SPED.airDataRate, BIN);Serial.print(" -> "); Serial.println(configuration.SPED.getAirDataRate());

Serial.print(F("OptionTrans        : "));  Serial.print(configuration.OPTION.fixedTransmission, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getFixedTransmissionDescription());
Serial.print(F("OptionPullup       : "));  Serial.print(configuration.OPTION.ioDriveMode, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getIODroveModeDescription());
Serial.print(F("OptionWakeup       : "));  Serial.print(configuration.OPTION.wirelessWakeupTime, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getWirelessWakeUPTimeDescription());
Serial.print(F("OptionFEC          : "));  Serial.print(configuration.OPTION.fec, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getFECDescription());
Serial.print(F("OptionPower        : "));  Serial.print(configuration.OPTION.transmissionPower, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getTransmissionPowerDescription());

Serial.println("----------------------------------------");

} void printModuleInformation(struct ModuleInformation moduleInformation) { Serial.println("----------------------------------------"); Serial.print(F("HEAD BIN: ")); Serial.print(moduleInformation.HEAD, BIN);Serial.print(" ");Serial.print(moduleInformation.HEAD, DEC);Serial.print(" ");Serial.println(moduleInformation.HEAD, HEX);

Serial.print(F("Freq.: "));  Serial.println(moduleInformation.frequency, HEX);
Serial.print(F("Version  : "));  Serial.println(moduleInformation.version, HEX);
Serial.print(F("Features : "));  Serial.println(moduleInformation.features, HEX);
Serial.println("----------------------------------------");

}

Fixed transmission: monitoring

As you have already seen on the first schema, you can hear all messages in the specified channel, and you must configure your address like so.

ResponseStructContainer c;
c = e32ttl.getConfiguration();
Configuration configuration = *(Configuration*) c.data;
configuration.ADDL = BROADCAST_ADDRESS;
configuration.ADDH = BROADCAST_ADDRESS;
configuration.OPTION.fixedTransmission = FT_FIXED_TRANSMISSION;
e32ttl.setConfiguration(configuration, WRITE_CFG_PWR_DWN_SAVE);

And the received message become (If you don’t attach all pins first, you must put on program mode than reset in normal mode) :

/*

#include "Arduino.h" #include "LoRa_E32.h"

// ---------- esp8266 pins -------------- //LoRa_E32 e32ttl(D2, D3, D5, D7, D6); //LoRa_E32 e32ttl(D2, D3); // Config without connect AUX and M0 M1

//#include <SoftwareSerial.h> //SoftwareSerial mySerial(D2, D3); // e32 TX e32 RX //LoRa_E32 e32ttl(&mySerial, D5, D7, D6); // -------------------------------------

// ---------- Arduino pins -------------- //LoRa_E32 e32ttl(2, 3, 5, 7, 6); LoRa_E32 e32ttl(2, 3); // Config without connect AUX and M0 M1

//#include <SoftwareSerial.h> //SoftwareSerial mySerial(2, 3); // e32 TX e32 RX //LoRa_E32 e32ttl(&mySerial, 5, 7, 6); // ------------------------------------- void printParameters(struct Configuration configuration); void printModuleInformation(struct ModuleInformation moduleInformation); //The setup function is called once at startup of the sketch void setup() { Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for native USB } delay(100);

e32ttl.begin();

// e32ttl.resetModule(); // After set configuration comment set M0 and M1 to low // and reboot if you directly set HIGH M0 and M1 to program ResponseStructContainer c; c = e32ttl.getConfiguration(); Configuration configuration = (Configuration) c.data; configuration.ADDL = BROADCAST_ADDRESS; configuration.ADDH = BROADCAST_ADDRESS; configuration.CHAN = 0x04; configuration.OPTION.fixedTransmission = FT_FIXED_TRANSMISSION; e32ttl.setConfiguration(configuration, WRITE_CFG_PWR_DWN_SAVE); printParameters(configuration); // --------------------------- Serial.println(); Serial.println("Start listening!"); }

// The loop function is called in an endless loop void loop() { if (e32ttl.available() > 1){ ResponseContainer rs = e32ttl.receiveMessage(); // First of all get the data String message = rs.data;

    Serial.println(rs.status.getResponseDescription());
    Serial.println(message);
}

}

void printParameters(struct Configuration configuration) { Serial.println("----------------------------------------");

Serial.print(F("HEAD : "));  Serial.print(configuration.HEAD, BIN);Serial.print(" ");Serial.print(configuration.HEAD, DEC);Serial.print(" ");Serial.println(configuration.HEAD, HEX);
Serial.println(F(" "));
Serial.print(F("AddH : "));  Serial.println(configuration.ADDH, DEC);
Serial.print(F("AddL : "));  Serial.println(configuration.ADDL, DEC);
Serial.print(F("Chan : "));  Serial.print(configuration.CHAN, DEC); Serial.print(" -> "); Serial.println(configuration.getChannelDescription());
Serial.println(F(" "));
Serial.print(F("SpeedParityBit     : "));  Serial.print(configuration.SPED.uartParity, BIN);Serial.print(" -> "); Serial.println(configuration.SPED.getUARTParityDescription());
Serial.print(F("SpeedUARTDatte  : "));  Serial.print(configuration.SPED.uartBaudRate, BIN);Serial.print(" -> "); Serial.println(configuration.SPED.getUARTBaudRate());
Serial.print(F("SpeedAirDataRate   : "));  Serial.print(configuration.SPED.airDataRate, BIN);Serial.print(" -> "); Serial.println(configuration.SPED.getAirDataRate());

Serial.print(F("OptionTrans        : "));  Serial.print(configuration.OPTION.fixedTransmission, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getFixedTransmissionDescription());
Serial.print(F("OptionPullup       : "));  Serial.print(configuration.OPTION.ioDriveMode, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getIODroveModeDescription());
Serial.print(F("OptionWakeup       : "));  Serial.print(configuration.OPTION.wirelessWakeupTime, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getWirelessWakeUPTimeDescription());
Serial.print(F("OptionFEC          : "));  Serial.print(configuration.OPTION.fec, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getFECDescription());
Serial.print(F("OptionPower        : "));  Serial.print(configuration.OPTION.transmissionPower, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getTransmissionPowerDescription());

Serial.println("----------------------------------------");

} void printModuleInformation(struct ModuleInformation moduleInformation) { Serial.println("----------------------------------------"); Serial.print(F("HEAD BIN: ")); Serial.print(moduleInformation.HEAD, BIN);Serial.print(" ");Serial.print(moduleInformation.HEAD, DEC);Serial.print(" ");Serial.println(moduleInformation.HEAD, HEX);

Serial.print(F("Freq.: "));  Serial.println(moduleInformation.frequency, HEX);
Serial.print(F("Version  : "));  Serial.println(moduleInformation.version, HEX);
Serial.print(F("Features : "));  Serial.println(moduleInformation.features, HEX);
Serial.println("----------------------------------------");

}

Thanks

  1. LoRa E32 device for Arduino, esp32 or esp8266: settings and basic usage
  2. LoRa E32 device for Arduino, esp32 or esp8266: library
  3. LoRa E32 device for Arduino, esp32 or esp8266: configuration
  4. LoRa E32 device for Arduino, esp32 or esp8266: fixed transmission
  5. LoRa E32 device for Arduino, esp32 or esp8266: power saving and sending structured data
  6. LoRa E32 device for Arduino, esp32 or esp8266: WOR (wake on radio) microcontroller and Arduino shield
  7. LoRa E32 device for Arduino, esp32 or esp8266: WOR (wake on radio) microcontroller and WeMos D1 shield
  8. EByte LoRa E32 device for Arduino, esp32 or esp8266: WOR (wake on radio) and new ESP32 shield
  9. Ebyte LoRa E32 with STM32: WOR (wake on radio) and new STM32 shield

Github library