Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Crea una red Thread con las placas EFR32 de Silicon Labs y OpenThread con Simply Studio v5

1. Introducción

26b7f4f6b3ea0700.png

OpenThread (OT) de Google es una implementación de código abierto de Thread. Google lanzó OpenThread a fin de ampliar la disponibilidad de la tecnología de red de los productos Google Nest para los desarrolladores con el fin de acelerar el desarrollo de productos para los edificios comerciales y para el hogar conectado. Con una estrecha capa de abstracción de la plataforma y una pequeña huella de memoria, OpenThread es altamente portátil. Es compatible con los diseños de sistema en chip (SoC) y de coprocesador de red (NCP).

La Especificación de Thread define un protocolo de comunicación entre dispositivos confiable, seguro y de baja potencia que se basa en IPv6 para las aplicaciones de construcción comerciales y domésticas.

Silicon Labs mejoró OpenThread para trabajar con el hardware de Silicon Labs. Este código fuente está disponible en GitHub y también como un kit de desarrollo de software (SDK) instalado con Simply Studio 5 (SSv5). El SDK incluye una instantánea completamente probada del código fuente de GitHub. Es compatible con una variedad de hardware más amplia que la versión de GitHub. Incluye documentación y aplicaciones de ejemplo no disponibles en GitHub.

En esta guía, se describe cómo comenzar a desarrollar aplicaciones de OpenThread con el SDK de Silicon OpenThread y Simply Studio 5. En la siguiente imagen, se muestran las placas (BRD) y el hardware configurado con un router de borde de OT (OTBR) y dos dispositivos Thread que se usan en el codelab.

Configuración del hardware EFR32MG

Qué aprenderás

  • Cómo crear un proyecto de OpenThread con el IDE de Silicon Labs Simply Studio
  • Cómo compilar y escribir en la memoria flash los objetos binarios de la CLI de OpenThread para placas de radio de Silicon Labs
  • Cómo configurar Raspberry Pi 3B o versiones posteriores como un router de borde de OpenThread (OTBR) con Docker.
  • Cómo crear una red Thread en OTBR
  • La asignación de dispositivos fuera de banda a una red Thread
  • Cómo verificar la comunicación de Thread entre los nodos con el comando de ping

2. Requisitos previos

Hardware:

  1. 3 placas de radio EFR32MGxx: se puede usar cualquier combinación de estos dispositivos. En este codelab, se usa un BRD4166A como RCP y dos BRD4168A como dispositivos de subproceso completo.
    • EFR32MG12 (BRD4161A, BRD4166A, BRD4170A y BRD4304A)
    • EFR32MG13 (BRD4168A)
    • EFR32MG21 (BRD4180A, BRD4180B).
    Si recién comienzas, puedes obtener uno de los kits de inicio de Thread EFR32, que tienen las placas anteriores.
  2. BRD4001A: placas de inicio inalámbricas inalámbricas (WSTK) para alojar las placas de radio Excepto por BRD4166A, todas las placas de radio necesitan una placa principal inicial. Cables mini-USB para conectar y alimentar las placas principales o el cable micro-USB para BRD4166A

WSTK AEM

  1. Una Raspberry Pi 3B o versiones posteriores con Imagen de Raspbian Stretch Lite o Raspbian Stretch con una computadora, que está conectado a Internet a través de Ethernet. Esto se configura como un router de borde de OT.
  2. Un sistema host de Windows, Linux o Mac con al menos 2 puertos USB y una conexión a Internet. Consulta los requisitos de hardware y SO en SSv5.
  3. Al menos un cable Ethernet para conectar la Raspberry Pi a Internet. Los WSTK también admiten la depuración y la escritura en la memoria flash por lo tanto, de manera opcional, se pueden usar cables Ethernet adicionales para conectar el WSTK a tu sistema host a través de un conmutador Ethernet.

Software:

  • Simply Studio v5 instalado y actualizado en el sistema host de Windows/Linux/Mac con
    • Conjunto de herramientas ARM GNU
    • Gecko SDK Suite 3.2.0 o una versión posterior y el SDK de OpenThread de Silicon Labs.

3. Configuración del hardware

Este Codelab se creó con

  1. EFR32MG12 BRD4166A Thunderboard Sense 2, como se muestra en el lado izquierdo.
  2. Dos EFR32MG13 BRD4168A como se muestra a la derecha.
  3. Simply Studio v5 instalado en un macOS Catalina 10.15.7 con
    1. SDK de Gecko 3.2.0
    2. GNU ARM v7.2.1

BRD4168A

