Як отримати дані з послідовного порту?


12

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

Використання програми "екран" працює чудово; Я бачу дані, що передаються в модуль XRF.

Як мені отримати дані з послідовного порту, щоб я міг обробляти їх? Я спробував perl, але нічого не прочитав.


2
Привіт, Джерард, ласкаво просимо до Raspberry Pi.SE. Чи можете ви перевірити, чи я додав правильні посилання?
Алекс Чемберлен

Так. Просто робота
user518

У вас вже є якийсь код? У чому полягає конкретна проблема. Ви не можете читати дані із Serial взагалі чи в python?
Пьотр Кула

@ppumkin Він хоче знати, як отримати дані з послідовного порту.

Відповіді:


5

Я не пробував цього на Pi, але використовую python для доступу до серійного порту на Beagle Bone. Python serial можна встановити за допомогою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 на потрібну швидкість передачі. відповідь буде масивом, що містить рядки, які повертаються послідовним портом.

Більш детальну інформацію про API python можна знайти на веб-сторінці http://pyserial.sourceforge.net/


3

Ім’я послідовного порту на pi: 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щоб дізнатись ім'я пристрою, як тільки він приєднаний до pi. Це може бути, ttyUSB0якщо ви підключите USB до послідовного перетворювача.


4
Ви мали на увазі, щоб це було коментарем до поста Філа? Я можу це перетворити, якщо так.
ramblinjan

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/


Я додав, що це лише для C #. не баш C / C ++. Чесно кажучи, код дуже розпливчастий і використовує погані практики кодування ... але він повинен працювати добре. Не заслуговує +1 лише тому, що це для Win Forms, а не для консолі.
Пьотр Кула

0

На деяких Pi-сервері послідовним портом є / dev / ttyS0, на інших це / dev / ttyAMA0, якщо ви використовуєте USB-адаптер, це стає / dev / ttyUSB0, це не вичерпний список.

У рядку BaSH ви можете ввести

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

В С можна

#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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.