当你需要ChatAI服务但无法魔法或没有海外手机号码时,Chat8就是你的解决方案。我们基于OpenAi开发,所有用户内容都会加密,欢迎使用!点击使用:
https://chat.chat826.com/#/register?bronk_on=375671
使用 System.IO.Ports 命名空间中的 SerialPort 类可以很容易地在 .NET Core 中进行串口通信。以下是一个示例,演示如何使用 SerialPort 打开串口、发送数据和关闭串口:
1,nuget 引入 System.IO.Ports
2,代码示例
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.IO.Ports;
using System.Reflection.PortableExecutable;
namespace jWebTest.Service
{
/// <summary>
/// 发送云台串口
/// </summary>
public class ColudConsul
{
const int baudRate = 9600; // 波特率
const Parity parity = Parity.None; // 校验位
const int dataBits = 8; // 数据位
const StopBits stopBits = StopBits.One; // 停止位
private static SerialPort serialPort = new SerialPort();
private static List<byte> buffer = new List<byte>();
private const string UP = "02 00 55 00 01 05 00 01 00 09";
private const string Bottom = "02 00 55 00 01 05 00 02 00 09";
private const string LEFT = "02 00 55 00 01 05 01 00 09 00";
private const string RIGHT = "02 00 55 00 01 05 02 00 09 00";
/// <summary>
/// 发送串口命令
/// </summary>
/// <param name="selectedPortName"></param>
/// <param name="dataToSend"></param>
private static void SendMessage(string selectedPortName, string dataToSend)
{
if (!serialPort.IsOpen)
{
serialPort.PortName = selectedPortName;
serialPort.BaudRate = baudRate; // 设置波特率
serialPort.Parity = parity; // 设置校验位
serialPort.DataBits = dataBits; // 设置数据位
serialPort.StopBits = stopBits; // 设置停止位
//serialPort.DataReceived += SerialPort_DataReceived;
serialPort.Open(); // 打开串口
}
string[] hexValues = dataToSend.Split(' '); // 分割字符串并移除空格
byte[] byteArray = new byte[hexValues.Length];
for (int i = 0; i < hexValues.Length; i++)
{
byteArray[i] = Convert.ToByte(hexValues[i], 16); // 将每个十六进制字符串转换为字节
}
// 向串口发送数据
serialPort.Write(byteArray, 0, byteArray.Length);
//serialPort.Close(); // 关闭串口
Console.WriteLine($"已发送数据到串口 {selectedPortName}: {dataToSend}");
}
public static void CommandUp(string portName)
{
SendMessage(portName, UP);
}
public static void CommandBottom(string portName)
{
SendMessage(portName, Bottom);
}
public static void CommandLEFT(string portName)
{
SendMessage(portName, LEFT);
}
public static void CommandRIGHT(string portName)
{
SendMessage(portName, RIGHT);
}
/// <summary>
/// 搜索串口号
/// </summary>
/// <returns></returns>
public static string[] CommandSearchPortName()
{
string[] portNames = SerialPort.GetPortNames();
return portNames;
}
/// <summary>
/// 接受串口命令
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private static void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
//SerialPortStream port = (SerialPortStream)sender;
//int bytesToRead = port.BytesToRead;
//byte[] readBuffer = new byte[bytesToRead];
//port.Read(readBuffer, 0, bytesToRead);
//buffer.AddRange(readBuffer);
//ProcessData();
}
private static void ProcessData()
{
int messageStartIndex = buffer.IndexOf(0x01);
int messageEndIndex = buffer.IndexOf(0x04);
while (messageStartIndex >= 0 && messageEndIndex >= 0 && messageEndIndex > messageStartIndex)
{
byte[] message = buffer.GetRange(messageStartIndex, messageEndIndex - messageStartIndex + 1).ToArray();
buffer.RemoveRange(0, messageEndIndex + 1);
// 处理消息
messageStartIndex = buffer.IndexOf(0x01);
messageEndIndex = buffer.IndexOf(0x04);
}
}
}
}