DIY Esk8 remotes with FireFlyOS

FireFly OS Remote Mini

Introduction

Since I couldn’t find any tutorial from beginning to end on the custom DIY remote with battery and OLED display based on SolidGeeks code, I thought I’ll open a thread for people building their own Esk8 remote. This thread is for discussions, but tutorials / explanations too, as SolidGeek seems to not work on that project any longer, and its still missing documentation about the wiring and all of the software. This thread is for people that are stuck on the software side due to missing documentation and tutorials, or even before that. Also, any resources with information are welcome.

Here’s the link to the original github :slight_smile:

Here’s another source:

Features

  • 100m/1000m range

  • OLED Display

  • Telemetry

  • 250 kb/s communication (fast!)

  • Rechargeable LiPo Battery that lasts for days

Parts Overview

Tools

  • Access to a 3D-printer (budget solution: Creality Ender 3)
  • Soldering iron (and soldering tin)

Electronics

  • Two Arduino Nano (with a dedicated 3.3V voltage regulator)
  • Two nRF24 modules
  • 128×32 OLED display
  • 5V step-up regulator
  • 3.7V Lipo battery (>400mAh recommended)
  • Lipo charger TP4056
  • Linear Hall sensor
  • Female Micro USB (or whatever port you wish)
  • Micro limit switch
  • Small power switch
  • A bunch of thin wires (30AWG silicone wires works great)
  • A few different capacitors and resistors

Mechanical parts

  • All 3D-printed parts - files available here
  • Two Ø5mm neodymium magnets
  • A small 20mm spring
  • Three M4 12mm bolts

Enclosure / Mechanical Parts

  • The enclosure of this remote has to be 3D printed. If you don’t have a 3D printer, ask a friend or use one of the online services. They will print it for you and send it to you!
  • 20mm metal spring
  • Two neodymium magnets with Ø5mm diameter
  • Three M4 12mm bolts

Electronics

NRF24L01+ comparison

This is going to be your main chip used in this build. iIt handles all the signals and data coming from the remote to the VESC and vice versa. So let’s talk about which design of this chip suits your need
the best.

There are a lot of different versions of this 2.4GHz Transceiver (IC that can be used as Transmitter and Receiver). Here i want to quickly name a few key differences between each design available on eBay, aliexpress, Amazon, you name it!

The one that originally was suggested for this remote is the YJ-13039 NRF24L01+ PA LNA (thats a long name…).:

Theres a lot of other designs for this chip, some have a better but larger antenna, some are shorter, etc.

Note, that any other version than the standard have a different pin layout. The standard one comes with 8 small holes in a row with 1,7mm pitch, whereas the other ones you might see on eBay and Co have 2 x 4 pin layout with pitch like on a breadboard or arduino. This shouldn’t be a problem if you can manage to work with the presoldered male pins on the 2 x 4 layout, but increases size.

Also it should be obvious, that the large antenna is way better then the zig zag pattern thing (missing the word for it). You can expect up to 100m signal with non-antenna modules, and up to 1000m with these attena modules, needing a lot of space. Since you won’t be 1000m meters apart from your Esk8, the antenna arguably is overkill for this build. In the end it’s your choice!

For both NRF modules used for this project, it is recommended to put something isolating over them, heatshrink or tape will do just about fine, in order to surround the module with aluminium foil. Make sure to leave a gap where your antenna is. This eliminates interference and signal noise, and is said to be critical for a working / not working remote.

Transmitter

The Transmitter is the most tidious part, since you work in a very small space. The schematic also seems confusing at the first look, but we will go step for step about it.
We will split this into to sections, the first one being the powering electronics and the second being the Arduino, OLED display and NRF module.

Battery and Power

Now its time to take your battery, charger module and your 3V to 5V boost converter. The plan is, to connect the battery to the charger module and the charger module output to the boast converter. The output of the boost converter will be your power source for the Arduino etc. You will also need your switch and micro USB connector.

First, we need to replace the SMD Resistor on your charger module. It’s necessary because otherwise your lipo would be charged at 1A which is far too much for this tiny battery. In order to not see the magic smoke coming out from it, we need to pick a Resistor. Around 5kOhm works best here (I used a 4.7kOhm one). Desolder the SMD Resistor carefully and toss it away, as you won’t need it anymore. Now, somehow connect your Resistor to the tiny solder pads (polarity doesn’t matter so you can’t do anything the wrong way, just make sure they’re connected, but don’t let the legs touch eachother!).

Now that that’s done, solder your battery + (red) and - (black) terminals to the Bat+ and Bat- of your charger module. Then add one more wire to each of the ports like so:

Next, you can solder the black (-) wire to the input-labeled on your boost converter. You can already add two wires on the + and one wire on the - terminal of the boost converters outputs. The additional wire on the + will be used to read your battery level with the help of the Arduino.
Solder two wires to your charging connector of choice. Look up the pinout of the connector so you know what’s + and -. Then connect the wire coming from Bat+ on the charger module and the wire from input+ of the boost module to the switch like so: Again it doesn’t matter how you do it. Just solder one wire to the middle pin, and the other one to a border pin.
Done!
Well… Almost atleast. Now you’re going to make sure nothing will short, and cramp the two PCBs and the battery in the enclosure somehow. Also, put your USB port and switch in the wholes made for them.
Now you’re done!

Arduino, OLED and NRF
Put the top plate on. This is where your Arduino and NRF module will be placed on.

