Desarrollado por un equipo de ex empleados de Google, Toit es una plataforma IoT completa con administración remota, actualizaciones de firmware para flotas de dispositivos con características similares a las que ofrecen soluciones como balena, Microsoft Azure o la plataforma Particle edge-to-cloud.
Toit actualmente trabaja en microcontroladores ESP32 usando contenedores livianos, y después de ver que los lenguajes de alto nivel existentes, MicroPython y Javascript no eran lo suficientemente rápidos en plataformas de microcontroladores de gama baja, el equipo de Toit comenzó a desarrollar el lenguaje Toit en 2018, y acaba de hacerlo. código abierto con el lanzamiento del compilador, la máquina virtual y bibliotecas estándar en Github bajo una licencia LGPL-2.1.
Una de las principales razones para cambiar de MicroPython al lenguaje Toit es si su aplicación está limitada por el rendimiento o si opera ESP32 desde una batería, ya que Toit afirma un rendimiento hasta 30 veces más rápido con Toit en ESP32:
Entramos en modo crunch y algunos meses después, obtuvimos los primeros resultados. Estábamos ejecutando código más de 30 veces más rápido que MicroPython en un ESP32 con un lenguaje de alto nivel que abstrae la asignación de memoria y que un desarrollador de Python puede aprender en unas pocas horas: el lenguaje Toit.
Así que echemos un vistazo más profundo probándolo en Ubuntu 20.04. La máquina virtual se basa en una bifurcación de ESP-IDF con implementación de malloc personalizada, correcciones de asignación para UART y correcciones de LWIP. Eso es lo que necesitaremos instalar primero:
1 2 3 4 5 6 |
git clone https://github.com/toitware/esp-idf.git pushd esp-idf/ git checkout patch-head-4.3-3 git submodule update --init --recursive export IDF_PATH=$(pwd) popd |
Ahora instale las herramientas ESP32:
1 2 3 |
sudo apt install python3-pip $IDF_PATH/install.sh . $IDF_PATH/export.sh |
y compile toit y muestras para ejecutar en la máquina host:
1 2 3 |
sudo apt install go --install=classic sudo apt-get install gcc-multilib g++-multilib make tools |
Ahora podemos ejecutar la muestra de hola mundo:
1 2 3 4 5 6 |
// Copyright (C) 2021 Toitware ApS. // Use of this source code is governed by a Zero-Clause BSD license that can // be found in the examples/LICENSE file. main: print "Hello, World!" |
como sigue:
1 2 |
build/host/bin/toitvm examples/hello.toit Hello, World! |
Todo eso está bien, pero ¿qué pasa con la creación de la muestra para ESP32? Fácil:
1 |
make esp32 |
Esto creará un archivo de firmware de Toit (toit.bin) precargado con la muestra de hello world y que se puede actualizar con esptool:
1 2 3 4 5 6 |
LD build/esp32/toit.elf esptool.py v3.1-dev Merged 2 ELF sections To flash all build output, run 'make flash' or: python /home/jaufranc/edev/esp-idf/components/esptool_py/esptool/esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 40m --flash_size detect 0xd000 /home/jaufranc/edev/toit/build/esp32/ota_data_initial.bin 0x1000 /home/jaufranc/edev/toit/build/esp32/bootloader/bootloader.bin 0x10000 /home/jaufranc/edev/toit/build/esp32/toit.bin 0x8000 /home/jaufranc/edev/toit/build/esp32/partitions.bin make[1]: Leaving directory '/home/jaufranc/edev/toit/toolchains/esp32' |
Bien, pero seguramente podemos comprobar una muestra con Wi-Fi, y de hecho está la muestra http.toit :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
// Copyright (C) 2021 Toitware ApS. // Use of this source code is governed by a Zero-Clause BSD license that can // be found in the examples/LICENSE file. import net import http main: network := net.open host := "www.google.com" socket := network.tcp_connect host 80 connection := http.Connection socket host request := connection.new_request "GET" "/" response := request.send bytes := 0 while data := response.read: bytes += data.size print "Read $bytes bytes from http://$host/" |
Ese ejemplo simple y ordenado, descarga la página de Google e informa el número de bytes descargados. Pero espera … ¿Dónde configuramos las credenciales de Wi-Fi? Esto se puede hacer en el momento de la compilación:
1 |
make esp32 ESP32_ENTRY=examples/http.toit ESP32_WIFI_SSID=myssid ESP32_WIFI_PASSWORD=mypassword |
o puede cambiar el programa predeterminado y configurar el SSID WiFi y la contraseña en el Makefile:
1 2 3 4 5 |
# Use 'make ESP32_ENTRY=examples/mandelbrot.toit' to compile a different # example for the ESP32 firmware. ESP32_ENTRY=examples/hello.toit ESP32_WIFI_PASSWORD= ESP32_WIFI_SSID= |
No tengo un ESP32 en funcionamiento para probarlo, pero supongo que podría modificar el hello.toit en el dispositivo después de actualizar el firmware de Toit por primera vez. La actualización del firmware OTA también debe habilitarse en función de la salida del comando make esp32. La plataforma Toit completa es de uso gratuito para hasta 10 dispositivos y, además de la página de Github, también puede encontrar información adicional en el sitio web de documentación no solo sobre el firmware y el lenguaje Toit que hemos usado aquí, sino también sobre la API de la nube y la plataforma Toit en su conjunto.
Publicaciones traducidas automáticamente