Arduino Uno с ESP8266-01 с AT
Вот схема, которой я следовал:
Вот и ссылка: 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;
}
Я пытаюсь решить эту проблему уже почти неделю.
@Xiaomy, 👍0
Обсуждение1 ответ
Лучший ответ:
Если вы хотите использовать 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
- ESP8266 не подключается к Wi-Fi
- Как подключить Wi-Fi Shield ESP-12E-ESP8266-UART-WIFI-Wireless-Shield к Arduino
- Можно ли отключить WiFi на ESP8266?
- Как отключить или остановить точку доступа в ESP8266?
- ESP8266 — действительно ли у него по умолчанию плохой радиус действия Wi-Fi?
- Как подключить ESP8266 с помощью адаптера ESP-01 к Arduino Uno?
- ESP8266 на Wi-Fi без пароля, возможно?
- ESP8266 Аналоговое чтение мешает Wi-Fi?
Комментарии не предназначены для расширенного обсуждения; этот разговор был [перенесен на 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