【Unity3D软硬件】Unity3d与串口通信程序的开发

推荐阅读

大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。

一、前言

记得以前写了一篇Unity3D与串口通信程序的开发的文章,主要讲的是如何用Unity3D程序给串口发送数据,具体可以查看这篇文章https://blog.csdn.net/q764424567/article/details/78710739
但是最近有小伙伴问我如何接收串口程序,今天就再分享一下比较完整的Unity开发的串口通信程序吧,包括发送与接收数据,绑定串口号等。

二、文章链接

Unity3d 与串口的通信程序的开发,软件硬件结合
【Unity3D日常】Unity3d与串口通信程序的开发

三、正文

1、先做一个UI界面吧
在这里插入图片描述
在这里插入图片描述
做的比较简单,就不多数哦了

2、代码

using UnityEngine;
using System.IO.Ports;
using System.Text;
using UnityEngine.UI;

public class SerialPortTest : MonoBehaviour
{
    private SerialPort sp = new SerialPort();
    public Text m_TextSendDataPar;
    public Text m_TextShowData;

    // Use this for initialization
    void Start()
    {
        //打开串口
        Init("COM1", 9600, Parity.None, 8, StopBits.None);
    }

    //发送数据按钮
    public void Btn_SendData()
    {
        Data_Send(m_TextSendDataPar.ToString());
    }

    //初始化串口类
    public void Init(string _portName,int _baudRate,Parity _parity,int dataBits,StopBits _stopbits)
    {
        sp = new SerialPort(_portName, _baudRate, _parity, dataBits, _stopbits);//绑定端口
        sp.DataReceived += new SerialDataReceivedEventHandler(Data_Received);//订阅委托
    }

    //接收数据
    private void Data_Received(object sender, SerialDataReceivedEventArgs e)
    {
        byte[] ReDatas = new byte[sp.BytesToRead];
        sp.Read(ReDatas, 0, ReDatas.Length);//读取数据
        this.Data_Show(ReDatas);//显示数据
    }

    /// <summary>
    /// 显示数据
    /// </summary>
    /// <param name="data">字节数组</param>
    public void Data_Show(byte[] data)
    {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < data.Length; i++)
        {
            sb.AppendFormat("{0:x2}" + "", data[i]);
        }
        Debug.Log(sb.ToString());
        m_TextShowData.text = sb.ToString();
    }

    //发送数据
    public void Data_Send(string _parameter)
    {
        sp.Open();
        sp.WriteLine(_parameter);
        sp.Close();
    }
}

3、绑定参数
在这里插入图片描述
在这里插入图片描述
4、找不到命名空间的问题

在unity 引用System.IO.Ports 却发现引用不到 查了一下才看到 要在[Edit->Project Settings->Player]下,修改[Other Settings]下的[Optimization]的[API Compatibility Level]为[.NET 2.0](默认为[.NET 2.0 Subset]。才能找到
*PS:感谢单曲循环小盆友的提醒
在这里插入图片描述

OK了。。。小伙们可以试试了
对啦,那个数据只是接收,然后显示了,具体要怎么解析,获取端口号啥的就让小伙伴们自己来吧。。

  • 3
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
串口通信是一种常见的设备与计算机之间的通信方式,很多应用场景中需要用到串口通信。而基于Unity3D串口通信程序,可以实现对串口数据进行发送和接收的操作。 首先,需要使用C#语言和Unity3D自带的SerialPort类实现串口通信。在程序中,可以通过设置串口号、波特率、数据位、停止位等参数来打开相应的串口。然后,利用串口的Write和Read方法实现数据的发送和接收。 对于发送数据,可以先将数据转换成字节数组,然后通过SerialPort类的Write方法发送数据。例如,可以通过以下代码实现发送字符串数据: ``` SerialPort serialPort = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One); serialPort.Open(); string sendData = "hello world"; byte[] sendBytes = Encoding.ASCII.GetBytes(sendData); serialPort.Write(sendBytes, 0, sendBytes.Length); ``` 对于接收数据,可以使用SerialPort类的DataReceived事件,在数据到达时触发相应的操作。例如,可以通过以下代码实现接收串口数据并输出: ``` SerialPort serialPort = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One); serialPort.DataReceived += SerialPort_DataReceived; serialPort.Open(); private static void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e) { SerialPort serialPort = (SerialPort)sender; byte[] buffer = new byte[serialPort.BytesToRead]; serialPort.Read(buffer, 0, buffer.Length); string receiveData = Encoding.ASCII.GetString(buffer); Debug.Log(receiveData); } ``` 以上代码可以实现发送和接收串口数据的基本功能。但是需要注意的是,串口通信中需要考虑到数据的格式和协议,以及错误处理等问题,才能实现更加稳定和可靠的通信。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

恬静的小魔龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值