私が持っているCiseco XRF無線モジュールとスライスパイの拡張ボードを。
プログラム 'screen'を使用すると正常に機能します。XRFモジュールに送信されるデータを見ることができます。
シリアルポートからデータを取得するにはどうすればよいですか?perlを試しましたが、何も読みませんでした。
私が持っているCiseco XRF無線モジュールとスライスパイの拡張ボードを。
プログラム 'screen'を使用すると正常に機能します。XRFモジュールに送信されるデータを見ることができます。
シリアルポートからデータを取得するにはどうすればよいですか?perlを試しましたが、何も読みませんでした。
回答:
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を必要なボーレートに置き換えます。responseは、シリアルポートによって返される行を含む配列になります。
python APIの詳細については、http://pyserial.sourceforge.net/をご覧ください。
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をシリアルコンバーターに接続する場合が考えられます。
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
}
これはデータを取得するための非常に単純なコードです
一部の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
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