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 5000m to 11000m).
Ebyte LoRa E220 LLCC68 device for Arduino, esp32 or esp8266 specs and primary usage
Here a selection of Ebyte LoRa E220 E220-400T22D 433MHz 5Km - E220-400T30D 433MHz 10Km - E220-900T22D 868MHz 915MHz 5Km - E220-900T30D 868MHz 915MHz 10Km
LLCC68
LoRa Smart Home (LLCC68) is a sub-GHz LoRa® RF Transceiver for medium-range indoor and indoor to outdoor wireless applications. SPI interface. Pin-to-pin compatible with SX1262. SX1261, SX1262, SX1268, and LLCC68 are designed for long battery life with just 4.2 mA of active receive current consumption. The SX1261 can transmit up to +15 dBm, and the SX1262, SX1268, and LLCC68 can transmit up to +22 dBm with highly efficient integrated power amplifiers.
EByte LoRa E220 LLCC68
These devices support LoRa modulation for LPWAN use cases and (G)FSK modulation for legacy use cases. The devices are highly configurable to meet different application requirements for consumer use. The device provides LoRa modulation compatible with Semtech transceivers used by the LoRaWAN® specification released by the LoRa Alliance®. The radio is suitable for systems targeting compliance with radio regulations, including but not limited to ETSI EN 300 220, FCC CFR 47 Part 15, China regulatory requirements, and the Japanese ARIB T-108. Continuous frequency coverage from 150MHz to 960MHz allows the support of all major sub-GHz ISM bands worldwide.
Features
The new LoRa spread spectrum modulation technology developed based on LLCC68, it brings a more extended communication distance and stronger anti-interference ability;
Support users to set the communication key by themselves, and it cannot be read, which significantly improves the confidentiality of user data;
Support LBT function, monitor the channel environment noise before sending, which significantly improves the communication success rate of the module in harsh environments;
Support RSSI signal strength indicator function for evaluating signal quality, improving communication network, and ranging;
Support air wakeup, that is ultra-low power consumption, suitable for battery-powered applications;
Support point to point transmission, broadcast transmission, channel sense;
Support deep sleep, the power consumption of the whole machine is about 5uA in this mode;
The module has built-in PA+LNA, and the communication distance can reach 5km under ideal conditions;
The parameters are saved after power-off, and the module will work according to the set parameters after power-on;
Efficient watchdog design, once an exception occurs, the module will automatically restart and continue to work according to the previous parameter settings;
Support the bit rate of2.4k~62.5kbps;
Support 3.0~5.5V power supply, power supply greater than 5V can guarantee the best performance;
Industrial standard design, supporting long-term use at -40~+85℃;
Comparison
LLCC68 SX1278-SX1276 Distance > 11Km 8Km Rate (LoRa) 1.76Kbps – 62.5Kbps 0.3Kbps – 19.2Kbps Sleep power consumption 2µA 5µA
Description
Like the little brother e32, the module features the FEC Forward Error Correction algorithm , ensuring its high coding efficiency & good correction performance . In the case of sudden interference, it can automatically correct the interfered data packets, so correspondingly improve the reliability and transmission range. But without FEC, those date packets can only be dropped . And with the rigorous encryption & decryption, data interception becomes pointless.
Support LBT function monitors the channel environment noise before sending, which significantly improves the communication success rate of the module in harsh environments.
Ebyte LoRa E220 device for Arduino, esp32 or esp8266 carrier sense
It has onboard LoRa spread spectrum technology that helps the communication stability with this long-range anti-interference technology.
EByte LoRa E220 LLCC68 Spread Spectrum Technology anti-interference
And finally, have an essential feature, the RSSI , you can check the signal strength on all messages sent.
EByte LoRa E220 LLCC68 signal strength RSSI
Operating and transmission type
These devices have some interesting functions:
Transmission
LoRa E220 transmitting scenarios
Transparent transmission
This can be considered like a “Demo mode”. By default, you can send messages to all devices of the same configured address and channel.
Fixed transmission
You can specify an address and a channel to send the message in this transmission type. You can send a message to a:
Specified device with a predeterminated Address Low, Address High and Channel.
LoRa E220 Fixed message to a specified device
Broadcast a message on predeterminated Channel.
Broadcast message to a set of channel devices
Normal mode
Simply send the message.
WOR transmitter mode and WOR receiver
As you can intend, if a device is in WOR transmitter mode, you can “wake” one or more devices in a WOR receiver mode with preamble communication.
Program/sleep mode
With this configuration, you can change the configuration of your device.
EByte LoRa E220 LLCC68 power consumption chart
Specifications
Here are the specifications for the module:
Main Parameters Value Remarks Min. Typical Max Operating voltage(V) 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) – 16 – – 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) 2.4k 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 200 Byte Can be configured via command as 32/64/128/200 bytes per packet totransmit Buffer 400 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)
You must pay attention to communication level that differs from the 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 connect 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. It can be ground. 2 M1 Input(weak pull-up) Work with M0 & decide the four operating modes. Floating is not allowed; it can be ground. 3 RXD Input TTL UART inputs connect to external (MCU, PC) TXD output pin. It can be configured as open-drain or pull-up input. 4 TXD Output TTL UART outputs connect to external RXD (MCU, PC) input pin. Can be configured as open-drain or push-pull output 5 AUX OutputTo indicate the module’s working status & wake up the external MCU. During the procedure of self-check initialization, the pin outputs a low level. It can be configured as open-drain output or push-pull output (floating is allowed). 6 VCC Power supply 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 channels are open, and transparent transmission is on WOR Transmitter 0 1 WOR Transmitter WOR Receiver 1 0 WOR Receiver (Supports wake up over air) Deep sleep mode 1 1 The module goes to sleep (automatically wake up when configuring parameters)
Normal mode connection
For the following simple test, we are going to use Normal mode.
Connecting Wemos D1 mini (esp8266) for a basic usage
esp8266 has the advantage of having the same voltage of communication interface, so the connection schema is simpler than Arduino.
LoRa E220-TTL-100 Wemos D1 breadboard
It’s essential to add a pull-up resistor (4,7Kohm) to get good stability.
E220 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-5v GND GND
Or better use the shield.
WeMos D1 Shield LoRa EBYTE E32 mounted
You can get more info on the relative article (this shield is suitable for E32, E22, and E220).
Ebyte LoRa E32 device for Arduino, esp32 or esp8266: WOR (wake on radio) microcontroller and new WeMos D1 mini shield
Connecting esp32 for a basic usage
As WeMos, esp32 logic works at 3.3v, but It has 3 HardwareSerial so we will use Serial2.
Ebyte LoRa E220 device esp32 dev kit v1 breadboard transparent transmission (normal mode)
E220 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-5v GND GND
Or also, for this, you can use the relative shield.
esp32 DOIT DEV KIT v1 EByte LoRa E32 shield main
You can get more info on the relative article (this shield is suitable for E32, E22, and E220).
Ebyte LoRa E32 device for Arduino, esp32 or esp8266: WOR (wake on radio) and new ESP32 shield
Connecting Arduino for a basic usage
Arduino’s working voltage is 5v, so we need to add a voltage divider on the RX pin of the 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 the signal, then put it together on RX.
LoRa E220-TTL-100 Arduino breadboard
E220 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-5v GND GND
Or the relative shield.
LoRa E32 Arduino shield mounted
You can get more info on the relative article (this shield is suitable for E32, E22, and E220).
Ebyte LoRa E32 device for Arduino, esp32 or esp8266: WOR (wake on radio) microcontroller and new Arduino shield
Arduino MKR WiFi 1010
Ebyte LoRa Exx Arduino MKR WiFi 1010 normal mode connected breadboard
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 Not connected VCC 5V GND GND
Simple communication sketch
If you put to 0 M1 and M0 pin you enter in “Normal” mode, you can receive and transmit all the data from device A to B; this modality is defined as “Transparent transmission”.
You can use two microcontrollers of your choice.
At the start, send a message, and if you write on a serial from one 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
40
#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
39
#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
36
#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 WiFi 1010 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
#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
(Serial1.available()) {
Serial.write
(Serial1.read());
}
if
(
Serial.available
()) {
Serial1.write(
Serial.read
());
}
}
But this primary usage is quite unuseful, so in the next chapter, we will use my library and go in deep into device features.
Library
EByte LoRa E22 E32 Arduino library manager
Here is the last example with my library :
sketchArduino
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
54
#include
"Arduino.h"
#include
"LoRa_E220.h"
LoRa_E220 e22ttl(
2
,
3
);
void
setup
() {
Serial.begin
(
9600
);
delay
(
500
);
Serial.println
(
"Hi, I'm going to send message!"
);
e220ttl.begin();
ResponseStatus rs
=
e220ttl.sendMessage(
"Hello, world?"
);
Serial.println
(rs.getResponseDescription());
}
void
loop
() {
if
(e220ttl.available()>
1
) {
ResponseContainer rc
=
e220ttl.receiveMessage();
if
(rc.status.code
!
=
1
){
rc.status.getResponseDescription();
}
else
{
Serial.println
(rc.data);
}
}
if
(
Serial.available
()) {
String input
=
Serial.readString();
e220ttl.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
54
#include
"Arduino.h"
#include
"LoRa_E220.h"
LoRa_E220 e220ttl(D2, D3);
void
setup
() {
Serial.begin
(
9600
);
delay
(
500
);
Serial.println
(
"Hi, I'm going to send message!"
);
e220ttl.begin();
ResponseStatus rs
=
e220ttl.sendMessage(
"Hello, world?"
);
Serial.println
(rs.getResponseDescription());
}
void
loop
() {
if
(e220ttl.available()>
1
) {
ResponseContainer rc
=
e220ttl.receiveMessage();
if
(rc.status.code
!
=
1
){
rc.status.getResponseDescription();
}
else
{
Serial.println
(rc.data);
}
}
if
(
Serial.available
()) {
String input
=
Serial.readString();
e220ttl.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
54
#include
"Arduino.h"
#include
"LoRa_E220.h"
LoRa_E220 e220ttl(
&
Serial2);
void
setup
() {
Serial.begin
(
9600
);
delay
(
500
);
Serial.println
(
"Hi, I'm going to send message!"
);
e220ttl.begin();
ResponseStatus rs
=
e220ttl.sendMessage(
"Hello, world?"
);
Serial.println
(rs.getResponseDescription());
}
void
loop
() {
if
(e220ttl.available()>
1
) {
ResponseContainer rc
=
e220ttl.receiveMessage();
if
(rc.status.code
!
=
1
){
rc.status.getResponseDescription();
}
else
{
Serial.println
(rc.data);
}
}
if
(
Serial.available
()) {
String input
=
Serial.readString();
e220ttl.sendMessage(input);
}
}
Arduino MKR WiFi 1010 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
54
#include
"Arduino.h"
#include
"LoRa_E220.h"
LoRa_E220 e220ttl(
&
Serial1);
void
setup
() {
Serial.begin
(
9600
);
delay
(
500
);
Serial.println
(
"Hi, I'm going to send message!"
);
e220ttl.begin();
ResponseStatus rs
=
e220ttl.sendMessage(
"Hello, world?"
);
Serial.println
(rs.getResponseDescription());
}
void
loop
() {
if
(e220ttl.available()>
1
) {
ResponseContainer rc
=
e220ttl.receiveMessage();
if
(rc.status.code
!
=
1
){
rc.status.getResponseDescription();
}
else
{
Serial.println
(rc.data);
}
}
if
(
Serial.available
()) {
String input
=
Serial.readString();
e220ttl.sendMessage(input);
}
}
If you have already changed the configuration, you must restore the base parameter:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
ResponseStructContainer c;
c
=
e220ttl.getConfiguration();
Configuration configuration
=
*
(Configuration
*
) c.data;
Serial.println
(c.status.getResponseDescription());
configuration.ADDL
=
0x03
;
configuration.ADDH
=
0x00
;
configuration.CHAN
=
23
;
configuration.SPED.uartBaudRate
=
UART_BPS_9600;
configuration.SPED.airDataRate
=
AIR_DATA_RATE_010_24;
configuration.SPED.uartParity
=
MODE_00_8N1;
configuration.OPTION.subPacketSetting
=
SPS_200_00;
configuration.OPTION.RSSIAmbientNoise
=
RSSI_AMBIENT_NOISE_DISABLED;
configuration.OPTION.transmissionPower
=
POWER_22;
configuration.TRANSMISSION_MODE.enableRSSI
=
RSSI_DISABLED;
configuration.TRANSMISSION_MODE.fixedTransmission
=
FT_TRANSPARENT_TRANSMISSION;
configuration.TRANSMISSION_MODE.enableLBT
=
LBT_DISABLED;
configuration.TRANSMISSION_MODE.WORPeriod
=
WOR_2000_011;
e220ttl.setConfiguration(configuration, WRITE_CFG_PWR_DWN_SAVE);
c.close();
but we are going to see It better in the following article.
Thanks
But this kind of usage is very reductive; in the following articles, we are going more deeply, and we start to use the library massively to simplify the complex configuration and settings.
Ebyte LoRa E220 device for Arduino, esp32 or esp8266: settings and basic usage Ebyte LoRa E220 device for Arduino, esp32 or esp8266: library Ebyte LoRa E220 device for Arduino, esp32 or esp8266: configuration Ebyte LoRa E220 device for Arduino, esp32 or esp8266: fixed transmission, broadcast, monitor, and RSSI Ebyte LoRa E220 device for Arduino, esp32 or esp8266: power-saving and sending structured data Ebyte LoRa E220 device for Arduino, esp32 or esp8266: WOR microcontroller and Arduino shield Ebyte LoRa E220 device for Arduino, esp32 or esp8266: WOR microcontroller and WeMos D1 shield Ebyte LoRa E220 device for Arduino, esp32 or esp8266: WOR microcontroller and esp32 dev v1 shield
Github library