Recientemente comencé a jugar con Arduinos para conectar algunos sensores. Usé un Arduino Nano para medir la temperatura, la humedad, la presión del aire y el nivel de luz.
Para almacenar los datos en una base de datos, usé otro Arduino que conecté a una Raspberry Pi, y dejé hablar a los dos Arduino de forma inalámbrica entre sí a través de 433 MHz.
Todo eso funciona bastante bien, pero la comunicación de 433 MHz no es exactamente la más confiable (a menudo pierdo una transmisión). Cuando me topé con el módulo ESP8266, parecía la solución óptima para la comunicación. ¿Qué tan genial sería si pudiera extraer la información a través de una llamada HTTP desde la Raspberry Pi?
Después de jugar durante muchas horas, cargar muchos firmwares diferentes y sentirme cada vez más frustrado porque no pude conseguir que haga cualquier cosa, finalmente lo tengo funcionando a través de un módulo FTDI conectado así:
Utilizo un módulo de potencia MB102 para proporcionar los 3.3v requeridos por el ESP8266. Resulta que necesitas conectar la tierra del MB102 a la tierra del módulo FTDI para obtener una respuesta adecuada. Después de hacer eso, pude enviar comandos AT y obtener las respuestas adecuadas. Incluso podría conectarlo al Wifi de mi casa.
Lo siguiente que quiero hacer es conectarlo al Arduino. Encontré un esquema muy simple para eso ( http://blog.huntgang.com/2015/01/20/arduino-esp8266-tutorial-web-server-monitor-example/ ), donde conectas RX a TX y TX a RX. Usando el MB102 lo conecté así:
Aparentemente ahora debería poder subir un boceto en blanco al Arduino, y luego usar el monitor serial nuevamente para detectar el comando AT, exactamente de la misma manera que lo hice cuando usé el módulo FTDI.
El problema es que no obtengo nada de esta manera. Ni siquiera veo mis propios comandos AT en la consola. Veo el ESP8266 parpadeando cada vez que envío un comando (incluso lo veo todavía conectado a mi enrutador, probablemente recordó la información que envío a través del FTDI … .?)
La pregunta es, ¿qué estoy haciendo mal? Leí algunas publicaciones acerca de que el TX del Arduino también es 5v y que debes hacer algo para volverlo a 3.3v, pero hay También hay muchos tutoriales que dicen que no es necesario.
Respuesta
La forma más fácil de trabajar con estos dispositivos es conectarse a un par de pines Arduino de repuesto y use SoftwareSerial para comunicarse (a menos que esté usando uno de los Arduino con más de un UART). SoftwareSerial funciona hasta 9600 baudios en dispositivos de 16MHz, 4800 en dispositivos de 8MHz, por lo que necesitará para configurar el ESP8266 para adaptarse a eso. Actualmente se envían a 115200 baudios. Puede usar el hardware UART en los pines (0, 1) pero luego reprogramar el Arduino significa desconectar & y volver a conectar el ESP temporalmente cada vez, y envejece bastante rápido.
Esto es lo que hago con los nuevos ESP (si «volvió a flashear su ESP, necesitará descargar el emulador de conjunto de instrucciones AT y volver a flashearlo con eso, primero):
# 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
Para referencia futura, aquí hay un vínculo al conjunto de instrucciones ESP8266 AT .
Actualización de junio de 2020: el vínculo anterior se rompió, ahora se corrigió. También puede encontrar documentación en la cuenta de github de Espressif « (se puede leer en línea, pero no pdf, a partir de esta fecha).
Comentarios
- Me acabo de dar cuenta de que esta pregunta ha sido extraída del archivo de preguntas sin respuesta de hace 6 meses. . Oh, bueno, tal vez esta respuesta ayude a alguien más ahora o pronto.
Respuesta
Puede haber una Problema con la velocidad en baudios del chip Nano FTDI al RX / TX y al ESP8266. ¿Se desconectó al cargar el boceto?
¿Qué tal si prueba esto en su lugar?
¡Salud!
Comentarios
- Cuando trabajo con el ESP8266, funciona en 115200 baudios, todo lo demás da basura . ‘ probé el código del blog vinculado (solo cambiando la velocidad en baudios), veo que ‘ envía un comando al ESP8266 (luz azul intermitente), pero falla cuando intenta ejecutar Serial.find (» > «) comando. También veo ninguna salida del ESP8266 en absoluto. Desconecté el ESP8266 mientras cargaba.
Respuesta
Me encontré con un buen tutorial aquí, probé y funciona trabajo: https://blogs.msdn.microsoft.com/abhinaba/2016/01/23/esp8266-wifi-with-arduino-uno-and-nano/
Comentarios
- Eso funcionará excepto por el comando CIOBAUD que ha sido reemplazado.El comando actual para todas las funciones de UART es:
AT+UART_DEF=<baud>,<databits>,<stopbits>,<parity>,<flowcontrol>
oAT+UART_DEF-9600,8,1,0,0
para que sea compatible con SoftwareSerial. Reemplaza » _DEF » por » _CUR » si este cambio es solo para la sesión; el primer comando lo convierte en el encendido predeterminado. - Por favor, puede expandir la información de ese blog en esta respuesta si el enlace muere, pero también para que sea una mejor respuesta
Respuesta
Sí, si está utilizando diferentes fuentes de energía, la conexión a tierra siempre debe estar conectada, de lo contrario, las placas no saben qué cero voltios es.
El TX del Arduino es 5v, necesitas un cambiador de nivel para convertir 5v a 3.3v, algo como esto ( https://shop.pimoroni.com/products/adafruit-4-channel-i2c-safe-bi-directional-logic-level-converter?utm_medium=cpc&utm_source=googlepla&variant=302017581&gclid=CPqujsPxlc0CFcYcGwodb8YIoA )
El TX del ESP8266 es 3.3v y el RX del Arduino es 5V y necesitará una palanca de cambios de nivel para manejar esto. use el mismo que se enumera arriba, porque puede convertir 4 señales altas (5v) en 4 señales bajas (3.3v).
La gente dice que puede hacerlo con resistencias, pero también he leído que no funciona lo suficientemente bien como para manejar señales digitales de conmutación rápida (por lo que 300 baudios en su serie podrían estar bien, pero no 115000 :))
Gente a También digo que no necesita convertidores de nivel. Eso es cierto, las cosas podrían funcionar por un tiempo sin ellas, pero tarde o temprano algo explotará. Aumentar el voltaje acelerará el proceso para que pueda imaginar lo que sucederá si conecta una fuente de 230v directamente a un dispositivo USB.
Un último punto, ¿sabes que el ESP8266 es un procesador de 80 / 160MHz con 256KB de RAM? Cuando lo comparas con tu Arduino, es como programar tu PC a través de tu teléfono. podría intentar conectar el ESP8266 a través de un módulo FTDI y programarlo a través del IDE de Arduino en Arduino C. Es mucho más fácil que todas estas cosas de conexión.