查看: 503|回复: 3

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

[复制链接]
  • TA的每日心情
    开心
    2019-1-8 09:03
  • 签到天数: 21 天

    [LV.4]偶尔看看III

    发表于 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共同学习;
  • TA的每日心情
    开心
    2019-1-8 09:03
  • 签到天数: 21 天

    [LV.4]偶尔看看III

     楼主| 发表于 2019-1-8 13:27 | 显示全部楼层
    图没传上去,  好尴尬;


    总的硬件连接

    总的硬件连接

    示意图

    示意图

    该用户从未签到

    发表于 2019-1-12 15:34 来自手机 | 显示全部楼层
    用的硬串口? 那怎么调试?
  • TA的每日心情
    开心
    2019-1-8 09:03
  • 签到天数: 21 天

    [LV.4]偶尔看看III

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

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

    本版积分规则

    热门推荐

    [发布帖]RPG游戏 无人世界
    [发布帖]RPG游戏 无人世界
    视频攻略:https://www.bilibili.com/video/av43790997/ 剧情:主角是一只猫又,在逃
    arduino oled 时钟 可设置闹钟 表
    arduino oled 时钟 可设置
    呆板教程,固件是编译好的,有上传工具,这次不是IDE了
    Arduino 蓝牙机械臂
    Arduino 蓝牙机械臂
    蓝牙机械臂(这次没用BLINKER,改
    求助!!!!!!!!
    求助!!!!!!!!
    求助?????错在哪里了?谢谢
    max30102问题
    max30102问题
    最近网上买了个max30102的心率血氧模块,用卖家给的单个例程的时候数据还算准确,但是
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表