Instalación de OpenWRT 19 en Linkit Smart 7688

10
140

Tanto el Linkit Smart 7688 como el Linkit Smart Duo 7688 son dos tarjetas electrónicas que son (o eran?) comercializadas por Seeestudio, siendo ambas tarjetas uno de los productos más populares de la empresa. Estas tarjetas están basadas en el chipset MediaTek MT7688AN, un microprocesador en el cual corre el sistema operativo basado en OpenWRT.

Existen dos diferencias fundamentales entre el Linkit Smart 7688 y el Linkit Smart Duo 7688: en una tarjeta hay un microprocesador y en la otra es un híbrido entre microprocesador y microcontrolador. De hecho, más que un híbrido, el modelo Linkit Smart Duo es la unión de un Arduino Leonardo (Atmel 32u4) y el MediaTek MT7688AN.

El modelo Duo puede ser utilizado como un Arduino que tiene la capacidad de comunicarse con el microprocesador a través de la librería Bridge. En el caso del otro modelo, se trata únicamente de un procesador que cuenta con varios GPIO, pero que no puede ser publicado en Arduino. Ambas tarjetas son muy económicas, lo cual ha contribuido a su enorme popularidad.

Linkit Smart Duo, el modelo basada en un híbrido entre un microcontrolador (Arduino Leonardo) y un microprocesador (MediaTek MT7688AN)
Linkit Smart 7688, una tarjeta basada en un microprocesador (MediaTek MT7688AN)

El Linkit Smart Duo 7688 es el equivalente de Seeedstudio del Arduino Yún, aquel modelo de Arduino que también integraba un microcontrolador (Atmel 32u4) y un microprocesador (Atheros AR9331), pero que era muy costoso (arriba de 60 dólares). Sobre esta tarjeta ya he escrito un par de posts en este blog, los cuales puedes encontrar aquí.

El Linkit Duo cuesta una tercera parte de lo que costaba el Yún en su momento, y posee muchos más recursos de hardware (128 MB de RAM vs 64 MB del Yún; 580 MHz de frecuencia vs 400 MHz del Yún). Pero, a pesar de la enorme popularidad de este producto, el equipo de desarrolladores no continuo con el proyecto y básicamente abandonaron el desarrollo del firmware de esta tarjeta en 2017 o talvez en 2018.

Los reviews que hay en la página son todos excelentes, logrando ambos productos (la versión duo y la versión sencilla) casi 5 estrellas de rating. Cada vez que lanzan nuevo stock de estos productos pasan pocos meses antes de que se acaba. Al día de hoy, en el mes de enero 2021 ya van varios meses desde que el producto se encuentra «out of stock».

Producto de la enorme popularidad de esas tarjetas y dado que el equipo de desarrollo lleva años sin trabajaren en este proyecto, a los afortunados que aún tenemos de estas tarjetas solo nos queda buscar opciones en Internet para seguir usándolas con software actualizado.

La última version del firmware que se lanzó para el Linkit está basada en OpenWRT 15 (Chaos Calmer), la cual es una versión muy estable que se ha quedado obsoleta en estos días. Después de Chaos Calmer el proyecto OpenWRT pasó por «la ruptura» y luego por «la fusión» (véase OpenWRT LEDE), razón por la cual en estos días se considera a Chaos Calmer como una distro obsoleta de OpenWRT.

Personalmente creo que con Chaos Calmer se pueden hacer muchas cosas interesantes, pero las carencias de esta distro van más allá de lo tolerable una vez aumentamos el nivel de nuestros proyectos. Esto es especialmente importante cuando se requiere del uso de los últimos paquetes de Python, por poner un ejemplo.

Afortunadamente dentro del proyecto OpenWRT se le ha seguido dando soporte al hardware del microprocesador del Linkit. Utilizando el procedimiento que vamos a describir en este post, usted podrá instalar OpenWRT 19 a su Linkit, sea el modelo Dúo o el modelo sencillo. Con esto usted podrá disfrutar de los paquetes más recientes que han sido creados o actualizados para la plataforma de OpwnWRT. La versión específica que utilizaremos para este post será OpenWRT 19.07.5, lanzada el 20 de diciembre de 2020 (hace poco menos de un mes).

Consideraciones previas antes de la instalación

Hay algunas cosas que tendremos que considerar antes de la instalación de OpenWRT 19 en nuestro Linkit. En el caso del Linkit sencillo, no habrá mayores diferencias en la operación al actualizar desde Chaos Calmer.

