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


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

    电脑端

    电脑的IP地址是: 192.168.2.232

    手机与电脑之间的TCP通讯

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

    手机端

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

    ESP8266作为客户端:

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

    1. #include
    2. #define AP_SSID "trdjtxxx" //所用WiFi的名字
    3. #define AP_PSW "xh36xxxx" //所用WiFi的密码
    4. const uint16_t port = 10002; //Tcp 服务器的端口
    5. const char * host = "120.76.100.197"; //Tcp 服务器的ip地址
    6. WiFiClient client; //创建一个tcp client连接
    7. void setup() {
    8. Serial.begin(115200);
    9. delay(5000);
    10. WiFi.mode(WIFI_STA); //设置WiFi 为 Station 模式
    11. WiFi.begin(AP_SSID,AP_PSW); //连接WiFi
    12. Serial.println("Connecting to WiFi... ");
    13. //等待wifi连接成功
    14. while (WiFi.status() != WL_CONNECTED) {
    15. Serial.println("Failed!");
    16. delay(500);
    17. }
    18. Serial.println("");
    19. Serial.println("Connected");
    20. Serial.println("Local IP: ");
    21. Serial.println(WiFi.localIP());
    22. delay(500);
    23. }
    24. void loop() {
    25. Serial.println("Connecting to TCP Server :");
    26. Serial.println(host);
    27. if (!client.connect(host, port)) {
    28. Serial.println("Failed");
    29. Serial.println("Reconnect in 5 seconds");
    30. delay(5000);
    31. return;
    32. }
    33. // 发送数据到 Tcp Server
    34. Serial.println("Send The String to TCP Server :\"I am Esp8266\"");
    35. client.println(String("I am Esp8266"));
    36. //读取从 Tcp Server 返回的数据(以回车符结尾)
    37. String line = client.readStringUntil('\n');
    38. Serial.println(line);
    39. //3s 后关闭连接
    40. delay(3000);
    41. Serial.println("");
    42. client.stop();
    43. //等待5s,程序循环运行,即5s后从新开始连接
    44. Serial.println("wait 5 sec...");
    45. delay(5000);
    46. }

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

    ESP8266作为TCP服务器:

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

    Arduino 程序代码:

    1. #include
    2. #define MAX_SRV_CLIENTS 3 //最大同时连接数,即可接入的设备数量的最大值,
    3. //8266 tcpserver只能接入5个(此数据不确定,网上是这么说的)
    4. WiFiServer server(8266); //端口号,范围 0-65535
    5. WiFiClient serverClients[MAX_SRV_CLIENTS];
    6. const char WiFiAPPSW[] = "xh36xxxx"; //设置AP模式下模块所发出的WIFI的密码
    7. char data[1500];
    8. int ind = 0;
    9. void setupWiFi()
    10. {
    11. WiFi.mode(WIFI_AP);
    12. uint8_t mac[WL_MAC_ADDR_LENGTH];
    13. WiFi.softAPmacAddress(mac);
    14. String macID = String(mac[WL_MAC_ADDR_LENGTH - 3], HEX) +
    15. String(mac[WL_MAC_ADDR_LENGTH - 2], HEX) +
    16. String(mac[WL_MAC_ADDR_LENGTH - 1], HEX);
    17. macID.toUpperCase();
    18. //设置AP模式下的WIFI名称:12345678_ + MAC地址后六位
    19. String AP_NameString = "12345678" + macID;
    20. char AP_NameChar[AP_NameString.length() + 1];
    21. memset(AP_NameChar, AP_NameString.length() + 1, 0);
    22. for (int i=0; ilength(); i++)
    23. AP_NameChar[i] = AP_NameString.charAt(i);
    24. WiFi.softAP(AP_NameChar, WiFiAPPSW);
    25. Serial.println();
    26. Serial.print ( "IP address: " );
    27. Serial.println ( WiFi.softAPIP() );
    28. server.begin();
    29. }
    30. void setup()
    31. {
    32. Serial.begin(115200);
    33. Serial.println ("\nBegin now!!!");
    34. setupWiFi();
    35. }
    36. void loop()
    37. {
    38. uint8_t i;
    39. //检测服务器端是否有活动的客户端连接
    40. if (server.hasClient())
    41. {
    42. for (i = 0; i < MAX_SRV_CLIENTS; i++)
    43. //查找空闲或者断开连接的客户端,并置为可用
    44. {
    45. if (!serverClients[i] || !serverClients[i].connected())
    46. {
    47. if (serverClients[i]) serverClients[i].stop(); //未连接,就释放
    48. serverClients[i] = server.available(); //分配新的
    49. // Serial.print("New client: "); Serial.println(i);
    50. continue;
    51. }
    52. }
    53. //若没有可用客户端,则停止连接
    54. WiFiClient serverClient = server.available();
    55. serverClient.stop();
    56. }
    57. //检查客户端的数据
    58. for (i = 0; i < MAX_SRV_CLIENTS; i++)
    59. {
    60. if (serverClients[i] && serverClients[i].connected())
    61. {
    62. if (serverClients[i].available())
    63. {
    64. Serial.println("Connected to client !!! ");
    65. //从Telnet客户端获取数据
    66. while (serverClients[i].available()) {
    67. data[ind] = serverClients[i].read(); //读取client端发送的字符
    68. ind++;
    69. }
    70. for(int j=0;j < ind; j++)
    71. {
    72. Serial.print(data[j]);
    73. }
    74. Serial.println();
    75. ind = 0;
    76. serverClients[i].print("OK! Got your request."); //在client端回复
    77. }
    78. }
    79. }
    80. }

    参考:

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

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

  • 相关阅读:
    微信机器人终端1.0未来的设想就是做成telegram一样强大的机器人群体集控终端
    数据科学家必读:Pandas操作加快100倍,让你的Pandas飞起来
    美狐美颜SDK动态贴纸代码浅析
    工程材料知识点总结(全)
    【JS】Chapter13-构造函数&数据常用函数
    Java枚举你真的会用吗
    进程同步与互斥
    leetcode - 823. Binary Trees With Factors
    Intellij IDEA常用配置、快捷键、定义代码模板
    20天深度复习JavaSE的详细笔记(十二)——集合(Collection、数据结构、List、泛型深入)
  • 原文地址:https://blog.csdn.net/cuckoo1/article/details/134082654