怎么改发送过来的数组为分割数组

怎么把arduino通过eso8266发送的字符串分割成数组读取


#include <ESP8266WiFi.h>

const char* ssid = "YourWiFiNetwork";
const char* password = "YourWiFiPassword";

WiFiServer server(80);

void setup() {
  Serial.begin(9600);
  delay(10);

  // 连接到 Wi-Fi 网络
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");

  // 启动服务器
  server.begin();
  Serial.println("Server started");

  // 打印 ESP8266 的 IP 地址
  Serial.print("Use this URL to connect: ");
  Serial.print("http://");
  Serial.print(WiFi.localIP());
  Serial.println("/");
}

void loop() {
  // 检查是否有客户端连接
  WiFiClient client = server.available();
  if (!client) {
    return;
  }

  // 等待接收完整的请求数据
  while(!client.available()) {
    delay(1);
  }

  // 读取请求数据
  String request = client.readStringUntil('\r');
  client.flush();

  // 打印接收到的请求
  Serial.println("Request: " + request);

  // 分割字符串
  String delimiter = ",";
  String token;
  int index = 0;
  String dataArray[10];  // 最多存储 10 个数据

  while ((index = request.indexOf(delimiter)) != -1) {
    token = request.substring(0, index);
    dataArray[index] = token;
    request = request.substring(index + 1);
    index++;
  }

  // 将最后一个数据存入数组
  dataArray[index] = request;

  // 读取数组中的数据
  for (int i = 0; i <= index; i++) {
    Serial.println("Data[" + String(i) + "]: " + dataArray[i]);
  }

  // 发送响应到客户端
  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println("");
  client.println("<!DOCTYPE HTML>");
  client.println("<html>");
  client.println("<h1>Success</h1>");
  client.println("</html>");

  delay(100);
  client.stop();
  Serial.println("Client disconnected");
}

  • 看下这篇博客,也许你就懂了,链接:arduino两种方法搭建esp8266开发环境
  • 除此之外, 这篇博客: Arduino手动安装esp8266开发板中的 8最后所需要下载的文件如图 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 在这里插入图片描述

  • 您还可以看一下 李博老师的Arduino方式玩转ESP8266之云平台实战课程中的 课程简介小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    根据参考资料和现有知识,以下是解决问题的步骤:

    1. 首先,确保已经安装了Arduino和ESP8266开发板,并成功连接到ESP8266设备。

    2. 在Arduino中,使用ESP8266发送字符串,可以使用Serial通信将字符串发送到ESP8266。例如,使用以下代码发送字符串:“Hello World!”:

    Serial.begin(115200);  // 设置串口波特率为115200
    Serial.println("Hello World!");  // 发送字符串
    
    1. 在ESP8266设备中,接收到字符串后,可以使用String类的split()函数将字符串按照指定的分隔符进行分割,并将分割后的子字符串存储到数组中。例如,假设收到的字符串是以逗号分隔的,可以使用以下代码将字符串分割成数组:
    #include <ESP8266WiFi.h>
    
    void setup() {
      Serial.begin(115200);
    
      // 连接WiFi网络
      WiFi.begin("SSID", "password");
    
      while (WiFi.status() != WL_CONNECTED) {
        delay(1000);
        Serial.println("Connecting to WiFi...");
      }
      Serial.println("Connected to WiFi");
    }
    
    void loop() {
      if (Serial.available()) {  // 如果串口接收到数据
        String receivedString = Serial.readString();  // 读取串口接收到的字符串
    
        // 将接收到的字符串按照逗号分隔成数组
        String delimiter = ",";
        String sensorValues[10];  // 假设最多有10个传感器数值
        int i = 0;
    
        while (receivedString.length() > 0) {
          int index = receivedString.indexOf(delimiter);
          if (index >= 0) {
            sensorValues[i] = receivedString.substring(0, index);
            receivedString = receivedString.substring(index + 1);
            i++;
          } else {
            sensorValues[i] = receivedString;
            receivedString = "";
          }
        }
    
        // 逐个读取数组的各个元素
        for (int j = 0; j <= i; j++) {
          Serial.print("Sensor value ");
          Serial.print(j);
          Serial.print(" : ");
          Serial.println(sensorValues[j]);
        }
      }
    }
    
    1. 在上述代码中,可以根据实际情况修改WiFi网络的SSID和密码,以及根据需要修改分隔符和传感器数值的个数。

    2. 在Arduino中,通过Serial通信发送字符串到ESP8266,ESP8266将收到的字符串分割成数组,并逐个读取数组的各个元素,以便可以按需使用这些传感器数值。

    请注意,以上代码只是一个示例,具体的解决方案可能因项目需求而有所不同。如果以上解决方案无法满足您的需求,请提供更具体的要求,以便提供更精确的帮助。