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

推荐订阅源

MyScale Blog
MyScale Blog
博客园 - 三生石上(FineUI控件)
人人都是产品经理
人人都是产品经理
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
L
LINUX DO - 热门话题
N
Netflix TechBlog - Medium
S
Schneier on Security
T
The Exploit Database - CXSecurity.com
Vercel News
Vercel News
P
Palo Alto Networks Blog
C
CERT Recently Published Vulnerability Notes
Simon Willison's Weblog
Simon Willison's Weblog
I
Intezer
L
Lohrmann on Cybersecurity
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
D
Darknet – Hacking Tools, Hacker News & Cyber Security
P
Proofpoint News Feed
The Register - Security
The Register - Security
T
Threat Research - Cisco Blogs
P
Privacy & Cybersecurity Law Blog
A
Arctic Wolf
F
Fortinet All Blogs
V
Vulnerabilities – Threatpost
The Hacker News
The Hacker News
V
Visual Studio Blog
Know Your Adversary
Know Your Adversary
博客园 - Franky
C
Check Point Blog
P
Privacy International News Feed
NISL@THU
NISL@THU
T
Tenable Blog
云风的 BLOG
云风的 BLOG
T
Tailwind CSS Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
B
Blog RSS Feed
A
About on SuperTechFans
L
LangChain Blog
Cyberwarzone
Cyberwarzone
Security Latest
Security Latest
C
CXSECURITY Database RSS Feed - CXSecurity.com
G
Google Developers Blog
WordPress大学
WordPress大学
T
Threatpost
Y
Y Combinator Blog
Last Week in AI
Last Week in AI
The GitHub Blog
The GitHub Blog
爱范儿
爱范儿
T
Tor Project blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Spread Privacy
Spread Privacy

夜行人

回家路上 第一期的直播演示项目 震动检测器 正能量 在线参观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开发笔记 创业二三事
一辆树莓派可编程小车的问题
种瓜 · 2019-02-26 · via 夜行人

上一篇文章里,我们提到

本周,我会给出一个具体例子: 在树莓派中使用extension_iot.py,定制出extension_iot_rpi.py, 而后者是可以实际服务于硬件教学的插件。 在这个例子中我们将展示,如何在几天内快速构建一个教学产品,可以直接推向最终用户,它甚至包括了管理功能(如远程故障处理和升级)!

问题是什么

在给出解决方案是什么之前,我们先来问一下: 问题是什么呢?

树莓派作为编程教育平台

我们在 codelab-adapter ❤️ Raspberry Pi,写到:

就编程教育而言,树莓派是非常理想的开源硬件。

这句话是含混的。树莓派是一台电脑,这意味这它可以胜任无数工作,即便就编程教育而言,它的生态里也有数不清的工具,其中有好有坏。当我们说就编程教育而言,树莓派是非常理想的开源硬件。 我们实际是想说,树莓派是个开放的平台,充满了无限可能,无论你想做怎样的编程教育,它可能都是不错的选择。

树莓派生态里,有数不清的优秀项目用以支持编程。在CodeLab ❤️ IoT列出了我们尤其喜欢的两个项目:

自由有时候是一种负担

问题来了,现在有一群学生,一堆树莓派,有这么多的编程工具可供选择,你来说说要怎么开始编程吧?

这取决于你是谁,你的用户是谁,你构想的编程场景是怎样的。这些是很个性化的问题,并不存在通用的最佳实践。

让我们讨论一个具体的案例。在这个典型案例中,我们会看到一些常见的问题模式。

这个案例是这样的: 你将树莓派作为驱动小车的硬件平台,它是小车的大脑,你构建的产品是一辆编程小车,树莓派是你的项目的一部分。

它大约长这样:

你当然不会只是想卖出一辆可由树莓派驱动的小车,那样是没什么人想买的。它向左走两步,接着向右走两步就完事了,程序固化其中,这不是你想要的。你希望它是可编程的。

一辆可编程小车

一辆可编程小车,这么简单的问题用得着专门讨论吗?

Google/Github搜一下树莓派小车,不是有一堆教程和开源项目吗?淘宝上随便买个小车底盘,买几个电机,加上一些开源的驱动,不就好了吗?

外形不好看?3D打印一个。3D打印不够细腻?激光树脂了解一下。要批量生产?为外形开个模吧。

