Go Down

Topic: Liaison série (Read 2259 times) previous topic - next topic

Rifldern

Jun 02, 2012, 05:57 pm Last Edit: Jun 02, 2012, 06:12 pm by Rifldern Reason: 1
Bonjour,
prévoyant une utilisation prochaine d'un arduino, je voudrait savoir si il est possible de cominuquer avec l'arduino via le cable USB sans passer pas le monitor sérial du logicielle Arduino?
Est-il également possible d'ouvrir un fichier contenu sur l'ordinateur(par exemple un  .txt) avec un arduino(via le cable USB) et d'en lire/modifier le contenu?
Si on peut faire le tout via un programme écit en C se serai top.
Merci d'avance

barbudor

Le port USB d'une carte Arduino est reconnue par le PC comme une liaison série de type COM.
La communication entre le PC et l'Arduino se fait via cette liaison série.

Le SerialMonitor de l'Arduino est un outil facile pour communiquer et debugger.
C'est une console qui te permet d'afficher des éléments depuis l'Arduino en utilisant Serial.print(...) comme tu utiliserais un printf() dans un programme C en mode console sur PC.
Tu peux aussi taper des réponse et les envoyer vers l'Arduino avec le bouton Send. Sur l'Arduino tu récupère avec Serial.read() comme un getch() sur PC. Il y a aussi des fonctions qui feront l'équivalent d'un gets() par exemple et bien d'autre.

Tu peux très bien utiliser un autre terminal si celui fournit dans le logiciel Arduino ne te convient pas.
Hyperterminal, Kermit, TeraTermPro ... font la même chose.

Mais sans écrire toi même un programme sur PC et implémenter un protocole pour cela, tu ne pourra pas accéder directement aux ressources du PC.
Il faut écrire un PC qui partagera ces ressources et une bibliothèque sur Arduino pour communiquer avec le logiciel PC et accéder à ces ressources.

Peut être que si tu nous décris ce que tu cherche à faire, nous pourrons te conseiller sur la faisabilité dans le monde Arduino.
Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

papybricol

Bonsoir,

sujet intéressant
(souvent le cas d'ailleurs , et réponses de pros...    :smiley-eek-blue:)

Justement en utilisant un programme Processing (langage proche de l'arduino) sur le Pc, Arduino peut-il lire/ecrire sur des fichiers du PC, restons modestes, :smiley-red:
au format texte...


Merci


...ils embarquèrent la logique, coupèrent les cordons, alors, libérés de leurs chaînes, une immensité s'ouvrait devant eux...

Jean-François

Oui, pour Processing.
MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

barbudor

Peut importe que tu utilises Processing,  basic ou en C#/C/C++
Il faut écrire un logiciel "serveur" coté PC pour partager les ressources à travers la liaison série PC/Arduino.

Mais est-ce vraiment la meilleure voie ?
Ecrire un serveur généraliste pour faire ce partage de ressource risque d'être lourd et décourageant.

C'est pourquoi j'invite Rifldern à exposer son projet pour qu'on puisse le conseiller au mieux.
Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

zoroastre

#5
Jun 02, 2012, 07:52 pm Last Edit: Jun 02, 2012, 08:00 pm by zoroastre Reason: 1
Yep!

Quote
Il faut écrire un logiciel "serveur" coté PC

Je dirais même plus, il faut écrire avant tout une appli "proxy" qui interconnecte le logiciel et l'arduino via le port com.

Pour avoir experimenter cette voie, je dirais que ce n'est pas si compliqué que celà. Il faut juste du temps et des objectifs clairement définis.

Pour ma part, j'avais opté pour le langage python qui me semblait apporter un deploiement rapide :

Exemple proxy, inspiré de bitty.py : http://pastebin.com/kZKziLAa

Remarque : le proxy écoute le port com et internet ici. Si l'application est résidente uniquement, toute la partie socket est inutile.

@+

Zoroastre.
Gné! ;)

skywodd

Bonjour,

Pour la communication pc <> arduino tout passe par le port série, tu peut donc utiliser n'importe quel terminal série (je vais pas m'attarder sur ce point).

Pour le transfert de fichier via le port série il te faudra une application PC et une application arduino utilisant un même protocole pour communiquer.
Pour le protocole de communication regarde du coté de Xmodem, Ymodem ou Zmodem il existe des implémentations sous de nombreux langage pour PC et aussi pour Arduino.

Sinon voici un exemple simple de "streaming" de fichier (en lecture uniquement) avec un programme python coté pc :
http://skyduino.wordpress.com/2012/04/20/arduino-w-python-streamer-un-fichier-via-le-port-serie/
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Rifldern

Désolé pour l'attente(petit soucis de PC).
Alors mon objectif est de faire un robot qui résoud les rubik's cube. Il se composerai d'un logicielle sur PC qui traite les données et résoud le cube, d'un caméra(relié au PC) pour scanner le cube et du robot commandé par l'arduino pour effectuer les mouvements.
J'avait l'intentions de faire passer les ordre du PC à l'arduino soit par la liaison série(d'où la question si on est obligé de passer par le programme arduino) soit par un .txt(chaque lettre représentant une action).
Au niveau de la programmation, il faut dire qu'on est 4 a travaillé sur le projet donc le temps passé dessus ne devraait pas être un problème.
Merci en tout cas pour les réponses déjà posté! :smiley-mr-green:

skywodd


Alors mon objectif est de faire un robot qui résoud les rubik's cube. Il se composerai d'un logicielle sur PC qui traite les données et résoud le cube, d'un caméra(relié au PC) pour scanner le cube et du robot commandé par l'arduino pour effectuer les mouvements.

Pour le logiciel tu as déja fixé un choix ? Parce que dans le genre résolution de rubik's cube + caméra il y a "Cube explorer".
Ou sinon il ya aussi pas mal d'application pour smartphone android ;)

Tu as aussi pas mal de projet dans le genre sur le web ;)
http://hackaday.com/2009/09/11/avr-controlled-rubiks-cube-solver/ (PC + AVR)
http://deviceguru.com/android-phone-controlled-robot-solves-rubiks-cube/ (Android + Arduino)


J'avait l'intentions de faire passer les ordre du PC à l'arduino soit par la liaison série(d'où la question si on est obligé de passer par le programme arduino) soit par un .txt(chaque lettre représentant une action).

Transférer un fichier .txt par le port série n'ajoutera rien de plus que de transmettre directement les données par le port série ;)

Il te suffit d'attendre d'avoir un octet sur le port série avec while(Serial.avalaible() < 1); puis de faire un switch sur l'octet reçu.
Exemple :
Code: [Select]
void loop() {
  while(Serial.avalaible() < 1);
  switch(Serial.read()) {
    case 'U':
      // Up
      break;
    case 'D':
      // Down
      break;
    // ...
  }
}

Et côte PC de te faire un script / programme qui envoi les bonne commandes quand il faut ;)
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Go Up