ESP8266: wifi para nuestros micros

Avatar de Usuario
Gatuso
Mensajes: 146
Registrado: 06 Ene 2014 11:55
Agradecido : 1 vez
Agradecimiento recibido: 20 veces

ESP8266: wifi para nuestros micros

Mensajepor Gatuso » 11 Oct 2015 17:26

Hace unos días me encontré por casualidad con el ESP8266, un pequeño (pequeñísimo) chip que dota de conectividad WiFi de una manera sencilla a arduinos y demás microcontroladores, y que lleva un año petándolo en esto del "internet de las cosas":

Imagen

Esta placa, que puede encontrarse entre 5 y10€, implementa todo el protocolo TCP/IP y permite tanto conectarse a una red wifi existente como funcionar en modo Access Point y aceptar la conexión de otros clientes. Además el firmware pregrabado que lleva permite, y aquí está la gracia, comunicarse con el chip a base de unos sencillos comandos AT enviados por línea serie. Esto es lo que me sugirió enseguida que podría ser usado con buena parte de nuestros micros, ya que muchos llevan de fábrica un puerto serie y a otros muchos se les puede acoplar una UART de forma mas o menos sencilla. Aquí se puede ver el esquema de conexión, básicamente un par de pines TX y RX y la propia alimentación del chip (ojo, a 3.3V). Esto lo hace idel para conectarlo directamente a un PC vía un adaptador de USB a TTL-RS232, que suelen funcionar tambien a 3.3V (al menos los dos que yo tengo son así):

Imagen

(Fuente: Rubén Sánchez, "ESP8266 con NodeMCU")

La scene de este chip es muy activa y existen diversos firmwares alternativos que pueden ser flasheados fácilmente, pero antes de meterme en jaleos prefería aprender un poco del que trae por defecto. SImplemente con conectarlo al PC usando uno de estos adaptadores y abriendo un Putty o un CoolTerm ya podemos enviar comunicarnos con el chip. La lista completa de comandos se puede encontrar en los propios manuales del chip, pero con solo un pequeño conjunto de ellos ya se puede configurar la conexión y hacer cosas interesantes:

Resetear el chip: AT+RST
Conectarse a un punto de acceso: AT+CWJAP="SSID", "contraseña"
Mostrar la IP actual: AT+CIFSR
Conectarse a un servidor: AT+CIPSTART="TCP/UDP", "direccion", puerto
Enviar datos al servidor: AT+CIPSEND=longitud
Abrir un puerto como servidor: AT+CIPSERVER=open/close, puerto
Establecer los parametros de comunicación serie: AT+UART_DEF=velocidad, bits datos, bits stop, paridad, control de flujo

Con eso y poco mas ya podemos conectarnos a nuestro punto de acceso wifi y establecer una comunicación (TCP o UDP) con una máquina remota. El firmware oficial permite abrir hasta cuatro conexiones simultáneas con el comando AT+CIPMUX=1 (que nos será muy util mas adelante para el modo pasivo del FTP) y también ponernos a la escucha en un puerto determinado convirtiéndonos en servidor y aceptando conexiones de otras máquinas.

Después de trastear con el PC decidí probar suerte con alguna de mis otras máquinas, escogiendo el Amiga 500 como conejillo de indias por llevar puerto serie de serie (valga la redundancia) y por la facilidad para programarlo rápidamente a base de scripts en ARexx. El primer problema es convertir los "peligrosos" niveles RS232 del puerto serie del Amiga a los mas amigables 3.3V del ESP8266. Para ello existen multitud de chips (como el MAX232) y placas ya montadas que actuan como inversoras y adaptadores de niveles, pero como no tenía ninguna a mano monté un pequeño circuito en una protoboard siguiendo un esquema que encontré en google, usando solo transistores y resistencias:

Imagen

Aquí podeis ver una foto del tinglao que tuve que montar encima del Amiga. Los 3.3V para alimentar el ESP2866 los sacaba de una pequeña placa MB-102 pinchada en la protoboard. Cable verde para la linea TX y cable amarillo para la RX, tanto hacia el Amiga como hacia el ESP8266.

