Betaflight : Softserial et Resource Remapping

Des fois on se retrouve face à un contrôleur de vol auquel il manque des ports ou des fonctions qui nous intéressent. Mais on peut y remédier la plupart du temps en utilisant ces deux fonctionnalités de Betaflight, parfois méconnues, que sont « softserial » et le « resource remapping ».

Truc bête, je viens de monter un récepteur frsky doté de la télémétrie SmartPort sur un micro contrôleur de vol. Le processeur est un F4 et il ne dispose que d’un seul inverseur de signal matériel utilisé pour le SBUS. Donc en théorie je ne peux pas également utiliser la télémétrie sans bricoler, repiquer le signal en non inversé, etc.

Mais il existe des solutions pour ce genre de cas, on se lance ?

Expliquons d’abord ce que sont softserial et le resource remapping, cela rendra les choses plus simples pour la suite.

Softserial

La fonction SOFTSERIAL que l’on trouve dans l’onglet « Configuration » de Betaflight permet d’émuler en logiciel des ports série.

Activation de softserial dans l’onglet configuration de betaflight

Cela permet donc d’ajouter des UART qui n’existent matériellement pas moyennant de la capacité de calcul CPU. Bien sur ce n’est pas aussi performant que les UART physiques et si le périphérique qui est raccordé à un softserial est trop bavard ou rapide cela risque de ne pas fonctionner.

Mais pour des choses relativement simples comme la télémétrie SmartPort, la télémétrie des ESC, etc c’est parfait.

Resource Remapping

Une fois softserial activé il nous faut un moyen pour recycler des connecteurs libres du contrôleur de vol et pouvoir les utiliser pour ajouter nos nouvelles fonctions. Le « resource remapping », realocation de ressources est là pour ça.

Concrètement la grande majorité des connecteurs physiques sont raccordés au CPU et comporte une référence. Cela vaut pour les pins de signal des moteurs, les UARTs, le connecteur LED, le connecteur PPM, etc.

la commande « resource list » nous permet de voir toutes les allocations de ressources existantes. Celles qui nous intéressent sont celles concernant les entrées/sorties IO.

Sous le capot de betaflight cela dit que telle ressource (connecteur) est utilisé pour telle fonctionnalité. Mais grâce à la CLI il est possible de changer les fonctionnalités offertes par chacun de ces connecteurs.

Dans les usages courants pour le « resource remapping » on retrouve généralement :

  • Changement de l’ordre des moteurs (quand on tourne un contrôleur de vol AIO par exemple)
  • Réutilisation d’un connecteur pour le FPV Camera Control ou la télémétrie des ESC , etc;
  • Et donc, « softserial » qui va transformer un connecteur quelconque en TX ou RX logiciel pour être utilisé à autre chose que ce pourquoi il était prévu au départ.

Cas pratique : mise en place de la télémétrie SmartPort sur un contrôleur de vol F4.

J’ai changé le récepteur d’un quad qui ne fonctionnait plus. Je l’ai remplacé par un FrSky XSR-M (ou XSR-E) qui fonctionne en SBUS et fournit la télémétrie SmartPort.

Malheureusement  mon contrôleur de vol F4 ne dispose pas de connecteur avec inversion pour le SmartPort. Spa grave on va s’en passer et le faire quand même et sans aucune modification matérielle 🙂

1 : Recycler un connecteur

Les connecteurs réutilisables sont en général ceux qui font office d’entrées/sorties par exemple :

  • PPM
  • LED
  • Les connecteurs Motor

Ça tombe bien, sur mon contrôleur, PPM est juste à coté de SBUS, je vais donc l’utiliser pour ajouter la télémétrie :

2: Récupération de la ressource du connecteur PPM

Avant de toucher à quoi que ce soit on va vérifier et préparer les différentes ressources dont on va avoir besoin. Notamment noter la ressource derrière le connecteur PPM, la libérer pour pouvoir la réutiliser pour softserial.

PS : avant de tout casser je vous recommande de faire une sauvegarde de votre configuration avec « diff » par ex, et la mettre de coté. On sait jamais et comme on touche à des ressources sensibles la possibilité de faire des bêtises est très grande.

Dans la « CLI » Betaflight on utilise la commande « resource » pour afficher la liste des ressources.

