ESP8266 SDK开发: 综合篇-C#上位机串口通信控制ESP8266

实现的功能

1.C#串口上位机通过串口控制继电器

控制继电器吸合

    

控制继电器断开

    

说明

1,请用户先学习这一节

https://www.cnblogs.com/yangfengwu/p/12382103.html   编写C#串口调试助手

2.控制继电器引脚

协议规定

上位机串口发送给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为普通引脚

    /*设置GPIO5为普通引脚*/
    PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO5_U , FUNC_GPIO5);

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

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

4.编写处理程序

            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.先用串口调试助手测试

控制继电器吸合

aa  55  01 01

控制继电器断开

aa  55  01 00

C#上位机程序编写

1.上位机只保留了这一节

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

操作串口部分

详细保留的程序说明:

1.串口显示初始化

2.打开关闭串口

3.串口热插拔检测

4.串口接收

开始编写

1.页面

两个Label

一个按键

2.双击 吸合按钮 生成按钮点击事件

并在点击事件中编写以下程序

            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.拖拽上来一个定时器

3.2配置定时器

Enable改为True  (使能定时器)

Interval 设置为1  (1Ms进一次)

3.3

选择事件 -> 双击Tick

让程序生成定时器回调函数

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

        byte[] UsartReadBuff = new byte[1024];//接收数据缓存
        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[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.控制继电器吸合

    

2.控制继电器断开

    

原文地址:https://www.cnblogs.com/yangfengwu/p/12386915.html

时间: 2024-11-08 22:40:47

ESP8266 SDK开发: 综合篇-C#上位机串口通信控制ESP8266的相关文章

ESP8266 SDK开发: 综合篇-8266TCP服务器与C#TCP客户端实现无线网络通信控制

实现的功能 前言 1.用户在看这一节之前请先学习 https://www.cnblogs.com/yangfengwu/p/12397146.html   C# TCP客户端 https://www.cnblogs.com/yangfengwu/p/12393478.html   8266 TCP服务器 2.控制继电器引脚 协议规定 C#TCP客户端发送给ESP8266TCP服务器控制继电器吸合指令: 0xaa  0x55  0x01 0x01 ESP8266执行以后回复给C#TCP客户端: 0

ESP8266 SDK开发: 综合篇-8266TCP服务器与Android TCP客户端实现无线网络通信控制

实现的功能 Android TCP客户端连接8266的TCP服务器,网络控制开发板继电器 1.控制继电器吸合 2.控制继电器断开 前言 1.用户在看这一节之前请先学习 https://www.cnblogs.com/yangfengwu/p/12543923.html   Android TCP客户端 https://www.cnblogs.com/yangfengwu/p/12543847.html   8266 TCP服务器 2.控制继电器引脚 协议规定 Android TCP客户端发送给E

上位机串口控制FPGA开发板LED

实验目的: 上位机软件通过串口控制FPGA开发板上4个LED灯的亮灭,同时数码管显示LED灯亮的个数,实验效果如下图. 实验背景: 一直都想学习FPGA,这次算是入门了,我是看书学习的,所以FPGA的代码是参考着书本上的修改的,其实很高兴,因为这个实验是我自己发散出来的,书上的开发板和我用的开发板不一样,并且小软件也是自己用C#写的,总之,挺开心吧,本着开源的精神,所有的上位机代码和FPGA程序上传,如有需要请自行下载(点此下载).工作就没时间写教程之类的,简单的介绍一下吧 硬件平台: Cycl

C#上位机串口控制12864显示

实现的效果 上面是用Proteus仿真的,,对了如果自己想用proteus仿真需要安装下面这个软件 再看一下实物显示效果 先做上位机部分........... 为了程序一启动就把电脑上能用的串口号显示在下拉框中 private void Form1_Load(object sender, EventArgs e) { string[] ComName = SerialPort.GetPortNames();//把可用的串口号存入comname comboBoxCom.Items.AddRange

ESP8266 SDK开发: 开发环境搭建(NONOS 2.2.0)

前言 最近发现有些用户使用的是NONOS版本的SDK 考虑到只要是会使用RTOS版本的用户基本上都会使用NONOS版本 而会使用NONOS的用户大部分都不会使用RTOS版本 故后期的教程以NONOS版本为主,RTOS版本为辅 整个文章按照NONOS版本为主线编写,最后说明和RTOS版本的区别 导入工程 咱们用NONOS 2.2.0版本 导入NONOS 2.2.0版本 1.按照上一节安装好软件以后 把这个工程解压到 2.File -> Import 下载程序 生成的bin文件位置 咱现在不需要IA

用VC6.0实现上位机串口通信

串口是常用的计算机与外部串行设备之间的数据传输通道,由于串行通信方便易行,所以应用广泛.我们可以利用Windows API 提供的通信函数编写出高可移植性的串行通信程序.本实例介绍在Visual C++6.0下如何利用Win32 API 实现串行通信程序.程序编译运行后的界面效果如图一所示: 图一.串口通信示例程序 一.实现方法 在Win16中,可以利用OpenComm().CloseComm()和WriteComm()等函数打开.关闭和读写串口.但在Win32中,串口和其他通信设备均被作为文件

ESP8266 SDK开发: 外设篇-GPIO中断检测

直接上代码 #include "gpio.h" //设置GPIO0下降沿中断 PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U , FUNC_GPIO0);//GPIO0做为普通IO使用 GPIO_DIS_OUTPUT(0);//0:GPIO0 如果以前设置过GPIO为输出,则调用此函数关闭GPIO0输出 PIN_PULLUP_EN(PERIPHS_IO_MUX_GPIO0_U);//GPIO0上拉输入 _xt_isr_mask(1<<ETS_G

[自娱自乐] 4、超声波测距模块DIY笔记(四)——终结篇&#183;基于C#上位机软件开发

前言 上一节我们已经基本上把超声波硬件的发射和接收模块全部做好了,接下来我们着手开发一个软硬结合的基于C#的平面定位软件! 目录 一.整体思路 二.效果提前展示 2-1.软件部分展示 2-2.硬件部分展示 三.基于C#的客户端软件说明 3-1.整体框架介绍: 3-2.部分技术细节介绍 3-2-1.串口操作 3-2-2.JiSuan函数说明及核心算法介绍 四.阶段小结 五.相关链接 一.整体思路 >_<" 如下图,利用我们上三节开发的超声波发射与接收设备构成一个:2固定接收头+1可移动

ESP8266文档阅读ESP8266 SDK 入门指南

ESP8266 SDK  入门指南 1.概述 1.2.ESP8266 HDK 1.3.ESP8266 SDK 1.4.ESP8266 FW 1.5.ESP8266 工具集 2.1.开发板方案 3.软件准备 . 4.Flash布局 5.6.....