HTTP Post данные с Arduino uno с помощью Wi-Fi

All commands are shows as success but there is no response from the webpage to that data is posting.Пожалуйста, помогите мне разместить данные с arduino uno на веб-странице, используя модуль wifi (ESP-01). Я пытаюсь использовать AT-команды, но они не дали ответа с моей веб-страницы


#include <SoftwareSerial.h>
#include <ArduinoJson.h>
#define DEBUG true

#define RX 10
#define TX 11
String WIFI_SSID = "*****";       // Ваш ssid Wi-Fi
String PASSWORD = "*****";         // Пароль
//Строка DEVICE_SECRET_KEY = "**";

//ПУТЬ к строке = "/v1/события";
//Строковый ПОРТ = "8000";
//String ХОСТ = "http://10 .**.***.66:8000/данные";

String HOST = "10.**.240.**";
String PATH = "/data";
String PORT = "8000";

String response;
int countTrueCommand;
int countTimeCommand;
boolean found = false;

SoftwareSerial esp8266(RX, TX);
StaticJsonBuffer<200> jsonBuffer;
JsonObject& root = jsonBuffer.createObject();

void setup()
{
  Serial.begin(115200);
  esp8266.begin(115200);
  esp8266.println("AT");
  Serial.println(esp8266.read());
  sendCommandToESP8266("AT", 5, "OK");
   sendCommandToESP8266("AT+CWMODE=3", 5, "OK");
  sendCommandToESP8266("AT+CWJAP=\"" + WIFI_SSID + "\",\"" + PASSWORD + "\"", 20, "OK");
}

void loop()
{
  root["key"] =  "sdfsdfsd";
  String key;
  root.printTo(key);
  String postRequest =   "POST " + PATH  + " HTTP/1.1\r\n" +
                         "Host: " + HOST + "\r\n" +
                         "Accept: *" + "/" + "*\r\n" +
                         "Content-Length: " + key.length() + "\r\n" +
                         "Content-Type: application/json\r\n"
                         "\r\n" + key;
  Serial.print("pst:" + postRequest);
  sendCommandToESP8266("AT+CIPMUX=1", 5, "OK");
  sendCommandToESP8266("AT+CIPSTART=0,\"TCP\",\"" + HOST + "\"," + PORT, 15, "OK");
  String cipSend = "AT+CIPSEND=0," + String(postRequest.length());//GET /test.php?Data=2\r\nHost:192.168.1.13\r\n\r\n
  sendCommandToESP8266(cipSend, 4, ">");
  sendData(postRequest);

  while (esp8266.available())
  {
    if (esp8266.find("+IPD,"))
    {
// Строка msg;
      esp8266.find("?");
// msg = esp8266.readStringUntil(' ');
      response = esp8266.readStringUntil(' ');
      Serial.print(response);
      Serial.println();
    }
  }
  printResponse;



  // sendCommandToESP8266("AT+CIPCLOSE=0", 5, "OK");
}

void sendCommandToESP8266(String command, int maxTime, char readReplay[]) {
  Serial.print(countTrueCommand);
  Serial.print(". at command => ");
  Serial.print(command);
  Serial.print(" ");
  while (countTimeCommand < (maxTime * 1))
  {
    esp8266.println(command);
    if (esp8266.find(readReplay))
    {
      found = true;
      break;
    }

    countTimeCommand++;
  }

  if (found == true)
  {
    Serial.println("Success");
    countTrueCommand++;
    countTimeCommand = 0;
  }

  if (found == false)
  {
    Serial.println("Fail");
    countTrueCommand = 0;
    countTimeCommand = 0;
  }

  found = false;
}

void sendData(String postRequest) {
  Serial.println(postRequest);
  Serial.println();
  esp8266.println(postRequest);
  delay(15000);
  countTrueCommand++;
}

void printResponse() {
  while (esp8266.available()) {
    Serial.println();
    Serial.println(esp8266.readStringUntil('\n'));
  }
}

Пожалуйста, помогите мне получить ответ с веб-страницы, используя этот код.

, 👍1

Обсуждение

SoftwareSerial не работает на скорости 115200 бод. измените скорость передачи в бодах в прошивке AT и для SoftwareSerial на 9600 бод., @Juraj

@Juraj я пытаюсь изменить скорость передачи данных в бодах, но с моей веб-страницы по-прежнему нет ответа, @ASK

@Juraj Или, пожалуйста, дайте мне знать, если есть какой-либо другой способ отправить данные с arduino uno с помощью Wi-Fi.(Модуль ESP01). Я вижу много программ, которые используют ethernet и другие модули Wi-Fi., @ASK

если вам нужно что-то вроде библиотеки Ethernet, вы можете использовать мою библиотеку WiFiEspAT. но для этого требуется изменить прошивку AT в esp-01 на версию 1.7 https://github.com/jandrassy/WiFiEspAT/blob/master/README.md, @Juraj

@Juraj могу ли я использовать вышеупомянутую библиотеку с arduino uno и esp01? Я новичок в программировании на arduino, поэтому задаю эти вопросы., @ASK

