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

推荐订阅源

H
Help Net Security
腾讯CDC
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
WordPress大学
WordPress大学
Engineering at Meta
Engineering at Meta
M
MIT News - Artificial intelligence
H
Hackread – Cybersecurity News, Data Breaches, AI and More
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
宝玉的分享
宝玉的分享
阮一峰的网络日志
阮一峰的网络日志
N
Netflix TechBlog - Medium
罗磊的独立博客
G
Google Developers Blog
Microsoft Azure Blog
Microsoft Azure Blog
美团技术团队
MongoDB | Blog
MongoDB | Blog
雷峰网
雷峰网
Recent Announcements
Recent Announcements
The Cloudflare Blog
小众软件
小众软件
大猫的无限游戏
大猫的无限游戏
The GitHub Blog
The GitHub Blog
博客园 - Franky
博客园 - 三生石上(FineUI控件)
T
Tenable Blog
A
Arctic Wolf
www.infosecurity-magazine.com
www.infosecurity-magazine.com
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
V2EX - 技术
V2EX - 技术
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
Threat Research - Cisco Blogs
D
Docker
Y
Y Combinator Blog
博客园 - 叶小钗
PCI Perspectives
PCI Perspectives
P
Privacy & Cybersecurity Law Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
C
CERT Recently Published Vulnerability Notes
P
Proofpoint News Feed
NISL@THU
NISL@THU
C
Cyber Attacks, Cyber Crime and Cyber Security
GbyAI
GbyAI
Application and Cybersecurity Blog
Application and Cybersecurity Blog
T
The Exploit Database - CXSecurity.com
P
Proofpoint News Feed
Spread Privacy
Spread Privacy
L
LangChain Blog
N
News and Events Feed by Topic
量子位

夜行人

回家路上 第一期的直播演示项目 震动检测器 正能量 在线参观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 无线编程(BLE)
种瓜 · 2023-12-29 · via 夜行人

前言

近期, MicroBlocks 在无线编程(基于 BLE)方面取得了很好的进展。预计在最近的一两个版本里, 无线编程功能将进入官方固件。

使用场景

无线编程的一些典型使用场景包括:

  • 实时观测自由落体的运动数据曲线
  • 实时观测巡线小车的传感器数据
  • 支持移动端编程
    • 拿着 iPad 在教室里走动, 随时读取出故障的学生设备正在运行的代码
  • 集成到任何网页工具中, 诸如 Teachable Machine (@汤老师想到的好主意!)
  • 用于制作支持无线编程的玩具/STEM教具
    • 通过围绕 MicroBlocks 无线编程固件构建各种语言的客户端(Python, JavaScript, Snap!, Scratch…), 使得基于无线编程固件的产品, 有完整的生态支持, 产品开发团队将极大缩小在软件方面所需的工作。

开始使用

无线编程功能目前还没有进入默认固件。目前, 为了使用无线编程功能, 需要刷入特殊的固件, 整个过程都在 MicroBlocks 图形化环境中完成, 不用有心理负担。

固件更新

使用最新版 MicroBlocks IDE在线更新固件。

确保 MicroBlocks 版本 不低于 v1.2.51

如果你正确刷入了最新固件, 应该看到固件版本 不低于 v215

编程环境

以下两个版本的 MicroBlocks IDE 都支持无线编程。

多语言客户端

前边在无线编程的一些典型使用场景里提到

通过围绕 MicroBlocks 无线编程固件构建各种语言的客户端(Python, JavaScript, Snap!, Scratch…), 使得基于无线编程固件的产品, 有完整的生态支持, 产品开发团队将极大缩小在软件方面所需的工作。

以下是无线编程固件已经支持的一些客户端:

Scratch 客户端

CodeLab Scratch 添加了无线编程固件的客户端:

具体使用方式, 推荐 @Patch 老师 制作的视频教程: CodeLab 版 Scratch 无线连接Microblocks 硬件

@Patch老师在视频里还提到了一个非常酷的功能: 同一个浏览器的多个网页(诸如一个 Scratch 页面, 一个MicroBlocks IDE页面) 可以同时连到同一个 MicroBlocks 设备上, 这样一来, 我们就可以一边实时修改设备的客户端程序, 一边实时修改硬件设备内部的程序, 并实时看到在两者中流动的消息!

他在另一视频中很好地利用了这个特性: Scratch为硬件设计8bit角色

Python 客户端

使用 pip 安装这个 Python 库

microblocks_messaging_library

JavaScript 客户端

MicroBlocksBLE-client.html

准确地说这是一个示例, 而不是一个 JavaScript 客户端。

这个示例包含了 JavaScript 与无线编程固件双向通信所需的所有代码, 你可以将这些 JavaScript 代码用于任何地方:

  • 制作小程序
  • 制作网页遥控手柄
  • 制作 Scratch/Snap! 客户端
  • 与你的网页结合

