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