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

推荐订阅源

C
Cisco Blogs
Schneier on Security
Schneier on Security
T
Tor Project blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Tenable Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
T
Threat Research - Cisco Blogs
C
CERT Recently Published Vulnerability Notes
Security Latest
Security Latest
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
NISL@THU
NISL@THU
L
Lohrmann on Cybersecurity
Scott Helme
Scott Helme
Webroot Blog
Webroot Blog
Project Zero
Project Zero
Google Online Security Blog
Google Online Security Blog
The Last Watchdog
The Last Watchdog
Spread Privacy
Spread Privacy
Hacker News: Ask HN
Hacker News: Ask HN
PCI Perspectives
PCI Perspectives
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
W
WeLiveSecurity
Attack and Defense Labs
Attack and Defense Labs
D
Darknet – Hacking Tools, Hacker News & Cyber Security
N
News | PayPal Newsroom
Help Net Security
Help Net Security
The Hacker News
The Hacker News
H
Heimdal Security Blog
O
OpenAI News
S
Security @ Cisco Blogs
N
News and Events Feed by Topic
Cyberwarzone
Cyberwarzone
Simon Willison's Weblog
Simon Willison's Weblog
G
GRAHAM CLULEY
www.infosecurity-magazine.com
www.infosecurity-magazine.com
博客园 - 叶小钗
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Hacker News - Newest:
Hacker News - Newest: "LLM"
T
Tailwind CSS Blog
大猫的无限游戏
大猫的无限游戏
A
Arctic Wolf
I
Intezer
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
S
Security Affairs
P
Proofpoint News Feed
S
Secure Thoughts
腾讯CDC
Google DeepMind News
Google DeepMind News
量子位
罗磊的独立博客

夜行人

回家路上 第一期的直播演示项目 震动检测器 正能量 在线参观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开发笔记 创业二三事
scratch3-adapter的移动端解决方案
种瓜 · 2018-06-08 · via 夜行人

今天花了半天功夫,解决scratch3-adapter在移动端使用的问题,我在roadmap里有提到过这个计划:Roadmap 移动端

中途陷到几个坑里边,花了不少时间,做个笔记

Why

对于初学者而言(尤其是初次接触计算机的孩子而言),平板电脑是比电脑更为友好的工具。

平板 + 积木 + 图标,可以让一个不识字的孩子直接动手编程,孩子使用手指拖拽带有图标的积木,即可通过一个个的关卡,在操作中掌握所需的概念

目前大多数的家庭里,儿童的学习工具并不是PC,可能主要是ipad,至少我周围是这样(对于培训和课堂我强烈推荐树莓派)

scratch3目前正在做跨平台的一些工作,平板电脑将得到良好的支持。尽管目前的计划里,手机端暂时还不会成为操作界面(但官方会将其作为play界面),但在未来,也可能会作为创作平台(目前编程猫已经先行探路)

scratch3-adapter的兴趣是将scratch3.0连接到更广阔的区域,目前我们已经发布了几大主流平台的客户端,详情见:scratch3-adapter-docs 安装(install)。对移动端的支持,当然也是我们的目标。

移动端和PC的差异

移动端和PC在学习体验上的差异,前人述备矣,在此不多讨论

这里只谈谈,对于scratch3-adapter而言,这类设备在技术层面有什么差异

scratch3-adapter基于python,通过插件系统,我们允许scratch3-adapter与任何开放的设备相连,连接的方式也很自由:wifi、usb、bluetooth都行

在PC上,scratch3-adapter几乎可以干任何事,操控wifi、usb、bluetooth都没问题,主流的硬件无非这几种连接方法。但在移动端则不同

让我们以cozmo为例,说明这种不同。在PC端,可我们以使用usb连接控制cozmo的手机,进而使用cozmo-python-sdk控制cozmo

但在移动端,我们无法这样做,因为连接cozmo需要一个usb接口,cozmo作为案例向我们揭示了:我们无法预估来自现实世界的硬件采用怎样的连接方式

尽管我已经让scratch3-adapter运行在安卓上。但如果你要操控移动端的硬件(wifi、bluetooth)(usb目前无法使用),你需要写一个app,抛开工作量不谈,scratch3-adapter根本也不想这样做,scratch3-adapter希望学习平台是在web上,而不是包装为app,scratch3-adapter只是将web延伸出来。我们热爱开放的互联网

我们最终决定学习home assistant的策略(scratch3-adapter在很多层面和home assistant都很相似),让scratch3-adapter跑在树莓派上,而移动端只需要使用树莓派的web服务即可,硬件都被暴露在这些服务中

因为树莓派可以连接wifi、usb、bluetooth,以及更多的其他设备(树莓派有引脚!),所以你在移动端的浏览器上也能操控所有这些设备!

我相信,就学习编程而言,树莓派是个十分理想的环境。我们已经基于树莓派,利用PiNet完成了编程教室解决方案,这部分工作由@suli完成.这部分的文章,我之后有时间也梳理一下

思路

