首页 > 解决方案 > ESP-01 客户端无法访问 NodeMCU 网络服务器(连接被拒绝)

问题描述

我有一个奇怪的问题...我有一个 ESP-01 客户端,它应该连接到接入点,然后向网络服务器发送请求。接入点和网络服务器托管在 NodeMCU 上。

什么有效:

问题:

但是:如果我将 wifi 更改为 ESP-01 上的本地 wifi 并尝试连接任何其他网站,它可以工作。所以..对我来说,这似乎是两个 ESP 组合的问题。

有任何想法吗?

服务器 (NodeMCU)

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>

#ifndef APSSID
#define APSSID "MyWifi"
#define APPSK  "1234567890"
#endif
const char *ssid = APSSID;
const char *password = APPSK;

const byte LED_1 = 5;
const byte LED_2 = 4;
const byte LED_3 = 13;
const byte LED_4 = 15;

const byte BTN_1 = 14;
const byte BTN_2 = 12;

const int ap_channel = 6;
const boolean ap_hidden = false;

IPAddress local_ip(192,168,4,1);
IPAddress gateway(192,168,4,1);
IPAddress netmask(255,255,255,0);

ESP8266WebServer server(80);

int led_on = 0;

void setup() {
  Serial.begin(115200);
  Serial.println();

  pinMode(LED_1, OUTPUT);
  pinMode(LED_2, OUTPUT);
  pinMode(LED_3, OUTPUT);
  pinMode(LED_4, OUTPUT);

  pinMode(BTN_1, INPUT);
  pinMode(BTN_2, INPUT);

  digitalWrite(LED_1, LOW);
  digitalWrite(LED_2, LOW);
  digitalWrite(LED_3, LOW);
  digitalWrite(LED_4, LOW);
  
  WiFi.softAPConfig(local_ip, gateway, netmask);
  
  Serial.print("IP Address: ");
  Serial.println(WiFi.softAPIP());

  Serial.println("Starting Access Point");
  WiFi.softAP(ssid, password, ap_channel, ap_hidden);
    
  server.on("/buzz", HTTP_GET, handlebuzz);
  server.begin();

}

// ##### Loop
void loop() {
  server.handleClient();
  if (digitalRead(BTN_1) == LOW){
    digitalWrite(LED_1, LOW);
    digitalWrite(LED_2, LOW);
    digitalWrite(LED_3, LOW);
    digitalWrite(LED_4, LOW);
    led_on = 0;
  }
}


void handlebuzz() {
  if( server.hasArg("id") && led_on == 0){
    server.send(200, "text/html","ok:"+server.arg("id"));
    
    if (server.arg("id") == "1"){
      digitalWrite(LED_1, HIGH);
      led_on = 1;
    } else if (server.arg("id") == "2"){
      digitalWrite(LED_2, HIGH);
      led_on = 1;
    } else if (server.arg("id") == "3"){
      digitalWrite(LED_3, HIGH);
      led_on = 1;
    } else if (server.arg("id") == "4"){
      digitalWrite(LED_4, HIGH);
      led_on = 1;
    }
    
    
  } else {
    server.send(200, "text/html","error");
  }
  return; 
}

客户(ESP-01):

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>

#include <WiFiClient.h>

// ----- config -----
const char* ssid     = "MyWifi";
const char* password = "1234567890";

const byte PIN_BUZZER = 0;
const String url = "http://192.168.4.1/buzz?id=1";

// ----- config -----

int buzzing = 0;

void setup() {
  Serial.begin(115200);
  
  pinMode(PIN_BUZZER, INPUT);
 
  WiFi.begin(ssid, password);

 Serial.print("Connecting..");   
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");
  }
  Serial.print("OK");
  Serial.println();
  
  
}

void loop() {   
   if (digitalRead(PIN_BUZZER)){
       Serial.println("Buzzer pressed");
       
      if (buzzing == 0) {
        Serial.println("doit");
        buzzing = 1;

        WiFiClient client;
        HTTPClient http;
        
        http.begin(client, url); 
        
        int httpCode = http.GET();    
        Serial.println(httpCode);                           
        if (httpCode > 0) {
          Serial.println(http.getString());
        }
        http.end(); 
        delay(2000);
        buzzing = 0;
        
      } else {
        Serial.println("cooldown");
      }
   }
}

标签: arduinowifiesp8266

解决方案


解决方案很简单。我刚刚将子网从 192.168.4.0/24 更改为 192.168.1.0/24。我不知道为什么会这样。


推荐阅读