嗨嗨嗨,好久没更新这个系列了哇。实在不是博主太懒,实是事情太多啦。
本期我们在之前串口工具的基础上增加一些串口转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等,当然这个对我来说技术难度还非常的大。