библиотека WiFiEspAT обрабатывает AT-команды за вас. проводка такая же, как и у вас сейчас, @Juraj

@Juraj Я просто хочу знать, как изменить версию esp-01 на версию 1.7. Работает ли esp-01, когда версия не изменена?, @ASK

со старой прошивкой AT вы можете использовать старую библиотеку WiFiEsp., @Juraj

@Juraj _https: //github.com/bportaluri/WiFiEsp/blob/master/examples/ConnectWPA/ConnectWPA.ino_ Я пытаюсь использовать этот код, но он показывает, что wifi shield отсутствует., @ASK

установите 9600 бод в прошивке AT. библиотеки находятся в Диспетчере библиотек в IDE, @Juraj

@Juraj когда я использую библиотеку, я получаю следующий вывод на последовательном мониторе. [WiFiEsp] Инициализация модуля ESP [WiFiEsp] >>> ТАЙМ-АУТ >>> [WiFiEsp] >>> ТАЙМ-АУТ >>> [WiFiEsp] >>> ТАЙМ-АУТ >>> [WiFiEsp] >>> ТАЙМ-АУТ >>> [WiFiEsp] >>> ТАЙМ-АУТ >>> [WiFiEsp] Не удается инициализировать модуль ESP [WiFiEsp] >>> ТАЙМ-АУТ >>> [WiFiEsp] Тег не найден WiFi shield отсутствует , @ASK

вы установили скорость передачи данных на 9600 бод в прошивке и в sketch?, @Juraj

@juraj Извини!! Я забываю изменить скорость передачи данных в бодах. Теперь Wi-Fi подключается с помощью библиотеки esp. И не могли бы вы, пожалуйста, помочь мне опубликовать данные из arduino, используя эту библиотеку, и как получить ответ обратно с сервера., @ASK

@juraj когда я пытаюсь отправить данные с arduino на веб-страницу, он не отправляет данные и не подключается к серверу последовательный монитор показывает как : Начинаю подключение к серверу... [WiFiEsp] Подключение к xxx.xx.xxx.xx [WiFiEsp] >>> ТАЙМ-АУТ >>> [WiFiEsp] >>> ТАЙМ-АУТ >>> [WiFiEsp] Тег не найден Отключение от сервера... , @ASK


1 ответ


1

Шаг 1) Загрузите software serial из примера и отправьте по адресу, вы должны получить ответ как В OK, если ваши подключения верны. Шаг 2) Как только ваши подключения будут правильными, и если вы загружаете данный код, убедитесь, что вы ввели свой SSID, пароль и IP-адрес сервера, который будет состоять из трех строк: ХОСТ, ПУТЬ и ПОРТ.

В качестве альтернативы вы можете сначала проверить свой сервер, отправив ему GET или POST с помощью своего браузера или другого программного обеспечения для тестирования API (я лично использую POSTMAN).

После выполнения этих проверок продолжайте работу.

,

Я попробовал это и до сих пор не получил ответа с веб-страницы. Также у API нет проблем, когда я его проверяю., @ASK

Вы пробовали выполнить проверку по команде AT? Загрузите software serial, и вы сможете вручную вводить команды AT и проверять, где вы ошибаетесь., @Asim Merchant

У меня есть с собой 2 модуля esp-01. Я думаю, что один из моих esp поврежден. Но другой работает при проверке по команде AT., @ASK

Теперь вы можете проверить каждую команду, которая используется через последовательный интерфейс программного обеспечения. Например, согласно вашему коду, если вы отправите "AT + CWMODE = 3", вы получите ответ OK. Вы можете выполнить полный post-запрос просто с помощью программного обеспечения serial, вводя команды одну за другой. Это хорошая практика, так как это поможет вам понять, в какой момент ваш код идет не так., @Asim Merchant

Я попытался, отправив все AT-команды, и я останавливаюсь, где AT + CIPSTART=0, "TCP", "xx.xxx.xxx.xx", "порт" из этой команды я получил сообщение об ошибке. что я могу сделать, чтобы сделать это правильно?, @ASK

Попробуйте выполнить эту команду ПО АДРЕСУ+CIPSTART="TCP","192.168.3.116", 8080 Соответствующим образом измените IP-адрес и порт сервера. 0 указывает идентификатор соединения в AT+CIPSTART=0, "TCP", "xx.xxx.xxx.xx", "порт". Я обнаружил, что идентификатор используется только для UDP-соединения в примере команды espressif at. Я сослался на это [link](https://www.espressif.com/sites/default/files/documentation/4b-esp8266_at_command_examples_en.pdf). Выполняли ли вы AT-команды в последовательности, указанной в вашем вопросе?, @Asim Merchant

Я проверяю с помощью AT-команд. Но ПРИ +CIPSTART="TCP","192.168.3.116",8080 эта команда не работает. Я не понимал, в чем проблема. Все остальные команды перед AT+CIPSTART работают с модулем., @ASK