Long-range and low power data transmission for remote projects.
In stock, ships same business day if ordered before 2PM
Delivered by Tue, 26th of Nov
Quantity Discounts:
Recommended Essentials:
$2.50
Restrictions apply to this RF Equipment for use in Australia:
For use in other locations around the world:
A declaration of use will need to be submitted during checkout.
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 or patch-lead; or bring-your-own SMA connector and resolder the antenna jumper resistor.
The Makerverse LoRa-E5 Breakout relies on a LoRa-E5 STM32WLE5JC Module, 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.
The following script has been tested with a Raspberry Pi Pico. It joins The Things Network (TTN) and publishes some test data. Read the AT Command Specification 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)
This product is listed in:
WirelessExact shipping can be calculated on the view cart page (no login required).
Products that weigh more than 0.5 KG may cost more than what's shown (for example, test equipment, machines, >500mL liquids, etc).
We deliver Australia-wide with these options (depends on the final destination - you can get a quote on the view cart page):
Non-metro addresses in WA, NT, SA & TAS can take 2+ days in addition to the above information.
Some batteries (such as LiPo) can't be shipped by Air. During checkout, Express Post and International Methods will not be an option if you have that type of battery in your shopping cart.
International Orders - the following rates are for New Zealand and will vary for other countries:
If you order lots of gear, the postage amount will increase based on the weight of your order.
Our physical address (here's a PDF which includes other key business details):
Unit 18, 132 Garden Grove Parade
Adamstown
NSW, 2289
Australia
Take a look at our customer service page if you have other questions such as "do we do purchase orders" (yes!) or "are prices GST inclusive" (yes they are!). We're here to help - get in touch with us to talk shop.
Have a product question? We're here to help!
Makers love reviews as much as you do, please follow this link to review the products you have purchased.
Product Comments