Продолжать получать скандон
У меня есть сервер узлов с экспресс-и сокетным вводом-выводом за обратным прокси-сервером nginx в AWS. Я пытаюсь удаленно подключиться с моего NodeMCU esp8266 через клиент ввода-вывода websocket к своему серверу с помощью WebSocketClientSocketIO (безуспешно). Я новичок и не знаю, что я делаю не так. Ниже приведены мои отладочные сообщения. Я продолжаю получать скандон.
SDK:2.2.1(cfd48f3)/Core:2.4.2/lwIP:2.0.3(STABLE-2_0_3_RELEASE/glue:arduino-2.4.1-13-g163bb82)/BearSSL:6d1cefc
del if0
usl
mode : null
mode : sta(84:f3:eb:b7:4e:8c)
add if0
Connecting.....scandone
state: 0 -> 2 (b0)
.state: 2 -> 3 (0)
state: 3 -> 5 (10)
add 0
aid 1
cnt
connected with Zlink, channel 13
dhcp client start...
....ip:192.168.10.8,mask:255.255.255.0,gw:192.168.10.1
.
Connected to Zlink
IP address: 192.168.10.8
[SETUP] BOOT WAIT 4...
[SETUP] BOOT WAIT 3...
[SETUP] BOOT WAIT 2...
[SETUP] BOOT WAIT 1...
state: 5 -> 0 (0)
rm 0
scandone
scandone
scandone
scandone
scandone
.
.
.
.
`
Мой скетч:
/*
* WebSocketClientSocketIO.ino
*
* Created on: 06.06.2016
*
*/
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266HTTPClient.h>
#include <WebSocketsClient.h>
#include <Hash.h>
ESP8266WiFiMulti WiFiMulti;
WebSocketsClient webSocket;
const char *ssid = "MyWiFiName";
const char *password = "mypassword";
#define USE_SERIAL Serial
#define MESSAGE_INTERVAL 30000
#define HEARTBEAT_INTERVAL 25000
uint64_t messageTimestamp = 0;
uint64_t heartbeatTimestamp = 0;
bool isConnected = false;
void webSocketEvent(WStype_t type, uint8_t * payload, size_t length) {
switch(type) {
case WStype_DISCONNECTED:
USE_SERIAL.printf("[WSc] Disconnected!\n");
isConnected = false;
break;
case WStype_CONNECTED:
{
USE_SERIAL.printf("[WSc] Connected to url: %s\n", payload);
isConnected = true;
// send message to server when Connected
// socket.io upgrade confirmation message (required)
webSocket.sendTXT("5");
}
break;
case WStype_TEXT:
USE_SERIAL.printf("[WSc] get text: %s\n", payload);
// send message to server
// webSocket.sendTXT("message here");
break;
case WStype_BIN:
USE_SERIAL.printf("[WSc] get binary length: %u\n", length);
hexdump(payload, length);
// send data to server
// webSocket.sendBIN(payload, length);
break;
}
};
void setup() {
delay(1000);
// USE_SERIAL.begin(921600);
USE_SERIAL.begin(115200);
WiFi.mode(WIFI_OFF); //Prevents reconnection issue (taking too long to connect)
delay(1000);
WiFi.mode(WIFI_STA); //This line hides the viewing of ESP as wifi hotspot
startWiFi();
USE_SERIAL.setDebugOutput(true);
USE_SERIAL.println();
USE_SERIAL.println();
USE_SERIAL.println();
for(uint8_t t = 4; t > 0; t--) {
USE_SERIAL.printf("[SETUP] BOOT WAIT %d...\n", t);
USE_SERIAL.flush();
delay(1000);
}
// WiFiMulti.addAP("SSID", "passpasspass");
WiFi.disconnect();
while(WiFiMulti.run() != WL_CONNECTED) {
delay(100);
}
``` // webSocket.beginSocketIO("192.168.0.123", 81);
webSocket.beginSocketIO("http://www.myDomainName.com", 80, "/addr");
//addr is address where I want to send messages
//webSocket.setAuthorization("user", "Password"); // HTTP Basic Authorization
webSocket.onEvent(webSocketEvent);
}
void loop() {
webSocket.loop();
testSend();
if(isConnected) {
uint64_t now = millis();
if(now - messageTimestamp > MESSAGE_INTERVAL) {
messageTimestamp = now;
// example socket.io message with type "messageType" and JSON payload
webSocket.sendTXT("42[\"messageType\",{\"greeting\":\"hello\"}]");
}
if((now - heartbeatTimestamp) > HEARTBEAT_INTERVAL) {
heartbeatTimestamp = now;
// socket.io heartbeat message
webSocket.sendTXT("2");
}
};
};
void startWiFi() {
WiFi.begin(ssid, password);
USE_SERIAL.println("");
USE_SERIAL.print("Connecting");
// Wait for connection
while (WiFi.status() != WL_CONNECTED) {
delay(500);
USE_SERIAL.print(".");
};
//If connection successful show IP address in serial monitor
USE_SERIAL.println("");
USE_SERIAL.print("Connected to ");
USE_SERIAL.println(ssid);
USE_SERIAL.print("IP address: ");
USE_SERIAL.println(WiFi.localIP()); //IP address assigned to your ESP
};
void testSend(){
webSocket.sendTXT("Hello from esp");
delay(1000);
};
`
My code on node server where I am trying to collect messages from esp8266 is very simple as bellow:
socket.on('addr1', function (req,res) {
console.log(req);
});
@Zeni, 👍1
Обсуждение2 ответа
в скетче " простой WiFi begin() смешан с системой WiFiMulti. Сначала скетч подключается к точке доступа, а затем отключается и запускает WiFiMulti. но:
точка доступа не настроена для подключения WiFiMulti
Я удалил следующие строки из своего кода выше: WiFi.disconnect () и WiFiMulti, @Zeni
и? так лучше?, @Juraj
Теперь для подключения к серверу ввода-вывода сокета у меня есть эта строка "' WebSocket.beginSocketIO("http://localhost", 8080 , "/espSocketSrvr2" ); " Но я получаю ошибку //[WS-Клиент] подключить ws... [WS-Клиент] подключение к http://myserver.com:80 Сбой [WS-Клиент] клиент отключен. [WSc] Отключен! ', @Zeni
Я также попытался запустить простой сервер сокетов с помощью библиотеки ws. Я изменил линию подключения на " WebSocket.begin("127.0.0.1", 8080 , "/" ); . Все равно я получаю ошибку " [WS-Клиент] подключить ws...
[WS-Клиент] подключение к 127.0.0.1:8080 Сбой
[WS-Клиент] клиент отключен.
[WSc] Отключен!
. Хотя в обоих случаях я могу подключиться к серверу через сокет из браузера. Наверное, я упускаю какую-то мелочь, но что это такое ...............,.., @Zeni
Я запускаю сервер node js на локальном компьютере. Я также попробовал " WebSocket.begin("http://localhost", 8080 , "/" );` безуспешно., @Zeni
локальный хост вашего esp8266-это ваш esp8266, @Juraj
Отличная мысль!!!! Позвольте мне попробовать использовать свой IP., @Zeni
Все та же проблема. [WS-Клиент] подключите ws... [WS-Клиент] подключение к myip:Сбой 8080 [WS-Клиент] клиент отключен. [WSc] Отключен!, @Zeni
но первоначальный вопрос решен или нет?, @Juraj
К сожалению, нет. В любом случае, сейчас здесь поздняя ночь. Попробую завтра еще раз. Большое спасибо, дорогой Юрай., @Zeni
но esp8266 подключен к сети Wi-Fi или это все еще "scandone"?, @Juraj
Попробуйте использовать свой локальный IP-адрес в качестве клиентского веб-сайта.
...
...
const char* host = "192.168.x.x";
WifiClient wificlient;
...
...
void setup(){
...
...
startWiFi();
//WiFi.mode(WIFI_OFF);
//WiFi.disconnect();
if(!wificlient.connect(host, 80)){
Serial.println(F("connection failed! "));
return;
}
client.setClient(wificlient);
...
...
}
также добавьте свой хост в экспресс-узлы. Я нашел проблему, подобную вашей этой
...
...
var http = require('http').Server(app);
var io = require('socket.io')(http);
var host = "192.168.x.x";
var port = "80";
...
...
socket.emit("<your-text>");
server.listen(host, port, function(){
console.log("listening on http://"+host+":"+host+" ");
});
...
...
Надеюсь, это поможет.
- Почему, когда я пытаюсь подключить ESP8266 к узлу, разорванному в моем локальном хосте, он продолжает отключаться и подключаться?
- Как заставить 5-вольтовое реле работать с NodeMCU
- ESP8266 не подключается к Wi-Fi
- Разница между этими двумя платами NodeMCU?
- NodeMCU - использовать кнопку flash в качестве входного сигнала в loop()
- Как определить размер Flash?
- Как изменить имя модуля ESP8266-12E по умолчанию
- Простой запрос GET с ESP8266HTTPClient
зачем вызывать " WiFi.disconnect()` в конце настройки , после того как вы дождались подключения?, @dandavis
Спасибо, ребята. Я рассмотрю оба пункта и опубликую результаты. Я удалю wifi Multi, потому что я не понимаю, почему нам нужно использовать точку доступа, в то время как все, что мне нужно, - это использовать КЛИЕНТ ввода-вывода сокета в моем коде?, @Zeni
это не использование AP. вы подключаетесь к точке доступа, чтобы подключиться к сети Wi-Fi. с помощью WiFiMulti можно настроить больше точек доступа для подключения. хорошо, если esp8266 изменит местоположение (дом, работа, мобильная точка доступа,... ), @Juraj