天天看點

ESP8266 SDK開發: 綜合篇-C#上位機序列槽通信控制ESP8266

實作的功能

1.C#序列槽上位機通過序列槽控制繼電器

控制繼電器吸合

ESP8266 SDK開發: 綜合篇-C#上位機序列槽通信控制ESP8266
ESP8266 SDK開發: 綜合篇-C#上位機序列槽通信控制ESP8266
ESP8266 SDK開發: 綜合篇-C#上位機序列槽通信控制ESP8266

控制繼電器斷開

ESP8266 SDK開發: 綜合篇-C#上位機序列槽通信控制ESP8266
ESP8266 SDK開發: 綜合篇-C#上位機序列槽通信控制ESP8266
ESP8266 SDK開發: 綜合篇-C#上位機序列槽通信控制ESP8266

說明

1,請使用者先學習這一節

https://www.cnblogs.com/yangfengwu/p/12382103.html   編寫C#序列槽調試助手

2.控制繼電器引腳

ESP8266 SDK開發: 綜合篇-C#上位機序列槽通信控制ESP8266

協定規定

上位機序列槽發送給ESP8266控制繼電器吸合指令:

0xaa  0x55  0x01 0x01

ESP8266執行以後回複:

0x55  0xaa  0x01 0x01

上位機序列槽發送給ESP8266控制繼電器斷開指令:

0xaa  0x55  0x01 0x00

ESP8266執行以後回複:

0x55  0xaa  0x01 0x00

ESP8266程式編寫

1.處理程式在這節的基礎上添加

https://www.cnblogs.com/yangfengwu/p/12375342.html

2.配置GPIO5為普通引腳

ESP8266 SDK開發: 綜合篇-C#上位機序列槽通信控制ESP8266
/*設定GPIO5為普通引腳*/
    PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO5_U , FUNC_GPIO5);           

複制

3.定義用于傳回繼電器狀态的數組

ESP8266 SDK開發: 綜合篇-C#上位機序列槽通信控制ESP8266
/*用于傳回繼電器的狀态*/
u8 RelayOn[4]={0x55,0xaa,0x01,0x01};//繼電器吸合
u8 RelayOff[4]={0x55,0xaa,0x01,0x00};//繼電器斷開           

複制

4.編寫處理程式

ESP8266 SDK開發: 綜合篇-C#上位機序列槽通信控制ESP8266
if(Usart0ReadBuff[0] == 0xaa && Usart0ReadBuff[1] == 0x55){
                if(Usart0ReadBuff[2] == 0x01){
                    if(Usart0ReadBuff[3] == 0x01){
                        GPIO_OUTPUT_SET(5, 1);//設定GPIO5輸出高電平
                        for(i=0;i<4;i++){
                            uart_tx_one_char(UART0,RelayOn[i]);//傳回吸合指令
                        }
                    }
                    else if(Usart0ReadBuff[3] == 0x00){
                        GPIO_OUTPUT_SET(5, 0);//設定GPIO5輸出低電平
                        for(i=0;i<4;i++){
                            uart_tx_one_char(UART0,RelayOff[i]);//傳回斷開指令
                        }
                    }
                }
            }           

複制

5.先用序列槽調試助手測試

ESP8266 SDK開發: 綜合篇-C#上位機序列槽通信控制ESP8266

控制繼電器吸合

aa  55  01 01

ESP8266 SDK開發: 綜合篇-C#上位機序列槽通信控制ESP8266
ESP8266 SDK開發: 綜合篇-C#上位機序列槽通信控制ESP8266

控制繼電器斷開

aa  55  01 00

ESP8266 SDK開發: 綜合篇-C#上位機序列槽通信控制ESP8266
ESP8266 SDK開發: 綜合篇-C#上位機序列槽通信控制ESP8266

C#上位機程式編寫

1.上位機隻保留了這一節

https://www.cnblogs.com/yangfengwu/p/12382103.html

操作序列槽部分

ESP8266 SDK開發: 綜合篇-C#上位機序列槽通信控制ESP8266

詳細保留的程式說明:

1.序列槽顯示初始化

ESP8266 SDK開發: 綜合篇-C#上位機序列槽通信控制ESP8266

2.打開關閉序列槽

ESP8266 SDK開發: 綜合篇-C#上位機序列槽通信控制ESP8266

3.序列槽熱插拔檢測

ESP8266 SDK開發: 綜合篇-C#上位機序列槽通信控制ESP8266

4.序列槽接收

ESP8266 SDK開發: 綜合篇-C#上位機序列槽通信控制ESP8266

