• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь Передача данных на ПК

mbc0

New member
Коротко: стоит задача собирать данные с нескольких датчиков температуры на ноутбук без интернета, сохранять в файл для дальнейшего анализа.
Ситуация:
На ноутбуке без интернета запущена программа - сокет сервер с адресом 127.0.0.1:11000 и сокет клиент. В клиенте набираем текстовую строку. Клиент соединяется с сервером, передает строку, получает ответ, разъединяется. Все работает.
На ноуте есть точка доступа WiFi.
ESP8266 успешно подключается к точке доступа, но соединиться с сервером по адресу 127.0.0.1:11000 не может.
Текст:
WiFiClient client;
if (!client.connect((127,0,0,1), 11000))
{ Serial.print(" connection failed"); delay(5000); return; }

Сообщает: connection failed
Что делать!!??

Добавлю. Большущая просьба. Если нечего сообщить по существу, не замусоривать тему.
 
Последнее редактирование:

mbc0

New member
Когда на ПК запускается локальный сервер, то получает по DNS от "lokalhost" два адреса:
[::1] (кстати что за чертовщина?)
или 127.0.0.1
работать с клиентом на ПК может по любому из них.
А с ESP никак.
За совет погуглить спасибо, обгуглился уже до умопомрачения!
 

Сергей_Ф

Moderator
Команда форума
ну во первых localhost.
Во вторых - это это локальный адрес компьютера для него самого и только для него
В третьих [::1] - это тоже локальный адрес по протоколу ipv6
esp не может подключиться к 127.0.0.1 потому, что этот адрес ведет на неё саму, а не на сервер

на счёт обгуглился - не верю
Яндекс
 

tretyakov_sa

Moderator
Команда форума
ESP8266 успешно подключается к точке доступа, но соединиться с сервером по адресу 127.0.0.1:11000 не может.
Текст:
WiFiClient client;
if (!client.connect((127,0,0,1), 11000)) { Serial.print(" connection failed"); delay(5000); return; }
Сообщает: connection failed
Что делать!!??
Выяснить реальный адрес компьютера. 127.0.0.1 не подойдет.
 
  • Like
Реакции: mbc0

Алексей.

Active member
Выяснить реальный адрес компьютера. 127.0.0.1 не подойдет.
Если он (ноут) кроме точки доступа ещё и dhcp сервер, а esp получает ip адрес по тому же dhcp, то адрес шлюза и будет тем самым адресом компьютера.
На ноутбуке без интернета запущена программа - сокет сервер с адресом 127.0.0.1:11000
Пока вы будите использовать "программа - сокет сервер с адресом 127.0.0.1:11000" никто не сможет установить с ней соединения с другого компьютера, esp и т.д. используйте на этой программе либо адрес 0.0.0.0 либо реальный адрес (тот что шлюзом работает).
 
  • Like
Реакции: mbc0

mbc0

New member
ну во первых localhost.
Во вторых - это это локальный адрес компьютера для него самого и только для него
В третьих [::1] - это тоже локальный адрес по протоколу ipv6
esp не может подключиться к 127.0.0.1 потому, что этот адрес ведет на неё саму, а не на сервер

на счёт обгуглился - не верю
Яндекс
Спасибо за "критику".
А по теме? Как подключиться ESP к локал серверу, есть что сказать?

Некоторые господа, слегка разбирающиеся в сетевых закоулках почему то считают, что и остальные просто обязаны с пеленок понимать эту чертову путаницу с масками, подсетями, шлюзами, динамическими, статическими, локальными и прочими адресами и т.п. и т.д.
Это неверное суждение.
 
Последнее редактирование:

Сергей_Ф

Moderator
Команда форума
Как подключиться ESP к локал серверу, есть что сказать?
Так вам уже объяснили выше. Не поняли?
Ну тогда придется слегка научиться разбираться в этой чертовой путанице. Никто за вас этого не сделает, тут волшебников нет. Уж извините. Ваш компьютер у вас в руках, вот и найдите его адрес.
Его укажите в клиенте на esp. На сервере сделайте как сказал @Алексей. .
 

nikolz

Well-known member
Спасибо за "критику".
А по теме? Как подключиться ESP к локал серверу, есть что сказать?

Некоторые господа, слегка разбирающиеся в сетевых закоулках почему то считают, что и остальные просто обязаны с пеленок понимать эту чертову путаницу с масками, подсетями, шлюзами, динамическими, статическими, локальными и прочими адресами и т.п. и т.д.
Это неверное суждение.
Некоторые господа, полагают, что можно сделать ВСЕ, не зная НИЧЕГО.
Надо просто наехать на тех,
кто знает как это сделать
или жалобно начать выпрашивать решение своих хотелок у них.
------------------
Типа - я ничего в этой хреновине не понимаю и изучать нет времени(жалко свое тратить - оно стоит денег), но требую халаяву и срочно (чужое время - не жалко, оно бесплатное).
 

