Arduino Uno с ESP8266-01 с AT

Вот схема, которой я следовал:

Schematic

Вот и ссылка: https://www.circuito.io/app?components=10167 ,11021,12083,13678,13959

#include "DHT.h"
#include "NewPing.h"
#include <SoftwareSerial.h>
#define DEBUG true

SoftwareSerial esp8266(11,10);

#define DHTPIN 2       // DHT-11
#define DHTTYPE DHT11   // Тип DHT - DHT 11 (AM2302)
#define TRIGGER_PIN 4
#define ECHO_PIN 3
#define MAX_DISTANCE 400

NewPing sonar(TRIGGER_PIN,ECHO_PIN,MAX_DISTANCE);

float hum;
float temp;   

DHT dht(DHTPIN, DHTTYPE); 

void setup()
{
  Serial.begin (9600);
  dht.begin();

  pinMode(TRIGGER_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);

  sendData("AT+RST\r\n",2000,DEBUG);            
  sendData("AT+CWMODE=2\r\n",1000,DEBUG);      
  sendData("AT+CIFSR\r\n",1000,DEBUG);          
  sendData("AT+CIPMUX=1\r\n",1000,DEBUG);      
  sendData("AT+CIPSERVER=1,80\r\n",1000,DEBUG); 
}

void loop() 
{
  delay(2000);  // Задержка, чтобы датчик DHT-11 мог стабилизироваться

  hum = dht.readHumidity();  // Получить значение влажности
  temp= dht.readTemperature();  // Получить значение температуры

  digitalWrite(TRIGGER_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIGGER_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIGGER_PIN, LOW);

  long duration,distance;
  duration = pulseIn(ECHO_PIN,HIGH);

  distance = duration/58.2;

  Serial.print("Humid: ");
  Serial.print(hum);
  Serial.print(" %, Temp: ");
  Serial.print(temp);
  Serial.print(" C, ");
  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.println(" cm");
  delay(50); 

  if(esp8266.available())
  is sending a message 
  {    
    if(esp8266.find("+IPD,"))
    {
      delay(1000);
      int connectionId = esp8266.read()-48;
      /* We are subtracting 48 from the 
         output because the read() function returns 
         the ASCII decimal value and the 
         first decimal number which is 0 starts at 48 */
      String webpage = "<h1>IOT Garbage Monitoring System</h1>";
      webpage += "<p><h2>";   
      if (distance<5)
      {
        webpage+= " Trash can is Full";
      }
      else{
        webpage+= " Trash can is Empty";
      }
      webpage += "</h2></p></body>";  
      String cipSend = "AT+CIPSEND=";
      cipSend += connectionId;
      cipSend += ",";
      cipSend +=webpage.length();
      cipSend +="\r\n";

      sendData(cipSend,1000,DEBUG);
      sendData(webpage,1000,DEBUG);    
      String closeCommand = "AT+CIPCLOSE="; 
      closeCommand+=connectionId; 
      closeCommand+="\r\n";
      sendData(closeCommand,3000,DEBUG);
    }
  } 
}

String sendData(String command, const int timeout, boolean debug)
{
  String response = "";   
  esp8266.print(command); 
  long int time = millis();
  while( (time+timeout) > millis())
  {
    while(esp8266.available())
    {
      char c = esp8266.read(); 
      response+=c;
    }  
  }
  if(debug)
  {
    Serial.print(response);
  }
  return response;
}

Я пытаюсь решить эту проблему уже почти неделю.

, 👍0

Обсуждение

Комментарии не предназначены для расширенного обсуждения; этот разговор был [перенесен на chat](https://chat.stackexchange.com/rooms/85432/discussion-on-question-by-xiaomy-arduino-uno-with-esp8266-01-with-at)., @Nick Gammon

* Это не форум. * Вопросы должны стоять сами по себе, а комментарии под вопросами должны содержать пояснения **, которые редактируются в вопросе **. Если есть дополнительная информация, которая помогла бы ответить на этот вопрос, она должна быть отредактирована в вопросе задавшим вопрос (ОП, а именно Xiaomy)., @Nick Gammon

@NickGammon, это то, что мы сделали. только потребовалось много уточняющих вопросов. разъяснения были отредактированы и подвергнуты Сомнению, @Juraj

@Juraj нужна ваша помощь, @Xiaomy

по теме в этой теме смотрите чат спасибо, сэр @Juraj, @Xiaomy

@Юрай https://chat.stackexchange.com/rooms/85432/discussion-on-question-by-xiaomy-arduino-uno-with-esp8266-01-with-at, @Xiaomy


1 ответ


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

0

Если вы хотите использовать esp-01 поверх SoftwareSerial, вы должны установить скорость передачи данных по умолчанию для микропрограммы AT на 9600 бод. Скорость передачи данных по умолчанию для прошивки AT составляет 115200 бод. SoftwareSerial не может работать с такой скоростью.

Чтобы изменить скорость передачи данных в бодах, у вас должен быть способ связи с микропрограммой AT со скоростью передачи данных по умолчанию 115200 бод. Вы можете использовать USB-адаптер Uno. Загрузите BareMinimal sketch из Examples в Uno, чтобы сделать его бесшумным, и подключите esp-01 к контактам RX и TX Uno.

Подключите RX к RX и TX к TX, чтобы иметь перекрестное соединение с USB Uno. Затем подключите последовательный монитор к esp-01 по адресу 115200 с набором "Оба символа конца строки". Попробуйте некоторые базовые команды AT, а затем все еще при 115200 бод отправьте команду, чтобы изменить скорость передачи данных по умолчанию ПРИ +UART_DEF=9600,8,1,0,0


В setup() в sketch begin for SoftwareSerial отсутствует. Добавить esp8266.begin(9600);


Контакт Uno 11 - это RX последовательного программного обеспечения, контакт 10 - TX. Вывод RX 11 должен соединяться с выводом TX esp-01. То же самое относится и к контакту TX 10. Он должен быть подключен к контакту RX esp-01.

На схеме Fritzing на выводе Uno 11 - зеленый провод, а на esp-01 TX - зеленый провод. Но зеленый провод находится по бокам преобразователя уровня не в одном и том же положении. Вывод состоит в том, что у вас RX подключен к RX, а не к TX. Переключите провода на лучший преобразователь уровня at.


Вывод 3,3 В некоторых клонов Uno не может обеспечить достаточный ток для работы Wi-Fi esp8266. Вам необходимо перейти на 3,3 В с контакта Uno 5 В или использовать отдельный источник питания 3,3 В для esp-01.

,

Этот парень - гений и очень добрый! :), @Xiaomy

подробности в чате https://chat.stackexchange.com/transcript/85432, @Juraj

сэр @Juraj нужна ваша помощь, сэр, @Xiaomy