Jak uzyskać dane z portu szeregowego?


12

Mam moduł radiowy Ciseco XRF i płytkę rozszerzającą Slice of Pi .

Korzystanie z programu „screen” działa dobrze; Widzę dane przesyłane do modułu XRF.

Jak uzyskać dane z portu szeregowego, aby móc na nim trochę przetworzyć? Próbowałem perla, ale nic nie przeczytałem.


2
Cześć Gerard, witamy w Raspberry Pi.SE. Czy możesz sprawdzić, czy dodałem prawidłowe linki?
Alex Chamberlain

Tak. Po prostu praca
518

Czy masz już kod? Jaki jest konkretny problem. Nie możesz w ogóle odczytać danych z portu szeregowego lub w Pythonie?
Piotr Kula,

@ppumkin Chce wiedzieć, jak uzyskać dane z portu szeregowego.

Odpowiedzi:


5

Nie próbowałem tego na Pi, ale używam Pythona, aby uzyskać dostęp do portu szeregowego na kości Beagle. Python serial można zainstalować za pomocąsudo apt-get install python-serial

Następnie możesz użyć następującego fragmentu kodu:

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

Oczywiście zastępując „/ dev / ttyS0” nazwą portu szeregowego, a 9600 - potrzebną szybkością transmisji. odpowiedzią będzie tablica zawierająca linie zwracane przez port szeregowy.

Więcej informacji na temat API Pythona można znaleźć na stronie http://pyserial.sourceforge.net/


3

Nazwa portu szeregowego na pi to: ttyAMA0(*)

więc mój kod to:

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 

(*) Sprawdź dane wyjściowe, dmesgaby znaleźć nazwę urządzenia po podłączeniu do pi. Może tak być, ttyUSB0jeśli podłączasz konwerter USB do szeregowego.


4
Czy chodziło Ci o komentarz do postu Phila? Mogę to przekonwertować, jeśli tak.
ramblinjan

0

Przykład użycia z C # i uruchomienia z 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
}

jest to bardzo prosty kod do pobierania danych

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


Dodałem, że dotyczy to tylko języka C #. nie bash C / C ++. Szczerze mówiąc, kod jest bardzo niejasny i wykorzystuje złe praktyki kodowania ... ale powinien działać dobrze. Na razie nie zasługuje na +1, ponieważ dotyczy wygranych, a nie konsoli.
Piotr Kula,

0

Na niektórych Pi portem szeregowym jest / dev / ttyS0, na innych jest to / dev / ttyAMA0, jeśli używasz adaptera USB to staje się / dev / ttyUSB0, to nie jest wyczerpująca lista.

Po znaku zachęty BaSH możesz wpisać

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

W C możesz

#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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.