Отправить AT-команды на ESP8266 из Arduino Uno через порт SoftwareSerial

10

ЦЕЛЬ

Из Arduino UNO отправьте AT-команды на ESP8266 через порт SoftwareSerial и получите результаты.

ТЕКУЩИЙ СТАТУС

Я либо отправляю AT-команды и ничего не получаю обратно ( схема соединений 1 ), либо отправляю AT-команды и получаю обратно мусор ( схема соединений 2 ).

Используя Arduino в качестве прохода (как объяснено в руководстве, указанном в разделе ресурсов), я могу отправлять AT-команды. Я обнаружил, что могу общаться с ESP8266 со скоростью 115200 бод.

Это результаты бега AT+GMR:

AT version:0.40.0.0(Aug  8 2015 14:45:58)
SDK version:1.3.0
Ai-Thinker Technology Co.,Ltd.
Build:1.3.0.2 Sep 11 2015 11:48:04

СХЕМА ПОДКЛЮЧЕНИЯ 1

!! У меня есть зеленый провод, прикрепленный к контакту 3 на Arduino Uno, и желтый провод, прикрепленный к контакту 2; не 1, а 0, как на картинке!

введите описание изображения здесь

СХЕМА ПОДКЛЮЧЕНИЯ 2

Та же проводка, что и выше, но у меня RX и TX поменялись местами. Зеленый провод подключен к контакту 2, а желтый провод подключен к контакту 3.

КОД

Это работает на Arduino Uno

#include <SoftwareSerial.h>

SoftwareSerial esp8266(2, 3);

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(115200);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  Serial.println("Started");

  // set the data rate for the SoftwareSerial port
  esp8266.begin(115200);
  esp8266.write("AT\r\n");
}

void loop() {
  if (esp8266.available()) {
    Serial.write(esp8266.read());
  }
  if (Serial.available()) {
    esp8266.write(Serial.read());
  }
}

РЕЗУЛЬТАТЫ ОТ ЭКОНОМИКИ

Схема подключения 1

Started

Схема подключения 2

Started
�����

Я проверил ESP8266 с помощью инструкций, перечисленных в руководстве в разделе « Ресурсы, которые я использовал » ниже. ESP8266 прекрасно работает при отправке инструкций через Serial Prompt.

Ресурсы, которые я использовал http://rancidbacon.com/files/kiwicon8/ESP8266_WiFi_Module_Quick_Start_Guide_v_1.0.4.pdf

ВОПРОС

Кто-нибудь знает, возможно ли то, что я пытаюсь сделать? И если это так, что я делаю не так?

Павел
источник
Попробуйте в PDF как sugested использовать arduino в качестве обхода для последовательного порта (используйте соединения, как на рисунке). После попробуйте установить скорость передачи 115200 и проверить ее с помощью последовательного монитора. Вы должны отправить \ r \ n как конец строки также. Если esp не отвечает, попробуйте 9600 бод. Если вы получаете хороший выходной сигнал, переходите к последовательному программному обеспечению с рабочей скоростью. Вы также можете попробовать обновить прошивку esp до последней версии, если вы этого еще не сделали.
brtiberio
Можете ли вы опубликовать серийный код программного обеспечения?
Волшебная Мышь
@Personagem, спасибо. Я сделал это устранение неполадок (т. Е. Проверка того, что я могу отправлять AT-команды, используя Arduino в качестве обхода). Я обнаружил, что могу общаться с esp на 115200. Я попробую обновить прошивку, как вы предложили.
Пол
@ Magic-Mouse SoftwareSerial - это библиотека, предоставленная, я думаю, Arduino. Спасибо за вашу помощь в этом вопросе, но я не думаю, что размещение библиотеки здесь было бы полезно.
Пол
Я знаю, что такое библиотека последовательных программ, я хочу найти код, в котором вы используете серийные программы.
Волшебная Мышь

Ответы:

9

Кто-нибудь знает, возможно ли то, что я пытаюсь сделать?

Абсолютно возможно :)

И если это так, что я делаю не так?

SoftwareSerial не поддерживает скорость 115200 бод (несмотря на то, что «разрешает» это как настройку). В некоторых отчетах указывается, что 57600 работоспособен, хотя по моему опыту 9600 является лучшим по надежности. Как изменить скорость передачи в ESP8266, будет зависеть от версии прошивки. У меня был успех с AT+IPR=9600. Вам нужно выполнить эту команду только один раз (это постоянная настройка). Исходя из вашего описания, я бы предположил, что это наиболее вероятный виновник, который вызывает вывод «мусора», который вы описываете.

Пара других заметок:

  • ESP8266 работает от 3v3, а не от 5v, поэтому его не следует напрямую подключать к цифровым контактам - вам нужно работать через преобразователь логического уровня. Запуск 5v может поджарить ваш ESP8266.
  • Выход Arvino 3 на 3 не имеет достаточного тока для надежной поддержки ESP8266 (50 мА Arduino против 300 мА для ESP8266 некоторыми учетными записями) - попробуйте запустить ESP8266 от отдельного источника питания. Это, вероятно, не повлияет на простые команды, например, ATно при попытке подключиться к сети и т. Д. Это может привести к неожиданной перезагрузке устройства.
  • Как отметили другие, вам нужно отправить \ r \ n - поэтому убедитесь, что в вашем последовательном окне установлено отправлять оба (это выпадающий список в последовательном окне)
