1 个不稳定版本
0.1.0 | 2020年2月6日 |
---|
#6 in #idf
5KB
95 行
帮助我摆脱编程语言工厂的困境
这是什么?
好吧,这是在 WebAssembly 上运行的 wasm3,在 esp32 上运行,并有一个API用于通过网络加载和执行实时应用程序,在运行时内部有与 embedded-hal 兼容的实现。
你可能还感兴趣
- esp32-wasm-cli - 使用此项目加载和运行WASM小程序的CLI工具
- rust-wasm-hal - 与此项目一起使用的 embedded-hal 实现,包含示例
为什么,是这样?
这是一个非常好的问题。在我生活中,大多数ESP32设备运行的是几乎相同的固件,有一堆代码来管理wifi / mqtt / 文件和密钥存储等,然后是一小部分代码来与实际的传感器或执行器交互并发布该信息。此外,我希望能够在不真正思考的情况下通过网络部署更改,而且,我真的很喜欢嵌入式Rust...
目标是提供一个通用基础映像,它提供所有常用功能,并将任何有用的内容重新暴露给wasm运行时,以便用于应用程序代码、远程重新加载应用程序,以及一个硬件抽象层(HAL),这使得编写和部署应用程序变得非常容易。目前这主要针对Rust,然而,WASM API应该对其他语言有广泛的应用。请随意为您的最爱语言实现HAL!
状态/功能
这是一个绝对受诅咒的、大部分未经测试的工作进展。WASM和HTTP API需要定义/文档化,应用程序和参数的规范应扩展,还有许多组件尚未实现。
组件
- WASM驱动程序
- 延迟
- 打印
- spi
- i2c(未经测试)
- uart
- 远程API
- 读写文件
- 读写密钥
- 加载/卸载wasm
- 启动/停止wasm
- 获取/流式传输应用程序日志
- CLI
- 读写文件
- 读写密钥
- 加载/卸载wasm
- 启动/停止wasm
- 获取/流式传输应用程序日志
- 杂项
- 设备个性化(串行号,P/N等)
- 基础映像OTA
- mDNS设备发现
用法
您需要ESP32工具链和IDF来开发C项目。如果您使用Linux,可以使用预配置的Docker镜像,命令如下:docker run --rm -it -v
pwd:/work --workdir=/work --device=/dev/ttyUSB0 espressif/idf
。非Linux用户需要遵循ESP IDF入门指南。
wasm API定义在wasm.c。
- 使用
idf.py build
进行构建 - 使用
idf.py flash
进行烧录 - 使用
idf.py monitor
连接到串行端口
通过串行终端(尝试help
获取命令列表)或简单HTTP API支持运行和管理applet
- 使用以下命令将二进制文件加载到设备中:
curl "http://ESP_IP/fs?file=/spiffs/test.wasm" -X POST --data-binary @test.wasm
- 使用以下命令将任务加载到内存中:
curl "http://ESP_IP/app/cmd?cmd=load&name=test&file=/spiffs/test.wasm"
- 使用以下命令执行任务:
curl "http://ESP_IP/app/cmd?cmd=start"
- 可选使用以下命令停止任务:
curl "http://ESP_IP/app/cmd?cmd=stop"
- 使用以下命令从内存中卸载任务:
curl "http://ESP_IP/app/cmd?cmd=unload"
打算让此API)进行文档化,并(b)由esp32-wasm-cli取代
注意
- 在编写C绑定函数时,必须使用
m3ApiOffsetToPtr
将缓冲区从偏移量解析为地址 - 您需要最小化rustc堆栈大小
"-C", "link-arg=-zstack-size=32768"
否则rustc默认使用1MB的堆栈,这在没有SPIRAM的设备上无法运行。这里的权衡是您可能会耗尽堆栈空间,所以,情况各异。
我遇到问题/我能帮忙吗?
当然!打开一个问题或一个PR ^_^
依赖项
~93KB