Imagen

No había usado ARexx en mi vida, así que empecé por buscar documentación sobre el acceso al puerto serie y encontré la excelente Rexxserdev.library, que traía varios ejemplos de envio y recepción de datos por ese puerto. Fui modificándolos para hacer pruebas y acabé haciendo un pequeño wrapper interactivo para enviar los comandos AT necesarios para establecer una conexion FTP y conseguir recibir algún archivo. Así podía escribir los OPEN, USER, PASS, RETR, etc. usuales y por debajo el script se encargada de enviarlos al chip con la sentencia AT adecuada. En otra consola lanzaba un simple bucle que iba leyendo todo lo que se recibia desde el chip, de forma que se necesitan dos ventanas simultáneas para que esto sea realmente interactivo. La conexión finalmente la establecí a 9600 baudios, ya que a 19200 recibia algunos errores esporádicos. Aquí podeis ver un pequeño test (perdón por ese flickeo tan molesto):

https://youtu.be/2cZ3kqxsza4

La secuencia del vídeo es la siguiente:

1. Al conectar la alimentación del chip éste se inicializa y envía los primeros mensajes de arranque ("Ai-Thinker Technology Co. Ltd....")
2. La configuración de conexión al punto de acceso se guarda en la flash del chip, así que no es necesario volver a reconectar manualmente al encender. De ahí que automáticamente muestre "WIFI CONNECTED" y "WIFI GOT IP" a los pocos segundos del arranque, usando la configuración de anteriores pruebas.
3. MULTI => AT+CIPMUX=1
Indicamos al chip que queremos usar el modo de multiconexiones (máximo 4 simultáneas). Esto nos permitirá abrir una conexión adicional por la que recibir los ficheros del servidor FTP en el modo pasivo.
4. OPEN FTP.FUNET.FI => AT+CIPSTART=0, "TCP", "FTP.FUNET.FI", 21
Abrimos la conexión 0 al puerto 21 del servidor ftp de funet.fi.
5. USER anonymous => AT+CIPSEND=0, 16 + "USER anonymous
"

Indicamos al chip que queremos enviar 16 caracteres al servidor por la conexión 0 (los catorce de "USER anonymous" mas los caracteres de retorno de carro y salto de línea). Inmediatamente después del comando se envían los datos.
6. PASS retrowiki => AT+CIPSEND=0, 16 + "PASS retrowiki
"

Idem para la contraseña.
7. PWD => AT+CIPSEND=0, 5 + "PWD
"
CWD pub => AT+CIPSEND=0, 9 + "CWD pub
"
CWD amiga => AT+CIPSEND=0, 11 + "CWD amiga
"

Y lo mismo para estos comandos, primero un AT+CIPSEND indicando el canal y la longitud de los datos que se van a enviar y luego los propios datos con retorno de carro y salto de línea al final.
8. PASV => AT+CIPSEND=0, 6 + "PASV
"

Solicitamos entrar en modo pasivo, con lo que el servidor FTP nos habilita un puerto adicional por el que espera que nos conectemos.
9. PASSIVE 193.166.3.2 137 166 => AT+CIPSTART=1, "TCP", "193.166.3.2",35238
Abrimos una nueva conexión (canal 1) hacia el servidor por el puerto que nos ha indicado anteriormente (137*256+166). De esta forma podemos recibir un fichero (con el comando RETR) o el listado de un directorio (con el comando LIST).
10. LIST => AT+CIPSEND=0, 6 + "LIST
"

Solicitamos el listado del directorio actual, que nos llegará por la conexión 1 abierta en el punto anterior. Justo después de recibir todos los datos se cierra automáticamente.
11. PASV => AT+CIPSEND=0, 6 + "PASV
"

Solicitamos de nuevo otro puerto para recibir uno de los ficheros.
12. PASSIVE 193.166.3.2 144 230 => AT+CIPSTART=1, "TCP", "193.166.3.2",37094
Volvemos a abrir otra conexión por el canal 1.
13. RETR big.ksh => AT+CIPSEND=0, 14 + "RETR big.ksh
"

