由一个前Google员工团队开发,GydF4y2BaTOIT是一个完整的物联网平台GydF4y2Ba通过远程管理,针对设备机队的固件更新具有类似于Balena,Microsoft Azure或粒子边缘到云平台等解决方案提供的功能。GydF4y2Ba
TOIT目前使用轻巧的容器在ESP32微控制器上工作,并且在低端微控制器平台上看到现有的高级语言Micropython和JavaScript的速度不够快,TOIT的团队开始在2018年开发TOIT语言,并且刚刚制作了它编译器,虚拟机和GydF4y2Ba标准库GydF4y2Ba在github上GydF4y2Ba根据LGPL-2.1许可。GydF4y2Ba
从Micropython转换为TOIT语言的主要原因之一是,如果您的应用程序受到性能的限制或您通过电池操作ESP32,则TOIT声称在ESP32上的TOIT索赔速度更快30倍:GydF4y2Ba
我们进入了紧缩模式,几个月后,我们取得了第一个结果。我们正在执行代码GydF4y2Ba在ESP32上比微pypython快30倍以上GydF4y2Ba使用高级语言,可以抽象出记忆分配,并且可以在几个小时内由Python开发人员学习:Toit语言。GydF4y2Ba
因此,通过在Ubuntu 20.04中尝试一下,让我们更深入地看待它。虚拟机是基于具有自定义Malloc实现的ESP-IDF的叉子,用于UART的分配修复和LWIP修复。这就是我们首先需要安装的方法:GydF4y2Ba
1GydF4y2Ba
2GydF4y2Ba
3GydF4y2Ba
4GydF4y2Ba
5GydF4y2Ba
6GydF4y2Ba
|
Git
克隆GydF4y2Ba
httpsGydF4y2Ba
:GydF4y2Ba
//github.com/toitware/esp-idf.gitGydF4y2Ba
PushdGydF4y2Ba
特别是GydF4y2Ba
-GydF4y2Ba
IDFGydF4y2Ba
/GydF4y2Ba
Git
查看GydF4y2Ba
修补GydF4y2Ba
-GydF4y2Ba
头GydF4y2Ba
-GydF4y2Ba
4.3GydF4y2Ba
-GydF4y2Ba
3GydF4y2Ba
Git
子模块GydF4y2Ba
更新GydF4y2Ba
- -GydF4y2Ba
在里面GydF4y2Ba
- -GydF4y2Ba
递归GydF4y2Ba
出口GydF4y2Ba
idf_pathGydF4y2Ba
=GydF4y2Ba
$GydF4y2Ba
((GydF4y2Ba
PWDGydF4y2Ba
)GydF4y2Ba
popdGydF4y2Ba
|
现在安装ESP32工具:GydF4y2Ba
1GydF4y2Ba
2GydF4y2Ba
3GydF4y2Ba
|
SudoGydF4y2Ba
易于GydF4y2Ba
安装GydF4y2Ba
python3GydF4y2Ba
-GydF4y2Ba
pipGydF4y2Ba
$GydF4y2Ba
idf_pathGydF4y2Ba
/GydF4y2Ba
安装GydF4y2Ba
。GydF4y2Ba
shGydF4y2Ba
。GydF4y2Ba
$GydF4y2Ba
idf_pathGydF4y2Ba
/GydF4y2Ba
出口GydF4y2Ba
。GydF4y2Ba
shGydF4y2Ba
|
并构建toit和样品以在主机机上运行:GydF4y2Ba
1GydF4y2Ba
2GydF4y2Ba
3GydF4y2Ba
|
SudoGydF4y2Ba
易于GydF4y2Ba
安装GydF4y2Ba
去GydF4y2Ba
- -GydF4y2Ba
安装GydF4y2Ba
=GydF4y2Ba
经典的GydF4y2Ba
SudoGydF4y2Ba
易于GydF4y2Ba
-GydF4y2Ba
得到GydF4y2Ba
安装GydF4y2Ba
海湾合作委员会GydF4y2Ba
-GydF4y2Ba
MultilibGydF4y2Ba
GGydF4y2Ba
++GydF4y2Ba
-GydF4y2Ba
MultilibGydF4y2Ba
制作GydF4y2Ba
工具GydF4y2Ba
|
我们现在可以运行Hello World样本:GydF4y2Ba
1GydF4y2Ba
2GydF4y2Ba
3GydF4y2Ba
4GydF4y2Ba
5GydF4y2Ba
6GydF4y2Ba
|
/GydF4y2Ba
/GydF4y2Ba
版权GydF4y2Ba
((GydF4y2Ba
CGydF4y2Ba
)GydF4y2Ba
2021GydF4y2Ba
至itware
APSGydF4y2Ba
。GydF4y2Ba
/GydF4y2Ba
/GydF4y2Ba
利用GydF4y2Ba
的GydF4y2Ba
这个GydF4y2Ba
资源GydF4y2Ba
代码GydF4y2Ba
是GydF4y2Ba
统治GydF4y2Ba
经过GydF4y2Ba
一个GydF4y2Ba
零GydF4y2Ba
-GydF4y2Ba
条款GydF4y2Ba
BSDGydF4y2Ba
执照GydF4y2Ba
那GydF4y2Ba
can
/GydF4y2Ba
/GydF4y2Ba
是GydF4y2Ba
成立GydF4y2Ba
在GydF4y2Ba
这GydF4y2Ba
例子GydF4y2Ba
/GydF4y2Ba
执照GydF4y2Ba
文件GydF4y2Ba
。GydF4y2Ba
主要的GydF4y2Ba
:GydF4y2Ba
打印GydF4y2Ba
"Hello, World!"
|
一个s follows:
1GydF4y2Ba
2GydF4y2Ba
|
build
/GydF4y2Ba
主持人GydF4y2Ba
/GydF4y2Ba
垃圾桶GydF4y2Ba
/GydF4y2Ba
toitvmGydF4y2Ba
例子GydF4y2Ba
/GydF4y2Ba
你好GydF4y2Ba
。GydF4y2Ba
toitGydF4y2Ba
你好GydF4y2Ba
,,,,GydF4y2Ba
World
呢GydF4y2Ba
|
一切都很好,但是为ESP32构建样本是什么?亚博体育官下载简单的:GydF4y2Ba
1GydF4y2Ba
|
制作GydF4y2Ba
ESP32GydF4y2Ba
|
这个will create a Toit firmware file (toit.bin) preloaded with the hello world sample and that can be flashed with esptool:
1GydF4y2Ba
2GydF4y2Ba
3GydF4y2Ba
4GydF4y2Ba
5GydF4y2Ba
6GydF4y2Ba
|
ldGydF4y2Ba
build
/GydF4y2Ba
ESP32GydF4y2Ba
/GydF4y2Ba
toitGydF4y2Ba
。GydF4y2Ba
精灵GydF4y2Ba
EsptoolGydF4y2Ba
。GydF4y2Ba
pyGydF4y2Ba
v3GydF4y2Ba
。GydF4y2Ba
1GydF4y2Ba
-GydF4y2Ba
开发GydF4y2Ba
合并GydF4y2Ba
2GydF4y2Ba
精灵GydF4y2Ba
部分GydF4y2Ba
至GydF4y2Ba
闪光GydF4y2Ba
全部GydF4y2Ba
build
输出GydF4y2Ba
,,,,GydF4y2Ba
跑GydF4y2Ba
“做闪光”GydF4y2Ba
或者GydF4y2Ba
:GydF4y2Ba
PythonGydF4y2Ba
/GydF4y2Ba
家GydF4y2Ba
/GydF4y2Ba
JaufrancGydF4y2Ba
/GydF4y2Ba
EdevGydF4y2Ba
/GydF4y2Ba
特别是GydF4y2Ba
-GydF4y2Ba
IDFGydF4y2Ba
/GydF4y2Ba
成分GydF4y2Ba
/GydF4y2Ba
esptool_pyGydF4y2Ba
/GydF4y2Ba
EsptoolGydF4y2Ba
/GydF4y2Ba
EsptoolGydF4y2Ba
。GydF4y2Ba
pyGydF4y2Ba
- -GydF4y2Ba
芯片GydF4y2Ba
ESP32GydF4y2Ba
- -GydF4y2Ba
港口GydF4y2Ba
/GydF4y2Ba
开发GydF4y2Ba
/GydF4y2Ba
ttyusb0GydF4y2Ba
- -GydF4y2Ba
波特GydF4y2Ba
921600GydF4y2Ba
- -GydF4y2Ba
前GydF4y2Ba
default_reset
- -GydF4y2Ba
后GydF4y2Ba
hard_resetGydF4y2Ba
write_flashGydF4y2Ba
-GydF4y2Ba
zGydF4y2Ba
- -GydF4y2Ba
flash_modeGydF4y2Ba
dioGydF4y2Ba
- -GydF4y2Ba
闪光GydF4y2Ba
_GydF4y2Ba弗雷克GydF4y2Ba
40mGydF4y2Ba
- -GydF4y2Ba
flash_sizeGydF4y2Ba
探测GydF4y2Ba
0xd000GydF4y2Ba
/GydF4y2Ba
家GydF4y2Ba
/GydF4y2Ba
JaufrancGydF4y2Ba
/GydF4y2Ba
EdevGydF4y2Ba
/GydF4y2Ba
toitGydF4y2Ba
/GydF4y2Ba
build
/GydF4y2Ba
ESP32GydF4y2Ba
/GydF4y2Ba
ota_data_initialGydF4y2Ba
。GydF4y2Ba
垃圾桶GydF4y2Ba
0x1000GydF4y2Ba
/GydF4y2Ba
家GydF4y2Ba
/GydF4y2Ba
JaufrancGydF4y2Ba
/GydF4y2Ba
EdevGydF4y2Ba
/GydF4y2Ba
toitGydF4y2Ba
/GydF4y2Ba
build
/GydF4y2Ba
ESP32GydF4y2Ba
/GydF4y2Ba
引导加载程序GydF4y2Ba
/GydF4y2Ba
引导加载程序GydF4y2Ba
。GydF4y2Ba
垃圾桶GydF4y2Ba
0x10000GydF4y2Ba
/GydF4y2Ba
家GydF4y2Ba
/GydF4y2Ba
JaufrancGydF4y2Ba
/GydF4y2Ba
EdevGydF4y2Ba
/GydF4y2Ba
toitGydF4y2Ba
/GydF4y2Ba
build
/GydF4y2Ba
ESP32GydF4y2Ba
/GydF4y2Ba
toitGydF4y2Ba
。GydF4y2Ba
垃圾桶GydF4y2Ba
0x8000GydF4y2Ba
/GydF4y2Ba
家GydF4y2Ba
/GydF4y2Ba
JaufrancGydF4y2Ba
/GydF4y2Ba
EdevGydF4y2Ba
/GydF4y2Ba
toitGydF4y2Ba
/GydF4y2Ba
build
/GydF4y2Ba
ESP32GydF4y2Ba
/GydF4y2Ba
分区GydF4y2Ba
。GydF4y2Ba
垃圾桶GydF4y2Ba
制作GydF4y2Ba
[[GydF4y2Ba
1GydF4y2Ba
这是给予的GydF4y2Ba
:GydF4y2Ba
Leaving
目录GydF4y2Ba
'/home/jaufranc/edev/toit/toolchains/esp32'GydF4y2Ba
|
很好,但是当然,我们可以使用Wi-Fi检查一个样本,的确有GydF4y2Bahttp.toitGydF4y2Ba样本:GydF4y2Ba
1GydF4y2Ba
2GydF4y2Ba
3GydF4y2Ba
4GydF4y2Ba
5GydF4y2Ba
6GydF4y2Ba
7GydF4y2Ba
8GydF4y2Ba
9GydF4y2Ba
10GydF4y2Ba
11GydF4y2Ba
12GydF4y2Ba
13GydF4y2Ba
14GydF4y2Ba
15GydF4y2Ba
16GydF4y2Ba
17GydF4y2Ba
18GydF4y2Ba
19GydF4y2Ba
20GydF4y2Ba
21GydF4y2Ba
22GydF4y2Ba
|
/ /版权Toitware ApS (C) 2021人。GydF4y2Ba
//此源代码的使用由零条款BSD许可管辖,可以GydF4y2Ba
//在示例/许可证文件中找到。GydF4y2Ba
进口GydF4y2Ba
网GydF4y2Ba
进口GydF4y2Ba
httpGydF4y2Ba
主要的GydF4y2Ba
:GydF4y2Ba
网work
:GydF4y2Ba
=GydF4y2Ba
网GydF4y2Ba
。GydF4y2Ba
打开GydF4y2Ba
主持人GydF4y2Ba
:GydF4y2Ba
=GydF4y2Ba
“ www.google.com”GydF4y2Ba
插座GydF4y2Ba
:GydF4y2Ba
=GydF4y2Ba
网work
。GydF4y2Ba
tcp_connectGydF4y2Ba
主持人GydF4y2Ba
80GydF4y2Ba
联系GydF4y2Ba
:GydF4y2Ba
=GydF4y2Ba
httpGydF4y2Ba
。GydF4y2Ba
联系GydF4y2Ba
插座GydF4y2Ba
主持人GydF4y2Ba
request
:GydF4y2Ba
=GydF4y2Ba
联系GydF4y2Ba
。GydF4y2Ba
新的GydF4y2Ba
_GydF4y2Barequest
“得到”GydF4y2Ba
“/”GydF4y2Ba
response
:GydF4y2Ba
=GydF4y2Ba
request
。GydF4y2Ba
send
字节GydF4y2Ba
:GydF4y2Ba
=GydF4y2Ba
0GydF4y2Ba
尽管GydF4y2Ba
数据GydF4y2Ba
:GydF4y2Ba
=GydF4y2Ba
response
。GydF4y2Ba
读GydF4y2Ba
:GydF4y2Ba
字节GydF4y2Ba
+=GydF4y2Ba
数据GydF4y2Ba
。GydF4y2Ba
尺寸GydF4y2Ba
打印GydF4y2Ba
“从http:// $ host/读取$字节字节”GydF4y2Ba
|
整洁而简单的示例简单下载Google页面并报告下载的字节数。但是,等等……我们在哪里配置Wi-Fi凭据?这可以在建造时间完成:GydF4y2Ba
1GydF4y2Ba
|
制作GydF4y2Ba
ESP32GydF4y2Ba
ESP32_ENTRYGydF4y2Ba
=GydF4y2Ba
例子GydF4y2Ba
/GydF4y2Ba
httpGydF4y2Ba
。GydF4y2Ba
toitGydF4y2Ba
ESP32_WIFI_SSIDGydF4y2Ba
=GydF4y2Ba
myssid
ESP32_WIFI_PASSWORDGydF4y2Ba
=GydF4y2Ba
我的密码GydF4y2Ba
|
或者you can change the default program and configure the WiFi SSID and password in the Makefile:
1GydF4y2Ba
2GydF4y2Ba
3GydF4y2Ba
4GydF4y2Ba
5GydF4y2Ba
|
#使用'make esp32_entry =示例/mandelbrot.toit'来编译其他GydF4y2Ba
#ESP32固件的示例。GydF4y2Ba
ESP32_ENTRYGydF4y2Ba
=GydF4y2Ba
例子GydF4y2Ba
/GydF4y2Ba
你好GydF4y2Ba
。GydF4y2Ba
toitGydF4y2Ba
ESP32_WIFI_PASSWORDGydF4y2Ba
=GydF4y2Ba
ESP32_WIFI_SSIDGydF4y2Ba
=GydF4y2Ba
|
I do not have an ESP32 up and running to test it out, but I’d assume you’d be able to modify the hello.toit on the device itself after flashing Toit firmware the first time. OTA firmware update should be enabled too based on the output from the做ESP32GydF4y2Ba命令。完整的TOIT平台最多可用于10个设备,除了GitHub页面外,您还可以找到有关该设备的其他信息GydF4y2Ba文档网站GydF4y2Ba不仅与我们在这里使亚博体育官下载用的固件和TOIT语言有关,还包括整个云API和TOIT平台。GydF4y2Ba

Jean-Luc于2010年启动了www.yabo188.vipCNX软件,作为兼职工作,然后辞去了软件工程经理的工作,并开始写每日新闻,并于2011年晚些时候全职审查。GydF4y2Ba
感谢您提及免费和开源的语言。如果您在其顶部构建固件,您仍将使用Espressif的Esptool将其刷到设备中,因此您的编译闪存运行工作流将类似于它与广泛使用的ESP-IDF框架的工作方式。但是,您将以内存和高效的高级语言编写代码,这是许多开发人员的主要卖点。GydF4y2Ba
如果您还有其他问题,请告诉我!GydF4y2Ba
I previously looked into this language, but I felt the overhead from learning a new language to high.
此外,“编译闪存”的工作流程几乎没有用,而不是阅读传感器和发送SOM帖子请求更为复杂。不确定为什么您需要在这些用例中运行“比Python快30倍”。GydF4y2Ba
如何使用TOIT语言调试应用程序?我在文档中找不到任何提及。GydF4y2Ba
创建一种全新语言的理由是什么,而不是为MCU创建更快的Micropython/Lua/Go Compiler/Exprenter?使用相同的语法允许重复现有库。GydF4y2Ba
比较性能与常见的C ++可能会很有趣!GydF4y2Ba
不确定ESP32是否有CPP API,但是正如我在其他评论中所说的:比较性能基本上是毫无意义的,因为使用这些语言Skulle的用例并不需要很快 - 开发。快速而肮脏,没有什么值得的GydF4y2Ba
嗯,浓咖啡IDF或Arduino IDE是C ++?GydF4y2Ba
这并不是我感兴趣的开发表现,而是代码尺寸和执行速度,因为这些是有限的因素,但是,是的,仅用于阅读传感器,它的无用,…GydF4y2Ba
我尤其可以选择在C或C ++中进行编码,并且它的功能很好,我认为没有理由发明其他语言。GydF4y2Ba
我在ESP32上使用C代码。Micropython对我来说是一个玩具。我怀疑托伊特也是。GydF4y2Ba
这个GydF4y2Ba
我不知道为什么这么多负面评论。并非所有的工作都只是“肮脏的开发”,用于小型DIY项目或较小的专业项目,在C ++中开发昂贵且不必要,而Micropython消耗了太多资源,这是一个很好的解决方案。GydF4y2Ba
我必须花时间在接下来的几周内进行测试!GydF4y2Ba
不仅是Micropython或C/C ++。还有Lua(Nodemcu)和Tinygo。GydF4y2Ba
因此,是否在设备编译中及时有时间,还是仅预编译字节代码?这是为什么它快30倍还是将其与预编译的Micropython字节码进行比较?GydF4y2Ba
“这可以在几个小时内由Python开发人员:Toit语言学习。”…我是Python程序员,但是Toit对我来说看起来很奇怪。GydF4y2Ba
“完整的TOIT平台可以免费用于10个设备”……好的,以及10个以上的设备?许可费?什么价格?GydF4y2Ba
我没有详细介绍,因为该帖子主要是关于Toit语言的,因此,如果您不使用它们的云,则无需支付任何费用。亚博体育官下载GydF4y2Ba
But to answer your question, they charge $0.50 per serviced device per month when more than 10 devices are used with the Toit platform.
As far as I understand the language and runtime are available under LGPL v2.1, which doesn’t make any such restriction.
Arduino支持各种硬件来控制执行器,传感器,显示等 - 有数百个。Arduino之所以超越其他微控制器生态系统,是因为一些英勇的人阅读数据表并为Arduino编写库,而不是其他平台。Python也有一些设备库。这些图书馆经过社区测试,并且在大多数情况下非常可靠。怎么样?亚博体育官下载我只能看到一个非常基本的东西。如果您需要“ Hello World”以外的任何东西,请准备好阅读数据表并重新发射所有车轮,并成为其代码的豚鼠测试仪。准备好GydF4y2Ba…GydF4y2Ba阅读更多 ”GydF4y2Ba
I seem to be seeing a lot of unfairly negative comments. While I don’t like complicated languages like Python that require a web browser constantly loaded on StackOverflow and that do not even resist to copy-paste, there are already some devices in field relying on these. And I think that encouraging developers to move to more energy-efficient languages is good in general. The “30 times faster” argument is not the right one in my opinion, most people do not care about execution time. They should instead advertise “does the same using 30 times less power”, or “30 times longer battery…GydF4y2Ba阅读更多 ”GydF4y2Ba
Thig是C是最节能的编程语言(除了ASM之外),因此几乎不可能击败它。生锈很近,但没有雪茄。GydF4y2Ba
我不是在谈论试图击败它,甚至不太接亚博体育官下载近它,只是要高效。总是有一些静态消费,并且在MCU上使用外围设备的方式,或者设备入睡,也很多。恢复和暂停所需的时间。以及在低水平系统原语上花费的时间。因此,如果总体而言,一种中等有效的语言将整个产品的效率保持在最佳情况的20-30%之内,那就不错了,无论如何,它比效率低30倍好得多。GydF4y2Ba