三 【单片机入门】应用层软件开发的单片机学习之路-----UART串口通讯和c#交互( 二 )


在所有的Serial都是及程序Arduino的一个Stream的一个基础类,这个类提供了一些我们对数据处理的一个方法,所以在下面的代码中,我们将读取的数据转为字符串,然后将代码延迟暂停了一秒,随后,我们使用我们的串口对象,将接收到的数据写入缓冲区,缓冲区会把我们写入的数据,在发送出去,即将println里面传入的参数发送到我们的串口发送方,谁发的数据,谁就会收到"i am receive!!"+str 。
#include <HardwareSerial.h>HardwareSerial MySerial1(1);void setup() {// put your setup code here, to run once:MySerial1.begin(9600,SERIAL_8N1,16,17);MySerial1.onReceive(receiveEvent);Serial.begin(9600);}void loop() {}void receiveEvent(){if(MySerial1.available()){String str= MySerial1.readString();delay(1000);MySerial1.println("i am receive!!"+str);}delay(1000);}            Stream包括了以下方法,其中继承Stream的分别为串口,IIC通讯的Wire,SD卡的一个类,以及用于网络连接的Ethernet类,都可以使用这些方法用来对数据进行操作 。

三 【单片机入门】应用层软件开发的单片机学习之路-----UART串口通讯和c#交互

文章插图
c#编码C#方面的代码则简单很多,界面一个开启串口的按钮,一个发送数据的按钮和文本框,以及用来接收数据显示的文本框 。
在代码中我们开启了串口,指定了打开的是哪一个串口,一些属性是需要和ESP32那边设置一样的,在上面我们设置波特率为9600,数据为是8,停止位是1,校验位是NONE,所以在c#这边我们也需要这样设置,不过校验位默认是NONE的,所以此处我们没有设置,然后开启串口,注册了一个接收到数据的一个回调,然后定义一个1024的字节数组,从串口读取数据,返回读取的数据长度,然后在对刚才定义的1024字节数组进行截取,然后通过UTF-8的格式转为字符串,然后显示到界面上的富文本框中,在发送按钮事件中,我们从输入框读取数据转为字节数组,然后将数据写入到串口中去即可 。
三 【单片机入门】应用层软件开发的单片机学习之路-----UART串口通讯和c#交互

文章插图
      public partial class Form1 : Form{private SerialPort serialPort = new SerialPort("COM6");public Form1(){InitializeComponent();}private async void button1_Click(object sender, EventArgs e){serialPort.BaudRate = 9600;serialPort.StopBits = StopBits.One;serialPort.DataBits = 8;serialPort.Open();serialPort.DataReceived += (a, b) => {var serial = a as SerialPort;var data = https://www.huyubaike.com/biancheng/new byte[1024];var res=serial.Read(data,0, data.Length);data = data[..res];string st = Encoding.UTF8.GetString(data);BeginInvoke(() => { richTextBox1.Text += st; });};}private void button2_Click(object sender, EventArgs e){var str = Encoding.UTF8.GetBytes(textBox1.Text);serialPort.Write(str, 0, str.Length);}} 接线图在此处的实例,我们需要准备一个USB转TTL的模块,四根母对母的杜邦线,在程序烧录之后,我们需要将使用杜邦线让USB转TTL模块和单片机进行连接,VCC或者5V接单片机的5V引脚,USB转TTL的GND和单片机的GND相接,然后USB转TTL的rxd引脚和单片机17引脚相接,txd引脚和单片机的16引脚相接,如下图所示接线,5v不可和gnd接反,否则可能会烧坏模块,确认接线无误后,将USB转TTL模块插入电脑中,然后代码中运行c#程序,电机开启串口,随后发送数据,可以接收到单片机的反馈 。
三 【单片机入门】应用层软件开发的单片机学习之路-----UART串口通讯和c#交互

文章插图

三 【单片机入门】应用层软件开发的单片机学习之路-----UART串口通讯和c#交互

文章插图

三 【单片机入门】应用层软件开发的单片机学习之路-----UART串口通讯和c#交互

文章插图

三 【单片机入门】应用层软件开发的单片机学习之路-----UART串口通讯和c#交互

经验总结扩展阅读