Crea una red de Thread con las placas EFR32 de Silicon Labs y OpenThread con Simplicity 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 que la tecnología de red que se usa en los productos Google Nest esté disponible para los desarrolladores de forma más amplia, a fin de acelerar el desarrollo de estos para los hogares y edificios comerciales conectados. Con una capa de abstracción de plataforma estrecha y una huella de memoria pequeña, OpenThread es muy portátil. Admite diseños de sistema en chip (SoC) y coprocesador de red (NCP).

La Especificación Thread define un protocolo de comunicación de dispositivos inalámbricos, confiable, seguro y de bajo consumo basado en IPv6 para aplicaciones de construcción doméstica y comercial.

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 Simplicity Studio 5 (SSv5). El SDK incluye una instantánea completamente probada del código fuente de GitHub. Admite una variedad más amplia de hardware que la versión de GitHub e incluye documentación y aplicaciones de ejemplo que no están disponibles en GitHub.

En esta guía, se describe cómo comenzar a desarrollar aplicaciones de OpenThread con el SDK de OpenThread de Silicon Labs y Simplicity 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 utilizados en el codelab.

Configuración de hardware EFR32MG

Qué aprenderás

  • Cómo crear un proyecto de OpenThread con el IDE de Silicon Labs de Simplicity Studio.
  • Cómo crear y escribir en la memoria flash objetos binarios de la CLI de OpenThread en placas de radio de Silicon Labs.
  • Cómo configurar un Raspberry Pi 3B o superior como un router de borde de OpenThread (OTBR) con Docker.
  • Cómo crear una red Thread en OTBR
  • La asignación de fuera de banda de los 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 pueden usar cualquier combinación de estos dispositivos. En este codelab, se usa un BRD4166A como el RCP y dos BRD4168A como dispositivos de subproceso completo.
    • EFR32MG12 (BRD4161A, BRD4166A, BRD4170A y BRD4304A)
    • EFR32MG13 (BRD4168A).
    • EFR32MG21 (BRD4180A y BRD4180B)
    Si recién empiezas, puedes obtener uno del kit de inicio de Thread EFR32 que incluye las placas que se mencionan más arriba.
  2. BRD4001A: Placas principales iniciales (WSTK) para alojar placas de radio. A excepción de BRD4166A, todas las placas de radio necesitan una placa principal inicial. Cables mini USB para conectar y alimentar las placas principales o un cable micro USB para BRD4166A.

WSTK AEM

  1. Una Raspberry Pi 3B o una versión posterior con imagen de Raspbian Stretch Lite o Raspbian Stretch con la computadora de escritorio, que está conectada a Internet mediante 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 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 depuración y escritura en la memoria flash por IP, por lo que, 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:

  • Simplicity Studio v5 instalado y actualizado en el sistema host de Windows, Linux y Mac con
    • Cadena de herramientas de ARM de GNU
    • SDK de Gecko 3.2.0 o una versión posterior y el SDK de SiThread Labs con OpenThread.

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. Simplicity 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 mediante USB, como se muestra en la siguiente imagen. Estas conexiones permitirán la programación y el análisis de red del RCP y los dispositivos finales. Primero usaremos la computadora host para programar el BRD4166A con el firmware ot-rcp y, finalmente, conectarlo a Raspberry Pi. De manera opcional, los dispositivos finales se pueden conectar a la computadora host mediante un conmutador Ethernet común. Los kits de inicio también admiten programación y análisis de red mediante IPv4.

Conexiones

4. Configuración del firmware

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

  1. Proyectos: Se recomienda crear, compilar y escribir en la memoria flash una aplicación de muestra. 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 muestra. Se recomienda que los usuarios prueben el firmware de demostraciones configurado como un ejercicio opcional. Consulta la sección "Configuración opcional de firmware: demostraciones" al final de este codelab para obtener más detalles.

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

  1. Abre el menú File de Studio y selecciona New > Silicon Labs Project Wizard. Se abrirá el diálogo de Selección de Objetivo, SDK y cadena de herramientas. No cambies la cadena de herramientas del IDE de Simplicity o GNU predeterminada que admite OpenThread. Haz clic en Siguiente.
    • Placas de destino: Muestra la placa de radio seleccionada (BRD4168A) junto con la placa principal (BRD4001A)
    • Dispositivo de destino: Este campo muestra el chip de microcontrolador (MCU) integrado. La BRD4168A tiene una MCU EFR32MG13 a bordo.
    • SDK: Aquí puedes seleccionar la versión del SDK 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, por ejemplo, Platform 4.0.1.0 y OpenThread 2.0.1.0 (GitHub-55af6ce2c).
    • IDE/ Toolchain: La cadena de herramientas que se usará para compilar el proyecto de PO. Utilizamos ARM ARM de GNU.

Asistente de proyectos nuevos

  1. Se abrirá el diálogo Ejemplo de selección de proyecto. 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 de 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 Configuración del proyecto. Aquí, puede cambiar el nombre de su proyecto, cambiar la ubicación predeterminada del archivo de proyecto y determinar si vinculará o copiará archivos del proyecto. Los archivos de proyecto vinculados apuntan al SDK y las modificaciones que realice se implementarán en el SDK y se usarán en proyectos futuros. Si copias las fuentes del proyecto, podrás editar una copia local del proyecto para que los archivos del 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 abrirá la Perspectiva del IDE de Simplicity con Project Configurator abierto en la pestaña OVERVIEW.

Descripción general del proyecto

El proyecto se configura desde la pestaña Software Components, mediante la instalación y desinstalación de componentes, y la configuración de componentes instalados. Se verifican los componentes instalados. Haga clic en Componentes instalados para ver una lista filtrada de componentes instalados por la aplicación de ejemplo. Los cambios que realice 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 Simplicity.