=AK=

New member
Коротко: стоит задача собирать данные с нескольких датчиков температуры на ноутбук без интернета, сохранять в файл для дальнейшего анализа.
...
На ноуте есть точка доступа WiFi.
ESP8266 успешно подключается к точке доступа, но соединиться с сервером по адресу 127.0.0.1:11000 не может.
...
Что делать!!??
Чтобы решить поставленную задачу, вовсе не требуется устанавливать соединение с сервером. Достаточно подключиться к точке доступа (ноутбуку) и бродкастить UDP сообщения, содержащие собранные с датчиков данные. Эти сообщения будут видны всем узлам локальной сети, включая ноут. В этом случае никаких IP адресов узнавать не надо, достаточно знать свой собственный IP адрес, а к нему применить маску 255.255.255.0, это и будет бродкаст.
 
Последнее редактирование:
  • Like
Реакции: mbc0

mbc0

New member
Чтобы решить поставленную задачу, вовсе не требуется устанавливать соединение с сервером. Достаточно подключиться к точке доступа (ноутбуку) и бродкастить UDP сообщения, содержащие собранные с датчиков данные. Эти сообщения будут видны всем узлам локальной сети, включая ноут. В этом случае никаких IP адресов узнавать не надо.
Спасибо за подсказку!
 

mbc0

New member
Так вам уже объяснили выше. Не поняли?
Ваш компьютер у вас в руках, вот и найдите его адрес.
Его укажите в клиенте на esp.
Где он? Этот адрес.
Я не администратор сетей.
Простой программер микроконтроллеров.

По команде ipconfig /all
перебрал все показанные адреса, ни к одному не подключается.
 
Последнее редактирование:

nikolz

Well-known member
Где он? Этот адрес.
Я не администратор сетей.
Простойпрограммер микроконтроллеров.
есть три способа:
1) В ESP делаете рассылку широковещательную, адрес 255.255.2545.0 и порт 9000 (например)
на компе пишите сервер который принимает все что с прота 9000
И принимаете
Комп либо по сети подключен к роутеру
либо на нем висит свисток который подключится к роутеру по wifi
-------------------------
2) комп по свистку подкл к роутеру и вы получаете от роутера ip
в ESP указываете этот IP
---------------------------
3) ESP подключается к роутеру
смотрите в роутере IP
на компе если сервер на компе ждете с этого IP
если сервер на ESP то с компа обращаетесь по этому IP
----------------------
Все это если не лень можете почитать в букваре по интернет и не надо про системных админов заливать.
 

mbc0

New member
есть три способа:
1) В ESP делаете рассылку широковещательную, адрес 255.255.2545.0 и порт 9000 (например)
на компе пишите сервер который принимает все что с прота 9000
И принимаете
Комп либо по сети подключен к роутеру
либо на нем висит свисток который подключится к роутеру по wifi
Вот текст:
........
void setup()
{
Serial.begin(74880); pinMode(12,OUTPUT); pinMode(13,OUTPUT); pinMode(15,OUTPUT);
digitalWrite(15, HIGH);
#include <WiFi_scan.h>
#include <WiFi_connect.h>
digitalWrite(15, 0);
}
void loop() {
Serial.println(); Serial.print("соединение с "); Serial.print(iphost); Serial.print(':'); Serial.print(port);

// Use WiFiClient class to create TCP connections
WiFiClient client; if (!client.connect(iphost, port)) { Serial.print(" connection failed"); delay(5000); return; }
.......

Выводит:
Scan SSID
1: ASUS, Ch:6 (-57dBm)
2: Multi-Temp, Ch:6 (-52dBm)

Подключение к Multi-Temp.........................
Подключено Используем URL: 192.168.173.131
Хост модуля: ESP_112514


соединение с 255.255.255.0:11000 connection failed

На компе локал сокет сервер работает портом 11000
 

nikolz

Well-known member
Вот текст:
........
void setup()
{
Serial.begin(74880); pinMode(12,OUTPUT); pinMode(13,OUTPUT); pinMode(15,OUTPUT);
digitalWrite(15, HIGH);
#include <WiFi_scan.h>
#include <WiFi_connect.h>
digitalWrite(15, 0);
}
void loop() {
Serial.println(); Serial.print("соединение с "); Serial.print(iphost); Serial.print(':'); Serial.print(port);

// Use WiFiClient class to create TCP connections
WiFiClient client; if (!client.connect(iphost, port)) { Serial.print(" connection failed"); delay(5000); return; }
.......

Выводит:
Scan SSID
1: ASUS, Ch:6 (-57dBm)
2: Multi-Temp, Ch:6 (-52dBm)

Подключение к Multi-Temp.........................
Подключено Используем URL: 192.168.173.131
Хост модуля: ESP_112514


соединение с 255.255.255.0:11000 connection failed

На компе локал сокет сервер работает портом 11000
могу выложить вам для изучения и применение сервер на луа для компа , который слушает по указанному порту всех и отправляет ответ ASK при получении данных с ESP
------------------------- сервер----------------------
local socket=require("socket")
local host,port ='*',3999; local udp = socket.udp(); local data
udp:setsockname(host,port);
while 1 do
local data,ip,port = udp:receivefrom()
if data then print(os.date() .. ">"..data) udp:sendto("ASK",ip,port) end
end
-------------------------------------------
Для ESP выкладывать не буду, так как это на СИ и не 10 строк.
 

=AK=

New member
Вот текст:
........
Это не текст, а какие-то бессмысленные обрывки текста. Можно догадаться, что сначала сканируете окружающие сети, потом подключаетесь к одной из них, после чего непонятно зачем пытаетесь подключиться к 255.255.255.0:11000. Хотя вам прямым тестом было сказано, что:

1) Подключаться по TCP ни к кому не надо. Вы должны послать UDP сообщение на широковещательный адрес. При отсылке UDP сообщений никаких подключений не происходит, сообщение просто уходит адресату, без ответа. В случае широковещательного адреса его получат все узлы локальной сети, к которой вы подключились.

2) 255.255.255.0 это не сам IP адрес, а маска для него. То есть, вы должны взять известный адрес локальной сети (можно адрес хоста, но на мой вкус лучше взять свой собственный адрес) и применить к нему маску, в результате вы получите адрес, который для этой сети является широковещательным.

Почитайте, что такое TCP и UDP и в чем разница между ними, а то вы совсем уж неприглядно выглядите, даже самых базовых вещей не знаете и демонстративно не желаете знать, просто дОлбитесь как баран в чугунные ворота.
 

nikolz

Well-known member
Это не текст, а какие-то бессмысленные обрывки текста. Можно догадаться, что сначала сканируете окружающие сети, потом подключаетесь к одной из них, после чего непонятно зачем пытаетесь подключиться к 255.255.255.0:11000. Хотя вам прямым тестом было сказано, что:

1) Подключаться по TCP ни к кому не надо. Вы должны послать UDP сообщение на широковещательный адрес. При отсылке UDP сообщений никаких подключений не происходит, сообщение просто уходит адресату, без ответа. В случае широковещательного адреса его получат все узлы локальной сети, к которой вы подключились.

2) 255.255.255.0 это не сам IP адрес, а маска для него. То есть, вы должны взять известный адрес локальной сети (можно адрес хоста, но на мой вкус лучше взять свой собственный адрес) и применить к нему маску, в результате вы получите адрес, который для этой сети является широковещательным.

Почитайте, что такое TCP и UDP и в чем разница между ними, а то вы совсем уж неприглядно выглядите, даже самых базовых вещей не знаете и демонстративно не желаете знать, просто дОлбитесь как баран в чугунные ворота.
Все еще проще
Не надо брать известный адрес сети, можно взять любой адрес в сети даже не существующий
А сервер на компе, который я выложил выше примет посылку с ESP
Я беру адрес равный адресу роутера(это gw в структуре IP4_ADDR для ESP)
но последний байт 255
 

mbc0

New member
Все еще проще
Не надо брать известный адрес сети, можно взять любой адрес в сети даже не существующий
А сервер на компе, который я выложил выше примет посылку с ESP
Я беру адрес равный адресу роутера(это gw в структуре IP4_ADDR для ESP)
но последний байт 255
Установил на ноуте LUA
Запустил ваш сервер.

вот кусок проги в ардуино. выше соединение WiFi точкой доступа
.....
Serial.print("Connected! IP address: ");
Serial.println(WiFi.localIP());
Serial.printf("UDP server on port %d\n", localPort);
Udp.begin(3999);
}

void loop() {
Serial.println("Send");
Udp.beginPacket((192,168,173,255), 3999);
Udp.write("Glotay chert poberi!!");
Udp.endPacket();
Serial.println("End");

Не видит хоть тресни.
 
Сверху Снизу