Связывание Arduino Nano с модулем Wi-Fi ESP8266
Недавно я начал экспериментировать с Arduino, чтобы подключить несколько датчиков. Я использовал Arduino Nano для измерения температуры, влажности, атмосферного давления и уровня освещенности.
Для хранения данных в базе данных я использовал другой Arduino, который я подключил к Raspberry Pi, и позволил двум Arduino обмениваться данными друг с другом по беспроводной сети на частоте 433 МГц.
Все это работает довольно хорошо, но связь на частоте 433 МГц не самая надежная (я часто пропускаю передачу). Когда я наткнулся на модуль ESP8266, он показался мне оптимальным решением для связи. Как было бы здорово, если бы я мог просто получить информацию через HTTP-вызов из Raspberry Pi?
После многочасовых игр, загрузки множества разных прошивок, все большего и большего разочарования, потому что я не мог заставить его что-либо делать, я наконец заставил его работать через модуль FTDI, подключенный следующим образом:
Я использую модуль питания MB102 для обеспечения 3,3 В, необходимых для ESP8266. Оказывается, вам нужно подключить землю от MB102 к земле модуля FTDI, чтобы получить правильный ответ. После этого я смог отправлять AT-команды и получать правильные ответы. Я даже смог подключить его к домашнему Wi-Fi.
Следующее, что я хочу сделать, это подключить его к Arduino. Я нашел для этого очень простую схему (http:// blog.huntgang.com/2015/01/20/arduino-esp8266-tutorial-web-server-monitor-example/), где вы подключаете RX к TX и TX к RX. Используя MB102, я подключил его следующим образом:
По-видимому, теперь я должен иметь возможность загрузить пустой скетч в Arduino, а затем снова использовать последовательный монитор для получения AT-команды, точно так же, как я делал это при использовании модуля FTDI.
Проблема в том, что таким образом я вообще ничего не получаю. Я даже не вижу свои собственные AT-команды в консоли. Я вижу, как ESP8266 мигает каждый раз, когда я отправляю команду (я даже вижу, что он все еще подключен к моему маршрутизатору, возможно, он помнит информацию, которую я отправляю через FTDI...?)
Вопрос в том, что я делаю не так? Я читал некоторые посты о том, что TX от Arduino также составляет 5 В и что вам нужно что-то сделать, чтобы вернуть его к 3,3 В, но есть также много руководств, в которых говорится, что это не требуется.
@ErikL, 👍0
4 ответа
Возможна проблема со скоростью передачи данных от чипа Nano FTDI к RX/TX и ESP8266. Вы отключились при загрузке скетча?
Как насчет того, чтобы попробовать это?
Ура!
Наткнулся здесь на хороший учебник, попробовал, и он работает: https://blogs.msdn.microsoft .com/abhinaba/2016/01/23/esp8266-wifi-with-arduino-uno-and-nano/
Это будет работать, за исключением команды CIOBAUD, которая была заменена. Текущая команда для всех функций UART: AT+UART_DEF=<baud>,<databits>,<stopbits>,<parity>,<flowcontrol>
или AT+UART_DEF-9600,8,1,0,0
для совместимости с SoftwareSerial. Замените «_DEF» на «_CUR», если это изменение касается только сеанса; первая команда делает его включенным по умолчанию., @JRobert
Пожалуйста, не могли бы вы расширить информацию из этого блога в этот ответ, если ссылка не работает, а также сделать ее лучшим ответом., @RSM
Да, если вы используете разные источники питания, заземление всегда должно быть подключено, иначе платы не будут знать, что такое ноль вольт.
Передача Arduino составляет 5 В, вам нужен переключатель уровня для преобразования 5 В в 3,3 В, что-то вроде этого (https://shop.pimoroni.com/products/adafruit-4-channel-i2c -конвертер безопасного двунаправленного логического уровня?utm_medium=cpc&utm_source=googlepla&variant=302017581&gclid=CPqujsPxlc0CFcYcGwodb8YIoA)
ТХ ESP8266 составляет 3,3 В, а RX Arduino — 5 В, и для этого вам понадобится переключатель уровня. Вы можете использовать тот же, что и указанный выше, потому что он может преобразовывать 4 высоких (5 В) сигнала в 4 низких (3,3 В) сигнала.
Люди говорят, что вы можете сделать это с помощью резисторов, но я также читал, что они недостаточно хорошо работают для обработки цифровых сигналов с быстрым переключением (поэтому 300 бод на вашем последовательном порту может быть в порядке, но не 115000 :) )
Кроме того, говорят, что преобразователи уровней не нужны. Это правда, что вещи могут какое-то время работать и без них, но рано или поздно что-то выйдет из строя. Увеличение напряжения ускорит процесс, так что вы можете себе представить, что произойдет, если вы подключите источник питания 230 В напрямую к USB-устройству.
И последнее, знаете ли вы, что ESP8266 — это процессор с частотой 80/160 МГц и 256 КБ ОЗУ. Если сравнить его с Arduino, это все равно, что программировать ПК через телефон. Что вы можете попробовать, так это подключить ESP8266 через модуль FTDI и запрограммировать его через Arduino IDE в Arduino C. Это намного проще, чем все эти соединения.
Самый простой способ работы с этими устройствами — подключить их к запасной паре контактов Arduino и использовать для связи SoftwareSerial (если только вы не используете одну из плат Arduino с более чем одним UART). SoftwareSerial работает со скоростью до 9600 бод на устройствах с частотой 16 МГц и до 4800 на устройствах с частотой 8 МГц, поэтому вам необходимо настроить ESP8266 для этого. В настоящее время они поставляются со скоростью 115200 бод. Вы можете использовать аппаратный UART на контактах (0, 1), но тогда перепрограммирование Arduino означает отключение & каждый раз временно переподключая ESP, и он довольно быстро устаревает.
Вот что я делаю с новыми ESP (если вы перепрошивали свой ESP, вам нужно сначала загрузить эмулятор набора инструкций AT и перепрошить его с его помощью):
# To configure a new ESP module:
# Connect the ESP and the FTDI as in your top diagram, set your
# terminal-emulator to 115200 baud, and enter the following:
AT # ESP should respond "OK"
AT+RST # Resets the ESP
AT+UART_DEF=9600,8,1,0,0 # Sets ESP UART: 9600,N,8,1,no flow ctl
# Now change the terminal emulator baud rate to 9600
AT+CWMODE=1 # Set ESP to station mode (client)
ATE0 # Set ESP's echo off
AT+CWLAP # List access points - after a short pause
# the ESP returns a list of WiFi access points
Для дальнейшего использования здесь приведена ссылка на набор инструкций AT для ESP8266.
Обновление за июнь 2020 г. Приведенная выше ссылка была неработающей, исправлена. Вы также можете найти документацию в аккаунте Espressif на github (доступно для чтения онлайн, но не в формате pdf, на данный момент дата).
Я только что понял, что этот вопрос был извлечен из архива вопросов без ответов 6 месяцев назад. О, хорошо - может быть, этот ответ поможет кому-то другому сейчас или в ближайшее время., @JRobert
- Как читать и записывать EEPROM в ESP8266
- Как сделать выводы Tx и Rx на ESP-8266-01 в выводах GPIO?
- Как навсегда изменить скорость передачи данных ESP8266 (12e)?
- Как заставить 5-вольтовое реле работать с NodeMCU
- Как исправить: Invalid conversion from 'const char*' to 'char*' [-fpermissive]
- ESP8266 не подключается к Wi-Fi
- AT-команда не отвечает на последовательный монитор
- Разница между этими двумя платами NodeMCU?
Когда я работаю с ESP8266, он работает на скорости 115200 бод, все остальное просто дает фигню. Я пробовал код из связанного блога (только изменение скорости передачи), я вижу, что он отправляет команду на ESP8266 (мигает синий свет), но он терпит неудачу, когда пытается выполнить команду Serial.find(">") . Я также не вижу никаких выходных данных от ESP8266. Я отключил ESP8266 во время загрузки., @ErikL