惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

美团技术团队
W
WeLiveSecurity
Stack Overflow Blog
Stack Overflow Blog
L
LangChain Blog
S
SegmentFault 最新的问题
Apple Machine Learning Research
Apple Machine Learning Research
Google DeepMind News
Google DeepMind News
F
Full Disclosure
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The Register - Security
The Register - Security
G
Google Developers Blog
C
Check Point Blog
GbyAI
GbyAI
A
About on SuperTechFans
V
Vulnerabilities – Threatpost
T
The Blog of Author Tim Ferriss
T
Tor Project blog
AWS News Blog
AWS News Blog
Cyberwarzone
Cyberwarzone
C
CERT Recently Published Vulnerability Notes
MongoDB | Blog
MongoDB | Blog
Latest news
Latest news
aimingoo的专栏
aimingoo的专栏
U
Unit 42
Y
Y Combinator Blog
P
Privacy International News Feed
Cisco Talos Blog
Cisco Talos Blog
S
Securelist
S
Schneier on Security
雷峰网
雷峰网
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Attack and Defense Labs
Attack and Defense Labs
P
Proofpoint News Feed
C
Cisco Blogs
Webroot Blog
Webroot Blog
T
Troy Hunt's Blog
Google Online Security Blog
Google Online Security Blog
月光博客
月光博客
P
Privacy & Cybersecurity Law Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
罗磊的独立博客
Cloudbric
Cloudbric
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Hacker News: Ask HN
Hacker News: Ask HN
H
Hackread – Cybersecurity News, Data Breaches, AI and More
博客园 - 司徒正美
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Microsoft Security Blog
Microsoft Security Blog

夜行人

回家路上 第一期的直播演示项目 震动检测器 正能量 在线参观CodeLab Neverland 发布 CodeLab Adapter 3.3.1 DynamicTable 之 纸糊方向盘 CodeLab DynamicTable: 一个可实施的技术方案 CodeLab Insight 发布 Alpha 版 情人节 Home Assistant 周报 && IoT 周报 (02) Joplin: 关注隐私的 Evernote 开源替代软件 浏览器的未来与 Web 传感器 Home Assistant 周报 && IoT 周报 (01) 百宝箱(01) 论自由 介绍 WebThings Home Assistant 周报 && iot 周报 (00) 百宝箱(00) 毛姆读书心得 传世之作 周末徒步 CodeLab Adapter ❤️ Jupyter/Python 航班 躲雨 夏令营途中 [译]思想--作为一种技术 The future of coding 美国之行 三门问题的程序模拟 从Python转向Pharo https://blog.just4fun.site/post/iot/iot-open-source-projects/ Python异步编程笔记 https://blog.just4fun.site/post/iot/iot-open-source-hardware-community/ 万物积木化开发者社区 CodeLab ❤️ Blender Scratch3技术分析之云变量 API(第7篇) [译]对管道(Pipes)的偏爱 [译]提出正确的问题比得到正确答案更重要 蓝牙设备与Scratch3.0 创建你的第一个Scratch3.0 Extension Scratch3技术分析之项目内部数据(第6篇) Scratch3技术分析之社区 API(第5篇) Scratch3技术分析之User API(第4篇) Scratch3技术分析之项目主页API(第3篇) Scratch3技术分析之静态资源API(第2篇) Scratch3.0、micro:bit与Windows7 https://blog.just4fun.site/post/iot/zerynth-vs-micropython/ 核聚变、方所与半宅空间 可视化编程为何是个糟糕的主意 codelab.club周末聚会 关于codelab.club '下一件大事'是一个房间 Hungry Robot - Eat everything 编程作为一种思考方式 今日简史 史蒂夫·乔布斯传 罗素自选文集 https://blog.just4fun.site/post/edx/tianjin-scratch-ai/ https://blog.just4fun.site/post/edx/richie-cms-openedx/ 徒步武功山 WebUSB与micro:bit 积木化编程与3D场景 夜宿武功山顶 scratch3-adapter接入优必选Alpha系列机器人 https://blog.just4fun.site/post/edx/video-migration-note/ scratch3-adapter重构笔记 https://blog.just4fun.site/post/edx/edx-community-members/ 两种硬件编程风格的比较 使用micro:bit自制PPT翻页笔 柏拉图对话集 scratch3.0 + micro:bit 七月电影放映计划 非营利组织的管理 Screenly--用树莓派让任何屏幕变为可编程的数字标牌 以最佳实践开始你的Django项目 micro:bit与事件驱动 为Scratch3.0设计的插件系统(上篇) OCR应用一例 近两年读过的一些好书 blockly开发之使用python驱动浏览器中的turtle(2) 牛顿新传 文学理论入门 逻辑的引擎 人生的意义 blockly开发之生成并运行js代码(1) blockly开发之hello world(0) micro:bit使用笔记 神器之Termux https://blog.just4fun.site/post/iot/micropython-notes/ Cozmo what is this Scratch的前世今生 下段旅程 我行在远方 爆裂 途中杂记 https://blog.just4fun.site/post/edx/open-edx-startup/ cozmo系列之入门 - 有性格且可编程的机器人 PaperWeekly开发笔记 创业二三事
将新设备引入 MicroBlocks
种瓜 · 2022-12-02 · via 夜行人

