我正在使用 PHP 與我的 AVR 微控制器在 /dev/ttyS0 上進行介面連接。我猜其他人也一樣。
這裡有一些提示
- dio_tcsetattr -> 設定為啟用
- RTS / CTS 硬體控制
- ICANON 模式
(這表示當您使用 dio_write 時,dio_read 會等待直到在 /dev/ttyS0 中輸入 0x0A/LF 或其他控制字元後才會返回讀取結果,它也會在訊息的結尾自動發送 0x0A/LF 到您的裝置)。
對於不需要 RTS/CTS 和/或 ICANON 的使用者,您可以使用 Linux 指令:stty。
這是我的
<?php
exec('stty -F /dev/ttyS0 4800 raw');
$fd=dio_open('/dev/ttyS0',O_RDWR | O_NOCTTY | O_NDELAY);
dio_fcntl($fd,F_SETFL,0);
dio_write($fd,"\x41",1); // 寫入 0x41 或 'A' 到 /dev/ttyS0
// 將 result_length 替換為您預期的指令結果長度
for ($i=0;$i < result_length;$i++) {
$result .=dio_read($fd, 1);
}
echo $result;
?>
參考
- POSIX 作業系統的序列埠程式設計指南, http://www.easysw.com/~mike/serial/
- stty 使用手冊