Phase 1 MVP: crawl 10 high-quality oshwhub projects into LFS
Why: - Charles 指定:先爬 10 个高质量项目存 Gitea LFS,一个项目一个文件夹, 保留原文件和 URL。先以小批量验证 schema + LFS 流水线,放量前再拍板 存储规模。 What: - crawlers/oshwhub: 列表 API (`/api/project?sort=hot`) + SSR HTML 解析, 一次性产出 metadata / description / cover / files / _urls - schemas/project.schema.json: 跨源统一 schema - docs/sources/oshwhub.md: API 入口 / 字段映射 / 陷阱调研 - pyproject.toml: httpx[http2] 单依赖 - .gitattributes: data/raw/**/files/** 一律走 LFS(规则写窄,避免误伤 schemas/*.json 等) - .gitignore: 移除 data/raw/* 排除(改走 LFS 入库) 10 个项目覆盖:调试器 / 加热台 / 盖革计数器 / 数控电源 / 焊台 / 智能手表 / USB 测电流 / ZVS 感应加热 / AI 开发板 / 红外热成像。 共 52 附件 ≈ 524 MB 入 LFS,筛选判据 grade=4 & likes>=100 & 多样性。 Known gaps(见 plan.md § Phase 1.4): - EasyEDA 源 JSON 需登录 (u.lceda.cn),v0.1 跳过 - fs-web-stream.jlc.com 的工程源下载未测 - scripts/validate.py 自动 schema 校验未实现 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3
.gitattributes
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
# data/raw/<source>/<project>/files/ 下是原始附件,一律走 LFS(不管后缀)。
|
||||
# 元数据(metadata.json / description.md / _urls.json / cover.*)留在普通 git。
|
||||
data/raw/**/files/** filter=lfs diff=lfs merge=lfs -text
|
||||
7
.gitignore
vendored
@@ -1,12 +1,11 @@
|
||||
# Data outputs (大文件不入库,走 LFS 或外部存储)
|
||||
# 忽略目录内容,保留目录本身(靠 .gitkeep 占位)
|
||||
data/raw/*
|
||||
# Derivative 数据(可从 raw 重建),不入库
|
||||
data/processed/*
|
||||
data/state/*
|
||||
!data/raw/.gitkeep
|
||||
!data/processed/.gitkeep
|
||||
!data/state/.gitkeep
|
||||
|
||||
# data/raw 入库(工程二进制走 LFS,见 .gitattributes)
|
||||
|
||||
# Python
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
|
||||
0
crawlers/__init__.py
Normal file
0
crawlers/oshwhub/__init__.py
Normal file
4
crawlers/oshwhub/__main__.py
Normal file
@@ -0,0 +1,4 @@
|
||||
from .crawler import main
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
436
crawlers/oshwhub/crawler.py
Normal file
@@ -0,0 +1,436 @@
|
||||
"""oshwhub.com crawler — MVP.
|
||||
|
||||
Usage:
|
||||
uv run python -m crawlers.oshwhub \
|
||||
--out data/raw/oshwhub \
|
||||
--top 10 --min-likes 50 --min-grade 4
|
||||
|
||||
Or with explicit UUID list:
|
||||
uv run python -m crawlers.oshwhub \
|
||||
--uuids 298873b7fdbe44f8ba0e7351e023bc2c,7b6a398811f14eba9a952b8d2ddd7ace \
|
||||
--out data/raw/oshwhub
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import dataclasses as dc
|
||||
import hashlib
|
||||
import html as _html
|
||||
import json
|
||||
import re
|
||||
import sys
|
||||
import time
|
||||
import urllib.parse
|
||||
from datetime import datetime, timezone
|
||||
from pathlib import Path
|
||||
from typing import Iterator
|
||||
|
||||
import httpx
|
||||
|
||||
API_LIST = "https://oshwhub.com/api/project"
|
||||
BASE = "https://oshwhub.com"
|
||||
IMG_CDN = "https://image.lceda.cn"
|
||||
UA = "FacereDataset/0.1 (+https://git.deepknow.site/Facere/FacereDataset)"
|
||||
SLEEP_BETWEEN = 2.0 # seconds between detail-page / file fetches
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# HTTP
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
def make_client(timeout: float = 30.0) -> httpx.Client:
|
||||
return httpx.Client(
|
||||
http2=True,
|
||||
timeout=timeout,
|
||||
headers={"User-Agent": UA, "Accept": "text/html,application/json;q=0.9,*/*;q=0.8"},
|
||||
follow_redirects=True,
|
||||
)
|
||||
|
||||
|
||||
def polite_sleep() -> None:
|
||||
time.sleep(SLEEP_BETWEEN)
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Listing
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
def list_projects(
|
||||
client: httpx.Client,
|
||||
page: int = 1,
|
||||
page_size: int = 30,
|
||||
sort: str = "hot",
|
||||
) -> dict:
|
||||
r = client.get(API_LIST, params={"page": page, "pageSize": page_size, "sort": sort})
|
||||
r.raise_for_status()
|
||||
data = r.json()
|
||||
if not data.get("success"):
|
||||
raise RuntimeError(f"list API failed: {data}")
|
||||
return data["result"]
|
||||
|
||||
|
||||
def rank_score(item: dict) -> float:
|
||||
"""Composite quality score: favor projects with broad engagement."""
|
||||
c = item["count"]
|
||||
return (
|
||||
c["like"] * 3
|
||||
+ c["star"] * 1
|
||||
+ c["fork"] * 2
|
||||
+ c["views"] / 100
|
||||
+ item["comments_count"] * 2
|
||||
+ (item.get("grade") or 0) * 50
|
||||
)
|
||||
|
||||
|
||||
def pick_top(
|
||||
items: list[dict],
|
||||
n: int,
|
||||
min_likes: int,
|
||||
min_grade: int,
|
||||
exclude_copies: bool = True,
|
||||
) -> list[dict]:
|
||||
filtered = []
|
||||
for it in items:
|
||||
if exclude_copies and "_copy" in it["path"]:
|
||||
continue
|
||||
if it["count"]["like"] < min_likes:
|
||||
continue
|
||||
if (it.get("grade") or 0) < min_grade:
|
||||
continue
|
||||
filtered.append(it)
|
||||
filtered.sort(key=rank_score, reverse=True)
|
||||
return filtered[:n]
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Detail page parsing
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
RE_ATTACH_BLOCK = re.compile(r'\\"attachments\\":\[', re.DOTALL)
|
||||
RE_LICENSE = re.compile(r'\\"license\\":\\"([^\\"]+)\\"')
|
||||
RE_META_DESC = re.compile(
|
||||
r'<meta\s+name="description"\s+content="([^"]*)"', re.IGNORECASE
|
||||
)
|
||||
RE_TITLE = re.compile(r"<title>([^<]+)</title>", re.IGNORECASE)
|
||||
|
||||
|
||||
def _find_balanced_bracket(s: str, start: int, open_ch: str = "[", close_ch: str = "]") -> int:
|
||||
"""Return index after the matching close bracket. start must point at open_ch."""
|
||||
assert s[start] == open_ch
|
||||
depth = 0
|
||||
for i in range(start, len(s)):
|
||||
ch = s[i]
|
||||
if ch == open_ch:
|
||||
depth += 1
|
||||
elif ch == close_ch:
|
||||
depth -= 1
|
||||
if depth == 0:
|
||||
return i + 1
|
||||
raise ValueError("unbalanced")
|
||||
|
||||
|
||||
def parse_detail_html(h: str) -> dict:
|
||||
"""Extract attachments, license, title, description from SSR HTML."""
|
||||
out: dict = {
|
||||
"title": None,
|
||||
"description_meta": None,
|
||||
"license": None,
|
||||
"attachments": [],
|
||||
}
|
||||
|
||||
m = RE_TITLE.search(h)
|
||||
if m:
|
||||
# HTML entities + suffix stripping
|
||||
title = _html.unescape(m.group(1)).strip()
|
||||
for sfx in (
|
||||
" - 立创开源硬件平台 - 深圳创电优选科技有限公司",
|
||||
" - 立创开源硬件平台",
|
||||
):
|
||||
if title.endswith(sfx):
|
||||
title = title[: -len(sfx)]
|
||||
out["title"] = title
|
||||
|
||||
m = RE_META_DESC.search(h)
|
||||
if m:
|
||||
out["description_meta"] = _html.unescape(m.group(1))
|
||||
|
||||
m = RE_LICENSE.search(h)
|
||||
if m:
|
||||
out["license"] = m.group(1)
|
||||
|
||||
m = RE_ATTACH_BLOCK.search(h)
|
||||
if m:
|
||||
arr_start = m.end() - 1 # point at '['
|
||||
arr_end = _find_balanced_bracket(h, arr_start)
|
||||
block = h[arr_start:arr_end]
|
||||
clean = block.replace('\\"', '"').replace("\\\\", "\\")
|
||||
try:
|
||||
out["attachments"] = json.loads(clean)
|
||||
except json.JSONDecodeError as e:
|
||||
# Keep raw for debugging; skip attachments silently. Caller can log.
|
||||
out["_attachments_parse_error"] = str(e)
|
||||
|
||||
return out
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Download helpers
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
def download_to(client: httpx.Client, url: str, dest: Path) -> tuple[int, str]:
|
||||
"""Stream-download url to dest. Returns (size, sha256)."""
|
||||
dest.parent.mkdir(parents=True, exist_ok=True)
|
||||
h = hashlib.sha256()
|
||||
size = 0
|
||||
with client.stream("GET", url) as r:
|
||||
r.raise_for_status()
|
||||
with open(dest, "wb") as f:
|
||||
for chunk in r.iter_bytes(1 << 15):
|
||||
f.write(chunk)
|
||||
h.update(chunk)
|
||||
size += len(chunk)
|
||||
return size, h.hexdigest()
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Single-project crawl
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
@dc.dataclass
|
||||
class CrawlResult:
|
||||
project_id: str
|
||||
out_dir: Path
|
||||
files_count: int
|
||||
bytes_total: int
|
||||
skipped_files: list[str]
|
||||
|
||||
|
||||
def crawl_one(
|
||||
client: httpx.Client,
|
||||
list_item: dict,
|
||||
out_root: Path,
|
||||
fetch_files: bool = True,
|
||||
) -> CrawlResult:
|
||||
uuid = list_item["uuid"]
|
||||
path = list_item["path"]
|
||||
proj_dir = out_root / uuid
|
||||
proj_dir.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
# 1. Fetch detail HTML
|
||||
detail_url = f"{BASE}/{path}"
|
||||
r = client.get(detail_url)
|
||||
r.raise_for_status()
|
||||
detail = parse_detail_html(r.text)
|
||||
polite_sleep()
|
||||
|
||||
# 2. Cover image
|
||||
thumb_url = list_item["thumb"]
|
||||
if thumb_url.startswith("//"):
|
||||
thumb_url = "https:" + thumb_url
|
||||
cover_rel = None
|
||||
if thumb_url:
|
||||
ext = Path(urllib.parse.urlparse(thumb_url).path).suffix or ".jpg"
|
||||
cover_rel = f"cover{ext}"
|
||||
try:
|
||||
download_to(client, thumb_url, proj_dir / cover_rel)
|
||||
except httpx.HTTPError as e:
|
||||
print(f" cover failed: {e}", file=sys.stderr)
|
||||
cover_rel = None
|
||||
polite_sleep()
|
||||
|
||||
# 3. Description markdown (combine meta + introduction)
|
||||
desc_md_parts = [f"# {list_item['name']}\n"]
|
||||
if detail.get("description_meta"):
|
||||
desc_md_parts.append(detail["description_meta"].strip())
|
||||
elif list_item.get("introduction"):
|
||||
desc_md_parts.append(list_item["introduction"].strip())
|
||||
desc_md_parts.append(
|
||||
f"\n---\n"
|
||||
f"- Source: {detail_url}\n"
|
||||
f"- Author: {list_item['owner'].get('nickname')} "
|
||||
f"({list_item['owner'].get('username')})\n"
|
||||
f"- License: {detail.get('license') or 'unknown'}\n"
|
||||
f"- Published: {list_item.get('oshwhub_publish_at')}\n"
|
||||
)
|
||||
(proj_dir / "description.md").write_text("\n".join(desc_md_parts), encoding="utf-8")
|
||||
|
||||
# 4. Files
|
||||
files_meta: list[dict] = []
|
||||
skipped: list[str] = []
|
||||
bytes_total = 0
|
||||
for a in detail.get("attachments", []):
|
||||
src = a.get("src") or ""
|
||||
if not src:
|
||||
continue
|
||||
file_url = IMG_CDN + src if src.startswith("/") else src
|
||||
name = a.get("name") or Path(src).name
|
||||
safe_name = re.sub(r'[/\\:*?"<>|]', "_", name)
|
||||
local_rel = f"files/{safe_name}"
|
||||
local_path = proj_dir / local_rel
|
||||
|
||||
entry: dict = {
|
||||
"name": name,
|
||||
"url": file_url,
|
||||
"original_id": a.get("uuid"),
|
||||
"ext": a.get("ext"),
|
||||
"mime": a.get("mime"),
|
||||
"size": a.get("size"),
|
||||
"md5": a.get("md5"),
|
||||
}
|
||||
if fetch_files:
|
||||
try:
|
||||
size, sha = download_to(client, file_url, local_path)
|
||||
entry["path"] = local_rel
|
||||
entry["sha256"] = sha
|
||||
if entry.get("size") and entry["size"] != size:
|
||||
entry["size_actual"] = size
|
||||
else:
|
||||
entry["size"] = size
|
||||
bytes_total += size
|
||||
except httpx.HTTPError as e:
|
||||
skipped.append(f"{name}: {e}")
|
||||
print(f" file skipped {name}: {e}", file=sys.stderr)
|
||||
polite_sleep()
|
||||
files_meta.append(entry)
|
||||
|
||||
# 5. URL manifest (for files we couldn't download or for future re-download)
|
||||
urls_manifest = {
|
||||
"detail_url": detail_url,
|
||||
"cover_url": thumb_url,
|
||||
"attachments": [
|
||||
{"name": f["name"], "url": f["url"], "original_id": f.get("original_id")}
|
||||
for f in files_meta
|
||||
],
|
||||
}
|
||||
(proj_dir / "_urls.json").write_text(
|
||||
json.dumps(urls_manifest, ensure_ascii=False, indent=2), encoding="utf-8"
|
||||
)
|
||||
|
||||
# 6. Unified metadata
|
||||
meta = {
|
||||
"source": "oshwhub",
|
||||
"source_url": detail_url,
|
||||
"project_id": uuid,
|
||||
"title": detail.get("title") or list_item["name"],
|
||||
"description_short": list_item.get("introduction") or "",
|
||||
"description_path": "description.md",
|
||||
"author": {
|
||||
"username": list_item["owner"]["username"],
|
||||
"display_name": list_item["owner"].get("nickname"),
|
||||
"user_id": list_item["owner"].get("uuid"),
|
||||
},
|
||||
"license": detail.get("license") or "unknown",
|
||||
"tags": list_item.get("tags") or [],
|
||||
"created_at": list_item.get("created_at"),
|
||||
"updated_at": list_item.get("updated_at"),
|
||||
"published_at": list_item.get("oshwhub_publish_at"),
|
||||
"crawled_at": datetime.now(timezone.utc).isoformat(),
|
||||
"metrics": {
|
||||
"likes": list_item["count"]["like"],
|
||||
"stars": list_item["count"]["star"],
|
||||
"forks": list_item["count"]["fork"],
|
||||
"views": list_item["count"]["views"],
|
||||
"watch": list_item["count"].get("watch", 0),
|
||||
"comments": list_item.get("comments_count", 0),
|
||||
},
|
||||
"cover": {"url": thumb_url, "path": cover_rel} if thumb_url else None,
|
||||
"files": files_meta,
|
||||
"raw_fields": {
|
||||
"path": list_item["path"],
|
||||
"grade": list_item.get("grade"),
|
||||
"origin": list_item.get("origin"),
|
||||
"public": list_item.get("public"),
|
||||
"publish": list_item.get("publish"),
|
||||
"skipped_files": skipped,
|
||||
},
|
||||
}
|
||||
(proj_dir / "metadata.json").write_text(
|
||||
json.dumps(meta, ensure_ascii=False, indent=2), encoding="utf-8"
|
||||
)
|
||||
|
||||
return CrawlResult(
|
||||
project_id=uuid,
|
||||
out_dir=proj_dir,
|
||||
files_count=len(files_meta),
|
||||
bytes_total=bytes_total,
|
||||
skipped_files=skipped,
|
||||
)
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# CLI
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
def iter_candidates(
|
||||
client: httpx.Client,
|
||||
pages: int,
|
||||
page_size: int,
|
||||
sort: str,
|
||||
) -> Iterator[dict]:
|
||||
for p in range(1, pages + 1):
|
||||
res = list_projects(client, page=p, page_size=page_size, sort=sort)
|
||||
for it in res["lists"]:
|
||||
yield it
|
||||
polite_sleep()
|
||||
|
||||
|
||||
def main(argv: list[str] | None = None) -> int:
|
||||
ap = argparse.ArgumentParser(description="oshwhub MVP crawler")
|
||||
ap.add_argument("--out", type=Path, default=Path("data/raw/oshwhub"))
|
||||
ap.add_argument("--top", type=int, default=10, help="number of projects to crawl")
|
||||
ap.add_argument("--min-likes", type=int, default=50)
|
||||
ap.add_argument("--min-grade", type=int, default=4)
|
||||
ap.add_argument("--pages", type=int, default=3, help="list API pages to scan")
|
||||
ap.add_argument("--page-size", type=int, default=30)
|
||||
ap.add_argument("--sort", default="hot")
|
||||
ap.add_argument("--uuids", type=str, default=None, help="comma-separated explicit UUID list")
|
||||
ap.add_argument("--no-files", action="store_true", help="do not download attachments")
|
||||
ap.add_argument("--limit", type=int, default=None, help="override --top, same effect")
|
||||
args = ap.parse_args(argv)
|
||||
|
||||
n_target = args.limit if args.limit is not None else args.top
|
||||
args.out.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
with make_client() as client:
|
||||
# Build list of items to crawl
|
||||
if args.uuids:
|
||||
wanted = set(args.uuids.split(","))
|
||||
items: list[dict] = []
|
||||
for it in iter_candidates(client, args.pages, args.page_size, args.sort):
|
||||
if it["uuid"] in wanted:
|
||||
items.append(it)
|
||||
if len(items) == len(wanted):
|
||||
break
|
||||
if len(items) < len(wanted):
|
||||
missing = wanted - {i["uuid"] for i in items}
|
||||
print(f"WARN: missing uuids (not in top pages): {missing}", file=sys.stderr)
|
||||
else:
|
||||
pool = list(iter_candidates(client, args.pages, args.page_size, args.sort))
|
||||
items = pick_top(
|
||||
pool, n=n_target, min_likes=args.min_likes, min_grade=args.min_grade
|
||||
)
|
||||
if len(items) < n_target:
|
||||
print(
|
||||
f"WARN: only {len(items)} items passed filters "
|
||||
f"(wanted {n_target})",
|
||||
file=sys.stderr,
|
||||
)
|
||||
|
||||
print(f"Crawling {len(items)} projects -> {args.out}")
|
||||
for i, it in enumerate(items, 1):
|
||||
print(f"[{i}/{len(items)}] {it['path']} ({it['name']})")
|
||||
try:
|
||||
r = crawl_one(client, it, args.out, fetch_files=not args.no_files)
|
||||
print(
|
||||
f" OK: {r.files_count} files, {r.bytes_total / 1024 / 1024:.1f} MB "
|
||||
f"(skipped: {len(r.skipped_files)})"
|
||||
)
|
||||
except Exception as e:
|
||||
print(f" FAIL: {e}", file=sys.stderr)
|
||||
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
71
data/raw/oshwhub/1a1e865568d04db59a5a140dd3f13581/_urls.json
Normal file
@@ -0,0 +1,71 @@
|
||||
{
|
||||
"detail_url": "https://oshwhub.com/qaxslk/dai-PD-QCyou-pian-jian-ce-yi-ji-",
|
||||
"cover_url": "https://image.lceda.cn/pullimage/Xl5EY8fMBTiXzXkTPdbza8bTdtaqEHzKjVZyI5rF.jpeg",
|
||||
"attachments": [
|
||||
{
|
||||
"name": "pd诱骗、检测&emarker读取演示.mp4",
|
||||
"url": "https://image.lceda.cn/attachments/2022/7/uTn5lxDhfdtLIUHzLAJQlfdEqtf59MNG1ct1xOwv.mp4",
|
||||
"original_id": "8227d8f1af9942ada85c34c0bae46520"
|
||||
},
|
||||
{
|
||||
"name": "电流监测及功能演示.mp4",
|
||||
"url": "https://image.lceda.cn/attachments/2022/7/Hrxaxo9kD6biCRjTHRPz9lihZPDspQxTyUOmj0ZP.mp4",
|
||||
"original_id": "5a38d4a5c90c4c929ee6afd90685c54a"
|
||||
},
|
||||
{
|
||||
"name": "qc诱骗演示.mp4",
|
||||
"url": "https://image.lceda.cn/attachments/2022/7/TPVFa8A5CZUYDDcjwqLqGh2CasxOhQuwJwCrTUoV.mp4",
|
||||
"original_id": "8ec5c15c8a884581b93ea7c92e0fd537"
|
||||
},
|
||||
{
|
||||
"name": "flash_download_tool_3.9.2_0.zip",
|
||||
"url": "https://image.lceda.cn/attachments/2022/8/zxKZnl7dstHkJzcCJsSCZH8Z3h4xv3r0dJ9pz4OR.zip",
|
||||
"original_id": "4ebd8bd9cdc04174a33eabde9ad178b6"
|
||||
},
|
||||
{
|
||||
"name": "iic测试.bin",
|
||||
"url": "https://image.lceda.cn/attachments/2022/8/vry47jDECDC6Oi580rjR3A8kPBqxUEqrua6CyTHJ.bin",
|
||||
"original_id": "62f50e21b4794a849019abf339cb0a87"
|
||||
},
|
||||
{
|
||||
"name": "BOM清单.csv",
|
||||
"url": "https://image.lceda.cn/attachments/2022/8/bgFVrW1VricnDvTBz3teVuMEZHn5p01utREdg1fB.txt",
|
||||
"original_id": "1bf37839d71245baa542e5edd2c87c51"
|
||||
},
|
||||
{
|
||||
"name": "IBOM焊接图.zip",
|
||||
"url": "https://image.lceda.cn/attachments/2022/9/AMssLlo7nElKEtewGB5MR9CCltg0o1ANYHcLHIlc.zip",
|
||||
"original_id": "9510dc61265243f691828f76ed24eb0c"
|
||||
},
|
||||
{
|
||||
"name": "新版本直通监测,主界面,PD监测抓包,Emarker读取演示.mp4",
|
||||
"url": "https://image.lceda.cn/attachments/2023/3/ml3J4ndhkWtv85i37YK1bXUyl8ss2Me00izGjSPv.mp4",
|
||||
"original_id": "aacf4846545f4b26a2ca90355e51ead3"
|
||||
},
|
||||
{
|
||||
"name": "新版本PD,PPS诱骗,PD抓包,Emarker读取演示.mp4",
|
||||
"url": "https://image.lceda.cn/attachments/2023/3/UoNgPZVjkgceMl8H1AlPv0HGYMX0cGpSjz71rCzO.mp4",
|
||||
"original_id": "323305b48e6a4fd99de89d4892f2b8ca"
|
||||
},
|
||||
{
|
||||
"name": "新版本QC,QC3诱骗演示.mp4",
|
||||
"url": "https://image.lceda.cn/attachments/2023/3/GVI4oTGtFn7v7M97a0wCk713lRsC0FI9gtSBtemK.mp4",
|
||||
"original_id": "c4a07773431643e28aa45a3d523e7869"
|
||||
},
|
||||
{
|
||||
"name": "新版本设置项等其它功能演示.mp4",
|
||||
"url": "https://image.lceda.cn/attachments/2023/3/okBYwyFpliRTbS0WjOq3nDOd8VArZNrienxnYOd5.mp4",
|
||||
"original_id": "cfe67e3dd4bb44bea05a6b07fa396618"
|
||||
},
|
||||
{
|
||||
"name": "TTL1.2.3 免注册.bin",
|
||||
"url": "https://image.lceda.cn/oshwhub/project/attachments/3c8beccc8bb645d7900f78ff8b5bd511.bin",
|
||||
"original_id": "44872f72038747a8b42ad88b812a3443"
|
||||
},
|
||||
{
|
||||
"name": "OTA1.2.3 免注册.bin",
|
||||
"url": "https://image.lceda.cn/oshwhub/project/attachments/72261283c1a44d9d9c48e1a3a7c332b4.bin",
|
||||
"original_id": "2172e76f1d4d42ccb4d89d2a27d7be5f"
|
||||
}
|
||||
]
|
||||
}
|
||||
BIN
data/raw/oshwhub/1a1e865568d04db59a5a140dd3f13581/cover.jpeg
Normal file
|
After Width: | Height: | Size: 141 KiB |
@@ -0,0 +1,9 @@
|
||||
# 支持PD3.1/米PPS与Emarker读取的USB电压电流表
|
||||
|
||||
基于ESP32-PICO-D4的USB功率计,实现了PD3.1/PPS/QC的监测与诱骗,支持米私有诱骗、Emarker读取以及诸多其他功能,具体功能可看项目功能介绍。
|
||||
|
||||
---
|
||||
- Source: https://oshwhub.com/qaxslk/dai-PD-QCyou-pian-jian-ce-yi-ji-
|
||||
- Author: qaxslk (qaxslk)
|
||||
- License: CC BY-NC-SA 4.0
|
||||
- Published: 2024-06-07T01:11:10.000Z
|
||||
BIN
data/raw/oshwhub/1a1e865568d04db59a5a140dd3f13581/files/BOM清单.csv
LFS
Normal file
|
BIN
data/raw/oshwhub/1a1e865568d04db59a5a140dd3f13581/files/IBOM焊接图.zip
LFS
Normal file
BIN
data/raw/oshwhub/1a1e865568d04db59a5a140dd3f13581/files/OTA1.2.3 免注册.bin
LFS
Normal file
BIN
data/raw/oshwhub/1a1e865568d04db59a5a140dd3f13581/files/TTL1.2.3 免注册.bin
LFS
Normal file
BIN
data/raw/oshwhub/1a1e865568d04db59a5a140dd3f13581/files/iic测试.bin
LFS
Normal file
BIN
data/raw/oshwhub/1a1e865568d04db59a5a140dd3f13581/files/pd诱骗、检测&emarker读取演示.mp4
LFS
Normal file
BIN
data/raw/oshwhub/1a1e865568d04db59a5a140dd3f13581/files/qc诱骗演示.mp4
LFS
Normal file
BIN
data/raw/oshwhub/1a1e865568d04db59a5a140dd3f13581/files/新版本QC,QC3诱骗演示.mp4
LFS
Normal file
BIN
data/raw/oshwhub/1a1e865568d04db59a5a140dd3f13581/files/新版本设置项等其它功能演示.mp4
LFS
Normal file
BIN
data/raw/oshwhub/1a1e865568d04db59a5a140dd3f13581/files/电流监测及功能演示.mp4
LFS
Normal file
184
data/raw/oshwhub/1a1e865568d04db59a5a140dd3f13581/metadata.json
Normal file
@@ -0,0 +1,184 @@
|
||||
{
|
||||
"source": "oshwhub",
|
||||
"source_url": "https://oshwhub.com/qaxslk/dai-PD-QCyou-pian-jian-ce-yi-ji-",
|
||||
"project_id": "1a1e865568d04db59a5a140dd3f13581",
|
||||
"title": "支持PD3.1/米PPS与Emarker读取的USB电压电流表",
|
||||
"description_short": "基于ESP32-PICO-D4的USB功率计,实现了PD3.1/PPS/QC的监测与诱骗,支持米私有诱骗、Emarker读取以及诸多其他功能,具体功能可看项目功能介绍。",
|
||||
"description_path": "description.md",
|
||||
"author": {
|
||||
"username": "qaxslk",
|
||||
"display_name": "qaxslk",
|
||||
"user_id": "5ff188711e4342099df5e500bc5a464c"
|
||||
},
|
||||
"license": "CC BY-NC-SA 4.0",
|
||||
"tags": [],
|
||||
"created_at": "2022-07-13T15:55:26.000Z",
|
||||
"updated_at": "2025-12-24T02:04:01.000Z",
|
||||
"published_at": "2024-06-07T01:11:10.000Z",
|
||||
"crawled_at": "2026-04-23T11:30:39.860358+00:00",
|
||||
"metrics": {
|
||||
"likes": 1215,
|
||||
"stars": 2695,
|
||||
"forks": 1146,
|
||||
"views": 306681,
|
||||
"watch": 0,
|
||||
"comments": 448
|
||||
},
|
||||
"cover": {
|
||||
"url": "https://image.lceda.cn/pullimage/Xl5EY8fMBTiXzXkTPdbza8bTdtaqEHzKjVZyI5rF.jpeg",
|
||||
"path": "cover.jpeg"
|
||||
},
|
||||
"files": [
|
||||
{
|
||||
"name": "pd诱骗、检测&emarker读取演示.mp4",
|
||||
"url": "https://image.lceda.cn/attachments/2022/7/uTn5lxDhfdtLIUHzLAJQlfdEqtf59MNG1ct1xOwv.mp4",
|
||||
"original_id": "8227d8f1af9942ada85c34c0bae46520",
|
||||
"ext": "mp4",
|
||||
"mime": "video/mp4",
|
||||
"size": 42014963,
|
||||
"md5": "27b4c853705de1e2c8f3dbacbe932c06",
|
||||
"path": "files/pd诱骗、检测&emarker读取演示.mp4",
|
||||
"sha256": "7ddb738a0acc396f9f7bc7d7a37d62f4874f113442fdccffe98b7d11f8d4d16e"
|
||||
},
|
||||
{
|
||||
"name": "电流监测及功能演示.mp4",
|
||||
"url": "https://image.lceda.cn/attachments/2022/7/Hrxaxo9kD6biCRjTHRPz9lihZPDspQxTyUOmj0ZP.mp4",
|
||||
"original_id": "5a38d4a5c90c4c929ee6afd90685c54a",
|
||||
"ext": "mp4",
|
||||
"mime": "video/mp4",
|
||||
"size": 30663097,
|
||||
"md5": "ce92545afce40853be91a4b35fd31a74",
|
||||
"path": "files/电流监测及功能演示.mp4",
|
||||
"sha256": "62ea7eb1b512dc89326f222148903247389e6d1e1d1d06a86d01411b941fc78b"
|
||||
},
|
||||
{
|
||||
"name": "qc诱骗演示.mp4",
|
||||
"url": "https://image.lceda.cn/attachments/2022/7/TPVFa8A5CZUYDDcjwqLqGh2CasxOhQuwJwCrTUoV.mp4",
|
||||
"original_id": "8ec5c15c8a884581b93ea7c92e0fd537",
|
||||
"ext": "mp4",
|
||||
"mime": "video/mp4",
|
||||
"size": 43307009,
|
||||
"md5": "f2645fc0c007df8a76a687a34fe1e9c5",
|
||||
"path": "files/qc诱骗演示.mp4",
|
||||
"sha256": "6752cefab7403f0964fce635e87d3efc0915f0dbc95799c8cd8235ca3ad8152d"
|
||||
},
|
||||
{
|
||||
"name": "flash_download_tool_3.9.2_0.zip",
|
||||
"url": "https://image.lceda.cn/attachments/2022/8/zxKZnl7dstHkJzcCJsSCZH8Z3h4xv3r0dJ9pz4OR.zip",
|
||||
"original_id": "4ebd8bd9cdc04174a33eabde9ad178b6",
|
||||
"ext": "zip",
|
||||
"mime": "application/x-zip-compressed",
|
||||
"size": 32734744,
|
||||
"md5": "4f493dae92337d5b2a91735e9243a551",
|
||||
"path": "files/flash_download_tool_3.9.2_0.zip",
|
||||
"sha256": "b3cfc172dad907b1aa24a5424b3d682ff26d5786fb8bc6bbd58c0138ce012c32"
|
||||
},
|
||||
{
|
||||
"name": "iic测试.bin",
|
||||
"url": "https://image.lceda.cn/attachments/2022/8/vry47jDECDC6Oi580rjR3A8kPBqxUEqrua6CyTHJ.bin",
|
||||
"original_id": "62f50e21b4794a849019abf339cb0a87",
|
||||
"ext": "bin",
|
||||
"mime": "application/octet-stream",
|
||||
"size": 285584,
|
||||
"md5": "e62c5dcadbbb36a066a4f98fea76c2d1",
|
||||
"path": "files/iic测试.bin",
|
||||
"sha256": "7419ef6b09267c66925ccb5caf599115c9d147c12336080423bb90fc0d12ac2b"
|
||||
},
|
||||
{
|
||||
"name": "BOM清单.csv",
|
||||
"url": "https://image.lceda.cn/attachments/2022/8/bgFVrW1VricnDvTBz3teVuMEZHn5p01utREdg1fB.txt",
|
||||
"original_id": "1bf37839d71245baa542e5edd2c87c51",
|
||||
"ext": "txt",
|
||||
"mime": "application/octet-stream",
|
||||
"size": 12530,
|
||||
"md5": "025fc254292a1a2985695e9634a3bdbc",
|
||||
"path": "files/BOM清单.csv",
|
||||
"sha256": "0b8a51addcda633de81d5d18e5b4e708304a45b8e2814c64ee17d7ce6339fd11"
|
||||
},
|
||||
{
|
||||
"name": "IBOM焊接图.zip",
|
||||
"url": "https://image.lceda.cn/attachments/2022/9/AMssLlo7nElKEtewGB5MR9CCltg0o1ANYHcLHIlc.zip",
|
||||
"original_id": "9510dc61265243f691828f76ed24eb0c",
|
||||
"ext": "zip",
|
||||
"mime": "application/x-zip-compressed",
|
||||
"size": 107801,
|
||||
"md5": "dd51ef36f5cfb614d81b94742e0bf527",
|
||||
"path": "files/IBOM焊接图.zip",
|
||||
"sha256": "eadc67396a41531c691454dcaa1597c99988975d498a3a19bdf93cb2354bd1d3"
|
||||
},
|
||||
{
|
||||
"name": "新版本直通监测,主界面,PD监测抓包,Emarker读取演示.mp4",
|
||||
"url": "https://image.lceda.cn/attachments/2023/3/ml3J4ndhkWtv85i37YK1bXUyl8ss2Me00izGjSPv.mp4",
|
||||
"original_id": "aacf4846545f4b26a2ca90355e51ead3",
|
||||
"ext": "mp4",
|
||||
"mime": "video/mp4",
|
||||
"size": 21536979,
|
||||
"md5": "c68d8d5d2e8794c0a0242773c0d6784c",
|
||||
"path": "files/新版本直通监测,主界面,PD监测抓包,Emarker读取演示.mp4",
|
||||
"sha256": "abe0194ae357a4b381648abe774e48a02c94d12305f1d6dee2e7dfe95f8a5fae"
|
||||
},
|
||||
{
|
||||
"name": "新版本PD,PPS诱骗,PD抓包,Emarker读取演示.mp4",
|
||||
"url": "https://image.lceda.cn/attachments/2023/3/UoNgPZVjkgceMl8H1AlPv0HGYMX0cGpSjz71rCzO.mp4",
|
||||
"original_id": "323305b48e6a4fd99de89d4892f2b8ca",
|
||||
"ext": "mp4",
|
||||
"mime": "video/mp4",
|
||||
"size": 16394310,
|
||||
"md5": "93991863eeb592c0c661e5871d247e14",
|
||||
"path": "files/新版本PD,PPS诱骗,PD抓包,Emarker读取演示.mp4",
|
||||
"sha256": "9b764917ab6b04766fdcb8ce41f96c065ad1bbe4e34cb2ece4a94044aa8865a1"
|
||||
},
|
||||
{
|
||||
"name": "新版本QC,QC3诱骗演示.mp4",
|
||||
"url": "https://image.lceda.cn/attachments/2023/3/GVI4oTGtFn7v7M97a0wCk713lRsC0FI9gtSBtemK.mp4",
|
||||
"original_id": "c4a07773431643e28aa45a3d523e7869",
|
||||
"ext": "mp4",
|
||||
"mime": "video/mp4",
|
||||
"size": 9525550,
|
||||
"md5": "d79bd2e739cfd4569f7550cb2cb166d0",
|
||||
"path": "files/新版本QC,QC3诱骗演示.mp4",
|
||||
"sha256": "a9d8108ab0701b02a36e5384a9b046a6c7dfb8b0d0aaceb0c8766fda2fb5366d"
|
||||
},
|
||||
{
|
||||
"name": "新版本设置项等其它功能演示.mp4",
|
||||
"url": "https://image.lceda.cn/attachments/2023/3/okBYwyFpliRTbS0WjOq3nDOd8VArZNrienxnYOd5.mp4",
|
||||
"original_id": "cfe67e3dd4bb44bea05a6b07fa396618",
|
||||
"ext": "mp4",
|
||||
"mime": "video/mp4",
|
||||
"size": 14885852,
|
||||
"md5": "aa0ad712586d956f96061cac9af9579a",
|
||||
"path": "files/新版本设置项等其它功能演示.mp4",
|
||||
"sha256": "71249c098d89e07e224556818875c9c821f5356137c578576b52e1d6d418d55d"
|
||||
},
|
||||
{
|
||||
"name": "TTL1.2.3 免注册.bin",
|
||||
"url": "https://image.lceda.cn/oshwhub/project/attachments/3c8beccc8bb645d7900f78ff8b5bd511.bin",
|
||||
"original_id": "44872f72038747a8b42ad88b812a3443",
|
||||
"ext": "bin",
|
||||
"mime": "application/octet-stream",
|
||||
"size": 1520480,
|
||||
"md5": "dbd936ed6a9b9120a610a7f9ca67efe8",
|
||||
"path": "files/TTL1.2.3 免注册.bin",
|
||||
"sha256": "1c7a4e934b296944b462e3a511795b5e17c58319a6ee2d3f630ff8a3c5af9c44"
|
||||
},
|
||||
{
|
||||
"name": "OTA1.2.3 免注册.bin",
|
||||
"url": "https://image.lceda.cn/oshwhub/project/attachments/72261283c1a44d9d9c48e1a3a7c332b4.bin",
|
||||
"original_id": "2172e76f1d4d42ccb4d89d2a27d7be5f",
|
||||
"ext": "bin",
|
||||
"mime": "application/octet-stream",
|
||||
"size": 1454944,
|
||||
"md5": "25b84659cd5224d89232935b3d1a4d47",
|
||||
"path": "files/OTA1.2.3 免注册.bin",
|
||||
"sha256": "b7d6bb3ae33ec3809c69ef26c3af19a0c57c775f2ce36af4a18c6d5136b24693"
|
||||
}
|
||||
],
|
||||
"raw_fields": {
|
||||
"path": "qaxslk/dai-PD-QCyou-pian-jian-ce-yi-ji-",
|
||||
"grade": 4,
|
||||
"origin": "std",
|
||||
"public": true,
|
||||
"publish": true,
|
||||
"skipped_files": []
|
||||
}
|
||||
}
|
||||
16
data/raw/oshwhub/1b09581d66d34438a1e6513e457e0532/_urls.json
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"detail_url": "https://oshwhub.com/wesd/h7b0-re-cheng-xiang",
|
||||
"cover_url": "https://image.lceda.cn/pullimage/t7auihPq2yo15qct0rCwUXUdBubfIkMhOd1UqaJ1.jpeg",
|
||||
"attachments": [
|
||||
{
|
||||
"name": "1.zip",
|
||||
"url": "https://image.lceda.cn/attachments/2022/10/aWLQlbeyYn7SOVykc2x9OWuHpCi5TpXJZfzuQVXS.zip",
|
||||
"original_id": "ad6720dbc62a4152aa6267e24621a700"
|
||||
},
|
||||
{
|
||||
"name": "H7B0_IRCAM.rar",
|
||||
"url": "https://image.lceda.cn/attachments/2023/11/40UrslRfPUk0LUDL5UzA1d8QLzSKrn8lZS41hpxk.rar",
|
||||
"original_id": "516214a3934d43e1a8395923f923a777"
|
||||
}
|
||||
]
|
||||
}
|
||||
BIN
data/raw/oshwhub/1b09581d66d34438a1e6513e457e0532/cover.jpeg
Normal file
|
After Width: | Height: | Size: 966 KiB |
@@ -0,0 +1,9 @@
|
||||
# 手持红外热成像
|
||||
|
||||
MLX90640+STM32H7B0的红外热成像,外加一颗ov7670摄像头做辅助显示,最高可做到32HZ的刷新率。
|
||||
|
||||
---
|
||||
- Source: https://oshwhub.com/wesd/h7b0-re-cheng-xiang
|
||||
- Author: wesd (wesd)
|
||||
- License: CERN Open Hardware License
|
||||
- Published: 2023-11-08T01:25:18.000Z
|
||||
BIN
data/raw/oshwhub/1b09581d66d34438a1e6513e457e0532/files/1.zip
LFS
Normal file
BIN
data/raw/oshwhub/1b09581d66d34438a1e6513e457e0532/files/H7B0_IRCAM.rar
LFS
Normal file
@@ -0,0 +1,63 @@
|
||||
{
|
||||
"source": "oshwhub",
|
||||
"source_url": "https://oshwhub.com/wesd/h7b0-re-cheng-xiang",
|
||||
"project_id": "1b09581d66d34438a1e6513e457e0532",
|
||||
"title": "手持红外热成像",
|
||||
"description_short": "MLX90640+STM32H7B0的红外热成像,外加一颗ov7670摄像头做辅助显示,最高可做到32HZ的刷新率。",
|
||||
"description_path": "description.md",
|
||||
"author": {
|
||||
"username": "wesd",
|
||||
"display_name": "wesd",
|
||||
"user_id": "b3f7b33189a14088aa30416e034eca7f"
|
||||
},
|
||||
"license": "CERN Open Hardware License",
|
||||
"tags": [],
|
||||
"created_at": "2022-09-06T13:54:54.000Z",
|
||||
"updated_at": "2025-07-16T04:50:13.000Z",
|
||||
"published_at": "2023-11-08T01:25:18.000Z",
|
||||
"crawled_at": "2026-04-23T11:31:34.277837+00:00",
|
||||
"metrics": {
|
||||
"likes": 247,
|
||||
"stars": 646,
|
||||
"forks": 175,
|
||||
"views": 73081,
|
||||
"watch": 0,
|
||||
"comments": 266
|
||||
},
|
||||
"cover": {
|
||||
"url": "https://image.lceda.cn/pullimage/t7auihPq2yo15qct0rCwUXUdBubfIkMhOd1UqaJ1.jpeg",
|
||||
"path": "cover.jpeg"
|
||||
},
|
||||
"files": [
|
||||
{
|
||||
"name": "1.zip",
|
||||
"url": "https://image.lceda.cn/attachments/2022/10/aWLQlbeyYn7SOVykc2x9OWuHpCi5TpXJZfzuQVXS.zip",
|
||||
"original_id": "ad6720dbc62a4152aa6267e24621a700",
|
||||
"ext": "zip",
|
||||
"mime": "application/x-zip-compressed",
|
||||
"size": 524804,
|
||||
"md5": "7b5d94829be2e562228791a3ce9041ec",
|
||||
"path": "files/1.zip",
|
||||
"sha256": "9210315e8660a91932567dafac2959fc31f20bb05e8992363bad44d422144f1d"
|
||||
},
|
||||
{
|
||||
"name": "H7B0_IRCAM.rar",
|
||||
"url": "https://image.lceda.cn/attachments/2023/11/40UrslRfPUk0LUDL5UzA1d8QLzSKrn8lZS41hpxk.rar",
|
||||
"original_id": "516214a3934d43e1a8395923f923a777",
|
||||
"ext": "rar",
|
||||
"mime": "application/octet-stream",
|
||||
"size": 2968329,
|
||||
"md5": "ba10570948bc2e24abb66bce0b7231e0",
|
||||
"path": "files/H7B0_IRCAM.rar",
|
||||
"sha256": "c6de1749d1fc88b637d06dced7e6da14610c5f44c3879bdbbbb5c66f73b81652"
|
||||
}
|
||||
],
|
||||
"raw_fields": {
|
||||
"path": "wesd/h7b0-re-cheng-xiang",
|
||||
"grade": 4,
|
||||
"origin": "std",
|
||||
"public": true,
|
||||
"publish": true,
|
||||
"skipped_files": []
|
||||
}
|
||||
}
|
||||
41
data/raw/oshwhub/298873b7fdbe44f8ba0e7351e023bc2c/_urls.json
Normal file
@@ -0,0 +1,41 @@
|
||||
{
|
||||
"detail_url": "https://oshwhub.com/CYIIOT/ST_LINK-V2_1",
|
||||
"cover_url": "https://image.lceda.cn/avatars/2020/7/QGOICt1FmLQGlyFeTCShZUHzaN0thIW2Xhv0nmSs.jpeg",
|
||||
"attachments": [
|
||||
{
|
||||
"name": "ST-Link V2.1官方图纸.pdf",
|
||||
"url": "https://image.lceda.cn/attachments/2020/7/mRn5hQZRhmx5r4usGxFmy8BXsCIHw5QoAT5HaLGC.pdf",
|
||||
"original_id": "83ade303f9824d67b189378f9068648e"
|
||||
},
|
||||
{
|
||||
"name": "STLinkV2.J16.S4_固件.zip",
|
||||
"url": "https://image.lceda.cn/attachments/2020/7/TSTPA8NInE8TfdNLjAVjBkcnXvFEhQ8RoA5SUzn4.zip",
|
||||
"original_id": "aff1059cee92438d8d50f5c9937e31e0"
|
||||
},
|
||||
{
|
||||
"name": "STLinkV2.J28.M18_固件.zip",
|
||||
"url": "https://image.lceda.cn/attachments/2020/7/qnbaX4ArFPq1kC6rNr5PCqaKPr6XdvfX27ZRGpFn.zip",
|
||||
"original_id": "faa5cc219eb145a5a43c66dc4ad55cbc"
|
||||
},
|
||||
{
|
||||
"name": "【发行公告】RN0093-firmware-upgrade-for-stlink-stlinkv2-stlinkv21-and-stlinkv3-boards-stmicroelectronics.pdf",
|
||||
"url": "https://image.lceda.cn/attachments/2020/7/j1hsq6ByuWAiMHckonVoLGNqa3z47mp7D5w5n7e7.pdf",
|
||||
"original_id": "80ede3877efd4cdabcc6fae174046452"
|
||||
},
|
||||
{
|
||||
"name": "【技术说明】TN1235 Overview of ST-LINK derivatives.pdf",
|
||||
"url": "https://image.lceda.cn/attachments/2020/7/dVO0hjpKz38q7ZtvFtEviPmVF60BIJDfScdnK9sB.pdf",
|
||||
"original_id": "ce58b59a45464ed58475c1c7e191570a"
|
||||
},
|
||||
{
|
||||
"name": "ST-LINK V2-1 固件烧录.mp4",
|
||||
"url": "https://image.lceda.cn/attachments/2020/7/5ZfKD020NJcGs5mQ7H9MGh1WwSvy4RHY7TeTObfv.mp4",
|
||||
"original_id": "1a443f96ecd849648278b2b6d2e7f670"
|
||||
},
|
||||
{
|
||||
"name": "en.stsw-link007_V2-37-26.zip",
|
||||
"url": "https://image.lceda.cn/attachments/2021/6/ZZO5tNxsae0LKhQ2aQ2VkZl0l0B94PSaFeVsmdqQ.zip",
|
||||
"original_id": "7b431bd72f1c4f3d87d8dba98c171175"
|
||||
}
|
||||
]
|
||||
}
|
||||
BIN
data/raw/oshwhub/298873b7fdbe44f8ba0e7351e023bc2c/cover.jpeg
Normal file
|
After Width: | Height: | Size: 382 KiB |
@@ -0,0 +1,9 @@
|
||||
# 自制ST-LINK V2-1(开源版本)
|
||||
|
||||
最近迷上了攻城狮工具的制作,因手头有个潘多拉开发板,板载一个STLINK/V2.1,这玩意支持STM32调试,还带了一个虚拟串口和虚拟U盘下载,所以用立创EDA打造了一个小巧的STLINK/V2.1
|
||||
|
||||
---
|
||||
- Source: https://oshwhub.com/CYIIOT/ST_LINK-V2_1
|
||||
- Author: 攻城狮神木 (CYIIOT)
|
||||
- License: GPL 3.0
|
||||
- Published: 2025-12-01T02:55:40.000Z
|
||||
BIN
data/raw/oshwhub/298873b7fdbe44f8ba0e7351e023bc2c/files/ST-LINK V2-1 固件烧录.mp4
LFS
Normal file
BIN
data/raw/oshwhub/298873b7fdbe44f8ba0e7351e023bc2c/files/ST-Link V2.1官方图纸.pdf
LFS
Normal file
BIN
data/raw/oshwhub/298873b7fdbe44f8ba0e7351e023bc2c/files/STLinkV2.J16.S4_固件.zip
LFS
Normal file
BIN
data/raw/oshwhub/298873b7fdbe44f8ba0e7351e023bc2c/files/STLinkV2.J28.M18_固件.zip
LFS
Normal file
118
data/raw/oshwhub/298873b7fdbe44f8ba0e7351e023bc2c/metadata.json
Normal file
@@ -0,0 +1,118 @@
|
||||
{
|
||||
"source": "oshwhub",
|
||||
"source_url": "https://oshwhub.com/CYIIOT/ST_LINK-V2_1",
|
||||
"project_id": "298873b7fdbe44f8ba0e7351e023bc2c",
|
||||
"title": "自制ST-LINK V2-1(开源版本)",
|
||||
"description_short": "最近迷上了攻城狮工具的制作,因手头有个潘多拉开发板,板载一个STLINK/V2.1,这玩意支持STM32调试,还带了一个虚拟串口和虚拟U盘下载,所以用立创EDA打造了一个小巧的STLINK/V2.1",
|
||||
"description_path": "description.md",
|
||||
"author": {
|
||||
"username": "CYIIOT",
|
||||
"display_name": "攻城狮神木",
|
||||
"user_id": "367b6ee2c2114a459898e14b1268a641"
|
||||
},
|
||||
"license": "GPL 3.0",
|
||||
"tags": [],
|
||||
"created_at": "2020-07-21T08:18:03.000Z",
|
||||
"updated_at": "2026-04-15T07:42:15.000Z",
|
||||
"published_at": "2025-12-01T02:55:40.000Z",
|
||||
"crawled_at": "2026-04-23T11:25:21.265012+00:00",
|
||||
"metrics": {
|
||||
"likes": 863,
|
||||
"stars": 1947,
|
||||
"forks": 996,
|
||||
"views": 239671,
|
||||
"watch": 0,
|
||||
"comments": 369
|
||||
},
|
||||
"cover": {
|
||||
"url": "https://image.lceda.cn/avatars/2020/7/QGOICt1FmLQGlyFeTCShZUHzaN0thIW2Xhv0nmSs.jpeg",
|
||||
"path": "cover.jpeg"
|
||||
},
|
||||
"files": [
|
||||
{
|
||||
"name": "ST-Link V2.1官方图纸.pdf",
|
||||
"url": "https://image.lceda.cn/attachments/2020/7/mRn5hQZRhmx5r4usGxFmy8BXsCIHw5QoAT5HaLGC.pdf",
|
||||
"original_id": "83ade303f9824d67b189378f9068648e",
|
||||
"ext": "pdf",
|
||||
"mime": "application/pdf",
|
||||
"size": 183323,
|
||||
"md5": "bdb976690426a0e3216ad3aacd9878cc",
|
||||
"path": "files/ST-Link V2.1官方图纸.pdf",
|
||||
"sha256": "a73fdfe732b60d4c7482a09fc4464460bac7b4afcfdca014a9d33f8099b126cd"
|
||||
},
|
||||
{
|
||||
"name": "STLinkV2.J16.S4_固件.zip",
|
||||
"url": "https://image.lceda.cn/attachments/2020/7/TSTPA8NInE8TfdNLjAVjBkcnXvFEhQ8RoA5SUzn4.zip",
|
||||
"original_id": "aff1059cee92438d8d50f5c9937e31e0",
|
||||
"ext": "zip",
|
||||
"mime": "application/x-zip-compressed",
|
||||
"size": 31004,
|
||||
"md5": "d84a96b7110a61e77e479eb8501ec270",
|
||||
"path": "files/STLinkV2.J16.S4_固件.zip",
|
||||
"sha256": "c20db3e7512df2afc60dbad3bffeb8a743ea1ff7d160b877874c66d7fcb97bfb"
|
||||
},
|
||||
{
|
||||
"name": "STLinkV2.J28.M18_固件.zip",
|
||||
"url": "https://image.lceda.cn/attachments/2020/7/qnbaX4ArFPq1kC6rNr5PCqaKPr6XdvfX27ZRGpFn.zip",
|
||||
"original_id": "faa5cc219eb145a5a43c66dc4ad55cbc",
|
||||
"ext": "zip",
|
||||
"mime": "application/x-zip-compressed",
|
||||
"size": 42906,
|
||||
"md5": "5904682016ab096c16b06f5cf232dbc5",
|
||||
"path": "files/STLinkV2.J28.M18_固件.zip",
|
||||
"sha256": "b58d6ee8ee51098868a1aae30fcf5ea104f2be6005d10a14858ee2f546eae607"
|
||||
},
|
||||
{
|
||||
"name": "【发行公告】RN0093-firmware-upgrade-for-stlink-stlinkv2-stlinkv21-and-stlinkv3-boards-stmicroelectronics.pdf",
|
||||
"url": "https://image.lceda.cn/attachments/2020/7/j1hsq6ByuWAiMHckonVoLGNqa3z47mp7D5w5n7e7.pdf",
|
||||
"original_id": "80ede3877efd4cdabcc6fae174046452",
|
||||
"ext": "pdf",
|
||||
"mime": "application/pdf",
|
||||
"size": 226423,
|
||||
"md5": "cde4dedc62b84959b8084a04881443da",
|
||||
"path": "files/【发行公告】RN0093-firmware-upgrade-for-stlink-stlinkv2-stlinkv21-and-stlinkv3-boards-stmicroelectronics.pdf",
|
||||
"sha256": "9536752ee47a63f86a17b68a99abe3e1e9238370d63dfe602e44b386a2c49342"
|
||||
},
|
||||
{
|
||||
"name": "【技术说明】TN1235 Overview of ST-LINK derivatives.pdf",
|
||||
"url": "https://image.lceda.cn/attachments/2020/7/dVO0hjpKz38q7ZtvFtEviPmVF60BIJDfScdnK9sB.pdf",
|
||||
"original_id": "ce58b59a45464ed58475c1c7e191570a",
|
||||
"ext": "pdf",
|
||||
"mime": "application/pdf",
|
||||
"size": 876773,
|
||||
"md5": "6c737c2d8ed697011f9de862f5df3857",
|
||||
"path": "files/【技术说明】TN1235 Overview of ST-LINK derivatives.pdf",
|
||||
"sha256": "03db2b7a4a4161160f697c84f49ad61401a09dca77b8e9b7ae8bfca5d1995cf7"
|
||||
},
|
||||
{
|
||||
"name": "ST-LINK V2-1 固件烧录.mp4",
|
||||
"url": "https://image.lceda.cn/attachments/2020/7/5ZfKD020NJcGs5mQ7H9MGh1WwSvy4RHY7TeTObfv.mp4",
|
||||
"original_id": "1a443f96ecd849648278b2b6d2e7f670",
|
||||
"ext": "mp4",
|
||||
"mime": "video/mp4",
|
||||
"size": 18953976,
|
||||
"md5": "f8547b0850763aed60dde607578c6005",
|
||||
"path": "files/ST-LINK V2-1 固件烧录.mp4",
|
||||
"sha256": "31e81fadb0f3c67064dd87e8a269b76abcb2660a574c1f0c384ff1509b95fe73"
|
||||
},
|
||||
{
|
||||
"name": "en.stsw-link007_V2-37-26.zip",
|
||||
"url": "https://image.lceda.cn/attachments/2021/6/ZZO5tNxsae0LKhQ2aQ2VkZl0l0B94PSaFeVsmdqQ.zip",
|
||||
"original_id": "7b431bd72f1c4f3d87d8dba98c171175",
|
||||
"ext": "zip",
|
||||
"mime": "application/x-zip-compressed",
|
||||
"size": 1597918,
|
||||
"md5": "2fb1abb4c30ef4537743cb837af402d1",
|
||||
"path": "files/en.stsw-link007_V2-37-26.zip",
|
||||
"sha256": "ef6a58b366c6004553ce2bf45bed934f17f88e6b87da1df30d56956c65aa2c3b"
|
||||
}
|
||||
],
|
||||
"raw_fields": {
|
||||
"path": "CYIIOT/ST_LINK-V2_1",
|
||||
"grade": 4,
|
||||
"origin": "std",
|
||||
"public": true,
|
||||
"publish": true,
|
||||
"skipped_files": []
|
||||
}
|
||||
}
|
||||
41
data/raw/oshwhub/3e2f893d74664e01b755ccf2582792de/_urls.json
Normal file
@@ -0,0 +1,41 @@
|
||||
{
|
||||
"detail_url": "https://oshwhub.com/mojinyinhu/t12858-tong-yong-han-tai",
|
||||
"cover_url": "https://image.lceda.cn/pullimage/X7qQwpTwtIeTBm2FkJfDZCo0K0tv4ZyyQCrgYJGQ.jpeg",
|
||||
"attachments": [
|
||||
{
|
||||
"name": "F1-T12-858D-master4.07.zip",
|
||||
"url": "https://image.lceda.cn/attachments/2022/4/jxFVtEW6XG1wB6AjK8ykfSwqUVDV9OpKiaHqqb51.zip",
|
||||
"original_id": "456c6c6a13b64483be969f93637e7255"
|
||||
},
|
||||
{
|
||||
"name": "固件在解压缩后在BINARY文件夹,选取适合自己屏幕固件烧录.txt",
|
||||
"url": "https://image.lceda.cn/attachments/2022/4/GREMfysm2sIMw6hOBfAwTvzjMdCPXCTAz5oq1jpd.txt",
|
||||
"original_id": "f25fdd81e5134335a2f56b39da71c501"
|
||||
},
|
||||
{
|
||||
"name": "校准.txt",
|
||||
"url": "https://image.lceda.cn/attachments/2022/4/TBGObPjIQG0Z7h9bBrfZdZRKqdfgC9hAiCtaU6G7.txt",
|
||||
"original_id": "4d9c148dafc64ad6b27dbefed3e8ec2e"
|
||||
},
|
||||
{
|
||||
"name": "F1_T12+858D编译视频教程.rar",
|
||||
"url": "https://image.lceda.cn/attachments/2022/4/oIV5aPj2dyXrwODr0PpF9VH16w98TuJmggWB3lJ4.rar",
|
||||
"original_id": "70d67505c93242a4a3bc7fb91fa7c80d"
|
||||
},
|
||||
{
|
||||
"name": "T12+858焊台BOM表.xlsx",
|
||||
"url": "https://image.lceda.cn/attachments/2022/6/y6f0JXE1jHDbcoMVx9prMqU1VQODyNyCggeZFRY3.xlsx",
|
||||
"original_id": "be2b2cce0ee24fe8838805cacd53ccd0"
|
||||
},
|
||||
{
|
||||
"name": "PCB_小板合一拼版(二层板)自行导入力创导出gerber.json",
|
||||
"url": "https://image.lceda.cn/attachments/2022/6/BMkqLsDhiJo2t8op8Ejvwwc8TaKqaooxSzg8a4rQ.txt",
|
||||
"original_id": "eaba63442d404070b930639390eef369"
|
||||
},
|
||||
{
|
||||
"name": "PCB_功率板+控制板(四层板)自行导入力创导出_2022-08-21.json",
|
||||
"url": "https://image.lceda.cn/attachments/2022/8/4LRvXx6WH6DD8V8GPZQEegxSCThDMkr1w4qbe1FT.txt",
|
||||
"original_id": "ae9d73994d534fd499a456fd9d2f7b40"
|
||||
}
|
||||
]
|
||||
}
|
||||
BIN
data/raw/oshwhub/3e2f893d74664e01b755ccf2582792de/cover.jpeg
Normal file
|
After Width: | Height: | Size: 309 KiB |
@@ -0,0 +1,9 @@
|
||||
# t12-858d烙铁热风枪通用焊台二合一
|
||||
|
||||
基于开源t12 858设计,重绘电路板到88*38*120铝外壳,最小体积,预留1.4寸TFT SPI接口和iic接口,上到彩屏,也可修改到jbc245来使用,预留了丰富的自定义空间
|
||||
|
||||
---
|
||||
- Source: https://oshwhub.com/mojinyinhu/t12858-tong-yong-han-tai
|
||||
- Author: mojinyinhu (mojinyinhu)
|
||||
- License: GPL 3.0
|
||||
- Published: 2024-07-26T08:17:03.000Z
|
||||
BIN
data/raw/oshwhub/3e2f893d74664e01b755ccf2582792de/files/F1_T12+858D编译视频教程.rar
LFS
Normal file
BIN
data/raw/oshwhub/3e2f893d74664e01b755ccf2582792de/files/T12+858焊台BOM表.xlsx
LFS
Normal file
BIN
data/raw/oshwhub/3e2f893d74664e01b755ccf2582792de/files/校准.txt
LFS
Normal file
118
data/raw/oshwhub/3e2f893d74664e01b755ccf2582792de/metadata.json
Normal file
@@ -0,0 +1,118 @@
|
||||
{
|
||||
"source": "oshwhub",
|
||||
"source_url": "https://oshwhub.com/mojinyinhu/t12858-tong-yong-han-tai",
|
||||
"project_id": "3e2f893d74664e01b755ccf2582792de",
|
||||
"title": "t12-858d烙铁热风枪通用焊台二合一",
|
||||
"description_short": "基于开源t12 858设计,重绘电路板到88*38*120铝外壳,最小体积,预留1.4寸TFT SPI接口和iic接口,上到彩屏,也可修改到jbc245来使用,预留了丰富的自定义空间",
|
||||
"description_path": "description.md",
|
||||
"author": {
|
||||
"username": "mojinyinhu",
|
||||
"display_name": "mojinyinhu",
|
||||
"user_id": "2158788da2584d3893fcb09344aa7085"
|
||||
},
|
||||
"license": "GPL 3.0",
|
||||
"tags": [],
|
||||
"created_at": "2021-07-08T03:05:48.000Z",
|
||||
"updated_at": "2026-04-20T02:02:25.000Z",
|
||||
"published_at": "2024-07-26T08:17:03.000Z",
|
||||
"crawled_at": "2026-04-23T11:27:21.695580+00:00",
|
||||
"metrics": {
|
||||
"likes": 483,
|
||||
"stars": 1013,
|
||||
"forks": 395,
|
||||
"views": 133220,
|
||||
"watch": 0,
|
||||
"comments": 293
|
||||
},
|
||||
"cover": {
|
||||
"url": "https://image.lceda.cn/pullimage/X7qQwpTwtIeTBm2FkJfDZCo0K0tv4ZyyQCrgYJGQ.jpeg",
|
||||
"path": "cover.jpeg"
|
||||
},
|
||||
"files": [
|
||||
{
|
||||
"name": "F1-T12-858D-master4.07.zip",
|
||||
"url": "https://image.lceda.cn/attachments/2022/4/jxFVtEW6XG1wB6AjK8ykfSwqUVDV9OpKiaHqqb51.zip",
|
||||
"original_id": "456c6c6a13b64483be969f93637e7255",
|
||||
"ext": "zip",
|
||||
"mime": "application/x-zip-compressed",
|
||||
"size": 33224795,
|
||||
"md5": "2f69640add7a8b42c9b835fe682de26c",
|
||||
"path": "files/F1-T12-858D-master4.07.zip",
|
||||
"sha256": "b01b044b3f370ff17c66a2fe455312876a2b6d61ff818283c2ea747127786c95"
|
||||
},
|
||||
{
|
||||
"name": "固件在解压缩后在BINARY文件夹,选取适合自己屏幕固件烧录.txt",
|
||||
"url": "https://image.lceda.cn/attachments/2022/4/GREMfysm2sIMw6hOBfAwTvzjMdCPXCTAz5oq1jpd.txt",
|
||||
"original_id": "f25fdd81e5134335a2f56b39da71c501",
|
||||
"ext": "txt",
|
||||
"mime": "text/plain",
|
||||
"size": 84,
|
||||
"md5": "aa10d20f9601588d99dc697c4e573e49",
|
||||
"path": "files/固件在解压缩后在BINARY文件夹,选取适合自己屏幕固件烧录.txt",
|
||||
"sha256": "abe44c2443bdc11876e750df1a927d2365318e20a978ed80ee6461e8ecbab05b"
|
||||
},
|
||||
{
|
||||
"name": "校准.txt",
|
||||
"url": "https://image.lceda.cn/attachments/2022/4/TBGObPjIQG0Z7h9bBrfZdZRKqdfgC9hAiCtaU6G7.txt",
|
||||
"original_id": "4d9c148dafc64ad6b27dbefed3e8ec2e",
|
||||
"ext": "txt",
|
||||
"mime": "text/plain",
|
||||
"size": 1058,
|
||||
"md5": "167921cdc21b13a6c85abdb42f2ffba2",
|
||||
"path": "files/校准.txt",
|
||||
"sha256": "9fd2af841a84b6a27dd6c13d81c208d45a02e959a73094efb0b1fa4586f71215"
|
||||
},
|
||||
{
|
||||
"name": "F1_T12+858D编译视频教程.rar",
|
||||
"url": "https://image.lceda.cn/attachments/2022/4/oIV5aPj2dyXrwODr0PpF9VH16w98TuJmggWB3lJ4.rar",
|
||||
"original_id": "70d67505c93242a4a3bc7fb91fa7c80d",
|
||||
"ext": "rar",
|
||||
"mime": "application/octet-stream",
|
||||
"size": 10367841,
|
||||
"md5": "0bbdb68ff491bba65004cbc507a0bb36",
|
||||
"path": "files/F1_T12+858D编译视频教程.rar",
|
||||
"sha256": "9da0b74d3757d08493811d888baebd466383126ce241dbe3b6d5f48d9d8b6c08"
|
||||
},
|
||||
{
|
||||
"name": "T12+858焊台BOM表.xlsx",
|
||||
"url": "https://image.lceda.cn/attachments/2022/6/y6f0JXE1jHDbcoMVx9prMqU1VQODyNyCggeZFRY3.xlsx",
|
||||
"original_id": "be2b2cce0ee24fe8838805cacd53ccd0",
|
||||
"ext": "xlsx",
|
||||
"mime": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
||||
"size": 15738,
|
||||
"md5": "6f60ccf1daf9f6441f0910827f3476ce",
|
||||
"path": "files/T12+858焊台BOM表.xlsx",
|
||||
"sha256": "80b8d57ef1a0615e1b01ba237f906e7063f870e67ccaa966e2ced3bcf3524a10"
|
||||
},
|
||||
{
|
||||
"name": "PCB_小板合一拼版(二层板)自行导入力创导出gerber.json",
|
||||
"url": "https://image.lceda.cn/attachments/2022/6/BMkqLsDhiJo2t8op8Ejvwwc8TaKqaooxSzg8a4rQ.txt",
|
||||
"original_id": "eaba63442d404070b930639390eef369",
|
||||
"ext": "txt",
|
||||
"mime": "application/json",
|
||||
"size": 780139,
|
||||
"md5": "0298cf1a0e505b3cebcf9f8c0c18adc9",
|
||||
"path": "files/PCB_小板合一拼版(二层板)自行导入力创导出gerber.json",
|
||||
"sha256": "f42a140b9183d242da25bdec5b861c4ade79033ddb1a8b39a71690fcd9c09646"
|
||||
},
|
||||
{
|
||||
"name": "PCB_功率板+控制板(四层板)自行导入力创导出_2022-08-21.json",
|
||||
"url": "https://image.lceda.cn/attachments/2022/8/4LRvXx6WH6DD8V8GPZQEegxSCThDMkr1w4qbe1FT.txt",
|
||||
"original_id": "ae9d73994d534fd499a456fd9d2f7b40",
|
||||
"ext": "txt",
|
||||
"mime": "application/json",
|
||||
"size": 1825835,
|
||||
"md5": "9e4a2e722f2d57539add8750f9e27ff3",
|
||||
"path": "files/PCB_功率板+控制板(四层板)自行导入力创导出_2022-08-21.json",
|
||||
"sha256": "e7238e5752f2aa763ba4900bac2cff07c8bcfb6b3a316c3809fc5da79ef04ad9"
|
||||
}
|
||||
],
|
||||
"raw_fields": {
|
||||
"path": "mojinyinhu/t12858-tong-yong-han-tai",
|
||||
"grade": 4,
|
||||
"origin": "std",
|
||||
"public": true,
|
||||
"publish": true,
|
||||
"skipped_files": []
|
||||
}
|
||||
}
|
||||
26
data/raw/oshwhub/7b6a398811f14eba9a952b8d2ddd7ace/_urls.json
Normal file
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"detail_url": "https://oshwhub.com/sheep_finder/pcb-heng-wen-jia-re-tai",
|
||||
"cover_url": "https://image.lceda.cn/avatars/2022/10/q3e5mInHcWPvP4K2wqCpzB0dJr8n0tCHj4OJb4Wh.png",
|
||||
"attachments": [
|
||||
{
|
||||
"name": "加热台量产计划.zip",
|
||||
"url": "https://image.lceda.cn/attachments/2023/3/3D63VEzSSgu7tMjN4RTiEbDSiqmlo1Yiv6uvNWXk.zip",
|
||||
"original_id": "bebc0475e03e43199806c4dfc78847b1"
|
||||
},
|
||||
{
|
||||
"name": "焊接烧录指引v2.pdf",
|
||||
"url": "https://image.lceda.cn/attachments/2023/4/2AhHlXehkZO4nC0zGTVH5TKH50X0IHZtmacdlfWq.pdf",
|
||||
"original_id": "3bd33eb9d73b4b4db05820c9fbfccbc1"
|
||||
},
|
||||
{
|
||||
"name": "加热台Q&A.docx",
|
||||
"url": "https://image.lceda.cn/attachments/2023/4/RwQkCsS9xv2UWoZ3JbVPgKa7IULczPGBFyk9tWLm.bin",
|
||||
"original_id": "e5f6f384fb11489f99e27e8aebf06ffb"
|
||||
},
|
||||
{
|
||||
"name": "2023-2-7 焊接编码器教程.pdf",
|
||||
"url": "https://image.lceda.cn/attachments/2023/4/8cflSrzwHsuPme258lpLoQLVym2YisHLNzmWsgly.pdf",
|
||||
"original_id": "21963ef73c534309b1754bd2ce452a2f"
|
||||
}
|
||||
]
|
||||
}
|
||||
BIN
data/raw/oshwhub/7b6a398811f14eba9a952b8d2ddd7ace/cover.png
Normal file
|
After Width: | Height: | Size: 7.8 MiB |
@@ -0,0 +1,10 @@
|
||||
# 加热台量产计划
|
||||
|
||||
基于启凡科创的物联网加热台优化而来。
|
||||
对应启凡科创v2.0版本作出适配
|
||||
|
||||
---
|
||||
- Source: https://oshwhub.com/sheep_finder/pcb-heng-wen-jia-re-tai
|
||||
- Author: sheep_finder (sheep_finder)
|
||||
- License: Public Domain
|
||||
- Published: 2025-11-10T02:35:05.000Z
|
||||
BIN
data/raw/oshwhub/7b6a398811f14eba9a952b8d2ddd7ace/files/2023-2-7 焊接编码器教程.pdf
LFS
Normal file
BIN
data/raw/oshwhub/7b6a398811f14eba9a952b8d2ddd7ace/files/加热台Q&A.docx
LFS
Normal file
BIN
data/raw/oshwhub/7b6a398811f14eba9a952b8d2ddd7ace/files/加热台量产计划.zip
LFS
Normal file
BIN
data/raw/oshwhub/7b6a398811f14eba9a952b8d2ddd7ace/files/焊接烧录指引v2.pdf
LFS
Normal file
@@ -0,0 +1,85 @@
|
||||
{
|
||||
"source": "oshwhub",
|
||||
"source_url": "https://oshwhub.com/sheep_finder/pcb-heng-wen-jia-re-tai",
|
||||
"project_id": "7b6a398811f14eba9a952b8d2ddd7ace",
|
||||
"title": "加热台量产计划",
|
||||
"description_short": "基于启凡科创的物联网加热台优化而来。\n对应启凡科创v2.0版本作出适配",
|
||||
"description_path": "description.md",
|
||||
"author": {
|
||||
"username": "sheep_finder",
|
||||
"display_name": "sheep_finder",
|
||||
"user_id": "dc43748f38a9490396e4969820abff90"
|
||||
},
|
||||
"license": "Public Domain",
|
||||
"tags": [],
|
||||
"created_at": "2022-10-03T04:28:21.000Z",
|
||||
"updated_at": "2026-04-03T01:41:07.000Z",
|
||||
"published_at": "2025-11-10T02:35:05.000Z",
|
||||
"crawled_at": "2026-04-23T11:25:46.651730+00:00",
|
||||
"metrics": {
|
||||
"likes": 1447,
|
||||
"stars": 3293,
|
||||
"forks": 3939,
|
||||
"views": 347329,
|
||||
"watch": 0,
|
||||
"comments": 383
|
||||
},
|
||||
"cover": {
|
||||
"url": "https://image.lceda.cn/avatars/2022/10/q3e5mInHcWPvP4K2wqCpzB0dJr8n0tCHj4OJb4Wh.png",
|
||||
"path": "cover.png"
|
||||
},
|
||||
"files": [
|
||||
{
|
||||
"name": "加热台量产计划.zip",
|
||||
"url": "https://image.lceda.cn/attachments/2023/3/3D63VEzSSgu7tMjN4RTiEbDSiqmlo1Yiv6uvNWXk.zip",
|
||||
"original_id": "bebc0475e03e43199806c4dfc78847b1",
|
||||
"ext": "zip",
|
||||
"mime": "application/x-zip-compressed",
|
||||
"size": 21328814,
|
||||
"md5": "6502c95eaf49092d463ea14be07d1cf9",
|
||||
"path": "files/加热台量产计划.zip",
|
||||
"sha256": "900f4c61e72a1ab22a113f0d55525244cd5eb072858cb0c4e5c950a7b647ad2e"
|
||||
},
|
||||
{
|
||||
"name": "焊接烧录指引v2.pdf",
|
||||
"url": "https://image.lceda.cn/attachments/2023/4/2AhHlXehkZO4nC0zGTVH5TKH50X0IHZtmacdlfWq.pdf",
|
||||
"original_id": "3bd33eb9d73b4b4db05820c9fbfccbc1",
|
||||
"ext": "pdf",
|
||||
"mime": "application/pdf",
|
||||
"size": 1869778,
|
||||
"md5": "bbcd571e21e230aec83af6909c453a80",
|
||||
"path": "files/焊接烧录指引v2.pdf",
|
||||
"sha256": "1551906d358b75a1ac070a3c13341761d55c0cd378697a90edc4a419ad6c195f"
|
||||
},
|
||||
{
|
||||
"name": "加热台Q&A.docx",
|
||||
"url": "https://image.lceda.cn/attachments/2023/4/RwQkCsS9xv2UWoZ3JbVPgKa7IULczPGBFyk9tWLm.bin",
|
||||
"original_id": "e5f6f384fb11489f99e27e8aebf06ffb",
|
||||
"ext": "bin",
|
||||
"mime": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
|
||||
"size": 13592,
|
||||
"md5": "e3f6675ec77f862d15250075e888838d",
|
||||
"path": "files/加热台Q&A.docx",
|
||||
"sha256": "b048901d8851b75257305865f2a9bbf97239756d2c4f0d9ab3b09d1828d95263"
|
||||
},
|
||||
{
|
||||
"name": "2023-2-7 焊接编码器教程.pdf",
|
||||
"url": "https://image.lceda.cn/attachments/2023/4/8cflSrzwHsuPme258lpLoQLVym2YisHLNzmWsgly.pdf",
|
||||
"original_id": "21963ef73c534309b1754bd2ce452a2f",
|
||||
"ext": "pdf",
|
||||
"mime": "application/pdf",
|
||||
"size": 857188,
|
||||
"md5": "0bbf490c7d06fb733f88ddd3715d5a7d",
|
||||
"path": "files/2023-2-7 焊接编码器教程.pdf",
|
||||
"sha256": "933b1d40e5c8a1c80b3499931c002b7d30a408dc2dc9fa1ba8954b772fdd3961"
|
||||
}
|
||||
],
|
||||
"raw_fields": {
|
||||
"path": "sheep_finder/pcb-heng-wen-jia-re-tai",
|
||||
"grade": 4,
|
||||
"origin": "std",
|
||||
"public": true,
|
||||
"publish": true,
|
||||
"skipped_files": []
|
||||
}
|
||||
}
|
||||
36
data/raw/oshwhub/892dbc4ebca74227ac6269a1693380d8/_urls.json
Normal file
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"detail_url": "https://oshwhub.com/dhx233/esp32_s3_watch",
|
||||
"cover_url": "https://image.lceda.cn/oshwhub/e65c8dd8b85f426ebded1acf94084b55.jpg",
|
||||
"attachments": [
|
||||
{
|
||||
"name": "演示视频V1_0_2.mp4",
|
||||
"url": "https://image.lceda.cn/attachments/2023/5/rjPzo9rb32stS2uMtOYyQHB1Mzsku2jIpfkxS0u6.mp4",
|
||||
"original_id": "9e3b1b0aab4e4077bba58e9b99072752"
|
||||
},
|
||||
{
|
||||
"name": "QF_ZERO_V2_V1_0_3.zip",
|
||||
"url": "https://image.lceda.cn/attachments/2023/5/a07O0dN3bNwNohLe4TFmCeNc9OPFYHyo3p4GWagW.zip",
|
||||
"original_id": "ec260479deae4829992fe4e87f0e461a"
|
||||
},
|
||||
{
|
||||
"name": "lvgl_demo_watch_code_blocks.zip",
|
||||
"url": "https://image.lceda.cn/attachments/2023/6/vEqACjU5pj8DZUYTFlMSquYiTrT05KqWEXKtwtle.zip",
|
||||
"original_id": "511fcfd7fd0743c98b5d05bb2919c778"
|
||||
},
|
||||
{
|
||||
"name": "V1.2外壳打螺丝版本.zip",
|
||||
"url": "https://image.lceda.cn/attachments/2023/6/Y4R4DRQgYSDp7qdF3Jti2NYUpFlRpGXvEr1EcDpW.zip",
|
||||
"original_id": "27d5835a26824d0ab7666ebe7a1d679b"
|
||||
},
|
||||
{
|
||||
"name": "wx_camera_1697969384939.mp4",
|
||||
"url": "https://image.lceda.cn/attachments/2023/10/FiNBQGrRzqux6SvmFD2ZRxvEV8hgRpW2bpF08zKj.mp4",
|
||||
"original_id": "bd456ad1f21a40b2a84492eab943fb08"
|
||||
},
|
||||
{
|
||||
"name": "qf_zero_v2_firmeware_V1.0.9_app.bin",
|
||||
"url": "https://image.lceda.cn/oshwhub/project/attachments/4d91cd61c2374105bb43e92a619b4efa.bin",
|
||||
"original_id": "f4b04d62ddc5451ca1fd77675d75cf53"
|
||||
}
|
||||
]
|
||||
}
|
||||
BIN
data/raw/oshwhub/892dbc4ebca74227ac6269a1693380d8/cover.jpg
Normal file
|
After Width: | Height: | Size: 889 KiB |
@@ -0,0 +1,9 @@
|
||||
# QF ZERO V2 智能手表终端V1.0.9-24-6-29
|
||||
|
||||
QF ZERO V2 ,基于ESP32-S3的智能手表
|
||||
|
||||
---
|
||||
- Source: https://oshwhub.com/dhx233/esp32_s3_watch
|
||||
- Author: 启凡科创 (dhx233)
|
||||
- License: Public Domain
|
||||
- Published: 2024-07-01T02:04:33.000Z
|
||||
BIN
data/raw/oshwhub/892dbc4ebca74227ac6269a1693380d8/files/QF_ZERO_V2_V1_0_3.zip
LFS
Normal file
BIN
data/raw/oshwhub/892dbc4ebca74227ac6269a1693380d8/files/V1.2外壳打螺丝版本.zip
LFS
Normal file
BIN
data/raw/oshwhub/892dbc4ebca74227ac6269a1693380d8/files/演示视频V1_0_2.mp4
LFS
Normal file
107
data/raw/oshwhub/892dbc4ebca74227ac6269a1693380d8/metadata.json
Normal file
@@ -0,0 +1,107 @@
|
||||
{
|
||||
"source": "oshwhub",
|
||||
"source_url": "https://oshwhub.com/dhx233/esp32_s3_watch",
|
||||
"project_id": "892dbc4ebca74227ac6269a1693380d8",
|
||||
"title": "QF ZERO V2 智能手表终端V1.0.9-24-6-29",
|
||||
"description_short": "QF ZERO V2 ,基于ESP32-S3的智能手表",
|
||||
"description_path": "description.md",
|
||||
"author": {
|
||||
"username": "dhx233",
|
||||
"display_name": "启凡科创",
|
||||
"user_id": "80fcee0f22fe42998cec371bbcdff7a2"
|
||||
},
|
||||
"license": "Public Domain",
|
||||
"tags": [],
|
||||
"created_at": "2022-09-15T13:21:36.000Z",
|
||||
"updated_at": "2025-10-27T07:11:41.000Z",
|
||||
"published_at": "2024-07-01T02:04:33.000Z",
|
||||
"crawled_at": "2026-04-23T11:28:24.308080+00:00",
|
||||
"metrics": {
|
||||
"likes": 774,
|
||||
"stars": 1737,
|
||||
"forks": 643,
|
||||
"views": 175969,
|
||||
"watch": 0,
|
||||
"comments": 164
|
||||
},
|
||||
"cover": {
|
||||
"url": "https://image.lceda.cn/oshwhub/e65c8dd8b85f426ebded1acf94084b55.jpg",
|
||||
"path": "cover.jpg"
|
||||
},
|
||||
"files": [
|
||||
{
|
||||
"name": "演示视频V1_0_2.mp4",
|
||||
"url": "https://image.lceda.cn/attachments/2023/5/rjPzo9rb32stS2uMtOYyQHB1Mzsku2jIpfkxS0u6.mp4",
|
||||
"original_id": "9e3b1b0aab4e4077bba58e9b99072752",
|
||||
"ext": "mp4",
|
||||
"mime": "video/mp4",
|
||||
"size": 14702117,
|
||||
"md5": "7b9779bb0cedd761d73eda999f0d96cb",
|
||||
"path": "files/演示视频V1_0_2.mp4",
|
||||
"sha256": "cece75aa3cad558c25147c3b3591c2876cf764be3ff2e54e028c9648c7be1ba0"
|
||||
},
|
||||
{
|
||||
"name": "QF_ZERO_V2_V1_0_3.zip",
|
||||
"url": "https://image.lceda.cn/attachments/2023/5/a07O0dN3bNwNohLe4TFmCeNc9OPFYHyo3p4GWagW.zip",
|
||||
"original_id": "ec260479deae4829992fe4e87f0e461a",
|
||||
"ext": "zip",
|
||||
"mime": "application/x-zip-compressed",
|
||||
"size": 26411463,
|
||||
"md5": "8b3f107973b5ac8185afe09ee29a82a0",
|
||||
"path": "files/QF_ZERO_V2_V1_0_3.zip",
|
||||
"sha256": "689b73069c915c7897e0de328152b571cabd1d874740a4e1e887604ae9ae899e"
|
||||
},
|
||||
{
|
||||
"name": "lvgl_demo_watch_code_blocks.zip",
|
||||
"url": "https://image.lceda.cn/attachments/2023/6/vEqACjU5pj8DZUYTFlMSquYiTrT05KqWEXKtwtle.zip",
|
||||
"original_id": "511fcfd7fd0743c98b5d05bb2919c778",
|
||||
"ext": "zip",
|
||||
"mime": "application/x-zip-compressed",
|
||||
"size": 52281875,
|
||||
"md5": "f1a563c71d4d28bad47edb99b80575aa",
|
||||
"path": "files/lvgl_demo_watch_code_blocks.zip",
|
||||
"sha256": "3ac73ef2b6959643a36f33a55b508fb7d7b813d61fc1b51f821533914b971abb"
|
||||
},
|
||||
{
|
||||
"name": "V1.2外壳打螺丝版本.zip",
|
||||
"url": "https://image.lceda.cn/attachments/2023/6/Y4R4DRQgYSDp7qdF3Jti2NYUpFlRpGXvEr1EcDpW.zip",
|
||||
"original_id": "27d5835a26824d0ab7666ebe7a1d679b",
|
||||
"ext": "zip",
|
||||
"mime": "application/x-zip-compressed",
|
||||
"size": 283522,
|
||||
"md5": "4189e693d7ef28528442a09dab456a4a",
|
||||
"path": "files/V1.2外壳打螺丝版本.zip",
|
||||
"sha256": "48930d21ca6c51da2b656c7602a89dd0a628470dbea5b0623ae5678b17215b20"
|
||||
},
|
||||
{
|
||||
"name": "wx_camera_1697969384939.mp4",
|
||||
"url": "https://image.lceda.cn/attachments/2023/10/FiNBQGrRzqux6SvmFD2ZRxvEV8hgRpW2bpF08zKj.mp4",
|
||||
"original_id": "bd456ad1f21a40b2a84492eab943fb08",
|
||||
"ext": "mp4",
|
||||
"mime": "video/mp4",
|
||||
"size": 22640916,
|
||||
"md5": "d2ecd4237f611ba495b1fb75e924fc78",
|
||||
"path": "files/wx_camera_1697969384939.mp4",
|
||||
"sha256": "cdf1df59f95baac8374244c786e6cf72ed264caf5ca1ed4a8a3b1c42ffb3c87e"
|
||||
},
|
||||
{
|
||||
"name": "qf_zero_v2_firmeware_V1.0.9_app.bin",
|
||||
"url": "https://image.lceda.cn/oshwhub/project/attachments/4d91cd61c2374105bb43e92a619b4efa.bin",
|
||||
"original_id": "f4b04d62ddc5451ca1fd77675d75cf53",
|
||||
"ext": "bin",
|
||||
"mime": "application/octet-stream",
|
||||
"size": 2130880,
|
||||
"md5": "cf09c83d912765f054c72c07f2651e95",
|
||||
"path": "files/qf_zero_v2_firmeware_V1.0.9_app.bin",
|
||||
"sha256": "d319ce5ad9787381cfe67977f99c1246af3ba8b4de65dbeb5bad42a29cac8df0"
|
||||
}
|
||||
],
|
||||
"raw_fields": {
|
||||
"path": "dhx233/esp32_s3_watch",
|
||||
"grade": 4,
|
||||
"origin": "std",
|
||||
"public": true,
|
||||
"publish": true,
|
||||
"skipped_files": []
|
||||
}
|
||||
}
|
||||
16
data/raw/oshwhub/91206ca73e96455f946bfcdd73e814fd/_urls.json
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"detail_url": "https://oshwhub.com/XACT/rt300-mkv",
|
||||
"cover_url": "https://image.lceda.cn/pullimage/G0Yvb3LsUUqWspquWfqe3ray1cucrfmoPvXxT7H2.jpeg",
|
||||
"attachments": [
|
||||
{
|
||||
"name": "video_20240608_002422.mp4",
|
||||
"url": "https://image.lceda.cn/oshwhub/project/attachments/1fdcbde12c2f4a6faf8c519be4e72984.mp4",
|
||||
"original_id": "d76ad6faae0240518eb7640ba8fc02cc"
|
||||
},
|
||||
{
|
||||
"name": "RT300-MKV UserManual_24JUL25.pdf",
|
||||
"url": "https://image.lceda.cn/oshwhub/project/attachments/a57ca3d5e7b54417aae014e2f12f17fa.pdf",
|
||||
"original_id": "5dc0b16067344ed6bfc15471f2a3bd2a"
|
||||
}
|
||||
]
|
||||
}
|
||||
BIN
data/raw/oshwhub/91206ca73e96455f946bfcdd73e814fd/cover.jpeg
Normal file
|
After Width: | Height: | Size: 273 KiB |
@@ -0,0 +1,9 @@
|
||||
# RT300-MKV 250W 数控升降压桌面可调电源
|
||||
|
||||
RT300-MKV-EXTREME 同步混合功率级自动范围升降压型数控可调电源
|
||||
|
||||
---
|
||||
- Source: https://oshwhub.com/XACT/rt300-mkv
|
||||
- Author: XACT (XACT)
|
||||
- License: CC BY-NC-SA 4.0
|
||||
- Published: 2024-08-01T01:03:58.000Z
|
||||
@@ -0,0 +1,63 @@
|
||||
{
|
||||
"source": "oshwhub",
|
||||
"source_url": "https://oshwhub.com/XACT/rt300-mkv",
|
||||
"project_id": "91206ca73e96455f946bfcdd73e814fd",
|
||||
"title": "RT300-MKV 250W 数控升降压桌面可调电源",
|
||||
"description_short": "RT300-MKV-EXTREME 同步混合功率级自动范围升降压型数控可调电源",
|
||||
"description_path": "description.md",
|
||||
"author": {
|
||||
"username": "XACT",
|
||||
"display_name": "XACT",
|
||||
"user_id": "e622ba5d959740ed90f4845a433def3a"
|
||||
},
|
||||
"license": "CC BY-NC-SA 4.0",
|
||||
"tags": [],
|
||||
"created_at": "2020-12-25T06:25:11.000Z",
|
||||
"updated_at": "2025-12-19T01:07:55.000Z",
|
||||
"published_at": "2024-08-01T01:03:58.000Z",
|
||||
"crawled_at": "2026-04-23T11:26:39.736414+00:00",
|
||||
"metrics": {
|
||||
"likes": 867,
|
||||
"stars": 1735,
|
||||
"forks": 782,
|
||||
"views": 185523,
|
||||
"watch": 0,
|
||||
"comments": 231
|
||||
},
|
||||
"cover": {
|
||||
"url": "https://image.lceda.cn/pullimage/G0Yvb3LsUUqWspquWfqe3ray1cucrfmoPvXxT7H2.jpeg",
|
||||
"path": "cover.jpeg"
|
||||
},
|
||||
"files": [
|
||||
{
|
||||
"name": "video_20240608_002422.mp4",
|
||||
"url": "https://image.lceda.cn/oshwhub/project/attachments/1fdcbde12c2f4a6faf8c519be4e72984.mp4",
|
||||
"original_id": "d76ad6faae0240518eb7640ba8fc02cc",
|
||||
"ext": "mp4",
|
||||
"mime": "video/mp4",
|
||||
"size": 81553791,
|
||||
"md5": "becffa3b615f415101f85d18b9bbfcf9",
|
||||
"path": "files/video_20240608_002422.mp4",
|
||||
"sha256": "06864530d9ef794927c8826b7e2e5bd7349587f9b6035e76606331bcba25fbd3"
|
||||
},
|
||||
{
|
||||
"name": "RT300-MKV UserManual_24JUL25.pdf",
|
||||
"url": "https://image.lceda.cn/oshwhub/project/attachments/a57ca3d5e7b54417aae014e2f12f17fa.pdf",
|
||||
"original_id": "5dc0b16067344ed6bfc15471f2a3bd2a",
|
||||
"ext": "pdf",
|
||||
"mime": "application/pdf",
|
||||
"size": 3320936,
|
||||
"md5": "7f97a35fda72a0462ec8401d739ffd41",
|
||||
"path": "files/RT300-MKV UserManual_24JUL25.pdf",
|
||||
"sha256": "19eacef139ed672806a7bf492668b3f09e729d8c6eac6d2e5ed79aca8704685e"
|
||||
}
|
||||
],
|
||||
"raw_fields": {
|
||||
"path": "XACT/rt300-mkv",
|
||||
"grade": 4,
|
||||
"origin": "std",
|
||||
"public": true,
|
||||
"publish": true,
|
||||
"skipped_files": []
|
||||
}
|
||||
}
|
||||
41
data/raw/oshwhub/922c1f3a9b9a43ff98998f476e7946ca/_urls.json
Normal file
@@ -0,0 +1,41 @@
|
||||
{
|
||||
"detail_url": "https://oshwhub.com/armbian-pythoniot/yuzumaix-v831",
|
||||
"cover_url": "https://image.lceda.cn/avatars/2023/4/DMgC3qzd0rQukGEieLTb377RTu3umnk2aRgvzuYv.png",
|
||||
"attachments": [
|
||||
{
|
||||
"name": "WeChat_20230922093205.mp4",
|
||||
"url": "https://image.lceda.cn/attachments/2023/9/oCmEMfVHeHKJDlGiDBulF9Xs8hR9zVpuNoIfKx3H.mp4",
|
||||
"original_id": "997cfe92995946f6ab89a61a5dd07503"
|
||||
},
|
||||
{
|
||||
"name": "大镜头.mp4",
|
||||
"url": "https://image.lceda.cn/attachments/2023/9/02cMoTHflBm7R2xW3BIy1CzsgS9EZXuNOb5kBya6.mp4",
|
||||
"original_id": "de14cc7868254108a76250bf22d1466a"
|
||||
},
|
||||
{
|
||||
"name": "40a45ea8a5b9683f2bc5940dd0f03fc5.mp4",
|
||||
"url": "https://image.lceda.cn/attachments/2023/11/RzUKJ9vGR07UX5NAov3fkU5qBc7Lm7l7YpnpBKam.mp4",
|
||||
"original_id": "166a052b60cc47c881d6151c8f50e087"
|
||||
},
|
||||
{
|
||||
"name": "d77c8f40aaf2ebf198d2ffe4ff9bde63.mp4",
|
||||
"url": "https://image.lceda.cn/attachments/2023/11/qb0tziZO0kWitZlTOQ37tqFDFr48m4gGLnPPQnHs.mp4",
|
||||
"original_id": "c36c4817224c4cbc89a8c57f692e34be"
|
||||
},
|
||||
{
|
||||
"name": "WeChat_20231124121438.mp4",
|
||||
"url": "https://image.lceda.cn/attachments/2023/11/ckssTsthpECXfdRpgjCxV9QyzRBvDjzh0ft6X4kI.mp4",
|
||||
"original_id": "f668d7f08b2b40daa7bb04a58a49e2df"
|
||||
},
|
||||
{
|
||||
"name": "WeChat_20231124121418.mp4",
|
||||
"url": "https://image.lceda.cn/attachments/2023/11/T4kDKWugOAp5R2FPKQgNf4u5ymTOtlmla7xm5ZcG.mp4",
|
||||
"original_id": "b16233f0eb624fc4a44fc0280f631f6e"
|
||||
},
|
||||
{
|
||||
"name": "WeChat_20231124121403.mp4",
|
||||
"url": "https://image.lceda.cn/attachments/2023/11/Qio2QOYXM8CBoofNaqbKRAaqQ3RZMgXNPhzuEgvL.mp4",
|
||||
"original_id": "30129b0c66e14549926aa79f381afb2b"
|
||||
}
|
||||
]
|
||||
}
|
||||
BIN
data/raw/oshwhub/922c1f3a9b9a43ff98998f476e7946ca/cover.png
Normal file
|
After Width: | Height: | Size: 783 KiB |
@@ -0,0 +1,9 @@
|
||||
# 柚子爱AI相机-YuzuAI-YuzuMaix-AIoT-V831开发板
|
||||
|
||||
基于V831的一个AI开源相机, 硬件来自YuzukiIRC, 固件和软件套用M2Dock和MaixPy3, 原名YuzuMaix柚木麦被吐槽,改名YuzuAI柚子爱。
|
||||
|
||||
---
|
||||
- Source: https://oshwhub.com/armbian-pythoniot/yuzumaix-v831
|
||||
- Author: Armbian-PythonIot (armbian-pythoniot)
|
||||
- License: CC BY-NC-SA 3.0
|
||||
- Published: 2023-12-14T01:58:46.000Z
|
||||
BIN
data/raw/oshwhub/922c1f3a9b9a43ff98998f476e7946ca/files/大镜头.mp4
LFS
Normal file
118
data/raw/oshwhub/922c1f3a9b9a43ff98998f476e7946ca/metadata.json
Normal file
@@ -0,0 +1,118 @@
|
||||
{
|
||||
"source": "oshwhub",
|
||||
"source_url": "https://oshwhub.com/armbian-pythoniot/yuzumaix-v831",
|
||||
"project_id": "922c1f3a9b9a43ff98998f476e7946ca",
|
||||
"title": "柚子爱AI相机-YuzuAI-YuzuMaix-AIoT-V831开发板",
|
||||
"description_short": "基于V831的一个AI开源相机, 硬件来自YuzukiIRC, 固件和软件套用M2Dock和MaixPy3, 原名YuzuMaix柚木麦被吐槽,改名YuzuAI柚子爱。",
|
||||
"description_path": "description.md",
|
||||
"author": {
|
||||
"username": "armbian-pythoniot",
|
||||
"display_name": "Armbian-PythonIot",
|
||||
"user_id": "5b6e6dc2413245cb9d41eb504949b13a"
|
||||
},
|
||||
"license": "CC BY-NC-SA 3.0",
|
||||
"tags": [],
|
||||
"created_at": "2023-04-05T04:08:23.000Z",
|
||||
"updated_at": "2023-12-14T01:54:51.000Z",
|
||||
"published_at": "2023-12-14T01:58:46.000Z",
|
||||
"crawled_at": "2026-04-23T11:31:21.045637+00:00",
|
||||
"metrics": {
|
||||
"likes": 129,
|
||||
"stars": 236,
|
||||
"forks": 96,
|
||||
"views": 45128,
|
||||
"watch": 0,
|
||||
"comments": 93
|
||||
},
|
||||
"cover": {
|
||||
"url": "https://image.lceda.cn/avatars/2023/4/DMgC3qzd0rQukGEieLTb377RTu3umnk2aRgvzuYv.png",
|
||||
"path": "cover.png"
|
||||
},
|
||||
"files": [
|
||||
{
|
||||
"name": "WeChat_20230922093205.mp4",
|
||||
"url": "https://image.lceda.cn/attachments/2023/9/oCmEMfVHeHKJDlGiDBulF9Xs8hR9zVpuNoIfKx3H.mp4",
|
||||
"original_id": "997cfe92995946f6ab89a61a5dd07503",
|
||||
"ext": "mp4",
|
||||
"mime": "video/mp4",
|
||||
"size": 1145966,
|
||||
"md5": "fc02f72d812662607b6430b9123e4110",
|
||||
"path": "files/WeChat_20230922093205.mp4",
|
||||
"sha256": "48f1d30c36ee2cf70307a59f11e78249d763f379d513fc131b33c98ae9290844"
|
||||
},
|
||||
{
|
||||
"name": "大镜头.mp4",
|
||||
"url": "https://image.lceda.cn/attachments/2023/9/02cMoTHflBm7R2xW3BIy1CzsgS9EZXuNOb5kBya6.mp4",
|
||||
"original_id": "de14cc7868254108a76250bf22d1466a",
|
||||
"ext": "mp4",
|
||||
"mime": "video/mp4",
|
||||
"size": 829241,
|
||||
"md5": "b73514619c4ee6fe8e76bc7b32e6fa99",
|
||||
"path": "files/大镜头.mp4",
|
||||
"sha256": "054610980b91c2dac2629b3c33cb3ffdabcda332a3cc44c8e027221979dd6c36"
|
||||
},
|
||||
{
|
||||
"name": "40a45ea8a5b9683f2bc5940dd0f03fc5.mp4",
|
||||
"url": "https://image.lceda.cn/attachments/2023/11/RzUKJ9vGR07UX5NAov3fkU5qBc7Lm7l7YpnpBKam.mp4",
|
||||
"original_id": "166a052b60cc47c881d6151c8f50e087",
|
||||
"ext": "mp4",
|
||||
"mime": "video/mp4",
|
||||
"size": 1252241,
|
||||
"md5": "153e88446ba95cb78997c0924c6477bd",
|
||||
"path": "files/40a45ea8a5b9683f2bc5940dd0f03fc5.mp4",
|
||||
"sha256": "981d9d210fee2435d40aad25c9727435708993785d4d7abd11a99afe88f498b6"
|
||||
},
|
||||
{
|
||||
"name": "d77c8f40aaf2ebf198d2ffe4ff9bde63.mp4",
|
||||
"url": "https://image.lceda.cn/attachments/2023/11/qb0tziZO0kWitZlTOQ37tqFDFr48m4gGLnPPQnHs.mp4",
|
||||
"original_id": "c36c4817224c4cbc89a8c57f692e34be",
|
||||
"ext": "mp4",
|
||||
"mime": "video/mp4",
|
||||
"size": 964054,
|
||||
"md5": "3412f63de246108e328f32f424ccdd73",
|
||||
"path": "files/d77c8f40aaf2ebf198d2ffe4ff9bde63.mp4",
|
||||
"sha256": "89bd79ebae84dadad9fc6e78e7662c1f0d4aeeb526cb4b64c79450c92772bb88"
|
||||
},
|
||||
{
|
||||
"name": "WeChat_20231124121438.mp4",
|
||||
"url": "https://image.lceda.cn/attachments/2023/11/ckssTsthpECXfdRpgjCxV9QyzRBvDjzh0ft6X4kI.mp4",
|
||||
"original_id": "f668d7f08b2b40daa7bb04a58a49e2df",
|
||||
"ext": "mp4",
|
||||
"mime": "video/mp4",
|
||||
"size": 1831997,
|
||||
"md5": "5d0b710833cde01ced97e311b9ffb002",
|
||||
"path": "files/WeChat_20231124121438.mp4",
|
||||
"sha256": "5000ec0973b1f5d72fa1904f25061ab9eae49a05d9e4dbbff239066102bad412"
|
||||
},
|
||||
{
|
||||
"name": "WeChat_20231124121418.mp4",
|
||||
"url": "https://image.lceda.cn/attachments/2023/11/T4kDKWugOAp5R2FPKQgNf4u5ymTOtlmla7xm5ZcG.mp4",
|
||||
"original_id": "b16233f0eb624fc4a44fc0280f631f6e",
|
||||
"ext": "mp4",
|
||||
"mime": "video/mp4",
|
||||
"size": 773127,
|
||||
"md5": "970584d4b75eb818ec144b1b6fbe49a5",
|
||||
"path": "files/WeChat_20231124121418.mp4",
|
||||
"sha256": "aecfc2970d8a4a0f5d2fd4484beb8b7e91321b564aa9e5a5bcca8a8dd5dbd41f"
|
||||
},
|
||||
{
|
||||
"name": "WeChat_20231124121403.mp4",
|
||||
"url": "https://image.lceda.cn/attachments/2023/11/Qio2QOYXM8CBoofNaqbKRAaqQ3RZMgXNPhzuEgvL.mp4",
|
||||
"original_id": "30129b0c66e14549926aa79f381afb2b",
|
||||
"ext": "mp4",
|
||||
"mime": "video/mp4",
|
||||
"size": 1915277,
|
||||
"md5": "b26d9c91ab5abac4d16e2b084eca4040",
|
||||
"path": "files/WeChat_20231124121403.mp4",
|
||||
"sha256": "39eb70b17270d179c5325ef77fe46ed79b84a9ba98fa9595ad7f8b74697f9c07"
|
||||
}
|
||||
],
|
||||
"raw_fields": {
|
||||
"path": "armbian-pythoniot/yuzumaix-v831",
|
||||
"grade": 4,
|
||||
"origin": "std",
|
||||
"public": true,
|
||||
"publish": true,
|
||||
"skipped_files": []
|
||||
}
|
||||
}
|
||||
16
data/raw/oshwhub/b077573dfb764e95b1d27faba49cca65/_urls.json
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"detail_url": "https://oshwhub.com/yanranxiaoxi/Multi-adaptation-Wi-Fi-Geiger-Counter-Double-Tube-Type",
|
||||
"cover_url": "https://image.lceda.cn/pullimage/Z4KOXBgwtmwMIUpJC8ZSyFWeY6hBg2899oPP5UeZ.jpeg",
|
||||
"attachments": [
|
||||
{
|
||||
"name": "3D打印外壳与电池版改装.zip",
|
||||
"url": "https://image.lceda.cn/attachments/2023/9/Ps19TA0QecWL9XXjgOxNhHxRj8FvpO7kttXqF8KI.zip",
|
||||
"original_id": "de773a049b1149ea8f5b885277d839ac"
|
||||
},
|
||||
{
|
||||
"name": "MWGC-Firmware_v0.1.3.20241125a.bin",
|
||||
"url": "https://image.lceda.cn/oshwhub/project/attachments/f59327bb7a8f4180851468b9dee83944.bin",
|
||||
"original_id": "df5c50cf692548afb2ee27096178c282"
|
||||
}
|
||||
]
|
||||
}
|
||||
BIN
data/raw/oshwhub/b077573dfb764e95b1d27faba49cca65/cover.jpeg
Normal file
|
After Width: | Height: | Size: 121 KiB |
@@ -0,0 +1,9 @@
|
||||
# 小汐 & 阿曈 -> 盖革计数器(MWGC-2T)
|
||||
|
||||
⭐ 中文固件多管型 Wi-Fi 盖革计数器(MWGC-2T) ⭐
|
||||
|
||||
---
|
||||
- Source: https://oshwhub.com/yanranxiaoxi/Multi-adaptation-Wi-Fi-Geiger-Counter-Double-Tube-Type
|
||||
- Author: 久治明千树汐 (yanranxiaoxi)
|
||||
- License: CC BY-SA 4.0
|
||||
- Published: 2024-11-25T01:38:14.000Z
|
||||
BIN
data/raw/oshwhub/b077573dfb764e95b1d27faba49cca65/files/3D打印外壳与电池版改装.zip
LFS
Normal file
@@ -0,0 +1,63 @@
|
||||
{
|
||||
"source": "oshwhub",
|
||||
"source_url": "https://oshwhub.com/yanranxiaoxi/Multi-adaptation-Wi-Fi-Geiger-Counter-Double-Tube-Type",
|
||||
"project_id": "b077573dfb764e95b1d27faba49cca65",
|
||||
"title": "小汐 & 阿曈 -> 盖革计数器(MWGC-2T)",
|
||||
"description_short": "⭐ 中文固件多管型 Wi-Fi 盖革计数器(MWGC-2T) ⭐",
|
||||
"description_path": "description.md",
|
||||
"author": {
|
||||
"username": "yanranxiaoxi",
|
||||
"display_name": "久治明千树汐",
|
||||
"user_id": "eac388b086064c2087f67a10b524a911"
|
||||
},
|
||||
"license": "CC BY-SA 4.0",
|
||||
"tags": [],
|
||||
"created_at": "2023-03-11T16:40:16.000Z",
|
||||
"updated_at": "2026-01-30T13:13:39.000Z",
|
||||
"published_at": "2024-11-25T01:38:14.000Z",
|
||||
"crawled_at": "2026-04-23T11:26:00.127742+00:00",
|
||||
"metrics": {
|
||||
"likes": 212,
|
||||
"stars": 365,
|
||||
"forks": 189,
|
||||
"views": 49755,
|
||||
"watch": 0,
|
||||
"comments": 168
|
||||
},
|
||||
"cover": {
|
||||
"url": "https://image.lceda.cn/pullimage/Z4KOXBgwtmwMIUpJC8ZSyFWeY6hBg2899oPP5UeZ.jpeg",
|
||||
"path": "cover.jpeg"
|
||||
},
|
||||
"files": [
|
||||
{
|
||||
"name": "3D打印外壳与电池版改装.zip",
|
||||
"url": "https://image.lceda.cn/attachments/2023/9/Ps19TA0QecWL9XXjgOxNhHxRj8FvpO7kttXqF8KI.zip",
|
||||
"original_id": "de773a049b1149ea8f5b885277d839ac",
|
||||
"ext": "zip",
|
||||
"mime": "application/x-zip-compressed",
|
||||
"size": 3798995,
|
||||
"md5": "3ec71e545b0f0b70f93b58599c8d1c7e",
|
||||
"path": "files/3D打印外壳与电池版改装.zip",
|
||||
"sha256": "e23537c79e44be7dadb89ba82fb3b195ae2436d8200c62659f31a87093f6fd7e"
|
||||
},
|
||||
{
|
||||
"name": "MWGC-Firmware_v0.1.3.20241125a.bin",
|
||||
"url": "https://image.lceda.cn/oshwhub/project/attachments/f59327bb7a8f4180851468b9dee83944.bin",
|
||||
"original_id": "df5c50cf692548afb2ee27096178c282",
|
||||
"ext": "bin",
|
||||
"mime": "application/octet-stream",
|
||||
"size": 428496,
|
||||
"md5": "7bd953b6a41c5ad621b7df5f47c3e6ed",
|
||||
"path": "files/MWGC-Firmware_v0.1.3.20241125a.bin",
|
||||
"sha256": "87bf7129731121ebaead85278e9aad8f8b2ea0ff3f5f9b3d46ed29e65f82d577"
|
||||
}
|
||||
],
|
||||
"raw_fields": {
|
||||
"path": "yanranxiaoxi/Multi-adaptation-Wi-Fi-Geiger-Counter-Double-Tube-Type",
|
||||
"grade": 4,
|
||||
"origin": "std",
|
||||
"public": true,
|
||||
"publish": true,
|
||||
"skipped_files": []
|
||||
}
|
||||
}
|
||||
16
data/raw/oshwhub/f974b06d9c01470bb319e7df6d4512c9/_urls.json
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"detail_url": "https://oshwhub.com/diy17102800/tu-teng-zvs",
|
||||
"cover_url": "https://image.lceda.cn/pullimage/Qf1Gu6y5cpQQQ5YzNoFf4gqZYwNCOzKYlO9eerXB.jpeg",
|
||||
"attachments": [
|
||||
{
|
||||
"name": "测试视频.mp4",
|
||||
"url": "https://image.lceda.cn/attachments/2023/3/hcSO16Po6ZKhmHnR3M2UJ2ttbc4jNDE0FthmsFE0.mp4",
|
||||
"original_id": "e0ef95cfceb04edc9076a4e8f5ebd9dd"
|
||||
},
|
||||
{
|
||||
"name": "1133.mp4",
|
||||
"url": "https://image.lceda.cn/attachments/2024/5/BiyaOevIDxQtW4RbBjuS1FZ3P2cDsGBB1M5mf2aN.mp4",
|
||||
"original_id": "40cab71898a7457b92f5e6ef7c8a8bd5"
|
||||
}
|
||||
]
|
||||
}
|
||||
BIN
data/raw/oshwhub/f974b06d9c01470bb319e7df6d4512c9/cover.jpeg
Normal file
|
After Width: | Height: | Size: 523 KiB |
@@ -0,0 +1,9 @@
|
||||
# 大功率感应加热2500W 增强型ZVS
|
||||
|
||||
测试已成功
|
||||
|
||||
---
|
||||
- Source: https://oshwhub.com/diy17102800/tu-teng-zvs
|
||||
- Author: 金石之声 (diy17102800)
|
||||
- License: TAPR Open Hardware License
|
||||
- Published: 2024-05-20T02:40:14.000Z
|
||||
BIN
data/raw/oshwhub/f974b06d9c01470bb319e7df6d4512c9/files/1133.mp4
LFS
Normal file
BIN
data/raw/oshwhub/f974b06d9c01470bb319e7df6d4512c9/files/测试视频.mp4
LFS
Normal file
@@ -0,0 +1,63 @@
|
||||
{
|
||||
"source": "oshwhub",
|
||||
"source_url": "https://oshwhub.com/diy17102800/tu-teng-zvs",
|
||||
"project_id": "f974b06d9c01470bb319e7df6d4512c9",
|
||||
"title": "大功率感应加热2500W 增强型ZVS",
|
||||
"description_short": "测试已成功",
|
||||
"description_path": "description.md",
|
||||
"author": {
|
||||
"username": "diy17102800",
|
||||
"display_name": "金石之声",
|
||||
"user_id": "de940107caa34d989e9485cc41026732"
|
||||
},
|
||||
"license": "TAPR Open Hardware License",
|
||||
"tags": [],
|
||||
"created_at": "2023-02-14T16:30:50.000Z",
|
||||
"updated_at": "2025-10-27T07:11:41.000Z",
|
||||
"published_at": "2024-05-20T02:40:14.000Z",
|
||||
"crawled_at": "2026-04-23T11:30:55.186691+00:00",
|
||||
"metrics": {
|
||||
"likes": 355,
|
||||
"stars": 708,
|
||||
"forks": 378,
|
||||
"views": 61550,
|
||||
"watch": 0,
|
||||
"comments": 265
|
||||
},
|
||||
"cover": {
|
||||
"url": "https://image.lceda.cn/pullimage/Qf1Gu6y5cpQQQ5YzNoFf4gqZYwNCOzKYlO9eerXB.jpeg",
|
||||
"path": "cover.jpeg"
|
||||
},
|
||||
"files": [
|
||||
{
|
||||
"name": "测试视频.mp4",
|
||||
"url": "https://image.lceda.cn/attachments/2023/3/hcSO16Po6ZKhmHnR3M2UJ2ttbc4jNDE0FthmsFE0.mp4",
|
||||
"original_id": "e0ef95cfceb04edc9076a4e8f5ebd9dd",
|
||||
"ext": "mp4",
|
||||
"mime": "video/mp4",
|
||||
"size": 8101940,
|
||||
"md5": "229f35937d3b13a0a862b7d47654eb0f",
|
||||
"path": "files/测试视频.mp4",
|
||||
"sha256": "613b326cb8c3c222c955c259968b4fac5dd31daa5a93e85e53a55b24ef30c320"
|
||||
},
|
||||
{
|
||||
"name": "1133.mp4",
|
||||
"url": "https://image.lceda.cn/attachments/2024/5/BiyaOevIDxQtW4RbBjuS1FZ3P2cDsGBB1M5mf2aN.mp4",
|
||||
"original_id": "40cab71898a7457b92f5e6ef7c8a8bd5",
|
||||
"ext": "mp4",
|
||||
"mime": "video/mp4",
|
||||
"size": 1100753,
|
||||
"md5": "3dc3d5f4c556e3c057eede3cfbcefb83",
|
||||
"path": "files/1133.mp4",
|
||||
"sha256": "7a707feb0a82435b59439552f211075dafeab39aa5d490e5195d861f75515126"
|
||||
}
|
||||
],
|
||||
"raw_fields": {
|
||||
"path": "diy17102800/tu-teng-zvs",
|
||||
"grade": 4,
|
||||
"origin": "std",
|
||||
"public": true,
|
||||
"publish": true,
|
||||
"skipped_files": []
|
||||
}
|
||||
}
|
||||
92
docs/sources/oshwhub.md
Normal file
@@ -0,0 +1,92 @@
|
||||
# oshwhub.com 数据源调研
|
||||
|
||||
**平台**:立创开源硬件平台(嘉立创 EDA / 深圳创电优选科技有限公司)
|
||||
**URL**:https://oshwhub.com
|
||||
**调研日期**:2026-04-23
|
||||
|
||||
## 站点架构
|
||||
|
||||
- Next.js App Router SPA;详情页 `/detail/<uuid>` 和 `/<user>/<slug>` 均 SSR(HTML 内含完整元数据 + attachments 数组)
|
||||
- axios baseURL 为 `https://oshwhub.com`(见 `/_next/static/chunks/8661-*.js`)
|
||||
- 首页 / explore 列表数据靠客户端 fetch 渲染(首屏 HTML 里没有卡片 DOM)
|
||||
|
||||
## robots.txt
|
||||
|
||||
```
|
||||
User-agent: *
|
||||
Disallow: /posts
|
||||
Sitemap: https://oshwhub.com/sitemap.xml
|
||||
```
|
||||
|
||||
详情页、explore、API 均允许抓取。
|
||||
|
||||
## 可用 API(无需鉴权)
|
||||
|
||||
### 项目列表
|
||||
`GET https://oshwhub.com/api/project?page=N&pageSize=M&sort=hot`
|
||||
|
||||
- `sort`:`hot`(默认,按热度)/`like`/`new` 等
|
||||
- `pageSize`:最大 50 可用,试过 100 返回空
|
||||
- 返回:`{success, code, result:{page, pageSize, total, totalPage, lists:[...]}}`
|
||||
- total ≈ 12493(2026-04 快照)
|
||||
|
||||
每条 list item 字段:
|
||||
- `uuid`, `name`, `introduction`, `path`(= `<username>/<slug>`)
|
||||
- `owner`:`{uuid, username, nickname, avatar, team}`
|
||||
- `count`:`{fork, star, like, views, watch}`
|
||||
- `grade`(1-4,4 是精品徽章)
|
||||
- `thumb`(封面 URL,`image.lceda.cn` 或 `//image.lceda.cn` 前缀)
|
||||
- `created_at`, `updated_at`, `oshwhub_publish_at`
|
||||
- `tags`, `public`, `publish`, `comments_count`
|
||||
|
||||
### 项目详情(HTML 解析)
|
||||
`GET https://oshwhub.com/<path>` 或 `/detail/<uuid>`
|
||||
|
||||
HTML 内嵌 escaped JSON,关键字段:
|
||||
- `\"license\":\"GPL 3.0\"` 等(许可证)
|
||||
- `\"creator\":{\"uuid\":\"...\"}`
|
||||
- `\"attachments\":[{ name, src, mime, ext, size, md5, download_count, uuid }, ...]`
|
||||
- `<title>` 含项目名;`<meta name="description">` 含 introduction
|
||||
|
||||
### 文件下载
|
||||
- **附件** (`attachments[].src`):`https://image.lceda.cn{src}`
|
||||
- 例:`/attachments/2020/7/mRn5hQZRhmx5r4usGxFmy8BXsCIHw5QoAT5HaLGC.pdf`
|
||||
- 已验证 HTTP 200,无鉴权
|
||||
- 覆盖 PDF / ZIP / MP4 等
|
||||
- **工程源文件** (`fs-web-stream.jlc.com/fs-web-stream/file-operation/download/<snowflake-id>`)
|
||||
- HTML 里出现,但能否直接下载未测试
|
||||
- 优先级:P1;v0.1 先不抓
|
||||
|
||||
### 未找到 / 留作后续
|
||||
- EasyEDA 工程源 JSON(schematic/PCB 的真正源):推测在 `u.lceda.cn` 下,需登录
|
||||
- 项目详情 JSON API:`/api/project/<uuid>` 返回 `{"code":104001,"success":false}`(试过 GET/POST/路径形式均失败,疑似此端点需 session)
|
||||
|
||||
## 已知字段与 schema 映射
|
||||
|
||||
| 本项目 schema 字段 | oshwhub 来源 |
|
||||
|-----|-----|
|
||||
| `source` | 常量 `"oshwhub"` |
|
||||
| `source_url` | `https://oshwhub.com/<path>` |
|
||||
| `project_id` | `uuid` |
|
||||
| `title` | `name` |
|
||||
| `description` | HTML `<meta description>` + 长描述(HTML 正文截取) |
|
||||
| `author` | `owner.nickname` / `owner.username` |
|
||||
| `license` | HTML 嵌入 JSON 的 `license` 字段 |
|
||||
| `created_at` / `updated_at` | 列表 API 同名字段 |
|
||||
| `crawled_at` | 运行时写入 |
|
||||
| `tags` | 列表 API `tags` |
|
||||
| `files[]` | `attachments[]` 映射 |
|
||||
| `metrics` | `count.{like,star,fork,views}` + `grade` |
|
||||
|
||||
## 速率与礼貌
|
||||
|
||||
- 列表 API:空载实测 < 300ms,无限流
|
||||
- 详情页 HTML:~500KB/个,建议 QPS ≤ 0.5
|
||||
- 附件:CDN `image.lceda.cn`,无需限流但建议 1s 间隔
|
||||
|
||||
## 陷阱 / 待确认
|
||||
|
||||
1. `fs-web-stream.jlc.com` 下载是否需 referer / cookie,未测
|
||||
2. 长描述(含图片、表格)的 HTML 提取保真度,可能需要保留原 HTML
|
||||
3. `license` 字段取值集合未枚举完(已见:`GPL 3.0` / `CC-BY-SA`...需全量跑后统计)
|
||||
4. `grade=4` 大概率是精品徽章但文档未说明具体判据
|
||||
57
log.md
@@ -4,6 +4,63 @@
|
||||
|
||||
---
|
||||
|
||||
## 2026-04-23 19:30 Phase 1 MVP:10 个高质量 oshwhub 项目入库
|
||||
|
||||
**Claude 会话**:承接仓库初始化
|
||||
|
||||
### API 调研结论
|
||||
|
||||
- 列表 API:`GET https://oshwhub.com/api/project?page=N&pageSize=M&sort=hot`,无鉴权,返回 12493 个项目元数据(含 grade / likes / stars / views / forks)
|
||||
- 详情:`GET https://oshwhub.com/<path>` 是 SSR HTML,嵌入 escaped JSON,含 `license` + `attachments[]`(每个带 name / src / size / md5 / ext / mime / download_count)
|
||||
- 附件 CDN:`https://image.lceda.cn{src}` — 已验证无鉴权直接下载
|
||||
- EasyEDA 工程源 JSON(`u.lceda.cn`)需登录,v0.1 不抓
|
||||
- 详细调研见 `docs/sources/oshwhub.md`
|
||||
|
||||
### 选 10 个高质量项目
|
||||
|
||||
判据:`grade == 4`(平台精品徽章) + `likes ≥ 100` + 应用领域多样(避免同类堆叠)+ 排除 `_copy` 派生仓。
|
||||
|
||||
10 个项目覆盖:调试器、加热台、盖革计数器、可调电源、焊台、智能手表、USB 测电流、ZVS 感应加热、AI 开发板、红外热成像。
|
||||
|
||||
### MVP 爬虫
|
||||
|
||||
位置:`crawlers/oshwhub/crawler.py`
|
||||
|
||||
- `list_projects()` — 列表 API 分页
|
||||
- `pick_top()` — 按 like×3 + star + fork×2 + views/100 + comments×2 + grade×50 排序
|
||||
- `parse_detail_html()` — 从 SSR HTML 提取 title / license / description / attachments
|
||||
- `crawl_one()` — 每项目产出:`metadata.json` / `description.md` / `cover.*` / `files/*` / `_urls.json`
|
||||
- QPS ≤ 0.5(`SLEEP_BETWEEN = 2.0`),UA 显式声明 `FacereDataset/0.1`
|
||||
|
||||
### 抓取与入库
|
||||
|
||||
- 10/10 成功,52 个附件,**524 MB**
|
||||
- Gitea LFS(v25.4.3 原生支持)+ 本地 `git-lfs 3.5.1`(用户态二进制装在 `~/.local/bin/`)
|
||||
- `.gitattributes` 规则:`data/raw/**/files/**` 一律走 LFS;元数据(metadata.json / description.md / \_urls.json / cover.\*)走普通 git
|
||||
- 每项目目录结构:
|
||||
```
|
||||
data/raw/oshwhub/<uuid>/
|
||||
├── metadata.json # 按 schemas/project.schema.json
|
||||
├── description.md
|
||||
├── cover.{jpg,png,jpeg}
|
||||
├── _urls.json # 所有原始 URL 清单
|
||||
└── files/* # 原始附件(LFS)
|
||||
```
|
||||
|
||||
### 改动汇总
|
||||
|
||||
- 新增:`crawlers/oshwhub/{__init__,__main__,crawler}.py`、`schemas/project.schema.json`、`docs/sources/oshwhub.md`、`pyproject.toml`
|
||||
- 修改:`.gitattributes`(缩窄到 `data/raw/**/files/**`)、`.gitignore`(移除 `data/raw/*` 排除)
|
||||
|
||||
### 下一步建议给 Charles
|
||||
|
||||
1. 验收 10 个项目元数据质量(随机抽 2-3 条对照原站)
|
||||
2. 决定 Phase 1.4 放量目标(50?500?全量 12493?)
|
||||
3. 未解决:`fs-web-stream.jlc.com` 下载(工程源?)、`u.lceda.cn` 登录态抓工程 JSON
|
||||
4. Phase 2 准备:GitHub KiCad repo 调研
|
||||
|
||||
---
|
||||
|
||||
## 2026-04-23 18:50 仓库初始化 & 数据源调研
|
||||
|
||||
**Claude 会话**:初始化
|
||||
|
||||