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.

 

 

 

 

56 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. Sinon j’aurais bien utilisé bétaflight mais je ne suis pas sur de pouvoir faire un RTH au cas où j’aurais un problème

  5. 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

  6. 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

  7. 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?

  8. 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

  9. 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é.

  10. Bonjour,

    Sur le forum frsky, un gars m’a fait remarquer que sur la page 5 de la doc de la F405, il y avait les commandes CLI pour remapper, que je te joins.

    https://www.cjoint.com/c/HLclb0DSCHG

    J’ai voulu les exécuter mais rien à faire, elle me retourne la liste des « resource »

    Il doit donc manquer une commande pour exécuter la fonction.

    En explorant un peu le gittub, j’ai trouvé ceci qui ne m’arrange pas mais je ne sais pas si c’st pour la version actuel, la 2.1

    https://github.com/iNavFlight/inav/issues/2608

    Je te joins le help de mon inav au cas où tu trouverai quelque chose:

    help

    adjrange – configure adjustment ranges
    aux – configure modes
    beeper – turn on/off beeper
    list
    <+|->[name]
    bootlog – show boot events
    color – configure colors
    mode_color – configure mode and special colors
    defaults – reset to defaults and reboot
    dfu – DFU mode on reboot
    diff – list configuration changes from default
    [master|battery_profile|profile|rates|all] {showdefaults}
    dump – dump configuration
    [master|battery_profile|profile|rates|all] {showdefaults}
    exit
    feature – configure features
    list
    <+|->[name]
    flash_erase – erase flash chip
    flash_info – show flash chip info
    get – get variable value
    [name]
    gpspassthrough – passthrough gps to serial
    help
    led – configure leds
    map – configure rc channel order
    []
    memory – view memory usage
    mmix – custom motor mixer
    motor – get/set motor
    []
    play_sound
    []

    profile – change profile
    []
    battery_profile – change battery profile
    []
    resource – view currently used resources
    rxrange – configure rx channel ranges
    save – save and reboot
    serial – configure serial ports
    serialpassthrough – passthrough serial data to port
    [baud] [mode] : passthrough to serial
    servo – configure servos
    set – change setting
    [=]
    smix – servo mixer

    reset
    load
    reverse r|n
    sd_info – sdcard info
    status – show status
    tasks – show task stats
    version – show version
    osd_layout – get or set the layout of OSD items
    [ [ [ []]]]

  11. 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

  12. Bonjour
    J’ai acheté une crazybee f3 pro pour me faire un faux beta 75X (qui fonctionne très bien) mais je n’ai pas d’emplacement pour brancher un buzzer (pourtant le mobula qui utilise une FC similaire le peut)
    Je me disais que j’allais utiliser le pad PWM5
    https://www.cjoint.com/c/IBxslackW2y
    mais quand je fais la commande « resource », je ne trouve pas d’information sur PWM5 et en plus je vois qu’il y a visiblement un pad buzzer en C15 mais je ne sais pas où il peut se trouver.
    https://www.cjoint.com/c/IBxsm6qh2Py
    quelqu’un pourrait m’aider à raccorder mon buzzer ?
    merci

  13. oui en effet, et d’ailleurs normalement le mobula a son buzzer raccordé comme ca, mais après avoir essayé plusieurs fois, ca n’a jamais fonctionné.
    j’ai essayé en désactivant ou activant le buz des esc (qui fonctionne) dans betaflight.
    peut être qu’il y a quelque chose que je fais mal ou qui est mal réglé dans betaflight?

    1. Question con. C’est bien un petit buzzer 5v que tu as?

      De tête y’a rien à régler pour un buzzer physique à part le bouton pour le déclencher. Si c’est bien soudé il va biper quand tu branches la batterie. A tout hasard regarde dans les options de « configuration » mais je pense pas hormis les réglages rx_lost, les cas ou tu veux pas de buzzer, etc

      Perso j’ai aussi abandonné les buzzers physiques pour ceux des esc. C’est moins fort mais bien plus pratique.

      1. Oui j’ai essayé avec un petit buzzer 5v et aussi avec un combo led buzzer.
        Donc tout est bien réglé dans betaflight alors !
        Comment puis je faire pour utiliser le pad pwm5 ? Ou un autre ? (je ne trouve pas pwm5 dans resource)

    1. Bien joué. Je me doutais que pwm5 serait motor5 🙂 pour les inversions avec les paramètres t’as peut être pas besoin. Le buzzer doit être câblé avec le + sur 5v et le – sur ton pwm5. Bref si ça marche c’est cool

  14. Bonjour,
    génial les explications.
    j’ai une Omnibus F4 V6 et impossible de la passer en Hexa seul 4 moteurs sont visible. Je suis sous betaflight, j’ai flasher avec differentes versions.
    Dans le CLI je ne vois que 4 moteurs affectés, je cherche comment affecter les 2 autres qui devraient être visible sur le TX5 et RX5 mais comme il n’y a pas de données sur les « resource » je ne vois pas comment faire.
    j’ai tester différentes choses en te lisant mais rien n’y fait.
    Si tu as été confronté a ce genre de souci je suis preneur d’une solution.
    Merci.

        1. Jamais fait mais dans la clé ça pourrait se faire avec “mixer list” pour voir la conf actuelle et “mixer HEX6” pour se mettre en hexacoptere

  15. Super c’est presque ce que je souhaite faire sauf que moi je veux connecter un GPS.
    voici les pad dispo sur mon FC(STABLE F411 Flight Controller) avec les ports utilisés *
    GND
    5V *
    BZ-*
    LED
    R2(DSM)
    nT2
    T2*
    nR2(S.BUS)
    3v3
    5v*
    gnd
    gnd*

    J’ai 4 connecteurs sur le GPS BN180
    1 GND
    2 TX
    3 RX
    4 5V

    Pour le 1 et 4 pas de problème mais pour les deux autres ou les connecter ? et comment mapper les ports ?

    D’avance merci pour votre aide

  16. Super c’est presque ce que je souhaite faire sauf que moi je veux connecter un GPS.
    voici les pad dispo sur mon FC(STABLE F411 Flight Controller) avec les ports utilisés *
    GND
    5V *
    BZ-*
    LED
    R2(DSM)
    nT2
    T2*
    nR2(S.BUS)
    3v3
    5v*
    gnd
    gnd*

    J’ai 4 connecteurs sur le GPS BN180
    1 GND
    2 TX
    3 RX
    4 5V

    Pour le 1 et 4 pas de problème mais pour les deux autres ou les connecter ? et comment mapper les ports ?

    D’avance merci pour votre aide

  17. Vraiment ça fais du bien de tomber sur des tuto super bien expliqué comme celui-ci. merci beaucoup

  18. gros détérrage 😀 j’ai récemment reçu un beta 95 à réparer pour un pote qui a été modifié pour recevoir un vista, mais avec une carte qui n’étais pas prévue à l’époque. Une beta fpv F4 AIO 20A V2.0. En voulant tout refaire au propre je me suis aperçu que un fil du vista (le rx) est sectionné. Dans BF quand je tape je vois effectivement softserial actif, dans le CLI je tape « resource » et je vois un « serial_tx 11 ».
    Mais le problème c’est que l’ancien proprio a étamé quasi tout les pads, donc je ne sais plus sur lequel il était soudé. Je suis obligé de devoir flasher la fc vierge pour retrouver la correspondance de base ?

    1. Hello, oui en effet, je suis plus très actif sur le site mais certains articles restent toujours valables 🙂

      T’as plusieurs possibilités pour t’en sortir :

      lister les ressources actuelles, reset la FC et voir ce qui a changé (et refaire en repérant le pad qui a été mappé à l’origine).

      Demander sur les groupes facebook si quelqu’un aurait la même board et s’il peut te sortir les ressources d’origine.

      Spéculer : il n’y a pas beaucoup de pads qui auraient pu être remappés sur la FC, c’est probablement LED qui a été utilisé

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.

%d blogueurs aiment cette page :