CCat
Member
Здравствуйте! Залил через Arduino IDE следующий скетч для использования ESP8266 вместе с Arduino Nano - Arduino дает команды, когда коннектиться, какой у нас пароль и имя точки доступа, с которой надо соединиться, и по какому URL сделать запрос.
Сначала командую "connectWifi", после ответа "esp_connected" командую "getFromWifi" и вроде все ОК - получаю нужную мне строку.
Но чувствую, что-то не докрутил, чтобы ESP "покрасить и забыть".
Например, в строках 34-36 моего письма, любезная Катерина Матвевна
(взято из примера) - это ж вроде бесконечный цикл получится, если коннекта так и не произойдет.
И вообще, может, нужна какая-то доработка типа "что-то ты походу завис, дружок - дай я тебя перезагружу". Я ж вообще могу ногу RESET ESP8266 спокойно замкнуть на землю аппаратно на Arduino для сброса.
В общем, если кто-то что посоветует по нижеследующему коду в плане надежности - буду очень рад.
Сначала командую "connectWifi", после ответа "esp_connected" командую "getFromWifi" и вроде все ОК - получаю нужную мне строку.
Но чувствую, что-то не докрутил, чтобы ESP "покрасить и забыть".
Например, в строках 34-36 моего письма, любезная Катерина Матвевна
Код:
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
И вообще, может, нужна какая-то доработка типа "что-то ты походу завис, дружок - дай я тебя перезагружу". Я ж вообще могу ногу RESET ESP8266 спокойно замкнуть на землю аппаратно на Arduino для сброса.
В общем, если кто-то что посоветует по нижеследующему коду в плане надежности - буду очень рад.
Код:
#include <ESP8266WiFi.h>
#include "CommandsParser.h" //это для получения команд через serial
String connectWifi = "n";
char* ssid = NULL;
char* password = NULL;
String getFromWifi = "n";
char* host = NULL;
String url;
int start = 0;
CommandsParser cParser(Serial); // parse from Serial
void paramsHandler(const char* param, const char* value)
{
// здесь присваиваю значения connectWifi, ssid, password, getFromWifi, host, url по командам, пришедшим по serial
}
void setup() {
Serial.begin(9600);
delay(10);
cParser.begin(paramsHandler);
}
void loop() {
cParser.update();
if (connectWifi == "y") {
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
Serial.println("esp_connected");
connectWifi = "n";
}
if (getFromWifi == "y") {
WiFiClient client;
const int httpPort = 80;
if (!client.connect(host, httpPort)) {
Serial.println("esp_connection_failed");
return;
}
// запрос на сервер
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
unsigned long timeout = millis();
while (client.available() == 0) {
if (millis() - timeout > 5000) {
Serial.println("esp_client_timeout");
client.stop();
return;
}
}
// читаем тело ответа и берем нужное - от "{"
String body = "";
boolean httpBody = false;
while (client.available()) {
String line = client.readStringUntil('\r');
if (!httpBody && line.charAt(1) == '{') {
httpBody = true;
}
if (httpBody) {
body += line;
}
}
//Serial.print("status=ok&output=");
Serial.println(body);
getFromWifi = "n";
}
}