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

推荐订阅源

S
Security @ Cisco Blogs
The Last Watchdog
The Last Watchdog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
aimingoo的专栏
aimingoo的专栏
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
PCI Perspectives
PCI Perspectives
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
月光博客
月光博客
V
Visual Studio Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
T
Tailwind CSS Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
L
LangChain Blog
B
Blog RSS Feed
小众软件
小众软件
N
News | PayPal Newsroom
Attack and Defense Labs
Attack and Defense Labs
Microsoft Azure Blog
Microsoft Azure Blog
V
Vulnerabilities – Threatpost
The Hacker News
The Hacker News
T
Tor Project blog
A
Arctic Wolf
Jina AI
Jina AI
Hacker News: Ask HN
Hacker News: Ask HN
F
Fortinet All Blogs
Cloudbric
Cloudbric
S
Secure Thoughts
L
LINUX DO - 热门话题
博客园 - 司徒正美
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
S
Security Affairs
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
J
Java Code Geeks
P
Privacy International News Feed
AWS News Blog
AWS News Blog
S
Securelist
TaoSecurity Blog
TaoSecurity Blog
AI
AI
O
OpenAI News
C
Cyber Attacks, Cyber Crime and Cyber Security
K
Kaspersky official blog
T
The Blog of Author Tim Ferriss
大猫的无限游戏
大猫的无限游戏
Google DeepMind News
Google DeepMind News
Know Your Adversary
Know Your Adversary
P
Palo Alto Networks Blog
T
Tenable Blog
Last Week in AI
Last Week in AI
WordPress大学
WordPress大学
S
SegmentFault 最新的问题

夜行人

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

上周六在 CodeLab 候车群 里提到:

下周我打算做一个实验,在 ESP32 板子上,运行一个网站和一个聊天服务器, 然后通过端口映射,提供出公网服务。由于 ESP32 的廉价和低功耗, 意味着可以使用太阳能来驱动这个 10 多块钱的 web 后端服务器。打算在 microblocks 里开发。

心急等不到下周,周六下午去实务学堂上完课,从小洲村回到公司,取了一块 ESP32 板子回家做实验,由于 microblocks 提供了强大的沉浸式编程体验(类似 Smalltalk,放大心智的力量),一会儿就搞出了原型。

视频的后半段,十分有趣, 当我在浏览器里请求 /hi 时,web 服务已经被我中止了,我临时创建了响应内容:hello esp32, 并立刻用它响应来自浏览器的请求, 在我点击 响应  积木的瞬间,浏览器才收到回复。我们在请求和响应之间进行交互式编程!这过程极大增强了 web 编程的可理解性,我们可以在 microblocks 里交互式地观察请求的细节,并随时手动给出响应,换句话说,我们的大脑和双手成了后端运行时(runtime)的一部分!

之后,我有个想法,考虑到这个太阳能驱动的网站,可能因太阳暴晒导致芯片温度升高,于是想构建一个自动降温装置: 当温度太高时,打开风扇

通过 microblocks 的通用实时图表功能,可以很快看出代码中的临界参数应该选什么值(当温度超过预设的临界值,就打开风扇)。大多数编译型编程环境,是"闭着眼睛排列代码/积木"。

家庭作坊,就地取材,为了压住风扇不乱跑,用的是橘子, 为了模拟阳光暴晒,用的是电吹风 :)

技术细节

esp32-website.ubp

代码简洁清晰,无需过多解释。

来看看 microblocks 的 HTTP server 库,http server request 积木用于获取客户端请求,response 积木用于给出响应。 编程模型与大多数 web 后端语言一致: 接受客户端的请求,然后给予响应,一直循环上述过程。microblocks 构建出的是动态网站!

有一处值得注意,在每次循环中,http server requestresponse 应该都只出现一次(成对出现),如果你想多次使用http server request,应该把它保存到变量里,然后多次使用这个变量。

公网访问

由于 ESP32 连接到局域网 WIFI, 我打算使用 ngrok(也可使用 frp 之类的工具) 将其 web 服务端口映射到公网上。如果你直接在 ESP32 上接了网线,且有公网地址,则不需要使用 ngrok。

正好桌面上有一个树莓派,我将 ngrok 运行在树莓派里(树莓派和 ESP32 在同个网络下),这样就不需要关机了。

首先需要获得 ESP32 的 IP 地址,这简单,microblocks 的 WIFI 库有对应积木,交互式地查看它即可,我们之前提到 microblocks 交互式的环境可以充当硬件的“屏幕”! 不像许多数编译式的环境,代码一旦烧录,就不懂它在内部干嘛了,随然串口输出有用,但你需要事先知道该输出什么调试信息,这是很讽刺的,因为意外的问题,正好是你事先不知道的,好的环境应该允许你与系统进行深层次的实时交互,让你不断解决意外的问题,并加深对它的理解,所有这些都发生在行进过程中。正如 Alan Kay 喜欢说的: 在飞行中改进系统。

拿到 ESP32 的地址后(如10.0.0.49), 我们就可以把它映射到公网了: ./ngrok http http://10.0.0.49

页面信息

当你访问映射出的公网地址时,会看到如下页面。

你可以修改前边的代码,写任何你喜欢的 html 代码,我喜欢 markdown,所以采用 markdown 来写页面,这是从 Yoshiki Ohshima 那儿学来的。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
<meta charset="UTF-8" />
## path 
* light 
    * [on](/lighton) 
    * [off](/lightoff) 
* fans 
    * [on](/fanson) 
    * [off](/fansoff) 
* [codelab](/codelab)
<style class="fallback">body {visibility: hidden;white-space: pre;font-family: monospace;}</style>
<script src="https://casual-effects.com/markdeep/latest/markdeep.min.js"></script>
<script>window.alreadyProcessedMarkdeep ||(document.body.style.visibility = "visible");</script>

你也可以把 html 文件和其他静态文件永久托管在 ESP32 ESP32 能存几 MB 的文件!使用 microblocks 提供的文件库即可。

太阳能电池

我目前使用移动电源驱动网站。

由于 ESP32 的低功耗, 意味着可以使用太阳能来驱动它。最近广州阴雨天,太阳能电池还没到, 以后有时间再测试。

如果你有兴趣来做,电路方面可以参考这篇文章

聊天服务器

在 ESP32 里构建聊天服务器完全没有问题,由于 ESP32 带有文件系统,可以在服务器端保留消息,为离线用户存储历史消息。

我之前想使用 websocket 来构建聊天服务器,目前 microblocks 作者没写 websocket 的用例,我还没摸索出用法。之后有空再折腾,我本来还打算使用 htmx 构建客户端。

你也可以使用 HTTP server 库构建聊天服务器,应该很简单。

后记

下班之前运行的网站,12小时之后,依然稳定运行。

参考