Использование ESP8266-01 с Arduino uno R3
Я пытаюсь научиться использовать ESP-01 (AI-Cloud, Black Version) с Arduino
Изначально я создал для него адаптер с 4 входами: RX, TX, Vcc(3,3 В), GND. Я проверил его, проводка вроде в порядке, затем подключил TX Arduino к TX ESP и то же самое с RX, но с делителем напряжения (1 кОм, 2 кОм), я загрузил arduino с пустым скетчем и попытался запустить такие команды, как AT и AT + CWMODE? но я не получил ответа на последовательном мониторе. Я пытался найти подходящий учебник, чтобы сделать это, но все учебники показывают, как загрузить скетч в ESP, а не в Arduino. Затем я поискал и нашел этот фрагмент кода:
#include <SoftwareSerial.h>
#define DEBUG true
SoftwareSerial esp8266(2,3); // делаем линию RX Arduino пином 2, делаем линию TX Arduino пином 3.
// Это означает, что вам нужно подключить линию TX от esp к контакту 2 Arduino
// и линия RX от esp до контакта 3 Arduino
void setup()
{
Serial.begin(9600);
esp8266.begin(115200); // скорость передачи данных вашего esp может отличаться
sendData("AT+RST\r\n",2000,DEBUG); // сброс модуля
sendData("AT+CWMODE=2\r\n",1000,DEBUG); // настроить как точку доступа
sendData("AT+CIFSR\r\n",1000,DEBUG); // получаем ip адрес
sendData("AT+CIPMUX=1\r\n",1000,DEBUG); // настроить для нескольких подключений
sendData("AT+CIPSERVER=1,80\r\n",1000,DEBUG); // включаем сервер на порт 80
}
void loop()
{
if(esp8266.available()) // проверяем, отправляет ли esp сообщение
{
/*
while(esp8266.available())
{
// У esp есть данные, поэтому вывод их в последовательное окно
char c = esp8266.read(); // прочитать следующий символ.
Serial.write(c);
} */
if(esp8266.find("+IPD,"))
{
delay(1000);
int connectionId = esp8266.read()-48; // вычесть 48, потому что функция read() возвращает значение
// десятичное значение ASCII и 0 (первое десятичное число) начинаются с 48
String webpage = "<h1>Hello</h1><h2>World!</h2><button>LED1</button>";
String cipSend = "AT+CIPSEND=";
cipSend += connectionId;
cipSend += ",";
cipSend +=webpage.length();
cipSend +="\r\n";
sendData(cipSend,1000,DEBUG);
sendData(webpage,1000,DEBUG);
webpage="<button>LED2</button>";
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); // отправляем прочитанный символ на esp8266
long int time = millis();
while( (time+timeout) > millis())
{
while(esp8266.available())
{
// У esp есть данные, поэтому вывод их в последовательное окно
char c = esp8266.read(); // прочитать следующий символ.
response+=c;
}
}
if(debug)
{
Serial.print(response);
}
return response;
}
Я подключил контакты в соответствии с кодом, и последовательный монитор вывел несколько строк, но с выделенными значениями мусора. Это также создало точку доступа Wi-Fi «AI-Thinker», к которой я подключился и открыл IP, как показано при отладке. Из-за этого ESP пытался отправить строку «веб-страница», но в основном это был мусор.
Итак, мой вопрос: как правильно использовать esp с arduino, чтобы, может быть, просто включить светодиод или отправить данные с датчиков, супер основы?
Не лучше ли использовать библиотеку esp и загружать скетчи в esp и управлять arduino с его помощью?
Может ли кто-нибудь предложить правильный учебник для этого? потому что даже после всего этого я все еще не понимаю, что RX Arduino подключено к RX (что не имеет смысла, но указано во многих изображениях Google) или TX ESP-01?
@Ayush Chuarasia, 👍2
Обсуждение3 ответа
Лучший ответ:
Чтобы убедиться, что последовательная связь работает, подключите ESP к Arduino D10 и D11, которые используются в качестве контактов SoftSerial.
+----+
| PC |
+--/-+
| +---------+
\-------| Arduino |
USB +--.------+
| SoftSerial
|
+--\----+
| ESP01 |
+-------+
А затем загрузите этот код в Arduino. Код взят из https://www.arduino.cc/en/Tutorial/SoftwareSerialExample
.+----+
| PC |
+--/-+
| +---------+
\-------| Arduino |
USB +--.------+
| SoftSerial
|
+--\----+
| ESP01 |
+-------+
Вывод TX
Arduino подключается к выводу RX
ESP и наоборот: так работает последовательная связь, за исключением соображений уровня напряжения.
Еще один фактор, который вы должны принять во внимание, это то, что два устройства ДОЛЖНЫ работать с одинаковой скоростью, когда-то известной как Скорость передачи данных: я полагаю, что 115200 может быть скоростью ESP по умолчанию, но это можно запрограммировать. Есть также два других дополнительных параметра, которые играют роль в последовательном соединении, Четность и Биты данных, но значения по умолчанию, скорее всего, подходят, и вам не о чем беспокоиться.
Итак, по сути, проверьте свою проводку и установите правильную скорость, учитывая, что некоторые модули ESP используют прошивку, использующую нестандартную скорость для последовательной связи.
#include <WiFiEsp.h>
#include <WiFiEspClient.h>
#include <SoftwareSerial.h>
...
SoftwareSerial wifiSerial(WIFI_RX, WIFI_TX);
WiFiEspClient WIFI_CLIENT;
...
void setup() {
wifiSerial.begin(9600); // или 115200
WiFi.init(&wifiSerial);
if (WiFi.status() == WL_NO_SHIELD) {
printLog("WiFi shield not present");
// не продолжать
while (true);
}
printLog("Connecting to AP ...");
WiFi.begin(WIFI_SSID, WIFI_PASS);
printLog("Connected to AP");
}
...
- AT-команда не отвечает на последовательный монитор
- Как подключить Wi-Fi Shield ESP-12E-ESP8266-UART-WIFI-Wireless-Shield к Arduino
- Как подключить ESP8266 с помощью адаптера ESP-01 к Arduino Uno?
- Как установить связь между веб-камерой и Arduino UNO и получать прямую трансляцию на мобильном телефоне с помощью ESP8266?
- Последовательная связь ESP8266 с ATMega328P
- Как связаться с ESP8266 ESP01, отправив данные через программный сериал на Arduino Uno?
- Почему мы используем client.flush() в коде, когда мы подключаем Esp8266 к Интернету или серверу?
- ESP8266 - Один сервер, отправляющий данные нескольким клиентам
Начните устранение неполадок с последовательным соединением, Arduino <-> ESP01. В https://www.arduino.cc/en/Tutorial/SoftwareSerialExample вы найдете пример копирования данных из Serial (ПК) в SoftSerial (ESP01). И Rx должен идти к Tx и наоборот. Цифровой контакт Arduino 0 (Rx) подключается к контакту 2 ESP01 (Tx), а цифровой контакт 1 Arduino (Tx) подключается к контакту 7 ESP01 (Rx)., @MatsK
Возможный дубликат [ESP8266 + Arduino Uno: невозможно отправить AT-команды](https://arduinoprosto.ru/q/9571/esp8266-arduino-uno-cant-send-at-commands), @gone
"_Лучше ли использовать esp Library и загружать скетчи в esp и управлять с его помощью arduino?_"? ДА!, @dandavis
@MatsK Я был действительно сбит с толку и обнаружил, что Tx-Rx используется, когда необходимо отправлять команды из кода Arduino, а Tx-Tx используется, когда необходимо отправлять команды из последовательного монитора Arduino, это когда Arduino подключен к ПК через USB, это право ?, @Ayush Chuarasia
@dandavis спасибо, поэтому я должен использовать свой Arduino и его IDE для загрузки скетчей в ESP8266, а затем через контакты ESP Tx Rx управлять Arduino и его датчиком, потому что у меня нет чипа ftdi или регулятора напряжения 3,3 В, и надеюсь, что Arduino достаточно для этого?, @Ayush Chuarasia
Пожалуйста, удалите часть "лучше ли...", которая делает ваше мнение основанным на вопросе и заслуживает закрытия. Также вы должны задать только один вопрос: это не форум., @Roberto Lo Giacco