前言

阅读本文的你可能有这样的需求:你刚在网上买了个新设备,颜色传感器、可编程书包或者 24 路舵机控制板之类的东西。 你在 MicroBlocks 内置的积木库里,怎么也没找到这个新设备的驱动库,可你又想使用 MicroBlocks 对新设备进行编程,怎么办呢?

别着急, 这篇文章正是为你写的。

怎么做

写驱动库很难吧?

为新设备写驱动库,听起来是一件吓人的事。在大多数硬件编程平台中,你需要进入 “底层” 去工作,这些平台会把用户界面打扮的漂漂亮亮,可等你一旦进入 “底层”,会发现它简直混乱得像你的卧室。

他们将材料一块块胡乱堆在一起,然后用石灰岩做外墙,使其外表光鲜 – Alan Kay 《软件: 艺术,工程,数学还是科学?》

当你在"底层"写驱动,你就不再能够使用之前学到的技能来编程,因为你现在可是在"底层"工作!今天的大多数图形化编程系统都如此,无论是 MakeCode、Scratch、node-red,还是 Mind+、慧编程、Kittenbot…

用户怎么看待这件事呢? 用户似乎应该抱怨这类平台的可扩展性很差,抱怨系统设计者没有能力打造更加一致的系统,抱怨他们根本没有理解终端用户编程的含义…

可用户通常被"底层"开发者教导说,那才是真正的编程。他们好像在说你之前用的东西只是糊弄小孩的玩意儿。这是今天计算机文化相当可悲的一面。 Bret Victor 在 The Future of Programming 里对所谓 “真正的编程” 这种无知和傲慢做了相当辛辣的讽刺。

可生长的系统

一个系统,如果希望随着时间的流逝,帮助用户成长,并且与用户一起成长,它应该认真对待可扩展性和可生长性,它应该支持终端用户轻松扩展它(Hypercard 是这类系统中的典范)。用户社区应该掌控这个系统,而不能指望工作在"底层"的开发者(他们就像垄断"识字"的"神职人员")。

MicroBlocks 正是这样可由用户轻松扩展的可生长系统。在架构设计时,它充分考虑了可生长性和可扩展性。

MicroBlocks 允许你在图形化环境构建驱动库!(另一个拥有强大扩展能力的图形化系统是伯克利的 Snap!)

你不需要进入"底层",在普通用户的编程界面里,就可直接构建新的驱动库,来驱动的新设备。

操作步骤

下面,我们进入操作环节。

具体而言,将新设备引入 MicroBlocks ,可分为以下三步:

  1. 弄清楚新设备使用的硬件通信协议。
  2. 在 IDE 创建自定义积木(通常是对通信协议的包装)。
  3. 将自定义积木移入新创建的库(根据需要分发它)。

接下来,让我们开始逐一讨论。

1. 弄清楚新设备使用的硬件通信协议

如果你购买的新设备有在线文档,通过查阅文档可以快速弄清通信协议。设备厂商通常会开放出主流平台的驱动(诸如 Arduino、MicroPython、JavaScript(MakeCode)), 只需要将这些驱动翻译到 MicroBlocks 中即可。顺便一提,Adafruit 开放了大量优秀的 Arduino/MicroPython 驱动库: Adafruit Github

以恩孚科技的游戏手柄(Joystick:bit V2)为例。

通过查阅文档, 可以发现它简单使用了模拟信号和数字信号。它的 JavaScript(MakeCode) 驱动在这里

2. 在 IDE 创建自定义积木

