乐鑫技术交流
直播中

余温重顾

10年用户 972经验值
擅长:可编程逻辑 嵌入式技术 EMC/EMI设计
私信 关注
[问答]

如何将多个ESP连接到一个ESP并向服务器发送数据?

我只想创建一个由多个 ESP(3-4) 组成的网络,在这个网络中是主 esp8266,它处于 ACCESS POINT STAtiON MODE,其余的 esp8266 处于 station 模式。
该站模式 ESP 连接了传感器。所有这些站模式 esp 收集传感器数据并将数据发送到主 esp,
这个主ESP连接到我们的互联网路由器,并通过HTTP或MQTT将所有接收到的数据发送到服务器。


回帖(1)

Arvinhw

2024-7-20 16:21:54
要创建一个由多个ESP8266组成的网络,您可以按照以下步骤操作:
1. 为每个ESP8266设置AP(接入点)模式:要使ESP8266作为接入点,您需要配置其WiFi设置。您可以使用以下示例代码设置ESP8266作为接入点:
```c
#include
const char *ssid = "Your_Access_Point_Name";
const char *password = "Your_Password";
void setup() {
  Serial.begin(115200);
  WiFi.softAP(ssid, password);
  Serial.println("Access Point启动");
  Serial.print("IP地址: ");
  Serial.println(WiFi.softAPIP());
}
void loop() {
  // 这里不需要做任何事情
}
```
2. 将其他ESP8266设置为STA(站点)模式:要使其他ESP8266连接到主ESP8266(作为接入点),您需要配置它们的WiFi设置。您可以使用以下示例代码将ESP8266设置为站点:
```c
#include
const char *ssid = "Your_Access_Point_Name";
const char *password = "Your_Password";
void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("连接到WiFi...");
  }
  Serial.println("已连接到WiFi");
  Serial.print("IP地址: ");
  Serial.println(WiFi.localIP());
}
void loop() {
  // 这里不需要做任何事情
}
```
3. 在站点模式ESP8266上收集传感器数据:您可以使用任何传感器与ESP8266一起收集数据。例如,如果您使用DHT11温度和湿度传感器,可以使用以下示例代码读取数据:
```c
#include "DHT.h"
#define DHTPIN 2     // 将DHT11数据引脚连接到ESP8266的引脚2
#define DHTTYPE DHT11   // 定义DHT类型为DHT11
DHT dht(DHTPIN, DHTTYPE);
void setup() {
  Serial.begin(115200);
  dht.begin();
}
void loop() {
  delay(2000);
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  if (isnan(h) || isnan(t)) {
    Serial.println("无法从DHT11读取数据!");
    return;
  }
  Serial.print("湿度: ");
  Serial.print(h);
  Serial.print(" %t");
  Serial.print("温度: ");
  Serial.print(t);
  Serial.println(" *C ");
}
```
4. 将数据从站点模式ESP8266发送到主ESP8266:您可以使用ESP8266的内置WiFi客户端功能将数据发送到主ESP8266。以下是发送数据的示例代码:
```c
const char* host = "192.168.4.1"; // 主ESP8266的IP地址
const int port = 80; // HTTP端口(对于MQTT,请使用1883)
void setup() {
  // ...
  if (WiFi.status() == WL_CONNECTED) {
    Serial.println("将数据发送到主ESP8266...");
    WiFiClient client;
    if (client.connect(host, port)) {
      String url = String("/api/data?temp=") + t + "&hum=" + h;
      client.print(String("GET ") + url + " HTTP/1.1rn" +
                   "Host: " + host + "rn" +
                   "Connection: closernrn");
    } else {
      Serial.println("连接到主ESP8266失败");
    }
  }
}
void loop() {
  // ...
}
```
5. 在主ESP8266上接收数据并将其发送到服务器:您可以使用内置的WiFi服务器功能在主ESP8266上接收数据。以下是接收数据的示例代码:
```c
#include
ESP8266WebServer server(80);
void setup() {
  // ...
  server.on("/api/data", HTTP_GET, handleData);
  server.begin();
}
void loop() {
  server.handleClient();
}
void handleData() {
  String data = "";
  if (server.arg("temp") != "") {
    data += "温度: " + server.arg("temp") + "°Ct";
  }
  if (server.arg("hum") != "") {
    data += "湿度: " + server.arg("hum") + "%";
  }
  server.send(200, "text/plain", data);
}
```

举报

更多回帖

发帖
×
20
完善资料,
赚取积分