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

Решено простая передача данных

Dronvip

Member
Добрый вечер. подскажите мне нужно организовать простую передачу между esp-шками. одна espшка выступает как сервер вот код
Код:
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
WiFiServer server(80);

void startAP()
{
  delay(100);
  WiFi.mode(WIFI_STA);
  WiFi.softAP("Master_Node","1234567Test");
  delay(500);
  server.begin();
  Serial.println("Server started");
}
void setup() {
  Serial.begin(115200);
  startAP();
}

void loop()
{
  WiFiClient client=server.available();
  if(client){//Если клиент подключён
// Serial.println("Client connected");
  while(client.connected()){
    if(Serial.available()>0){// Если принимаем по UART
      char TX = Serial.read(); // Считываем байт( если нужно строку то Serial.ReadStringUntil("\n")
      client.print(TX); // Шлём по TCP то что приняли по UART
    }
    if(client.available()>0){ //Если принимаем по TCP
      char RX = client.read(); // Считываем сообщение клиента
      Serial.print(RX);// Шлём в UART
      //client.print(RX);
    }
   }
   //Serial.println("Diskonnected");
   }
}
а вот с клиентами сложнее. в примерах не нашел норм примера т.к. все пишут что не могут подключится к серверу. подскажите код чтобы просто отправлять строку от множества клиентов одному и тому же серверу.
 

ildarado

New member
Сам промучался два дня, так и не смог напрямую соединить два esp. В итоге остановился на реализации через веб-сервер с помощью http-запросов. Примеры брал с библиотеки ESP8266WiFi, если не ошибаюсь - WebServer. Что-то только со стабильностью проблемы, сегодня запитаю esp-ки от отдельного источника питания и еще раз попоробую.
 
Последнее редактирование:

Dronvip

Member
Сам промучался два дня, так и не смог напрямую соединить два esp. В итоге остановился на реализации через веб-сервер с помощью http-запросов. Примеры брал с библиотеки ESP8266WiFi, если не ошибаюсь - WebServer. Что-то только со стабильностью проблемы, сегодня запитаю esp-ки от отдельного источника питания и еще раз попоробую.
я сам об этом думал уже... не подкините примерчик с пересылкой с помощью http запроса?
 

Dev

New member
1) Сервер на 3 клиента
2) Клиент
если не заработает, то завтра проверю и скину рабочий
Если скорость передачи низкая шлите что-нибудь в ответ
 

Вложения

DmitryS

New member
может мне тоже здесь кто поможет...
суть решаемой задачи
1. ESP +ВРЕ22+ реле(светодиод) - клиент на LUA
2. Arduino +W5100 -сервер
клиент должен отправить данные о температуре и влажности и получить ответ о включении светодиода
отправить на LUA и прочитать на Arduino Get запрс получается, сделать ответ в Ардуино тоже нет проблем, НО как прочитать ответ в LUA клиенте не могу понять.....
Прошу помощи. Подскажите как прочитать строку ответа в LUA?
 

Вложения

DmitryS

New member
Вам человек и написал скетчи которые сразу прошиваются в ESP8266 без использования платы Arduino.
для ESP я использую ESPlorer там файлы *.lua , а вот *.ino да и так судя по коду это ардуино .....

отсюда вопрос у меня: научите меня как эти скетчи залить ESP

честно не знаю... может я слишком сложные программы использую...
 

DmitryS

New member
спасибо. буду изучать... если кто наткнется на это сообщение, знайте у меня это все заработало на ARDUINO IDE 1.6.5
 

Dev

New member

Dronvip

Member
@Dev это все хорошо... но у меня другая проблема теперь. не получается сделать на одной плате и точку доступа и сервер. а если на разных то все ок
 

AlexRyg

New member
@Dev Вот вырезка из Вашего скетча:
Код:
#include <ESP8266WiFi.h>
WiFiClient client;
int stat=0;
const char* ssid     = "ROBOTECH";
const char* password = "robotech";
const char* host = "192.168.4.1";
const int port = 80;
void setup() {
  Serial.begin(115200);
  delay(10);
  WiFi.begin(ssid, password);
  delay(500);

  }
void loop() {

  client.connect(host, port);
 
 
 
 
 
 
  }
Это то, что мне понятно, дальше не пойму как сделать то, что мне нужно.
ПО ходу вопрос по поводу const char* host = "192.168.4.1"; Можно ли обращаться не через IP, а по имени сайта, т.к. нет выделенного IP.
А нужно следующее:
Есть 2 переменные с датчика температуры и влажности, подключенного к Ардуино. Ардуино присваивает значения этим переменным, а далее нужно по ВайФай модулю передать их на страницу в интернете на страницу add_data.php (которая находится на определенном хостинге, например host.ru).
Например tr_22=24, hr_22=58
Используя Езернет я передаю данные вот так:
Код:
 if (client.connect(server, 80))
{
    client.print("GET /add_data.php?tr_22=");
    client.print(24);
    client.print("&hr_22=");
    client.print(58);

    client.println(" HTTP/1.1");
    client.print("Host: ");
    client.println(server);
    client.println("Connection: close");
    client.println();
    delay(100);
      client.stop();
      client.flush();
Или в строке браузера пишу host.ru/add_data.php?tr_22=24&hr_22=58
страница принимает эти данные и успешно обрабатывает.
Как будет выглядеть подобный запрос передачи через ВайФай модуль esp8266?
Я понимаю, что можно организовать эту процедуру и без Ардуино, но мне нужно именно через Ардуино
Здесь есть что-то подобное http://esp8266.ru/forum/threads/otpravka-get-zaprosa-na-sajt.406/#post-7456
Но это для прошивки модуля, ардуино этим скетчем не прошить.
 

AlexRyg

New member
esp8266 можно как-то коннектиться по веб адресу типа host.ru, а не по IP?
Если да, то как это делается?
 

AlexRyg

New member
Блин, так просто... я пробовал, не получалось... видимо в другом была проблема... а попробовал верняковый хост
api.thingspeak.com - работает.
 

AlexRyg

New member
не проходят данные на мой хост. Не пойму почему

ошибку не выдает, но и файл add_data.php не получает переменную (константу)
php файл на сервере работает нормально, он записывает полученное значение в базу данных, и база данных принимает переменную.
Проверял так: отправляю команду в строке браузера http://doda-media.com/add_data.php?tr_22=89
число без проблем записывается в базу данных. Что не так... не пойму
 

fandy

Member
Проверять надо не в браузере а в терминале (например в telnet), хотя это и неудобно.
Короче, пишите следующее:
string cmd ="GET /add_data.php&tr_22=89 HTTP/1.0\r\nHost: 192.168.0.1\r\n\r\n";
Вместо 192.168.0.1 понятно надо адрес Вашего сервера написать.
Пустая строка после заголовка принципиальна.
 
Сверху Снизу