The Raspberry Pi+ LoRa(TM) Expansion Board has two RF modules. In my setup CE0 was 915MHz and CE1 was 433MHz so I modified the demo application so I could run both ports independently or simultaneously.
#if UPUTRONICS_RPIPLUS_CS0 && !UPUTRONICS_RPIPLUS_CS1 private const byte InterruptLine = 25; private Rfm9XDevice rfm9XDevice = new Rfm9XDevice(ChipSelectPin.CS0, InterruptLine); #endif #if !UPUTRONICS_RPIPLUS_CS0 && UPUTRONICS_RPIPLUS_CS1 private const byte InterruptLine = 16; private Rfm9XDevice rfm9XDevice = new Rfm9XDevice(ChipSelectPin.CS1, InterruptLine); #endif #if UPUTRONICS_RPIPLUS_CS0 && UPUTRONICS_RPIPLUS_CS1 // 433MHz and 915MHz in my setup private const byte InterruptLineCS0 = 25; private Rfm9XDevice rfm9XDeviceCS0 = new Rfm9XDevice(ChipSelectPin.CS0, InterruptLineCS0); private const byte InterruptLineCS1 = 16; private Rfm9XDevice rfm9XDeviceCS1 = new Rfm9XDevice(ChipSelectPin.CS1, InterruptLineCS1); #endif
The in the run method
#if UPUTRONICS_RPIPLUS_CS0 && UPUTRONICS_RPIPLUS_CS1 public void Run(IBackgroundTaskInstance taskInstance) { rfm9XDeviceCS0.Initialise(915000000.0, paBoost: true, rxPayloadCrcOn: true); rfm9XDeviceCS1.Initialise(433000000.0, paBoost: true, rxPayloadCrcOn: true); #if DEBUG rfm9XDeviceCS0.RegisterDump(); rfm9XDeviceCS1.RegisterDump(); #endif rfm9XDeviceCS0.OnReceive += Rfm9XDevice_OnReceive; rfm9XDeviceCS1.OnReceive += Rfm9XDevice_OnReceive; #if ADDRESSED_MESSAGES_PAYLOAD rfm9XDeviceCS0.Receive(UTF8Encoding.UTF8.GetBytes(Environment.MachineName)); rfm9XDeviceCS1.Receive(UTF8Encoding.UTF8.GetBytes(Environment.MachineName)); #else rfm9XDeviceCS0.Receive(); rfm9XDeviceCS1.Receive(); #endif rfm9XDeviceCS0.OnTransmit += Rfm9XDevice_OnTransmit; rfm9XDeviceCS1.OnTransmit += Rfm9XDevice_OnTransmit; Task.Delay(10000).Wait(); while (true) { string messageText = string.Format("Hello from {0} ! {1}", Environment.MachineName, MessageCount); MessageCount -= 1; byte[] messageBytes = UTF8Encoding.UTF8.GetBytes(messageText); Debug.WriteLine("{0:HH:mm:ss}-TX {1} byte message {2}", DateTime.Now, messageBytes.Length, messageText); #if ADDRESSED_MESSAGES_PAYLOAD this.rfm9XDeviceCS0.Send(UTF8Encoding.UTF8.GetBytes("Netduino"), messageBytes); this.rfm9XDeviceCS1.Send(UTF8Encoding.UTF8.GetBytes("Arduino1"), messageBytes); #else this.rfm9XDeviceCS0.Send(messageBytes); this.rfm9XDeviceCS1.Send(messageBytes); #endif Task.Delay(10000).Wait(); } } #else public void Run(IBackgroundTaskInstance taskInstance) { rfm9XDevice.Initialise(433000000, paBoost: true, rxPayloadCrcOn : true); rfm9XDevice.Initialise(915000000, paBoost: true, rxPayloadCrcOn : true); #if DEBUG rfm9XDevice.RegisterDump(); #endif rfm9XDevice.OnReceive += Rfm9XDevice_OnReceive; #if ADDRESSED_MESSAGES_PAYLOAD rfm9XDevice.Receive(UTF8Encoding.UTF8.GetBytes(Environment.MachineName)); #else rfm9XDevice.Receive(); #endif rfm9XDevice.OnTransmit += Rfm9XDevice_OnTransmit; Task.Delay(10000).Wait(); while (true) { string messageText = string.Format("Hello from {0} ! {1}", Environment.MachineName, MessageCount); MessageCount -= 1; byte[] messageBytes = UTF8Encoding.UTF8.GetBytes(messageText); Debug.WriteLine("{0:HH:mm:ss}-TX {1} byte message {2}", DateTime.Now, messageBytes.Length, messageText); #if ADDRESSED_MESSAGES_PAYLOAD this.rfm9XDevice.Send(UTF8Encoding.UTF8.GetBytes("AddressHere"), messageBytes); #else this.rfm9XDevice.Send(messageBytes); #endif Task.Delay(10000).Wait(); } } #endif
In the debugger output I could see addressed messages being sent to and arriving from a 433MHz Arduino device and a 915MHz Netduino device.
The thread 0x5f8 has exited with code 0 (0x0). 22:06:44-RX From Netduino PacketSnr 9.5 Packet RSSI -49dBm RSSI -110dBm = 20 byte message "Hello NetMF LoRa! 82" 22:06:47-RX From Arduino1 PacketSnr 9.8 Packet RSSI -56dBm RSSI -101dBm = 11 byte message "t 20.2,h 90" 22:06:48-TX 25 byte message Hello from LoRaIoT1 ! 163 22:06:49-TX Done 22:06:49-TX Done The thread 0xe9c has exited with code 0 (0x0). 22:06:54-RX From Netduino PacketSnr 9.8 Packet RSSI -46dBm RSSI -111dBm = 20 byte message "Hello NetMF LoRa! 83" 22:06:57-RX From Arduino1 PacketSnr 9.8 Packet RSSI -61dBm RSSI -93dBm = 11 byte message "t 20.3,h 90" 22:06:58-TX 25 byte message Hello from LoRaIoT1 ! 162 22:06:59-TX Done 22:06:59-TX Done The thread 0xf88 has exited with code 0 (0x0). 22:07:04-RX From Netduino PacketSnr 9.5 Packet RSSI -48dBm RSSI -110dBm = 20 byte message "Hello NetMF LoRa! 84" 22:07:07-RX From Arduino1 PacketSnr 9.8 Packet RSSI -61dBm RSSI -93dBm = 11 byte message "t 20.2,h 90" 22:07:09-TX 25 byte message Hello from LoRaIoT1 ! 161 22:07:09-TX Done 22:07:09-TX Done
This particular configuration has not been extensively tested yet and should be treated as early Beta (11 Sept 2018)