.net core 发送串口数据

文章介绍了如何在.NETCore中利用System.IO.Ports命名空间的SerialPort类进行串口通信,提供了发送云台控制命令的示例,包括波特率、校验位等配置。
摘要由CSDN通过智能技术生成

当你需要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);
            }

        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值