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

推荐订阅源

V
Visual Studio Blog
MongoDB | Blog
MongoDB | Blog
Engineering at Meta
Engineering at Meta
云风的 BLOG
云风的 BLOG
Microsoft Azure Blog
Microsoft Azure Blog
B
Blog RSS Feed
T
The Exploit Database - CXSecurity.com
P
Privacy & Cybersecurity Law Blog
Know Your Adversary
Know Your Adversary
月光博客
月光博客
I
InfoQ
阮一峰的网络日志
阮一峰的网络日志
NISL@THU
NISL@THU
爱范儿
爱范儿
S
Securelist
博客园 - 叶小钗
C
CERT Recently Published Vulnerability Notes
Recorded Future
Recorded Future
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
aimingoo的专栏
aimingoo的专栏
D
DataBreaches.Net
G
GRAHAM CLULEY
P
Proofpoint News Feed
A
About on SuperTechFans
Google DeepMind News
Google DeepMind News
C
Cyber Attacks, Cyber Crime and Cyber Security
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Tor Project blog
Stack Overflow Blog
Stack Overflow Blog
T
Threat Research - Cisco Blogs
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
Tailwind CSS Blog
有赞技术团队
有赞技术团队
Hugging Face - Blog
Hugging Face - Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Recent Announcements
Recent Announcements
P
Proofpoint News Feed
The GitHub Blog
The GitHub Blog
The Cloudflare Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Last Week in AI
Last Week in AI
Y
Y Combinator Blog
Jina AI
Jina AI
大猫的无限游戏
大猫的无限游戏
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
罗磊的独立博客
博客园 - 【当耐特】
H
Help Net Security
F
Fortinet All Blogs
T
The Blog of Author Tim Ferriss

夜行人

回家路上 第一期的直播演示项目 震动检测器 正能量 在线参观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 编程案例: WebSocket server
种瓜 · 2022-02-08 · via 夜行人

文章目录

前言

MicroBlocks 内置了若干与网络相关的库(都在 Network 分类下):

就网络通信而言,对于许多用例,HTTP 是最简易的协议。但有时,我们需要更好的实时性或想要双向通信,那么 WebSocket 和 MQTT 就是更好的选择。

什么时候使用 MQTT,什么时候使用 WebSocket 呢?

  • 如果你想在在公网范围内通信, 使用 MQTT 可能更简单。
  • 局域网内的应用,推荐 WebSocket,它不需要额外的 broker(实时性也更好)

(目前 MicroBlocks 只提供 WebSocket server 库,而不提供 WebSocket client 库,我问 John 是否有计划实施 WebSocket client ,他说他还想不到典型用例。如果你有典型用例欢迎在 MicroBlocks issue 里提)

谁先拔枪

我之前用 mediapipe 做了一个 AI 演示项目: 谁先拔枪。

游戏有两位玩家,倒计时 3-2-1,先拔枪且对准对方(水平指向对方)的人获胜。

游戏创意来自 Switch 上的游戏  《1 2 Switch》,《1 2 Switch》利用 Switch 手柄里的陀螺仪来检测玩家的手势。

而我的演示里,使用机器视觉来做,这样的好处除了不依赖于手柄,还有儿时过家家的童趣: 比划手指当枪使(biu~biu~biu~)

为了增加表现力,我在游戏区域周围加了一个灯带: 模拟子弹从胜利的一方射出。 有围观者说它有 90 年代舞厅的浮夸效果,夜色下尤甚。

MicroBlocks 登场

那么哪儿用到 MicroBlocks 呢?

机器视觉相关的程序我们使用 Python 构建。

MicroBlocks 很适合用来控制灯带 (NeoPixel) 。为了让 Python 程序与灯带交互,一种简单的想法是让控制灯带的板子提供出网络服务。

按这个思路,我们选择 ESP32 而不是 micro:bit。

这个用例需要很高的实时性,任何的延迟都会破坏玩家的幻想/沉浸感(《游戏设计艺术》), 于是好的想法是使用 WebSocket 而不是 HTTP。

程序相当简单,操控 NeoPixel 的部分不必赘言,因为 NeoPixel 库简洁明了。

我们来看看 WebSocket server 如何构建。 最小原型大约是这样的

首先你需要先将板子连上 WiFi,然后启动 WebSocket server,之后使用一个无限循环不停监听事件。

这里需要注意的是: 每次调用last WebSocket event都拿到一个当前的最新事件(如果没有数据就是 false),如果你想要多次使用事件数据,得把它先存到变量里,然后反复使用变量。

由于积木设计得很直观,MicroBlocks 又是实时交互式的,我在这里就不写太多细节了。你要是对什么感兴趣,动手试试就懂啦!

教会破坏学的乐趣 – Seymour Papert

客户端

客户端要如何与之通信呢,这个简单, 你可以使用任何语言的 websocket 客户端与之通信,任何语言!诸如在浏览器里打开 dev console,与之通信。

唯一需要注意的是, WebSocket server 运行在 81 端口(我已经将这些信息添加到 WebSocket server 库的说明信息里了)。

在我的例子中,使用 Python websocket client 与之通信:

1
2
3
4
from websocket import create_connection

ws = create_connection("ws://192.168.21.108:81")
ws.send('hi from Python')

更完整的例子

你可能想构建产品级的东西,放到淘宝去卖。 上边这个基于 WebSocket 的灯带控制器是不能直接交付给用户的,因为不是“开箱可用”的, 你可能会想要这样的常见功能(IoT 设备通常都有): 配网机制。

用户拿到产品,先得为 ta 配网,这些产品通常是这么工作的: 第一次开机时,设备发出无线热点,用户连接到设备热点后,打开一个配置页面,填入房间路由器的用户名/密码,然后设备就会连上 WIFI,之后就可以用客户端控制它啦。(当然另有不少设备使用蓝牙配网)。

MicroBlocks 里已经内置了这样的例子!

其实,我更喜欢的方式是,直接将 MicroBlocks 看作终端用户界面,这样就不用以上这些复杂代码了!

不过每个人都有自己的喜好, MicroBlocks 当然也可以满足主流需要。放到淘宝去卖吧!