Использование 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>&lth2>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?

, 👍2

Обсуждение

Начните устранение неполадок с последовательным соединением, 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


3 ответа


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

1

Чтобы убедиться, что последовательная связь работает, подключите ESP к Arduino D10 и D11, которые используются в качестве контактов SoftSerial.

+----+
| PC |
+--/-+
   |       +---------+
   \-------| Arduino |
     USB   +--.------+
              | SoftSerial
              |
           +--\----+
           | ESP01 |
           +-------+

А затем загрузите этот код в Arduino. Код взят из https://www.arduino.cc/en/Tutorial/SoftwareSerialExample

.
+----+
| PC |
+--/-+
   |       +---------+
   \-------| Arduino |
     USB   +--.------+
              | SoftSerial
              |
           +--\----+
           | ESP01 |
           +-------+
,

0

Вывод TX Arduino подключается к выводу RX ESP и наоборот: так работает последовательная связь, за исключением соображений уровня напряжения.

Еще один фактор, который вы должны принять во внимание, это то, что два устройства ДОЛЖНЫ работать с одинаковой скоростью, когда-то известной как Скорость передачи данных: я полагаю, что 115200 может быть скоростью ESP по умолчанию, но это можно запрограммировать. Есть также два других дополнительных параметра, которые играют роль в последовательном соединении, Четность и Биты данных, но значения по умолчанию, скорее всего, подходят, и вам не о чем беспокоиться.

Итак, по сути, проверьте свою проводку и установите правильную скорость, учитывая, что некоторые модули ESP используют прошивку, использующую нестандартную скорость для последовательной связи.

,

1
#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");  
}

...
,