Compilar una red Thread con 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 Thread de código abierto. Google lanzó OpenThread para que los desarrolladores puedan acceder a la tecnología de redes que se usa en sus productos Google Nest de forma más amplia y, así, acelerar el desarrollo de productos para el hogar conectado y los edificios comerciales. Con una capa de abstracción de plataforma estrecha y un uso de memoria reducido, OpenThread es altamente portátil. Admite diseños de sistema en chip (SoC) y de coprocesador de red (NCP).

La especificación de Thread define un protocolo de comunicación de dispositivo a dispositivo inalámbrico, seguro y de bajo consumo basado en IPv6 para aplicaciones de edificios comerciales y del hogar.

Silicon Labs mejoró OpenThread para que funcione 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 gama más amplia de hardware que la versión de GitHub. Además, incluye documentación y aplicaciones de ejemplo que no están disponibles en GitHub.

Esta guía describe cómo comenzar a desarrollar aplicaciones de OpenThread con el SDK de OpenThread de Silicon Labs 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 del EFR32MG

Qué aprenderás

  • Cómo crear un proyecto de OpenThread con el IDE de Simply Studio Studio de Silicon Labs
  • Cómo compilar y escribir objetos binarios de la CLI de OpenThread en las placas de radio de Silicon Labs
  • Cómo configurar un Raspberry Pi 3B+ o superior como router de borde de OpenThread (OTBR) con Docker.
  • Cómo crear una red Thread en la OTBR
  • Puesta en servicio fuera de banda de dispositivos en una red Thread.
  • Cómo verificar la comunicación de Thread entre los nodos con el comando 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 Thread completo.
    • EFR32MG12 (BRD4161A, BRD4166A, BRD4170A y BRD4304A)
    • EFR32MG13 (BRD4168A)
    • EFR32MG21 (BRD4180A y BRD4180B)
    Si recién empiezas, puedes conseguir uno del kit de inicio EFR32 Thread que tiene las placas mencionadas anteriormente.
  2. BRD4001A: placas de arranque inalámbricas (WSTK) para alojar las placas de radio. Excepto la BRD4166A, todas las placas de radio necesitan una placa principal de inicio cada una. Minicables USB para conectar y alimentar las placas principales o cable micro-USB para BRD4166A.

WSTK AEM

  1. Una Raspberry Pi 3B o superior con imagen de Raspbian Stretch Lite OS o Raspbian Stretch con computadora de escritorio que esté conectada a Internet por Ethernet. Configuramos esto como un router de borde de OT.
  2. Un sistema host de Windows, Linux o Mac con al menos 2 puertos USB y conexión a Internet. Consulta los requisitos de hardware y SO en SSv5.
  3. Al menos un cable Ethernet para conectar la placa Raspberry Pi a Internet. Los WSTK también admiten depuración y escritura en la memoria flash de IP, por lo que, de manera opcional, se pueden usar cables Ethernet adicionales para conectar el WSTK al sistema host a través de un conmutador Ethernet.

Software:

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

3. Configuración del hardware

Este codelab se creó usando

  1. EFR32MG12 BRD4166A Thunderboard Sense 2 como se muestra a la izquierda.
  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 Wireless Starter Kit 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 la red del RCP y los dispositivos finales. Primero, usaremos la computadora host para programar el BRD4166A con el firmware ot-rcp y, finalmente, lo conectaremos a la Raspberry Pi. De manera opcional, los dispositivos finales se pueden conectar a la computadora host a través de un conmutador Ethernet común. Los kits de inicio también admiten programación y análisis de red en IPv4.

Conexiones

4. Configuración del firmware

Hay dos maneras de comenzar. Ambas opciones te permiten escribir en la memoria flash los firmwares necesarios para este codelab.

  1. Proyectos (recomendado): Crea, compila y escribe en la memoria flash una aplicación de ejemplo. Esta opción te permite personalizar la aplicación en el proyecto.
  2. Demostraciones: (Opcional) Escribe las demostraciones prediseñadas directamente en la placa de radio para cualquiera de las aplicaciones de ejemplo. Se recomienda a los usuarios que prueben el firmware de Demos configurado como un ejercicio opcional. Consulta "Configuración de firmware opcional: Demostraciones" al final de este codelab para obtener más información.

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 ejemplo adecuada para tu pizarra.

  1. Abre el menú File de Studio y selecciona New > Asistente de proyectos de Silicon Labs. Se abrirá el diálogo Target, SDK, and Toolchain Selection. No cambies el IDE de Simply predeterminado / cadena de herramientas GNU compatible con OpenThread. Haz clic en Siguiente.
    • Placas de destino: Muestra la placa de radio seleccionada (BRD4168A) junto con la placa principal (BRD4001A).
    • Dispositivo de destino: En este campo, se muestra el chip del microcontrolador (MCU) integrado. La BRD4168A tiene un MCU EFR32MG13 integrado.
    • SDK: Aquí puedes seleccionar la versión de SDK de OT con la que estás trabajando. La información del paquete incluye la etiqueta del SDK y la compilación de Silicon Labs de OpenThread, por ejemplo, Platform 4.0.1.0 y OpenThread 2.0.1.0 (GitHub-55af6ce2c).
    • IDE/ Cadena de herramientas: La cadena de herramientas que se usará para compilar el proyecto de OT. Usamos GNU ARM.

