Как подключить Arduino с модулем WiFi ESP8266-11 к 000webhost (бесплатный хостинг)

Я хочу узнать, как подключить Arduino к моему сайту на 000webhost.com (бесплатный аккаунт веб-хостинга). Я использую модуль ESP-11 WiFi, и он подключен к Интернету.

Это мой код Arduino:

#include <SoftwareSerial.h>
SoftwareSerial ESP11 = SoftwareSerial(10,11); // RX, TX
#define DEBUG true

// ДЕКЛАРАЦИЯ WIFI SHIELD
String ssid = "\"SampleSSID\"";
String pass = "\"SamplePass\"";
String tcp = "\"TCP\"";
String remoteip = "\"jvystocksystem.000webhostapp.com\"";
String portnum = "80";

void setup(){          
  ESP11.begin(9600);
  Serial.begin(9600);
  sendData("AT+CWMODE=1\r\n",2000,DEBUG); // настроить как точку доступа и Клиента
  sendData("AT+RST\r\n",2000,DEBUG); // сброс модуля
  sendData("AT+GMR\r\n",2000,DEBUG); // Просмотр информации о версии
  sendData("AT+CWLAP\r\n",5000,DEBUG); // Список всех доступных точек доступа*/
  sendData("AT+CWJAP=" + ssid + "," + pass + "\r\n",10000,DEBUG); // Подключиться к точке доступа
  sendData("AT+CIFSR\r\n",2000,DEBUG); // получить IP-адрес
  sendData("AT+CIPMUX=0\r\n",2000,DEBUG); //Отдельные TCP-соединения
  sendData("AT+CIPSTART="+ tcp +"," + remoteip + "," + portnum + "\r\n",3000,DEBUG); // Начать подключение к localhost <link id>,<type>,<remote IP>,<Port Number>

  String getStr = "GET /getCpno.php?user_type=admin HTTP/1.0"; // Получение информации из моей онлайн-базы данных через мой онлайн-сайт
  getStr += "\r\n\r\n";
  String cmd;
  // длина отправки данных
  cmd = "AT+CIPSEND=";
  cmd += String(getStr.length());
  sendData(cmd + "\r\n",1000,DEBUG);
  sendData(getStr,3000,DEBUG);
}


void loop() {
  // поместите сюда свой основной код для многократного выполнения:
// Для ESP8266
  if(ESP11.available()) // проверяем, отправляет ли esp сообщение
  {


    if(ESP11.find("+IPD,"))
    {
     delay(1000); // ждем заполнения последовательного буфера (читаем все последовательные данные)
     // получаем идентификатор соединения, чтобы затем можно было отключиться
     int connectionId = ESP11.read()-48; // вычитаем 48, так как функция read() возвращает
                                           // десятичное значение ASCII и 0 (первое десятичное число) начинается с 48

     ESP11.find("pin="); // переместить курсор на "pin="

     int pinNumber = (ESP11.read()-48)*10; // получаем первое число, т.е. если пин 13, то первое число равно 1, затем умножаем, чтобы получить 10
     pinNumber += (ESP11.read()-48); // получаем второе число, т.е. если номер пина равен 13, то второе число равно 3, затем прибавляем к первому числу

     digitalWrite(pinNumber, !digitalRead(pinNumber)); // переключить вывод

     // выполнить команду закрытия
     String closeCommand = "AT+CIPCLOSE="; 
     closeCommand+=connectionId; // добавить идентификатор соединения
     closeCommand+="\r\n";

     sendData(closeCommand,1000,DEBUG); // закрыть соединение
    }
  }
}

/*
* Name: sendData
* Description: Function used to send data to ESP8266.
* Params: command - the data/command to send; timeout - the time to wait for a response; debug - print to Serial window?(true = yes, false = no)
* Returns: The response from the esp8266 (if there is a reponse)
*/

String sendData(String command, const int timeout, boolean debug)
{

    String response = ""; // ESP8266 sendData Строка
    ESP11.print(command); // отправляем прочитанный символ в esp8266

    long int time = millis();

    while( (time+timeout) > millis())
    {
      while(ESP11.available())
      {

        // В esp есть данные, поэтому отобразите их вывод в последовательном окне
        char c = ESP11.read(); // прочитать следующий символ.
        response+=c;
      }  
    }

    if(debug)
    {
      Serial.print(response);

    }
    return response;
}

Но мой код не возвращает нужное мне значение из базы данных, вместо этого я получаю это в своем последовательном мониторе:

Последовательный монитор

Надеюсь, вы, ребята, сможете помочь мне с моим кодом.

, 👍1


1 ответ


Лучший ответ:

1

Веб-сервер использует виртуальные хосты. Если вы не сообщите ему, к какому виртуальному хосту вы делаете запрос, сервер не будет знать, куда отправить запрос, и выдаст ошибку.

Вам необходимо добавить требуемый заголовок Host, который сообщит ему именно это.

Составьте правильный запрос следующим образом:

String getStr = "GET /getCpno.php?user_type=admin HTTP/1.1\r\n";
getStr += "Host: jvystocksystem.000webhostapp.com\r\n"; // добавляем требуемый заголовок
getStr += "\r\n";
,