Conecta cada placa principal del kit de inicio inalámbrico a la computadora host por USB, como se muestra en la siguiente imagen. Estas conexiones permitirán la programación y el análisis de redes del RCP y los dispositivos finales. Primero, usaremos la computadora host para programar el BRD4166A con el firmware ot-rcp y, luego, conectarlo a la placa Raspberry Pi. De manera opcional, los dispositivos finales pueden conectarse a la computadora host por medio de un interruptor Ethernet común. Los kits de inicio también admiten programación y análisis de red a través de IPv4.

Conexiones

4. Configuración de firmware

Hay dos maneras de comenzar. Ambas opciones te permiten instalar los firmwares que son necesarios para este codelab.

  1. Proyectos (recomendado): Crea, compila e instala una aplicación de ejemplo. Esta opción te permite personalizar la aplicación en el proyecto.
  2. Demostraciones (opcional): Escribe las demostraciones precompiladas directamente en la placa de radio para cualquiera de las aplicaciones de muestra. Se recomienda a los usuarios que prueben el firmware de demostraciones configurado como un ejercicio opcional. Para obtener más información, consulta la sección "Configuración de firmware opcional - Demostraciones" al final de este codelab.

En este codelab, usaremos el método basado en proyectos.

Crea proyectos con ejemplos

Crearemos dos proyectos. El proyecto ot-rcp para BRD4166A y el proyecto ot-cli-ftd para los dos BRD4168A Sigue estos pasos y selecciona la aplicación de muestra adecuada para tu pizarra.

  1. Abre el menú File de Studio y selecciona New > Silicon Labs Project Assistant. Se abrirá el diálogo Target, SDK, and Toolchain Selection. No cambies el conjunto de herramientas SIDEY o GNU predeterminado compatible con OpenThread. Haz clic en Siguiente.
    • Placas de destino: Muestra la placa de radio seleccionada (BRD4168A) junto con la placa principal (BRD4001A)
    • Target Device: Este campo muestra el chip de microcontrolador (MCU) integrado. El BRD4168A tiene incorporada una MCU EFR32MG13.
    • SDK: Aquí puedes seleccionar la versión de OT con la que estás trabajando. La información de Suite incluye la etiqueta del SDK y la compilación de Silicon Labs de OpenThread, como Platform 4.0.1.0 y OpenThread 2.0.1.0 (GitHub-55af6ce2c).
    • IDE/ Chainchain: El conjunto de herramientas que se usará para compilar el proyecto OT. Usamos ARM ARM.

Asistente de proyectos nuevos

  1. Se abrirá el diálogo Selección de proyecto de ejemplo. Verás una lista de proyectos de ejemplo. Usa el filtro de tipo de palabra clave y el tipo de tecnología Thread para buscar un ejemplo específico. Asegúrate de anotar el número de versión de Gecko SDK Suite. Necesitarás esta etiqueta de versión cuando configures Raspberry Pi como router de borde. Seleccione ot-cli-ftd y, luego, haga clic en SIGUIENTE.

Paso 2 del asistente de proyectos nuevos

  1. Se abrirá el diálogo Configuración del proyecto. Aquí puedes cambiar el nombre de tu proyecto, cambiar su ubicación predeterminada y determinar si vincularás o copiarás archivos del proyecto. Los archivos de proyecto vinculados apuntan al SDK y las modificaciones que usted realiza terminan en el SDK y se usan para proyectos futuros. Copiar las fuentes del proyecto te permite editar una copia local del proyecto para que los archivos SDK permanezcan intactos. "Vincular SDK y copiar fuentes del proyecto' es la opción predeterminada y recomendada. Haga clic en FINALIZAR.

Paso 3 del asistente de proyectos nuevos

  1. Se abre la perspectiva del IDE de Simply con Project Configurator abierto en la pestaña OVERVIEW.

Descripción general del proyecto

El proyecto se configura desde la pestaña Componentes de software mediante la instalación y desinstalación de componentes, y la configuración de componentes instalados. Se verifican los componentes instalados. Haz clic en Componentes instalados para ver una lista filtrada de componentes que instaló la aplicación de ejemplo. Los cambios que realices se guardarán automáticamente y los archivos del proyecto se generarán automáticamente. El progreso se muestra en la esquina inferior derecha de la perspectiva del IDE de Simply.

Componentes de software

En esta demostración, usaremos la configuración predeterminada de las aplicaciones de muestra. Repite los pasos anteriores a fin de crear el proyecto ot-rcp para la otra placa.

Cómo compilar y escribir en la memoria flash de los proyectos

