Je veux communiquer avec le téléphone via un port série. Après avoir écrit une commande sur téléphone, j'ai utilisé J'ai essayé de définir Comment développer la mémoire tampon d'entrée pour obtenir tous les retours à la fois? P> ser.read (ser.inwaitting ()) code> pour obtenir sa valeur de retour, mais j'ai toujours reçu Total
1020 octets code> de caractères et En fait, les rendements souhaités sont censés être sur
50kb code>. p>
ser.dread (50000) code>, mais l'interprète se bloquera. P>
4 Réponses :
Je suppose que vous lisez 1020 octets parce que c'est tout ce qu'il y a dans le tampon, ce que Ser.Inwaitting () revient. Selon le débit en bauds 50 Ko peut prendre un certain temps à transférer, ou le téléphone s'attend à quelque chose de différent de votre part. Handshaking? P>
Inspectez la valeur de Ser.inwaitting, puis le contenu de ce que vous
J'ai exactement le même problème, y compris la taille du tampon 1020 octets et n'a pas trouvé de moyen de changer cela. Ma solution a été de mettre en œuvre une boucle comme:
in_buff='' while mbed.inWaiting(): in_buff+=mbed.read(mbed.inWaiting()) #read the contents of the buffer time.sleep(0.11) #depending on your hardware, it can take time to refill the buffer
PYSERIAL utilise les pilotes d'OS natifs pour la réception série. Dans le cas de Windows, la taille du pilote d'entrée est basée sur le pilote de périphérique. p>
Vous pourrez peut-être augmenter la taille dans les paramètres de votre gestionnaire de périphériques s'il est possible, mais il vous suffit de lire les données assez rapidement. P>
Si vous exécutez votre code sur la plate-forme Windows, vous devez simplement ajouter une ligne dans votre code.
ser.set_buffer_size(rx_size = 12800, tx_size = 12800)
N'oubliez pas que cette commande est une recommandation au conducteur. Cela fonctionnera uniquement avec certains pilotes. En principe, cela devrait être indépendant de la plate-forme. J'ai travaillé avec des pilotes Windows qui ne prennent pas cette recommandation.
Peut-être un (//a>?