En el caso del Linkit Smart Duo, al actualizar desde Chaos Calmer perderemos la capacidad de utilizar el Bridge, lo cual es sumamente lamentable. El Bridge es una librería que básicamente le permite a nuestros programas en Arduino interactuar con Internet y con el microprocesador de una manera muy sencilla. Yo personalmente he tratado de adaptar el Bridge a la nueva versión de OpenWRT pero no es tan sencillo. Hay muchas cosas que hay que tomar en cuenta para poder lograrlo.

Pero, ¿qué es el Bridge?. Es una librería que permite establecer comunicación con el microprocesador por medio de comunicación serial. En el procesador se corre un script en Python desde el inicio de la ejecución, que básicamente tiene la función de «escuchar» el puerto serie y ejecutar las acciones en el lado del MPU. Este script gestione el flujo de información entre MCU y MPU. La principal razón por la cual se pierde la capacidad de usar el Bridge es porque este no forma parte de OpenWRT, sino que es algo propio de la imagen customizada de Seeedstudio.

Yo he tratado de usar el SDK de ellos para crear una imagen que venga con el Bridge, pero no he tenido mucho éxito. Habría que ver si copiando los archivos manualmente y cambiando las configuraciones necesarias se pueda implementar el Bridge en versiones más recientes de OpenWRT, pero esto es más fácil dicho que hecho.

Personalmente he encontrado que es más fácil lograr resultados similares al Bridge al hacer un script en Python que se encargue de gestionar lo que queremos lograr en el lado del MPU. Esto espero explicarlo en un post dedicado a ello, el cual no he escrito pero quiero escribir en los próximos días.

En fin, tomando en cuenta que no se podrá usar el Bridge con el OpenWRT 19, pero que existen opciones para lograr resultados similares, procedo a explicarles el procedimiento para hacer la actualización. Los componentes de hardware que necesitarás son:

  • Linkit Smart 7688 o Linkit Smart Duo 7688
  • Memoria USB entre 1 GB y 16 GB (creo que más de 32 GB no funciona)
  • Adaptador OTG
  • Adaptador FTDI a USB de 3.3 voltios
  • Breakout board para Linkit Smarrt 7688 o para Linkit Smart Duo 7688 (opcional)

También se necesitan los siguientes recursos de software:

Con estos recursos podremos hacer la actualización. Veamos los pasos.

Pasos a seguir para la actualización de OpenWRT
  1. Descargar la imagen de OpenWRT y colocarla dentro de la memoria USB. Para que funcione la actualización, al archivo se le tiene que asignar el nombre «lks7688.img» (sin las comillas).
  2. Al colocar la imagen en la memoria USB se debe conectar esta memoria al puerto USB del Linkit utilizando el adaptador OTG.
  3. Para iniciar con el proceso de actualización, es necesario alimentar el Linkit conectándolo por medio de USB (puerto PWR) a una fuente de alimentación de 5 voltios, sea una computadora o un cargador de celular. Una vez encendida la tarjeta, se procede a presionar el botón «WIFI reset» (ver imagen) sin soltarlo. Manteniendo el «WIFI reset» presionado, procedemos a presionar y soltar el «MPU reset». Esto causará que el LED rojo que está a la derecha del puerto PWR se encienda durante unos segundos. Cuando se apaga el LED rojo, soltamos el botón de «WIFI reset».
  4. Si el procedimiento anterior se hizo bien, deberíamos ver que el LED rojo que está al lado del puerto USB empieza a parpadear, primero muy rápido y luego de 5 o 10 segundos seguirá parpadeando, pero más lento. Esto significa que se está «quemando» la imagen de OpenWRT en la memoria flash del Linkit.
  5. Cuando el LED rojo deje de parpadear y se quede estático, entonces habrá finalizado el proceso de actualización del firmware.
Configuraciones iniciales de OpenWRT

Luego de la actualización nos encontraremos con el problema de que no tenemos el WIFI habilitado en el Linkit. Por defecto viene deshabilitado, así que tenemos que habilitarlo. Para ello vamos a necesitar el software Putty y el adaptador FTDI que mencionamos en la lista de materiales.

La razón para esto es muy simple: como no tenemos acceso de red, es necesario acceder a a la consola del sistema operativo, lo cual se puede lograr a través de comunicación serial. En el pinout del Linkit podemos ver que hay un puerto serie que podemos usar para este propósito:

Pinout del Linkit Smart 7688

En este diagrama podemos ver que en los GPIO 20 y 21 (en color naranja) se ubican los puertos UART TX2 y UART RX2. Al lado de ellos también hay un GND. Esos 3 pines son los que necesitamos para acceder a la consola. El pin de 3V3 lo podemos usar también pero es opcional.

Diagrama de conexiones entre el Linkit y el adaptador FTDI

