# Makerverse LoRa-E5 Breakout

**Type:** Product page · **SKU:** CE09196 · **Brand:** [Makerverse](https://core-electronics.com.au/brands/makerverse-brand)
**Page:** https://core-electronics.com.au/makerverse-lora-e5-breakout-module.html ([markdown](https://core-electronics.com.au/makerverse-lora-e5-breakout-module.html.md))

Long-range and low power data transmission for remote projects.

## Pricing

- **Price:** $30.60 (inc GST) — $27.82 AUD, exc GST
- **Quantity discounts:** 4+ $26.43 (exc GST) · 12+ $25.04 (exc GST) · 50+ $23.65 (exc GST)

## Availability & dispatch

- In stock, ships same business day if ordered before 2PM (Australia/Sydney).
- We can dispatch 23 today, and up to 500 more in 6–42 days.

## Restrictions

**For use in Australia**

- Operate only in bands and with settings that are permitted for your location and application. Check this product’s supported frequencies in the description/specs.
- If you intend to operate outside shared/licence‑exempt conditions (e.g. in other bands, at higher power, with high‑gain antennas, or extended duty cycles), you must have the appropriate authorisation.
 
**For use in other regions**

- Follow the spectrum rules for your country/region and select frequencies and settings accordingly.

A declaration of use will need to be submitted during checkout.

## Description

The **Makerverse LoRa-E5 Breakout** is a compact LoRa radio, ready to bring long-range data transmission to your project.

Connect it to your microcontroller via UART or program it directly using STM32Cube. The LoRa-E5 Breakout provides labelled breakouts, RESET and BOOT buttons, and comes packaged with headers to get you started quickly. Power the Breakout directly from 3.3V or use the on-board regulator and power with up to 5.5V.

There are two ways to connect an antenna: Use the uFL connector to connect directly to an [antenna](https://core-electronics.com.au/915mhz-ufl-antenna.html) or patch-lead; or bring-your-own [SMA connector](https://core-electronics.com.au/sma-connector.html) and resolder the antenna jumper resistor.

### Ways to use the Makerverse LoRa-E5 Breakout

- Basic: Connect to a computer with a [USB-UART converter](https://core-electronics.com.au/usb-to-uart-converter-cp2102.html) and control with AT Commands: Useful enough for learning how AT commands work, prototyping, and getting a "Hello, World!"
- Maker: Connect to a microcontroller via UART and control with AT Commands. Check the examples provided below.
- Super Advanced: User Application Development using the STM32Cube SDK.
 
### Features

The Makerverse LoRa-E5 Breakout relies on a [LoRa-E5 STM32WLE5JC Module](https://www.seeedstudio.com/LoRa-E5-Wireless-Module-p-4745.html), which is an FCC- and CE-certified module that combines a LoRa radio and microcontroller. It is powered by an ARM Cortex-M4 and Semtech SX126X LoRa chip, and supports LoRaWAN frequency bands worldwide with (G)FSK, BPSK, (G)MSK, and LoRa modulations.

- GPIOs broken out from the Lora-E5 STM32WLE5JC
- Global LoRaWAN® and LoRa frequency plans supported
- Long-distance transmission range up to 10km
- Power from 3.3 or 5V.
- Convenient RESET and BOOT buttons on board
 
### Technical Specifications

- Dimensions: 25.4 x 45.72 mm
- Mounting Holes: 3x 3.2 mm on a 2.54 mm (0.1") grid. Spacing: 17.78 x 38.1 mm
- Supply Voltage: 3.3 - 5.5 V
- Logic Voltage: 3.3 V
 
*Note: This product comes with headers as shown in the product photo. They are NOT pre-soldered to the board.*

### Example Code (MicroPython)

- [Publish Data to The Things Network (TTN)](https://core-electronics.com.au/#ABBKHRH)
- [P2P communication](https://core-electronics.com.au/#QH8L09C)

The following script has been tested with a [Raspberry Pi Pico](https://core-electronics.com.au/raspberry-pi/pico.html#category_2118). It joins The Things Network (TTN) and publishes some test data. Read the [AT Command Specification](https://core-electronics.com.au/attachments/uploads/lora-e5-at-command-specification-v1.0.pdf) to learn more.

```

# Connect to The Things Network (TTN) and publish some test data
#
# How to get started:
#   • Create an account on cloud.thethings.network
#   • Create an application
#   • Run this script to get the JoinEUI and DeviceEUI
#   • On your applicaiton, generate an AppKey and paste it as a string in the code below.
#   • Run this script again
#   • Monitor your applicaiton console and look for a test message being received on TTN
#
# This demo is based off the Getting Started Guide by seeedstudio:
# https://wiki.seeedstudio.com/LoRa-E5_STM32WLE5JC_Module/#getting-started
#
# Refer to the AT Command Specification
# https://core-electronics.com.au/attachments/uploads/lora-e5-at-command-specification-v1.0.pdf

# Put your key here (string). This should match the AppKey generated by your application.
#For example: app_key = 'E08B834FB0866939FC94CDCC15D0A0BE'
app_key = 'None'

# Regional LoRaWAN settings. You may need to modify these depending on your region.
# If you are using AU915: Australia
band='AU915'
channels='8-15'
DR='0'

# If you are using US915
# band='US915'
# channels='8-15'
# DR='1'
# 
# If you are using EU868
# band='EU868'
# channels='0-2'
# DR='0'

from machine import UART, Pin
from utime import sleep_ms
from sys import exit

uart1 = UART(1, baudrate=9600, tx=Pin(4), rx=Pin(5))
join_EUI = None   # These are populated by this script
device_EUI = None

### Function Definitions

def receive_uart():
    '''Polls the uart until all data is dequeued'''
    rxData=bytes()
    while uart1.any()>0:
        rxData += uart1.read(1)
        sleep_ms(2)
    return rxData.decode('utf-8')

def send_AT(command):
    '''Wraps the "command" string with AT+ and \r\n'''
    buffer = 'AT' + command + '\r\n'
    uart1.write(buffer)
    sleep_ms(300)

def test_uart_connection():
    '''Checks for good UART connection by querying the LoRa-E5 module with a test command'''
    send_AT('') # empty at command will query status
    data = receive_uart()
    if data == '+AT: OK\r\n' : print('LoRa radio is ready\n')
    else:
        print('No LoRa-E5 detected\n')
        exit()

def get_eui_from_radio():
    '''Reads both the DeviceEUI and JoinEUI from the device'''
    send_AT('+ID=DevEui')
    data = receive_uart()
    device_EUI = data.split()[2]

    send_AT('+ID=AppEui')
    data = receive_uart()
    join_EUI = data.split()[2]

    print(f'JoinEUI: {join_EUI}\n DevEUI: {device_EUI}')
    
def set_app_key(app_key):
    if app_key is None or app_key == 'None':
        print('\nGenerate an AppKey on cloud.thethings.network and enter it at the top of this script to proceed')
        exit()

    send_AT('+KEY=APPKEY,"' + app_key + '"')
    receive_uart()
    print(f' AppKey: {app_key}\n')

def configure_regional_settings(band=None, DR='0', channels=None):
    ''' Configure band and channel settings'''
    
    send_AT('+DR=' + band)
    send_AT('+DR=' + DR)
    send_AT('+CH=NUM,' + channels)
    send_AT('+MODE=LWOTAA')
    receive_uart() # flush
    
    send_AT('+DR')
    data = receive_uart()
    print(data)

def join_the_things_network():
    '''Connect to The Things Network. Exit on failure'''
    send_AT('+JOIN')
    data = receive_uart()
    print(data)

    status = 'not connected'
    while status == 'not connected':
        data = receive_uart()
        if len(data) > 0: print(data)
        if 'joined' in data.split():
            status = 'connected'
        if 'failed' in data.split():
            print('Join Failed')
            exit()
        
        sleep_ms(1000)
        
def send_message(message):
    '''Send a string message. The user's message string is wrapped in double quotes by this funciton'''
    send_AT('+MSG="' + message + '"')

    done = False
    while not done:
        data = receive_uart()
        if 'Done' in data or 'ERROR' in data:
            done = True
        if len(data) > 0: print(data)
        sleep_ms(1000)
        
def send_hex(message):
    '''Send a data message in hex format. The user's message string is wrapped in double quotes by this funciton'''
    send_AT('+MSGHEX="' + message + '"')

    done = False
    while not done:
        data = receive_uart()
        if 'Done' in data or 'ERROR' in data:
            done = True
        if len(data) > 0: print(data)
        sleep_ms(1000)

##########################################################
#        
# The main program starts here
#
##########################################################

test_uart_connection()

get_eui_from_radio()

set_app_key(app_key)

configure_regional_settings(band=band, DR=DR, channels=channels)

join_the_things_network()

# Send example data
print("sending test messages")
send_message("Hello, World!")
send_hex("00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF")

```

It's possible to send simple P2P messages between LoRa Breakouts as follows

Transmitter Code

```

# P2P Transmitter Example
# Transmit test data direct to another Makerverse LoRa Breakout

from machine import UART, Pin
from utime import sleep_ms, ticks_ms

sleep_ms(1000)
uart = UART(1, baudrate=9600, tx=Pin(4), rx=Pin(5), timeout=1000)

def receive_uart():
    '''Polls the uart until all data is dequeued'''
    rxData=bytes()
    while uart.any()>0:
        rxData += uart.read(1)
        sleep_ms(2)
    return rxData.decode('utf-8')

def send_AT(command):
    '''Wraps the "command" string with AT+ and \r\n'''
    buffer = 'AT' + command + '\r\n'
    uart.write(buffer)
#     sleep_ms(300)
    uart.readline()

def echo():
    while uart.any() > 0:
        rxData = uart.readline()
        print(rxData.decode('utf-8'))

send_AT('+MODE=TEST')
send_AT('+TEST=RFCFG,915,SF7')

data = 0
last_transmit = 0
transmit_period = 500

while True:
    now = ticks_ms()
    if now - last_transmit > transmit_period:
        last_transmit = now
        print("Send data:",data)
        send_AT('+TEST=TXLRPKT,"{}"\n'.format(data))  # send test data
        data += 1 # increment and loop test-data
        data = data % 255
    
    echo() # show debug data from LoRa-E5 module
    
    
    sleep_ms(600)

```

Receiver Code

```

# P2P Receiver Example
# Receive test data from another Makerverse LoRa Breakout

from machine import UART, Pin
from utime import sleep_ms

sleep_ms(1000)
uart = UART(1, baudrate=9600, tx=Pin(4), rx=Pin(5))

def receive_uart():
    '''Polls the uart until all data is dequeued'''
    rxData=bytes()
    while uart1.any()>0:
        rxData += uart1.read(1)
        sleep_ms(2)
    return rxData.decode('utf-8')

def send_AT(command):
    '''Wraps the "command" string with AT+ and \r\n'''
    buffer = 'AT' + command + '\r\n'
    uart.write(buffer)
    sleep_ms(300)

def receive():
    uart.write('at+test=rxlrpkt\n')
    out = ''
    rxData=bytes()
    while uart.any()>0:
        rxData += uart.readline()
    data = rxData.decode('utf-8')
    out = data.replace('+TEST: RXLRPKT','') # strip AT command formatting
    return out

send_AT('+MODE=TEST')
send_AT('+TEST=RFCFG,915,SF7')

sleep_ms(100)

while True:   
    raw_data = receive() # show debug data from LoRa-E5 module
    
    if len(raw_data) > 2:
        print(raw_data)
    sleep_ms(200)

```

**Resources**

- [AT Command Specification](https://core-electronics.com.au/attachments/uploads/lora-e5-at-command-specification-v1.0.pdf)
- [LoRa-E5 STM32WLE5JC Datasheet](https://core-electronics.com.au/attachments/uploads/lora-e5-module-datasheet-v1.0.pdf)
- [Hardware Repository](https://github.com/CoreElectronics/CE-Makerverse-LoRa-E5-Breakout-Module)
- [Schematic](https://github.com/CoreElectronics/CE-Makerverse-LoRa-E5-Breakout-Module/raw/main/Documents/schematic.pdf)
 
![](https://core-electronics.com.au/media/wysiwyg/Makerverse-LoRa-E5-Breakout.jpg)![](https://core-electronics.com.au/media/wysiwyg/Makerverse-LoRa-E5-Breakout.jpg)![](https://core-electronics.com.au/media/wysiwyg/product_info/makerverse-labs-banner.jpg)![](https://core-electronics.com.au/media/wysiwyg/product_info/makerverse-labs-banner.jpg)

## Guides for this product

- [Raspberry Pi Pico with LoRaWAN and The Things Network - Makerverse LoRa-E5 Module - Transmit Weather Data into IoT](https://core-electronics.com.au/guides/wireless/lora-pico-the-things-network/)

## Videos for this product

- [Raspberry Pi Pico with LoRaWAN and The Things Network - Makerverse LoRa-E5 Module](https://core-electronics.com.au/videos/-raspberry-pi-pico-with-lorawan-and-the-things-network-makerverse-lora-e5-module)
- [Weatherproof LoRa Environmental Monitor - Makerverse LoRa-E5 and Pico Project - The Things Network and DataCake](https://core-electronics.com.au/videos/weatherproof-lora-environmental-monitor-makerverse-lora-e5-and-pico-project-the-things-network-and-datacake)
- [The Factory \| PiicoDev Now Supporting ESP32 & January Updates](https://core-electronics.com.au/videos/the-factory-piicodev-now-supporting-esp32-january-updates)

## Images

- [Product image 1](https://core-electronics.com.au/media/catalog/product/c/e/ce09196-makerverse-lora-e5-breakout.jpg)
