ฉันมีโมดูลวิทยุ Ciseco XRFและบอร์ดขยายของ Slice of Pi
การใช้โปรแกรม 'หน้าจอ' ทำงานได้ดี; ฉันสามารถดูข้อมูลที่ถูกส่งไปยังโมดูล XRF
ฉันจะรับข้อมูลจากพอร์ตอนุกรมได้อย่างไรเพื่อให้สามารถประมวลผลได้ ฉันลอง Perl แต่ไม่ได้อ่านอะไรเลย
ฉันมีโมดูลวิทยุ Ciseco XRFและบอร์ดขยายของ Slice of Pi
การใช้โปรแกรม 'หน้าจอ' ทำงานได้ดี; ฉันสามารถดูข้อมูลที่ถูกส่งไปยังโมดูล 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 ด้วยอัตรารับส่งข้อมูลที่คุณต้องการ การตอบสนองจะเป็นอาร์เรย์ที่มีบรรทัดที่ส่งคืนโดยพอร์ตอนุกรม
รายละเอียดเพิ่มเติมของ 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