Asistente de proyectos nuevos

  1. Se abrirá el diálogo Example Project Selection. Verás una lista de proyectos de ejemplo. Usa el tipo de tecnología Thread y los filtros de palabras clave para buscar un ejemplo específico. Asegúrate de anotar el número de versión del Gecko SDK Suite. Necesitarás esta etiqueta de versión cuando configures Raspberry Pi como router de borde. Selecciona ot-cli-ftd y, luego, haz clic en SIGUIENTE.

Paso 2 del asistente de proyectos nuevos

  1. Se abrirá el diálogo Project Configuration. Aquí puedes cambiar el nombre de tu proyecto y la ubicación predeterminada de los archivos del proyecto, y determinar si los vincularás o copiarás. Los archivos de proyecto vinculados apuntan al SDK, y cualquier modificación que realices se hará en el SDK y se utilizará para proyectos futuros. Copiar las fuentes del proyecto te permite editar una copia local del proyecto para que los archivos del SDK permanezcan intactos. "Link SDK and copy project sources" es la opción predeterminada y la recomendada. Haz clic en FINALIZAR.

Paso 3 del asistente de proyectos nuevos

  1. Se abrirá la perspectiva de simplicidad del IDE con Project Configurator abierto en la pestaña DESCRIPCIÓN GENERAL.

Descripción general del proyecto

Para configurar el proyecto desde la pestaña Componentes de software, debes instalar y desinstalar componentes y configurar los componentes instalados. Se verificaron los componentes instalados. Haz clic en Componentes instalados para ver una lista filtrada de los componentes instalados por la aplicación de ejemplo. Cualquier cambio que hagas se guardará automáticamente y los archivos de proyecto se generarán automáticamente. El progreso se muestra en la esquina inferior derecha de la perspectiva del IDE de simplicidad.

Componentes de software

Para esta demostración, usaremos la configuración predeterminada de las aplicaciones de ejemplo. Repite los pasos anteriores para crear el proyecto ot-rcp de tu otra pizarra.

Compila y escribe los proyectos en la memoria flash

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

  1. Una vez configurado tu proyecto, haz clic en el Control de compilación (ícono de hammer) en la barra de herramientas superior. También puedes hacer clic con el botón derecho en el proyecto y seleccionar Compilar proyecto.

Botón para compilar proyecto

  1. El progreso se muestra en Console y una barra de progreso en la esquina inferior derecha. Cualquier error o advertencia relacionados con tu proyecto también aparecerá en esta ventana de resultados.

Ventana de resultados de compilación del proyecto

  1. Las imágenes de los objetos binarios se generan después de la compilación correcta de un proyecto. 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, selecciona un dispositivo para programarlo y haz clic en OK. Flash Programmer se abrirá con la ruta del archivo ya completada. Haz clic en PROGRAMA.

Flash

5. Resumen de la configuración del firmware

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

Después de que completes esta sección, la configuración del hardware de red de 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 la consola, en la perspectiva de Simply IDE, haz clic con el botón derecho en tu dispositivo J-Link en la ventana Devices View / Debug Adapters. Elige Launch Console. Para recibir un mensaje en la consola, 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 aún no tenemos una consola para ot-rcp. En el siguiente paso, configuraremos la Raspberry Pi como router de borde de OT y configuraremos la consola para ot-rcp.

7. Cómo configurar Raspberry Pi como router de borde

Silicon Labs recomienda implementar el contenedor de Docker de la empresa con la OTBR. Ejecutar la OTBR en un contenedor permite la creación de artefactos fácilmente implementables y un prototipado y pruebas de desarrollo rápidos.

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

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

