A lightweight, reliable iBUS telemetry library specifically designed for Arduino Nano Every (ATmega4809).
The popular IBusBM library has timing issues on Arduino Nano Every due to differences in the ATmega4809's timer architecture. EveryIBus solves these problems with a direct, interrupt-friendly implementation that just works on the Nano Every.
- โ Reliable on Nano Every - No timer interrupt conflicts
- โ Super Simple API - Four-line setup for multiple sensors
- โ Real-world units - Use volts, celsius, RPM directly
- โ Interrupt-friendly - Works alongside pin interrupts and other time-sensitive code
- โ Multiple sensors - Up to 4 sensors automatically managed
- โ Zero configuration - Works out-of-the-box with sensible defaults
- โ Lightweight - Minimal memory footprint
- โ Debug support - Built-in diagnostic output
#include <EveryIBus.h> EveryIBus ibus; void setup() { ibus.begin(); // That's it! } void loop() { ibus.update(); // Handle protocol // Set sensor values with real-world units ibus.setInternalVoltage(5.08); // 5.08V ibus.setExternalVoltage(12.41); // 12.41V ibus.setTemperature(21.12); // 21.12ยฐC ibus.setRPM(4294); // 4294 RPM }
That's it! Your FS-i6 transmitter will show IntV, ExtV, Temp, and RPM with the values you set.
Arduino Nano Every FlySky FS-iA6B
โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ
โ D0 โโโโโโโโโ SENS (RX) โ
โ D1 โโโ1kฮฉโโโ SENS (TX) โ
โ GND โโโโโโโโโ GND โ
โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ
Important: Use a 1kฮฉ resistor on the TX line (D1) to prevent damage.
- โ Arduino Nano Every (ATmega4809) - Primary target
- โ FlySky FS-iA6B receiver - Tested and confirmed
- โ FlySky FS-i6/FS-i6X transmitter - Shows all sensor types
- โ Other megaAVR boards - Should work but untested
| Sensor Type | Function | Units | Transmitter Display |
|---|---|---|---|
| Internal Voltage | setInternalVoltage(5.08) |
Volts | IntV: 5.08V |
| External Voltage | setExternalVoltage(12.41) |
Volts | ExtV: 12.41V |
| Temperature | setTemperature(21.12) |
Celsius | Temp: 21.1ยฐC |
| RPM | setRPM(4294) |
RPM | RPM: 4294 |
#include <EveryIBus.h> EveryIBus ibus; void setup() { ibus.begin(); } void loop() { ibus.update(); // Your sensor readings here float batteryVoltage = analogRead(A0) * (5.0 / 1023.0); ibus.setInternalVoltage(batteryVoltage); }
#include <EveryIBus.h> EveryIBus ibus; volatile int rpmCounter = 0; void setup() { ibus.begin(); attachInterrupt(digitalPinToInterrupt(2), rpmISR, RISING); } void loop() { ibus.update(); // Non-blocking, interrupt-safe // Calculate RPM from interrupt counter static uint32_t lastRpmCalc = 0; if (millis() - lastRpmCalc > 1000) { uint16_t rpm = rpmCounter * 60; // Convert to RPM ibus.setRPM(rpm); rpmCounter = 0; lastRpmCalc = millis(); } } void rpmISR() { rpmCounter++; }
#include <EveryIBus.h> #include <Adafruit_INA260.h> EveryIBus ibus; Adafruit_INA260 ina260 = Adafruit_INA260(); void setup() { ibus.begin(); ina260.begin(); } void loop() { ibus.update(); // Read real sensor data float voltage = ina260.readBusVoltage(); float current = ina260.readCurrent(); // Send to transmitter ibus.setExternalVoltage(voltage); // Convert current to another sensor type if needed }
- Open Arduino IDE
- Go to Sketch โ Include Library โ Manage Libraries
- Search for "EveryIBus"
- Click Install
- Download the latest release from Releases
- Extract to
Arduino/libraries/EveryIBus/ - Restart Arduino IDE
cd ~/Arduino/libraries/ git clone https://github.com/yourusername/EveryIBus.git
No telemetry on transmitter:
- Check wiring (especially the 1kฮฉ resistor on TX)
- Verify ground connection between Arduino and receiver
- Enable debug:
ibus.setDebug(true)and check Serial Monitor - Look for "DISCOVERY [SENT]" messages in debug output
Irregular telemetry:
- Ensure
ibus.update()is called frequently inloop() - Avoid long
delay()calls in main loop - Check for interrupt conflicts with other libraries
Compilation errors:
- Ensure you selected "Arduino Nano Every" as the board
- Verify library is installed correctly
- Restart Arduino IDE
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Test thoroughly on Arduino Nano Every hardware
- Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Betaflight project for iBUS protocol documentation
- FlySky community for protocol reverse engineering
- Arduino community for continuous support
- IBusBM library authors for inspiration (even though it doesn't work on Nano Every ๐ )
- ๐ Bug reports: GitHub Issues
- ๐ก Feature requests: GitHub Issues
- ๐ Documentation: Wiki
- ๐ฌ Discussions: GitHub Discussions
Made with โค๏ธ for the Arduino Nano Every community
Finally, iBUS telemetry that just works!