[英]Reading and writing to a serial port using shell and Java
我正在嘗試使用Shell和Java的組合讀取和寫入串行端口。 目的是能夠使用PrintWriter和BufferedReader從連接到串行端口的設備發送和接收命令。 我知道這可以通過不同的方式完成(無需使用shell),但這不是我想要的。 我希望能夠使用Shell和Java做到這一點。
這是我的代碼:
static String port = "/dev/tty.usbmodem411";
static int baudRate = 9600;
private static String command = "screen " + port + " " + baudRate;
public static void main(String[] args) throws Exception {
System.out.println("Command is " + command);
Process p = Runtime.getRuntime().exec(command);
//p.waitFor();
BufferedReader reader =
new BufferedReader(new InputStreamReader(
p.getInputStream()));
String line = reader.readLine();
while(true)
{
if (line != null) {
System.out.println(line);
}
line = reader.readLine();
}
}
通過此代碼,我專門嘗試從串行端口讀取。 我正在使用Java運行Shell命令來訪問串行端口,然后從命令中讀取輸出。
但是,當我運行此代碼時,總是收到一條消息,指出“必須連接到終端”。 我還嘗試過更改command = "screen " + port + " " + baudRate;
行command = "screen " + port + " " + baudRate;
command = "screen -dm" + port + " " + baudRate;
,但是我什么也沒得到。 我已經咨詢了幾個類似的問題, 從Java執行屏幕命令以及如何在Linux中打開命令終端? 但我仍然不知道該怎么辦才能解決此問題。 我覺得這一定很簡單,但是經過數小時的研究,我不知道該怎么辦。
您可以使用UUCP軟件包中的命令cu來代替屏幕 。 要安裝UUCP軟件包sudo apt-get install uucp
或sudo yum install uucp
。
然后使用以下命令: static String command = "cu -l " + port + " -s " + baudRate;
一些解釋:
您的描述表明您只需要訪問串行端口上接收的流。 您表示希望使用shell命令來訪問端口。 為什么不使用cat ...
將從端口接收的內容發送到標准輸出。
如果這可行,那么為什么不能僅打開串行端口並直接從中讀取?
使用screen
似乎會帶來該窗口管理器提供的所有全屏處理,這不太可能正確處理。 例如,應為輸出格式化屏幕的終端類型?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.