ESP8266板的局域网wifi透传TTL串口数据-Arduino中文社区 - Powered by Discuz! Archiver

qq337358996 发表于 2019-1-8 13:26

ESP8266板的局域网wifi透传TTL串口数据

最近看着大神们的帖子,也动手试验了一些例子,自己结合了大神们的代码弄了一个在局域网WiFi的应用,简单来说就是ESP8266只做一个透传功能,将串口数据通过TCP的方式传送到其他其他局域网的工具;
示意图:


硬件比较简陋:



具体代码:
#include <ESP8266WiFi.h>
#include<cstring>

#define MAX_SRV_CLIENTS 20   //最大同时联接数
#define led 2

const char* ssid   = "XXXXX";         // XXXXXX -- 使用时请修改为当前你的 wifi ssid
const char* password = "XXXXXX";         // XXXXXX -- 使用时请修改为当前你的 wifi 密码

const unsigned long BAUD_RATE = 9600;                   // 串口波特率
const unsigned long HTTP_TIMEOUT = 5000;               // 服务器超时时间

WiFiServer server(8266);//你要的端口号,随意修改,范围0-65535
WiFiClient serverClients;


void setup() {
WiFi.mode(WIFI_AP_STA);   //设置esp8266 工作模式
Serial.begin(BAUD_RATE,SERIAL_8N1);    // 串口定义波特率
pinMode(led,OUTPUT);
digitalWrite(led, HIGH);
delay(2000);
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);   
while (WiFi.status() != WL_CONNECTED)
{
    //这个函数是wifi连接状态,返回wifi链接状态
    delay(500);
    Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
delay(500);
Serial.println("IP address: ");
Serial.println(WiFi.localIP());//WiFi.localIP()返回8266获得的ip地址,路由器分配的地址
server.begin();//服务器开始
server.setNoDelay(true);
}

void loop()
{
uint8_t i;
if (server.hasClient()){
      for (i = 0; i < MAX_SRV_CLIENTS; i++)
      {
            if (!serverClients ||!serverClients.connected())
            {
                if (serverClients) serverClients.stop();
                serverClients = server.available();
                continue;
            }
      }
      WiFiClient serverClient = server.available();
      if (serverClient)
      {
          serverClient.stop();
      }
}

for (i = 0; i < MAX_SRV_CLIENTS; i++)
{
      if (serverClients && serverClients.connected())
      {
            //处理客户端发过来的数据
            if (serverClients.available())
            {
                while (serverClients.available())
                     {
                      Serial.write(serverClients.read());
                      }//串口打印客户端发的数据
                      delay(200);
                      while(Serial.available()>0)
                      {      
                     String comdata = "";
                     comdata +=char(Serial.read());
                     int data_len = comdata.length()+1;
                     char a ;
                     delay(2);
                     comdata.toCharArray(a,data_len);
                     if (comdata.length() > 0)
                        {
                            serverClients.write(a);//串口接收数据发给客户端
                            comdata = "";
                           }
                     }
            }
      }
   }
}



可以加我qq共同学习;

qq337358996 发表于 2019-1-8 13:27

图没传上去,好尴尬;


cluse 发表于 2019-1-12 15:34

用的硬串口? 那怎么调试?

qq337358996 发表于 2019-1-14 09:10

cluse 发表于 2019-1-12 15:34
用的硬串口? 那怎么调试?

这个硬件串口跟Arduino那个串口是一样的啊,   你还想怎么调试?   想用软串口调试,你再转接到其他板子就好了呀。:)
页: [1]
查看完整版本: ESP8266板的局域网wifi透传TTL串口数据