好的,你很快做出了一个可编程的小车,只需要ssh pi@raspberrypi.local,写几行Python,小车就按你的代码逻辑移动啦!

等等,命令行?对编程入门者不够友好吧。如果不用ssh,用户怎么为小车编程呢?

更简单的问题是: 用户怎么与小车上的树莓派建立连接呢? 只要连接能顺利建立,编程过程可以看作在信道上来回传递信息。

好的,我们似乎得关注"怎么建立连接"这个问题。

怎么建立连接

有许多方式建立用户与树莓派的连接。最新的树莓派自带了蓝牙(4.2)和wifi芯片。

所以在不添加任何模块的情况下,我们可以利用蓝牙或wifi与树莓派建立连接。

蓝牙

树莓派里的蓝牙是可编程的,当你希望利用树莓派自带的蓝牙与用户建立连接时,社区里有很多种实现方案,常规的思路是你可以在树莓派里运行蓝牙服务。用户的客户端主动连接树莓派的蓝牙。需要注意的事,目前操作系统对ble的兼容还不够好,所以你将蓝牙运行为什么模式是需要考虑的,视你的用户和场景而定。

但你依然需要考虑一些问题,小车树莓派的镜像是用同一个吗?小车的蓝牙服务名字是随机生成的吗?一个教室中有十个小车的话,学生怎么找到那个蓝牙服务对应自己的小车?

这个问题追问的是如何添加clientid,让用户容易发现它。

wifi

树莓派内置了wifi芯片。所以我们可以将树莓派接入无线热点。当然也可以将树莓派用作无线热点。

需要提醒的是,将树莓派用作热点,会强迫客户端接入它,如果没有双网卡,用户就失去了接入互联网的能力,而你的编程平台很可能在公网上。

于是我们只讨论将树莓派接入无线热点的方案。首先我们就会遭遇一个棘手的问题,如何将树莓派接入wifi?树莓派出产时并不知道用户的wifi信息。这意味着配置wifi的工作只能交给用户。

社区里有很多做法,诸如

  • /boot目录下常见wpa_supplicant.conf,写入wifi配置信息。
  • 初始化时,接入显示屏,在图形桌面里配置wifi。
  • wifi-connect: Easy WiFi setup for Linux devices from your mobile phone or laptop

wifi-connect做了非常出色工作,允许你用手机来配置树莓派。就像主流的智能家居网关和智能音箱那样。它可能是个不错的起步!

接入wifi还只是第一步,它只意味着你有网络了,那么你要如何与用户的客户端通信呢?

有很多种做法,无论那种做法,都会遇到前头提到的clientid问题。设备需要有标识。尤其是当多个设备在一个网络下使用时(课堂/活动场景)。

在局域网内,hostname(默认是raspberrypi.local)是个不错的标识,和大多数情况一样,windows系统负责拖后腿,默认并不支持它(需要mDNS的支持),如果你采用hostname来发现设备,那么windows需要安装Bonjour Print Services (Windows)

我们也可以把树莓派视为一个物联网设备,使用mqtt来连接它。这是我目前比较喜欢的方案,至于mqtt server在云端还是在局域网内(诸如跑在某个树莓派上),都没问题。

无论是基于局域网内hostname的连接策略还是基于mqtt的连接策略。codelab-adapter都将提供支持。

小车

我们想干嘛来着?我们希望提供的是一个可编程小车!好的,终于想起我们最初要做的事情了。

莫忘初心啊同学们!

想想一个典型的使用场景。一群学生在教室里使用Scratch3.0对小车编程。

他们使用无线网将小车接入了wifi中。我们也做到了每辆小车有个clientid,我们还构建了一个mqtt server,用以把信息从用户编程界面推到小车上。学生在积木里输入clientid,点击连接,之后就可以使用积木给小车发送信息了。

好的,截至倒目前,我们好像没有构建任何教学相关的内容!我们只是让消息可以从客户端抵达小车。甚至都还不包括如何升级和维护它!

一起来解决问题

这里边有大量工作是不必要的重复劳动,这正式CodeLab在做的事:CodeLab ❤️ IoT,我们希望开发者们一起来完善树莓派平台。将其打造为一个易用的环境。我们开放了围绕树莓派在做的所有工作。

下一篇文章里,我们会展示一个服务于编程教育的整体解决方案。

参考