• Система автоматизации с открытым исходным кодом на базе 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 понятно надо адрес Вашего сервера написать.
Пустая строка после заголовка принципиальна.
 
Сверху Снизу