爱大客 - 未分类
type: channel
link: https://www.idarc.cn/index.php/category/uncategorized/
items: ESP32-S3操作系统的最终幻想
items: 屠龙之技
items: 小程序云数据库的唯一性索引
items: 全反射屏幕（全反屏）
items: 瑞芯微Rockchip的超强性能低价芯片
items: Modbus入门
items: matter入门
items: 多种新配网方式WIFI Easy connect(也叫Device Provisioning Protocol)， 乐鑫统一配网（Provisioning），matter测试
items: 通过MCP实现长调用结果的多次流式返回
items: YOLO学习总结

ESP32-S3操作系统的最终幻想
type: item
date: 2026-07-29T10:50:00+08:00
description: https://micropythonos.com/ 默认是有屏幕的，也可以编写无屏幕的service 可以将C编译为.mpy文件给micropython调用 UI界面是集成在S3上的，没有PC端分离界面 当前有700多Star 25年5月的项目，claude居然也有参与 Lua-RTOS-ESP32 https://github.com/whitecatboard/Lua-RTOS-ESP32 这个2016年开始的项目，再2018年已经停止维护了。其开发者网站也已经停止运营了https://ide.whitecatboard.org/ 请注意， ide.whitecatboard.org 服务将于 2026 年 9 月 30 日永久关闭。 从理念上其实是很不错的系统 LuatOS https://github.com/openLuat/LuatOS/ 上海合宙的系统，25年8月开始的项目，Star数500多

屠龙之技
type: item
date: 2026-07-24T10:46:02+08:00
description: 一个Thing的流行程度，是其能承载资源的丰富程度。如果没有资源，再牛也是屠龙之技。相反，如果资源丰富，即使技术低下，也能充分流行。