開始編寫

1.頁面

兩個Label 

一個按鍵

ESP8266 SDK開發: 綜合篇-C#上位機序列槽通信控制ESP8266

2.輕按兩下 吸合按鈕 生成按鈕點選事件

并在點選事件中編寫以下程式

ESP8266 SDK開發: 綜合篇-C#上位機序列槽通信控制ESP8266
byte[] SendData = new byte[4];
            SendData[0] = 0xaa;
            SendData[1] = 0x55;
            SendData[2] = 0x01;
            SendData[3] = 0x01;
            if (button2.Text == "吸合")
            {
                SendData[3] = 0x01;
            }
            else if (button2.Text == "斷開")
            {
                SendData[3] = 0x00;
            }
            try
            {
                serialPort1.Write(SendData, 0, SendData.Length);
            }
            catch (Exception) { }           

複制

3.編寫序列槽接收處理程式

處理思路: https://www.cnblogs.com/yangfengwu/p/11669373.html

3.1.拖拽上來一個定時器

ESP8266 SDK開發: 綜合篇-C#上位機序列槽通信控制ESP8266

3.2配置定時器

Enable改為True  (使能定時器)

Interval 設定為1  (1Ms進一次)

ESP8266 SDK開發: 綜合篇-C#上位機序列槽通信控制ESP8266

3.3 

選擇事件 -> 輕按兩下Tick 

讓程式生成定時器回調函數

ESP8266 SDK開發: 綜合篇-C#上位機序列槽通信控制ESP8266
ESP8266 SDK開發: 綜合篇-C#上位機序列槽通信控制ESP8266

3.4 定義用于處理序列槽資料的變量

ESP8266 SDK開發: 綜合篇-C#上位機序列槽通信控制ESP8266
byte[] UsartReadBuff = new byte[1024];//接收資料緩存
        int UsartReadCnt = 0;//序列槽接收的資料個數
        int UsartReadCntCopy = 0;//用于拷貝序列槽接收的資料個數
        int UsartIdleCnt = 0;//空閑時間累加變量           

複制

3.5 序列槽中斷函數中處理程式如下

ESP8266 SDK開發: 綜合篇-C#上位機序列槽通信控制ESP8266
int len = serialPort1.BytesToRead;//擷取可以讀取的位元組數
            if ((UsartReadCnt + len) < 1024)//待接收的資料不得超出數組大小
            {
                //把資料讀取到UsartReadBuff數組,每次接收資料偏移UsartReadCnt
                serialPort1.Read(UsartReadBuff, UsartReadCnt, len);
                UsartReadCnt = UsartReadCnt + len;
            }
            else
            {
                UsartReadCnt = 0;
            }           

複制

3.6 定時器中斷函數程式如下

ESP8266 SDK開發: 綜合篇-C#上位機序列槽通信控制ESP8266
if (UsartReadCnt!=0)//序列槽接收到資料
            {
                UsartIdleCnt++;//空閑變量累加
                if (UsartIdleCnt > 10)//序列槽超過10ms沒有接收資料
                {
                    UsartIdleCnt = 0;
                    UsartReadCntCopy = UsartReadCnt;
                    UsartReadCnt = 0;

                    if (UsartReadBuff[0] == 0x55 && UsartReadBuff[1] == 0xaa)
                    {
                        if (UsartReadBuff[2] == 0x01)
                        {
                            if (UsartReadBuff[3] == 0x01)//繼電器吸合
                            {
                                Invoke((new Action(() => {//C# 3.0以後代替委托的新方法
                                    label8.Text = "吸合";
                                    button2.Text = "斷開";
                                })));
                            }
                            else if (UsartReadBuff[3] == 0x00)//繼電器斷開
                            {
                                label8.Text = "斷開";
                                button2.Text = "吸合";
                            }
                        }
                    }
                }
            }           

複制

啟動測試

1.控制繼電器吸合

ESP8266 SDK開發: 綜合篇-C#上位機序列槽通信控制ESP8266
ESP8266 SDK開發: 綜合篇-C#上位機序列槽通信控制ESP8266
ESP8266 SDK開發: 綜合篇-C#上位機序列槽通信控制ESP8266

2.控制繼電器斷開

ESP8266 SDK開發: 綜合篇-C#上位機序列槽通信控制ESP8266
ESP8266 SDK開發: 綜合篇-C#上位機序列槽通信控制ESP8266
ESP8266 SDK開發: 綜合篇-C#上位機序列槽通信控制ESP8266