Solicitamos el envío del fichero big.ksh. Al ser un fichero de texto lo podemos ver en pantalla, aquí faltaría volcarlo a un archivo del disco (in progress...).
14. CLOSE => AT+CIPCLOSE=0
Cerramos la conexión que teníamos abierta por el canal 0 (la del canal 1 se cerró automáticamente tras la recepción del archivo big.ksh).

Esto no es mas que una prueba rápida y sucia de las posibilidades que nos brinda esta plaquita. En un único chip tenemos implementada toda la pila TCP/IP y podemos abrir y gestionar una conexión con apenas un par de comandos. Por contra, cualquier aplicación que queramos montar sobre esto nos la vamos a tener que picar desde el principio. Pero desde luego a mi me parece un campo de cacharreo de lo mas interesante y motivador. De hecho después de esta prueba de concepto con el Amiga ya tengo en mente hacer lo propio con el ST y el BBC Micro. Y el CPC6128 que se vaya preparando que tengo la UART en la mano ya.
Adjuntos
scriptsARexx.zip
Scripts de recepcion y envio de comandos
(1.41 KiB) Descargado 78 veces

Avatar de Usuario
ron
Mensajes: 18506
Registrado: 28 Oct 2010 14:20
Ubicación: retrocrypta
Agradecido : 1677 veces
Agradecimiento recibido: 1402 veces

Re: ESP8266: wifi para nuestros micros

Mensajepor ron » 12 Oct 2015 10:03

Gatuso, menudo post que te has marcado, Wow !!!
Interesante a mas no poder, combinado con los inventos de ferix y groovy tiene muchisimas posibilidades

Avatar de Usuario
jrodriguezv
Mensajes: 750
Registrado: 05 Jul 2012 10:32
Agradecido : 11 veces
Agradecimiento recibido: 10 veces
Contactar:

Re: ESP8266: wifi para nuestros micros

Mensajepor jrodriguezv » 12 Oct 2015 15:00

Enhorabuena por el post. Yo también lo veo muy interesante.

Avatar de Usuario
Gatuso
Mensajes: 146
Registrado: 06 Ene 2014 11:55
Agradecido : 1 vez
Agradecimiento recibido: 20 veces

Re: ESP8266: wifi para nuestros micros

Mensajepor Gatuso » 12 Oct 2015 17:12

A mi me está encantando el cacharreo con este chip. Es algo similar a lo que ya conseguíamos conectando un PC por línea serie (otro cacharreo que me chifla) pero con la tremenda vemtaja que da el tener una pila TCP/IP completa lista para usar. Y sin cables de por medio, claro. Esto con un buen software detrás abre un abanico de posibilidades enorme.

Hoy por ejemplo, aprovechando la mañana festiva, me he puesto a hacer lo mismo con el BBC Micro. El puerto RS-432 es compatible con lo que tenía ya montado, así que ha sido cuestión de pinchar cables y empezar a probar.:

Imagen

(Ojo: hay que unir los pines RTS y CTS entre sí, ya que de otra manera el BBC Micro se negará a transmitir nada)

Imagen

El BASIC de este micro es tan sumamente completo y potente que ya trae un buen montón de comandos para configurar y manejar el puerto serie. A base de *FX podemos elegir la velocidad de transmision y recepción o redirigir automáticamente la entrada de teclado hacia el puerto serie, para convertirlo en un terminal (y también al revés, para manejarlo remotamente). En el propio "BBC Microcomputer Advanced User Guide" viene el listado de un sencillo programa de ejemplo que actúa como emulador de terminal enviando las pulsaciones de teclado hacia el puerto serie y mostrando en pantalla todo lo que recibe por él. Con unas mínimas modificaciones (para enviar correctamente los caracteres de fin de línea y retorno de carro) me ha servido perfectamente para probar el chip y crear un par de conexiones telnet a servidores remotos.

https://www.youtube.com/watch?v=ssgZc4G419w