Componentes de software

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

Compila y escribe 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 proyecto.

Botón Build project

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

Ventana de resultados de compilación del proyecto

  1. Las imágenes binarias se generan después de una compilación exitosa del proyecto. Puedes escribir la imagen binaria en la memoria flash 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 seleccionas un dispositivo para programarlo, haz clic en Aceptar. Se abrirá Flash Programmer con la ruta de acceso de los archivos propagada. Haz clic en PROGRAMAR.

Flash

5. Resumen de la configuración del firmware

En este punto, deberías haber creado, compilado e instalado el firmware adecuado en las placas de radio. Una vez que ot-rcp se instala 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 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 del IDE de Simplicity, haz clic con el botón derecho en tu dispositivo J-Link en la ventana Devices View / Debug Adapters. Elige Iniciar 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 de ot-rcp. En el siguiente paso, configuraremos Raspberry Pi como 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 la OTBR en un contenedor permite la creación de artefactos de fácil implementación y prototipado y pruebas de desarrollo rápido.

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

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

Los contenedores de Docker deben usarse con RCP creados con Simplicity Studio 5 para una versión determinada. Asegúrese de que la versión de la etiqueta del contenedor coincida con la versión del SDK que está 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 de la imagen de Raspbian Stretch Lite o del Raspbian Stretch con la de escritorio.
  2. Puedes establecer una conexión SSH a la placa Raspberry Pi o trabajar directamente con la aplicación Raspbian Desktop. Abre una terminal.
  3. Asegúrate de actualizar tus 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. Cuando termine, puede modificar la configuración de usuario de Docker para que no requiera sudo antes de cada comando. Debes 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 tu versión de GSDK de Simplicity Studio coincida 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 al 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 por la versión coincidente del GSDK. 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 desconectado.
    • Puedes ver los registros en ejecución del contenedor en cualquier momento con el comando docker logs.
    • --name es fijo hasta que el contenedor de Docker se cierra correctamente (o se quita).
    • El puerto 8080 indica el puerto del servidor web que aloja la página web de administración del router de borde.
    • ?uart-baudrate=460800 es obligatorio en las opciones de la URL de radio para evitar problemas de fragmentación o reensamblaje a través de 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, puede comunicarse con el nodo de RCP mediante 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 ID de contenedores en ejecución.

$ docker ps -aq

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

$ docker logs [container-id] -f

De manera opcional, puede detener, quitar o cerrar su imagen si el contenedor de Docker se cargó de forma correcta.

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

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

En este punto, deberías tener 3 consolas.

  1. Dos consolas ot-cli-ftd en Simplicity Studio que están configuradas como dispositivos de Thread completo.
  2. Una shell interactiva ot-ctl en Raspberry Pi que se configura como un router de borde de PO

Ya estamos listos para crear una red Thread.

8. Cómo crear una red de Thread

Cómo configurar el RCP

Para crear la red, comenzamos con el shell ot-ctl en el OTBR, que se usa para comunicarse con el nodo 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

Crea una nueva configuración de red.

Lista

2

dataset commit active

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

Lista

3

ifconfig up

Habilitar la interfaz de Thread

Lista

4

thread start

Habilitar y adjuntar la operación del protocolo Thread

Lista

Espera 10 segundos hasta que la interfaz del subproceso esté funcionando.

5

state

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

Líder
Listo

6

dataset

Consulta la configuración de red.
Tus valores diferirán de este codelab.
Toma nota del canal, la clave de red, el
nombre de la red y el ID de PAN.

20









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

Cómo configurar y agregar el FTD a nuestra red de 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 Simplicity, agregue ambos FTD a nuestra red usando 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 el OTBR.

Lista

2

dataset networkkey 81ae2c2c17368d585dee71eaa8cf1e90

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

Lista

3

dataset commit active

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

Lista

4

ifconfig up

Habilitar la interfaz de Thread

Lista

5

thread start

Habilitar y adjuntar la operación del protocolo Thread

Lista

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

6

state

Ver la configuración de red

secundario
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. 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 la OTBR mediante la dirección 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. Repita el proceso para hacer ping a los FTD desde la OTBR.

9. Felicitaciones

Creaste una red Thread.

Ahora sabe lo siguiente:

  • Cómo crear un proyecto de OpenThread con el IDE de Silicon Labs de Simplicity Studio.
  • Cómo crear y escribir en la memoria flash objetos binarios de la CLI de OpenThread en placas de radio de Silicon Labs.
  • Cómo configurar un Raspberry Pi 3B o superior como un router de borde de OpenThread (OTBR) con Docker.
  • Cómo crear una red Thread en OTBR
  • La asignación de fuera de banda de los 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 obtener una variedad de recursos de OpenThread, incluidos los siguientes:

10. Configuración del firmware opcional: Demostraciones

Las demostraciones son imágenes de firmware compiladas previamente que están listas para descargarse en un dispositivo compatible. La manera más rápida de saber si una demostración está disponible para tu parte en Simplicity Studio es hacer clic en ella en la vista Debug Adapters (Adaptadores de depuración) y, luego, navegar a la pestaña EXAMPLE PROJECTS & DEMOS en la perspectiva del Selector. Inhabilita el filtro Proyectos de ejemplo y marca la casilla de verificación Thread en Tipo de tecnología.

Demostraciones de Studio

Las imágenes de aplicación de demostración compiladas previamente 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. Consulte las notas de la versión del SDK de SiThreadcon OpenThread en Documentación para obtener una lista completa de las piezas admitidas.

Escribe en la memoria flash 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 ejemplo correspondientes. Aparecerá una ventana emergente que muestra el progreso del flash.

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