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

推荐订阅源

Forbes - Security
Forbes - Security
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
F
Fortinet All Blogs
B
Blog
T
The Blog of Author Tim Ferriss
Engineering at Meta
Engineering at Meta
GbyAI
GbyAI
Y
Y Combinator Blog
Microsoft Azure Blog
Microsoft Azure Blog
L
LangChain Blog
Recent Announcements
Recent Announcements
U
Unit 42
Martin Fowler
Martin Fowler
M
MIT News - Artificial intelligence
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
The Register - Security
The Register - Security
Recorded Future
Recorded Future
C
Check Point Blog
V
V2EX
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Hugging Face - Blog
Hugging Face - Blog
WordPress大学
WordPress大学
Google DeepMind News
Google DeepMind News
酷 壳 – CoolShell
酷 壳 – CoolShell
F
Full Disclosure
小众软件
小众软件
A
About on SuperTechFans
云风的 BLOG
云风的 BLOG
宝玉的分享
宝玉的分享
Last Week in AI
Last Week in AI
有赞技术团队
有赞技术团队
MongoDB | Blog
MongoDB | Blog
爱范儿
爱范儿
P
Proofpoint News Feed
罗磊的独立博客
量子位
D
Docker
博客园_首页
D
DataBreaches.Net
Project Zero
Project Zero
博客园 - 司徒正美
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
博客园 - Franky
Security Latest
Security Latest
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
N
Netflix TechBlog - Medium
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
博客园 - 三生石上(FineUI控件)
H
Hackread – Cybersecurity News, Data Breaches, AI and More
大猫的无限游戏
大猫的无限游戏

夜行人

回家路上 第一期的直播演示项目 震动检测器 正能量 在线参观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-11-22 · via 夜行人

文章目录

MicroBlocks 和其他编程语言之间进行消息通信,以达到互操作的目的。

2024-07-15 更新: 目前最推荐的互操作方式是使用 MicroBlocks Client 库(基于蓝牙)

简单演示

先来看一个简单的视频演示。

视频演示涉及的程序如下:

以上演示了 MicroBlocksScratch 如何通过消息通信来互操作,具体而言:

  1. 先在 MicroBlocks 中编程,完成后断开连接
  2. 之后将设备连接到 Scratch 的 MicroBlocks 插件。
    • 对你的心智模型来说,就好像你可以在 Scratch 和 MicroBlocks 中相互广播和接收消息。

这个互操作是通用的,意味着可以在 Scratch 里控制 MicroBlocks 已经支持的数十种设备(还在持续增多)!

MicroBlocks 不仅可以与 Scratch 进行互操作,也可以与大多数编程语言互操作。文末记录了目前已经实现互操作库的编程语言(MicroBlocks 社区优先关注在教育领域重要的编程语言)

消息流向图

以下是 MicroBlocks 与 Scratch 进行消息通信的消息流向图:

具体使用,参考 CodeLab Scratch MicroBlocks 插件文档

我们以 MicroBlocks 与 Scratch 的互操作为例,阐述这样做的意义,其中的道理也适用于 Scratch 之外的其他编程语言。

我们将分别从以下两个角度来讨论互操作的意义。

对 MicroBlocks 的意义

MicroBlocks 专注于硬件编程/物理计算,它让板子可以离线运行,这对于许多实际应用和竞赛(如巡线赛车)是必要的。这使得 MicroBlocks 更多考虑"下位机"编程。

通过 MicroBlocks 与 Scratch 的互操作,Scratch 可以成为硬件设备的"上位机", 对设备进行"指挥"。 由于 Scratch 运行在电脑里,没有内存和计算性能的限制,在Scratch里制作控制界面(GUI程序)是非常容易的。

这样一来,我们就可以利用 Scratch 的优势,为 MicroBlocks 设备提供出色的 GUI 界面。(同样的道理,也可以利用 Python 的深度学习生态来增强 MicroBlocks 程序)

对 Scratch 的意义

