功能如下:


1.将客户端发来的数据转发到串口;
2.串口数据转发给所有客户端
3.可连接4个客户端
4.可设置静态IP地址
5.指示灯闪烁表示无客户端连接,灯亮代表有客户端连接


/**
功能:
1.将客户端发来的数据转发到串口;
2.串口数据转发给所有客户端
3.可连接4个客户端
4.可设置静态IP地址
5.指示灯闪烁表示无客户端连接,灯亮代表有客户端连接
*/ #include <ESP8266WiFi.h> //定义最多多少个client可以连接本server
#define MAX_SRV_CLIENTS 4 //路由器WIFI和密码
const char* ssid = "wifi_name";
const char* password = "88888888"; //静态地址、网关、子网掩码
IPAddress local_IP(192, 168, 0, 200);
IPAddress gateway(192, 168, 0, 1);
IPAddress subnet(255, 255, 255, 0); //创建server
WiFiServer server(8088);//端口号,随意修改,范围0-65535
//管理clients
WiFiClient serverClients[MAX_SRV_CLIENTS]; int a = 0; //连接状态标识
int i = 0;//用于for循环 void setup() {
//波特率
Serial.begin(9600);
//连接WIFI
MyconnectWIFI();
//启动server
server.begin(); //定义输入引脚
pinMode(16, INPUT);// D0
pinMode(5, INPUT);// D1
pinMode(4, INPUT);// D2
pinMode(0, INPUT);// D3 //定义输出引脚
pinMode(2, OUTPUT);// D4
pinMode(14, OUTPUT);// D5
pinMode(12, OUTPUT);// D6
pinMode(13, OUTPUT);// D7
pinMode(15, OUTPUT);// D8 digitalWrite(2, LOW);//输出低电平
digitalWrite(14, HIGH);//输出高电平
} void loop() {
//检测新的Client
NewClient(); //LED指示灯
LEDstate(); //把收到的客户端数据发送到串口
ReceiveData(); //串口数据发送到客户端
SendData();
} //连接WIFI
void MyconnectWIFI() { WiFi.config(local_IP, gateway, subnet);//设置静态IP
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);//路由器的WiFi名称和密码
// Serial.print("\nConnecting to ");
// Serial.println(ssid); //等待连接
while (WiFi.status() != WL_CONNECTED && i++ < 200) {
delay(500);
Serial.print(".");
} if (i == 201) { // Serial.print("\nCould not connect to ");
// Serial.println(ssid);
while (1) {
} } else {
// Serial.print("\nReady! Use 'telnet ");
// Serial.print(WiFi.localIP());
// Serial.println(" 8088' to connect");
}
} //有客户端连接时常亮,无连接时闪烁
void LEDstate() {
//连接情况 用led灯的状态显示
a = 0;
for (int i = 0; serverClients[i].connected(); i++) {
a = 1;
}
if (a == 0) {
digitalWrite(2, HIGH);
delay(500);
digitalWrite(2, LOW);
delay(500);
// Serial.println("no");
} else {
digitalWrite(2, LOW);
}
} //检测新的client
void NewClient() {
//检测是否有新的client请求进来
if (server.hasClient()) {
for (i = 0; i < MAX_SRV_CLIENTS; i++) {
//释放旧无效或者断开的client
if (!serverClients[i] || !serverClients[i].connected()) {
if (serverClients[i]) {
serverClients[i].stop();
}
//分配最新的client
serverClients[i] = server.available();
//Serial.print("New client: ");
//Serial.print(i);
break;
}
}
//当达到最大连接数 无法释放无效的client,需要拒绝连接
if (i == MAX_SRV_CLIENTS) {
WiFiClient serverClient = server.available();
serverClient.stop();
// Serial.println("Connection rejected ");
}
}
} //把收到的客户端数据发送到串口
void ReceiveData() {
for (i = 0; i < MAX_SRV_CLIENTS; i++) {
if (serverClients[i] && serverClients[i].connected()) {
while (serverClients[i].available())
{
uint8_t data = serverClients[i].read();
Serial.println(data);
}
}
}
} //把串口数据发送到客户端
void SendData() {
if (Serial.available()) { //串口读取到的转发到wifi,因为串口是一位一位的发送所以在这里缓存完再发送
size_t counti = Serial.available();
uint8_t sbuf[counti];
Serial.readBytes(sbuf, counti);
//Serial.write(sbuf, counti);
//将数据发送给客户端
for (i = 0; i < MAX_SRV_CLIENTS; i++) {
if (serverClients[i] && serverClients[i].connected()) {
serverClients[i].write(sbuf, counti);
delay(200);
}
}
} else {
for (i = 0; i < MAX_SRV_CLIENTS; i++) {
//释放旧无效或者断开的client
if (serverClients[i].connected()) {
//serverClients[i].println("not data");
delay(500);
}
}
}
}

