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

Нужна помощь ESP8266 (ESP-01S) AT команда на GET/POST

pilityty

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

Питание от отдельной схемы. Модуль отзывается данными на USB-TTL адаптер.
с помощью команд перевел его в режим клиента, зарегистрировался в домашней wi-fi сети.
А сделать GET или POST запрос не могу :(

после того как модуль загружается , он конектится к дом. сети

[inline]
Ai-Thinker Technology Co. Ltd.

ready
WIFI CONNECTED
WIFI GOT IP
[/inline]

Далее, ввожу команды:
[inline]
AT+CIPSTART="TCP","192.168.1.2",80
AT+CIPSEND=123
GET http://192.168.1.2/index.php?token=132&sensor=dht11&temp=-25 HTTP/1.1\r\n Host: 192.168.1.2\r\n Connection: close\r\n";
[/inline]

говорит:
[inline]
AT+CIPSTART="TCP","192.168.1.2",80 CONNECT

OK
AT+CIPSEND=123
OK
>

busy s...

Recv 123 bytes


SEND OK
[/inline]

т.е. команды отданы на сервер и собственно вроде бы все ок.
но на сервер нужные данные так и не доходят.

выкладываю php код index.php

[inline]
<?php
$file = "logGetParams.txt";
$getParam = var_export($_REQUEST, true).PHP_EOL;
file_put_contents($file, $getParam, FILE_APPEND | LOCK_EX);
?>
[/inline]

пример файла лога, как должен быть, при отправке примерно такого - http://192.168.1.2/?token=132&sensor=dht11&temp=-25
[inline]
array (
'token' => '132',
'sensor' => 'dht11',
'temp' => '-25',
)
array (
'token' => '132',
'sensor' => 'dht11',
'temp' => '-25',
)
[/inline]
 

pilityty

New member
Подскажите правильные АТ команды, или как организовать Arduino - ESP8266 связку, видел много скетчей про то, что к ESP8266 саму шьют и она сама логику и отправку делает, но недавно статьи прочитал, что есть нынче проблема с драйверами к памяти модуля, что окирпичевает данное устройство.

Как ардуине связаться с модулем как с модемом, при использовании библиотек:
<ESP8266WiFi.h> / <ArduinoJson.h> (если передавать не по GET а по POST в JSON контейнере всю инфу)
 

CodeNameHawk

Moderator
Команда форума
AT+CIPSTART="TCP","192.168.1.2",80

По идеи вы уже подключились к 192.168.1.2, так что здесь
GET http://192.168.1.2/index.php?token=132&sensor=dht11&temp=-25 HTTP/1.1\r\n Host: 192.168.1.2\r\n Connection: close\r\n";
адрес уже не нужен.

Get data from website with ESP8266 using AT commands

Намного проще сделать в ардуиноиде на самой есп.
https://esp8266.ru/forum/threads/programmirovanie-shag-za-shagom.1815/
 
Последнее редактирование:

pilityty

New member
подскажите правильную AT команду для отправки хотя-бы GET запроса.

так же @CodeNameHawk , подтверди или опровергни такой тезис:

Возможна ли такая связка ардуино + esp8266.
Ардуино имеет несколько датчиков и реле, связывается по Serial с ESP8266, которая сама (имея на борту скетч с библиотеками <ESP8266WiFi.h> и <ArduinoJson.h>) коннектится к Wi-Fi и в зависимости от запроса Ардуинки - отправляет или принимает JSON пакет на сервер. В случае приема, отправляет данные в адуинку.
 

pilityty

New member
Так же у меня версия AT команд на ESP8266 = 1.2 и такие вот команды не работают -
AT+CIPSTART=4,"TCP","192.168.1.2",80 Работает так - AT+CIPSTART,"TCP","192.168.1.2",80
 

CodeNameHawk

Moderator
Команда форума
подтверди или опровергни такой тезис:
Есть такое волшебное слово пожалуйста.
Возможна ли такая связка ардуино + esp8266.
Возможна.
От АТ отказался, нет возможности использовать есп по полной.
Начни с простого
GET /index.html HTTP/1.1
 

pilityty

New member
спасибо большое. какую прошивку используешь для модуля? какая лучше ?
 

pilityty

New member
@CodeNameHawk , я могу на ардуино IDE сразу залить прошивку в ESP8266, ту что мне нужна с библиотекой <ESP8266WiFi.h> ?
или предварительно нужно ESP прошить NODEMCU FLASHER на какуюто прошивку? например LUA
 

pilityty

New member
пробовал AT командами GET сделать в режимах AT+CIPMUX=0 и AT+CIPMUX=1
В итоге ничего не получилось. взял запрос с браузера и пробовал конец строки как для винды \r\n , так и от линуха \n
приходит ответ от сервера 400 ошибка - неправильный запрос О_О. Чтож АТ команды глючны из коробки, хотя при команде на версию прошивки - отвечает номером прошивки свежей версии :(
 

CodeNameHawk

Moderator
Команда форума
я могу на ардуино IDE сразу залить прошивку в ESP8266
ардуино IDE создает "полную" прошивку, предварительно в есп ничего заливать не нужно. (АТ прошивка пропадет)
Для начала работы с есп в ардуиноиде почитайте https://esp8266.ru/arduino-ide-esp8266/ и https://esp8266.ru/arduino-ide-esp8266/#fast-start
 

pilityty

New member
  1. в итоге отказался от AT команд полностью. Допиливаю прошивку для ESP8266 и выложу тут. Идея - Оснвные мозги и руки Ардуино, ESP8266 - вай фай моем для передачи GET запросов. Ардуино будет проси отправить и принять информацию с сервера через ЕСП8266.
 

pilityty

New member
Написал скетч для ESP8266 кому нужно берите. Смысл таков: Ардуино либо отдает данные ESP8266, либо их принимает.
При запросе на получение данных, Ардуино отправляет в Serial строку "GET", ESP8266 ее принимает и отправляет на сервер и далее скрипт на сайте отдает данные, у меня в JSON строке, далее ESP8266 отдает данный JSON в Ардуино. Далее в Ардуине делайте что хотите.
При запросе на передачу данных от сенсоров в Ардуине, Ардуино отправляет в Serial строку например "&sensor=dht11&h=63&t=24" и далее ESP8266 отдает на сервер и ничего не присылает Ардуине.

Отправлять данные начинать с Ардуины стоит после 5-7 секунд после включения ESP8266.

Почти вся отладачная информация закомментирована, если она вам нужна то она начинается со строк
//USE_SERIAL.printf или //USE_SERIAL.print

код на странице index.php сайта находящегося на ip 192.168.1.2
[inline]
$file = "logGetParams.txt";
$getParam = var_export($_REQUEST, true).PHP_EOL;
file_put_contents($file, $getParam, FILE_APPEND | LOCK_EX);
if(isset($_REQUEST['type']) && $_REQUEST['type'] == "get") echo '{"a1":["rel1":"on"],"a2":["rel1":"on"]}';
[/inline]

код для ESP8266
[inline]
/**
* create 11.02.2018
*
* BasicHTTPClient.ino
* reconfig for my pet project
* recive data from arduino on esp8266 in server
*/

#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266HTTPClient.h>

#define USE_SERIAL Serial

ESP8266WiFiMulti WiFiMulti;

void setup() {

USE_SERIAL.begin(115200);
// 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] WAIT %d...\n", t);
USE_SERIAL.flush();
delay(1000);
}

WiFi.mode(WIFI_STA);
WiFiMulti.addAP("WIFI", "X90X170X2X0");
}

void loop() {
// wait for WiFi connection
if((WiFiMulti.run() == WL_CONNECTED)) {
USE_SERIAL.print("redy listening\n");

HTTPClient http;
//type=post - send dats to server
String hostresource = "http://192.168.1.2/index.php?type=post";
String request = "";
if(USE_SERIAL.available()){
request = USE_SERIAL.readStringUntil('\n');
hostresource = hostresource+request+"\n";
//type=post - get command dats server in arduino
if(request.indexOf("GET") >= 0){
hostresource = "http://192.168.1.2/index.php?type=get&token=asdw123a414";
}
//USE_SERIAL.print("Recive request "+hostresource+" \n");
// send start client begining
//USE_SERIAL.print("[HTTP] begin...\n");
// configure traged server and url
//http.begin("https://192.168.1.12/test.html", "7a 9c f4 db 40 d3 62 5a 6e 21 bc 5c cc 66 c8 3e a1 45 59 38"); //HTTPS
//http.begin("http://192.168.1.2/index.php?type=wait&sensor=dht11&data=none"); //HTTP

http.begin(hostresource); //HTTP

//USE_SERIAL.print("[HTTP] SEND DATA \n");
// start connection and send HTTP header
int httpCode = http.GET();
// httpCode will be negative on error
if(httpCode > 0) {
// HTTP header has been send and Server response header has been handled
//USE_SERIAL.printf("[HTTP] GET... code: %d\n", httpCode);
// file found at server
if(httpCode == HTTP_CODE_OK) {
String payload = http.getString();
USE_SERIAL.println(payload);
}
} else {
String payload = http.getString();
USE_SERIAL.println(payload);
//USE_SERIAL.printf("\n\n[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
}
http.end();
}
}

delay(10000);
}

[/inline]
 
Сверху Снизу