UART et Wit-motion WT61CTTL

Vous avez réalisé ou vous voulez réaliser un truc impensable avec votre Raspberry Pi ? Cet endroit est pour vous...

Modérateur : Francois

Répondre
JBaill
Messages : 25
Enregistré le : jeu. 14 juil. 2016 10:36

UART et Wit-motion WT61CTTL

Message par JBaill » jeu. 7 sept. 2023 13:14

bonjour,

Je tente de communiquer avec un WT61CTTL ( accelerometre inclinometre)
en utilisant un raspi pico en micropython le but est de faire positionner horizontalement une plateforme
je n arrive pas à paramétrer ce module ni d’ailleurs visiblement il ne comprend pas ce que je lui raconte....
il est vrai que ce module utilise un language assez peu courant puisqu'il ne comprend que l hexadécimal

Par contre ce module est très bavard et transmet toujours une quantité de data à 100hz ce qui est trop rapide pour mon application
a une vitesse de 115200 baud
apres moult recherche j ai réussi a décoder ce qui m intéresse c'est a dire l'angle des trois axes il suffit de rechercher la sequence en hexa 55 53 et la suite est le resultat

avec cette sequence (il y a surement plus simple)
toto=uart.read()
# print (type(toto))
tata= binascii.hexlify(toto)
tete = str(tata)
pos1 =tete.find("5553")
resu=tete[pos1:(pos1+48)]
XL=resu[4:6]
XH=resu[6:8]
YL=resu[8:10]
YH=resu[10:12]
ZL=resu[12:14]
ZH=resu[14:16]
XA=(XH+XL)
YA=(YH+YL)
ZA=(ZH+ZL)
XN=((int(XH,16))*256)+(int(XL,16))
XA=(int(XN))/32768*180
print ("angle X:"+str(XA))

YN=((int(YH,16))*256)+(int(YL,16))
YA=(int(YN))/32768*180
print ("angle Y:"+str(YA))

ZN=(int(ZH,16))+(int(ZL,16))
ZA=(int(ZN))/32768*180
print ("angle Z:"+str(ZA))
print ()

Le probleme que je rencontre est l 'impossibilité de changer les parametres de ce module
pour tant la sequence est on ne peut plus simple

en hexa FF AA 04 02 00 pour changer la vitesse de transmission par exemple en 9600 baud

j ai essayer des tas de possibilité en ascii en hexa en byte array mais rien ne change
il existe un programme pour cela qui est fourni par le fabricant mais il fonctionne en windows sur PC
ce sera la solution ultime mais peu élégante ... la doc donne cet exemple

BAUD(Serial baud rate)
Register Name: BAUD
Register Address: 4 (0x04)
Read and write direction: R/W
Default: 0x0002
Bit
NAME
FUNCTION
15:4
Set the serial port baud rate:
0001(0x01): 4800bps
0010(0x02): 9600bps
0011(0x03): 19200bps
0100(0x04): 38400bps
3:0
BAUD[3:0]
0101(0x05): 57600bps
0110(0x06): 115200bps
0111(0x07): 230400bps
1000(0x08): 460800bps(Only
supportsWT931/JY931/HWT606/HWT906)
1001(0x09): 921600bps(Only
supportsWT931/JY931/HWT606/HWT906)
Example:FF AA 04 06 00(Set serial port baud rate115200)


étrange trame Rs232 puisque il n'y a pas de CR mais 00

quelqu'un a t il une idée ou déjà utilisé ce module ??

merci de vos lumieres
bien amicalement
jacques Baillargeat

piper
Raspinaute
Messages : 658
Enregistré le : sam. 5 juin 2021 18:57

Re: UART et Wit-motion WT61CTTL

Message par piper » jeu. 7 sept. 2023 18:04

Ou là.
A l'origine les transmission de données ne se faisaient pas sous la forme de chaînes de caractères mais en bytes brutes (c'est le cas ici)
Et comme les chaînes de caractères qu'on trouve en C, les trames se terminent par 0x00 et pas \r ou \n
Si cela se terminait par \n ou \r (0x10 ou 0x13) alors il serait impossible de transmettre des valeurs telles que 19 (0x13) ou 16 (0x10)
Donc, non, quand on transmet des données, on n'utilise par les windowseries comme fin de trames.

Et visiblement ici, les trames se terminent bien par 0x00 : bonne nouvelle !

Attention danger si on transforme un hexa en string pur pour l'analyser voici le risque :
b'533512' et b'053351' contiennent tous les 2 la chaîne 5335 pourtant un seul de ces 2 nombre hexa est composé de 53-35

La transformation a aussi un autre risque : python3 ne réagit pas comme python2 sur la question des chaînes de caractères : on peur obtenir un code fonctionnant en python2 qu'il est impossible de passer en python3 sans tout réécrire.

Mais supposons que vous vouliez absolument utiliser cette méthode, alors il vaut mieux à minima préciser un séparateur en argument :
binascii.hexlify(b'533512' ,'-') va donner b'53-35-12'
et binascii.hexlify(b'053351' ,'-') va donner b'05-33-51'
Pour le coup, on ne peut plus confondre 53-35 avec 5-33-5

Sinon, rien d'étonnant à ce que le module ne comprenne que l'hexa, en fait, il ne comprend que le binaire, comme tous les modules.

Apparemment il y a pleins d'exemple de code ici :
https://github.com/WITMOTION/WitStandardProtocol_JY901
Malheureusement tous les "print" sont en chinois
3 Pi4 : Emby / Samba , Librelec, Android TV
3 Pi3 : Hifiberry /OSMC, Games station, Samba / VPN / HotSpot Wifi
2 Pi2 : RFID, radio reveil (PiReveil)
1 Pi0 : traker GPS et acquisitions
1 Pi0 2W : tests divers
5 Arduinos dont 4 nanos et 1 Mega
1 ESP32

JBaill
Messages : 25
Enregistré le : jeu. 14 juil. 2016 10:36

Re: UART et Wit-motion WT61CTTL

Message par JBaill » lun. 11 sept. 2023 09:34

Merci de tous ces precieux conseils
le constructeur m 'a orienté sur un site ou toute connexion etait impossible sauf à parler le mandarin..
et je n'avais pas ce lien ...
je vous tiens au courant de l'avancement du projet
cordialement
Jacques Baillargeat

JBaill
Messages : 25
Enregistré le : jeu. 14 juil. 2016 10:36

Re: UART et Wit-motion WT61CTTL

Message par JBaill » dim. 1 oct. 2023 19:25

bonjour,
quelque nouvelles de mes problèmes de communication
je n'ai toujours pas réussi a paramétrer le module WT61CTTL en python avec le raspi pico
J ai donc utilisé le programme windows pour le paramétrer et donc réduit la vitesse a 9600 baud et 5 hertz
et donc cette fois la je n'ai plus de problème de décodage des datas .
Mais j'avoue que cela m'agace .... donc je vais persister je vous tiendrai au courant.
cordialement
J Baillargeat

Répondre

Retourner vers « Utilisateurs avancés »