Es importante que el adaptador de FTDI sea de 3.3 voltios. Algunos vienen con un jumper que permite seleccionar el voltaje de operación entre 5 y 3.3V. Es muy muy importante usarlo con 3.3 voltios, pues si se utiliza 5 voltios vamos a dañar el Linkit permanentemente.

Al conectar el adaptador FTDI al Linkit es necesario alimentar al Lintkit por el puerto USB. Es decir, habrá dos conexiones: una entra la PC y el Linkit y la otra entre la PC y el adaptador FTDI. Con los dispositivos conectados, necesitamos saber el puerto COM que ha sido asignado al adaptador FTDI, algo que podemos encontrar en el Administrador de Dispositivos de Windows.

Otra opción es abrir el Arduino IDE y ver los Puertos Serie disponibles. En todo caso, sabiendo el número del puerto COM procedemos a entrar a Putty. Aquí utilizaremos esta configuración:

Al establecer la configuración, presionamos el botón «Open» y se nos abre una consola como la se la siguiente imagen:

En este punto debemos establecer el password del usuario root, usando el comando «passwd». Luego de eso pasamos a habilitar el WIFI del Linkit, configurándolo en modo Cliente. Es decir, vamos a configurar el Linkit para que se conecte a una red de WIFI existente y que a través de esa red pueda tener acceso a Internet (siempre y cuando la red tenga acceso a Internet).

También es posible configurar el Linkit en modo AP, es decir, para que el Linkit levante una red de WIFI que nos permita comunicarnos directamente de manera inalámbrica con el Linkit. Sin embargo, en este modo no tenemos acceso a Internet así que pasaré directamente al modo cliente.

Primero establecemos la configuración del wireless de OpenWRT. Para ello escribimos el siguiente comando:

Eso nos debe abrir el archivo de configuración wireless. Presionamos la tecla «i» y enter. Borramos todo el contenido del archivo. Luego pegamos lo siguiente:

En esta configuración tenemos que cambiar la parte que dice red_de_wifi por el nombre de la red a la que nos queremos conectar. También cambiamos password_de_wifi por el password de dicha red.

Ahora presionamos las teclas Esc (escape), luego :wq y presionamos Enter. Con eso deberíamos dejar guardada la nueva configuración.

Si abrimos el archivo nuevamente veremos que la configuración de habrá guardado. Ahora necesitamos editar el archivo network.

Luego presionamos «i» (sin comillas) y Enter. Se debe agregar lo siguiente al final del archivo:

Se presiona Esc, luego :wq y Enter. Ahora aplicaremos la configuración del Linkit y reiniciaremos el sistema para ver los resultados. Eso lo lograremos con los siguientes comandos:

Con esto el sistema se reiniciará y luego de 50 o 60 segundos presionamos Enter en la ventana de Putty para habilitar la consola. Para verificar si tenemos acceso a Internet, probamos con el comando:

Con eso el sistema debería empezar a descargar y actualizar los paquetes disponibles en el repositorio de OpenWRT.

Si usamos el comando ifconfig podemos tener la IP del Linkit en la red de WIFI en la cual está conectado.

En este punto podríamos instalar Luci, que es la interfaz gráfica web de OpenWRT. Para ello instalamos los siguientes paquetes:

Después de esto necesitamos habilitar el acceso a la interfaz web desde WAN en el firewall de OpenWRT. Para ello utilizamos el software recién instalado, nano, y abrimos el archivo de configuración:

Aquí modificaremos el acceso en la zona WAN:

Cambiamos los parámetros de REJECT por ACCEPT, guardamos la configuración (Control+O), salimos de nano (Control+X) y reseteamos el sistema (reboot). Luego de esto vamos a un navegador web (como Google Chrome) y escribimos la IP de nuestro Linkit en la red de WIFI (en mi caso 192.168.0.32). Aquí deberíamos ver la interfaz web de Luci:

Con esto hemos terminado la configuración inicial más básica que se puede hacer al OpenWRT 19 instalado en el Linkit. Lo que venga después ya será decisión de cada usuario.

Espero que este post haya sido de su agrado. Cualquier duda favor hacérmela llegar a través de los comentarios.

