https://www.toutiao.com/article/7238117930972529208/
参考资料
https://github.com/microsoft/devicescript
https://microsoft.github.io/devicescript/intro
高级前端进阶
今天给大家带来的主题是微软新开源的语言 DeviceScript,话不多说,直接开始!
什么是 DeviceScript
DeviceScript 是用于微型物联网设备的 TypeScript。DeviceScript 为基于低资源微控制器的设备(Low-resource Microcontroller-based Devices)带来了专业的 TypeScript 开发人员体验。 DeviceScript 被编译为自定义 VM 字节码,可以在非常受限的环境中运行。
DeviceScript的典型特征包括:
支持TypeScript:非常熟悉的语法和工具,开发者成本极低
便携式虚拟机:占用空间小 DeviceScript 字节码解释器
硬件即服务:在抽象硬件服务之上编写可重用的应用程序/固件。
云即服务(Cloud as Service):通过统一 API 使用 JSON 与云通信,同时内置设备运行状况监控。
非常小:专为低功耗、低闪存、低内存嵌入式项目而设计。
模拟与追踪:使用模拟或真实传感器开发和测试固件。
调试:针对硬件或模拟设备的 Visual Studio Code 完整调试经验。
包生态系统:利用 npm、yarn 或 pnpm 来分发和使用 DeviceScript 包。
目前 DeviceScript 在Github 上通过 MIT 协议开源,已经有超过 0.8k+ 的star,是一个值得关注的前端开源项目。
使用 DeviceScript示例
Blinky
下面是 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
})
本文总结
本文主要和大家介绍微软的又一力作,即 DeviceScript 开源。相信通过本文的阅读,大家对 DeviceScript 会有一个初步的了解。
因为篇幅有限,文章并没有过多展开,如果有兴趣,可以在我的主页继续阅读,同时文末的参考资料提供了大量优秀文档以供学习。最后,欢迎大家点赞、评论、转发、收藏!