The transmitter has pretty clear instructions, but here is a small guide to it:

Receiver

Requirenments / Parts

Assembly

The receiver is more of a mystery, here’s what I could find out about it:

Software
For the software side of things, you’re going to need bla bla bla

Extras
There are many newer versions of this model. One for example is the Firefly Nano by StefanMe which uses a Feather M0 as a core. It requires less soldering and has better performance.
DroidSector made a remote using the Heltec Lora development board. It already has radio and an OLED on it, which is 128 x 64 compared to the 128 x 32 one on the original Firefly. You save a lot of time and effort on the soldering, but it’s pricier and you need the module matching your countries laws (the 915MHz module is illegal in German etc.).
My first build of this remote turned out to be anything but easy and funny. The solder connections are so tiny, and the space youre working with is tiny too that it is no pleasure to solder everything.
Here are some problems I ran into, you should try to avoid:

  • Don’t work inside the shell, place your components inside to see how long your wires need to be (28-30 AWG, so really thin wire). After that, take them out! Trust me, it’s so much easier working outside of the enclosure!

  • Strip your wires ends before soldering anything. If you have no stripping tool which cuts the plastic / silicon from the wire, you will need to use your teeth or a small knife in order to strip your wires.

  • Make sure you use heat shrink or other material that isolates as many “open” solder joints as possible. You don’t want to accidently short anything (This is very likely to happen sooner or later, trust me. I killed my Arduino Nano and the 3V to 5V boost converter on my first try. It’s frustrating to wait for new parts and then redo all of the work.

  • Really pay attention to your wire length. The wires may seem flexible, but trust me, if you have to cramp anything inside the enclosure, the wires are anything but easy to bend, without breaking solder connections. Because of that, I would recommend:

  • Some sort of adhesive (hot glue will do just fine) to prevent any connection breaking, when cramping into the shell, or even worse - when riding!

  • Buy the parts recommended. I accidentally bought a TP4056 with additional features, like a separated battery and output pin, with discharge protection. But this made the PCB 2mm bigger… So I couldn’t fit it inside the remote :frowning:

The process of building this remote might be the most frustrating thing in your live, but trust me, it’s worth it! The result is just so enjoyable

18 Likes

Yup, please do. Good stuff!

4 Likes

I’ll add a parts list and instruction pictures in a while :slight_smile:

1 Like

Still working on it :slight_smile: hope it will help some people here!

Why use a nano when a few $$ more you can get a esp32 way more powerful and R2 model will have circuit python support. The receiver can also double as a Bluetooth to UART bridge like a metr pro, control you pixel lights, break lights. The extra core means plenty of headroom for extra features.

2 Likes

Good point! I want to keep it simple and cheap :slight_smile: also i dont use Metr Pro, so no experience there. But yeah, the ESP32 is a wonderful thing. I suppose you mean the NodeMCU built around it?

You can start simple Arduino code will work on esp without much effort. The cool thing is you can get esps with built in battery manager monitor, display, even nfr. Just an idea…

I made a remote and uploaded the code provided on the solidgeeks website, but i experienced constant conectivity issues( the throttle would cut for a second than return back to normal)
Then i uploaded this modded code and all the troubles were gone.https://github.com/Pryside/FireFly-Esk8-NRF24
Hope this helps someone

2 Likes

This is what I made this thread for :slight_smile:
To share knowledge, and code obviously!

Yeah I saw that NFR ESP board!
Would be a great AIO, I’ll look into it when I got time

You can check it too :)!
Would be great since it would make the build a whole lot easier and thus more people are able to bud their own firefly remote

1 Like

Is there an AIO Board? Like a NanoRF24L01 or ESP32RF24L01?

I managed to design a PCB for the receiver!
I’m happy to share it with you guys :slight_smile:
I’ll order them and give feedback then. Here a sneak peak:

Btw this is my first PCB ever :slight_smile:

1 Like

So I actually have a non-working firefly right now, so this resource is super useful for me haha

3 Likes

Do you know what’s damaged? Do you think its software or hardware?

Heres the gerber file for the PCB i created. It’s for the receiver part. Dimensions are about 70mm x 50mm but i could make it much smaller in the future.

If you guys are interested i can also make a PCB for the remote :slight_smile:

I think these PCBs which make the soldering so much easier, allow so much more people to build this successfully.

GERBER_RFRECEIVER.zip (8.3 KB)

2 Likes

If you have any questions, just ask :smiley:

1 Like

I see that u used a small capacitor on the reset pin to prevent freezing of arduino right?

1 Like

Totally right!
I don’t know if I should add a capacitor between the Nano and NRF24 3V3…
Otherwise there’s noise getting into the NRF
What do you think?

Saw that somewhere…

I dont think its necessary.
I had the freezing problem and put a small capacitor between reset pin and ground, but the problem did not dissapear.(im using a fsesc6.6 single with antispark) I measured the voltage from the 5v vesc output with oscilloscope and discovered a significant voltage spike when i turned on the vesc. I replaced the small capacitor with a bigger one and wired a resistor in series so the energy stored in a bigger capacitor cannot damage the arduino but gets dicipated. I got it working like that.

1 Like

Thanks! Now that we have this I may pull it out again and try to fix it up.

The range on mine was just terrible and unreliable, and my assembly wasn’t great either. I could probably just do with re-printing it, but it didn’t roll real smoothly.

Mostly it didn’t seem reliable enough to support 30mph with the connection how it was

1 Like