10 Comentarios

  1. Hi Antony,

    looks like not only the Bridge but also the kernel modules for the SPI connected SD-card are still missing in OpenWRT 19.

    https://forum.openwrt.org/t/linkit-smart-7688-move-filesystem-to-sd-card/37897/12.

    Did you rebuild the firmware according to the recommandations in this thread?

    Actually, I haven’t compiled Unix kernels for years und I don’t know anything about the dependencies of the neccessary OpenWRT packages (mmc, sdhci …) either.

    Any idea where I can get help?

    Best regards,

    Gunter

    (Sorry, I speak und read Spanish fluently, but my grammar is still a mess. So I must write in English)

      • Thanks a lot.

        Indeed, installing kmod-sdhci-mt7620 I could see my SD-Card for the first time with

        # lsblk

        mmcblk0 179:0 0 29.2G 0 disk
        – mmcblk0p1 179:1 0 29.2G 0 part

        Didn’t realize that is was so easy and without kernel-compilations.

        Transfering the Root-FS worked as described.

        For transfering data between Mediatek and Atmel processor over UART I will try some scripts from the Arduino/Raspberry tutorials.

        Are you still working on your Bridge-project?

        • Yes, I am. Whenever I have time.
          Last year I spent a lot of time working on this. I have a lot of stuff done using OpenWRT with Linkit.

          One example of that is this: http://panamahitek.com/tratando-de-disenar-y-construir-un-respirador-mecanico-de-bajo-costo-en-panama/

          The last prototype tha is shown in the TV interview (at the end of the post) has a Linkit Smart 7688 + Teensy 4.0 inside. It is so powerful.
          I found a way to send 100 values every second from Teensy to the Tablet through the Linkit, using a Websocket. We tested the prototype in several tests with pigs and it works just like a $25,000 commercial ventilator at one-tenth of the price. I built all hardware (3D printed parts and PCBs) and software (Arduino, Python, PHP, Java (Android)) from scratch.

          Anyway, while working in that project I found that Bridge was to slow, so I created my own script in Python and used one of the Serial ports available at Teensy.
          Here I have one of the Python scripts I was using:

          import serial
          import time
          import os

          s = None

          def setup():
          global s
          s = serial.Serial(«/dev/ttyS1″,115200, writeTimeout=0)

          def loop():
          input=»»
          while s.inWaiting()!=0:
          i = s.read()
          b = ord(i)
          if b!=10 and b!=13:
          input=input+chr(b)
          if b==13:
          print(input)
          file = open(«/www/covid_19/mcuOutput.txt», «w»)
          file.write(input)
          file.close()
          break

          if __name__ == ‘__main__’:
          setup()
          while True:
          loop()

          With that script, you will be able to send information from Arduino to linkit and save it in a text file (I named it «/www/covid_19/mcuOutput.txt»). This script listens to /dev/ttyS1 which you can find in pins P16 and P17 (not sure. Check pinout and look for UART_RXD1 and UART_TXD1). If you use a software serial port (like SoftwareSerial) in the Arduino side, you have to use a lower baudrate (4800, 9600, or close to that). If you use hardware Serial Port, 115200 is OK.

          I have to document all the experience I got from many projects that I have developed in the last couple of years but I am struggling with time.
          I hope this can help you with what you are trying to accomplish.

          • Thanks for the script, I will try it.

            Well, speed ist not important for me. I’m using the LinkIt Smart Duo for data aquisition in my Smart Home. The nice feature of the bridge was, that data could be presented without extensive coding in a browser via uHTTP and small CGI script on the Mediatek side.

            Since the devices are not connected to the Internet directly (I transfer the data by MQTT to a mosquitto broker, wihch is attachted to Node Red/Home Assistant on a Odroid H2+), I can still remain at Chaos Calmer or try my on HTTP transfer.

            Did you experiment with such things also? Please let me know.

          • Hello. The main reason for me to upgrade from Chaos Calmer is to install pip3, python and node JS new packages. If you don’t need that, Chaos Calmer will be just fine

  2. ¿Qué ventajas crees que tenga este Linkit en comparación con un ESP32 de doble núcleo en cuanto a posibilidades y soporte de la comunidad maker?

    • Hola. Gracias por escribir.

      La principal ventaja que tiene sobre el ESP32 es que en el Linkit tienes OpenWRT que es un sistema operativo. Esto quiere decir que es, para efectos prácticos, una mini computadora que corre Linux.
      En esa mini computadora tienes un webserver, puedes expandir la memoria hasta 32 GB con una memoria microSD y guardar enormes cantidades de datos.
      Puedes instalar y correr scripts en Python, PHP, Java, Node, Javascript, NodeJS, etc. Puedes instalar y gestionar bases de datos MySQL y SqLite. Posiblemente otro tipos de bases de datos tambien.
      Debido a que tienes una salida serial de hardware, todos esos programas pueden interactuar directamente con tus circuitos en Arduino.
      Con el Linkit las posibilidades son infinitas. El ESP32 te da conectividad inalambrica y algunas funciones de webserver, pero no más

Dejar respuesta

Please enter your comment!
Please enter your name here