Question

Je suis en train de parler à une carte faite à domicile sur un port série, et est à cet effet à l'aide pyserial. En Hyperterminal, tout fonctionne bien. Je peux écrire:

$ audio on

et l'audio est activé, mais si je l'utilise

ser = serial.Serial("COM1", 38400)
ser.write("audio on\r\n")

rien ne se passe. Je peux lire les données entrantes cependant, il est donc pas quelque chose de mal avec la communication. Je ne pas d'aide si je change \ r \ n juste \ n ou \ r soit.

EDIT: Parfois, je reçois effectivement les commentaires: Aucun commande lors de l'envoi exactement la même commande que des œuvres de HyperTerminal. La configuration est aussi exactement le même que dans HyperTerminal.

Résolu: Pour le faire fonctionner, je devais envoyer un et un caractère, et mettre fin à la transmission avec \ r.

Était-ce utile?

La solution

Obtenez un oscilloscope (vous en avez un, non?) Et regarder la ligne série. Envoyer un caractère par seconde à travers elle et voir ce qui arrive sur le champ (mis à déclencheur sur le bit de démarrage). bits de port série sont dans l'ordre:. démarrage, .. MSB LSB, parité, arrêt

Voir s'il y a des personnages qui ne parvient pas, ou s'il y a un motif. Une autre possibilité est que tout est en fait ce qui en fait le port, et votre conseil d'administration est en baisse caractères.

Autres conseils

  1. Triple vérifier que la vitesse de transmission de l'appareil est en effet 38400
  2. parité de contrôle Triple, bits d'arrêt, etc
  3. Soyez au courant de la dégradation du signal pour les transmissions série sur de longues distances (probablement pas votre problème)

Si toutes les essayer de mettre la caisse au-dessus de la chaîne dans un tableau d'octets et l'envoi que, par la commande d'écriture. Juste une supposition.

L'envoi des caractères via Hyperterminal fournissent des caractères à la vitesse que vous les tapez. L'envoi des caractères par pyserial ils sont livrés en flux continu. Le récepteur (en particulier à des vitesses élevées de transmission) pourrait les déposer, selon la nature du récepteur.

En outre, lorsque vous envoyez des commandes à un interprète, vous avez seulement besoin de terminaison \ r (sans \ n), (ce qui est tout ce qui est envoyé par hyperterm, normalement). Cependant, si vous êtes juste afficher les valeurs, vous devrez peut-être \ n pour générer la nouvelle ligne.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top