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客户端:

0x55  0xaa  0x01 0x01

C#TCP客户端发送给ESP8266TCP服务器控制继电器断开指令:

0xaa  0x55  0x01 0x00

ESP8266执行以后回复给C#TCP客户端:

0x55  0xaa  0x01 0x00

ESP8266程序编写

1.处理程序在这节的基础上修改添加

https://www.cnblogs.com/yangfengwu/p/12393478.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.编写TCP接收处理程序

/**
* @brief   TCP接收数据
* @param   arg:tcp_arg函数传入的参数
* * @param   p:接收的数据缓存
* @param   err:错误信息
* @param   None
* @retval  None
* @warning None
* @example
**/
static err_t net_tcp_recv_cb(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err) {
    struct pbuf *q;
    u32 length = 0,i=0;
    tcp_pcb_server = tpcb;
    tcp_pcb_server_state = 1;
    if (!p || err!=ERR_OK) {
        if(p){
            pbuf_free(p);
        }
        tcp_pcb_server_state = 0;
        tcp_close(tcp_pcb_server);//关闭连接
        return ERR_CLSD;
    }
    //接收TCP数据(固定)
    for(q=p;q!=NULL;q=q->next){
        if(q->len > (TcpServerBuffLen-length))//接收的数据个数大于了数组可以接收的数据个数
            memcpy(TcpServerBuff+length,q->payload,(TcpServerBuffLen-length));//只接收数组可以接收的数据个数
        else
            memcpy(TcpServerBuff+length,q->payload,q->len);//接收TCP所有数据
        length += q->len;
        if(length > TcpServerBuffLen) break;
    }

    if(TcpServerBuff[0] == 0xaa && TcpServerBuff[1] == 0x55){
        if(TcpServerBuff[2] == 0x01){
            if(TcpServerBuff[3] == 0x01){
                GPIO_OUTPUT_SET(5, 1);//设置GPIO5输出高电平
                tcp_write(tcp_pcb_server, RelayOn, 4, TCP_WRITE_FLAG_COPY);//TCP_WRITE_FLAG_COPY:拷贝到发送缓存
                tcp_output(tcp_pcb_server);//立即发送
            }
            else if(TcpServerBuff[3] == 0x00){
                GPIO_OUTPUT_SET(5, 0);//设置GPIO5输出低电平
                tcp_write(tcp_pcb_server, RelayOff, 4, TCP_WRITE_FLAG_COPY);//TCP_WRITE_FLAG_COPY:拷贝到发送缓存
                tcp_output(tcp_pcb_server);//立即发送
            }
        }
    }

    //固定处理
    tcp_recved(tcp_pcb_server, p->tot_len);/*更新接收,告诉底层可以接着缓存数据了*/
    pbuf_free(p);//释放链表
    return ERR_OK;
}

5.先用TCP调试助手测试

5.1 电脑连接 8266 的无线

5.2 打开TCP客户端,连接8266

5.3 发送16进制指令测试

控制继电器吸合

aa  55  01 01

控制继电器断开

aa  55  01 00

C#上位机程序编写

1.处理程序在这节的基础上修改添加

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

2.页面修改如下

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

时间: 2024-10-09 16:09:58

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

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

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控制继电器

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

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

Web开发中的服务器跳转与客户端跳转

两者比较如下: 跳转类型  客户端请求次数 服务端响应次数 URL变化 站外跳转 作用域 服务器跳转 1 1 无 否 pageContext.request.session.application 客户端跳转 2 2 有 能 session.application 请求次数与响应次数 服务端跳转:客户端发起一次请求,服务端接收请求后,将结果跳转到另一个页面,作为此次请求结果返回给客户端客户端跳转:客户端发起一次请求,服务端返回此次请求的结果,结果内容是一个URL地址,客户端拿到此URL,再次发送

tcp客户端程序开发

https://www.cnblogs.com/python-No/ 话不多说,直接进入正题 一:客户端一共分为5大块: 1.创建客户端套接字 2.和服务端套接字建立连接 3.发送数据 4.接收发送 5.关闭客户端套接字 二:socket类的介绍 导入 socket 模块import socket 创建客户端 socket 对象socket.socket(AddressFamily, Type) send(data) 表示发送数据,data是二进制数据 recv(buffersize) 表示接收

esp8266 Ubuntu SDK 开发环境搭建

最近在弄这个WiFi模块,发现网上SDK开发方面的资料很少,发现了一套视频教程,不过主讲人的讲课方式实在受不了.对基于SDK开发感兴趣的同学可以通过本帖在Ubuntu系统上通过Eclipes搭建开发环境. 过程可以分为两步: 1.下载.编译SDK 2.配置Eclipes 一.下载.编译SDK esp8266的sdk有两种,分别是ESP8266_RTOS_SDK和ESP8266_NONOS_SDK,这两者的区别在于RTOS_SDK基于NONOS_SDK并有一个叫做RTOS的操作系统,而NONOS_

高拍仪拍照SDK开发(良田影像S300L|S500L)

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 高拍仪拍照SDK开发下载地址:点击下载 本SDK适用于:良田影像S300L|S500L 高拍仪如图: SDN开发包安装之后找到安装目录,如图: 大家找到各自需要的版本即可,需要注意的是如果需要上传图片到服务器的话,我已经写好了C#版的接受程序,

新浪微博SDK开发(1):总述

花了几天时间,消耗了九牛六虎之力,新浪微博大部分API已经封装,但有部分API实在太难封装. 说起这封装,我必须严重地.从人品和技术层面鄙视一下新浪的程序员,实在太菜了.估计菜鸟都被大企业吸收了,菜到连面向对象都不懂. 同样的内容,返回的JSON对象居然会出现不同结构,更可恶的,像公共API中获取城市列表,国家区域代码列表的返回结果,实在让人不得不发笑.那些JSON用JS读起来都困难,更何况要进行封装呢.根本没法封装,因此在论坛上抱怨的人不少,可是新浪官方呢,置之不管,就当没看见一样,看来,大企