Tuto : Utilisation des SBrick avec Linux

Discussions diverses concernant les LEGOs Technic (en cours de réorganisation)
Répondre
Avatar du membre
vinc
Membre
Membre
Messages : 550
Enregistré le : 12 nov. 2014 16:16
Exposant : Oui
Bulk2015 : Oui
Bulk2016 : Oui
Bulk2017 : Oui

Tuto : Utilisation des SBrick avec Linux

Message par vinc »

Bonjour à tous,

Je vous fais un petit tuto basique sur l'utilisation de la Sbrick avec un linux.

La source des informations est ici https://social.sbrick.com/wiki/view/pag ... nt-scripts

Vous aurez besoin :
  • - Sbrick (of course...)
    - Un ordi avec un linux installé dessus (vous pouvez utiliser une clé bootable, un rapsberry, etc.)
    - Une interface Bluetooth Low Energy 4.0 (Possible qu'il soit intégré à votre Pc Portbale s'il est recent, perso j'ai pris un Asus https://www.asus.com/fr/Networking/USBBT400/, ca se trouve à 15€)
1. Installer le package BlueZ, permet de gérer les transactions Bluetooth Low Energy
  • Pour vérifier si vous l'avez déjà ou s'il est bien installé :
    Lancer la commande :

    Code : Tout sélectionner

    hcitool --help
    Vous devriez voir une ligne "lescan Start LE scan" LE pour Low Energy
2. Lister vos interface Bluetooth pour trouver celle
  • Code : Tout sélectionner

    hciconfig -a
    Vous devriez trouver une ligne "HCI Version: 4.0", noter le nom du hci associé, exemple : hci1
3. Trouver votre SBrick
  • Allumer votre SBrick
    Lancer la commande (remplacer hci1 par le numéro précédement trouvé)

    Code : Tout sélectionner

    hcitool -i hci1 lescan
    Noter l'adresse MAC de votre SBrick, exemple : 00:07:80:2E:2A:5D
4. Envoyer des commandes à votre SBrick
  • Pour cela il faut utiliser gatttool
    Voici la commande type :

    Code : Tout sélectionner

    gatttool -b 00:07:80:2E:2A:5D -i hci1 --char-write --handle=0x0025 --value=01000080

    Code : Tout sélectionner

    -b <MAC_ADDRESS> : Adresse de votre SBrick
    -i hci1 : Nom de votre interface bluetooth 4.0 Low Energy
    --char-write : Indique le type de de commande Bluetooth
    --handle=0x0025 : Indique sur quel slot de la SBrick on veut communiquer, 0x0025 est celui du controlleur moteur
    --value=01000080 : valeur que l'on envoie à la SBrick, composé de 4 octets, ici : 01 + 00 + 00 + 80
    
    Ici la valeur signifie: RUN (01) + Port A (00) + Sens (00) + Puissance 50% (80), on fait tourner le moteur A dans le sens horaire à 50% de la puissance

    Actions :
    • 01 = RUN
      00 = STOP
    Ports :
    • A = 00
      B = 01
      C = 02
      D = 03
    Sens / direction
    • Sens horaire = 00
      Sens anti horaire = 01
    Puissance
    • Il y a 256 paliers de puissance (1 octet = 8 bits = 2 exposant 8 = 256). La valeur indiquée est en hexadécimal.
      Vous pouvez utiliser la commande suivante pour convertir (je pense que l'on est plus familié avec le décimal ou le pourcentage...)

      Code : Tout sélectionner

      # Puissance compris entre 0 et 255
      puissance=128
      echo "obase=16; $puissance" | bc
      # Puissance en pourcentage de 0 à 100
      pourcentage=50
      puissance=$(echo "256*$puissance/100" | bc)
      echo "obase=16; $puissance" | bc
      
      /!\ Il y a un bug dans les premiers firmware, la puissance 100% ne fonctionne pas

Voici un petit script vous permettant de tester cela.
Il lance le moteur par palier de 5% de puissance.
Renseigner les premières lignes qui correspond à votre matériel : HCI, MAC_ADDRESS, PORT

Code : Tout sélectionner

# Mettre la valeur de votre interface Bluetooth. Ex:hci1
HCI="hciX"
# Mettre l'adresse MAC de votre SBrick
MAC_ADDRESS="xx:xx:xx:xx"
# Mettre le port sur lequel votre moteur est connecté : 00=A, 01=B, 02=C ou 03=D
PORT="00"
# Mettre 00 pour sens horaire, 01 pour sens anti-horaire
SENS="00"

#Variable d'init
pourcentage=0
ACTION=01
while [ $pourcentage -le 100 ]; do
  echo "Run port $PORT a ${pourcentage}%"
  puissance=$(echo "256*$pourcentage/100" | bc)
  puissanceHexa=$(echo "obase=16; $puissance" | bc)
  gatttool -b $MAC_ADDRESS -i $HCI --char-write --handle=0x0025 --value=${ACTION}${PORT}${SENS}${puissanceHexa}
  sleep 1
  ((pourcentage=pourcentage+5))
done
# Stop du moteur
ACTION=00
gatttool -b $MAC_ADDRESS -i $HCI --char-write --handle=0x0025 --value=${ACTION}${PORT}${SENS}${puissanceHexa}
Je posterai utltérieurement mes scripts réalisés pour la Detection des SBrick et la gestion avec la wiimote ainsi que les liens qui m'ont été utiles pour les réaliser.

Ce tuto explique dans les grandes lignes comment faire pour controler la SBrick depuis un linux.
Si vous rencontrez des difficultés sur le bluetooth n'hésitez pas à chercher sur le net des solutions, c'est assez bien documenté.

Je précise que je ne ferai pas de support sur ce tuto! D'une par manque de temps, de deux car on apprend mieux en cherchant sois-même :wink:
Avatar du membre
ChrisBT
Administrateur
Administrateur
Messages : 6174
Enregistré le : 25 août 2007 19:35
Exposant : Oui
Revieweur : Oui
Bulk2014 : Oui
Bulk2015 : Oui
Bulk2016 : Oui
Bulk2017 : Oui
Bulk2018 : Oui
Localisation : La Rochelle
Contact :

Re: Tuto : Utilisation des SBrick avec Linux

Message par ChrisBT »

Merci pour ce tuto
cela reste quand même quelque chose qui n'est pas pour tout le monde, il faut un minimum de base pour l'utilisation du Terminal, bluetooth. :Chaud:
MatthieuB
Membre
Membre
Messages : 46
Enregistré le : 16 janv. 2015 19:49

Re: Tuto : Utilisation des SBrick avec Linux

Message par MatthieuB »

Arf, pas d'outil natif Python, pour le moment ! Faudra que j'y songe :p
Avatar du membre
vinc
Membre
Membre
Messages : 550
Enregistré le : 12 nov. 2014 16:16
Exposant : Oui
Bulk2015 : Oui
Bulk2016 : Oui
Bulk2017 : Oui

Re: Tuto : Utilisation des SBrick avec Linux

Message par vinc »

MatthieuB a écrit :Arf, pas d'outil natif Python, pour le moment ! Faudra que j'y songe :p
Toute la gestion de la wiimote est en Python (principalement parce que la librairie cwiid était écrite en python) ,mais les appels pour commander la SBrick passent en shell.
MatthieuB
Membre
Membre
Messages : 46
Enregistré le : 16 janv. 2015 19:49

Re: Tuto : Utilisation des SBrick avec Linux

Message par MatthieuB »

Faudrait avoir la bibliothèque sous-jacente et l'interfacer. Bon, dans les projets.
Répondre