Wie erhalte ich die Daten von der seriellen Schnittstelle?


12

Ich habe ein Ciseco XRF-Funkmodul und eine Slice of Pi- Erweiterungskarte.

Die Verwendung des Programms 'screen' funktioniert einwandfrei. Ich kann sehen, dass Daten an das XRF-Modul übertragen werden.

Wie erhalte ich die Daten von der seriellen Schnittstelle, damit ich sie bearbeiten kann? Ich habe Perl ausprobiert, aber es hat nichts gelesen.


2
Hallo Gerard, willkommen bei Raspberry Pi.SE. Können Sie überprüfen, ob ich die richtigen Links hinzugefügt habe?
Alex Chamberlain

Ja. Nur der Job
user518

Hast du schon einen Code? Was ist das spezifische Problem. Sie können überhaupt keine Daten von Serial oder in Python lesen?
Piotr Kula

@ppumkin Er möchte wissen, wie er Daten von der seriellen Schnittstelle erhält.

Antworten:


5

Ich habe dies auf einem Pi nicht ausprobiert, aber ich verwende Python, um auf einen seriellen Port eines Beagle-Bones zuzugreifen. Python serial kann mit installiert werdensudo apt-get install python-serial

Dann können Sie den folgenden Codeausschnitt verwenden:

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

Offensichtlich ersetzen Sie "/ dev / ttyS0" durch den Namen der seriellen Schnittstelle und 9600 durch die Baudrate, die Sie benötigen. Die Antwort ist ein Array, das die vom seriellen Port zurückgegebenen Leitungen enthält.

Weitere Details zur Python-API finden Sie unter http://pyserial.sourceforge.net/


3

Der Name der seriellen Schnittstelle an einem Pi lautet: ttyAMA0(*)

Mein Code lautet also:

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 

(*) Überprüfen Sie die Ausgabe von dmesg, um den Gerätenamen zu ermitteln, sobald er an den Pi angehängt ist. Es könnte sein, ttyUSB0wenn Sie einen USB-Seriell-Konverter anschließen.


4
Meinten Sie, dass dies ein Kommentar zu Phils Post ist? Ich kann es konvertieren, wenn ja.
Ramblinjan

0

Ein Beispiel zur Verwendung mit C # und zur Ausführung mit 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
}

Dies ist ein sehr einfacher Code zum Abrufen von Daten

http://susheelonline.com/kommunikation-mit-serialpost/


Ich fügte hinzu, dass dies nur für C # ist. nicht C / C ++ bash. Ehrlich gesagt ist der Code sehr vage und verwendet schlechte Codierungspraktiken ... aber es sollte gut funktionieren. Hat gerade noch keine +1 verdient, weil es für Win Forms und nicht für Console ist.
Piotr Kula

0

Bei einigen Pi ist der serielle Port / dev / ttyS0, bei anderen ist es / dev / ttyAMA0. Wenn Sie einen USB-Adapter verwenden, wird er zu / dev / ttyUSB0. Dies ist keine vollständige Liste.

An der BaSH-Eingabeaufforderung können Sie eingeben

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

In C kannst du

#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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.