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

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5631|回复: 3

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

[复制链接]
发表于 2019-1-8 13:26 | 显示全部楼层 |阅读模式
最近看着大神们的帖子,也动手试验了一些例子,自己结合了大神们的代码弄了一个在局域网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[MAX_SRV_CLIENTS];


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[i] ||!serverClients[i].connected())
            {
                if (serverClients[i]) serverClients[i].stop();
                serverClients[i] = server.available();
                continue;
            }
        }
        WiFiClient serverClient = server.available();
        if (serverClient)
        {
          serverClient.stop();
        }
  }

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



可以加我qq共同学习;
 楼主| 发表于 2019-1-8 13:27 | 显示全部楼层
图没传上去,  好尴尬;


总的硬件连接

总的硬件连接

示意图

示意图
发表于 2019-1-12 15:34 来自手机 | 显示全部楼层
用的硬串口? 那怎么调试?
 楼主| 发表于 2019-1-14 09:10 | 显示全部楼层
cluse 发表于 2019-1-12 15:34
用的硬串口? 那怎么调试?

这个硬件串口跟Arduino那个串口是一样的啊,   你还想怎么调试?   想用软串口调试,你再转接到其他板子就好了呀。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 14:42 , Processed in 0.092778 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表