Série de Réception à partir d'Arduino pour Raspberry Pi avec PySerial s'arrête après un certain temps
Je suis en train de travailler sur un projet dans lequel je dois en recevoir quelques-uns de 25 caractères de données afin de les traiter dans le Raspberry Pi. Voici l'exemple de code qui génère certaines données que je veux recevoir de l'Arduino:
char i =0;
char a =0;
char b=0;
void setup(){
Serial.begin(9600);
for(i=0;i<25;i++){
Serial.print('l');}
Serial.print('\n');
delay(2000);
}
void loop(){
for(i=0;i<25;i++){
for(a=0;a<i;a++){
if((a==9)||(a==19)||(a==24))
Serial.print('l');
else
Serial.print('d');
}
for(b=0;b<25-i;b++){
Serial.print('l');
}
delay(2000);
}
}
Il envoie une ligne comme ceci " llllddddllldddd...' Cette ligne est de 25 caractères. Maintenant, je veux recevoir ce avec Raspberry Pi. Voici le code que j'essaie de travail:
ser = serial.Serial('/dev/AMA0',9600,timeout=1)
ser.open()
try:
serial_data = ser.readline()
print serial_data
except serial.serialutil.SerialException:
pass
Ce code reçoit des données très correctement pour 5 secondes, puis s'arrête soudainement de réception.
De plus, lorsque j'essaie le suivant, je n'ai pas de sortie ou d'Entrée/sortie des erreurs.
serial_data = ser.readline()
print serial_data
EDIT1:
Bon, j'ai commenté l'exception maintenant. Il donne l'erreur suivante:
raise SerialException('device reporst rediness to read but returned no data (device disconnected?)')
serial.serialutil.SerialException: device reports readiness to read but returned no data (device disconnected?)
Quelle est la bonne façon de recevoir un 25 les données de caractères d'arduino dans la framboise via PySerial? Toute aide sera greately apprécié.
OriginalL'auteur mozcelikors | 2013-11-20
Vous devez vous connecter pour publier un commentaire.
J'ai eu le même problème et a me casser la tête pour un bon moment, essayez cette
Exécuter
Si le résultat ressemble à quelque chose comme
Ensuite, vous devez désactiver getty d'essayer d'envoyer des données sur ce port
Afin d'utiliser le Raspberry Pi port série, nous avons besoin de désactiver getty (le programme qui affiche l'écran de connexion) par trouver cette ligne dans le fichier /etc/inittab
Et en commentaire en ajoutant # devant
Pour empêcher le Raspberry Pi à partir de l'envoi de données vers les ports de série lors du démarrage, allez dans fichier /boot/cmdline.txt et trouver la ligne et le retirer
Redémarrer le Raspberry Pi
De crédit lorsque le crédit est dû: http://blog.oscarliang.net/raspberry-pi-and-arduino-connected-serial-gpio/ m'a aidé à comprendre comment diable getty
OriginalL'auteur user2387729
Ai eu du mal avec ce lors de la lecture des données gps dans le raspberry pi. La sortie d'arrêt après environ 10seconds et rapport
Les solutions données dans presque tous les forums sont pour la raspberry pi 2 avec wheezy. J'ai enfin réussi à obtenir en continu du gps en continu dans ma framboise pi3 avec jessie en procédant comme suit:
enable_uart=1
et ajouterdtoverlay=pi3-disable-bt
/boot/config.txt. ensuite, redémarrezJ'ai dû changer ma /boot/cmdline.txt pour
dwc_otg.lpm_enable=0 console=tty1 console=serial0,9600 root=/dev/mmcblk0p7 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
puis redémarrez
arrêter getty:
sudo systemctl stop [email protected]
pour désactiver:
sudo systemctl stop [email protected]
Vous devez être prudent avec le /boot/cmdline.txt. Toute erreur dans le fichier peut rendre votre raspberry pi à ne pas démarrer. Il est mieux de garder une copie de sauvegarde du fichier avant de le modifier. Aussi définir la vitesse de transmission correctement. Dans mon cas, c'était 9600. Espérons que cette aide!
OriginalL'auteur Chandan Purohit
J'ai utilisé pour obtenir beaucoup, et puis un ami m'a dit de demander à l'arduino pour les données à partir de python.
Description ci-dessous
envisager d'avoir l'arduino seulement envoyer des données lorsque vous y êtes invité par votre programme en python:
prompt.py
invite.ino
Aussi, j'ai fait un dépôt github qui a d'autres exemples pour python-arduino communication:
https://github.com/gskielian/Arduino-DataLogging/blob/master/PySerial/README.md
OriginalL'auteur gskielian
Pendant votre
loop
fonction de votreArduino
code vous de ne jamais mettre fin à un retour à la ligne char\n
, ce n'est un problème avecser.readline()
car il lit jusqu'à ce qu'un\n
caractère.Pendant votre
setup
fonction vous envoyer correctement un\n
personnage qui pourrait expliquer la valeur initiale d'être envoyé, mais pas les données.peut-être modifier votre code Arduino comme ceci:
Et votre code python comme si...
Peut-être que vous pourriez essayer de monter votre
timeout
à quelque chose de plus grand que 2, car vous retardez votre Arduino? Il pourrait également être intéressant d'ajouter une instruction print ou quelque chose à votreexcept
dans votre code python (juste pour le débogage), peut-être que la série a finalement frappe une exception. J'ai eu ce problème avec un Arduino projet que j'ai fait récemment.Rien n'a changé 🙁
est votre code python dans une boucle?
Aussi j'ai fait une mise à jour de ma réponse
OriginalL'auteur Farmer Joe
Essayer
sudo rasbpi-config
,choisissez l'option d'interface, de dire " non " premier message ("noyau login"), " oui " à la deuxième message ("serial communication"). J'ai découvert que si le premier message est sur il jette des erreurs. Dire " non " il fixe.
OriginalL'auteur nate c