当前位置:   article > 正文

Unity串口通信的简单使用教程_unity 串口

unity 串口

已经很久没有更新博客了,因为工作忙的原因,也因为自己忙了一些其他的事情…不说了,这篇博客简单介绍一下串口通信的用法,简单,但是用处很大,可以使用Unity和一些硬件进行交互,言归正传,开始。
1.新建工程,打开Player Setting,将Configuration中的Api Compatibility level设置为.Net2.0,貌似.Net Subset不包含串口通信的功能,具体需查下Unity api。图一2.新建一个空物体,并且创建一个PortManager脚本,将此脚本挂在空物体上。
在这里插入图片描述3.打开PortManager,输入以下代码。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO.Ports;
using System;

public class PortManager : MonoBehaviour
{
	string getPortName;
	int baudRate = 9600;
	private Parity parity = Parity.None;
	private int dataBits = 8;
	private StopBits stopBits = StopBits.One;
	SerialPort sp = null;
	private string _data;
	private string testString;
	// Use this for initialization
	void Start ()
	{
		getPortName = "COM3";
		testString = "b";
		OpenPort(getPortName);
		StartCoroutine(DataReceiveFunction());
	}

	/// <summary>
	/// 串口信号控制
	/// </summary>
	private void PortSignalControl()
	{
		if (_data == System.Text.Encoding.ASCII.GetBytes(testString)[0].ToString())
		{
			Debug.Log("收到串口信号" + testString);
		}
	
	}
	//打开串口
	public void OpenPort(string DefaultPortName)
	{
		sp = new SerialPort(DefaultPortName, baudRate, parity, dataBits, stopBits);
		sp.ReadTimeout = 10;
		try
		{
			if (!sp.IsOpen)
			{
				sp.Open();
			}
		}
		catch (Exception ex)
		{
			Debug.Log(ex.Message);
		}
	}
	//关闭串口
	public void ClosePort()
	{
		try
		{
			sp.Close();
		}
		catch (Exception ex)
		{
			Debug.Log(ex.Message);
		}
	}
	IEnumerator DataReceiveFunction()
	{
		byte[] dataBytes = new byte[128];//存储长度
		int bytesToRead = 0;//记录获取的数据长度

		while (true)
		{
			if (sp != null && sp.IsOpen)
			{
				try
				{
					//通过read函数获取串口数据
					bytesToRead = sp.Read(dataBytes, 0, dataBytes.Length);
					_data = dataBytes[0].ToString();
					print(_data);
					PortSignalControl();
					//串口数据已经被存入dataBytes中
				}
				catch (Exception ex)
				{

				}
			}
			yield return new WaitForSeconds(Time.deltaTime);
		}
	}
	//发送一个字节
	public void SendSerialPortData(string data)
	{
	    if (sp.IsOpen)
	    {
	        sp.WriteLine(data);
	    }
	}
	/// <summary>
	/// 发送一个字符串
	/// </summary>
	public void SendString()
	{
		SendSerialPortData("a");
	}
	private void OnApplicationQuit()
	{
		ClosePort();
	}
	private void OnDisable()
	{
		ClosePort();
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115

4.在场景中添加一个按钮,将PortManager里的SendString方法拖到此按钮中。
在这里插入图片描述5.打开串口助手,进行如下设置,并且打开串口。
在这里插入图片描述6.在串口助手的发送缓冲区输入a,点击发送数据按钮。
在这里插入图片描述7.Unity已经打印出了数据,说明已经接收到了串口助手发来的数据。
在这里插入图片描述8.点击Unity场景里的按钮。
在这里插入图片描述9.串口数据已经得到了数据,如图所示。
在这里插入图片描述
10.小结:这个是最简单的串口调用Demo,基本写出了串口通信的基本方法,可以在此基础上写更加复杂的逻辑。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号