Seri bağlantı noktasından verileri nasıl alabilirim?


12

Bir Ciseco XRF radyo modülüm ve bir dilim Pi genişletme kartım var .

Programı kullanmak 'ekran' iyi çalışıyor; Verilerin XRF modülüne aktarıldığını görebiliyorum.

Seri bağlantı noktasından verileri nasıl alabilirim, böylece üzerinde işlem yapabilir miyim? Perl denedim ama bir şey okumadım.


2
Merhaba Gerard, Raspberry Pi.SE.'ye hoşgeldiniz. Doğru bağlantıları eklediğimi kontrol edebilir misiniz?
— Alex Chamberlain

Evet. Sadece iş
— user518

Zaten kodunuz var mı? Belirli sorun nedir. Serial'dan hiç veri veya python okuyamıyor musunuz?
— Piotr Kula

@ppumkin Seri bağlantı noktasından nasıl veri alınacağını bilmek istiyor.

Yanıtlar:


5

Bunu bir Pi'de denemedim, ama Beagle Bone'daki seri bağlantı noktasına erişmek için python kullanıyorum. Python seri kullanılarak kurulabilirsudo apt-get install python-serial

Ardından aşağıdaki kod snippet'ini kullanabilirsiniz:

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

Açıkçası "/ dev / ttyS0" yerine seri portun adını ve 9600'ü ihtiyacınız olan baud hızıyla değiştirmek. yanıt, seri bağlantı noktası tarafından döndürülen satırları içeren bir dizi olacaktır.

Python API'sı hakkında daha fazla bilgi http://pyserial.sourceforge.net/ adresinde bulunabilir.


3

Bir pi'deki seri bağlantı noktasının adı: ttyAMA0(*)

benim kod:

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 

(*) dmesgCihaz adını pi'ye bağlandıktan sonra bulmak için çıkışını kontrol edin . ttyUSB0Seri konvertöre bir USB bağlarsanız olabilir .


4
Bunu Phil'in gönderisine yorum yapmak mı demek istediniz? Eğer öyleyse dönüştürebilirim.
— ramblinjan

0

C # ile kullanmak ve Mono ile çalıştırmak için bir örnek

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
}

bu veri almak için çok basit bir kod

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


Bunun sadece C # için olduğunu ekledim. bash C / C ++ değil. Açıkçası kod çok belirsiz ve kötü kodlama uygulamaları kullanıyor ... ama iyi çalışması gerekir. Konsol için değil, Win Forms için olduğu için henüz +1 hak etmiyor.
— Piotr Kula

0

Bazı Pi'lerde seri bağlantı noktası / dev / ttyS0, diğerlerinde / dev / ttyAMA0, bir USB adaptörü kullanıyorsanız / dev / ttyUSB0 olur, bu kapsamlı bir liste değildir.

BaSH komut istemine şunu yazabilirsiniz:

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

C dilinde şunları yapabilirsiniz:

#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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.