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.