• Система автоматизации с открытым исходным кодом на базе 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]
 
Сверху Снизу