弄懂了通信协议,我们就可以在 MicroBlocks IDE 创建自定义积木了。

先在设置中开启 显示高级积木:

文档JavaScript 驱动 可以获知振动马达连接在 Pin 16 接口。

让我们创建一个自定义积木来控制震动马达。

首先点击 IDE 左侧的 我的积木:

可以看到有两个选项:

  • 新建命令积木(输出, 用于控制执行器)
  • 新建报告积木(输入,用于从传感器获取数据)

控制震动马达属于第一种。

创建命令积木, 给积木库起一个名字,并且指定它接收的参数(默认为100),这和在 Scratch 中创建自制积木几乎一样。

接下来,让我们参考设备文档和驱动的说明,给积木赋予实际功能:

至此,我们就完成了第一个自定义积木,点击它就可以让你的游戏手柄震动!

在 MicroBlocks IDE 创建自定义积木的好处是,可以复用过去在 MicroBlocks 中的所有经验。也可使用 MicroBlocks 强大的实时调试能力!这带来极大效率提升,更重要的是,整个过程非常有趣,just for fun :-)

同样道理,你可以创建新的自定义积木,来驱动游戏手柄的其他功能。

3. 将自定义积木移入新的库

当你完成驱动新设备所需的自定义积木,可能会想如何分发这些积木给其他用户,就像分发一个软件库。

将自定义积木移入新的库即可。

首先让我们在 IDE 里创建一个新的库(确保你已经开启 显示高级积木) :

我们给它起名叫 “Joystick”。

我们需要给这个新的库设置一些信息。

填写完库信息后,点击保存。

不同的颜色代表不同类型的设备,游戏手柄通常被视为一种传感器(输入设备),从用户那儿获取输入信息。当然它可能也有输出功能(诸如震动,但这不是它的主要功能)。所以我们选择紫色(输入)。

创建完 “Joystick” 库后,我们就可以把之前创建的自定义积木拖入库中:

完成后,在 “Joystick” 库里就能看到你的积木:

至此,你就为新硬件写完驱动了。

导出驱动库

你可以将驱动库分发给更多用户。 右键点击驱动库,导出为 ubl 文件,把这个文件发给需要的人即可。

如果你获得一个 ubl 文件,想要导入它,只需要将文件直接拖到 IDE 里即可。

更多分发方法

通常你不需要直接分发积木库。如果你的项目中使用到新的驱动库,当你分享你的项目时,驱动库会一并存在于项目文件(udp)和项目 URL 里。

如果你想让驱动库内置在 MicroBlocks 平台里,你可以将它提交给 MicroBlocks 官方仓库(确保你的驱动库是采用英文写的,这样全球用户才能使用它)。

如果你的驱动库,采用中文来写,只打算给中文社区使用,欢迎提交到 中文社区仓库

继续学习

如果你想学习更多关于编写驱动库的知识,查看 MicroBlocks 平台内置的驱动库是个好办法。目前已经有很多驱动库内置在 MicroBlocks 里

右键感兴趣的积木,点击``,就可以学习它是怎么做的了:

有些内置的驱动库是我提交的(也列出了它们使用的硬件通信协议):

  • AI/AILens
    • I2C
  • Kits and Boards/哪吒扩展板
    • I2C
  • Kits and Boards/悟空扩展板
    • I2C
  • Network/MQTT
  • Other/Joystick_bit (本文例子的完整版)
    • 数字信号/模拟信号
  • Robots/酷比特小车
    • I2C
  • Robots/Sphero-RVR
    • UART

我对这几个库比较熟悉,如果你在阅读这些积木库的过程中遇到什么疑惑,欢迎与我讨论。

我的博客文章里也记录了一些编写驱动库的经验, 供大家参考。

FAQ

目前 IDE 支持哪些硬件通信协议

  • 数字/模拟信号
  • I2C
  • UART
  • SPI

这些硬件通信协议足以涵盖主流的绝大多数传感器/执行器。

如果你的新设备,不是采用这些硬件通信协议,那么你可能无法在 IDE 里接入它,如果你不知如何将你的新设备接入到 MicroBlocks,提一个 issue吧,MicroBlocks 团队会给你合适的指引。

如何让 MicroBlocks 支持新的编程主板

MicroBlocks 目前支持 这些主板

如果你想让 MicroBlocks 支持新的编程主板或芯片模组 ,需要在在虚拟机(VM)层面工作。

参考