Quel est l'équivalent de la Série.() dans pyserial?
Quand je suis en train de lire plusieurs lignes de données en série sur un Arduino, j'utilise la marche suivante:
String message = "";
while (Serial.available()){
message = message + serial.read()
}
Dans Arduino C, Serial.available()
renvoie le nombre d'octets disponibles pour être lu à partir de la mémoire tampon de série (Voir Docs). Ce qui est l'équivalent de Serial.available()
en python?
Par exemple, si j'ai besoin de lire plusieurs lignes de données série je m'attends à ues le code suivant:
import serial
ser = serial.Serial('/dev/ttyACM0', 9600, timeout=0.050)
...
while ser.available():
print ser.readline()
Veuillez décrire ce que
Serial.available()
est ou fournir un lien vers la documentation.OriginalL'auteur Michael Molter | 2016-07-28
Vous devez vous connecter pour publier un commentaire.
La propriété
numéro de Série.in_waiting
renvoie la "le nombre d'octets dans le buffer de réception".Ce qui semble être l'équivalent de
numéro de Série.disponible()
'description: "le nombre d'octets ... c'est déjà arrivé et stockées dans la série du tampon de réception."Essayer:
Pour les versions antérieures à pyserial 3.0, utilisez
.inWaiting()
. Pour déterminer votre pyserial version, faites ceci:pyserial
, je n'ai jamais vu la commandeser.in_waiting
. Est-il une raison pour laquelle il est évitée?Serial.available()
est omniprésent dans Arduino C de communications série. Ne développeurs python généralement utiliser un autre langage pour accomplir la même tâche?AttributeError: 'Serial' objet n'a pas d'attribut "in_waiting' root@raspberrypi:/home/wf# python3 --version de Python 3.4.2
si votre version de
pyserial
est âgé de plus de 3.0, essayez.inWaiting()
.3.4.2 est votre python numéro de version. Le changement de
inWaiting()
àin_waiting
s'est produite dans pyserial la version 3.0. Le pyserial numéro de version n'est pas nécessairement lié à la version de python nombre. Essayezimport serial ; print (serial.__version__)
.Merci pour le commentaire. Je suis passé à Java.
OriginalL'auteur Robᵩ
J'ai résolu le même problème comme si. Le seul inconvénient de ce code est que lors de la première fois que je suis à l'envoi de la lettre 'a', ser.inWaiting() renvoie 0. Pour supprimer cet effet, j'ai ajouté délai de 1 seconde avant elle. Qui semble résoudre le problème.
Dans mon cas, ATmega16 renvoie une chaîne de caractères, soit 8 ou 12bits. Donc, je vais obtenir le nombre de bits d'arriver à RPi avec ser.inWaiting() et puis je vais vous lire une quantité de données avec ser.read(), en les combinant dans des ser.lire(ser.inWaiting())
OriginalL'auteur Evaldas22
Une réponse correcte dépend de la version de Python - ce qui a déclenché moi pendant un certain temps aujourd'hui. Je soupçonne certains commentaires qui ont été en cours d'exécution sur Raspberry Pi qui est actuellement en Python 2.7.9 et, de même, moins-que-courant pySerial.
Donc sur un Pi vous pouvez utiliser
ser.inWaiting()
qui est similaire àSerial.available()
dans Arduino C - les deux renvoient le nombre d'octets dans le buffer de réception; pour pySerial >= 3.0 vous utilisezser.in_waiting
(noter que ceci est un attribut pas de fonction http://pyserial.readthedocs.io/en/latest/pyserial_api.html#serial.Serial.in_waiting)D'ailleurs, sur un Pi (et sans doute plus âgés Pythons/pySerials)
import serial ; print (serial.__version__)
résultats dans un attribut d'erreur, mais fonctionne sur les versions plus récentes.OriginalL'auteur jaydublu2002
J'ai écrit mon code comme ci-dessous. J'espère que vous pourrez l'utiliser modifier votre code
ser.read(150)
plutôt que de vérifier pour voir comment beaucoup (le cas échéant) est disponible. Quelques conseils supplémentaires, beaucoup de ce code peut être amélioré par plus de python (plus court, plus propre, plus rapide, plus facile à lire). Essayez d'utiliser lewith
mot-clé dans le jeu def = open()
,f.close()
, etser.close()
. En outre, votrewhile COUNT<=100:
doit être remplacé par unfor i in xrange(100)
oufor i in xrange(1, 101)
si le zéro de l'indexation est un problème.OriginalL'auteur Ajit Nayak