web-dev-qa-db-fra.com

Bash, I / O série et Arduino

Quindi sono un po 's la mia testa e mi sento molto vicino a un soluzione, ma non funziona ancora abbastanza. Ecco la mia situazione:

Vous devez d'abord commander un microcontrôleur et consulter les scripts pour écrire le script Bash (dans le répertoire Mac OS X 10.6). Sélectionnez un (des) produit (s) actuel (s), choisissez une sortie standard, une sortie standard et une copie standard inviare dati seriali all'unità Arduino. Questionnaire sur le script d'utilisation de l'API Processus natif d'Adobe AIR par consentement de l'utilisateur Ajouter une analyse complète à l'aide d'une application Flex Adobe AIR .

Je miei dû script sono molto semplici -

Ecco il mio script WriteToSerial.sh:

echo $1 > $2

(1 dollar par mois, 2 dollars par mois) - attualmente /dev/tty.usbserial-A800eIUj)

Ed ecco il mio script ReadSerialOutput.sh:

tail -f $1

(1 $ par jour par semaine, à droite /dev/tty.usbserial-A800eIUj)

Quand vous écrivez un script de question (où vous voulez que votre ordinateur soit connecté à la console de lecture), il contient des informations sur votre ordinateur - Sélectionnez des symboles numériques, remplacez les options à la placeCtrl+Cfuori dal processo.

Approchez-vous de l'Arduino IDE pour accéder au moniteur série, au code tail -f la port, au moniteur pour la série, le résultat de "test"> le choix, le plus rapide.

Cliquez ici pour afficher votre moniteur vidéo interne dans un Arduino IDE dans le monde libre dans le répertoire mobile, cliquez ici pour résoudre le problème. Question à la recherche de nouvelles idées et non-respectes l'insertion dans les catégories de commandes. Tuttavia, ho cercato in alto e in basso per giorni e non riesco a trovare nulla che risolva questo problema.

Qual'è la soluzione?

25
Myk

Essayez d’utiliser l’outil stty :

stty -F /dev/my_serial_port <baud_rate> cs8 cread clocal

Comme toujours, lisez la page de manuel avant d'appliquer ce qui précède. cread vous permet de recevoir des données. Vous pouvez vouloir omettre clocal si vous utilisez le contrôle de flux. Si vous n'êtes pas sûr des paramètres ci-dessus, demandez, et je pourrai vous donner une réponse plus complète.

14
J. Polfer

J'ai le même problème aussi. J'utilise Arduino Uno avec Ubuntu 12.04. Après quelques heures de recherche et d’essai, je découvre qu’Arduino va réinitialiser lorsque le périphérique série est ouvert pour la première fois mais ne sera pas réinitialisé à la prochaine ouverture du périphérique série.

Donc, lancez la commande - echo "chaîne d'entrée">/dev/ttyXXX dans bash réinitialisera Arduino et enverra "chaîne d'entrée" immédiatement. L'initialisation d'Arduino nécessite un certain temps et n'est pas assez rapide pour recevoir cette chaîne. cat/dev/ttyXXX réinitialisera également Arduino.

Lorsque / dev/ttyXXX est ouvert quelque part d’abord, ces commandes fonctionneront.

Voici ma solution:

1) ouvrez/dev/ttyXXX en redirigeant/dev/ttyXXX vers la description du fichier 3

exec 3 <>/dev/ttyXXX

2) attendre l'initialisation d'Arduino

dormir 1

3) communiquer avec Arduino

echo "quelque chose en entrée"> & 3

chat <& 3

4) fermer/dev/ttyXXX

exec 3> & -

28
Yihui Xiong

Je me suis également débattu avec ce problème, essayant sans fin des réglages stty et des astuces pour lire mes fichiers dans /dev/tty.usbserial-FTF7YNJ5 (dans mon cas) tout en restant sur un orteil, etc.

