18363890557 发表于 2020-10-27 23:29:26

6.01-综合实战篇-C#上位机串口通信控制ESP8266(RTOS 2.2.0)






实现的功能1.C#串口上位机通过串口控制继电器


控制继电器吸合   



控制继电器断开   







说明1,请用户先学习这一节https://www.cnblogs.com/yangfengwu/p/12382103.html   编写C#串口调试助手

2.控制继电器引脚





协议规定
上位机串口发送给ESP8266控制继电器吸合指令:0xaa0x550x01 0x01ESP8266执行以后回复:0x550xaa0x01 0x01

上位机串口发送给ESP8266控制继电器断开指令:0xaa0x550x01 0x00ESP8266执行以后回复:0x550xaa0x01 0x00


ESP8266程序编写1.处理程序在这节的基础上添加https://www.cnblogs.com/yangfengwu/p/12375342.html

2.配置GPIO5为普通引脚



    /*设置GPIO5为普通引脚*/

    PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO5_U , FUNC_GPIO5);


3.定义用于返回继电器状态的数组

/*用于返回继电器的状态*/
u8 RelayOn={0x55,0xaa,0x01,0x01};//继电器吸合
u8 RelayOff={0x55,0xaa,0x01,0x00};//继电器断开


4.编写处理程序



if(Usart0ReadBuff == 0xaa && Usart0ReadBuff == 0x55){
                if(Usart0ReadBuff == 0x01){
                  if(Usart0ReadBuff == 0x01){
                        GPIO_OUTPUT_SET(5, 1);//设置GPIO5输出高电平
                        for(i=0;i<4;i++){
                            uart_tx_one_char(UART0,RelayOn);//返回吸合指令
                        }
                  }
                  else if(Usart0ReadBuff == 0x00){
                        GPIO_OUTPUT_SET(5, 0);//设置GPIO5输出低电平
                        for(i=0;i<4;i++){
                            uart_tx_one_char(UART0,RelayOff);//返回断开指令
                        }
                  }
                }
            }


5.先用串口调试助手测试

控制继电器吸合
aa5501 01







控制继电器断开aa5501 00







C#上位机程序编写1.上位机只保留了这一节https://www.cnblogs.com/yangfengwu/p/12382103.html
操作串口部分



详细保留的程序说明:1.串口显示初始化






2.打开关闭串口



3.串口热插拔检测



4.串口接收
开始编写1.页面两个Label 一个按键




2.双击 吸合按钮 生成按钮点击事件并在点击事件中编写以下程序

byte[] SendData = new byte;
            SendData = 0xaa;
            SendData = 0x55;
            SendData = 0x01;
            SendData = 0x01;
            if (button2.Text == "吸合")
            {
                SendData = 0x01;
            }
            else if (button2.Text == "断开")
            {
                SendData = 0x00;
            }
            try
            {
                serialPort1.Write(SendData, 0, SendData.Length);
            }
            catch (Exception) { }



3.编写串口接收处理程序处理思路: https://www.cnblogs.com/yangfengwu/p/11669373.html

3.1.拖拽上来一个定时器



3.2配置定时器Enable改为True(使能定时器)Interval 设置为1(1Ms进一次)







3.3 选择事件 -> 双击Tick 让程序生成定时器回调函数








3.4 定义用于处理串口数据的变量


      byte[] UsartReadBuff = new byte;//接收数据缓存
      int UsartReadCnt = 0;//串口接收的数据个数
      int UsartReadCntCopy = 0;//用于拷贝串口接收的数据个数
      int UsartIdleCnt = 0;//空闲时间累加变量


3.5 串口中断函数中处理程序如下

int len = serialPort1.BytesToRead;//获取可以读取的字节数
            if ((UsartReadCnt + len) < 1024)//待接收的数据不得超出数组大小
            {
                //把数据读取到UsartReadBuff数组,每次接收数据偏移UsartReadCnt
                serialPort1.Read(UsartReadBuff, UsartReadCnt, len);
                UsartReadCnt = UsartReadCnt + len;
            }
            else
            {
                UsartReadCnt = 0;
            }


3.6 定时器中断函数程序如下


if (UsartReadCnt!=0)//串口接收到数据
            {
                UsartIdleCnt++;//空闲变量累加
                if (UsartIdleCnt > 10)//串口超过10ms没有接收数据
                {
                  UsartIdleCnt = 0;
                  UsartReadCntCopy = UsartReadCnt;
                  UsartReadCnt = 0;

                  if (UsartReadBuff == 0x55 && UsartReadBuff == 0xaa)
                  {
                        if (UsartReadBuff == 0x01)
                        {
                            if (UsartReadBuff == 0x01)//继电器吸合
                            {
                              Invoke((new Action(() => {//C# 3.0以后代替委托的新方法
                                    label8.Text = "吸合";
                                    button2.Text = "断开";
                              })));
                            }
                            else if (UsartReadBuff == 0x00)//继电器断开
                            {
                              label8.Text = "断开";
                              button2.Text = "吸合";
                            }
                        }
                  }
                }
            }

启动测试1.控制继电器吸合   








2.控制继电器断开   






页: [1]
查看完整版本: 6.01-综合实战篇-C#上位机串口通信控制ESP8266(RTOS 2.2.0)