Toit เป็นแพลตฟอร์ม IoT ที่สมบูรณ์ ซึ่งพัฒนาโดยทีมงานของอดีตพนักงาน Google, พร้อมฟังก์ชันการจัดการระยะไกลและการอัปเดตเฟิร์มแวร์ สำหรับอุปกรณ์จำนวนมากที่มีคุณสมบัติคล้ายกับที่เสนอโดยโซลูชัน เช่น balena, Microsoft Azure หรือแพลตฟอร์ม Particle edge-to-cloud
ปัจจุบัน Toit ใช้ lightweight containers ทำงานบนไมโครคอนโทรลเลอร์ ESP32 และหลังจากที่ได้เห็นภาษาระดับสูงที่มีอยู่อย่าง MicroPython และ Javascript ไม่เร็วพอบนแพลตฟอร์มไมโครคอนโทรลเลอร์ระดับล่าง ทีมงานของ Toit ก็เริ่มพัฒนาภาษา Toit ในปี 2561 และเพิ่งสร้างโอเพ่นซอร์สเสร็จ พร้อมการเปิดตัวคอมไพเลอร์ เครื่องเสมือน และไลบรารีมาตรฐาน บน Github ภายใต้ลิขสิทธิ์ LGPL-2.1
เหตุผลหลักประการหนึ่งในการเปลี่ยนจาก MicroPython เป็นภาษา Toit คือหากแอปพลิเคชันของคุณถูกจำกัดด้วยประสิทธิภาพหรือคุณใช้งาน ESP32 จากแบตเตอรี่ เนื่องจาก Toit อ้างว่า Toit มีประสิทธิภาพเร็วขึ้นถึง 30 เท่า บน ESP32:
เราเข้าสู่โหมดวิกฤต (crunch) และหลายเดือนต่อมา เราก็ได้ผลลัพธ์แรก เรากำลังรันโค้ดที่เร็วกว่า MicroPython มากกว่า 30 เท่าบน 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 |
build/host/bin/toitvm examples/hello.toit Hello, World! |
สิ่งนี้จะสร้างไฟล์เฟิร์มแวร์ 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 ทั้งหมด
แปลจากบทความภาษาอังกฤษ : Toit open-source language claims to be 30x faster than MicroPython on ESP32
บรรณาธิการข่าวและบทความภาษาไทย CNX Software ได้มีความสนใจในด้านเทคโนโลยี โดยเฉพาะ Smart Home และ IoT