Compila y escribe en la memoria flash los proyectos ot-rcp y ot-cli-ftd.

  1. Después de configurar tu proyecto, haz clic en Build control (hammer icon) en la barra de herramientas superior. Como alternativa, puedes hacer clic con el botón derecho en el proyecto y, luego, en Compilar.

Botón Compilar proyecto

  1. El progreso se muestra en Console y en la barra de progreso de la parte inferior derecha. Los errores o las advertencias relacionados con tu proyecto también aparecerán en esta ventana de salida.

Ventana de salida de compilación del proyecto

  1. Las imágenes binarias se generan después de compilar un proyecto correctamente. Puedes escribir en la memoria flash la imagen binaria desde la vista Project Explorer. Ubica el archivo .bin, .hex o .s37 en el subdirectorio del compilador. Haz clic con el botón derecho en el archivo y selecciona Flash to Device. Si tienes más de un dispositivo conectado y selecciona un dispositivo para programar, haz clic en OK. El programador de Flash se abrirá con la ruta del archivo propagada. Haz clic en PROGRAMA.

Flash

5. Resumen de configuración de firmware

En este punto, deberías haber creado, compilado y actualizado el firmware correspondiente en las placas de radio. Una vez que ot-rcp esté escrito en la memoria flash BRD4166A, desconéctalo del sistema host y conecta esta placa a la placa Raspberry Pi.

Después de completar esta sección, la configuración de hardware de la red Thread se verá de la siguiente manera:

Configuración de EFR32MG

6. Configura la consola en serie para dispositivos ot-cli-ftd

Para iniciar la interfaz de Console, desde la perspectiva del IDE de Simply, haz clic con el botón derecho en tu dispositivo J-Link en la ventana "Views/Debug Adapters". Elige Console. Para recibir un mensaje en Console, elige la pestaña Serial 1 y presiona Intro. Verifica el estado del nodo FTD.

Vista de la consola de FTD Studio

Notarás que todavía no tenemos una consola para ot-rcp. En el siguiente paso, configuraremos Raspberry Pi como un router de borde de OT y configuraremos la consola para ot-rcp.

7. Configura Raspberry Pi como router de borde

Silicon Labs recomienda implementar el contenedor de Docker de la empresa con el OTBR. Ejecutar el OTBR en un contenedor permite crear artefactos fáciles de implementar y prototipado y pruebas de desarrollo rápidas.

Las imágenes de OTBR de Silicon Labs se alojan en siliconlabsinc DockerHub, con etiquetas. Cada etiqueta corresponde a una versión de GSDK:

https://hub.docker.com/r/siliconlabsinc/openthread-border-router/tags

Los contenedores de Docker se deben usar con RCP creados con Simply Studio 5 para una versión determinada. Asegúrate de hacer coincidir una versión de etiqueta de contenedor con la versión de GSDK con la que realizarás la prueba. Por ejemplo, si la versión de GDSK era Gecko SDK Suite v4.0.1 (140) cuando seleccionaste ot-rcp en la ventana Example Project Selection, usa la imagen siliconlabsinc/openthread-border-router:gsdk-4.0.1.

Versión de GSDK

Configuración de Raspberry Pi

  1. En la tarjeta SD, asegúrate de escribir en la memoria flash la imagen de Raspbian Stretch Lite OS o Raspbian Stretch con computadora de escritorio.
  2. Puedes conectarte mediante SSH a la placa Raspberry Pi o trabajar directamente con la computadora con escritorio de Raspbian. Abre una terminal.
  3. Asegúrate de actualizar los repositorios locales y el administrador de paquetes (apt-get update y apt-get update antes de instalar Docker).

Instalar imagen de Docker

  1. Instala Docker con el siguiente comando en tu RPi.
    curl -sSL https://get.docker.com | sh
    
  2. Cuando haya finalizado, podrá modificar la configuración del usuario de Docker para que no requiera sudo antes de cada comando. Se debe reiniciar.
    sudo usermod -aG docker $USER
    
  3. Ejecuta los siguientes comandos para instalar los contenedores. Ten en cuenta que solo puedes ejecutar un contenedor de router de borde a la vez con tu RCP. Además, asegúrate de que la versión de GSDK de Simply Studio coincida con la imagen de Docker correcta. Por ejemplo, gsdk-4.0.1:
    docker pull siliconlabsinc/openthread-border-router:gsdk-4.0.1
    

