Ebyte LoRa E22 device for Arduino, esp32 or esp8266 specs basic usage
LoRa or Long Range wireless data telemetry is a technology pioneered by Semtech that operates at a lower frequency than NRF24L01 (433 MHz, 868 MHz, or 916 MHz against 2.4 GHz for the NRF24L01) but at thrice the distance (from 4000m to 10000m).
Ebyte LoRa E22 device for Arduino, esp32 or esp8266 2 devices
You can find here AliExpress (433MHz 5.5Km) - AliExpress (433MHz 10Km) - AliExpress (868MHz 915Mhz 5.5Km) - AliExpress (868MHz 915Mhz 10Km)
We are going to test E22-400T22D and E22-400T22S . It is a wireless transceiver module, operates at 410 493 MHz based on original RFIC SX1268 from SEMTECH, transparent transmission is available, TTL level. The module adopts LORA spread spectrum technology.
Like the little brother e22 the module features FEC Forward Error Correction algorithm , which ensure its high coding efficiency & good correction performance . In the case of sudden interference, it can correct the interfered data packets automatically, so that the reliability and transmission range are improved correspondingly. But without FEC, those da te packets can only be dropped . And with the rigorous encryption & decryption, data interception becomes pointless. The function of data compression can decrease the transmission time & probability of being interference, while improving the reliability & transmission efficiency.
Ebyte LoRa E22 device for Arduino, esp32 or esp8266 carrier sense
But more than e22 this module have a carrier sense features, that wait transmission if there are some air interference, can be used like a repeater , have watchdog that if there is an error device restart and continue working, have deep sleep for better power saving, and first the sx1268 with less power grant more power .
Ebyte LoRa E22 device repeater relay function ultra long distance
Remotely configure or read wireless module parameters by sending command packets wirelessly.
And finally have an important features the RSSI , you can check the signal strenght on all message sended.
Ebyte LoRa E22 device for Arduino, esp32 or esp8266 RSSI signal strength
Operating and transmission type
This device have some interesting function:
Transmission
LoRa E22 transmitting scenarios
Transparent transmission
This can be considered like a “Demo mode”, by default you can send message to all device of same configured address and channel.
Fixed transmission
This type of transmission you can specify an address and a channel where where you want send the message. You can send message to a:
Specified device with a predeterminated Address Low, Address High and Channel.
LoRa E22 Fixed message to a specified device
Broadcast a message on predeterminated Channel.
Broadcast message to a set of channel devices
Normal mode
Simply send message.
Wake-up mode and power-saving mode
As you can intend if a device is in Wake-up mode can “wake” one or more devices that are in power-saving mode with a preamble communication.
Program/sleep mode
With this configuration you can change configuration of your device.
Specifications
Here’s the specifications for the module:
Main Parameters Value Remarks Min. Typical Max Operating voltage(V) 2.3 5.0 5.5 ≥5.0 V ensures output power Communication level(V) – 3.3 – For 5V TTL, it may be at risk of burning down Operating temperature(℃) -40 – 85 Industrial design Operating frequency(MHz) 410.125 433.125 493.125 Support ISM band TX Current(mA) – 110 – Instant power consumption RX current(mA) – 12 – – Sleep current(μA) – 2 – Software is shut down Max Tx power(dBm) 21.5 22.0 22.5 – Receiving sensitivity(dBm) -146 -147 -148 Air data rate is 0.3 kbps Air data rate(bps) 0.3k 2.4k 62.5k Controlled via user’s programming
Main parameter Description Remarks Distance for reference 5km Test condition:clear and open area, antenna gain: 5dBi,antenna height:2.5m,air data rate: 2.4kbps TX length 240 Byte Can be configured via command as 32/64/128/240 bytes per packet totransmit Buffer 1000 Byte – Modulation LoRa New generation LoRa modulation technology Communication interface UART TTL level Package DIP – Connector 1*7*2.54mm – Size 21*36 mm – Antenna SMA 50 ohm impedance
Communication Interface: UART – 8N1, 8E1, 8O1, Eight kinds of UART baud Rate, from 1200 to 115200bps (Default: 9600)
Electronic parameter Min. Typ. Max. Unit Condition Power supply 3.3 3.6 5.5 V Communication level 3.0 3.3 3.6 V Transmitting current 95 100 105 mA 22dBm(160mW) Receiving current 6 6.5 7 mA Sleep current 1 2 3 nA Operating temperature -40 20 +85 ℃ Operating humidity 10 60 90 % Storage temperature -40 20 +125 ℃
You must pay attention on communication level that differ from power supply, the second can receive voltage like 3.3v (esp8266 and esp32) and 5v (Arduino), but the first want a 3.3v, so to connecto to an Arduino you must use a Voltage divider (Voltage divider: calculator and application ) to prevent damage to the device.
Pinout
sx1278 sx1276 wireless lora uart module serial 3000m arduino 433 rf
Pin No. Pin item Pin direction Pin application 1 M0 Input(weak pull-up) Work with M1 & decide the four operating modes.Floating is not allowed, can be ground. 2 M1 Input(weak pull-up) Work with M0 & decide the four operating modes.Floating is not allowed, can be ground. 3 RXD Input TTL UART inputs, connects to external (MCU, PC) TXD outputpin. Can be configured as open-drain or pull-up input. 4 TXD Output TTL UART outputs, connects to external RXD (MCU, PC) input pin. Can be configured as open-drain or push-pull output 5 AUX OutputTo indicate module’s working status & wakes up the external MCU. During the procedure of self-check initialization, the pin outputs low level. Can be configured as open-drain output orpush-pull output (floating is allowed). 6 VCC Power supply 2.3V~5.5V DC 7 GND Ground
As you can see you can set various modes via M0 and M1 pins.
Mode M1 M0 Explanation Normal 0 0 UART and wireless channel are open, transparent transmission is on WOR mode 0 1 Can be defined as WOR transmitter and WOR receiver Configuration mode 1 0 Users can access the register through the serial port to control the working state of the module Deep sleep mode 1 1 Sleep mode.
Normal mode connection
For the next simple test we are going to use Normal mode.
Connecting Wemos D1 mini (esp8266) for a basic usage
esp8266 have the advantage to have same voltage of communication interface so the connection schema is more simple than Arduino.
LoRa E22-TTL-100 Wemos D1 breadboard
It’s important to add pull-up resistor (4,7Kohm) to get good stability.
E22 WeMos M0 GND (Set normal mode) M1 GND (Set normal mode) RX PIN D2 (PullUP 4,7KΩ) TX PIN D3 (PullUP 4,7KΩ) AUX Not connected VCC 3.3v GND GND
Connecting esp32 for a basic usage
As WeMos, esp32 logic works at 3.3v but It have 3 HardwareSerial, so we are going to use Serial2.
Ebyte LoRa E22 device esp32 dev kit v1 breadboard transparent transmission (normal mode)
E22 esp32 M0 GND (Set normal mode) M1 GND (Set normal mode) RX TX2 (PullUP 4,7KΩ) TX RX2 (PullUP 4,7KΩ) AUX Not connected VCC 3.3v GND GND
Connecting Arduino MKR for a basic usage
Ebyte LoRa Exx Arduino MKR WiFi 1010 normal mode connected breadboard
E22 Arduino MKR M0 GND (Set normal mode) M1 GND (Set normal mode) TX PIN 14 Tx (PullUP 4,7KΩ) RX PIN 13 Rx (PullUP 4,7KΩ) AUX PIN 1 (PullUP 4,7KΩ) VCC 5V GND GND
Connecting Arduino for a basic usage
Arduino working voltage is 5v, so we need to add a voltage divider on RX pin of LoRa module to prevent damage, you can get more information here Voltage divider: calculator and application .
You can use a 2Kohm resistor to GND and 1Kohm from signal than put together on RX.
LoRa E22-TTL-100 Arduino breadboard
E22 Arduino M0 GND (Set normal mode) M1 GND (Set normal mode) RX PIN D2 (PullUP 4,7KΩ & Voltage divider) TX PIN D3 (PullUP 4,7KΩ) AUX Not connected VCC 3.3v GND GND
Simple communication sketch
If you put to 0 M1 and M0 pin you enter in “Normal” mode, than you can receive and trasmit all the data from device A to B, this modality is defined “Trasparent transmission”.
You can use 2 Arduinos or 2 Wemos D1 mini or one of kind.
At start send a message and if you write on serial from one of device the text is transferred to the other device. You can use 2 Arduinos or 2 Wemos or one and one as you prefer.
Arduino sketch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include "Arduino.h"
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3);
void
setup() {
Serial.begin(9600);
delay(500);
Serial.println(
"Hi, I'm going to send message!"
);
mySerial.begin(9600);
mySerial.println(
"Hello, world?"
);
}
void
loop() {
if
(mySerial.available()) {
Serial.write(mySerial.read());
}
if
(Serial.available()) {
mySerial.write(Serial.read());
}
}
Wemos D1 mini sketch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include "Arduino.h"
#include <SoftwareSerial.h>
SoftwareSerial mySerial(D2, D3);
void
setup() {
Serial.begin(9600);
delay(500);
Serial.println(
"Hi, I'm going to send message!"
);
mySerial.begin(9600);
mySerial.println(
"Hello, world?"
);
}
void
loop() {
if
(mySerial.available()) {
Serial.write(mySerial.read());
}
if
(Serial.available()) {
mySerial.write(Serial.read());
}
}
esp32 sketch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include "Arduino.h"
void
setup() {
Serial.begin(9600);
delay(500);
Serial.println(
"Hi, I'm going to send message!"
);
Serial2.begin(9600);
Serial2.println(
"Hello, world?"
);
}
void
loop() {
if
(Serial2.available()) {
Serial.write(Serial2.read());
}
if
(Serial.available()) {
Serial2.write(Serial.read());
}
}
Arduino MKR sketch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include
"Arduino.h"
void
setup
() {
Serial.begin
(
9600
);
delay
(
500
);
Serial.println
(
"Hi, I'm going to send message!"
);
Serial1.begin(
9600
);
Serial1.println(
"Hello, world?"
);
}
void
loop
() {
if
(Serial1.available()) {
Serial.write
(Serial1.read());
}
if
(
Serial.available
()) {
Serial1.write(
Serial.read
());
}
}
But this basic usage is quite unusefully, so in the next chapter we are going to use my library and go in deep of device features.
Library
EByte LoRa E22 E32 Arduino library manager
Here the last example with my library :
Arduino sketch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include "Arduino.h"
#include "LoRa_E22.h"
LoRa_E22 e22ttl(2, 3);
void
setup() {
Serial.begin(9600);
delay(500);
Serial.println(
"Hi, I'm going to send message!"
);
e22ttl.begin();
ResponseStatus rs = e22ttl.sendMessage(
"Hello, world?"
);
Serial.println(rs.getResponseDescription());
}
void
loop() {
if
(e22ttl.available()>1) {
ResponseContainer rc = e22ttl.receiveMessage();
if
(rc.status.code!=1){
rc.status.getResponseDescription();
}
else
{
Serial.println(rc.data);
}
}
if
(Serial.available()) {
String input = Serial.readString();
e22ttl.sendMessage(input);
}
}
Wemos D1 (esp8266) sketch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include "Arduino.h"
#include "LoRa_E22.h"
LoRa_E22 e22ttl(D2, D3);
void
setup() {
Serial.begin(9600);
delay(500);
Serial.println(
"Hi, I'm going to send message!"
);
e22ttl.begin();
ResponseStatus rs = e22ttl.sendMessage(
"Hello, world?"
);
Serial.println(rs.getResponseDescription());
}
void
loop() {
if
(e22ttl.available()>1) {
ResponseContainer rc = e22ttl.receiveMessage();
if
(rc.status.code!=1){
rc.status.getResponseDescription();
}
else
{
Serial.println(rc.data);
}
}
if
(Serial.available()) {
String input = Serial.readString();
e22ttl.sendMessage(input);
}
}
esp32 sketch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include "Arduino.h"
#include "LoRa_E22.h"
LoRa_E22 e22ttl(&Serial2);
void
setup() {
Serial.begin(9600);
delay(500);
Serial.println(
"Hi, I'm going to send message!"
);
e22ttl.begin();
ResponseStatus rs = e22ttl.sendMessage(
"Hello, world?"
);
Serial.println(rs.getResponseDescription());
}
void
loop() {
if
(e22ttl.available()>1) {
ResponseContainer rc = e22ttl.receiveMessage();
if
(rc.status.code!=1){
rc.status.getResponseDescription();
}
else
{
Serial.println(rc.data);
}
}
if
(Serial.available()) {
String input = Serial.readString();
e22ttl.sendMessage(input);
}
}
Arduino MKR sketch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include "Arduino.h"
#include "LoRa_E22.h"
LoRa_E22 e22ttl(&Serial1);
void
setup() {
Serial.begin(9600);
delay(500);
Serial.println(
"Hi, I'm going to send message!"
);
e22ttl.begin();
ResponseStatus rs = e22ttl.sendMessage(
"Hello, world?"
);
Serial.println(rs.getResponseDescription());
}
void
loop() {
if
(e22ttl.available()>1) {
ResponseContainer rc = e22ttl.receiveMessage();
if
(rc.status.code!=1){
rc.status.getResponseDescription();
}
else
{
Serial.println(rc.data);
}
}
if
(Serial.available()) {
String input = Serial.readString();
e22ttl.sendMessage(input);
}
}
If you have already change configuration you must restore base parameter:
1
2
3
4
5
6
7
8
ResponseStructContainer c;
c = e22ttl.getConfiguration();
Configuration configuration = *(Configuration*) c.data;
Serial.println(c.status.getResponseDescription());
configuration.CHAN = 0x17;
configuration.OPTION.fixedTransmission = FT_TRANSPARENT_TRANSMISSION;
e22ttl.setConfiguration(configuration, WRITE_CFG_PWR_DWN_SAVE);
but we are going to see It better in the next article.
Thanks
But this kind of usage is very very reductive, in the next articles we are going more in deep, and we start to use massively the library to simplify the complex configuration and settings.
Ebyte LoRa E22 device for Arduino, esp32 or esp8266: settings and basic usage Ebyte LoRa E22 device for Arduino, esp32 or esp8266: library Ebyte LoRa E22 device for Arduino, esp32 or esp8266: configuration Ebyte LoRa E22 device for Arduino, esp32 or esp8266: fixed transmission, broadcast, monitor, and RSSI Ebyte LoRa E22 device for Arduino, esp32 or esp8266: power-saving and sending structured data Ebyte LoRa E22 device for Arduino, esp32 or esp8266: repeater mode and remote settings Ebyte LoRa E22 device for Arduino, esp32 or esp8266: WOR microcontroller and Arduino shield Ebyte LoRa E22 device for Arduino, esp32 or esp8266: WOR microcontroller and WeMos D1 shield Ebyte LoRa E22 device for Arduino, esp32 or esp8266: WOR microcontroller and esp32 dev v1 shield
Shield and PCB