Отправка данных о температуре и почве с использованием esp8266-01 через software serial

Код, который я использовал, был из Интернета, и я пытался использовать его для отправки данных в firebase через веб-сервер. Но вывод, который я получаю от последовательного монитора, был просто «ATE0», что означает, что что-то не так. Следовательно, я не могу приступить к решению этой проблемы.

Я испробовал несколько ресурсов в Интернете, чтобы решить мою текущую проблему.

Я надеюсь, что кто-то может мне помочь

Спасибо :)

#include <SoftwareSerial.h>;
SoftwareSerial Serial1(10, 11);
#include "DHT.h"
#define Terra "terra1"
#define DHTPIN 2    

#define DHTTYPE DHT22   

DHT dht(DHTPIN, DHTTYPE);

//const int rs = 7, en = 6, d4 = 5, d5 = 4, d6 = 3, d7 = 2; эйагагана соя

int j=0;
int prev=0;
int pres=0;
String status="";
String buff(64);
String getStr(128);

void setup() {

  Serial.begin(9600);
  Serial1.begin(9600);
// Serial.println(F("Датчики влажности и влажности почвы"));
  delay(2000);
  Serial1.setTimeout(5000);
  dht.begin();

   if (!connectWiFi()) {
    Serial.println("Can not connect to the WiFi.");
    while (true)
      ; // ничего не делать
  }
  Serial.println("OK, Connected to WiFi.");
  sendCommand("AT+CIPSTA?");
  sendCommand("AT+CIPDNS_CUR?");
  sendCommand("AT+CIPSTAMAC?");

}

void loop() {
 j=analogRead(A0);
  j=map(j,0,982,148,0);
  pres=j;
  if(j>100)
  j=100;
  else if(j<0)
  j=0;



  prev=j;
  delay(1000);

  float h = dht.readHumidity();
  // Чтение температуры в градусах Цельсия (по умолчанию)
  float t = dht.readTemperature();
  // Чтение температуры в градусах Фаренгейта (isFahrenheit = true)
  float f = dht.readTemperature(true);

  // Проверяем, не завершились ли какие-либо операции чтения, и выходим досрочно (чтобы повторить попытку).
// if (isnan(h) || isnan(t) || isnan(f)) {
// Serial.println(F("Не удалось прочитать с датчика DHT!"));
// возвращаться;
// }

  // Расчет теплового индекса в Фаренгейтах (по умолчанию)
  float hif = dht.computeHeatIndex(f, h);
  // Расчет теплового индекса в градусах Цельсия (isFahreheit = false)
  float hic = dht.computeHeatIndex(t, h, false);

// Serial.print(F("Влажность: "));
// Serial.print(h);
// Serial.print(F("% Температура: "));
// Serial.print(t);
// Serial.print(F("°C"));
// Serial.print(("Влажность почвы: "));
// Serial.print(j);
// Serial.println("%");



// подключаемся к серверу
  if (sendCommand("AT+CIPSTART=\"TCP\",\"https://terraduino.000webhostapp.com\",80")) {
    Serial.println("connected to Cloud");
    // формируем HTTP-запрос
    getStr = "GET /upload.php?terra=";
    getStr += Terra;
    getStr += "&j=";
    getStr += j;
    getStr += "&t=";
    getStr += t;
    getStr += "&h=";
    getStr += h;
    getStr += " HTTP/1.1\r\n";
    //ВЕБ СЕРВЕР
    getStr += "Host: https://terraduino.000webhostapp.com\r\n\r\n";
    // открываем буфер отправки
    buff = "AT+CIPSEND=";
    buff += getStr.length();
    if (sendCommand(buff.c_str()) && Serial1.find(">")) { // прошивка АТ готова принимать данные
      // отправляем HTTP-запрос
      Serial.println(getStr);
      Serial1.print(getStr);
      // вывести HTTP-ответ
      if (Serial1.find("+IPD,")) { // получен ответ
        int l = Serial1.parseInt();
        while (l > 0) {
          if (Serial1.available()) {
            Serial.write(Serial1.read());
          }
        }
        Serial.println("--------------");
      } else {
        Serial.println("no response");
      }
    } else {
      Serial.println("send error");
    }
    sendCommand("AT+CIPCLOSE");
  } else {
    Serial.println("Error connecting");
  }
}
bool connectWiFi() {
  if (!sendCommand("ATE0")) // эхо выключено
    return false;
  if (!sendCommand("AT+CIPMUX=0")) // установить режим одиночного соединения
    return false;
  if (!sendCommand("AT+CWMODE=1")) // установить режим STA
    return false;

  return sendCommand("AT+CWJAP=\"I Pronounce you Man and Wifi\",\"-PX?*[email protected]\"");
}
bool sendCommand(const char* cmd) {
  Serial.println(cmd);
  Serial1.println(cmd);
  while (true) {
    buff = Serial1.readStringUntil('\n');
    buff.trim();
    if (buff.length() > 0) {
      Serial.println(buff);
      if (buff == "OK" || buff == "SEND OK" || buff == "ALREADY CONNECTED")
        return true;
      if (buff == "ERROR" || buff == "FAIL" || buff == "SEND FAIL")
        return false;
    }
  }
}