Configurar y ejecutar Docker

  1. Debes configurar el puerto TTY que deseas usar para que el OTBR conecte tu RCP al inicio. Busca el puerto TTY de tu dispositivo RCP. La manera más fácil de hacerlo es buscar una entrada /tty/dev... una vez que se conecte el RCP. Por lo general, debe ser /dev/ttyUSB0 o /dev/ttyACM0.
  2. Ejecuta la instalación de Docker con el siguiente comando. Asegúrate de reemplazar el nombre de tu imagen de Docker por la versión de GSDK coincidente. Por ejemplo, gsdk-4.0.1:
    docker run -d --name "otbr" \
     --sysctl "net.ipv6.conf.all.disable_ipv6=0 net.ipv4.conf.all.forwarding=1 net.ipv6.conf.all.forwarding=1" \
     -p 8080:80 --dns=127.0.0.1 -it \
     --volume /dev/ttyACM0:/dev/ttyACM0 \
     --privileged siliconlabsinc/openthread-border-router:gsdk-4.0.1 \
     --radio-url spinel+hdlc+uart:///dev/ttyACM0?uart-baudrate=460800 \
     --backbone-interface eth0
    
    • -d garantiza que el contenedor se ejecute en modo de desconexión.
    • Puedes ver los registros en ejecución para el contenedor en cualquier momento con el comando docker logs.
    • --name es persistente hasta que el contenedor de Docker se cierra (o quita) de forma correcta.
    • El puerto 8080 indica el puerto del servidor web que aloja la página web de administración del router fronterizo.
    • ?uart-baudrate=460800 es obligatorio en las opciones de URL de radio para solucionar problemas de fragmentación o reensamblaje mediante UART, con operaciones costosas, como DTLS con paquetes IPv6 largos.

Interactúa con el nodo de RCP

Una vez que se esté ejecutando el docker, usted puede comunicarse con el nodo de RCP a través de un shell interactivo usando este comando. Verifica el estado del nodo de RCP.

$ docker exec -ti otbr sh -c "sudo ot-ctl"
> state 
disabled
Done

Puede obtener una lista de los ID de contenedor en ejecución.

$ docker ps -aq

Puede verificar la ventana que ejecuta el contenedor de Docker de OTBR para ejecutar el resultado del registro del router de borde o seguir el registro del contenedor de la siguiente manera:

$ docker logs [container-id] -f

De manera opcional, puede detener, quitar o finalizar la imagen si el contenedor de Docker está cargado correctamente.

$ docker stop otbr
$ docker rm otbr
$ docker kill otbr

Opcional: Para salir de la shell, usa CNTL + C.

En este punto, deberías tener 3 consolas.

  1. Dos consolas ot-cli-ftd en Simply Studio que están configuradas como dispositivos Thread completos.
  2. Un shell interactivo ot-ctl en la Raspberry Pi, que se configura como un router de borde de OT

Ya estamos listos para formar una red Thread.

8. Cómo crear una red Thread

Configurar RCP

Para crear la red, comenzamos con el shell ot-ctl en el OTBR, que se usa para comunicarse con el nodo de RCP. Ingrese los siguientes comandos en el orden que se muestra a continuación:

Índice

Comando

Descripción del comando

Respuesta esperada

1

dataset init new

Crear una nueva configuración de red

Listo

2

dataset commit active

Confirma un conjunto de datos nuevo con el conjunto de datos operativo activo.

Listo

3

ifconfig up

Habilita la interfaz de Thread.

Listo

4

thread start

Habilita y adjunta la operación de protocolo de Thread.

Listo

Espera 10 segundos para que aparezca la interfaz de subprocesos.

5

state

Verifica el estado del dispositivo. Debería ser la línea principal.
Otros estados posibles: sin conexión, inhabilitado, desconectado,
secundario, router o líder

Líder
Listo

6

dataset

Revisa la configuración de la red.
Tus valores serán distintos a este codelab.
Toma nota del canal, la clave de red,
el nombre de la red y el ID del PAN.

Marca de tiempo activa: 1
Canal: 20
Máscara de la red: 0x07fff800
ID del PAN extremo: 39ba71f7fc367160
Prefijo local de la malla: fd5c:c6b:3a17:40b9::/64
Clave de red: 81ae2c0c0c8d
F
06 oportunidades
F6-6

Usaremos el número de canal y la clave de red en ot-cli-ftd para unir los dos FTD a esta red de subprocesos.

Configura y agrega FTD a nuestra red Thread (método fuera de banda)

Con el método fuera de banda, conocemos toda la información de seguridad y agregamos el nodo de forma manual. En las consolas de simplicidad, agregue ambos FTD a nuestra red con los siguientes comandos en el orden que se muestra a continuación.

Índice

Comando

Descripción del comando

Respuesta esperada

1

dataset channel 20

Configura el canal utilizado por OTBR.

Listo

2

