当前位置: 首页 > article >正文

ESP8266,手机与电脑之间的TCP通讯

 电脑端运行通讯猫调试助手,作为服务端:

电脑端

电脑的IP地址是: 192.168.2.232

手机与电脑之间的TCP通讯

手机端运行网络调试精灵,作为客户端:

手机端

如果从手机端点击"发送"按钮,则也会将"ghhh东方红广场"几个字发送到电脑上(服务端).

ESP8266作为客户端:

// 注意如果是本地设备作服务器,则要求TCP Sever 和 ESP8266 都连接到同一个路由器。

#include <ESP8266WiFi.h>
#define AP_SSID "trdjtxxx"       //所用WiFi的名字
#define AP_PSW  "xh36xxxx"       //所用WiFi的密码
 
const uint16_t port = 10002;        //Tcp 服务器的端口
const char * host = "120.76.100.197"; //Tcp 服务器的ip地址

WiFiClient client;                 //创建一个tcp client连接
 
void setup() {
  Serial.begin(115200);
  delay(5000);
  
  WiFi.mode(WIFI_STA);              //设置WiFi 为 Station 模式
  WiFi.begin(AP_SSID,AP_PSW);       //连接WiFi
  
  Serial.println("Connecting to WiFi... ");
  //等待wifi连接成功
  while (WiFi.status() != WL_CONNECTED) {
    Serial.println("Failed!");
    delay(500);
  }
 
  Serial.println("");
  Serial.println("Connected");
  Serial.println("Local IP: ");
  Serial.println(WiFi.localIP());

  delay(500);
}
 
void loop() {
  Serial.println("Connecting to TCP Server :");
  Serial.println(host);
  if (!client.connect(host, port)) {
    Serial.println("Failed");
    Serial.println("Reconnect in 5 seconds");
    delay(5000);
    return;
  }
 
  // 发送数据到 Tcp Server 
  Serial.println("Send The String to TCP Server :\"I am Esp8266\"");
  client.println(String("I am Esp8266"));
 
  //读取从 Tcp Server 返回的数据(以回车符结尾)
  String line = client.readStringUntil('\n');
  Serial.println(line);

  //3s 后关闭连接
  delay(3000);
  Serial.println("");
  client.stop();

  //等待5s,程序循环运行,即5s后从新开始连接
  Serial.println("wait 5 sec...");
  delay(5000);
}

120.76.100.197 即:webtcp.tongxinmao.com的IP地址.

ESP8266作为TCP服务器:

// ESP8266 TCP服务端程序,同时也作为一个WIFI AP
// 注意作为客户端的电脑或手机必须先通过WIFI连接到此ESP8200上
// 即和 ESP8266 都连接到同一个网络中。

Arduino 程序代码:

#include <ESP8266WiFi.h>
#define MAX_SRV_CLIENTS 3    //最大同时连接数,即可接入的设备数量的最大值,
                             //8266 tcpserver只能接入5个(此数据不确定,网上是这么说的)
							 
WiFiServer server(8266);     //端口号,范围  0-65535
WiFiClient serverClients[MAX_SRV_CLIENTS];

const char WiFiAPPSW[] = "xh36xxxx";    //设置AP模式下模块所发出的WIFI的密码
char data[1500];
int ind = 0;

void setupWiFi()
{
  WiFi.mode(WIFI_AP);
  uint8_t mac[WL_MAC_ADDR_LENGTH];
  WiFi.softAPmacAddress(mac);
  
  String macID = String(mac[WL_MAC_ADDR_LENGTH - 3], HEX) +
                 String(mac[WL_MAC_ADDR_LENGTH - 2], HEX) +
                 String(mac[WL_MAC_ADDR_LENGTH - 1], HEX);
  macID.toUpperCase();

 //设置AP模式下的WIFI名称:12345678_ + MAC地址后六位  
  String AP_NameString = "12345678" + macID;
   
  char AP_NameChar[AP_NameString.length() + 1];
  memset(AP_NameChar, AP_NameString.length() + 1, 0);
   
  for (int i=0; i<AP_NameString.length(); i++)
    AP_NameChar[i] = AP_NameString.charAt(i);
   
  WiFi.softAP(AP_NameChar, WiFiAPPSW);
 
  Serial.println();
  Serial.print ( "IP address: " );
  Serial.println ( WiFi.softAPIP() );

  server.begin();
    
}
void setup() 
{
  Serial.begin(115200);
  Serial.println ("\nBegin now!!!");
  setupWiFi();
}
 
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();          //分配新的
              //  Serial.print("New client: "); Serial.println(i);
                continue;
            } 
        }
         //若没有可用客户端,则停止连接
        WiFiClient serverClient = server.available();
        serverClient.stop();
    }
    //检查客户端的数据
    for (i = 0; i < MAX_SRV_CLIENTS; i++)
    {
        if (serverClients[i] && serverClients[i].connected())
        {
            if (serverClients[i].available())
            {
                Serial.println("Connected to client !!! ");
                 //从Telnet客户端获取数据
                while (serverClients[i].available()) {
                    data[ind] = serverClients[i].read(); //读取client端发送的字符
                    ind++;
                         
                }
            for(int j=0;j < ind; j++)
            {
              Serial.print(data[j]);
            }
            Serial.println();
            ind = 0;
            serverClients[i].print("OK! Got your request.");        //在client端回复       
            }     
        }
    }
}

参考:

esp笔记(5)esp8266 与 TCP Sever 建立通讯_esp8266tcp server程序-CSDN博客

【ESP8266】ESP8266作为TCPServer与其他设备建立一个TCP网络进行局域网通讯_多个esp8266如何组网-CSDN博客


http://www.kler.cn/news/107570.html

相关文章:

  • 分享一个基于asp.net的供销社农产品商品销售系统的设计与实现(源码调试 lw开题报告ppt)
  • 客户端负载均衡策略:loadBalancer,ribbon
  • HDR图像处理软件 Photomatix Pro mac中文版新增功能
  • 解决Linux下编译Intel oneTBB动态库出错的问题
  • 【电路笔记】-交流电路中的功率
  • 统计学习方法 支持向量机(下)
  • JPA联合主键
  • 【数据结构】交换排序
  • 假如我有一台服务器
  • python+requests接口自动化测试框架
  • 性能测试工具——Jmeter的安装【超详细】
  • 线扫相机DALSA--分频倍频计算公式及原理
  • pycharm运行R语言脚本(win10环境下安装)
  • docker 部署tig监控服务
  • 多测师肖sir_高级金牌讲师_python+pymyql数据库
  • Maven入门与开箱即用
  • P3370 【模板】字符串哈希
  • Python基于微博的舆情分析、热搜可视化系统
  • 报错:SSL routines:ssl3_get_record:wrong version number
  • 缺少d3dx9_43.dll怎么解决 win系统如何运行dll文件?
  • TensorFlow学习:使用官方模型和自己的训练数据进行图片分类
  • Redis(02)| 数据结构-SDS
  • Spring Boot进阶(90):使用Spring Boot整合Curator,实现分布式锁,确保多个节点对同一资源的访问不会出现冲突
  • 【鸿蒙软件开发】ArkTS基础组件之Gauge(环形图表)、LoadingProgress(动态加载)
  • webGL编程指南 第五章 MultiAttributeSize
  • Golang Struct 继承的深入讨论和细节
  • SQL group by、where和having语句用法
  • 20231027 比赛总结
  • CAx软件中若干C++日志库
  • 报错:Could not resolve host: mirrorlist.centos.org;Unknown error