Toit是前谷歌员工团队开发的一个完整物联网平台,该平台具有远程管理、固件更新的功能。它适用于设备群,其功能类似于 balena、Microsoft Azure 或 Particle这类边缘到云平台解决方案所提供的功能。
Toit 原本是使用轻量级容器在 ESP32 微控制器上工作,不过在看到现有高级语言 MicroPython 和 Javascript 在低端微控制器平台上运行不够快之后,Toit 团队在2018 年开始开发 Toit 语言,并且实现了开源。他们还在基于LGPL-2.1 许可证的基础上在Github上发布了编译器、虚拟机和标准库 。
如果你们的应用程序受到了性能限制,或者你们使用电池运行 ESP32,你们可以试试从 MicroPython 切换到 Toit 语言。因为Toit 方面声称在 ESP32 上使用 Toit 可将性能提高 30 倍:
在我们进入了加班模式的几个月后,我们有了第一个结果,即一种抽象出内存分配的高级语言:Toit语言。我们使用该语言在ESP32 上执行代码的速度比在MicroPython 上快 30倍,而且Python开发人员们可以在几个小时内学会该语言。
因此,让我们可以通过在 Ubuntu 20.04 中试用来更深入地了解它。该虚拟机基于具有自定义 malloc 实现、UART 分配修复和 LWIP 修复的 ESP-IDF 的分支。以下是我们首先需要安装的:
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 |
build/host/bin/toitvm examples/hello.toit Hello, World! |
一切都很好,那么如何为 ESP32 构建示例呢?也很简单,如下:
1 |
make esp32 |
这将创建一个预加载了的 hello world 示例的 Toit 固件文件 (toit.bin),之后就可以使用 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/" |
这一简洁又简单的例子只是下载谷歌页面并报告下载的字节数。但是等等,我们在哪里配置Wi-Fi凭证呢?可以在构建时添加,如下所示:
1 |
make esp32 ESP32_ENTRY=examples/http.toit ESP32_WIFI_SSID=myssid ESP32_WIFI_PASSWORD=mypassword |
或者你们也可以通过更改默认程序的方式在 Makefile 中配置 WiFi SSID 和密码:
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 来测试它,但我猜想是可以在第一次刷新 Toit 固件后修改设备本身自带的 hello.toit。根据make esp32命令的输出显示,OTA 固件更新应该也可以被启用。完整的 Toit 平台最多可免费用于 10 台设备,除了 Github 页面,你们还可以在文档网站上找到更多信息,不仅包括我们在此处使用的固件和 Toit 语言,还包括 Cloud API 和整个Toit平台。
文章翻译者:Nicholas,技术支持工程师、瑞科慧联(RAK)高级工程师,深耕嵌入式开发技术、物联网行业多年,拥有丰富的行业经验和新颖独到的眼光!