[RESOLU]Communication Port COM

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
venom
Messages : 3137
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

[RESOLU]Communication Port COM

Message 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





@++
Dernière modification par venom le dim. 23/sept./2018 8:09, modifié 3 fois.
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Communication Port COM

Message 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 ?
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: Communication Port COM

Message 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:
Avatar de l’utilisateur
venom
Messages : 3137
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Communication Port COM

Message 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:






@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Communication Port COM

Message 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é ?
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Communication Port COM

Message 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).
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: Communication Port COM

Message 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.
Avatar de l’utilisateur
venom
Messages : 3137
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Communication Port COM

Message 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:






@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
venom
Messages : 3137
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Communication Port COM

Message 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








@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Ekim
Messages : 215
Inscription : dim. 24/juin/2018 1:20

Re: [RESOLU]Communication Port COM

Message 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:
Avatar de l’utilisateur
venom
Messages : 3137
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: [RESOLU]Communication Port COM

Message 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 ?






@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Ekim
Messages : 215
Inscription : dim. 24/juin/2018 1:20

Re: [RESOLU]Communication Port COM

Message 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!
Avatar de l’utilisateur
venom
Messages : 3137
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: [RESOLU]Communication Port COM

Message 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 ?






@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: [RESOLU]Communication Port COM

Message 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:
Avatar de l’utilisateur
venom
Messages : 3137
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: [RESOLU]Communication Port COM

Message 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.






@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Répondre