小程序云数据库的唯一性索引
type: item
date: 2026-07-07T11:09:55+08:00
description: 数据库中建立Users数据，每个用户只能有1个，通常通过先查询无此用户再新建的方式。在极低概率下（可能是多端同时登录或者其他情况），会创建多于1个用户。此时为保证只能创建1个，需要在数据库管理端通过索引实现。 以_openid唯一为例，在数据库的“索引管理”中创建一个_openid的索引，并限定唯一即可。创建时，需要先删除旧的非唯一_openid索引。数据库中有重复的_openid数据也需要先删除。 查找重复_openid需要聚合。网上给出的代码（包括千问和google AI）都有错误，正确的如下： db.collection('your_collection_name').aggregate() .group({ _id: '$_openid', // 按 _openid 字段分组 count: $.sum(1) // 统计每组内的记录数量 }) .match({ // 第二步：筛选出数量大于 1 的分组 count: _.gt(1) // AI给出的代码这儿将_误作$ }) .end()

全反射屏幕（全反屏）
type: item
date: 2026-07-01T14:46:18+08:00

瑞芯微Rockchip的超强性能低价芯片
type: item
date: 2026-07-01T10:15:00+08:00
description: 设备 搜索一些价格很便宜性能很强的掌上游戏机就能找到。 RK3326，大约14左右就能买到（AI说8-12元），4xA7@1.5GHz, Mali-G31 MP2，1080p@60fps 硬解（H.264/H.265），代表掌机：R36S，640x480 3.5寸屏。3D模拟器支持到PS1,N64,PSP RK3506，略贵，CPU性能和图形性能都差，但是有集成0.5TOPS算力，代表掌机：H5，720p屏幕，3D模拟器只支持到PS1. OS 说一下支持Arm这种微型设备的操作系统，。 传统的Ubuntu和Debian有些定制版本。 Armbian是针对Debian优化的系统，支持绝大多数的Pi硬件，如树莓派香蕉派橙子派等。 https://armbian.com/ 游戏系统 以下都是游戏系统，没想到有这么多 EmuELEC ,常被称之为EE系统，https://github.com/EmuELEC/EmuELEC/releases ArkOS(Another Rk OS, Rk是Rockchip的CPU前缀) 及其后继版本dArkOS（Debian ArkOS）, https://github.com/christianhaitian/arkos https://github.com/christianhaitian/dArkOS Rocknix https://github.com/ROCKNIX/distribution AmberELEC 基于EmuELEC的Fork版本，似乎有更多升级 https://github.com/AmberELEC/AmberELEC https://amberelec.org/ batocera https://github.com/batocera-linux/batocera.linux Knulli ,是batocera的fork https://knulli.org/ 还有好几个，可以看portmaster支持的系统，都是游戏系统 https://portmaster.games/supported-devices.html portmaster, 简称PortS, 是Linux上运行PC移植游戏的软件，支持ArkOS、AmberELEC 和 uOS, 似乎其他Linux也支持，但需要手动配置。 https://portmaster.games/

Modbus入门
type: item
date: 2026-06-25T17:21:47+08:00
description: Modbus实际上是应用层协议，制定的年代非常早。理论上是不限定物理层的。 最早是从串口协议RS485上发展来的。因为它是可以一主多从，跟RS485的架构刚好相同。现在也支持基于TCP/IP协议，默认端口号是502。但由于502端口在系统保留端口内，所以很多软件是以8502启动的。 Modbus支持的底层协议分为三种。分别是Modbus RTU、Modbus ASCII，Modbus TCP。由于它是上层协议，所以有JavaScript的实现。有两个库，Modbus-Serial和JSModbus。 Modbus分为主机和从机，一个主机最多可以带32个从机。按Client Server架构来分的话，主机Master是Client，从机Slave是Server。 从机分为三级来去读取一个具体的数值。依次是Unit ID、寄存器、地址。 每个从机，也就是Server首先有一个自己的Unit ID。 其次支持四种不同的寄存器。 1，线圈coil，可读可写，布尔类型。 2，离散输入Discrete input，只读布尔类型。 3，输入寄存器Input registers，只读，双字节。 4，保持寄存器Holding registers，可读可写，双字节。 最后，每种寄存器有其自己的地址。地址又分人类可读地址和机器实际地址。人类可读地址以0、1、3、4开头，分别代表线圈和离散输入、输入寄存器、保持寄存器。机器实际地址都是从0开始的。 Modbus的问题就是从机不能主动上报数据，只能主机去轮询。

matter入门
type: item
date: 2026-06-24T18:36:00+08:00
description: 参考资料： cnblogs上一篇讲解：https://www.cnblogs.com/iini/p/18009504 st matter测试和演示： https://wiki.st.com/stm32mcu/wiki/Connectivity:Matter_test_and_demonstrate esp-matter 文档： https://github.com/espressif/esp-matter csa matter协议： https://csa-iot.org/all-solutions/matter/ 官方matter sdk开源： https://github.com/project-chip/connectedhomeip/blob/master/docs/guides/BUILDING.md#prerequisites 开发工具： esp matter开发需要在linux或者MacOS上安装esp-idf和esp-matter 官方 chip-tool 运行于支持BLE的linux和MacOS上 android上由NXP开发的NXP Matter Tool可以替代chip-tool 配网 Matter的配网又叫commission任命（和provision又不同），过程叫commissioning, 给配网信息的叫任命者commissioner，一般就是controller手机，被任命的叫commissionee,一般就是设备。 matter的设备（不包括设备本身）内有三级结构，分别时node节点->endpoint终端->cluster功能簇，cluster分为server和client，其中server提供attributes, Commands和Events, client可以发起交互命令interactions, 包括 read, write, invoke, subscribe（读/写/调用/订阅） 为了完成配网，commissionee必须提供如下onboarding信息： 16-bit Vendor ID and 16-bit Product ID 12-bit device discriminator 27-bit setup passcode 8-bit Discovery Capabilities Bitmask 通过以上信息可以生成一下两种方式来配网（可以用NXP matter tool来生成）： 手动配对码（Manual Pairing Code） 二维码（QR Code） 如果上述配网流程成功，那么设备将得到如下信息： 由fabric ID(64bit)和node ID（64bit)组成的实例名 Node Operational Certificate(NOC) NOC对应的私钥 Access Control List 操作网络的其他信息 不同的node组成一个group，并用16bit的group id来标识 尝试 我用Esp-matter中example的light项目编译到C3上测试。串口是可以直接回车命令行交互的。输入matter help可以查看。 重要命令： matter ble adv start matter config matter onboardingcodes ble matter device factoryreset 设备不会一直在ble广播commissioning状态，过段时间会退出。 我是用NXP matter tool完成配网后，生成了一个QR码，然后再google home中扫描，然而google home提示必须有支持matter的hub才能控制，包括音箱（google home/mini, next mini, nest audio), 显示屏（nest hub 1代/2代/max), WLAN（nest wifi pro), 流媒体播放器(google tv streamer)。 使用matter device factoryreset后，我用ESP rainmaker home也配网成功，并且“雨作”配网可以自动发送ssid和密码过去（不知道是怎么获取的）。但是NXP就控制不了了。 根据AI的回复，matter优先使用ble配网，局域网控制，部分高级功能才会用到互联网。 并且从google home情况来看，matter可以适配各自的IOT生态，比如google home就要求购买支持matter的hub，而乐鑫和NXP可以直接加入控制。

多种新配网方式WIFI Easy connect(也叫Device Provisioning Protocol)， 乐鑫统一配网（Provisioning），matter测试
type: item
date: 2026-06-24T09:14:00+08:00
description: DPP WIFI Easy connect(也叫Device Provisioning Protocol)简称DPP，在idf的examples中有个dpp-enrollee目录就是示例。 乐鑫基本全系支持的。我在C3上试运行是可以的。会从串口打印出一个二维码。接下来就遇到问题了，据AI和乐鑫说，Android 10 以上都默认支持，可是我的手机是Android15（IQOO), 却找不到所说的扫码入口 官方文档 https://github.com/espressif/esp-idf/tree/fb14a3e7/examples/wifi/wifi_easy_connect/dpp-enrollee To run the example with an Android 10+ device follow below steps - Compile and flash the example on ESP device, a QR code will appear on your console. Connect your phone to the network, say named "Example-AP". Now go to Settings->WiFi & Internet->Wi-Fi->Example-AP->Advanced->Add Device. Scan QR Code using the scanner, which will make ESP device connect to Example-AP. 然后就此事问了谷歌ai。谷歌说，确实DPP的推广不利，在iOS上根本不被支持。而且苹果不支持WiFi联盟的配网协议，包括上一代配网协议WPS是老传统了。 所以这个网最后也没配起来。 从手机端向设备端传出WiFi信号，走的是专用的一个配网的信道，设备端监听，由手机端发送过去。似乎在二维码中会填写频段和信道，以供手机端发送。 乐鑫的统一配网Provisioning 同样，我在C3上运行起来了，也是通过串口打印了二维码。 通过乐鑫官方的APP ESP BLE Prov也成功配网了。另一个APP ESP Soft AP Prov应该是给没有蓝牙的设备用的。 真的，这个操作略显蛋疼，就是本来通过BluFi已经可以扫描到周围的设备了。统一配网却还需要额外的信道，也就是打印出来二维码，通过摄像头去扫描来传输信息。这整个过程对于生产来说也是很麻烦的。 唯一的好处就是之前我做培训的时候遇到的配网的问题，多个学员同时去做配网的话。配网的话，会扫出来太多的设备，不知道哪个是自己的。不过这种的话也同样可以解决，如果统一配网和DPP可以打印二维码，那我也可以打印，甚至我只需要打印出来MAC地址的尾号就可以。 乐鑫统一配网的示例还不在idf默认的examples里面，而是在 idf-extra-components中， 位置： https://github.com/espressif/idf-extra-components/tree/master/network_provisioning 所以还是不如BluFi好用。 matter 据某个AI说，matter也支持配网，所以想安装matter环境编译试一下。 然而esp-matter仅支持linux和macos， 我在WSL(Ubuntu 24.04)上安装测试，还要先装idf再装matter，安装matter到编译这一步的时候，就会导致wsl崩溃退出。 Done. Made 13083 targets from 819 files in 14765ms ninja: Entering directory /home/a/esp/esp-matter/connectedhomeip/connectedhomeip/out/host' [0/49] c++ obj/examples/common/tracing/commandline.TracingCommandLineArgument.cpp.oTerminated a@J:~/esp/esp-matter$ ninja: build stopped: interrupted by user. 发现是ninja使用了所有CPU内核和内存导致系统卡死被系统杀进程了。每个ninja编译线程占用1个CPU和约1.5~2G内存。如果内存不足，需要限制CPU的核心数。否则几个ninja线程之间抢内存和swap虚拟内存，最后一个都没编译。 在用户目录下修改.wslconfig`, 增加： [wsl2] processors=2 memory=6GB 就可以编译过了。 通过后又遇到ubuntu24不允许pip安装系统包的问题： Install…

通过MCP实现长调用结果的多次流式返回
type: item
date: 2026-05-27T18:21:00+08:00
description: 要求： 大模型请求1分钟内每10秒钟的温度，MCP server每10秒返回一次温度给大模型。 通过Server Notification的方式返回，MCP Server示例代码如下(这个任务千问3.6没有完成，让google ai完成的)： import asyncio import random from fastmcp import FastMCP, Context 初始化 FastMCP 服務，並為其命名 mcp = FastMCP("TemperatureStreamer") @mcp.tool() async def monitor_temperature(duration_seconds: int = 60, interval_seconds: int = 10, ctx: Context = None) -> str: """ 在指定的時間內，每隔固定秒數監測並返回一次環境溫度。 Args: duration_seconds: 總監測時長（秒），預設 60 秒 interval_seconds: 數據採集間隔（秒），預設 10 秒 """ # 計算總共需要採集幾次數據 total_steps = duration_seconds // interval_seconds temperatures_log = [] print(f"開始溫度監控任務：預計執行 {duration_seconds} 秒，每 {interval_seconds} 秒採集一次...") for step in range(1, total_steps + 1): # 模擬讀取硬體傳感器溫度 current_temp = round(random.uniform(22.0, 28.0), 2) temperatures_log.append(current_temp) # 構造本次採集的進度訊息 status_msg = f"第 {step * interval_seconds} 秒 - 當前實時溫度: {current_temp}°C" print(f"[Server Log] {status_msg}") # 【核心】如果客戶端支持並傳入了 Context，則通過 SSE 通道即時推送進度通知 if ctx: # report_progress 參數: (當前進度值, 總進度值, 附帶的文本訊息) await ctx.report_progress( progress=step, total=total_steps, message=status_msg ) # 異步等待下一次採集 if step < total_steps: await asyncio.sleep(interval_seconds) # 任務結束，返回最終的標準 Response avg_temp = round(sum(temperatures_log) / len(temperatures_log), 2) return f"【監控任務完成】共採集 {total_steps} 次數據。歷史溫度: {temperatures_log}。平均溫度: {avg_temp}°C" if name == "main": 以 sse 傳輸模式啟動服務，默認會掛載在 http://127.0.0 # 備註：新版 FastMCP 也支持 "http" (Streamable HTTP)，兩者在網路層皆可實現流式推送 mcp.run(transport="sse", host="127.0.0.1", port=8000) 在Inpector中，仍然是采用常规的tools调用方式，不同的是，每过10秒在右下角会出现`notifications/progress`的返回结果，例如： ```json { "method": "notifications/progress", "params": { "progress": 1, "total": 6, "message": "第 10 秒 - 當前實時溫度: 23.22°C" } } 在此期间，工具一直是Running状态，在60秒结束后，才会返回正常的结果。

YOLO学习总结
type: item
date: 2026-05-19T19:17:00+08:00
description: 这两天学习了一下YOLO，也就是You Only Look Once。学习这个模型的原因是GitHub上有一个激光打蚊子的项目，有不少的Star数目，就是用的这个模型。这个项目已经好多年没有更新了，使用的还是 YOLO v4 模型。 这个模型是快速的视频实时目标识别的模型，发展至今已经历了很多代。YOLOv4模型使用的是CNN框架，也就是卷积神经网络，基于一个叫做Darknet的神经网络实现。这个版本的模型还有比较多问题，第一，它是有锚框的，也就是Anchor-based，主要是增加了很多运算量，然后无法实时处理特别长或者扁的物体，另外就是只能进行目标识别，不能做其他的工作。第二是建立了NMS非极大值抑制的后处理方式，不要在一个物体上圈好多个框。 在后面的版本 V8 11，26这些版本中都增加了更多的功能，并且从C++转向了PyTorch，维护者也变成了ultralytics。首先就是取消了锚框，变成了无锚框的方式，其次除了目标识别，还增加了图片分类/实例分割（就是把目标抠图出来而不是只画个框）。其次还有多目标检测/姿态检测等。 YOLO26这是一个轻量化的版本，还取消了NMS，进一步降低运算量，使其可以在嵌入式设备上或者说是运算能力比较差的设备上运行。 YOLO模型有不同的规模，从小到大有nano/small/medium/large/extra large。 其中nano只有几兆大，extra large也不到300M，经过FP16或者INT8量化还能进一步降低体积和运算量。 YOLO模型的原始格式是.pt（pytorch），可以导出为不同的格式，最重要的是onnx，这个格式支持openCV中的dnn（深度神经网络）来调取，也支持在浏览器中/ios/android/react native/flutter中调取。最重要的一个项目是微软的https://github.com/microsoft/onnxruntime 跨平台项目，对多端调用提供了可能。 还支持tflite格式，是谷歌tensorflow的一种格式，官方维护了 https://github.com/tensorflow/tfjs 这个js库，支持node和浏览器等环境调用。在安卓手机上由特别的性能优化。 其他巨头也有自己的格式，如英伟达GPU上有TensorRT (.engine 或 .trt）格式，苹果手机上有CoreML (.mlpackage 或 .mlmodel) 格式，Intel有OpenVINO (_openvino_model/)，国产的瑞芯微也有rknn格式。 介绍下原始训练的模型格式，最重要的是pytorch保存的pt模型，以及pytorch延伸框架（如 PyTorch Lightning）的ckpt（checkpoint)模型。 这两种模型除了权重数据还打包了python代码，所以被认为是不安全的，后来huggingface等社区就推出了只有权重数据的safesensor模型，并且做了内存映射，加载更快。