Tutoriel : Commander une SBrick depuis un linux

La modélisation 3D des Lego, entre autres.
Avatar de l’utilisateur
Vinz
Level 6
Level 6
 
Messages: 371
Localisation: Nancy
Âge: 37 ans

Messagepar Vinz » Ven Aoû 05, 2016 1:07 pm

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 ultérieurement mes scripts réalisés pour la Détection 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 contrôler 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! L'utilisation est assez basique, vous trouverez facilement les solutions par vous-même ;)

Retourner vers Les Lego sur le PC

Qui est en ligne ?

Utilisateurs parcourant actuellement ce forum : Aucun utilisateur inscrit et 5 invités