图形化编程领域喜欢魔改 Scratch 来支持硬件编程,这导致许多灾难性的后果,这个糟糕的策略破坏了可理解性,让学习者陷入云里雾里。 我在CodeLab 纪事比较图形化硬件编程平台 做了批评。

MicroBlocks 的创始人,也正是 Scratch 的联合创始人兼首席架构师 John Maloney 并未采用扩展 Scratch 的思路来支持硬件编程,他深知这里边的陷阱和天花板,所以 John Maloney 启动了新项目 MicroBlocks 作为图形化硬件编程的解决方案。

MicroBlocks 因其出色的设计,拥有极高的灵活性和可扩展性,甚至可以由一个孩子而不是工程师来自由扩展它!目前为止 MicroBlocks 社区已经支持了丰富的编程板、传感器和执行器, 几乎涵盖主流领域的大多数类别!

由于互操作是完全通用的(只是广播消息), 意味着 MicroBlocks 生态的海量硬件都可以直接为 Scratch 所用(发消息即可!)。 未来新加入 MicroBlocks 生态的任何设备,也都可以直接在 Scratch 里使用,不需要任何额外工作!

它是如何工作的?

基于消息通信的互操作是如何工作的呢?

这主要是得益于 MicroBlocks 出色的架构设计。 它的虚拟机支持强大的消息协议: Microblocks Serial Protocol (version 2.09), 该协议描述了消息如何在开发板 与 Microblocks IDE 流动,以及消息的其他可能流向。

MicroBlocks IDE 就是基于这个消息协议与硬件设备(虚拟机)通信的。 所以理论上,我们可以在任何编程语言中做到 MicroBlocks IDE 做到的所有事情, 包括但不限于: 将脚本下载到板子; 启动/停止脚本; 跟踪脚本的运行状态; 广播消息…

因此,你不只可以让其他编程语言与 MicroBlocks 进行互操作,甚至可以设计一个新的编程语言来与虚拟机交互,新的语言可以采用文本代码而不是积木块。只需将你设计的文本语言翻译成 MicroBlocks 虚拟机指令,然后通过消息其发送到板子即可。 MicroBlocks 的架构设计为我们打开了巨大的可能性空间!

更多细节可参考:

一些有趣的方向

  • Adapter microbit radio迁移到 MicroBlocks,在相同的功能下,可以移除对 Adapter 的依赖,这样能很好地提高开箱可用性,只需要一个浏览器即可!
    • 制作有趣的魔杖 🪄 : 将"魔杖 micro:bit" 的陀螺仪信息实时发给"中转站 microbit", Python 与"中转站 microbit" 实时互操作,这样就可以利用 Python 社区的深度学习库来实时计算"魔杖 micro:bit" 的手势!
    • 制作 Scratch 演讲翻页笔(或者通过 pyautogui 库控制 PPT),而这个演讲装置本身又是很好的话题,用于在演讲中引出编程的实际作用。
  • 在你最喜欢的编程语言中,制作通信库,来让它与 MicroBlocks 互操作,可参考我的 Python 实现: MicroBlocks Python 库

更多编程语言

MicroBlocks 与 Python 的互操作

消息流向图

具体使用,参考 MicroBlocks Python 库目前已支持有线和无线(BLE)两种连接方式

如果你想让它们无线通信,也可以使用 microblocks_wifi_radio。 关于 WiFi Radio 的使用说明, 参考这个视频

MicroBlocks 与 Snap! 的互操作

具体使用,参考 MicroBlocks and Snap! Communication with Messages

FAQ

Scratch(或 Python) 与 MicroBlocks 互操作时,是否总是要连接数据线

更新(2023-12-23): 最新的 Python库 已经支持无线编程(BLE)

是的。

现阶段进行互操作时,必须连接数据线。未来有可能通过蓝牙或 wifi 提供无线支持。(理论上可行)

如果你希望使用无线的方式让 Scratch(或 Python) 与 MicroBlocks 交互, 可以考虑 MQTT 库(需要板子支持wifi,推荐 ESP32)。MicroBlocksCodeLab Scratch 都已支持 MQTT 协议。

参考