上一篇刚更新完玩耍TCP,下面就有朋友咨询能不能玩一下串口;既然有这需求,咱就花费点时间一下,毕竟一直都是喜欢新鲜的东西,那就折腾白;笔记本没有串口,咱就虚拟二个串口:
2、虚拟机下Ubuntu配置串口:
3、环境完事,获取本地所有的串口:
private void GetAllSerialPorts()
{
string[] portNames = SerialPort.GetPortNames();
if(portNames.Length == 0)
{
AllLogs.Add("没有找到串口");
}
else
{
AllLogs.Add("获取所有的串口成功");
foreach(string portName in portNames)
{
Ports.Add(portName);
}
}
}
4、根据串口的名称去打开串口:
private void OpenPort(string portName)
{
serialPort = new SerialPort(portName, 9600);
serialPort.Encoding = Encoding.UTF8;
// 注册数据接收事件
serialPort.DataReceived += SerialPortDataReceived;
if(!serialPort.IsOpen)
{
try
{
serialPort.Open();
AllLogs.Add("串口打开成功");
}
catch(Exception ex)
{
AllLogs.Add($ "串口打开失败{ex.Message}");
}
}
}
5、接收数据的处理:
if(e.EventType == SerialData.Chars)
{
// 接收到字符数据
byte[] receivedBytes = new byte[serialPort.BytesToRead];
serialPort.Read(receivedBytes, 0, receivedBytes.Length);
string receivedData = Encoding.UTF8.GetString(receivedBytes);
// 处理接收到的字符数据
MessageModel model = new MessageModel()
{
MessageType = MessageTypeEnum.Receive,
Message = receivedData
};
AllMessage.Add(model);
}
6、发送数据:
public void SendData(string data)
{
if(serialPort.IsOpen)
{
byte[] encodedBytes = Encoding.UTF8.GetBytes(data);
serialPort.Write(encodedBytes, 0, encodedBytes.Length);
SendMessage = null;
MessageModel model = new MessageModel()
{
MessageType = MessageTypeEnum.Send,
Message = data
};
AllMessage.Add(model);
}
}
7、最终验证成功后的效果:
最终简单的效果先这样吧;以后有时间的话,可以再去摸索一下更复杂的效果
;编程不息、Bug不止、无Bug、无生活
;改bug的冷静、编码的激情、完成后的喜悦、挖坑的激动 、填坑的兴奋;这也许就是屌丝程序员的乐趣吧;今天就到这里吧;希望自己有动力一步一步坚持下去;生命不息,代码不止;大家抽空可以看看今天分享的效果,有好的意见和想法,可以在留言板随意留言;我看到后会第一时间回复大家,多谢大家的一直默默的关注和支持!如果觉得不错,那就伸出您的小手点个赞并关注一下!