Snap! 客户端

还未上线, 但功能已完成。

MicroBlocks 客户端

MicroBlocks IDE 本身是一个客户端(基于浏览器的蓝牙 API)。

此外, 一个 MicroBlocks 驱动的板子可以成为另一个板子的蓝牙客户端。

参考 MicroBlocks 蓝牙客户端库

微信小程序客户端

@汤老师的小程序客户端(可用于控制蓝牙小车):

@汤老师写了一篇文章记录想法的实现过程: MicroBlocks蓝牙微信小程序, 其中也分享了小程序的源代码。

App Inventor

参考 MicroBlocks AI2 Extension for MIT AppInventor2 (For Android Phones)

性能测试

近期有几位用户对于 MicroBlocks 无线编程固件与客户端的通信速度感兴趣。 我对此进行了简单测试

MicroBlocks 发往客户端

实验: 从 MicroBlocks 发送 1000 条消息, 一共用时 654 ms。 客户端(Snap!) 一共用时 716 ms, 收到所有的消息。

在确保 100% 消息送达率的情况下, MicroBlocks 每秒钟可以发送大约 1400-1500 条消息!

由于 Snap! 实现在浏览器中, 性能相比于其他客户端并不算高, 预计其他的客户端都能达到相似水平。

客户端发往 MicroBlocks

以下所有客户端的消息成功率都是 100%。

Scratch 作为客户端, 速度大约 33 条/秒

Snap! 作为客户端, 速度大约 33 条/秒(需要移除广播积木里的已连接检测, 否则大约是20条/秒)

当在 Snap! 中启用加速模式, 速度大约可以达到 50 条/秒.

即使将消息字符串的长度超过 100 (实验中是101), 对结果也不会有什么影响

Python 作为客户端, 速度大约 178 条/秒。进一步提到速度, 可能会导致一些消息没有从 Python 发出。

Scratch 和 Snap! 有进一步提速的空间(Scratch 中做了最多33条/秒的限速), 但 33 条/秒的速度已经足以覆盖大多数应用场景了,即使是实时的陀螺仪数据流。


提醒, 如果你发现你实验中经常遗失数据, 那么很有可能你需要 buffer 。

在计算机科学中,数据缓冲区(或简称缓冲区(buffer))是用于临时存储数据的内存区域,当数据从一个地方移动到另一个地方时会使用 –wiki: Data buffer

不过放心, buffer 不是什么神奇的东西, 它只是你在操弄的变量(内存空间).

在收到消息的时候, 不要立刻执行消息对应的任务. 例如使用这些消息点亮显示屏, 这很费时间, 你会因此遗漏后续进入的消息。应该将它先存储在一个内存区域, 之后再慢慢处理它(究竟是快快处理还是慢慢处理,取决于你机器的性能), 通常而言, 将进入系统的消息添加到列表中是好的做法, MiroBlocks 和 Snap!/Scratch 的列表效率都极高 。这个临时存放消息的列表就叫 buffer。

然后再使用一个循环去处理这个列表里的消息。这样你就不会丢失消息了。

常见问题(FAQ)

官方 FAQ

参考 翻译版本

windows 上卡顿或掉线

有 windows 用户反馈对于比较大的程序, 会出现卡顿或掉线。 对于 windows 的优化还在进行中。

如何在移动端使用

  • iOS: 需要使用 Bluefy 浏览器
  • 安卓: 使用 Chrome 浏览器

移动端的支持还很初步, 已经支持拖动/拼搭积木和点击运行等基本功能。键盘输入功能还不支持。

MacOS 上无法发现设备

@yinxi 反馈过这样一个问题:

刷过 microbit:more 的板子(并且在MacOS连接过), 之后再刷无线编程固件, 这台 MacOS 的浏览器连接时无法扫描到设备。但其他电脑可以扫描到。

这是 MacOS 蓝牙的怪癖, 它会始终记住同一个蓝牙硬件之前的信息, 当它被刷了新服务, MacOS 记住的还是旧的信息, 以至于出现问题。windows 下没有这个问题, 目前还不清楚解决方案。

如何从 Snap! 中接收 BLE radio/OctoStudio 广播消息

目前只支持安卓系统, 其他系统的的蓝牙扫描 API 还在进展中

首先确保 Web Bluetooth / Scanning Sample 能够使用, 然后再使用 JavaScript function 将这些代码迁移到 Snap! 里

如何与 nRF Connect 通信?

如果想用 Nordic UART 协议与 microblocks 设备通信, 可以使用 BLE serial 库.

这样就可以使用 nRF Connect 之类的 BLE 客户端与 MicroBlocks 设备通信. BLE serial 库的最初的目标是用来与 APP Inventor 通信.

以下是一个例子:

BLE serial demo

在 nRF Connect 中发送消息:

可以在 Snap! 中实时调试

NUS client demo

参考