Невозможно получить данные с сервера с помощью arduino и esp8266
Я пытаюсь получить некоторые данные со своего веб-сайта с помощью esp8266 и Arduino с помощью библиотеки WiFiEsp. Я получил данные с веб-сайта, но не знаю, как сохранить эти данные в массиве или переменной и использовать их. Теперь я могу видеть полученные данные только на последовательном мониторе.
#include "WiFiEsp.h"
#ifndef HAVE_HWSERIAL1
#include "SoftwareSerial.h"
SoftwareSerial Serial1(6, 7); // RX, TX
#endif
char ssid[] = "moto g"; // SSID вашей сети (имя)
char pass[] = "hvats555"; // ваш сетевой пароль
int status = WL_IDLE_STATUS; // статус радио Wi-Fi
char server[] = "himalayavats.com";
unsigned long lastConnectionTime = 0;
const unsigned long postingInterval = 10000L;
WiFiEspClient client;
void setup()
{
// инициализируем последовательный порт для отладки
Serial.begin(115200);
// инициализируем серийный номер для модуля ESP
Serial1.begin(9600);
// инициализируем модуль ESP
WiFi.init(&Serial1);
// проверка наличия щита
if (WiFi.status() == WL_NO_SHIELD) {
Serial.println("WiFi shield not present");
// не продолжать
while (true);
}
// попытка подключения к сети WiFi
while ( status != WL_CONNECTED) {
Serial.print("Attempting to connect to WPA SSID: ");
Serial.println(ssid);
// Подключиться к сети WPA/WPA2
status = WiFi.begin(ssid, pass);
}
Serial.println("You're connected to the network");
printWifiStatus();
}
void loop()
{
// если есть входящие данные из сетевого соединения, отправьте их на последовательный порт
port
// это только для отладки
while (client.available()) {
char c = client.read();
Serial.print(c);
}
// если с момента последнего подключения прошло 10 секунд,
// затем снова подключитесь и отправьте данные
if (millis() - lastConnectionTime > postingInterval) {
httpRequest();
}
}
// этот метод устанавливает HTTP-соединение с сервером
void httpRequest()
{
Serial.println();
// закрыть все соединения перед отправкой нового запроса
// это освободит гнездо на WiFi-шилде
client.stop();
// если соединение успешно установлено
if (client.connect(server, 80)) {
Serial.println("Connecting...");
// отправьте HTTP-запрос PUT
client.println(F("GET /to_fetch/system_info.json HTTP/1.1"));
client.println(F("Host: himalayavats.com"));
client.println("Connection: close");
client.println();
// отметьте время установления соединения
lastConnectionTime = millis();
}
else {
// если вы не смогли установить соединение
Serial.println("Connection failed");
}
}
void printWifiStatus()
{
// распечатать SSID сети, к которой вы подключены
Serial.print("SSID: ");
Serial.println(WiFi.SSID());
// распечатать IP-адрес вашего WiFi-щита
IPAddress ip = WiFi.localIP();
Serial.print("IP Address: ");
Serial.println(ip);
// распечатать уровень принятого сигнала
long rssi = WiFi.RSSI();
Serial.print("Signal strength (RSSI):");
Serial.print(rssi);
Serial.println(" dBm");
}
Ответ от arduino (в последовательном мониторе):-
[WiFiEsp] Initializing ESP module
[WiFiEsp] Initilization successful - 1.3.0
Attempting to connect to WPA SSID: moto g
[WiFiEsp] Connected to moto g
You're connected to the network
SSID: moto g
IP Address: 192.168.43.61
Signal strength (RSSI):-372 dBm
[WiFiEsp] Connecting to himalayavats.com
Connecting...
HTTP/1.1 200 OK
Date: Fri, 05 Jan 2018 10:19:46 GMT
Server: Apache
ETag: "12c077d-12-55dc4cfa4fffd"
Accept-Ranges: bytes
Content-Length: 18
Vary: User-Agent
Connection: close
Content-Type: application/json
{"power" : "high"} // <-- я хочу получить это
ПРИМЕЧАНИЕ:- Всякий раз, когда я пытаюсь добавить что-либо в функцию цикла, например:-
int i = 0;
while(client.avilable()){
c = client.read();
serverResponse[i] = c; // попытка сохранить вывод в массиве
i++;
}
Модуль даже не получает данные с сервера, он постоянно перезапускается. Вывод из arduino после добавления вышеуказанного кода в функцию цикла:-
[WiFiEsp] Initializing ESP module
[WiFiEsp] Initilization successful - 1.3.0
Attempting to connect to WPA SSID: moto g
[WiFiEsp] Connected to moto g
You're connected to the network
[WiFiEsp] Initializing ESP module
[WiFiEsp] Initilization successful - 1.3.0
Attempting to connect to WPA SSID: moto g
[WiFiEsp] Connected to moto g
You're connected to the network
[WiFiEsp] Initializing ESP module
[WiFiEsp] Initilization successful - 1.3.0
Attempting to connect to WPA SSID: moto g
[WiFiEsp] Connected to moto g
You're connected to the network
Это повторяется снова и снова
@Himalya vats, 👍0
Обсуждение1 ответ
Когда Arduinos неожиданно перезапускается, это обычно происходит из-за того, что вы потребляете слишком много энергии или вызываете ошибку сегментации или BSOD в терминах Windows. Вы не потребляете слишком много энергии, поэтому я подозреваю, что вы обращаетесь к элементам массива за пределами тех, к которым должны.
Убедитесь, что i никогда не превышает максимальный размер serverResponse, потому что:
char serverResonse[10]
for int i - 0; i < 50; i++)
serverResponse[i] = 42; // Это приведет к сбою на 11-м цикле.
Я не могу сказать, вызовет ли приведенный выше код перезапуск, но это зависит от того, что использовало 11-й байт массива до того, как он был растоптан.
- AT-команда не отвечает на последовательный монитор
- Arduino выводит значения мусора на serial monitor с ESP8266
- Отправка данных Arduino в MySQL с помощью phpMyAdmin и XAMPP на Windows10
- ошибка: espcomm_upload_mem failed при загрузке скетча
- фатальная ошибка ESP8266WiFi.h: Такого файла или каталога нет
- Как подключить Wi-Fi Shield ESP-12E-ESP8266-UART-WIFI-Wireless-Shield к Arduino
- Получить данные с сайта с помощью ESP8266 с помощью AT-команд
- Как узнать IP-адрес, назначенный ESP8266?
данные и http-заголовок разделены пустой строкой. затем см. библиотеку ArduinoJson, @Juraj
@Юрай, можешь объяснить, пожалуйста, данные и заголовки отдельно, пустой строкой? Это нормально? Вывод Arduino точно такой же., @Himalya vats
то, что вы напечатали, является HTTP-ответом. Начинается со строки состояния HTTP/1.1, затем идут HTTP-заголовки. Пустая строка отделяет заголовок от тела. В теле находятся ваши данные. Попробуйте использовать библиотеку ArduinoHttpClient поверх WiFiEspClient, если вы не хотите анализировать ответ самостоятельно., @Juraj