Los contenedores de Docker deben usarse con RCPs compilados con Simply Studio 5 para una versión determinada. Asegúrate de que la versión de la etiqueta de contenedor coincida con la versión del GSDK que estás probando. Por ejemplo, si tu 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 el escritorio.
  2. Puedes acceder con SSH a Raspberry Pi o elegir trabajar directamente con Raspbian Desktop. Abre una terminal.
  3. Asegúrate de actualizar los repositorios locales y el administrador de paquetes (apt-get update y apt-get upgrade 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. Una vez finalizado, puedes modificar la configuración del usuario de Docker para que no se requiera sudo antes de cada comando. Debes reiniciar el sistema.
    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 hacer coincidir la versión del GSDK de Simply Studio con la imagen de Docker correcta. Por ejemplo, gsdk-4.0.1:
    docker pull siliconlabsinc/openthread-border-router:gsdk-4.0.1
    

Configura y ejecuta Docker

  1. Debes configurar el puerto TTY que deseas usar para que el OTBR conecte tu RCP durante el inicio. Busca el puerto TTY de tu dispositivo RCP. La forma 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 con la versión de GSDK que coincida. 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 separado.
    • Puedes ver los registros en ejecución del contenedor en cualquier momento con el comando docker logs.
    • --name permanecerá fijo hasta que el contenedor de Docker se cierre (o se quite) de forma correcta.
    • El puerto 8080 indica el puerto del servidor web que aloja la página web de administración del router de borde.
    • Se requiere ?uart-baudrate=460800 en las opciones de URL de radio para evitar problemas de fragmentación o reensamblaje en UART, con operaciones costosas, como DTLS con paquetes IPv6 largos.

Interactúa con el nodo de RCP

Cuando se esté ejecutando el Docker, puedes comunicarte con el nodo RCP a través de una shell interactiva con este comando. Verifica el estado del nodo RCP.

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

Puede obtener una lista de los IDs de contenedores en ejecución

$ docker ps -aq

Puedes 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, puedes detener, quitar o finalizar tu imagen si el contenedor de Docker se cargó 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 de ot-cli-ftd en Simply Studio que se configuran como dispositivos Full Thread.
  2. Una shell interactiva ot-ctl en la placa Raspberry Pi que se configura como router de borde OT.

Ya está todo listo para crear una red Thread.

8. Crea una red de Thread

Cómo configurar el RCP

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

Índice

Comando

Descripción del comando

Respuesta esperada

1

dataset init new

Crea una nueva configuración de red.

Listo

2

dataset commit active

Confirmar el nuevo conjunto de datos en el conjunto de datos operativo activo

Listo

3

ifconfig up

Habilitar la interfaz de Thread

Listo

4

thread start

Habilita y adjunta la operación de protocolo Thread.

Listo

Espera 10 segundos para que la interfaz del subproceso esté activa.

5

state

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

Leader
Done

6

dataset

Visualiza la configuración de red.
Tus valores serán diferentes a los de este codelab.
Toma nota del canal, la clave de red,
el nombre de la red y el ID del número PAN.











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

Configurar y agregar 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 manualmente. En las consolas de simplicidad, agrega 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

Establece el canal que usa la 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

Confirmar el nuevo conjunto de datos en el conjunto de datos operativos activos

Listo

4

ifconfig up

Habilitar la interfaz de Thread

Listo

5

thread start

Habilita y adjunta la operación de protocolo Thread.

Listo

Espera 20 segundos mientras el dispositivo se une y se configura.

6

state

Ver la configuración de red.

hijo
Listo

Comunicación entre dispositivos Thread

Usaremos el comando ping para verificar si los dispositivos pueden comunicarse entre sí. Para usar el comando ping, necesitamos las direcciones IPv6 de los dispositivos. Estos 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)

Desde ambos FTD, hacen ping a la OTBR mediante la dirección de RLOC de la 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 recibida y que la comunicación se realizó correctamente. Repite el proceso para hacer ping a los FTD desde la OTBR.

9. Felicitaciones

Creaste una red Thread

Ahora sabes lo siguiente:

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

Lecturas adicionales

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

10. Configuración de firmware opcional: Demostraciones

Las demostraciones son imágenes de firmware compiladas previamente que están listas para descargarse en un dispositivo compatible. La forma más rápida de saber si hay una demostración disponible para ti en Simply Studio es haciendo clic en tu parte en la vista Debug Adapters y, luego, navegando a EJEMPLO DE PROYECTOS. Pestaña DEMOS (DEMOSTRACIONES) en la perspectiva del Selector (Launcher Perspective). Inhabilita el filtro Example Projects y marca la casilla de verificación de Thread en Technology Type.

Demostraciones en estudio

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 las versiones futuras del SDK para incluir más placas de radio. Para obtener una lista completa de las partes compatibles, consulta las notas de la versión del SDK de OpenThread de Silicon Labs en la sección Documentación.

Escribe las siguientes demostraciones en las pizarras correspondientes. Para escribir en la memoria flash, selecciona tu placa en Debug Adapters a la izquierda y haz clic en RUN para las aplicaciones de ejemplo correspondientes. Una ventana emergente mostrará el progreso del flash.

  1. BRD4166A: ot-rcp: Este dispositivo funcionará como un procesador Radio Co para el router de borde de OT. Usaremos este dispositivo para crear una red Thread y, luego, integrar los otros dos dispositivos en ella. Debido a que es un router de borde, este dispositivo también actúa como puerta de enlace para que los dispositivos de la red Thread se comuniquen a través de Internet.
  2. Dos BRD4168A: ot-cli-ftd. Estos dos dispositivos actuarán como dispositivos de Thread completo. Se unirán a la red Thread creada por la OTBR.