微软发布针对微型物联网设备的开源物联网语言 DeviceScript

微软发布针对微型物联网设备的开源物联网语言 DeviceScript

微软开源了DeviceScript语言,DeviceScript是用于微型物联网设备的TypeScript。它为基于低资源微控制器的设备带来TypeScript开发人员体验。DeviceScript编译为自定义VM字节码,可以在非常受限的环境中运行。

800_auto

DeviceScript有以下典型特征:

- 支持TypeScript:熟悉的语法和工具,开发成本低。

- 便携式虚拟机:占用空间小,DeviceScript字节码解释器。

- 硬件即服务:在抽象硬件服务上编写可重用应用程序/固件。?

- 云即服务:通过统一API使用JSON与云通信,内置设备运行状况监控。

- 非常小:为低功耗、低闪存、低内存嵌入式项目设计。?

- 模拟与追踪:使用模拟或真实传感器开发和测试固件。?

- 调试:针对硬件或模拟设备的Visual Studio Code完整调试体验。

- 包生态系统:使用npm、yarn或pnpm分发和使用DeviceScript包。

3. DeviceScript已经在GitHub上开源,采用MIT许可证,目前已有超过0.8k的star。

4. DeviceScript是一个值得关注的前端开源项目。

DeviceScript示例代码:

下面是 ESP32 上的经典 LED 闪烁程序,LED 连接到引脚 A0。

import { pins } from "@dsboard/adafruit_qt_py_c3"
import { startLightBulb } from "@devicescript/servers"

const lightBulb = startLightBulb({
    pin: pins.A0,
})

setInterval(async () => {
    await lightBulb.toggle()
}, 500)

在下面的示例中,使用单个按钮在 Raspberry Pi Pico 上创建一个复制粘贴微型键盘。

该按钮连接到 Pico 的 GP14 引脚。 按下按钮时,Pico 将使用 HID 键盘服务器向计算机发送 ctrl+c 或 ctrl+v 击键。 ctrl+c 将复制所选文本,ctrl+v 键将粘贴复制的文本。

剪贴板的状态由连接到 Pico 的 GP1 引脚的状态 LED 指示。 当 LED 亮起时,剪贴板已满,当 LED 熄灭时,剪贴板为空。

下面是示例完整代码:

import { pins, board } from "@dsboard/pico"
import {
    startButton,
    startHidKeyboard,
    startLightBulb,
} from "@devicescript/servers"
import {
    HidKeyboardAction,
    HidKeyboardModifiers,
    HidKeyboardSelector,
} from "@devicescript/core"

// 安装在 GP14 上的键盘按钮
const button = startButton({
    pin: pins.P14,
})
// 安装在 GP1 上的状态指示灯 LED
const led = startLightBulb({
    pin: pins.P1,
})
// 将发送击键的 HID 键盘驱动程序
const keyboard = startHidKeyboard({})
// true: ctrl+c, false: ctrl+v
let copy = true
// use leftgui on mac or leftcontrol on windows
let modifier = HidKeyboardModifiers.LeftGUI
// uncomment for windows
// let modifier = HidKeyboardModifiers.LeftControl
// copy and paste on button click
button.down.subscribe(async () => {
    // 当copy为true时,发送 ctrl+c
    const selector = copy ? HidKeyboardSelector.C : HidKeyboardSelector.V
    // 当 copy 为真时,打开 led 以表示“完整剪贴板”
    const brightness = copy ? 1 : 0
    // 部分日志
    console.log(copy ? "ctrl+c" : "ctrl+v")
    await keyboard.key(selector, modifier, HidKeyboardAction.Press)
    await led.intensity.write(brightness)
    // toggle for next round
    copy = !copy
})

github地址:https://github.com/microsoft/devicescript

文档:https://microsoft.github.io/devicescript/getting-started

{{collectdata}}

网友评论