Page 1 sur 2

[RESOLU]Communication Port COM

Publié : sam. 22/sept./2018 10:57
par venom
Bonjour,

Voilà je cherche a communiquer avec un module qui se branche en UART sur le port com (dans mon cas un USB/TTL qui émule un COM)

J'arrive bien a me connecter dans mon cas COM4 a 9600 Bauds. Mais je ne sais pas si j'arrive a envoyé des données ni en recevoir. :?

Mon module est "questionnable" via la commande AT en gros si j'envoie la commande AT+NAME le module doit me renvoyé son nom. Si j'envoie juste AT il me renvoi OK

Voici le code que j'ai fait pour le moment:

Code : Tout sélectionner

PortID = 1
NumeroPort$ = "COM4"
VitesseBaud = 9600
*Memoire = AllocateMemory(5000)

If OpenSerialPort(PortID, NumeroPort$, VitesseBaud, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 1024, 1024)
  MessageRequester("Information", "Connexion réussi.")
  Delay(1000)
 
   ;envoie une commande au module
   WriteSerialPortString(PortID, "AT"+#CRLF$, #PB_Ascii)
   Delay(100)

   Taille = AvailableSerialPortInput(PortID)
  
  ;recupere la reponse du module
  ReadSerialPortData(PortID, *Memoire, Taille)
  Debug PeekS(*Memoire, Taille, #PB_Ascii)

Else
  MessageRequester("Information", "Connexion impossible. Verifiez vos paramètres.", #PB_MessageRequester_Error )
EndIf 

Ps: pour les connaisseurs il s'agit d'un module bluetooth.

Je suis tomber sur un gros code sur le forum anglais qui normalement communique en UART, mais dans mon cas je n'ai pas de réponse du module :?

Si un connaisseur du port COM passe dans le coin :wink:
Merci de votre aide.

Ps²: Je ne sais pas trop gérer non plus les poke/peek :D





@++

Re: Communication Port COM

Publié : sam. 22/sept./2018 12:18
par Ollivier
Avec ce code, tu limites à deux caractères la taille du message.
Donc un message de type "AT+NAME" est tronqué à "AT". Ça va retourner des "OK" plus souvent que prévu.

Ensuite, l'expression "AT+NAME", c'est caractérisé comment, précisément ?

AT+NOM ?
AT+Nom ?
AT+nom ?
ATNOM ?
ATNom ?
ATnom ?
@NOM ?
@Nom ?
@nom ?

En gros, y a-t-il un respect de la casse ?
Le signe "+" (plus) est-il à transcrire ou à interpréter ?
L'expression "AT" est-elle à transcrire ou à interpréter ?

Re: Communication Port COM

Publié : sam. 22/sept./2018 14:10
par Marc56
Ton module ne réponds pas parce que WriteSerialPortData ne valide pas (pas de retour chariot)
Tu peux l'ajouter, mais c'est plus simple d'utiliser WriteSerialPortString() puisque ce sont des simples commandes Hayes (donc du texte brut)

PS. Pour tester ton périphérique, commence par utiliser un terminal série (PuTTY, puisque Hyperterminal n'est plus fourni avec Windows).
Tu met sur la bonne chaine de connexion, puis tu tapes les commandes AT demandées.
Commandes AT à connaitre:
AT = ATention = le périphérique réponds OK
ATZ = ATention Zéro = remise à zéro du périphérique distant
ATH0 = ATention Hold Zéro = raccrocher

Pas d'espace entre AT et la commande et on termine en validant.

Essayes:

Code : Tout sélectionner

; PokeS(*Memoire, "AT", 2)
; res = WriteSerialPortData(PortID, *Memoire, 2)

res = WriteSerialPortString(PortID, "AT+NAME", #PB_Ascii)
(Toute ma 'jeunesse' informatique et la télémaintenance en RTC)

:wink:

Re: Communication Port COM

Publié : sam. 22/sept./2018 15:28
par venom
Merci de vos retour.
Ollivier a écrit :En gros, y a-t-il un respect de la casse ?
Le signe "+" (plus) est-il à transcrire ou à interpréter ?
L'expression "AT" est-elle à transcrire ou à interpréter ?
Sincèrement je l'ignore.
Marc56 a écrit :PS. Pour tester ton périphérique, commence par utiliser un terminal série (PuTTY, puisque Hyperterminal n'est plus fourni avec Windows).
Tu met sur la bonne chaine de connexion, puis tu tapes les commandes AT demandées.
ça fonctionne bien sous plusieurs terminal sans problème, le module répond bien.

J'ai modifier mon code comme tu le montre ci-dessus, mais forcement je n'ai pas de réponse :lol: (j'avais déjà testé avec WriteSerialPortString) avant de modifier et poster mon code. Et malheureusement, lea led du module ne change pas d’état a l'envoie d'une info :cry:

peut être un problème de code via la réception ? :?
Ou de mon module, car le code du forum anglais a l'air complet.

Ps: pour le moment je me contente juste d'envoyé AT sa "simplifiera" les choses :mrgreen:






@++

Re: Communication Port COM

Publié : sam. 22/sept./2018 16:16
par Ollivier
Dans ce cas (pas de réaction de la DEL), c'est peut-être dans les réglages de connexion :
- Bonne fréquence ? (quantité de bits par seconde)
- Bonne taille d'unité ? (7 ou 8 bits)
- Exigence du bit de parité ?

Re: Communication Port COM

Publié : sam. 22/sept./2018 16:23
par GallyHC
Bonjour,

Avec la commande "WriteSerialPortString()", ce ne serait pas plus simple que de devoir passé par la mémoire?

En gros >> WriteSerialPortString(Com, "AT" + #CRLF$) et comme le disait Marc56, il faut un "CRLF" pour que la ligne soit prise en compte.

Cordialement,
GallyHC

PS: j'avais commencais un Hyperterminal, il faudrait peu etre que ne m'y remette... (bon même si il n'y avait que tu VT100 pour le moment).

Re: Communication Port COM

Publié : sam. 22/sept./2018 16:53
par Marc56
1. Vérifie dans la doc de ton périph que la chaine de connexion est ok (vitesse,parité, etc)
2. Ajoute un Delay(2000) après l'ouverture du port et avant d'envoyer la chaine
3. Envoi comme première commande ATZ ça réinitialise le périph.

Re: Communication Port COM

Publié : sam. 22/sept./2018 18:22
par venom
Marc56 a écrit :1. Vérifie dans la doc de ton périph que la chaine de connexion est ok (vitesse,parité, etc)
2. Ajoute un Delay(2000) après l'ouverture du port et avant d'envoyer la chaine
3. Envoi comme première commande ATZ ça réinitialise le périph.
En effet j'aurais du commercer par la. Je n'ai pas pensé. Je reviens vers vous après recherche :wink:






@++

Re: Communication Port COM

Publié : dim. 23/sept./2018 6:17
par venom
Bonjour,

ça fonctionne!!!!!. Le debug me renvoie bien un "OK" quand je lance une commande "AT" ou tout autre commande. 8)

J'ai ajouté l'option AvailableSerialPortInput() pour connaitre la taille du tampon de retour automatiquement.

Encore merci a tous pour os suggestions/aides :wink:
the following

Code mise a jour au 1er post








@++

Re: [RESOLU]Communication Port COM

Publié : jeu. 27/sept./2018 0:34
par Ekim
@Venom
T'es bien chanceux car ce code me renvoit toujours une erreur(((((

Code : Tout sélectionner

For i=1 To 8
	Port$="COM"+Str(i)
	
	If OpenSerialPort(0, Port$, 300, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 1024, 1024)
		Debug "Information: SerialPort opened with success"
	Else
		Debug "Error: Can't open the serial port: "+Port$
	EndIf
	
	Delay(100)
Next i
même pas moyen d'ouvrir un seul port

:cry: :cry: :cry:

Re: [RESOLU]Communication Port COM

Publié : jeu. 27/sept./2018 19:37
par venom
Bonjour Ekim et tout le forum,

Chez moi ton code fonctionne très bien. 8O

Est-ce que ton port COM ce situe bien entre 1 et 8 ?
Est-ce un "vrai" port COM ou comme moi un UBS/TTL ?






@++

Re: [RESOLU]Communication Port COM

Publié : jeu. 27/sept./2018 23:42
par Ekim
Un vrai port? je ne sais pas, mais effectivement je possède plusieurs port USB et Port à l'ancienne "RS232" sur mon "HP ProBook 6570b"

et 8 correspond au nombre de port tout confondu présent sur mon ordi

au départ j'avais pensé au driver qui est peut être trop ancien!

Re: [RESOLU]Communication Port COM

Publié : ven. 28/sept./2018 5:12
par venom
Ton code plus haut cherche uniquement les ports série. Pas les ports USB. :wink:

Dans le gestionnaire de périphériques tu le vois ton rs232 ?






@++

Re: [RESOLU]Communication Port COM

Publié : ven. 28/sept./2018 6:12
par Marc56
Pour que le test d'un port série fonctionne, il faut qu'il y ait un périphérique connecté et alimenté ou dans le cas d'un port série ancien (connecteur DB9 ou DB25) au moins un bouchon 'loopback'.

OpenSerialPort() fonctionne comme OpenFile(), il ouvre un flux et ne teste pas le matériel lui-même.
Un périphérique USB doit être 'mappé' comme un port série pour être vu par OpenSerialPort().

C'est le driver qui se charge du 'mappage' il peut très bien mettre le port série virtuel sur 45.
Chaque port USB matériel supporte jusqu'à 127 ports série virtuels mais si l'intensité est insuffisante, certains ne seront pas vus.

Une souris ou un clavier USB ne sont pas vus comme des ports séries.

:wink:

Re: [RESOLU]Communication Port COM

Publié : ven. 28/sept./2018 11:14
par venom
Oui, c'est ce que je voulais dire en disant "pas les ports USB" bien évidemment si le module USB a ses drivers fait pour, comme dans mon cas câble USB/TTl OpenSerialPort() va détecté. Mais comme dit Marc un clavier ou une souris ne sera pas détecté comme port COM
Donc non visible.






@++