The Unfancy Remote | WIP DIY reliable remote

Have been looking through the project, looks awesome so far.

A few comments, note that I don’t have a huge amount of experience so could totally be missing things.

I noticed that the LoRa module is using the explicit header (default set up in setupLoRa()). Since there is only fixed size packets you could try using the implicit packet length with
setPacketParams(12, LORA_PACKET_FIXED_LENGTH, 255, LORA_CRC_ON, LORA_IQ_NORMAL, 0, 0);
That will reduce the time on air for the packet from 2.74ms → 2.34ms for no real loss.

What is a good target for time on air? The datasheet for the semtech sx1280 shows you can increase the sensitivity by adjusting bandwidth and spreading factor at the cost of time on air. If a remote can operate well with a larger time on air the increased sensitivity might help dropouts a lot. For example increasing the spreading factor from 7 → 8 results in an increase in sensitivity of 3dBm but increases the time on air from 2.74ms->5.48ms. You said you had the throttle update down to 50Hz so maybe just need a time on air under 20ms?

Last one, have you considered encrypting the packets at all? In its current for the receiver has no method to check for malicious packets. Someone could read the Identity off a transmitted packet and then transmit packets containing 100% throttle or something else bad. Maybe not a likely outcome but worthwhile considering.
You could also use the encryption key for preventing collisions without transmitting an identity in the packet. The receiver could decrypt an incoming packet with its own key and then check whether the packet makes sense (correct range of throttle, or maybe have a known first byte for the packet) and reject any that don’t since they weren’t encrypted with the same key. The main downside here is that both receiver and transmitter need to know the key which could either be baked into the code like the identity is currently or handed off during pairing.

12 Likes