ESP8266服务器模式 发送数据和接收数据 模板1的更多相关文章

  1. Java基础知识强化之网络编程笔记06:TCP之TCP协议发送数据 和 接收数据

    1. TCP协议发送数据 和 接收数据 TCP协议接收数据:• 创建接收端的Socket对象• 监听客户端连接.返回一个对应的Socket对象• 获取输入流,读取数据显示在控制台• 释放资源 TCP协 ...

  2. Java基础知识强化之网络编程笔记03:UDP之UDP协议发送数据 和 接收数据

    1. UDP协议发送数据 和 接收数据 UDP协议发送数据: • 创建发送端的Socket对象 • 创建数据,并把数据打包 • 调用Socket对象的发送方法,发送数据包 • 释放资源  UDP协议接 ...

  3. STM32输入捕获模式设置并用DMA接收数据

    参考: STM32的PWM输入模式设置并用DMA接收数据 Input capture mode The input stage samples the corresponding TIx input ...

  4. WPF内实现与串口发送数据和接收数据

    原文:WPF内实现与串口发送数据和接收数据 与串口发送数据和接收数据,在此作一个简单的Demo.此Demo可以实现按下硬件按钮,灯亮,发送灯状态数据过来.并且可以实现几个灯同时亮,发送灯的状态数据过来 ...

  5. STM32移植RT-Thread后的串口在调试助手上出现:(mq != RT_NULL) assert failed at rt_mq_recv:2085和串口只发送数据不能接收数据问题

    STM32移植RT-Thread后的串口在调试助手上出现:(mq != RT_NULL) assert failed at rt_mq_recv:2085的问题讨论:http://www.rt-thr ...

  6. Java Socket 服务端发送数据 客户端接收数据

    服务端: package com.thinkgem.wlw.modules.api.test.socket; /** * @Author: zhouhe * @Date: 2019/4/8 9:30 ...

  7. 说说ajax上传数据和接收数据

    我是一个脑袋不太灵光的人,所以遇到问题,厚着脸皮去请教大神的时候,害怕被大神鄙视,但是还是被鄙视了.我说自己不要点脸面,那是不可能的,但是,为了能让自己的技术生涯能走的更长远一些,受点白眼,受点嘲笑也 ...

  8. MVC系列学习(五)-传递数据 与 接收数据

    1.控制器向视图传递数据 a.使用ViewData b.使用ViewBag c.使用Model 方式二: d.使用TempData 2.为什么在控制器中设置了一些属性,在视图中可以接受 3.Actio ...

  9. ASP.NET 最全的POST提交数据和接收数据 —— (1) 用url传参方式

    //1.对象提交,字典方式 //接口方:public ActionResult GetArry(Car model) public void PostResponse() { HttpWebReque ...

随机推荐

  1. 15-2 insert语句介绍

    create table TblClass ( tClassId ,) primary key, tClassName ) ) --向班级表中插入一条记录 --insert into 表名(列1,列2 ...

  2. 解决iframe重定向让父级页面跳转

    原文:http://www.jb51.net/article/40583.htm 有内嵌iframe的页面,当session过期时,点击连接重定向后的跳转会在iframe中跳转,在登录页面中加入下面的 ...

  3. 纯python自研接口自动化脚本更新版本,让小白也能实现0到1万+的接口自动化用例

    查看完整文章点击原文链接:纯python自研接口自动化脚本更新版本,让小白也能实现0到1万+的接口自动化用例 你是否还在用postman\jmeter做接口自动化吗?用python的开源框架[unit ...

  4. 【JavaScript数据结构系列】02-栈Stack

    [JavaScript数据结构系列]02-栈Stack 码路工人 CoderMonkey 转载请注明作者与出处 ## 1. 认识栈结构 栈是非常常用的一种数据结构,与数组同属线性数据结构,不同于数组的 ...

  5. Dell KACE K1000 poc

    POST /service/krashrpt.php HTTP/1.1 Host: xxx.com User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x ...

  6. 1. vue文件结构

    1)这是文件规则 <template> <div > </div> </template> <script> Name:"当前的名 ...

  7. js规则和运算符

    通过“+”号或toString()方法将数值转换成字符串. 通过parseInt()将字符串转换成整型. 通过parseFloat()将字符串转换成浮点型. charAt() 获取字符串特定索引处的字 ...

  8. Java实现 蓝桥杯 算法训练VIP 报数(暴力+数学)约瑟夫环问题

    试题 算法训练 报数 问题描述 现有n个同学站成一圈,顺时针编号1至n.从1号同学开始顺时针1/2报数,报到1的同学留在原地,报到2的同学退出圆圈,直到只剩一名同学为止.问最后剩下的同学编号. 输入格 ...

  9. Java实现 LeetCode 553 最优除法(思路问题)

    553. 最优除法 给定一组正整数,相邻的整数之间将会进行浮点除法操作.例如, [2,3,4] -> 2 / 3 / 4 . 但是,你可以在任意位置添加任意数目的括号,来改变算数的优先级.你需要 ...

  10. Java实现 LeetCode 462 最少移动次数使数组元素相等 II

    462. 最少移动次数使数组元素相等 II 给定一个非空整数数组,找到使所有数组元素相等所需的最小移动数,其中每次移动可将选定的一个元素加1或减1. 您可以假设数组的长度最多为10000. 例如: 输 ...