dataset networkkey 81ae2c2c17368d585dee71eaa8cf1e90

Solo se requiere la clave de red para que un dispositivo se conecte a una red Thread.

Listo

3

dataset commit active

Confirma un conjunto de datos nuevo con el conjunto de datos operativo activo.

Listo

4

ifconfig up

Habilita la interfaz de Thread.

Listo

5

thread start

Habilita y adjunta la operación de protocolo de Thread.

Listo

Espera 20 segundos mientras el dispositivo se une y se configura automáticamente.

6

state

Consulta la configuración de la red.

secundario
Listo

Comunicación entre dispositivos Thread

Usaremos el comando ping para comprobar si los dispositivos pueden comunicarse entre sí. Para usar el comando ping, necesitamos las direcciones IPv6 de los dispositivos. Se pueden obtener con el comando ipaddr.

> ipaddr
fd5c:c6b:3a17:40b9:0:ff:fe00:fc00		# Leader Anycast Locator (ALOC)
fd5c:c6b:3a17:40b9:0:ff:fe00:1800		# Routing Locator (RLOC)
fd5c:c6b:3a17:40b9:84e2:bae8:bd5b:fa03		# Mesh-Local EID (ML-EID)
fe80:0:0:0:c449:ca4a:101f:5d16			# Link-Local Address (LLA)

En ambos FTD, se hace ping a OTBR con la dirección RLOC de OTBR.

> ping fd5c:c6b:3a17:40b9:0:ff:fe00:1800
Done
> 
> 16 bytes from fd5c:c6b:3a17:40b9:0:ff:fe00:1800: icmp_seq=3 hlim=64 time=30ms
16 bytes from fd5c:c6b:3a17:40b9:0:ff:fe00:1800: icmp_seq=3 hlim=64 time=52ms

La respuesta indica la carga útil que se recibió y que la comunicación se realizó correctamente. Repita el proceso para hacer ping a FTD desde el OTBR.

9. Felicitaciones

Creaste una red Thread.

Ahora sabe lo siguiente:

  • Cómo crear un proyecto de OpenThread con el IDE de Silicon Labs Simply Studio
  • Cómo compilar y escribir en la memoria flash los objetos binarios de la CLI de OpenThread para placas de radio de Silicon Labs
  • Cómo configurar Raspberry Pi 3B o versiones posteriores como un router de borde de OpenThread (OTBR) con Docker.
  • Cómo crear una red Thread en OTBR
  • La asignación de dispositivos fuera de banda a una red Thread
  • Cómo verificar la comunicación de Thread entre los nodos con el comando de ping

Lecturas adicionales

Consulta openthread.io y GitHub para obtener una variedad de recursos de OpenThread, incluidos los siguientes:

10. Configuración de firmware opcional: Demostraciones

Las demostraciones son imágenes de firmware precompiladas que están listas para descargar en un dispositivo compatible. La forma más rápida de averiguar si una demostración está disponible para tu parte en Simply Studio es hacer clic en tu parte en la vista Adaptadores de depuración y luego navegar a la pestaña EXAMPLE PROJECTS & DEMOS en el Selector de aplicaciones. Inhabilita el filtro Example Projects y marca la casilla de verificación de la opción Thread, en Technology Type.

Demostraciones de Studio

Las imágenes de aplicación de demostración compiladas previamente que se proporcionan con el SDK de OpenThread son compatibles con las siguientes placas:

  1. BRD4161a
  2. BRD4166a
  3. BRD4168a
  4. BRD4180a
  5. BRD4304a

Es posible que esta lista se actualice en futuras versiones del SDK para incluir más placas de radio. Consulta las notas de la versión del SDK de OpenThread de Silicon Labs en la sección Documentación para ver una lista completa de las partes compatibles.

Escribe las siguientes demostraciones en las pizarras correspondientes. Para escribir en la memoria flash, selecciona tu placa en Adaptadores de depuración a la izquierda y haz clic en EJECUTAR para las aplicaciones de muestra correspondientes. Aparecerá una ventana emergente que mostrará el progreso del flash.

  1. BRD4166A: ot-rcp. Este dispositivo funcionará como un procesador de radio co en el router fronterizo de OT. Usaremos este dispositivo para crear una red Thread e incorporar los otros dos dispositivos en la red Thread. Al ser un router de borde, este dispositivo también funciona como una puerta de enlace para los dispositivos en la red Thread a fin de comunicarse por Internet.
  2. Dos BRD4168A: ot-cli-ftd. Estos dos dispositivos actuarán como dispositivos de subproceso completo. Se unirán a la red Thread que creó OTBR.