Грант
источник
1
Обратите внимание, что AT + IPR может иногда кирпич ESP8266. Более подробная информация по адресу: arduino.stackexchange.com/questions/24156/…
Эмир,
7

Ну, вы можете попробовать это:

Начните с загрузки эскиза мерцания в Arduino, затем подключите его к ESP8266 следующим образом: TX-TX и RX-RX.

Теперь откройте Serial Monitor и отправьте AT команду и посмотрите, отвечает ли она. Если это так, то вы можете управлять им, используя Arduino, подключив его к TX-RX и RX-TX.

PS: не забудьте установить конец строки в последовательном мониторе на новую строку или возврат каретки.

Используйте этот код для подключения к ESP8266:

#include <SoftwareSerial.h>

const byte rxPin = 2; // Wire this to Tx Pin of ESP8266
const byte txPin = 3; // Wire this to Rx Pin of ESP8266

// We'll use a software serial interface to connect to ESP8266
SoftwareSerial ESP8266 (rxPin, txPin);

void setup() {
  Serial.begin(115200);
  ESP8266.begin(115200); // Change this to the baudrate used by ESP8266
  delay(1000); // Let the module self-initialize
}

void loop() {
  Serial.println("Sending an AT command...");
  ESP8266.println("AT");
  delay(30);
  while (ESP8266.available()){
     String inData = ESP8266.readStringUntil('\n');
     Serial.println("Got reponse from ESP8266: " + inData);
  }  
}

Поскольку аппаратный последовательный интерфейс будет занят при подключении к компьютеру, вам придется использовать другой последовательный интерфейс для связи с вашим ESP8266. В этом случае Software Serial пригодится.

Ikbel
источник
Хотя эта ссылка может ответить на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными, если связанная страница изменится. - Из обзора
Рикардо
1
Да, я думаю, ты прав. Я отредактировал свой ответ.
Икбель
@KiraSan, почему задержка (30) требуется?
Рахул Растоги
@RahulRastogi как раз для этого примера, вы можете использовать задержку, чтобы позволить ESP отвечать, 30 мс - это только случайное значение, но в реальной программе вы должны избегать этого и использовать другой механизм для проверки ответа.
Икбель
1

Кто-нибудь знает, возможно ли то, что я пытаюсь сделать? Возможно, я сделал это с 2 ардуино, где один симулировал ESP8266 (ожидание заказа ebay).

И если это так, что я делаю не так?

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

Идея состоит в том, чтобы реализовать этого маленького парня: логический сдвиг уровня, он избавит вас от многих неприятностей позже.

На вашей «СХЕМЕ ПРОВОДКИ 1» вы используете аппаратный последовательный порт arduino для прямой связи с устройством, как если бы оно было подключено через кабель TTL или кабель FTDI.

Это означает, что устройство arduino теоретически считывало бы с аппаратного обеспечения и во время разговора ESP8266, если у вас есть другой кабель Arduino или TTL, попробуйте подключить его к шлюзу 2 и 3 на «главном» arduino, и вы должны получить аналогичное устройство. результат как для вашего примера результат 2. Так как вы бы таким образом прокси через Arduino. Если нет, то это место для отладки.

Кроме того, я мог бы только порекомендовать вам инвестировать в TTL 3,3 В или преобразователь логического уровня. Когда я получил свой кабель все работало из коробки.

Magic-Mouse
источник
1

У меня тоже было много проблем. В моем случае проблемы практически решаются путем переключения с SoftwareSerial на AltSoftSerial . Казалось, что на Uno стандартная библиотека последовательных программ не работает для меня. После переключения я начал получать результаты обратно в первый раз. (Я также использовал сдвиг уровня и внешний источник питания на 3,3 В)


И под почти решенным я имею в виду - я все еще время от времени получаю тарабарщину на терминале. Так что даже AltSoftSerial не идеальное решение. Я использовал ESP-07 со скоростью передачи данных 115200 бит / с.

Янар Юриссон
источник
Можете ли вы добавить к своему описанию? Было бы полезно узнать, как вы установили соединение между Uno и ESP. Спасибо!
Делю
0

Мы обнаружили, что многие проблемы с последовательной интеграцией программного обеспечения ESP - Arduino Uno связаны с несовместимой скоростью передачи данных. Мы создали это краткое руководство (включая библиотеку Github), которое вы можете протестировать и посмотреть, решит ли оно эти проблемы. http://www.instructables.com/id/Simple-ESP8266-Arduino-Uno-Software-Serial-Integra/

anatrobo
источник
0

Вот несколько советов по использованию модуля ESP8266.

  1. Не используйте серийный номер программного обеспечения, так как он ненадежен, особенно при высоких скоростях передачи.

  2. Всегда подключайте модуль ESP к компьютеру и проверяйте все AT-команды перед взаимодействием с Arduino, чтобы убедиться, что вы работаете в правильном направлении

  3. Сделайте плату адаптера питания для совместимости модуля ESP с источником питания Arduino 5v

Также проверьте эту ссылку для более подробной информации

AAA
источник