ABP stands for Authentication By Personalisation. It means that the encryption keys are configured manually on the device and can start sending frames to the Gateway without needing a 'handshake' procedure to exchange the keys (such as the one performed during an OTAA join procedure).
The example below attempts to get any data received after sending the frame. Keep in mind that the Gateway might not be sending any data back, therefore we make the socket non-blocking before attempting to receive, in order to prevent getting stuck waiting for a packet that will never arrive.
from network import LoRaimport socketimport ubinasciiimport struct# Initialise LoRa in LORAWAN mode.# Please pick the region that matches where you are using the device:# Asia = LoRa.AS923# Australia = LoRa.AU915# Europe = LoRa.EU868# United States = LoRa.US915lora =LoRa(mode=LoRa.LORAWAN, region=LoRa.EU868)# create an ABP authentication paramsdev_addr = struct.unpack(">l", binascii.unhexlify('00000005'))[0]nwk_swkey = ubinascii.unhexlify('2B7E151628AED2A6ABF7158809CF4F3C')app_swkey = ubinascii.unhexlify('2B7E151628AED2A6ABF7158809CF4F3C')# join a network using ABP (Activation By Personalization)lora.join(activation=LoRa.ABP, auth=(dev_addr, nwk_swkey, app_swkey))# create a LoRa sockets = socket.socket(socket.AF_LORA, socket.SOCK_RAW)# set the LoRaWAN data rates.setsockopt(socket.SOL_LORA, socket.SO_DR, 5)# make the socket blocking# (waits for the data to be sent and for the 2 receive windows to expire)s.setblocking(True)# send some datas.send(bytes([0x01, 0x02, 0x03]))# make the socket non-blocking# (because if there's no data received it will block forever...)s.setblocking(False)# get any data received (if any...)data = s.recv(64)print(data)