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.
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.
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.
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 !
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
Bonjour,
essaye avec serialrx_halfduplex. Et tu as aussi serialrx_inverted ou telemetry_inverted à la place de tlm_inverted.
Je me suis basé sur ce document : https://github.com/iNavFlight/inav/blob/dbdd1656a84ee4f09ebc14b4c0b86a9476a48f46/docs/Cli.md
J’ai pas vérifié sur Betaflight si c’était les mêmes noms (commandes renommées sur les version récentes) ou c’était du nommage spécifique à Inav.
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é
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.
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
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
Essaye éventuellement avec smartport_uart_unidir = ON
Y’a des infos la dedans https://github.com/iNavFlight/inav/blob/master/docs/Telemetry.md sur les différentes combinaisons possibles en fonction du type de processeur.
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?
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
Ah oui je t’ai pas dit que ce que je voulais faire c’est de faire fonctionne un de ces 2 lua:
bf-tx-lua-1.0.1
KissCF
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
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?
Yes. Il faut d’abord faire le discover new sensors. Tu vois si la télémétrie marche vraiment. Après tu passes aux scripts
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é
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?
en capteur découvert j’ai:
RSSI, BtRx et A2
Je ne suis sûr de rien.
Dans la doc il est dit qu’il faut que je connecte le S-port du XSR à S5
que je doit activé softserial1 et sélectionner smartport.
Voici la doc de la F405 en cjoint.com
https://www.cjoint.com/c/HKErCQ5rivG
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
voici resource, motor 5 est out.
Que dois je faire donc?
T’as pas une valeur du type B14 ou quelque chose ? (1 lettre et 2 chiffres)
je n’ai que cette ligne A15: MOTOR5 OUT
je tape ceci donc
resource MOTOR5 OUT none
j’ai essayé cette ligne mais il me renvoie la listes resource sans rien modifier
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
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
t’as réussi à t’en sortir du coup ?
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é.
Yes tu as parfaitement raison, pas de remapping dans INAV. J’étais persuadé que ça marcherait 🙁
Eventuellement tester avec Betaflight et notamment la très prochaine version 4. La fonction GPS-RESCUE, si pas de bugs, pourrait marcher. Et tu pourras utiliser le resource mapping.
https://github.com/betaflight/betaflight/issues/6719
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
[ [ [ []]]]
Tu veux dire que je pourrais avoir la fonction RTH dans bétaflight
A tester sur un betaflight récent mais oui https://github.com/betaflight/betaflight/blob/86b36b948861072306af419cd1ec3203c6d83c36/docs/Modes.md
Par contre attention à la config du failsafe sur le lien de mon message précédent. Il faut pas se planter pour avoir un comportement RTH et non pas un désarmement moteur pur et simple.
Après, j’ai jamais testé, a voir si c’est vraiment fiable, précis, etc.
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
ce serait même faisable sur un béta récent avec la commande set GPS RESCUE
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
Salut, sur ce manuel http://img.banggood.com/file/products/20180209021414Crazybeef3.pdf y’a des pads buzzer mais c’est un non pro je sais pas si le tien est pareil.
http://www.happymodel.cn/wp-content/uploads/2018/12/Crazybee-F3FR-PRO-Frsky-version-Manula.pdf et le manuel du pro est rigolo. Tu vois le buzzer installé mais les pads sont pas indiqués. Tente ceux du 1e lien (le non pro), y’a rien d’autre qui semble correspondre
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?
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.
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)
Fais voir le résultat de la commande resource et aussi le target de ta board ?
https://www.cjoint.com/c/IBxu6krGo3y
Betaflight / CRAZYBEEF3FR (CBFR) 3.5.6 Feb 16 2019 / 12:50:01 (c28ca22f9) MSP API: 1.40
je viens de mettre a jour la fc
j’ai essayé un truc: j’ai interverti motor 5 et beeper 1
le buzzer fonctionne en continu maintenant
set beeper_inversion = ON
set beeper_od = OFF
je les ai inversé chacun et ca semble fonctionner…
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
Pour le moment ça semble fonctionner. J’ai été obliger de changer les 2 autres paramètres sinon ça bipait en permanence.
En tout cas, merci.
Et j’oublie pas que c’est grâce à ton site que je me suis lancé dans le FPV (Tiny Whoop)
https://www.cjoint.com/c/IBxwbCmJ0cn
Ma bestiole
Content d’avoir pu t’aider, sympa ta petite machine, profites-en bien 😉
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.
Hello, truc bête, t’as pensé à mettre hexa à la place de quad dans l’onglet configuration?
Oui bien-sûr
Je pense qu’il faut le faire en clé CLI mais je maîtrise pas trop.
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
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
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
Vraiment ça fais du bien de tomber sur des tuto super bien expliqué comme celui-ci. merci beaucoup
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 ?
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é