arduino - ESP-01 客户端无法访问 NodeMCU 网络服务器(连接被拒绝)
问题描述
我有一个奇怪的问题...我有一个 ESP-01 客户端,它应该连接到接入点,然后向网络服务器发送请求。接入点和网络服务器托管在 NodeMCU 上。
什么有效:
- ESP-01 可以连接到接入点
- 我的笔记本可以连接到接入点
- 在我的笔记本上,我可以访问网络服务器(一切正常)
问题:
- ESP-01 无法访问网络服务器(连接被拒绝)
但是:如果我将 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");
}
}
}
解决方案
解决方案很简单。我刚刚将子网从 192.168.4.0/24 更改为 192.168.1.0/24。我不知道为什么会这样。
推荐阅读
- pandas - vlookup 相当于使用 pandas 填充现有表
- php - 来自 ANDROID VOLLEY 的 PHP API
- reactjs - 使用 react-datepicker 在 fullCalender 中转到特定日期或月份或年份
- spring-boot - 方法 POST 所需的请求参数不存在
- javascript - 在 nextjs 中使用谷歌标签管理器后出现意外的哈希码
- azure - 删除 Azure-DevOps 帐户
- google-chrome-extension - 在 Chrome 扩展的脚本标签中启用脚本
- dynamics-365 - 当焦点位于可编辑网格(视图)中的单元格上时如何将光标移动到下一个或上一个字符
- html - 如何使用 Tailwind CSS 创建多个主题?
- matlab - 在 Matlab 的曲线拟合工具中使用哪种类型的方程?