Comment puis-je obtenir les données du port série?

12

J'ai un module radio Ciseco XRF et une carte d'extension Slice of Pi .

L'utilisation de l'écran du programme fonctionne très bien; Je peux voir des données transmises au module XRF.

Comment puis-je obtenir les données du port série, afin que je puisse y effectuer un traitement? J'ai essayé Perl mais il n'a rien lu.

user518
la source
2
Salut Gérard, bienvenue sur Raspberry Pi.SE. Pouvez-vous vérifier que j'ai ajouté les bons liens?
Alex Chamberlain
Oui. Just the job
user518
Avez-vous déjà un code? Quel est le problème spécifique. Vous ne pouvez pas lire les données de Serial du tout ou en python?
Piotr Kula
@ppumkin Il veut savoir comment obtenir des données du port série.

Réponses:

5

Je n'ai pas essayé cela sur un Pi, mais j'utilise python pour accéder à un port série sur un Beagle Bone. La série Python peut être installée à l'aide desudo apt-get install python-serial

Ensuite, vous pouvez utiliser l'extrait de code suivant:

import serial
serialport = serial.Serial("/dev/ttyS0", 9600, timeout=0.5)
serialport.write("What you want to send")
response = serialport.readlines(None)
print response

En remplaçant évidemment "/ dev / ttyS0" par le nom du port série, et 9600 par le débit en bauds dont vous avez besoin. la réponse sera un tableau contenant les lignes renvoyées par le port série.

Plus de détails sur l'API python peuvent être trouvés sur http://pyserial.sourceforge.net/

Phil
la source
3

Le nom du port série sur un pi est: ttyAMA0(*)

donc mon code est:

import serial
serialport = serial.Serial("/dev/ttyAMA0", 9600, timeout=0.5)
serialport.write("My string output to serial port")
response = serialport.readlines(None)
print response 

(*) Vérifiez la sortie de dmesgpour connaître le nom du périphérique une fois qu'il est connecté au pi. Cela pourrait être le ttyUSB0cas si vous connectez un convertisseur USB vers série.

Daryl
la source
4
Vouliez-vous que ce soit un commentaire sur le post de Phil? Je peux le convertir si c'est le cas.
ramblinjan
0

Un exemple à utiliser avec C # et à exécuter avec Mono

private _serialPort = null;

privatevoid Form1_Load(object sender, EventArgs e)
{
  _serialPort = new SerialPort(“COM1″, 9600, Parity.None, 8);
  _serialPort.DataReceived += new        
  SerialDataReceivedEventHandler(_serialPort_DataReceived);
  _serialPort.Open();
}

void _serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
  string data = _serialPort.ReadExisting();
  // do something with your data, you will need to invoke a delegate to update the UI
}

c'est un code très simple pour obtenir des données

http://susheelonline.com/communication-with-serial-post/

user2341823
la source
J'ai ajouté que c'est uniquement pour C #. pas bash C / C ++. Franchement, le code est très vague et utilise de mauvaises pratiques de codage ... mais cela devrait fonctionner correctement. Ne mérite pas encore un +1 car il s'agit de Win Forms et non de la console.
Piotr Kula
0

Sur certains Pi, le port série est / dev / ttyS0, sur d'autres c'est / dev / ttyAMA0, si vous utilisez un adaptateur USB, il devient / dev / ttyUSB0, ce n'est pas une liste exhaustive.

À l'invite BaSH, vous pouvez taper

echo -en "my text\n" > /dev/ttys0  ## write to serial
cat /dev/ttyS0                     ## read from serial

En C, vous pouvez

#include <stdio.h>
char  reply[32];                                // response storage
FILE*  fd = fopen("/dev/ttyS0", "rb");          // open Serial
fprintf(fd, "request\n");                       // write serial
fread(reply, sizeof(char), sizeof(reply), fd);  // read serial
printf("response: %s\n", reply);                // display result
fclose(fd);                                     // close serial
Bateau bleu
la source