ESP8266 发送数据和接收数据(万能模板)

功能如下:

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);
      }
    }
  }
}





  • 57
    点赞
  • 607
    收藏
    觉得还不错? 一键收藏
  • 32
    评论
Arduino和ESP8266的组合是一对非常强大的工具,可以实现无线通信和使用互联网的能力。要通过ESP8266发送数据,需要先将ESP8266配置为Access Point模式或Station模式,并连接到WiFi网络。然后,您需要使用Arduino的串口通信来连接到ESP8266,并使用ESP8266 AT指令来发送数据。 首先,使用Arduino IDE安装ESP8266库,以便可以使用它的功能。然后可以使用以下代码来连接到ESP8266: ``` #include <SoftwareSerial.h> SoftwareSerial esp8266(2,3); //RX, TX void setup(){ Serial.begin(9600); esp8266.begin(9600); esp8266.println("AT"); delay(500); } void loop(){ if (esp8266.available()) { Serial.write(esp8266.read()); } if (Serial.available()) { esp8266.write(Serial.read()); } } ``` 上面的代码首先初始化一个SoftwareSerial对象来与ESP8266通信。它通过向ESP8266发送“AT”指令来测试连接。一旦确定连接成功,该代码将通过串口通信将收到的数据发送到串行监视器,并将来自串行监视器的数据发送回ESP8266。 一旦成功连接到ESP8266,就可以使用其他AT指令来发送数据。例如,在Access Point模式下,您可以发送数据ESP8266的IP地址: ``` esp8266.println("AT+CIPSEND=10"); esp8266.println("hello world"); ``` 在Station模式下,您首先需要连接到一个WiFi网络,然后才能发送数据到外部IP地址: ``` esp8266.println("AT+CWJAP=\"ssid\",\"password\""); esp8266.println("AT+CIPSTART=\"TCP\",\"192.168.0.1\",80"); esp8266.println("AT+CIPSEND=10"); esp8266.println("hello world"); ``` 这样就可以通过ESP8266发送数据了。当然,这只是一个简单的例子,您可以根据需要扩展和修改代码以实现更复杂的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值