LoRa Communication Between FiPy and Adafruit Feather 32u4 Running RadioHead Library
-
Hi,
I'm trying to receive the packets sent out from a Feather 32u4 using the RadioHead library on the FiPy; however, no matter what settings I try to adjust, I cannot seem to receive any of the packets sent by the feather. The feather uses a RFM95W. What I am trying to do is similar to this forum post from earlier (https://forum.pycom.io/topic/693/lopy-communication-with-rfm95-modules), where I am just trying to receive and read out the packets.
Currently, I am stuck where I cannot receive the packets on the FiPy in the first place, and would greatly appreciate any help I could get.
Here is the code on the FiPy:
import struct import socket from network import LoRa import time import gc LORA_MSG_FORMAT = "LLBBBBlB" class incoming_message: def __init__(self, data): self.control, self.deviceID, self.Seq, self.indicator1, self.indicator2, self.stype, self.svalue, self.check = struct.unpack(LORA_MSG_FORMAT, data) #self.control is something added from RFM95. Just discard it. Your message starts from the 5th byte class server: def __init__(self): cfg_mode = LoRa.LORA cfg_freq = 915000000 cfg_bandwidth=LoRa.BW_125KHZ # LoRa.BW_125KHZ or LoRa.BW_250KHZ cfg_sf = 7 # Accepts values between 6 and 12. # 6 = 64 Chips/Symbol # 7 = 128 Chips/Symbol # 8 = 256 Chips/Symbol # 9 = 512 Chips/Symbol # 10 = 1024 Chips/Symbol # 11 = 2048 Chips/Symbol # 12 = 4096 Chips/Symbol cfg_preamble=8 #configures the number of pre-amble symbols. The default value is 8 cfg_coding_rate=LoRa.CODING_4_5 #LoRa.CODING_4_5, LoRa.CODING_4_6, LoRa.CODING_4_7 or LoRa.CODING_4_8 cfg_power_mode=LoRa.ALWAYS_ON #LoRa.ALWAYS_ON, LoRa.TX_ONLY or LoRa.SLEEP self.lora = LoRa(mode=cfg_mode, frequency=cfg_freq, tx_power=14, bandwidth=cfg_bandwidth, sf=cfg_sf, preamble=cfg_preamble, coding_rate=cfg_coding_rate, power_mode=cfg_power_mode, tx_iq=False, rx_iq=False, public=False) self.lora.init(mode=cfg_mode, frequency=cfg_freq, tx_power=14, bandwidth=cfg_bandwidth, sf=cfg_sf, preamble=cfg_preamble, coding_rate=cfg_coding_rate, power_mode=cfg_power_mode, tx_iq=False, rx_iq=False, public=False) self.lora_sock = socket.socket(socket.AF_LORA, socket.SOCK_RAW) self.lora_sock.setblocking(False) def update(self): raw_data = self.lora_sock.recv(61) if raw_data: try: msg = incoming_message(raw_data) if msg.deviceID % msg.Seq == msg.check: print("msg received. devid:", msg.deviceID, " seq:", msg.Seq) else: print("msg check failed") except: print("msg failed to parse") else: pass def test_server(): srv = server() while True: srv.update() test_server()
And here is the code I am running on the Feather:
#include <SPI.h> #include <RH_RF95.h> #define FREQUENCY 915.0 struct tpayload { uint32_t deviceid; //4 byte seq; //1 byte indicator1; //1 byte indicator2; //1 byte stype; //1 long svalue; //4 byte check; //1 }; tpayload payload; RH_RF95 rf95(8,7); // Chip Select=8, INT Pin = 7 void setup() { Serial.begin(57600); while(!Serial); if (!rf95.init()) { Serial.println("init failed"); } if (!rf95.setFrequency(FREQUENCY)) { Serial.print("init freq failed"); } payload.seq = 0; payload.deviceid = 8512; payload.indicator1 = 1; payload.indicator1 = 2; payload.stype = 2; payload.svalue = -10; } void loop() { payload.seq++; if (payload.seq == 0) payload.seq++; // to avoid division by zero at the next line payload.check = payload.deviceid % payload.seq; // you need this to discard corrupted messages uint16_t now = micros(); rf95.send( (const void*)&payload, sizeof(payload)); delay(5000); }
In the RadioHead Library I have edited in the matching modem config settings, so I am not quite sure what I am still missing. Again, I would greatly appreciate any help I could get!
-
This post is deleted!
-
I should probably clarify what I am trying to do a bit better:
I am trying to use the code that constantinos and Clemens posted earlier, just to try to get a version that will receive packets from the feather in the first place. I looked through the forum for other posts and have tried tinkering with the different settings to no avail.
Forgive me for any mistakes I am making, as I am new to this and trying to figure it out! Again, I would greatly appreciate any help I can get!
-
This post is deleted!