Разработанная командой бывших сотрудников Google, Toit представляет собой полноценную платформу Интернета вещей с удаленным управлением, обновлениями прошивки для парка устройств с функциями, аналогичными функциям, предлагаемым такими решениями, как balena, Microsoft Azure или платформа Edge-to-Cloud.
В настоящее время Toit работает с микроконтроллерами ESP32 с использованием легких контейнеров, и, увидев, что существующие языки высокого уровня MicroPython и Javascript недостаточно быстры на платформах микроконтроллеров низкого уровня, команда Toit в 2018 году начала разработку языка программирования Toit и на днях представила его с открытым исходным кодом с выпуском компилятора, виртуальной машины и стандартных библиотек на Github под лицензией LGPL-2.1.
Одна из основных причин перехода с MicroPython на язык Toit заключается в том, что ваше приложение ограничено производительностью или вы используете ESP32 от батареи, а разработчики языка программирования Toit утверждают, что с Toit на ESP32 производительность повышается до 30 раз:
Мы перешли в авральный режим работы и через несколько месяцев получили первые результаты. Мы выполняли код более чем в 30 раз быстрее, чем MicroPython, на ESP32 с языком высокого уровня, который абстрагирует выделение памяти и который может быть изучен за несколько часов разработчиком Python: языком Toit.
Итак, давайте посмотрим глубже, попробовав это в Ubuntu 20.04. Виртуальная машина основана на ответвлении ESP-IDF с настраиваемой реализацией malloc, исправлениями выделения для UART и исправлениями LWIP. Вот что нам нужно установить в первую очередь:
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
Теперь установите инструменты ESP32:
sudo apt install python3-pip
$IDF_PATH/install.sh
. $IDF_PATH/export.sh
и соберите toit и образцы для запуска на хост-машине:
sudo apt install go --install=classic
sudo apt-get install gcc-multilib g++-multilib
make tools
Теперь мы можем запустить образец hello world:
// 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!"
следующее:
build/host/bin/toitvm examples/hello.toit
Hello, World!
Это все хорошо, но как насчет создания образца для ESP32? Легко:
make esp32
Это создаст файл прошивки Toit (toit.bin) с предварительно загруженным образцом hello world, который можно прошить с помощью esptool:
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'
Хорошо. Но, стоит проверить образец с помощью Wi-Fi. Действительно, есть образец http.toit :
// 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/"
Этот аккуратный и простой пример загрузки страницы Google, сообщающий количество загруженных байтов. Но подождите … Где мы настраиваем учетные данные Wi-Fi? Это можно сделать во время сборки:
make esp32 ESP32_ENTRY=examples/http.toit ESP32_WIFI_SSID=myssid ESP32_WIFI_PASSWORD=mypassword
или вы можете изменить программу по умолчанию и настроить WiFi SSID и пароль в Makefile:
# 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=
У нас есть ESP32, но мы предполагаем, что вы сможете изменить hello.toit на самом устройстве после первой прошивки Toit. Обновление прошивки OTA также должно быть включено на основе выходных данных команды make esp32 . Полная платформа Toit бесплатна для использования на 10 устройствах, и, помимо страницы Github, вы также можете найти дополнительную информацию на веб-сайте документации не только о прошивке и языке Toit, которые мы использовали здесь, но также об Cloud API и платформе Toit в целом.
Выражаем свою благодарность источнику из которого взята и переведена статья, сайту cnx-software.com.
Оригинал статьи вы можете прочитать здесь.