Ensuite, j'ai fait un ls/dev et j'ai remarqué /dev/cu.usbserial-FTF7YNJ5 - oh, qu'est-ce que c'est? Apparemment, une version du périphérique "unité appelante" qui n'attend ni ne fournit aucun contrôle de flux. Sauvegarde les octets sur le port. Exactement ce dont j'avais besoin.

Donc, il suffit de faire: cat super_file.bin> /dev/cu.usbserial-XXXXX

J'espère que cela t'aides. Et seulement maintenant que je connaissais la réponse, j’ai trouvé ceci: http://stuffthingsandjunk.blogspot.com/2009/03/devcu-vs-devtty-osx-serial-ports.html

4
chrism

Sous Linux, vous devez appeler setserial pour configurer vos options de port série (débit en bauds, parité, contrôle de flux, etc.) avant de pouvoir lire/écrire le port correctement.

Vous devez trouver un moyen de le faire avec votre système Mac OS X Bash.

Ou vous pourriez écrire un script Python pour le faire.

2
J. Polfer

Peut-être essayez-vous un outil en ligne de commande similaire à serial-1.0.

Voir: Test de bouclage/duplex du port série, en Bash ou en C? (substitution de processus)

1
dan
0
tilo

Vérifiez si l'envoi/la réception de données à partir de l'unité Arduino fonctionne en utilisant une application différente telle que Cornflake (terminal série pour Mac OS X) - au lieu d'utiliser Arduino IDE et le moniteur série.

De plus, vous voudrez peut-être vérifier si vous pourriez bénéficier du passage à Xcode (en termes de fonctionnalités de débogage, etc.).

Voir: Configuration de Xcode pour compiler et télécharger sur un Arduino ATMega328 (Duemilanove)

0
tol

Un one-liner Quelque chose qui fonctionne vraiment bien pour l'enregistrement de données et le traitement de données:

  • monitoring: la sortie arduino peut déclencher des actions sur l'ordinateur
  • data-logging: il enregistre simultanément ces données en streaming dans un fichier
  • coché? envoi-messages: Je n'ai pas encore essayé d'envoyer de données à l'arduino, mais voir le deuxième exemple, pourrait peut-être envoyer un message au port série via un utilitaire cmdline.

les horodatages et envois suivants à stdout

cat /dev/cu.usbmodem1421 | awk '{ for (i=0; i<NF; i++) printf $i + system("echo  , `date`")}'

Exemple de sortie:

enter image description here

Cette méthode peut même être adaptée pour surveiller et traiter les données en temps réel:

cat /dev/cu.usbmodem1421 | awk '{ for (i=0; i<NF; i++) printf $i + system("echo , `date`)}'

plus d'exemples ici: https://github.com/gskielian/Arduino-DataLogging/tree/master/Bash-One-Liner

0
gskielian

Essayez d’ajouter un esperluette (&) à la fin des commandes pour mettre le processus en arrière-plan. Si la console raccroche, cela signifie que le script ou le processus est toujours en cours d'exécution sur votre terminal actuel et que vous ne pourrez plus rien entrer ou cliquer avant que le processus ou le script soit terminé.

Vous pouvez également essayer d'exécuter la commande dans 1 fenêtre de terminal, ouvrir une nouvelle fenêtre/un nouvel onglet de terminal et essayer de la réduire.

0
bm7150

Il existe également un outil de ligne de commande SerialPortSample d’Apple qui vous permet de définir des débits en bauds arbitraires:

// from: SerialPortSample/SerialPortSample.c
// ...
// Starting with Tiger, the IOSSIOSPEED ioctl can be used to set arbitrary baud rates
// other than those specified by POSIX. The driver for the underlying serial hardware
// ultimately determines which baud rates can be used. This ioctl sets both the input
// and output speed. 
// ...

Pour plus d'informations, voir: http://www.arduino.cc/playground/Interfacing/Cocoa

Objective-candarduino (hébergé sur le code de Google) est un autre exemple de code Cocoa qui explique comment parler au microcontrôleur Arduino via une connexion série.

0
ceeit