C#,如何通过串行端口以特定顺序向 Linux SBC(BeagleBone) 命令 read/write?

C#, How can I read/write commands to a Linux SBC(BeagleBone) through a serial port in a certain order?

我正在尝试通过串行端口向 BeagleBone 写入命令,然后读取该输出,但由于某些原因它似乎不起作用。这是我的代码:

SerialPort port = new SerialPort("COM1", 115200, Parity.None, 8, StopBits.One);

            port.ReadTimeout = 500;
            port.WriteTimeout = 500;


            port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);

            port.Open();

            port.WriteLine("debian\r\n"); //default login username
            port.WriteLine("temppwd\r\n");//default login password


            void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {

                    string message = port.ReadExisting();
                    System.Diagnostics.Debug.WriteLine(message);


            }

例如,port.WriteLine("debian\r\n") 似乎可以正常工作,但紧接着 port.WriteLine("temppwd\r\n") 似乎无法正常工作。我期待在调试控制台中看到 debian@beaglebone:~$: 打印出来,但在 port.WriteLine("debian\r\n") 之后,所有打印出来的都是空白 space。这是因为我需要等待第一个命令在第二个命令之前执行吗?据我所知,我认为 SerialDataReceivedEventHandler 解决了这个问题。谢谢,任何帮助将不胜感激。

编辑:澄清一下,我能够建立与 SBC 的连接,因为在调试控制台中打印了登录时的默认文本。

命令之间的简单休眠效果很好,可能足以满足您的用例:

    port.WriteLine("debian\r\n"); 
    Thread.Sleep(500);
    port.WriteLine("temppwd\r\n"); 
    Thread.Sleep(500);
    port.WriteLine("ls /\r\n"); 

更好的解决方案是解析接收到的数据。请注意,您从串行端口事件中获取的 "message" 字符串

  • 可能不包含整行
  • 可能包含多行
  • 可能永远不会以 CR/LF 结尾(如果是提示的话)
  • 可能包含终端控制字符