极客秀
搜索

基于C#的软件大杂烩(1.5)——具有收发-可视化-图片传输-数据处理的串口助手加上转TCP功能

嗨嗨嗨,好久没更新这个系列了哇。实在不是博主太懒,实是事情太多啦。
本期我们在之前串口工具的基础上增加一些串口转TCP的功能,旨在为了服务我们前几期出的手机APP,这样子我们的单片机可以不需要单片机通过电脑投射到手机APP上显示。

在此之前,我们回顾一下我们串口都有了哪些功能,说来也奇怪,本来是就是自己想DIY一个串口通讯工具,之后功能叠加的越来越多越来越多。包括: **
普通串口工具 **

他具有

  • 最基本的串口接收和发送功能
  • 为接收时间添加时间戳的功能
  • 将收到的数据以十六进制的方法显示
  • 优先列出包含CH340的串口工具

当然还有很多的功能没有实现,这点在以后的岁月里慢慢的跟进。 ** 串口示波器 **

除了基本的串口通讯之外,他还具有串口示波器的功能,可以解析特定格式的串口数据,将串口数据可视化。
除此之外后期还为其添加了数据分析、傅里叶分析等功能,为我的嵌入式数据处理提供了非常多的方便。 图片传输

为了使电脑的图片能通过串口传输到单片机中服务于其RGB屏幕,开发了图片传输功能,可以将图片转换为RGB数据通过串口发送,不过效率较低,使用的情况很少。
** 串口转TCP工具 **

这段代码与TCP服务器的代码具有相似性,主要任务是在启动传输后以异步方式发送串口内容。这意味着它可能涉及到类似的事件监听、数据处理和异步通信等方面。在实现上,会包括串口的初始化设置、数据读取和发送处理等步骤。
首先,代码初始化串口,设置其参数如波特率、数据位、停止位和校验位等。然后,通过异步方式监听串口事件,如数据到达事件或发送完成事件。当串口接收到数据时,通过异步回调函数处理数据,会对数据进行解析、处理或封装。接着,将处理后的数据以异步方式发送出去,需要进行数据打包和发送缓冲区管理以确保数据的及时和有效传输。
在整个过程中,需要注意串口通信的稳定性和可靠性,需要实现重连机制或错误处理机制以应对异常情况。此外,为了提高性能和效率,会采用多线程或异步IO等技术来实现并发处理和高效数据传输。最终,通过这种方式实现了串口数据的异步传输,为系统的稳定运行和数据通信提供了可靠支持。
使用方法和TCP服务器类似。


if(TCPBool){    int port = int.Parse(PortChooseTran.Text);    IPAddress TransAddress = IPAddress.Parse(AddressText.Text.ToString());    if (TransAddress == null)    {        MessageBox.Show("错误:无可用地址");        return;    }    //使用TCP发送数据    TranText += data;    //异步    Task.Run(() =>    {        //最后一位是'A'        try        {            if (TranText[TranText.Length - 1] == 'A')            {                //去掉最后一位                TranText = TranText.Substring(0, TranText.Length - 1);                //发送数据                using (TcpClient tcpClient = new TcpClient())                {                    tcpClient.Connect(TransAddress, port);  
                    using (NetworkStream networkStream = tcpClient.GetStream())                    {                        // 将字符串转换为字节数组                        byte[] data = Encoding.UTF8.GetBytes(TranText);                        // 发送数据                        try                        {                            networkStream.Write(data, 0, data.Length);                        }                        catch                        {  
                        }  
                    }                }                TranText = "";            }        }        catch (Exception ex)        {            //MessageBox.Show("TCP发送失败:" + ex.Message);        }    });        }

这个软件一晃已经做了半年了,虽然后面的大半年来少了对它的关注,不过作为一名非计算机科班的小菜鸡来说,做出这样子能满足我日常功能使用的APP已经感到满足了。
后续朋友们如果有什么意见和功能的也欢迎大家在评论区留言。 后面我也会总结前面的教训,用很多的时间,将其内容抽象化,封装起来,争取让其有质的变化。
封装化好之后,就可以把各个助手放到一起,这样子就可以实现,我们需要什么功能就可以开启对应的一个功能,也可以让他们绑定在一起。例如串口转TCP,串口转MQTT等,当然这个对我来说技术难度还非常的大。

1.转载请保留原文链接谢谢!
2.本站所有资源文章出自互联网收集整理,本站不参与制作,如果侵犯了您的合法权益,请联系本站我们会及时删除。
3.本站发布资源来源于互联网,可能存在水印或者引流等信息,请用户擦亮眼睛自行鉴别,做一个有主见和判断力的用户。
4.本站资源仅供研究、学习交流之用,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担。
5.联系方式(#替换成@):pm#vimge.com

  相关内容