已经很久没有更新博客了,因为工作忙的原因,也因为自己忙了一些其他的事情…不说了,这篇博客简单介绍一下串口通信的用法,简单,但是用处很大,可以使用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();
}
}
4.在场景中添加一个按钮,将PortManager里的SendString方法拖到此按钮中。
5.打开串口助手,进行如下设置,并且打开串口。
6.在串口助手的发送缓冲区输入a,点击发送数据按钮。
7.Unity已经打印出了数据,说明已经接收到了串口助手发来的数据。
8.点击Unity场景里的按钮。
9.串口数据已经得到了数据,如图所示。
10.小结:这个是最简单的串口调用Demo,基本写出了串口通信的基本方法,可以在此基础上写更加复杂的逻辑。