# resource
resource BEEPER 1 B04
resource MOTOR 1 B00
resource MOTOR 2 B01
resource MOTOR 3 A03
resource MOTOR 4 A02
resource MOTOR 5 A01
resource MOTOR 6 A08
resource PPM 1 B14
resource PWM 1 B14
resource PWM 2 B15
resource PWM 3 C06
resource PWM 4 C07
resource PWM 5 C08
resource PWM 6 C09
resource LED_STRIP 1 A01
resource SERIAL_TX 1 A09
resource SERIAL_TX 3 B10
resource SERIAL_TX 6 C06
resource SERIAL_RX 1 A10
resource SERIAL_RX 3 B11
resource SERIAL_RX 6 C07
resource INVERTER 1 C00
resource LED 1 B05
resource SPI_SCK 1 A05
resource SPI_SCK 3 C10
resource SPI_MISO 1 A06
resource SPI_MISO 3 C11
resource SPI_MOSI 1 A07
resource SPI_MOSI 3 C12
resource ESCSERIAL 1 B14
resource ADC_BATT 1 C02
resource ADC_RSSI 1 A00
resource ADC_CURR 1 C01

Ici on constate que la ressource B14 est affectée a la fonctionnalité PPM 1 (en gros le connecteur PPM 1 car il peut il y’en avoir plusieurs). Mais pas seulement, B14 est aussi utilisé pour PWM 1 et ESCSERIAL 1.

NB : B14 c’est avec mon contrôleur de vol qui est un OMNIBUSF4. Il faut bien sur vérifier sur le votre et prendre la bonne valeur dans votre cas.

On va libérer la ressource B14 pour qu’elle ne soit plus affectée à PPM 1, PWM 1 ou ESCSERIAL 1 :

# resource PPM 1 none
Resource is freed

# resource ESCSERIAL 1 none
Resource is freed

# resource PWM 1 none
Resource is freed

Et on n’oublie pas de sauvegarder :

# save
3 : Activer SOFTSERIAL et TELEMETRY

Dans Betaflight, onglet « Configuration » on active les fonctions SOFTSERIAL et TELEMETRY et on sauvegarde.

4: affecter la ressource précédemment libérée à softserial

Donc, maintenant qu’on a activé softserial et la télémétrie on peut revenir dans la CLI et finir la configuration. Car si vous allez dans « Ports » pour le moment vous n’avez que les UART physiques, aucun UART Softserial présent.

Si vous regardez à nouveau dans la CLI avec resource :

# resource
resource BEEPER 1 B04
resource MOTOR 1 B00
resource MOTOR 2 B01
resource MOTOR 3 A03
resource MOTOR 4 A02
resource MOTOR 5 A01
resource MOTOR 6 A08
resource PWM 2 B15
resource PWM 3 C06
resource PWM 4 C07
resource PWM 5 C08
resource PWM 6 C09
resource LED_STRIP 1 A01
resource SERIAL_TX 1 A09
resource SERIAL_TX 3 B10
resource SERIAL_TX 6 C06
resource SERIAL_RX 1 A10
resource SERIAL_RX 3 B11
resource SERIAL_RX 6 C07
resource INVERTER 1 C00
resource LED 1 B05
resource SPI_SCK 1 A05
resource SPI_SCK 3 C10
resource SPI_MISO 1 A06
resource SPI_MISO 3 C11
resource SPI_MOSI 1 A07
resource SPI_MOSI 3 C12
resource ADC_BATT 1 C02
resource ADC_RSSI 1 A00
resource ADC_CURR 1 C01

On constate tout d’abord que les ressources PPM 1, PWM 1 et ESCSERIAL 1 ont disparu, on les a liberées.

En bleu on voit les ressources des ports série existants (UARTS 1, 3 et 6 sur mon contrôleur). Ces UARTS comportent 2 ressources une TX et une RX car un port série est généralement bidirectionnel.

Néanmoins, pour notre histoire de télémétrie on n’a besoin que du TX.

Pour déclarer un softserial il nous faut affecter notre B14 à une ressource SERIAL_TX comportant un numéro supérieur à 11 (car de 1 à 10 on est sur les UART physiques).

Dans la cli :

# resource SERIAL_TX 11 B14
Resource is set to B14

# save

A présent, si on regarde dans l’onglet « Ports » :

Tada ! On voit apparaître le port SOFTSERIAL1 qu’on vient de configurer en ligne de commande. On va modifier la colonne « Telemetry Output » et indiquer la valeur « SmartPort » et sauvegarder.

Il nous reste une dernière vérification. On doit vérifier que la télémétrie est bien réglée pour fonctionner en mode half-duplex (car SoftSerial fonctionne de cette manière) et que l’inverseur de signal est désactivé (car on s’en fiche avec SoftSerial). De nouveau dans la CLI :

# get tlm
tlm_switch = OFF
Allowed values: OFF, ON

tlm_inverted = OFF
Allowed values: OFF, ON

tlm_halfduplex = ON
Allowed values: OFF, ON

pid_in_tlm = OFF
Allowed values: OFF, ON

Donc ici on doit avoir tlm_inverted = OFF et tlm_halfduplex = ON si ce n’est pas le cas on utilise les commandes suivantes :

# set tlm_inverted = OFF
tlm_inverted set to OFF

# set tlm_halfduplex = ON
tlm_halfduplex set to ON