, 👍1

Обсуждение

Платы ESP определенно не подходят для начинающих. Проблема с ними в том, что на них могут быть очень разные версии прошивки. Например, вы не можете быть уверены, какую скорость передачи данных они используют. Итак, вам нужно выяснить, какую скорость передачи данных использует последовательный интерфейс. Вы настроили 9600 бит/сек, но большинству плат требуется 115200. Гуру Event ESP очищают ESP с помощью хорошо определенной прошивки: например, https://medium.com/@aallan/getting-started-with-the-esp8266-270e30feb4d1, @Peter Paul Kiefer

Было бы неплохо также добавить к вопросу полный вывод Arduino. Вывод помогает нам следить за программой и тем, как она выполняется., @Peter Paul Kiefer

спасибо, сэр, вывод был просто "ATE0", @Warren Paulino

Вы установили скорость передачи данных прошивки AT на 9600 бод? (кстати, я написал эту версию функции sendCommand), @Juraj

еще нет, сэр, офигенно!, @Warren Paulino

это не работает, @Warren Paulino

после того, как я загрузил минимальный минимум для разделения ESP-01 на arduino, я получил этот вывод. Оба NL и CR 115200 бод установлены в последовательном мониторе, ets 8 января 2013 г., первая причина: 4, режим загрузки: (3,0) сброс wdt загрузка 0x40100000, лен 1856, комната 16 хвост 0 контрольная сумма 0x63 загрузка 0x3ffe8000, длина 776, комната 8 хвост 0 контрольная сумма 0x02 загрузка 0x3ffe8310, длина 552, комната 8 хвост 0 контрольная сумма 0x79 сумма 0x79 2-я загрузочная версия: 1.5 Скорость SPI: 40 МГц Режим SPI: DOUT Размер и карта флэш-памяти SPI: 8 Мбит (512 КБ + 512 КБ) перейти к запуску user1 @ 1000, @Warren Paulino

@Juraj нужна помощь, сэр, @Warren Paulino

Я подключил RX и TX Arduino и esp-01 соответственно при загрузке bareminimum и установил BL & NR и скорость передачи 115200, все равно не работает, @Warren Paulino

https://chat.stackexchange.com/transcript/85432/2018/11/7, @Juraj

короткая версия https://arduinoprosto.ru/q/57496/arduino-uno-with-esp8266-01-with-at, @Juraj

Возможный дубликат Arduino Uno с ESP8266-01 с AT, @Juraj

я уже читал эти статьи, @Warren Paulino


1 ответ


1

Я бы сказал, что вы застряли в функции sendCommand. Вы печатаете переменную cmd (cmd="ATE0") на терминал, а затем отправляете команду в ESP через Serial1 = Software Serial. Serial1 настроен на скорость передачи данных 9600 (Serial1.begin(9600)), это зависит от вашего ESP, но это может быть неправильно. Обычное значение — 115200 (Serial1.begin(115200)). Но поскольку это может варьироваться от платы к плате, это также может быть неправильно.

Если я прав, и вы настроили неправильную скорость передачи данных, команда не может быть понята ESP, и для нее может отсутствовать даже символ новой строки после команды.

Поэтому ESP ничего не отправляет обратно, а 'buff.length()' равно 0. Затем while(true) запускается, запускается и запускается... .

,

да, это была идея. Но я не могу вернуться к AT-командам, я проверил все провода и процесс прошел хорошо. вывод - это просто некоторая внутренняя информация и неизвестные случайные символы, напечатанные в мониторе последовательного порта., @Warren Paulino