Esta vez he ido probando velocidades hasta encontrar que a 1200 baudios no perdía ningún carácter, así que la velocidad de la pantalla es de película de los 80 -grin Esto en código máquina seguro que iría como un tiro y permitiría mayores velocidades.

Avatar de Usuario
jrodriguezv
Mensajes: 750
Registrado: 05 Jul 2012 10:32
Agradecido : 11 veces
Agradecimiento recibido: 10 veces
Contactar:

Re: ESP8266: wifi para nuestros micros

Mensajepor jrodriguezv » 12 Oct 2015 19:51

Y en el cpc no lo pruebas?

Avatar de Usuario
Chema
Mensajes: 2263
Registrado: 21 Jun 2012 20:13
Ubicación: Gijón
Agradecido : 1913 veces
Agradecimiento recibido: 604 veces
Contactar:

Re: ESP8266: wifi para nuestros micros

Mensajepor Chema » 12 Oct 2015 20:20

Mola un montón! Vaya post más chulo. Mil gracias!

Avatar de Usuario
Gatuso
Mensajes: 146
Registrado: 06 Ene 2014 11:55
Agradecido : 1 vez
Agradecimiento recibido: 20 veces

Re: ESP8266: wifi para nuestros micros

Mensajepor Gatuso » 12 Oct 2015 20:45

jrodriguezv escribió:Y en el cpc no lo pruebas?


El ello estoy. Acabo de montar otra vez la UART que usé por aquel entonces pero ahora no me funciona. A saber que cable se habrá soltado en este tiempo...

Avatar de Usuario
Gatuso
Mensajes: 146
Registrado: 06 Ene 2014 11:55
Agradecido : 1 vez
Agradecimiento recibido: 20 veces

Re: ESP8266: wifi para nuestros micros

Mensajepor Gatuso » 12 Oct 2015 21:57

Al final era el conector del CPC, que tenía un poco de mugre. Siempre hay que empezar mirando por ahí -thumbup

Me encanta el lobito este...

Imagen

Detalle del tinglao necesario. La UART casera con un 16C550 conectada al puerto de expansión, ya no son cuatro cables como antes...

Imagen

Y el videito de rigor. Da tiempo a cenar antes de que acabe de recibir toda la pantalla. 300 baudios en BASIC, ¡hipervelocidad!

https://www.youtube.com/watch?v=ua03zySd4mM

Avatar de Usuario
retrocant
Mensajes: 349
Registrado: 03 Sep 2014 10:57
Ubicación: Santander
Agradecido : 7 veces
Agradecimiento recibido: 131 veces
Contactar:

Re: ESP8266: wifi para nuestros micros

Mensajepor retrocant » 12 Oct 2015 22:06

hola gatuso, magnífico trabajo el que has realizado en estos ordenadores conectándole a una interfaz wifi.

Me interesa mucho este proyecto y ya me he comprado los componentes necesarios.

Un saludo.

Avatar de Usuario
Gatuso
Mensajes: 146
Registrado: 06 Ene 2014 11:55
Agradecido : 1 vez
Agradecimiento recibido: 20 veces

Re: ESP8266: wifi para nuestros micros

Mensajepor Gatuso » 12 Oct 2015 23:35

Estupenda noticia, Alfredo. Este chip puede dar mucho juego y mucha vida a nuestros micros, y cuanta mas gente se anime a trastear con él mucho mejor. Ojalá esto desembocara algún día en algún proyecto chulo con su PCB y su pedido conjunto marca de la casa.

Esto es justo lo que me comentaste en la RetroParla, que había que demostrar a la gente que en esencia aquellas máquinas no son tan distintas del último pepinaco que tenemos en casa hoy en día. Pues aquí un ejemplo, tecnología de los 2000 y pico perfectamente compatible con la de los ochenta.

Un saludo.

Avatar de Usuario
jrodriguezv
Mensajes: 750
Registrado: 05 Jul 2012 10:32
Agradecido : 11 veces
Agradecimiento recibido: 10 veces
Contactar:

Re: ESP8266: wifi para nuestros micros

Mensajepor jrodriguezv » 13 Oct 2015 21:10

Me encanta lo del CPC!! Tenemos que hacer una tirada de placas!!

¿crees que podrías cargar un sna desde un servidor??

Como base podrías mirar este artículo :
http://fremos.cheesetea.com/2015/08/22/ ... -desde-pc/

Avatar de Usuario
Gatuso
Mensajes: 146
Registrado: 06 Ene 2014 11:55
Agradecido : 1 vez
Agradecimiento recibido: 20 veces

Re: ESP8266: wifi para nuestros micros

Mensajepor Gatuso » 08 Nov 2015 23:35

Añadimos los MSX al grupo de los micros "wifi-friendly" -drinks

https://www.youtube.com/watch?v=w72lQErUClQ

Avatar de Usuario
Ben-kenobi
Mensajes: 514
Registrado: 01 May 2014 23:06
Agradecido : 8 veces
Agradecimiento recibido: 26 veces

Re: ESP8266: wifi para nuestros micros

Mensajepor Ben-kenobi » 09 Nov 2015 15:15

Si te animas con las placas cuenta conmigo, ademas somos vecinos y te puedo hechar una mano en lo que necesites.

Avatar de Usuario
ron
Mensajes: 18506
Registrado: 28 Oct 2010 14:20
Ubicación: retrocrypta
Agradecido : 1677 veces
Agradecimiento recibido: 1402 veces

Re: ESP8266: wifi para nuestros micros

Mensajepor ron » 09 Nov 2015 18:52

A ver, si os animáis es estupendo y cuando el genio salga de la lámpara y se ponga a hacer el diseño... yo pregunto... ¿ no se puede hacer una que sea MULTISISTEMA ? ¿ que nos sirva para todos ?, es cuestión luego de ponerle un addon y fuera.

Lo dicho. ojalá salga algo, me apunto ya si que si.

Avatar de Usuario
Gatuso
Mensajes: 146
Registrado: 06 Ene 2014 11:55
Agradecido : 1 vez
Agradecimiento recibido: 20 veces

Re: ESP8266: wifi para nuestros micros

Mensajepor Gatuso » 09 Nov 2015 19:41

Yo creo que el circuito tiene una parte ya de por si bastante multisistema y otra más dependiente del ordenador al que se conecte. Al chip wifi si que le da igual lo que tenga detrás, ese no tiene problemas. Y el manejo del 16C550 se hace accediendo a sus registros internos por medio de tres líneas (usualmente conectadas a A2, A1 y A0) y otras dos mas para lectura y escritura, que eso lo vamos a encontrar en cualquier micro.

Y por otro lado está la activación del chip, que ya depende de la arquitectura de cada sistema y de los puertos que podamos usar sin entrar en conflicto con nada más. El chip proporciona tres entradas CS0, CS1 y /CS2 con las que podemos jugar, pero imagino que habrá micros donde sea necesaria añadir mas lógica para poder direccionar el chip sin problemas. En el caso del CPC era realmente sencillo porque la propia decodificación parcial que hace ya te lo dejaba muy claro en su momento: A10=0 significa que accedemos a dispositivos externos, y en ese caso A5=0 para los puertos serie. Añadiendo /IORQ a la ecuación ya sabemos exactamente cuando se está accediendo al chip. Ese addon podría ser justo la lógica necesaria para CS0, CS1 y /CS2, que en el caso del CPC es simplemente un 74LS04.

Avatar de Usuario
Taburoto
Mensajes: 1294
Registrado: 15 Mar 2011 00:40
Agradecido : 17 veces
Agradecimiento recibido: 89 veces

Re: ESP8266: wifi para nuestros micros

Mensajepor Taburoto » 09 Nov 2015 21:24

Y luego un soft multisistema,con chat y algo mas. Chatear desde el MSX con alguien que está en un CPC o un Spectrum......Conectar el Symbos de CPC con el del MSX....


Volver a “Lenguajes de Programación y herramientas Dev”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado