• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Обсуждение Создание TCP сервера на прием и передачу через WiFi

valkonik

New member
Есть панель отображения информации типа "Бегущая строка", она расположена в условно недоступном месте. Даная панель понимает UART. Идея такова, поставить на нее ESP8266 ESP-01,
на ЕСПешке поднять WiFi TCP сервер чтобы он принимал от ноутбука информацию по WiFi и передавал ее по последовательному порту на панель.
Начал заниматься ESP8266 недавно, примеры попробовал в принципе все получилось. В итоге написал такой TCP сервер. Но как теперь его связать с приложением на С++ в ПК не знаю. Что то пробовал на сокетах но ничего не получилось. Давайте вместе построим такой проект, думаю не только мне надо.
Код:
#include <ESP8266WiFi.h>

WiFiServer server(8888);
void setup()
{
    Serial.begin(115200);
    WiFi.mode(WIFI_AP);
    WiFi.softAP("Test", "1234567890");
  server.begin();
}
WiFiClient client;
void loop()
{
   if (!client.connected())
   {
       client = server.available();
   } else 
     {
        if (client.available() > 0) 
        {
           Serial.write(client.read());
        }
     }
}
 

fandy

Member
А зачем Вам приложение для ноутбука?
Напишите, чтобы Ваш сервер выдавал в ответ на внешний запрос HTML страницу с простенькой формой ввода строки, пароля и кнопкой "Отправить" и работайте в любом браузере.
 

valkonik

New member
Дело в том, что панель отображает счет матча, время, и таймер секунд который запускает судья. Я переживаю за скорость передачи даных.
 

valkonik

New member
Дописал строку, как я думаю с установкой IP, но ни один IP не пингуется.

Код:
#include <ESP8266WiFi.h>

WiFiServer server(8888);
void setup()
{
    Serial.begin(115200);
    WiFi.config(IPAddress (192,168,4,118), IPAddress (192,168,4,100), IPAddress (255,255,255,0));
    WiFi.mode(WIFI_AP);
    WiFi.softAP("Test", "1234567890");
    server.begin();
    Serial.println("");
    Serial.println(WiFi.localIP());
}
WiFiClient client;
void loop()
{
   if (!client.connected())
   {
       client = server.available();
   }
   else
   {
       if (client.available() > 0)
       {
           Serial.write(client.read());
       }
    }
}
На последовательный порт получаю:
Код:
192.168.4.118
Но адреса 192.168.4.1 и 192.168.4.2 пингуются на ура.
 
Последнее редактирование:

Retrum

New member
Делал TCP подключение, тоже долго мучился, но вскоре заработало.

У мя на вемосе и tcp и web серверы

Код:
WiFiServer tcpserver(3000);
ESP8266WebServer server(80);
WiFiClient client;

....

void loop(void){

  // TCP-шная часть

  if (!client.connected()) {
    client = tcpserver.available();
  } else {
    if (client.available() > 0) {
      mess += char(client.read());}
    else if (mess !="") {
        Serial.println(mess); // сообщение от клиента
        if (mess == "Status") {SendStatus();}

    if (mess == "чтото там") {чёто делаем} 
              
        mess = "";
    }
}

//---Отправка статусов клиенту---//
void SendStatus(){               //
  String msg = "status";         //
  msg += StatusRoom1;            //
  msg += StatusRoom2;            //
  msg += StatusRoom3;            //
  msg += StatusKitchen;          //
  msg += StatusBathroom;         //
  msg += StatusHallway;          //
  msg += "\n\r";                 //
  client.print(msg);             //
}                                //
//-------------------------------//
В DELPHI:
Код:
TIdTCPClient
port = 3000
host = 192.168.1.65 - какой и в WEMOS

подключение:
  try
    Client.Connect;
    Label1.Text:='Подключено...';
    Timer.Enabled:= true;
    CheckStatus;
  except
    Client.Disconnect;
    Label1.Text:='Нет подключения...';
  end;
...
// Запрос показаний
procedure TForm1.CheckStatus;
begin
  send('Status');
end;

----------------
опрос только по таймеру:

// Получение сообщений от сервера ESP
procedure TForm1.TimerTimer(Sender: TObject);
var
  s: string;
  i: integer;
begin
  Client.IOHandler.CheckForDataOnSource();
  i:= Client.Socket.InputBuffer.Size;
  if i > 0 then
  begin
    s:= Client.Socket.ReadLn();
    Client.Socket.InputBuffer.Clear;
    if Copy(s,1,6) = 'status' then ShowStatus(Copy(s,7,6));
  end;
end;
 
Последнее редактирование:
Сверху Снизу