Как я могу получить данные от последовательного порта?

12

У меня есть радиомодуль Ciseco XRF и плата расширения Slice of Pi .

Использование программы «Экран» работает отлично; Я вижу данные, передаваемые в модуль XRF.

Как я могу получить данные из последовательного порта, чтобы я мог выполнить некоторую обработку на нем? Я пробовал Perl, но ничего не читал.

user518
источник
2
Привет, Джерард, добро пожаловать в Raspberry Pi.SE. Можете ли вы проверить, что я добавил правильные ссылки?
Алекс Чемберлен
Да. Просто работа
user518
У вас уже есть код? В чем конкретная проблема. Вы не можете читать данные из Serial вообще или в Python?
Петр Кула
@ppumkin Он хочет знать, как получить данные из последовательного порта.

Ответы:

5

Я не пробовал это на Pi, но я использую python для доступа к последовательному порту на Beagle Bone. Серийный Python может быть установлен с помощьюsudo apt-get install python-serial

Затем вы можете использовать следующий фрагмент кода:

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

Очевидно, заменив "/ dev / ttyS0" на имя последовательного порта, а 9600 - на нужную скорость передачи. ответом будет массив, содержащий строки, возвращаемые последовательным портом.

Более подробную информацию о Python API можно найти по адресу http://pyserial.sourceforge.net/

Фил
источник
3

Имя последовательного порта на пи: ttyAMA0(*)

так что мой код:

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 

(*) Проверьте вывод, dmesgчтобы узнать имя устройства после его подключения к пи. Это может быть, ttyUSB0если вы подключите USB к последовательному конвертеру.

Дэрил
источник
4
Вы хотели, чтобы это был комментарий к посту Фила? Я могу преобразовать это, если так.
Рамблинян
0

Пример использования с C # и запуска с 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
}

это очень простой код для получения данных

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

user2341823
источник
Я добавил, что это только для C #. не Bash C / C ++. Честно говоря, код очень расплывчатый и использует плохие методы кодирования ... но он должен работать нормально. Пока не заслуживает +1, потому что это для Win Forms, а не Console.
Петр Кула
0

На некоторых Пи последовательный порт - / dev / ttyS0, на других - / dev / ttyAMA0, если вы используете USB-адаптер, он становится / dev / ttyUSB0, это не исчерпывающий список.

В приглашении BaSH вы можете ввести

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

В C вы можете

#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
Голубых фишек
источник