确定了方向之后,我们再来把思路理一下。

在此我们以cozmo为例,解释我们如何让scratch3-adapter支持移动端。最后我们会给一个演示视频,视频里,一个类似code.org这样的平台,可以直接将cozmo设计在教学关卡中!在这个视频我相信是会同时让code.org和cozmo社区震惊(cozmo英文社区已经期待很久了),我近期也准备写一篇英文文章发到cozmo社区里,英文比较渣,挤牙膏似的还蛮辛苦的

首先我们按照cozmo官方的http://cozmosdk.anki.com/docs/install-linux.html,在树莓派里配置cozmo-python-sdk。树莓派官方的最新镜像,默认带有python3.5,我们直接使用这个版本就够了.

安装依赖十分简单:pip3 install --user 'cozmo[camera]'

由于我使用安卓手机连接cozmo(社区里很多人用亚马逊$35的那款),所以需要安装一下adb:sudo apt-get install android-tools-adb

至此,我们就可以使用树莓派操作cozmo了

我们在树莓派里让cozmo_server开机启动,cozmo_server是一个代理了cozmo的python进程

scratch3-adapter以cli模式开机启动,启动时默认加载cozmo插件。

之后我们打开网站,点击页面按钮连接树莓派,就可以在ipad中使用浏览器打开网站,直接操控cozmo了,

我们来看看演示效果:

ps: 因为是web控制cozmo,所以我就不必要使用ipad演示了(毕竟原理没差别)

演示视频里,学生在网页中的编程关卡里,拖好积木块,点击运行,就可以同时控制虚拟角色和cozmo执行任务,这个过程是实时双向通信!所以我们能将评分之类的机制都加进来,我在之前的文章: 使用scratch3_adapter连接blockly与硬件里说:

这部分值得玩味的地方是,你可以在网页上做所有的教学,无论是结合某一款开源硬件还是某一个AI系统。而scratch3_adapter将允许你用积木来驱动它们,你也能拿到积木/代码在外部系统的执行结果,判断学生是否掌握该知识点,而这对教学可能是很重要的。

一些坑和需要解决的问题

思路和原理都很简单,但在实际使用中,有几个问题需要我们解决。这些问题主要是提升易用性和用户体验,毕竟树莓派运行着linux(raspbian),我们总不能把操作流程用bash来写,让孩子ssh进树莓派操作,尽管我们鼓励他们能力提高之后大胆去尝试。

所以我们做到了all in web

这篇文章以cozmo为例,来展示scratch3-adapter的移动端的解决方案。我们有意选择了cozmo,因为这个例子代表了最为复杂的情况,如果cozmo的连接都顺利,那么其他情况将变得十分简单(诸如micro:bit).所以如果你觉得这篇文章有些复杂是正常的,因为cozmo本身的连接方式很复杂,还会牵扯一些adb的问题

adb的坑

当你把手机连上树莓派之后,adb devices会跟你说没有认证(unauthorized),社区给出了解决方案:kill and restart:

1
2
adb kill-server  
adb start-server  

你需要在开机启动时把这个加上启动项上

接入wifi

如何将树莓派接入局域网,此前是个困难的问题。

如果你把树莓派用作一个网关,分发给普通用户,那么你就需要让这个过程变得简单易用。这一块目前的最佳实践是:

  • 以某种方式连接网关
    • 智能家居设备一般会让你使用蓝牙连接设备
  • 将密码传入设备
  • 重启设备,接入wifi

resin-wifi-connect完美得解决了这个问题。不过这个项目目前有些bug,还在改进中

开机自启 & 掉线重连

开启自启,我们统一使用supervisor来做,并且暴露出9001端口来管理进程,即便中途出现了意外,我们也可以轻松在web页面重启进程,而无需进入树莓派

https

scratch3-adapter的https模式在PC上使用正常,但在ipad上会报一个错误: WebSocket OSStatus error -9807,ipad对https证书有要求,尽管我们可以使用nginx代理scratch3-adapter来解决这个问题(tls v1.2)。但使用http可能更为简易

mDNS & hostname

mDNS允许你在局域网内,通过机器名找到它的ip地址,在智能家居中使用广泛。

对于课堂和机构的教学,我们可能希望,每个树莓派都有唯一标识,可以区分彼此,最好这个名字可以自定义,便于记忆。mDNS & hostname是这个问题的绝佳的解决方案。直接使用sudo raspi-config设置好hostname,重启即可

尽管大多时候你无需注意mDNS,因为大多数系统和路由器都支持,但值得注意的是一些老旧的安卓系统和windows并不支持,如果你使用windows,先安装一些这个软件:Bonjour Print Services (Windows). 安装之后,重启电脑即可

此外补充一些tips: 你可以把hostname和wifi热点名贴在树莓派外壳上,便于使用。如果你在做一个课堂解决方案,这块可能出现的问题和to c很不一样,值得注意

后话

前边这些配置看去比较繁琐,我之后会把这些东西做成镜像,大家直接往树莓派烧录我制作的镜像即可