开发硬件?JS也行!(基于DeviceScript)
  xK7YgZ4TkG5D 2023年11月02日 24 0

背景

最近买了块合宙的9.9 rp2040开发板, 刚好看到了微软的DeviceScript库支持, 便记录下学习过程和坑

DeviceScript介绍

官网: <https://microsoft.github.io/devicescript/>

基于TypeScript开发微型物联网设备

开发硬件?JS也行!(基于DeviceScript) _js

支持的板子有:

开发硬件?JS也行!(基于DeviceScript) _树莓派_02

当然板子默认定义了gpio口和adc口, 其他的功能引脚没定义, 需要自己定义

开发硬件?JS也行!(基于DeviceScript) _js_03

开发环境搭建

1. 需要软件

  • Visual Studio Code
  • NodeJS v18.x

2. Visual Studio Code安装插件

插件市场直接搜索安装DeviceScript即可

开发硬件?JS也行!(基于DeviceScript) _js_04

3. 给rp2040板子烧入DeviceScript固件

将板子按住boot按钮并连接上电脑(这时我的电脑会多出一个盘符), 点击vscode左侧的插件图标, 再点击devices右上角的加号, 选择Flash Firmware烧入固件

开发硬件?JS也行!(基于DeviceScript) _rp2040_05

开发硬件?JS也行!(基于DeviceScript) _rp2040_06

注意:

  1. NodeJS v18.x 原生支持fetch方法, 在安装固件的时候, DeviceScript用的fetch来请求下载固件, 低版本会报错

开发硬件?JS也行!(基于DeviceScript) _rp2040_07

由于网络原因可能无法下载固件, 可以自行通过链接下载 然后复制到新增的盘中即可, 复制后会自动重启板子

开发硬件?JS也行!(基于DeviceScript) _rp2040_08

烧入后, 点击device右上角加号, 选择Serial进行串口连接

开发硬件?JS也行!(基于DeviceScript) _js_09

连上后, 可以看到设备列表中存在了当前的rp2040设备, 到这基础环境就算搞定了

开发硬件?JS也行!(基于DeviceScript) _树莓派_10

开发示例

1. 点灯

一灯大师专业点灯, 就先从把板子上的灯点亮开始吧

板子内置的LED引脚, DeviceScript已经定义好了, 所以不需要指定io口, 直接使用setStatusLight方法干

由于他这个方法可以对RGB灯进行控制, 所以可以传颜色值, 而rp2040是个单色灯, 那么只要0xFFFFFF控制亮, 0x000000控制灭即可啊

开发硬件?JS也行!(基于DeviceScript) _rp2040_11

如下所示, 一次程序循环, 亮一秒灭一秒

import { delay } from '@devicescript/core'
import { setStatusLight } from '@devicescript/runtime'
setInterval(async () => {
  await setStatusLight(0xFFFFFF)
  await delay(1000)
  await setStatusLight(0x000000)
  await delay(1000)
}, 1)

点击右上角的运行, 将代码运行到板子上

开发硬件?JS也行!(基于DeviceScript) _树莓派_12

开发硬件?JS也行!(基于DeviceScript) _js_13

看看效果 (把gif速度加快了)

开发硬件?JS也行!(基于DeviceScript) _rp2040_14

2. 雨滴传感器

再写个读取雨滴传感器的程序

看原理图, 选择ADC2口连接到雨滴传感器的AO口

开发硬件?JS也行!(基于DeviceScript) _树莓派_15

开发硬件?JS也行!(基于DeviceScript) _rp2040_16

查看文档, 由于没有专门提供雨滴传感器的ADC方法, 直接使用startPotentiometer, 来将引脚上的电压(通常介于0V (GND)和3.3 V (VCC)之间)将被转换为介于0和1之间的数字. console.data用来将传感器数据打印和记录

开发硬件?JS也行!(基于DeviceScript) _树莓派_17

import { pins } from '@dsboard/pico' // 引入`pico`(rp2040)的引脚定义
import { startPotentiometer } from '@devicescript/servers'

const slider = startPotentiometer({
  pin: pins.GP28,
})
slider.reading.subscribe(v => console.data({ value:  v }))

可以看到没有水在传感器上时, 数据大概在0.8, 之后我滴上几滴水后, 数值变为0.3左右

开发硬件?JS也行!(基于DeviceScript) _树莓派_18

随后我们可以对刚刚console.data生成的数据, 统计和绘制图像等

点击右上角图标

开发硬件?JS也行!(基于DeviceScript) _rp2040_19

按照提示流程, 先会弹框让你选择本机的Python环境, 然后按步骤运行下面的脚本

开发硬件?JS也行!(基于DeviceScript) _树莓派_20

最后一个脚本可以根据数据显示图表

开发硬件?JS也行!(基于DeviceScript) _js_21

总结

首先, 用JS开发硬件挺有意思, 但是生态没有Arduino好, 支持的板子不多, 但也都是很热门的板子

玩玩还是不错的, 正常的功能和传感器驱动都有, 生态还在慢慢完善.

【选题思路】

JavaScript涉及的领域越来越多, 从前端到后端, 再到2D, 3D, 机器学习. 这边文章主要是介绍JS对单片机的开发, 旨在拓宽视野, 多涉猎, 多学习, 多运用, 将技术更好的用在生活和工作中

【写作提纲】

  1. DeviceScript库介绍
  2. 环境搭建
  3. 开发示例
  4. 总结
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读