Tuto : Utilisation des SBrick avec Linux

Discussions diverses concernant les LEGOs Technic (en cours de réorganisation)

Messagepar vinc » 05 Aoû 2016 12:02

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:
vinc
Membre
 
Messages: 318

Messagepar ChrisBT » 07 Aoû 2016 16:48

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:
Avatar de l’utilisateur
ChrisBT
Administrateur
 
Messages: 5831
Localisation: La Rochelle

Messagepar MatthieuB » 08 Aoû 2016 20:27

Arf, pas d'outil natif Python, pour le moment ! Faudra que j'y songe :p
MatthieuB
Membre
 
Messages: 46

Messagepar vinc » 09 Aoû 2016 08:21

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.
vinc
Membre
 
Messages: 318

Messagepar MatthieuB » 10 Aoû 2016 18:50

Faudrait avoir la bibliothèque sous-jacente et l'interfacer. Bon, dans les projets.
MatthieuB
Membre
 
Messages: 46


Retourner vers - Les autres discussions Technic

Qui est en ligne

Utilisateurs parcourant ce forum: TeClem8 et 1 invité