et on finit par un dernier save.

5: tester sur la télécommande

A présent, sur la télécommande vous devriez détecter les nouveaux « sensors » dans la page « telemetry » et vous pouvez faire vos configurations habituelles, utiliser les scripts LUA pour changer les réglages, etc.

 

 

 

 

33 réponses sur “Betaflight : Softserial et Resource Remapping”

  1. Merci Alex. J’ai une kakute AIO v1 (F3) et pas moyen de brancher mon smartport ni le smart audio. Grace à ta super combine je vais pouvoir tenter le script LUA pour régler mes PID et mon VTX directement depuis ma Taranis !

  2. Bonjour,

    Super ton tuto, j’ai essayé de l’adapter à INAV mais il ne connais pas halfduplex.

    J’ai une carte matek F405 pour quadri, une radio X10 et un récepteur XSR

  3. serialrx_halfduplex ne fonctionne pas et de plus m’empêche de démarrer les moteurs.

    oui mais tu as écrit que inverted doit être à OFF, j’ai donc laissé

    1. Essaye sans toucher au halfduplex. Si je comprends bien ce paramètre agit sur le récepteur de télécommande. Donc c’est pas ca dont tu as besoin. Ma conf est peut être obsolète depuis le temps et peut être pas besoin de faire ce réglage.

  4. j’ai déjà fait des essais tel que je l’ai monté, ça ne marche pas.

    Quand tu dis « Essaye sans toucher au halfduplex. » tu parles des serial dans le cli?

    Voici ce que j’ai actuellement:

    get serial

    serialrx_provider = SBUS
    Allowed values: SPEK1024, SPEK2048, SBUS, SUMD, SUMH, XB-B, XB-B-RJ01, IBUS, JETIEXBUS, CRSF, FPORT

    serialrx_inverted = OFF
    Allowed values: OFF, ON

    serialrx_halfduplex = OFF
    Allowed values: OFF, ON

    get telemetry

    telemetry_switch = OFF
    Allowed values: OFF, ON

    telemetry_inverted = OFF
    Allowed values: OFF, ON

    ibus_telemetry_type = 0
    Allowed range: 0 – 255

  5. bon, rien à faire avec smartport_uart_unidir = ON.

    J’ai regardé le lien, effectivement il y a pas mal de combine.

    Tu peux me confirmer qu’il n’est pas possible de faire du RTH avec bétaflight?

    1. Suis pas sur que ça marche le rth dans betaflight. Je prendrai pas le risque. Question bête. Dans configuration t’as activé la télémétrie ? J’ai déjà oublié de le faire et je me suis arraché les cheveux parce-que ça marchait pas

    1. Ah non en effet. Y’a des scripts Inca équivalents au bf-tx-lua non? Avant de passer à ça. Dans le menu télémétrie tu dois avoir les données qui arrivent (discover new sensors) sur ta télécommande

  6. ah autant pour moi, je recommence.

    Je fait un telemetry_switch, serial_ etc… et je vérifie sur la radio dans l’onglet des capteurs, c’est bien cela qu’il faut faire?

  7. j’ai tout repris en vérifiant pas une découvert des capteurs rien à faire.

    Et oui j’ai bien la télémétry output d’activé

    1. C’est embêtant, ça devrait marcher cette histoire. T’es sûr que ton remapping de ressources est correct? Dans ports ton softserial est bien configuré pour la télémétrie ? (Smartport et non FrSky telemetry). T’as essayé avec l’inversion activé ou non dans la cli?

    1. Ok mais il faut le remapper en softserial comme dans mon article. De base S5 doit correspondre à un signal pour le moteur 5. Donc si tu fais u. Resource list tu verras sûrement motor 5 = quelque chose

    1. Ok bon, je pense qu’il y’a un truc à faire de ce côté. Plus le temps ce soir pour moi. On reprend demain si tu veux. Je pense que le remapping est pas fait sur ton contrôleur

  8. oui je suis de ton avis puisque motor5 est out,

    Par contre j’ai pas trouvé la commande pour le désactiver.

    Merci pour ton aide, c’est très sympa

      1. Non rien à faire, pas télémétrie.

        Je crois que le remappage c’est mort, j’ai lu ceci ici
        https://github.com/iNavFlight/inav/issues/2608

        Par contre j’ai vu que certains arrivent à remapper en modifiant le firmware là
        https://github.com/iNavFlight/inav/issues/2658 mais c’est pour une omnibus F4v3

        Quand je branche le GPS, je n’ai plus de baromètre et en plus le magnétomètre ne marche pas, il reste au rouge, pourtant il est déclaré.

  9. je me réponds; oui mais juste en mode secours en cas de perte de liaison radio et vidéo pas inter, ça je ne l’ai pas lu mais je pense que ce sera faisable

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.