Как Вы читаете последовательный порт с Windows 10 core


Используя python на Raspberry PI, я использую аналогичный код для чтения данных из последовательного порта:

baud = 9600                 # baud rate
port = '/dev/ttyACM0'       # serial URF port on this computer

ser = serial.Serial(port, baud)
ser.timeout = 0 
var message = ser.read(9);
По существу, я просто хочу иметь возможность считывать сообщение с последовательного порта и выполнять действие, основанное на этом сообщении.

Как это может быть достигнуто с помощью Windows 10 Core и c#, может ли кто-нибудь указать мне правильное направление или предоставить пример кода?

Заранее благодарю за любую полученную помощь.

3 6

3 ответа:

Оказывается, что последовательный порт на PI еще не поддерживается, что очень расстраивает: https://www.raspberrypi.org/forums/viewtopic.php?t=109047&p=751638

Вот поддерживаемый Способ:

serialPort = await SerialDevice.FromIdAsync(comPortId);

serialPort.WriteTimeout = TimeSpan.FromMilliseconds(1000); 

serialPort.ReadTimeout = TimeSpan.FromMilliseconds(1000); 

serialPort.BaudRate = 115200;

serialPort.Parity = SerialParity.None; 

serialPort.StopBits = SerialStopBitCount.One; 

serialPort.DataBits = 7; 

serialPort.Handshake = SerialHandshake.None; 

serialPort.IsRequestToSendEnabled = true; 

dataReaderObject = new DataReader(serialPort.InputStream);

  // Set InputStreamOptions to complete the asynchronous read operation when one or more bytes is available
dataReaderObject.InputStreamOptions = InputStreamOptions.Partial;
 // Create a task object to wait for data on the serialPort.InputStream
loadAsyncTask = dataReaderObject.LoadAsync(ReadBufferLength).AsTask(cancellationToken);

// Launch the task and wait
            UInt32 bytesRead = await loadAsyncTask;
            if (bytesRead > 0)
            {
                try
                {
                    var msg = dataReaderObject.ReadString(bytesRead);
                }
                catch (Exception ex ) {
                }
}            

Он поддерживается начиная с Windows 10 IoT Core версии 10.0.10586.0. Смотрите: https://ms-iot.github.io/content/en-US/win10/samples/SerialSample.htm

Просто, используйте класс SerialPort

using System.IO.Ports;

    SerialPort port = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
    port.Open();
    byte b = port.ReadByte(); // etc