CogletESP-camera-version/docs/新手零门槛搭建 ESP32 + OV3660 摄像头 MJPEG 流服务器(ESP-IDF v5.1.6 适配版)_esp32+ov3660-CSDN博客.html
Rdzleo f1c2bfce93 Phase 01 JPEG Dump 诊断 + YVYU 修正 + 矛盾分析汇总
核心变更:
- face_tracker.cc: YUYV→YVYU 序列修正(byte[1]=V, byte[3]=U),
  基于 JPEG Dump 诊断工具验证 OV3660 FORMAT_CTRL00=0x61 实际是 YVYU
- face_tracker.cc: 启动时 base64 打印一帧 JPEG 到串口,用于肉眼验证
- config.h: XCLK 20MHz→10MHz,给飞线信号完整性 2x 裕度
- scripts/auto_capture_jpeg.py: 自动串口抓帧工具(DTR/RTS 复位 + base64 解码)
- scripts/extract_jpeg_from_log.py: 从日志离线提取 JPEG
- Coglet项目分析与开发指南.md: 新增"六点六"章节,汇总 Phase 01
  主要矛盾(画面可辨识≠模型可识别)、YUV→RGB 色偏三层原因、
  esp-dl 模型输入分布敏感性、延迟分析、三方案对比、方案 B 突破口
- docs/: 新增 2 篇 OV3660 相关 CSDN 参考资料

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 11:01:02 +08:00

3183 lines
313 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<link rel="canonical" href="https://blog.csdn.net/qq_42807924/article/details/158542939"/>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="renderer" content="webkit"/>
<meta name="force-rendering" content="webkit"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
<meta name="report" content='{"pid": "blog", "spm":"1001.2101"}'>
<meta name="referrer" content="always">
<meta http-equiv="Cache-Control" content="no-siteapp" /><link rel="alternate" media="handheld" href="#" />
<meta name="shenma-site-verification" content="5a59773ab8077d4a62bf469ab966a63b_1497598848">
<meta name="applicable-device" content="pc">
<link href="https://g.csdnimg.cn/static/logo/favicon32.ico" rel="shortcut icon" type="image/x-icon" />
<title>新手零门槛搭建 ESP32 + OV3660 摄像头 MJPEG 流服务器ESP-IDF v5.1.6 适配版_esp32+ov3660-CSDN博客</title>
<script type="application/ld+json">
{"datePublished":"2026-03-01T20:07:12+08:00","@type":"Article","author":[{"@type":"Person","name":"qq_42807924","url":"https://blog.csdn.net/qq_42807924"}],"dateModified":"2026-04-06T22:16:48+08:00","@context":"https://schema.org","headline":"新手零门槛搭建 ESP32 + OV3660 摄像头 MJPEG 流服务器ESP-IDF v5.1.6 适配版)"}
</script>
<script>
(function(){
var el = document.createElement("script");
el.src = "https://s3a.pstatp.com/toutiao/push.js?1abfa13dfe74d72d41d83c86d240de427e7cac50c51ead53b2e79d40c7952a23ed7716d05b4a0f683a653eab3e214672511de2457e74e99286eb2c33f4428830";
el.id = "ttzz";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(el, s);
})(window)
</script>
<meta name="keywords" content="服务器,运维,esp32,嵌入式开发,物联网,AI">
<meta name="csdn-baidu-search" content='{"autorun":true,"install":true,"keyword":"ESP32 OV3660"}'>
<meta name="description" content="文章浏览阅读828次点赞17次收藏18次。零基础新手保姆级教程用 ESP32-CAM + OV3660 搭建 MJPEG 流服务器ESP-IDF v5.1.6 适配,解决 SOI 缺失、Edge 不兼容、编译报错等问题代码可直接复制使用。_esp32+ov3660">
<link rel="stylesheet" type="text/css" href="https://csdnimg.cn/release/blogv2/dist/pc/css/detail_enter-3956053afb.min.css">
<script type="application/ld+json">{"@context":"https://ziyuan.baidu.com/contexts/cambrian.jsonld","@id":"https://blog.csdn.net/qq_42807924/article/details/158542939","appid":"1638831770136827","pubDate":"2026-03-01T19:55:15","title":"新手零门槛搭建 ESP32 + OV3660 摄像头 MJPEG 流服务器ESP-IDF v5.1.6 适配版_esp32+ov3660-CSDN博客","upDate":"2026-03-01T20:07:12"}</script>
<link rel="stylesheet" type="text/css" href="https://csdnimg.cn/release/blogv2/dist/pc/themesSkin/skin-blackboard/skin-blackboard-3adcc2c475.min.css">
<script src="https://g.csdnimg.cn/lib/jquery/1.12.4/jquery.min.js" type="text/javascript"></script>
<script src="https://g.csdnimg.cn/lib/jquery-migrate/1.4.1/jquery-migrate.js" type="text/javascript"></script>
<script type="text/javascript">
var isCorporate = false;
var username = "qq_42807924";
var skinImg = "white";
var blog_address = "https://yunjingshan.blog.csdn.net";
var currentUserName = "weixin_40298538";
var isOwner = false;
var loginUrl = "http://passport.csdn.net/account/login?from=https://blog.csdn.net/qq_42807924/article/details/158542939";
var blogUrl = "https://blog.csdn.net/";
var starMapUrl = "https://ai.csdn.net";
var inscodeHost = "https://inscode.csdn.net";
var paymentBalanceUrl = "https://csdnimg.cn/release/vip-business-components/vipPaymentBalance.js?v=2025122501";
var appBlogDomain = "https://app-blog.csdn.net";
var avatar = "https://profile-avatar.csdnimg.cn/81c124b92b654588bc74a98c0be3c684_qq_42807924.jpg!1";
var isCJBlog = false;
var isStarMap = false;
var articleTitle = "新手零门槛搭建 ESP32 + OV3660 摄像头 MJPEG 流服务器ESP-IDF v5.1.6 适配版)";
var articleDesc = "文章浏览阅读828次点赞17次收藏18次。零基础新手保姆级教程用 ESP32-CAM + OV3660 搭建 MJPEG 流服务器ESP-IDF v5.1.6 适配,解决 SOI 缺失、Edge 不兼容、编译报错等问题代码可直接复制使用。_esp32+ov3660";
var articleTitles = "新手零门槛搭建 ESP32 + OV3660 摄像头 MJPEG 流服务器ESP-IDF v5.1.6 适配版_esp32+ov3660-CSDN博客";
var nickName = "云敬山";
var articleDetailUrl = "https://yunjingshan.blog.csdn.net/article/details/158542939";
var vipUrlV = "https://mall.csdn.net/vip?vipSource=learningVip";
if(window.location.host.split('.').length == 3) {
blog_address = blogUrl + username;
}
var skinStatus = "White";
var blogStaticHost = "https://csdnimg.cn/release/blogv2/"
var payColumn = false
</script>
<meta name="toolbar" content='{"type":"0","fixModel":"1"}'>
<script ript src="https://g.csdnimg.cn/??fixed-sidebar/1.1.7/fixed-sidebar.js" type="text/javascript"></script>
<script src='//g.csdnimg.cn/common/csdn-report/report.js' type='text/javascript'></script>
<link rel="stylesheet" type="text/css" href="https://csdnimg.cn/public/sandalstrap/1.4/css/sandalstrap.min.css">
<style>
.MathJax_Message, .MathJax_Preview{
display: none !important;
}
</style>
<script src="https://dup.baidustatic.com/js/ds.js"></script>
<script type="text/javascript">
(function(c,l,a,r,i,t,y){
c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)};
t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i;
y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y);
})(window, document, "clarity", "script", "lgtpix6r85");
</script>
<script src="/cdn_cgi_bs_bot/static/crypto.min.js"></script>
<script src="/cdn_cgi_bs_bot/static/bot-score-v1.js"></script>
<script src="/cdn_cgi_bs_captcha/static/js/waf_captcha_embedded_bs.js"></script>
</head>
<body class="nodata " style="">
<div id="toolbarBox" style="min-height: 48px;"></div>
<script>
var toolbarSearchExt = '{\"id\":158542939,\"landingWord\":[\"esp32+ov3660\"],\"queryWord\":\"ESP32 OV3660\",\"tag\":[\"服务器\",\"运维\",\"esp32\",\"嵌入式开发\",\"物联网\",\"AI\"],\"title\":\"新手零门槛搭建 ESP32 + OV3660 摄像头 MJPEG 流服务器ESP-IDF v5.1.6 适配版)\"}';
</script>
<script src="https://g.csdnimg.cn/common/csdn-toolbar/csdn-toolbar.js" type="text/javascript"></script>
<script>
(function(){
var bp = document.createElement('script');
var curProtocol = window.location.protocol.split(':')[0];
if (curProtocol === 'https') {
bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
}
else {
bp.src = 'http://push.zhanzhang.baidu.com/push.js';
}
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(bp, s);
})();
</script>
<link rel="stylesheet" href="https://csdnimg.cn/release/blogv2/dist/pc/css/blog_code-01256533b5.min.css">
<link rel="stylesheet" href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/chart-3456820cac.css" />
<link rel="stylesheet" href="https://g.csdnimg.cn/lib/swiper/6.0.4/css/swiper.css" />
<script src="https://g.csdnimg.cn/lib/swiper/6.0.4/js/swiper.js" async></script>
<script>
var articleId = 158542939;
var annotationModuleBootstrapData = {
hasAnnotation: false,
totalCount: 0,
list: [],
categories: []
};
var annotationFeatureEnabled = false;
var privateEduData = [];
var privateData = [];
var crytojs = "https://csdnimg.cn/release/blogv2/dist/components/js/crytojs-ca5b8bf6ae.min.js";
var commentscount = 1;
var commentAuth = 2;
var curentUrl = "https://blog.csdn.net/qq_42807924/article/details/158542939";
var myUrl = "https://my.csdn.net/";
var isGitCodeBlog = false;
var vipActivityIcon = "";
var isOpenSourceBlog = false;
var isVipArticle = false;
var highlight = ["嵌入式开发","mjpeg","esp32","3660","流服务器","esp","摄像头","物联网","idf","服务器","新手","适配","搭建","门槛","ov","ai","运维","版","(",")","+","-",".","1","5","6","零"];//高亮数组
var isRecommendModule = true;
var isBaiduPre = true;
var baiduCount = 2;
var setBaiduJsCount = 10;
var viewCountFormat = 828;
var share_card_url = "https://app-blog.csdn.net/share?article_id=158542939&username=qq_42807924"
var mallVipUrl = "https://mall.csdn.net/vip?vipSource=article"
var vipArticleAbStyle = "t_2"
var vipArticleCpStyle = "t_2"
var detailheaderAbCommunity = "control"
var codeAiAbStyle = "exp1"
var runProjectDeepBlogAB = "isRunProject is false"
var gitcodeHighlightWordAB = "exp1"
var asideCknowsEntryAB = "exp1"
var deepblogUrl = ""
deepblogUrl = "https://deepblog.net?utm_source=blog_onekey_run";
var codeAiAbObjStyle = ""
codeAiAbObjStyle = "{\"control\":{\"title\":\"AI写代码\",\"destUrl\":\"https://trae.com.cn?utm_source=community&utm_medium=csdn&utm_campaign=daima\",\"imgUrl\":\"https://i-operation.csdnimg.cn/images/a5fff6f6c9f0464c9a46b130c972952b.png\"},\"exp1\":{\"title\":\"一键获取完整项目代码\",\"runClose\":true,\"destUrl\":\"https://inscode.net?utm_source=blog_code_block\",\"imgUrl\":\"https://i-operation.csdnimg.cn/images/4648c13ca82a446ea1bfb99876a27770.png\",\"blogUrl\":true},\"control_run_project\": {\"title\": \"运行项目并下载源码\",\"destUrl\": \"\",\"imgUrl\":\"https://i-operation.csdnimg.cn/images/46c457a2cf8b4b9b8f17a2ab71461d4a.png\"},\"control_deepblog\": {\"title\": \"AI生成项目\",\"destUrl\": \"https://inscode.net?utm_source=blog_code_block_fixed\",\"imgUrl\":\"https://i-operation.csdnimg.cn/images/9899ea0f099e4e4e8b1fcdb918a27fcd.png\",\"blogUrl\": true},\"exp2\":{\"title\":\"智能体编程\",\"destUrl\":\"https://qoder.com/referral?referral_code=kyKxftaZjisNKOow777DARC0j35axVBq\",\"imgUrl\":\"https://i-operation.csdnimg.cn/images/afa15dc565924b96a783f4db37687511.png\"},\"exp3\":{\"title\":\"AI构建项目\",\"destUrl\":\"https://t.csdnimg.cn/9I17\",\"imgUrl\":\"https://i-operation.csdnimg.cn/images/bf18ebff2c3748d59ea0f95954bb4b4a.png\"}}";
var aiSideSegment = -1;
aiSideSegment = "16";
var articleType = 1;
var baiduKey = "ESP32 OV3660";
var copyPopSwitch = true;
var needInsertBaidu = true;
var recommendRegularDomainArr = ["blog.csdn.net/.+/article/details/","download.csdn.net/download/","edu.csdn.net/course/detail/","ask.csdn.net/questions/","bbs.csdn.net/topics/","www.csdn.net/gather_.+/"]
var codeStyle = "dracula";
var baiduSearchType = "utm_term";
var sharData = "{\"hot\":[{\"id\":1,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/a5f4260710904e538002a6ab337939b3.png\"},{\"id\":2,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/188b37199a2c4b74b1d9ffc39e0d52de.png\"},{\"id\":3,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/14ded358b631444581edd98a256bc5af.png\"},{\"id\":4,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/1470f23a770444d986ad551b9c33c5be.png\"},{\"id\":5,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/c329f5181dc74f6c9bd28c982bb9f91d.png\"},{\"id\":6,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/ccd8a3305e81460f9c505c95b432a65f.png\"},{\"id\":7,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/bc89d8283389440d97fc4d30e30f45e1.png\"},{\"id\":8,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/452d485b4a654f5592390550d2445edf.png\"},{\"id\":9,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/f8b9939db2ed474a8f43a643015fc8b7.png\"},{\"id\":10,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/6de8864187ab4ed3b1db0856369c36ff.png\"},{\"id\":11,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/673cc3470ff74072acba958dc0c46e2d.png\"},{\"id\":12,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/930c119760ac4491804db80f9c6d4e3f.png\"},{\"id\":13,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/15e6befb05a24233bc2b65e96aa8d972.png\"},{\"id\":14,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/2075fd6822184b95a41e214de4daec13.png\"},{\"id\":15,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/859b1552db244eb6891a809263a5c657.png\"},{\"id\":16,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/0be2f920f1f74290a98921974a9613fd.png\"},{\"id\":17,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/2e97e00b43f14afab494ea55ef3f4a6e.png\"},{\"id\":18,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/ff4ab252f46e444686f5135d6ebbfec0.png\"},{\"id\":19,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/ae029bbe99564e79911657912d36524f.png\"},{\"id\":20,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/b3ece39963de440388728e9e7b9bf427.png\"},{\"id\":21,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/6f14651a99ba486e926d63b6fa692997.png\"},{\"id\":22,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/83ceddf050084875a341e32dcceca721.png\"},{\"id\":23,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/b90368b8fd5d4c6c8c79a707d877cf7c.png\"},{\"id\":24,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/aeffae14ecf14e079b2616528c9a393b.png\"},{\"id\":25,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/c5a06b5a13d44d16bed868fc3384897a.png\"},{\"id\":26,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/08b697658b844b318cea3b119e9541ef.png\"},{\"id\":27,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/68ccb0b8d09346ac961d2b5c1a8c77bf.png\"},{\"id\":28,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/a2227a247e37418cbe0ea972ba6a859b.png\"},{\"id\":29,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/3a42825fede748f9993e5bb844ad350d.png\"},{\"id\":30,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/8882abc1dd484224b636966ea38555c3.png\"},{\"id\":31,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/4f6a5f636a3e444d83cf8cc06d87a159.png\"},{\"id\":32,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/1953ef79c56b4407b78d7181bdff11c3.png\"},{\"id\":33,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/c04a2a4f772948ed85b5b0380ed36287.png\"},{\"id\":34,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/5b4fecd05091405ea04d8c0f53e9f2c7.png\"},{\"id\":35,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/b89f576d700344e280d6ceb2a66c2420.png\"},{\"id\":36,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/1c65780e11804bbd9971ebadb3d78bcf.png\"},{\"id\":37,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/d590db2055f345db9706eb68a7ec151a.png\"},{\"id\":38,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/fe602f80700b4f6fb3c4a9e4c135510e.png\"},{\"id\":39,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/39ff2fcd31e04feba301a071976a0ba7.png\"},{\"id\":40,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/f9b61b3d113f436b828631837f89fb39.png\"},{\"id\":41,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/df1aca5f610c4ad48cd16da88c9c8499.png\"},{\"id\":42,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/d7acf73a1e6b41399a77a85040e10961.png\"},{\"id\":43,\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/b7f1b63542524b97962ff649ab4e7e23.png\"}],\"vip\":[{\"id\":1,\"vipUrl\":\"https:\\/\\/img-home.csdnimg.cn\\/images\\/20220920101150.png\",\"url\":\"https:\\/\\/img-home.csdnimg.cn\\/images\\/20220920101154.png\"},{\"id\":2,\"vipUrl\":\"https:\\/\\/img-home.csdnimg.cn\\/images\\/20220920101204.png\",\"url\":\"https:\\/\\/img-home.csdnimg.cn\\/images\\/20220920101208.png\"},{\"id\":3,\"vipUrl\":\"https:\\/\\/img-home.csdnimg.cn\\/images\\/20220920101211.png\",\"url\":\"https:\\/\\/img-home.csdnimg.cn\\/images\\/20220920101215.png\"},{\"id\":4,\"vipUrl\":\"https:\\/\\/img-home.csdnimg.cn\\/images\\/20220920101218.png\",\"url\":\"https:\\/\\/img-home.csdnimg.cn\\/images\\/20220920101220.png\"},{\"id\":5,\"vipUrl\":\"https:\\/\\/img-home.csdnimg.cn\\/images\\/20220920101223.png\",\"url\":\"https:\\/\\/img-home.csdnimg.cn\\/images\\/20220920101226.png\"},{\"id\":6,\"vipUrl\":\"https:\\/\\/img-home.csdnimg.cn\\/images\\/20220922100635.png\",\"url\":\"https:\\/\\/img-home.csdnimg.cn\\/images\\/20220922100639.png\"},{\"id\":7,\"vipUrl\":\"https:\\/\\/img-home.csdnimg.cn\\/images\\/20220922100642.png\",\"url\":\"https:\\/\\/img-home.csdnimg.cn\\/images\\/20220922100644.png\"},{\"id\":8,\"vipUrl\":\"https:\\/\\/img-home.csdnimg.cn\\/images\\/20220922100647.png\",\"url\":\"https:\\/\\/img-home.csdnimg.cn\\/images\\/20220922100649.png\"},{\"id\":9,\"vipUrl\":\"https:\\/\\/img-home.csdnimg.cn\\/images\\/20220922100652.png\",\"url\":\"https:\\/\\/img-home.csdnimg.cn\\/images\\/20220922100655.png\"},{\"id\":10,\"vipUrl\":\"https:\\/\\/img-blog.csdnimg.cn\\/55de67481fde4b04b97ad78f11fe369a.png\",\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/bb2418fb537e4d78b10d8765ccd810c5.png\"},{\"id\":11,\"vipUrl\":\"https:\\/\\/img-blog.csdnimg.cn\\/579c713394584d128104ef1044023954.png\",\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/f420d9fbcf5548079d31b5e809b6d6cd.png\"},{\"id\":12,\"vipUrl\":\"https:\\/\\/img-blog.csdnimg.cn\\/75b7f3155ba642f5a4cc16b7baf44122.png\",\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/a9030f5877be401f8b340b80b0d91e64.png\"},{\"id\":13,\"vipUrl\":\"https:\\/\\/img-blog.csdnimg.cn\\/0903d33cafa54934be3780aa54ae958d.png\",\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/2cd8c8929f5a42fca5da2a0aeb456203.png\"},{\"id\":14,\"vipUrl\":\"https:\\/\\/img-blog.csdnimg.cn\\/949fd7c22884439fbfc3c0e9c3b8dee7.png\",\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/dafbea9bd9eb4f3b962b48dc41657f89.png\"},{\"id\":15,\"vipUrl\":\"https:\\/\\/img-blog.csdnimg.cn\\/4119cfddd71d4e6a8a27a18dbb74d90e.png\",\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/c56310c8b6384d9e85388e4e342ce508.png\"},{\"id\":16,\"vipUrl\":\"https:\\/\\/img-blog.csdnimg.cn\\/121575274da142bcbbbbc2e8243dd411.png\",\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/5013993de06542f881018bb9abe2edf7.png\"},{\"id\":17,\"vipUrl\":\"https:\\/\\/img-blog.csdnimg.cn\\/4d97aa6dd4fe4f09a6bef5bdf8a6abcd.png\",\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/76f23877b6ad4066ad45ce8e31b4b977.png\"},{\"id\":18,\"vipUrl\":\"https:\\/\\/img-blog.csdnimg.cn\\/fdb619daf21b4c829de63b9ebc78859d.png\",\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/a1abe5d27a5441f599adfe662f510243.png\"},{\"id\":19,\"vipUrl\":\"https:\\/\\/img-blog.csdnimg.cn\\/676b7707bb11410f8f56bc0ed2b2345c.png\",\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/7ac5b467fbf24e1d8c2de3f3332c4f54.png\"},{\"id\":20,\"vipUrl\":\"https:\\/\\/img-blog.csdnimg.cn\\/0becb8cc227e4723b765bdd69a20fd4a.png\",\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/fdec85b26091486b9a89d0b8d45c3749.png\"},{\"id\":21,\"vipUrl\":\"https:\\/\\/img-blog.csdnimg.cn\\/1a6c06235ad44941b38c54cbc25a370c.png\",\"url\":\"https:\\/\\/img-blog.csdnimg.cn\\/410a06cda2d44b0c84578f88275caf70.png\"}],\"map\":{\"hot\":\"热门\",\"vip\":\"VIP\"}}";
var commentListModule = ''
var canRead = true;
var blogMoveHomeArticle = false;
var showSearchText = "";
var articleSource = 1;
var articleReport = '{"pid": "blog", "spm":"1001.2101"}';
var baiduSearchChannel = 'pc_relevant'
var baiduSearchIdentification = '.235^v43^pc_blog_bottom_relevance_base4'
var distRequestId = '1776767558949_28716'
var initRewardObject = {
giver: currentUserName,
anchor: username,
articleId: articleId,
sign: ''
}
var isLikeStatus = false;
var isUnLikeStatus = false;
var studyLearnWord = "";
var unUseCount = 0;
var codeMaxSize = 0;
var overCost = true;
var isCurrentUserVip = false;
var contentViewsHeight = 0;
var contentViewsCount = 0;
var contentViewsCountLimit = 5;
var isShowConcision = true
var lastTime = "2026-04-06 22:16:48"
var postTime = "2026-03-01 20:07:12"
var isCookieConcision = false
var isHasDirectoryModel = false
var isShowSideModel = false
var isShowDirectoryModel = true
function getCookieConcision(sName){
var allCookie = document.cookie.split("; ");
for (var i=0; i < allCookie.length; i++){
var aCrumb = allCookie[i].split("=");
if (sName == aCrumb[0])
return aCrumb[1];
}
return null;
}
if (getCookieConcision('blog_details_concision') && getCookieConcision('blog_details_concision') == 0){
isCookieConcision = true
isShowSideModel = true
isShowDirectoryModel = false
}
</script>
<div class="main_father clearfix d-flex justify-content-center mainfather-concision" style="height:100%;">
<div class="container clearfix container-concision" id="mainBox">
<script>
if (!isCookieConcision) {
$('.main_father').removeClass('mainfather-concision')
$('.main_father .container').removeClass('container-concision')
} else {
$('#mainBox').css('margin-right', '0')
}
</script>
<main>
<script type="text/javascript">
var resourceId = "";
function getQueryString(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象
var r = window.location.search.substr(1).match(reg); //匹配目标参数
if( r != null ) return decodeURIComponent( r[2] ); return '';
}
function stripscript(s){
var pattern = new RegExp("[`~!@#$^&*()=|{}':;',\\[\\].<>/?~@#¥……&*()——|{}【】‘;:”“'。,、?%]")
var rs = "";
for (var i = 0; i < s.length; i++) {
rs = rs+s.substr(i, 1).replace(pattern, '');
}
return rs;
}
var blogHotWords = stripscript(getQueryString('utm_term')).length > 1 ? stripscript(getQueryString('utm_term')) : ''
</script>
<div class="blog-content-box">
<div class="article-header-box" id="article-header-box">
<div class="article-header">
<div class="article-title-box">
<h1 class="title-article" id="articleContentId">新手零门槛搭建 ESP32 + OV3660 摄像头 MJPEG 流服务器ESP-IDF v5.1.6 适配版)</h1>
</div>
<div class="article-info-box">
<div class="article-bar-top">
<div class="bar-content active">
<span class="article-type-text original">原创</span>
<span class="time">已于&nbsp;2026-04-06 22:16:48&nbsp;修改</span>
<span class="border-dian">·</span>
<span class="read-count">828 阅读</span>
<div class="read-count-box is-like like-ab-new" data-type="top">
<span class="border-dian">·</span>
<img class="article-read-img article-heard-img active" style="display:none" id="is-like-imgactive-new" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newHeart2023Active.png" alt="">
<img class="article-read-img article-heard-img" style="display:block" id="is-like-img-new" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newHeart2023Black.png" alt="">
<span class="read-count" id="blog-digg-num" style="color:;">
17
</span>
</div>
<span class="border-dian">·</span>
<a id="blog_detail_zk_collection" class="un-collection" data-report-click='{"mod":"popu_823","spm":"1001.2101.3001.4232","ab":"new"}'>
<img class="article-collect-img article-heard-img un-collect-status isdefault" style="display:inline-block" src="https://csdnimg.cn/release/blogv2/dist/pc/img/tobarCollect2.png" alt="">
<img class="article-collect-img article-heard-img collect-status isactive" style="display:none" src="https://csdnimg.cn/release/blogv2/dist/pc/img/tobarCollectionActive2.png" alt="">
<span class="get-collection">
18
</span>
</a>
<span class="border-dian">·</span>
<div class="href-article-edit-new">
<span class="href-article-edit-click">CC 4.0 BY-SA版权</span>
<div class="slide-content-box-new">
版权声明:本文为博主原创文章,遵循<a href="http://creativecommons.org/licenses/by/4.0/" target="_blank" rel="noopener"> CC 4.0 BY </a>版权协议,转载请附上原文出处链接和本声明。
</div>
</div>
</div>
<div class="operating active">
</div>
</div>
<div class="blog-tags-box">
<div class="tags-box artic-tag-box">
<div class="article-tag">
<span class="label">文章标签:</span>
<p>
<a rel="nofollow" data-report-query="spm=1001.2101.3001.4223" data-report-click='{"mod":"popu_626","spm":"1001.2101.3001.4223","strategy":"服务器","ab":"new","extra":"{\"searchword\":\"服务器\"}"}' data-report-view='{"mod":"popu_626","spm":"1001.2101.3001.4223","strategy":"服务器","ab":"new","extra":"{\"searchword\":\"服务器\"}"}' class="tag-link-new" href="https://so.csdn.net/so/search/s.do?q=%E6%9C%8D%E5%8A%A1%E5%99%A8&amp;t=all&amp;o=vip&amp;s=&amp;l=&amp;f=&amp;viparticle=&amp;from_tracking_code=tag_word&amp;from_code=app_blog_art" target="_blank" rel="noopener">#服务器</a>
<a rel="nofollow" data-report-query="spm=1001.2101.3001.4223" data-report-click='{"mod":"popu_626","spm":"1001.2101.3001.4223","strategy":"运维","ab":"new","extra":"{\"searchword\":\"运维\"}"}' data-report-view='{"mod":"popu_626","spm":"1001.2101.3001.4223","strategy":"运维","ab":"new","extra":"{\"searchword\":\"运维\"}"}' class="tag-link-new" href="https://so.csdn.net/so/search/s.do?q=%E8%BF%90%E7%BB%B4&amp;t=all&amp;o=vip&amp;s=&amp;l=&amp;f=&amp;viparticle=&amp;from_tracking_code=tag_word&amp;from_code=app_blog_art" target="_blank" rel="noopener">#运维</a>
<a rel="nofollow" data-report-query="spm=1001.2101.3001.4223" data-report-click='{"mod":"popu_626","spm":"1001.2101.3001.4223","strategy":"esp32","ab":"new","extra":"{\"searchword\":\"esp32\"}"}' data-report-view='{"mod":"popu_626","spm":"1001.2101.3001.4223","strategy":"esp32","ab":"new","extra":"{\"searchword\":\"esp32\"}"}' class="tag-link-new" href="https://so.csdn.net/so/search/s.do?q=esp32&amp;t=all&amp;o=vip&amp;s=&amp;l=&amp;f=&amp;viparticle=&amp;from_tracking_code=tag_word&amp;from_code=app_blog_art" target="_blank" rel="noopener">#esp32</a>
<a rel="nofollow" data-report-query="spm=1001.2101.3001.4223" data-report-click='{"mod":"popu_626","spm":"1001.2101.3001.4223","strategy":"嵌入式开发","ab":"new","extra":"{\"searchword\":\"嵌入式开发\"}"}' data-report-view='{"mod":"popu_626","spm":"1001.2101.3001.4223","strategy":"嵌入式开发","ab":"new","extra":"{\"searchword\":\"嵌入式开发\"}"}' class="tag-link-new" href="https://so.csdn.net/so/search/s.do?q=%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91&amp;t=all&amp;o=vip&amp;s=&amp;l=&amp;f=&amp;viparticle=&amp;from_tracking_code=tag_word&amp;from_code=app_blog_art" target="_blank" rel="noopener">#嵌入式开发</a>
<a rel="nofollow" data-report-query="spm=1001.2101.3001.4223" data-report-click='{"mod":"popu_626","spm":"1001.2101.3001.4223","strategy":"物联网","ab":"new","extra":"{\"searchword\":\"物联网\"}"}' data-report-view='{"mod":"popu_626","spm":"1001.2101.3001.4223","strategy":"物联网","ab":"new","extra":"{\"searchword\":\"物联网\"}"}' class="tag-link-new" href="https://so.csdn.net/so/search/s.do?q=%E7%89%A9%E8%81%94%E7%BD%91&amp;t=all&amp;o=vip&amp;s=&amp;l=&amp;f=&amp;viparticle=&amp;from_tracking_code=tag_word&amp;from_code=app_blog_art" target="_blank" rel="noopener">#物联网</a>
<a rel="nofollow" data-report-query="spm=1001.2101.3001.4223" data-report-click='{"mod":"popu_626","spm":"1001.2101.3001.4223","strategy":"AI","ab":"new","extra":"{\"searchword\":\"AI\"}"}' data-report-view='{"mod":"popu_626","spm":"1001.2101.3001.4223","strategy":"AI","ab":"new","extra":"{\"searchword\":\"AI\"}"}' class="tag-link-new" href="https://so.csdn.net/so/search/s.do?q=AI&amp;t=all&amp;o=vip&amp;s=&amp;l=&amp;f=&amp;viparticle=&amp;from_tracking_code=tag_word&amp;from_code=app_blog_art" target="_blank" rel="noopener">#AI</a>
</p>
</div>
<p class="community-name" id="community-name"></p>
</div>
</div>
<div class="up-time"><span>&nbsp;2026-03-01 20:07:12&nbsp;首次发布</span></div>
</div>
</div>
</div>
<div id="blogHuaweiyunAdvert" class=""></div>
<div id="blogColumnPayAdvert" class="">
<div class="column-group">
<div class="column-group-item column-group0 column-group-item-one">
<div class="item-l">
<a class="item-target" href="https://blog.csdn.net/qq_42807924/category_13134725.html" target="_blank" title="ESP32 嵌入式开发"
data-report-view='{"spm":"1001.2101.3001.6332"}'
data-report-click='{"spm":"1001.2101.3001.6332"}'>
<img class="item-target" src="https://i-blog.csdnimg.cn/columns/default/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_224,w_224" alt="">
<span class="title item-target">
<span>
<span class="tit">ESP32 嵌入式开发</span>
<span class="dec">专栏收录该内容</span>
</span>
</span>
</a>
</div>
<div class="item-m">
<span>5 篇文章</span>
</div>
<div class="item-r">
<a class="item-target article-column-bt articleColumnFreeBt" data-id="13134725">订阅专栏</a>
</div>
</div>
</div>
</div>
<article class="baidu_pl">
<div id="article_content" class="article_content clearfix">
<link rel="stylesheet" href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/kdoc_html_views-1a98987dfd.css">
<link rel="stylesheet" href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-a50b13a894.css">
<div id="content_views" class="markdown_views prism-dracula">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
<path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path>
</svg>
<h3><a id="_1"></a>前言</h3>
<p>本文专为<strong>零基础新手</strong>打造&#xff0c;<strong>硬件选型与接线</strong><strong>开发环境准备</strong><strong>代码编写与编译</strong><strong>最终访问摄像头流</strong>&#xff0c;全程保姆级教程。基于 ESP-IDF v5.1.6 开发&#xff0c;完美适配 OV3660 摄像头与微软 Edge 浏览器&#xff0c;代码可直接复制使用&#xff0c;一次性解决「编译报错」「SOI 标记缺失」「Edge 无法解析流」等核心问题。</p>
<h3><a id="_4"></a>一、核心目标</h3>
<p>用 ESP32-CAM 开发板 &#43; OV3660 摄像头&#xff0c;搭建一个 MJPEG 视频流服务器&#xff0c;通过 WiFi 连接后&#xff0c;在浏览器中输入 ESP32 局域网 IP&#xff0c;即可实时查看摄像头画面。</p>
<h3><a id="_7"></a>二、硬件架构与选型</h3>
<h4><a id="1__8"></a>1. 核心硬件清单&#xff08;新手必买&#xff0c;无兼容问题&#xff09;</h4>
<table><thead><tr><th>硬件名称</th><th>规格要求</th><th>作用</th></tr></thead><tbody><tr><td>ESP32-CAM 开发板</td><td>搭载 ESP32-WROOM-32 核心&#xff0c;无 PSRAM 版本即可</td><td>核心控制单元&#xff0c;负责 WiFi 通信、摄像头驱动、HTTP 服务器运行</td></tr><tr><td>OV3660 摄像头模块</td><td>适配 ESP32-CAM 引脚&#xff0c;自带排线</td><td>图像采集&#xff0c;输出 JPEG 格式图像</td></tr><tr><td>ESP32-CAM 专用烧录座</td><td>适配 ESP32-CAM 引脚&#xff0c;支持一键烧录</td><td>替代 USB 转 TTL&#xff0c;简化烧录流程&#xff0c;无需手动接 IO0</td></tr><tr><td>USB 数据线</td><td>Micro USB 接口&#xff0c;适配烧录座</td><td>给烧录座供电&#xff0c;传输烧录数据</td></tr></tbody></table>
<h4><a id="2__16"></a>2. 硬件架构原理</h4>
<div class="mermaid mermaid-newversion mermaid-flowchart">
<svg id="mermaid-svg-4BmQsvjQuGGxEK48" width="100%" xmlns="http://www.w3.org/2000/svg" class="flowchart" style="max-width: 1907.3125px;" viewbox="0 0 1907.3125 88">
<style>#mermaid-svg-4BmQsvjQuGGxEK48{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-4BmQsvjQuGGxEK48 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-4BmQsvjQuGGxEK48 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-4BmQsvjQuGGxEK48 .error-icon{fill:#552222;}#mermaid-svg-4BmQsvjQuGGxEK48 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-4BmQsvjQuGGxEK48 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-4BmQsvjQuGGxEK48 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-4BmQsvjQuGGxEK48 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-4BmQsvjQuGGxEK48 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-4BmQsvjQuGGxEK48 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-4BmQsvjQuGGxEK48 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-4BmQsvjQuGGxEK48 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-4BmQsvjQuGGxEK48 .marker.cross{stroke:#333333;}#mermaid-svg-4BmQsvjQuGGxEK48 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-4BmQsvjQuGGxEK48 p{margin:0;}#mermaid-svg-4BmQsvjQuGGxEK48 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-4BmQsvjQuGGxEK48 .cluster-label text{fill:#333;}#mermaid-svg-4BmQsvjQuGGxEK48 .cluster-label span{color:#333;}#mermaid-svg-4BmQsvjQuGGxEK48 .cluster-label span p{background-color:transparent;}#mermaid-svg-4BmQsvjQuGGxEK48 .label text,#mermaid-svg-4BmQsvjQuGGxEK48 span{fill:#333;color:#333;}#mermaid-svg-4BmQsvjQuGGxEK48 .node rect,#mermaid-svg-4BmQsvjQuGGxEK48 .node circle,#mermaid-svg-4BmQsvjQuGGxEK48 .node ellipse,#mermaid-svg-4BmQsvjQuGGxEK48 .node polygon,#mermaid-svg-4BmQsvjQuGGxEK48 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-4BmQsvjQuGGxEK48 .rough-node .label text,#mermaid-svg-4BmQsvjQuGGxEK48 .node .label text,#mermaid-svg-4BmQsvjQuGGxEK48 .image-shape .label,#mermaid-svg-4BmQsvjQuGGxEK48 .icon-shape .label{text-anchor:middle;}#mermaid-svg-4BmQsvjQuGGxEK48 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-4BmQsvjQuGGxEK48 .rough-node .label,#mermaid-svg-4BmQsvjQuGGxEK48 .node .label,#mermaid-svg-4BmQsvjQuGGxEK48 .image-shape .label,#mermaid-svg-4BmQsvjQuGGxEK48 .icon-shape .label{text-align:center;}#mermaid-svg-4BmQsvjQuGGxEK48 .node.clickable{cursor:pointer;}#mermaid-svg-4BmQsvjQuGGxEK48 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-4BmQsvjQuGGxEK48 .arrowheadPath{fill:#333333;}#mermaid-svg-4BmQsvjQuGGxEK48 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-4BmQsvjQuGGxEK48 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-4BmQsvjQuGGxEK48 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-4BmQsvjQuGGxEK48 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-4BmQsvjQuGGxEK48 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-4BmQsvjQuGGxEK48 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-4BmQsvjQuGGxEK48 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-4BmQsvjQuGGxEK48 .cluster text{fill:#333;}#mermaid-svg-4BmQsvjQuGGxEK48 .cluster span{color:#333;}#mermaid-svg-4BmQsvjQuGGxEK48 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-4BmQsvjQuGGxEK48 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-4BmQsvjQuGGxEK48 rect.text{fill:none;stroke-width:0;}#mermaid-svg-4BmQsvjQuGGxEK48 .icon-shape,#mermaid-svg-4BmQsvjQuGGxEK48 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-4BmQsvjQuGGxEK48 .icon-shape p,#mermaid-svg-4BmQsvjQuGGxEK48 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-4BmQsvjQuGGxEK48 .icon-shape .label rect,#mermaid-svg-4BmQsvjQuGGxEK48 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-4BmQsvjQuGGxEK48 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-4BmQsvjQuGGxEK48 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-4BmQsvjQuGGxEK48 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}</style>
<g>
<marker id="mermaid-svg-4BmQsvjQuGGxEK48_flowchart-v2-pointEnd" class="marker flowchart-v2" viewbox="0 0 10 10" refx="5" refy="5" markerunits="userSpaceOnUse" markerwidth="8" markerheight="8" orient="auto">
<path d="M 0 0 L 10 5 L 0 10 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path>
</marker>
<marker id="mermaid-svg-4BmQsvjQuGGxEK48_flowchart-v2-pointStart" class="marker flowchart-v2" viewbox="0 0 10 10" refx="4.5" refy="5" markerunits="userSpaceOnUse" markerwidth="8" markerheight="8" orient="auto">
<path d="M 0 5 L 10 10 L 10 0 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path>
</marker>
<marker id="mermaid-svg-4BmQsvjQuGGxEK48_flowchart-v2-circleEnd" class="marker flowchart-v2" viewbox="0 0 10 10" refx="11" refy="5" markerunits="userSpaceOnUse" markerwidth="11" markerheight="11" orient="auto">
<circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></circle>
</marker>
<marker id="mermaid-svg-4BmQsvjQuGGxEK48_flowchart-v2-circleStart" class="marker flowchart-v2" viewbox="0 0 10 10" refx="-1" refy="5" markerunits="userSpaceOnUse" markerwidth="11" markerheight="11" orient="auto">
<circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></circle>
</marker>
<marker id="mermaid-svg-4BmQsvjQuGGxEK48_flowchart-v2-crossEnd" class="marker cross flowchart-v2" viewbox="0 0 11 11" refx="12" refy="5.2" markerunits="userSpaceOnUse" markerwidth="11" markerheight="11" orient="auto">
<path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"></path>
</marker>
<marker id="mermaid-svg-4BmQsvjQuGGxEK48_flowchart-v2-crossStart" class="marker cross flowchart-v2" viewbox="0 0 11 11" refx="-1" refy="5.2" markerunits="userSpaceOnUse" markerwidth="11" markerheight="11" orient="auto">
<path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"></path>
</marker>
<g class="root">
<g class="clusters"></g>
<g class="edgePaths">
<path d="M174.563,44L184.063,44C193.563,44,212.563,44,230.896,44C249.229,44,266.896,44,275.729,44L284.563,44" id="L_A_B_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" marker-end="url(#mermaid-svg-4BmQsvjQuGGxEK48_flowchart-v2-pointEnd)"></path>
<path d="M463.594,44L473.094,44C482.594,44,501.594,44,519.927,44C538.26,44,555.927,44,564.76,44L573.594,44" id="L_B_C_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" marker-end="url(#mermaid-svg-4BmQsvjQuGGxEK48_flowchart-v2-pointEnd)"></path>
<path d="M716.391,44L737.224,44C758.057,44,799.724,44,840.724,44C881.724,44,922.057,44,942.224,44L962.391,44" id="L_C_D_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" marker-end="url(#mermaid-svg-4BmQsvjQuGGxEK48_flowchart-v2-pointEnd)"></path>
<path d="M1146.969,44L1162.204,44C1177.44,44,1207.911,44,1237.716,44C1267.521,44,1296.659,44,1311.228,44L1325.797,44" id="L_D_E_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" marker-end="url(#mermaid-svg-4BmQsvjQuGGxEK48_flowchart-v2-pointEnd)"></path>
<path d="M1540.375,44L1559.953,44C1579.531,44,1618.688,44,1657.177,44C1695.667,44,1733.49,44,1752.401,44L1771.313,44" id="L_E_F_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" marker-end="url(#mermaid-svg-4BmQsvjQuGGxEK48_flowchart-v2-pointEnd)"></path>
</g>
<g class="edgeLabels">
<g class="edgeLabel" transform="translate(231.5625, 44)">
<g class="label" transform="translate(-32, -12)">
<foreignobject width="64" height="24">
<div class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;">
<span class="edgeLabel"><p>图像采集</p></span>
</div>
</foreignobject>
</g>
</g>
<g class="edgeLabel" transform="translate(520.59375, 44)">
<g class="label" transform="translate(-32, -12)">
<foreignobject width="64" height="24">
<div class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;">
<span class="edgeLabel"><p>数据传输</p></span>
</div>
</foreignobject>
</g>
</g>
<g class="edgeLabel" transform="translate(841.390625, 44)">
<g class="label" transform="translate(-100, -36)">
<foreignobject width="200" height="72">
<div class="labelBkg" style="display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;">
<span class="edgeLabel"><p>处理核心<br />JPEG 校验、WiFi 通信、HTTP 服务器</p></span>
</div>
</foreignobject>
</g>
</g>
<g class="edgeLabel" transform="translate(1238.3828125, 44)">
<g class="label" transform="translate(-66.4140625, -12)">
<foreignobject width="132.828125" height="24">
<div class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;">
<span class="edgeLabel"><p>网络中转 无线连接</p></span>
</div>
</foreignobject>
</g>
</g>
<g class="edgeLabel" transform="translate(1657.84375, 44)">
<g class="label" transform="translate(-92.46875, -12)">
<foreignobject width="184.9375" height="24">
<div class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;">
<span class="edgeLabel"><p>解析 MJPEG 流并显示画面</p></span>
</div>
</foreignobject>
</g>
</g>
</g>
<g class="nodes">
<g class="node default" id="flowchart-A-0" transform="translate(91.28125, 44)">
<rect class="basic label-container" style="" x="-83.28125" y="-27" width="166.5625" height="54"></rect>
<g class="label" style="" transform="translate(-53.28125, -12)">
<rect></rect>
<foreignobject width="106.5625" height="24">
<div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 580px; text-align: center;">
<span class="nodeLabel"><p>OV3660 摄像头</p></span>
</div>
</foreignobject>
</g>
</g>
<g class="node default" id="flowchart-B-1" transform="translate(376.078125, 44)">
<rect class="basic label-container" style="" x="-87.515625" y="-27" width="175.03125" height="54"></rect>
<g class="label" style="" transform="translate(-57.515625, -12)">
<rect></rect>
<foreignobject width="115.03125" height="24">
<div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 580px; text-align: center;">
<span class="nodeLabel"><p>ESP32-CAM 引脚</p></span>
</div>
</foreignobject>
</g>
</g>
<g class="node default" id="flowchart-C-3" transform="translate(646.9921875, 44)">
<rect class="basic label-container" style="" x="-69.3984375" y="-27" width="138.796875" height="54"></rect>
<g class="label" style="" transform="translate(-39.3984375, -12)">
<rect></rect>
<foreignobject width="78.796875" height="24">
<div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 580px; text-align: center;">
<span class="nodeLabel"><p>ESP32 核心</p></span>
</div>
</foreignobject>
</g>
</g>
<g class="node default" id="flowchart-D-5" transform="translate(1056.6796875, 44)">
<rect class="basic label-container" style="" x="-90.2890625" y="-27" width="180.578125" height="54"></rect>
<g class="label" style="" transform="translate(-60.2890625, -12)">
<rect></rect>
<foreignobject width="120.578125" height="24">
<div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 580px; text-align: center;">
<span class="nodeLabel"><p>家庭 WiFi 路由器</p></span>
</div>
</foreignobject>
</g>
</g>
<g class="node default" id="flowchart-E-7" transform="translate(1435.0859375, 44)">
<rect class="basic label-container" style="" x="-105.2890625" y="-27" width="210.578125" height="54"></rect>
<g class="label" style="" transform="translate(-75.2890625, -12)">
<rect></rect>
<foreignobject width="150.578125" height="24">
<div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 580px; text-align: center;">
<span class="nodeLabel"><p>浏览器 Edge/Chrome</p></span>
</div>
</foreignobject>
</g>
</g>
<g class="node default" id="flowchart-F-9" transform="translate(1837.3125, 44)">
<rect class="basic label-container" style="" x="-62" y="-27" width="124" height="54"></rect>
<g class="label" style="" transform="translate(-32, -12)">
<rect></rect>
<foreignobject width="64" height="24">
<div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 580px; text-align: center;">
<span class="nodeLabel"><p>显示画面</p></span>
</div>
</foreignobject>
</g>
</g>
</g>
</g>
</g>
</svg>
</div>
<h4><a id="3__27"></a>3. 硬件实物图&#xff08;新手直观参考&#xff09;</h4>
<p>以下是 ESP32-CAM &#43; OV3660 &#43; 烧录座的实物图&#xff0c;新手可直接对照购买&#xff1a;<br /> <img src="https://i-blog.csdnimg.cn/direct/fb53d81341814061ac9d944b5a19e59b.png#pic_center" alt="在这里插入图片描述" /></p>
<h4><a id="4__33"></a>4. 硬件接线&#xff08;使用烧录座&#xff0c;零难度&#xff09;</h4>
<h5><a id="1ESP32CAM__34"></a>&#xff08;1&#xff09;ESP32-CAM 与烧录座接线</h5>
<ol><li>将 ESP32-CAM 开发板<strong>金手指朝下</strong>&#xff0c;插入烧录座的对应插槽&#xff1b;</li><li>确保 ESP32-CAM 与烧录座引脚完全对齐&#xff0c;无偏移。</li></ol>
<h5><a id="2_USB__38"></a>&#xff08;2&#xff09;烧录座与 USB 数据线接线</h5>
<p>直接将 Micro USB 数据线插入烧录座的 Micro USB 接口&#xff0c;另一端插入电脑 USB 口即可&#xff08;无需额外接线&#xff09;</p>
<h5><a id="3ESP32CAM__OV3660__41"></a>&#xff08;3&#xff09;ESP32-CAM 与 OV3660 接线</h5>
<p>直接将 OV3660 自带的排线插入 ESP32-CAM 的摄像头接口即可&#xff08;注意排线方向&#xff0c;金手指朝向开发板正面&#xff09;</p>
<h3><a id="ESPIDF_v516_44"></a>三、开发环境准备&#xff08;ESP-IDF v5.1.6&#xff09;</h3>
<blockquote>
<p>已安装 ESP-IDF v5.1.6 的新手可跳过此步骤&#xff0c;直接进入「四、项目搭建」。</p>
</blockquote>
<h4><a id="1__ESPIDF_Tools_47"></a>1. 下载并安装 ESP-IDF Tools</h4>
<ol><li>访问 ESP 官方下载页&#xff1a;https://dl.espressif.com/dl/esp-idf/</li><li>下载 <strong>ESP-IDF v5.1.6</strong> 对应的 Windows 安装包&#xff08;<code>esp-idf-tools-setup-5.1.6.exe</code>&#xff09;&#xff1b;</li><li>双击安装&#xff0c;一路默认下一步&#xff0c;<strong>记住安装路径</strong>&#xff08;例如 <code>D:\ESP32\esp-idf\v5.1.6</code>&#xff09;</li></ol>
<h4><a id="2__VS_Code__52"></a>2. 配置 VS Code 开发环境</h4>
<ol><li>安装 VS Code&#xff0c;在扩展商店搜索并安装 <strong>Espressif IDF</strong> 插件&#xff08;作者&#xff1a;Espressif Systems&#xff09;&#xff1b;</li><li>打开 VS Code&#xff0c;<code>Ctrl&#43;Shift&#43;P</code>&#xff0c;输入 <code>ESP-IDF: Configure ESP-IDF Extension</code>&#xff1b;</li><li>选择「Use an existing ESP-IDF directory」&#xff0c;找到并选择刚才安装的 ESP-IDF v5.1.6 路径&#xff1b;</li><li>等待插件配置完成&#xff0c;底部状态栏显示「ESP-IDF: 5.1.6」即成功。</li></ol>
<h3><a id="_58"></a>四、新手重建项目&#xff08;核心步骤&#xff09;</h3>
<h4><a id="_1_59"></a>步骤 1&#xff1a;创建新项目</h4>
<ol><li>打开 VS Code&#xff0c;<code>Ctrl&#43;Shift&#43;P</code>&#xff0c;输入 <code>ESP-IDF: New Project</code>&#xff1b;</li><li>项目名称填写 <code>web-camera-ov3660</code>&#xff0c;保存路径自定义&#xff08;例如 <code>D:\ESP32\web-camera-ov3660</code>&#xff09;&#xff1b;</li><li>模板选择 <code>esp32</code><code>blank</code>&#xff08;空白项目&#xff09;&#xff0c;点击「Create」。</li></ol>
<h4><a id="_2_64"></a>步骤 2&#xff1a;创建核心文件</h4>
<p>在项目的 <code>main</code> 目录下&#xff0c;删除默认的 <code>main.c</code>&#xff0c;新建以下 <strong>6 个文件</strong>&#xff1a;<br /> <code>app_main.c</code><code>app_wifi.c</code><code>app_wifi.h</code><code>app_camera.c</code><code>app_camera.h</code><code>app_httpd.c</code><code>app_httpd.h</code></p>
<h4><a id="_3_68"></a>步骤 3&#xff1a;复制代码&#xff08;直接粘贴&#xff0c;无需修改&#xff09;</h4>
<blockquote>
<p>所有代码已适配 ESP-IDF v5.1.6&#xff0c;解决「SOI 标记缺失」「Edge 兼容性」「编译报错」问题。</p>
</blockquote>
<h5><a id="1_app_mainc_71"></a>1. app_main.c&#xff08;程序入口&#xff09;</h5>
<pre><code class="prism language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&#34;esp_log.h&#34;</span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&#34;nvs_flash.h&#34;</span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&#34;app_wifi.h&#34;</span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&#34;app_camera.h&#34;</span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&#34;app_httpd.h&#34;</span></span>
<span class="token keyword">static</span> <span class="token keyword">const</span> <span class="token keyword">char</span> <span class="token operator">*</span>TAG <span class="token operator">&#61;</span> <span class="token string">&#34;MAIN&#34;</span><span class="token punctuation">;</span>
<span class="token keyword">void</span> <span class="token function">app_main</span><span class="token punctuation">(</span><span class="token keyword">void</span><span class="token punctuation">)</span>
<span class="token punctuation">{<!-- --></span>
<span class="token comment">// 1. 初始化 NVS&#xff08;WiFi 依赖&#xff09;</span>
<span class="token class-name">esp_err_t</span> err <span class="token operator">&#61;</span> <span class="token function">nvs_flash_init</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span>err <span class="token operator">&#61;&#61;</span> ESP_ERR_NVS_NO_FREE_PAGES <span class="token operator">||</span> err <span class="token operator">&#61;&#61;</span> ESP_ERR_NVS_NEW_VERSION_FOUND<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
<span class="token function">ESP_ERROR_CHECK</span><span class="token punctuation">(</span><span class="token function">nvs_flash_erase</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
err <span class="token operator">&#61;</span> <span class="token function">nvs_flash_init</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token function">ESP_ERROR_CHECK</span><span class="token punctuation">(</span>err<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token function">ESP_LOGI</span><span class="token punctuation">(</span>TAG<span class="token punctuation">,</span> <span class="token string">&#34;NVS 初始化成功&#34;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 2. 初始化 WiFi&#xff08;直接调用&#xff0c;无返回值&#xff09;</span>
<span class="token function">wifi_init_sta</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token function">ESP_LOGI</span><span class="token punctuation">(</span>TAG<span class="token punctuation">,</span> <span class="token string">&#34;WiFi 初始化完成&#34;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 3. 初始化 OV3660 摄像头</span>
err <span class="token operator">&#61;</span> <span class="token function">app_camera_main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span>err <span class="token operator">!&#61;</span> ESP_OK<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
<span class="token function">ESP_LOGE</span><span class="token punctuation">(</span>TAG<span class="token punctuation">,</span> <span class="token string">&#34;摄像头初始化失败&#xff01;错误码&#xff1a;0x%x&#34;</span><span class="token punctuation">,</span> err<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">return</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token function">ESP_LOGI</span><span class="token punctuation">(</span>TAG<span class="token punctuation">,</span> <span class="token string">&#34;摄像头初始化成功&#34;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 4. 启动 HTTP 服务器</span>
<span class="token class-name">httpd_handle_t</span> server <span class="token operator">&#61;</span> <span class="token function">start_webserver</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span>server <span class="token operator">&#61;&#61;</span> <span class="token constant">NULL</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
<span class="token function">ESP_LOGE</span><span class="token punctuation">(</span>TAG<span class="token punctuation">,</span> <span class="token string">&#34;HTTP 服务器启动失败&#34;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">return</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token function">ESP_LOGI</span><span class="token punctuation">(</span>TAG<span class="token punctuation">,</span> <span class="token string">&#34;系统初始化完成&#xff01;访问&#xff1a;http://ESP32_IP/ 查看摄像头&#34;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre>
<h5><a id="2_app_wificWiFi___WiFi__114"></a>2. app_wifi.c&#xff08;WiFi 连接实现&#xff09; 替换为你的 WiFi 名称和密码</h5>
<pre><code class="prism language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&lt;string.h&gt;</span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&#34;freertos/FreeRTOS.h&#34;</span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&#34;freertos/task.h&#34;</span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&#34;freertos/event_groups.h&#34;</span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&#34;esp_log.h&#34;</span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&#34;esp_wifi.h&#34;</span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&#34;esp_netif.h&#34;</span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&#34;esp_event.h&#34;</span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&#34;app_wifi.h&#34;</span></span>
<span class="token keyword">static</span> <span class="token keyword">const</span> <span class="token keyword">char</span> <span class="token operator">*</span>TAG <span class="token operator">&#61;</span> <span class="token string">&#34;WIFI&#34;</span><span class="token punctuation">;</span>
<span class="token keyword">static</span> EventGroupHandle_t s_wifi_event_group<span class="token punctuation">;</span>
<span class="token comment">// &#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61; 新手修改处 &#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;</span>
<span class="token comment">// 替换为你的 WiFi 名称和密码</span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">WIFI_SSID</span> <span class="token string">&#34;替换为你的 WiFi 名称&#34;</span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">WIFI_PASSWORD</span> <span class="token string">&#34;替换为你的 WiFi 密码&#34;</span></span>
<span class="token comment">// &#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;</span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">WIFI_CONNECTED_BIT</span> <span class="token expression">BIT0</span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">WIFI_FAIL_BIT</span> <span class="token expression">BIT1</span></span>
<span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">wifi_event_handler</span><span class="token punctuation">(</span><span class="token keyword">void</span><span class="token operator">*</span> arg<span class="token punctuation">,</span> <span class="token class-name">esp_event_base_t</span> event_base<span class="token punctuation">,</span>
<span class="token class-name">int32_t</span> event_id<span class="token punctuation">,</span> <span class="token keyword">void</span><span class="token operator">*</span> event_data<span class="token punctuation">)</span>
<span class="token punctuation">{<!-- --></span>
<span class="token keyword">if</span> <span class="token punctuation">(</span>event_base <span class="token operator">&#61;&#61;</span> WIFI_EVENT <span class="token operator">&amp;&amp;</span> event_id <span class="token operator">&#61;&#61;</span> WIFI_EVENT_STA_START<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
<span class="token function">esp_wifi_connect</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>event_base <span class="token operator">&#61;&#61;</span> WIFI_EVENT <span class="token operator">&amp;&amp;</span> event_id <span class="token operator">&#61;&#61;</span> WIFI_EVENT_STA_DISCONNECTED<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
<span class="token function">ESP_LOGW</span><span class="token punctuation">(</span>TAG<span class="token punctuation">,</span> <span class="token string">&#34;WiFi 断开&#xff0c;重试连接...&#34;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token function">esp_wifi_connect</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token function">xEventGroupClearBits</span><span class="token punctuation">(</span>s_wifi_event_group<span class="token punctuation">,</span> WIFI_CONNECTED_BIT<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>event_base <span class="token operator">&#61;&#61;</span> IP_EVENT <span class="token operator">&amp;&amp;</span> event_id <span class="token operator">&#61;&#61;</span> IP_EVENT_STA_GOT_IP<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
<span class="token class-name">ip_event_got_ip_t</span><span class="token operator">*</span> event <span class="token operator">&#61;</span> <span class="token punctuation">(</span><span class="token class-name">ip_event_got_ip_t</span><span class="token operator">*</span><span class="token punctuation">)</span> event_data<span class="token punctuation">;</span>
<span class="token function">ESP_LOGI</span><span class="token punctuation">(</span>TAG<span class="token punctuation">,</span> <span class="token string">&#34;WiFi 连接成功&#xff0c;IP地址&#xff1a;&#34;</span> IPSTR<span class="token punctuation">,</span> <span class="token function">IP2STR</span><span class="token punctuation">(</span><span class="token operator">&amp;</span>event<span class="token operator">-&gt;</span>ip_info<span class="token punctuation">.</span>ip<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token function">xEventGroupSetBits</span><span class="token punctuation">(</span>s_wifi_event_group<span class="token punctuation">,</span> WIFI_CONNECTED_BIT<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token keyword">void</span> <span class="token function">wifi_init_sta</span><span class="token punctuation">(</span><span class="token keyword">void</span><span class="token punctuation">)</span>
<span class="token punctuation">{<!-- --></span>
s_wifi_event_group <span class="token operator">&#61;</span> <span class="token function">xEventGroupCreate</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 初始化网络接口</span>
<span class="token function">ESP_ERROR_CHECK</span><span class="token punctuation">(</span><span class="token function">esp_netif_init</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token function">ESP_ERROR_CHECK</span><span class="token punctuation">(</span><span class="token function">esp_event_loop_create_default</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token function">esp_netif_create_default_wifi_sta</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 初始化 WiFi 驱动</span>
<span class="token class-name">wifi_init_config_t</span> cfg <span class="token operator">&#61;</span> <span class="token function">WIFI_INIT_CONFIG_DEFAULT</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token function">ESP_ERROR_CHECK</span><span class="token punctuation">(</span><span class="token function">esp_wifi_init</span><span class="token punctuation">(</span><span class="token operator">&amp;</span>cfg<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 注册事件回调</span>
<span class="token class-name">esp_event_handler_instance_t</span> instance_any_id<span class="token punctuation">;</span>
<span class="token class-name">esp_event_handler_instance_t</span> instance_got_ip<span class="token punctuation">;</span>
<span class="token function">ESP_ERROR_CHECK</span><span class="token punctuation">(</span><span class="token function">esp_event_handler_instance_register</span><span class="token punctuation">(</span>WIFI_EVENT<span class="token punctuation">,</span>
ESP_EVENT_ANY_ID<span class="token punctuation">,</span>
<span class="token operator">&amp;</span>wifi_event_handler<span class="token punctuation">,</span>
<span class="token constant">NULL</span><span class="token punctuation">,</span>
<span class="token operator">&amp;</span>instance_any_id<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token function">ESP_ERROR_CHECK</span><span class="token punctuation">(</span><span class="token function">esp_event_handler_instance_register</span><span class="token punctuation">(</span>IP_EVENT<span class="token punctuation">,</span>
IP_EVENT_STA_GOT_IP<span class="token punctuation">,</span>
<span class="token operator">&amp;</span>wifi_event_handler<span class="token punctuation">,</span>
<span class="token constant">NULL</span><span class="token punctuation">,</span>
<span class="token operator">&amp;</span>instance_got_ip<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 配置 WiFi 账号密码</span>
<span class="token class-name">wifi_config_t</span> wifi_config <span class="token operator">&#61;</span> <span class="token punctuation">{<!-- --></span>
<span class="token punctuation">.</span>sta <span class="token operator">&#61;</span> <span class="token punctuation">{<!-- --></span>
<span class="token punctuation">.</span>ssid <span class="token operator">&#61;</span> WIFI_SSID<span class="token punctuation">,</span>
<span class="token punctuation">.</span>password <span class="token operator">&#61;</span> WIFI_PASSWORD<span class="token punctuation">,</span>
<span class="token punctuation">.</span>threshold<span class="token punctuation">.</span>authmode <span class="token operator">&#61;</span> WIFI_AUTH_WPA2_PSK<span class="token punctuation">,</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span><span class="token punctuation">;</span>
<span class="token function">ESP_ERROR_CHECK</span><span class="token punctuation">(</span><span class="token function">esp_wifi_set_mode</span><span class="token punctuation">(</span>WIFI_MODE_STA<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token function">ESP_ERROR_CHECK</span><span class="token punctuation">(</span><span class="token function">esp_wifi_set_config</span><span class="token punctuation">(</span>WIFI_IF_STA<span class="token punctuation">,</span> <span class="token operator">&amp;</span>wifi_config<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token function">ESP_ERROR_CHECK</span><span class="token punctuation">(</span><span class="token function">esp_wifi_start</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 等待 WiFi 连接完成</span>
<span class="token function">xEventGroupWaitBits</span><span class="token punctuation">(</span>s_wifi_event_group<span class="token punctuation">,</span>
WIFI_CONNECTED_BIT <span class="token operator">|</span> WIFI_FAIL_BIT<span class="token punctuation">,</span>
pdFALSE<span class="token punctuation">,</span>
pdFALSE<span class="token punctuation">,</span>
portMAX_DELAY<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre>
<h5><a id="3_app_wifihWiFi__202"></a>3. app_wifi.h&#xff08;WiFi 函数声明&#xff09;</h5>
<pre><code class="prism language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">ifndef</span> <span class="token expression">_APP_WIFI_H_</span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">_APP_WIFI_H_</span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">ifdef</span> <span class="token expression">__cplusplus</span></span>
<span class="token keyword">extern</span> <span class="token string">&#34;C&#34;</span> <span class="token punctuation">{<!-- --></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">endif</span></span>
<span class="token keyword">void</span> <span class="token function">wifi_init_sta</span><span class="token punctuation">(</span><span class="token keyword">void</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">ifdef</span> <span class="token expression">__cplusplus</span></span>
<span class="token punctuation">}</span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">endif</span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">endif</span> <span class="token comment">/* _APP_WIFI_H_ */</span></span>
</code></pre>
<h5><a id="4_app_cameracOV3660__SOI__220"></a>4. app_camera.c&#xff08;OV3660 摄像头驱动&#xff0c;解决 SOI 缺失&#xff09;</h5>
<pre><code class="prism language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&#34;app_camera.h&#34;</span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&#34;esp_camera.h&#34;</span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&#34;driver/gpio.h&#34;</span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&#34;esp_log.h&#34;</span></span>
<span class="token comment">// ESP32-CAM 与 OV3660 引脚匹配</span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">CAM_PIN_PWDN</span> <span class="token expression"><span class="token number">32</span></span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">CAM_PIN_RESET</span> <span class="token expression"><span class="token operator">-</span><span class="token number">1</span></span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">CAM_PIN_XCLK</span> <span class="token expression"><span class="token number">0</span></span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">CAM_PIN_SIOD</span> <span class="token expression"><span class="token number">26</span></span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">CAM_PIN_SIOC</span> <span class="token expression"><span class="token number">27</span></span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">CAM_PIN_D7</span> <span class="token expression"><span class="token number">35</span></span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">CAM_PIN_D6</span> <span class="token expression"><span class="token number">34</span></span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">CAM_PIN_D5</span> <span class="token expression"><span class="token number">39</span></span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">CAM_PIN_D4</span> <span class="token expression"><span class="token number">36</span></span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">CAM_PIN_D3</span> <span class="token expression"><span class="token number">21</span></span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">CAM_PIN_D2</span> <span class="token expression"><span class="token number">19</span></span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">CAM_PIN_D1</span> <span class="token expression"><span class="token number">18</span></span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">CAM_PIN_D0</span> <span class="token expression"><span class="token number">5</span></span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">CAM_PIN_VSYNC</span> <span class="token expression"><span class="token number">25</span></span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">CAM_PIN_HREF</span> <span class="token expression"><span class="token number">23</span></span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">CAM_PIN_PCLK</span> <span class="token expression"><span class="token number">22</span></span></span>
<span class="token keyword">static</span> <span class="token keyword">const</span> <span class="token keyword">char</span> <span class="token operator">*</span>TAG <span class="token operator">&#61;</span> <span class="token string">&#34;CAMERA&#34;</span><span class="token punctuation">;</span>
<span class="token class-name">esp_err_t</span> <span class="token function">app_camera_main</span><span class="token punctuation">(</span><span class="token keyword">void</span><span class="token punctuation">)</span>
<span class="token punctuation">{<!-- --></span>
<span class="token comment">// OV3660 专用配置&#xff08;解决 SOI 标记缺失&#xff09;</span>
<span class="token class-name">camera_config_t</span> camera_config <span class="token operator">&#61;</span> <span class="token punctuation">{<!-- --></span>
<span class="token punctuation">.</span>pin_pwdn <span class="token operator">&#61;</span> CAM_PIN_PWDN<span class="token punctuation">,</span>
<span class="token punctuation">.</span>pin_reset <span class="token operator">&#61;</span> CAM_PIN_RESET<span class="token punctuation">,</span>
<span class="token punctuation">.</span>pin_xclk <span class="token operator">&#61;</span> CAM_PIN_XCLK<span class="token punctuation">,</span>
<span class="token punctuation">.</span>pin_sccb_sda <span class="token operator">&#61;</span> CAM_PIN_SIOD<span class="token punctuation">,</span>
<span class="token punctuation">.</span>pin_sccb_scl <span class="token operator">&#61;</span> CAM_PIN_SIOC<span class="token punctuation">,</span>
<span class="token punctuation">.</span>pin_d7 <span class="token operator">&#61;</span> CAM_PIN_D7<span class="token punctuation">,</span>
<span class="token punctuation">.</span>pin_d6 <span class="token operator">&#61;</span> CAM_PIN_D6<span class="token punctuation">,</span>
<span class="token punctuation">.</span>pin_d5 <span class="token operator">&#61;</span> CAM_PIN_D5<span class="token punctuation">,</span>
<span class="token punctuation">.</span>pin_d4 <span class="token operator">&#61;</span> CAM_PIN_D4<span class="token punctuation">,</span>
<span class="token punctuation">.</span>pin_d3 <span class="token operator">&#61;</span> CAM_PIN_D3<span class="token punctuation">,</span>
<span class="token punctuation">.</span>pin_d2 <span class="token operator">&#61;</span> CAM_PIN_D2<span class="token punctuation">,</span>
<span class="token punctuation">.</span>pin_d1 <span class="token operator">&#61;</span> CAM_PIN_D1<span class="token punctuation">,</span>
<span class="token punctuation">.</span>pin_d0 <span class="token operator">&#61;</span> CAM_PIN_D0<span class="token punctuation">,</span>
<span class="token punctuation">.</span>pin_vsync <span class="token operator">&#61;</span> CAM_PIN_VSYNC<span class="token punctuation">,</span>
<span class="token punctuation">.</span>pin_href <span class="token operator">&#61;</span> CAM_PIN_HREF<span class="token punctuation">,</span>
<span class="token punctuation">.</span>pin_pclk <span class="token operator">&#61;</span> CAM_PIN_PCLK<span class="token punctuation">,</span>
<span class="token punctuation">.</span>xclk_freq_hz <span class="token operator">&#61;</span> <span class="token number">10000000</span><span class="token punctuation">,</span> <span class="token comment">// 降频到 10MHz&#xff0c;稳定编码</span>
<span class="token punctuation">.</span>ledc_timer <span class="token operator">&#61;</span> LEDC_TIMER_0<span class="token punctuation">,</span>
<span class="token punctuation">.</span>ledc_channel <span class="token operator">&#61;</span> LEDC_CHANNEL_0<span class="token punctuation">,</span>
<span class="token punctuation">.</span>pixel_format <span class="token operator">&#61;</span> PIXFORMAT_JPEG<span class="token punctuation">,</span> <span class="token comment">// 强制 JPEG 格式</span>
<span class="token punctuation">.</span>frame_size <span class="token operator">&#61;</span> FRAMESIZE_QVGA<span class="token punctuation">,</span> <span class="token comment">// 320x240&#xff0c;适配无 PSRAM</span>
<span class="token punctuation">.</span>jpeg_quality <span class="token operator">&#61;</span> <span class="token number">10</span><span class="token punctuation">,</span> <span class="token comment">// 降低质量&#xff0c;避免数据溢出</span>
<span class="token punctuation">.</span>fb_count <span class="token operator">&#61;</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token comment">// 双缓冲区&#xff0c;防止数据丢失</span>
<span class="token punctuation">.</span>fb_location <span class="token operator">&#61;</span> CAMERA_FB_IN_DRAM<span class="token punctuation">,</span>
<span class="token punctuation">.</span>grab_mode <span class="token operator">&#61;</span> CAMERA_GRAB_WHEN_EMPTY
<span class="token punctuation">}</span><span class="token punctuation">;</span>
<span class="token comment">// 初始化摄像头</span>
<span class="token class-name">esp_err_t</span> err <span class="token operator">&#61;</span> <span class="token function">esp_camera_init</span><span class="token punctuation">(</span><span class="token operator">&amp;</span>camera_config<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span>err <span class="token operator">!&#61;</span> ESP_OK<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
<span class="token function">ESP_LOGE</span><span class="token punctuation">(</span>TAG<span class="token punctuation">,</span> <span class="token string">&#34;摄像头初始化失败&#xff01;错误码&#xff1a;0x%x&#34;</span><span class="token punctuation">,</span> err<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">return</span> err<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token comment">// 强制锁定 JPEG 配置&#xff0c;杜绝 RAW 格式</span>
<span class="token class-name">sensor_t</span> <span class="token operator">*</span>s <span class="token operator">&#61;</span> <span class="token function">esp_camera_sensor_get</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span>s<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
s<span class="token operator">-&gt;</span><span class="token function">set_framesize</span><span class="token punctuation">(</span>s<span class="token punctuation">,</span> FRAMESIZE_QVGA<span class="token punctuation">)</span><span class="token punctuation">;</span>
s<span class="token operator">-&gt;</span><span class="token function">set_pixformat</span><span class="token punctuation">(</span>s<span class="token punctuation">,</span> PIXFORMAT_JPEG<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token function">ESP_LOGI</span><span class="token punctuation">(</span>TAG<span class="token punctuation">,</span> <span class="token string">&#34;OV3660 JPEG 配置生效&#34;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{<!-- --></span>
<span class="token function">ESP_LOGE</span><span class="token punctuation">(</span>TAG<span class="token punctuation">,</span> <span class="token string">&#34;获取摄像头传感器失败&#34;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">return</span> ESP_FAIL<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token function">ESP_LOGI</span><span class="token punctuation">(</span>TAG<span class="token punctuation">,</span> <span class="token string">&#34;摄像头初始化成功&#xff01;&#34;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">return</span> ESP_OK<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre>
<h5><a id="5_app_camerah_301"></a>5. app_camera.h&#xff08;摄像头函数声明&#xff09;</h5>
<pre><code class="prism language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">ifndef</span> <span class="token expression">APP_CAMERA_H</span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">APP_CAMERA_H</span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&#34;esp_err.h&#34;</span></span>
<span class="token class-name">esp_err_t</span> <span class="token function">app_camera_main</span><span class="token punctuation">(</span><span class="token keyword">void</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">endif</span> <span class="token comment">// APP_CAMERA_H</span></span>
</code></pre>
<h5><a id="6_app_httpdcHTTP___MJPEG__Edge_313"></a>6. app_httpd.c&#xff08;HTTP 服务器 &#43; MJPEG 流&#xff0c;适配 Edge&#xff09;</h5>
<pre><code class="prism language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&#34;esp_err.h&#34;</span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&#34;esp_http_server.h&#34;</span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&#34;esp_log.h&#34;</span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&#34;esp_camera.h&#34;</span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&#34;string.h&#34;</span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&#34;freertos/FreeRTOS.h&#34;</span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&#34;freertos/task.h&#34;</span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&#34;app_httpd.h&#34;</span></span>
<span class="token keyword">static</span> <span class="token keyword">const</span> <span class="token keyword">char</span> <span class="token operator">*</span>TAG <span class="token operator">&#61;</span> <span class="token string">&#34;HTTPD&#34;</span><span class="token punctuation">;</span>
<span class="token comment">// 主页 HTML&#xff08;自带样式&#xff0c;适配浏览器&#xff09;</span>
<span class="token keyword">static</span> <span class="token keyword">const</span> <span class="token keyword">char</span> <span class="token operator">*</span>STREAM_HTML <span class="token operator">&#61;</span>
<span class="token string">&#34;&lt;!DOCTYPE html&gt;&#34;</span>
<span class="token string">&#34;&lt;html&gt;&#34;</span>
<span class="token string">&#34;&lt;head&gt;&#34;</span>
<span class="token string">&#34;&lt;title&gt;ESP32 OV3660 Camera&lt;/title&gt;&#34;</span>
<span class="token string">&#34;&lt;meta charset&#61;\&#34;utf-8\&#34;&gt;&#34;</span>
<span class="token string">&#34;&lt;style&gt;&#34;</span>
<span class="token string">&#34;body { margin: 0; padding: 20px; background-color: #f0f0f0; }&#34;</span>
<span class="token string">&#34;.camera-container { max-width: 640px; margin: 0 auto; background: white; padding: 10px; border-radius: 8px; box-shadow: 0 0 10px rgba(0,0,0,0.1); }&#34;</span>
<span class="token string">&#34;img { width: 100%; height: auto; border-radius: 4px; }&#34;</span>
<span class="token string">&#34;h1 { text-align: center; color: #333; font-family: Arial, sans-serif; }&#34;</span>
<span class="token string">&#34;&lt;/style&gt;&#34;</span>
<span class="token string">&#34;&lt;/head&gt;&#34;</span>
<span class="token string">&#34;&lt;body&gt;&#34;</span>
<span class="token string">&#34;&lt;div class&#61;\&#34;camera-container\&#34;&gt;&#34;</span>
<span class="token string">&#34;&lt;h1&gt;ESP32 OV3660 摄像头画面&lt;/h1&gt;&#34;</span>
<span class="token string">&#34;&lt;img src&#61;\&#34;/stream\&#34; alt&#61;\&#34;Camera Stream\&#34;&gt;&#34;</span>
<span class="token string">&#34;&lt;/div&gt;&#34;</span>
<span class="token string">&#34;&lt;/body&gt;&#34;</span>
<span class="token string">&#34;&lt;/html&gt;&#34;</span><span class="token punctuation">;</span>
<span class="token keyword">static</span> <span class="token class-name">esp_err_t</span> <span class="token function">index_handler</span><span class="token punctuation">(</span><span class="token class-name">httpd_req_t</span> <span class="token operator">*</span>req<span class="token punctuation">)</span>
<span class="token punctuation">{<!-- --></span>
<span class="token function">httpd_resp_set_type</span><span class="token punctuation">(</span>req<span class="token punctuation">,</span> <span class="token string">&#34;text/html&#34;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token function">httpd_resp_send</span><span class="token punctuation">(</span>req<span class="token punctuation">,</span> STREAM_HTML<span class="token punctuation">,</span> <span class="token function">strlen</span><span class="token punctuation">(</span>STREAM_HTML<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">return</span> ESP_OK<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token comment">// MJPEG 流核心处理&#xff08;纯 ESP-IDF v5.1.6 支持 API&#xff09;</span>
<span class="token keyword">static</span> <span class="token class-name">esp_err_t</span> <span class="token function">stream_handler</span><span class="token punctuation">(</span><span class="token class-name">httpd_req_t</span> <span class="token operator">*</span>req<span class="token punctuation">)</span>
<span class="token punctuation">{<!-- --></span>
<span class="token class-name">camera_fb_t</span> <span class="token operator">*</span>fb <span class="token operator">&#61;</span> <span class="token constant">NULL</span><span class="token punctuation">;</span>
<span class="token class-name">esp_err_t</span> res <span class="token operator">&#61;</span> ESP_OK<span class="token punctuation">;</span>
<span class="token keyword">char</span> part_buf<span class="token punctuation">[</span><span class="token number">128</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
<span class="token keyword">char</span> conn_hdr<span class="token punctuation">[</span><span class="token number">32</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
TickType_t start_tick<span class="token punctuation">;</span>
<span class="token comment">// Edge 浏览器兼容配置</span>
<span class="token function">httpd_resp_set_type</span><span class="token punctuation">(</span>req<span class="token punctuation">,</span> <span class="token string">&#34;multipart/x-mixed-replace; boundary&#61;frame&#34;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token function">httpd_resp_set_hdr</span><span class="token punctuation">(</span>req<span class="token punctuation">,</span> <span class="token string">&#34;Cache-Control&#34;</span><span class="token punctuation">,</span> <span class="token string">&#34;no-cache&#34;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token function">httpd_resp_set_hdr</span><span class="token punctuation">(</span>req<span class="token punctuation">,</span> <span class="token string">&#34;Connection&#34;</span><span class="token punctuation">,</span> <span class="token string">&#34;close&#34;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">while</span> <span class="token punctuation">(</span>true<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
<span class="token comment">// 手动超时获取帧&#xff08;替代高版本函数&#xff0c;避免编译报错&#xff09;</span>
start_tick <span class="token operator">&#61;</span> <span class="token function">xTaskGetTickCount</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
fb <span class="token operator">&#61;</span> <span class="token constant">NULL</span><span class="token punctuation">;</span>
<span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token function">xTaskGetTickCount</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">-</span> start_tick <span class="token operator">&lt;</span> <span class="token number">500</span> <span class="token operator">/</span> portTICK_PERIOD_MS<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
fb <span class="token operator">&#61;</span> <span class="token function">esp_camera_fb_get</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span>fb<span class="token punctuation">)</span> <span class="token keyword">break</span><span class="token punctuation">;</span>
<span class="token function">vTaskDelay</span><span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator">/</span> portTICK_PERIOD_MS<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>fb<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
<span class="token function">ESP_LOGE</span><span class="token punctuation">(</span>TAG<span class="token punctuation">,</span> <span class="token string">&#34;获取帧超时&#34;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">continue</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token comment">// 校验 JPEG 起始标记&#xff08;0xFFD8&#xff09;&#xff0c;解决 SOI 缺失问题</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span>fb<span class="token operator">-&gt;</span>format <span class="token operator">&#61;&#61;</span> PIXFORMAT_JPEG <span class="token operator">&amp;&amp;</span> fb<span class="token operator">-&gt;</span>buf<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token operator">&#61;&#61;</span> <span class="token number">0xFF</span> <span class="token operator">&amp;&amp;</span> fb<span class="token operator">-&gt;</span>buf<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator">&#61;&#61;</span> <span class="token number">0xD8</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
<span class="token class-name">size_t</span> hlen <span class="token operator">&#61;</span> <span class="token function">snprintf</span><span class="token punctuation">(</span>part_buf<span class="token punctuation">,</span> <span class="token keyword">sizeof</span><span class="token punctuation">(</span>part_buf<span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token string">&#34;--frame\r\n&#34;</span>
<span class="token string">&#34;Content-Type: image/jpeg\r\n&#34;</span>
<span class="token string">&#34;Content-Length: %zu\r\n\r\n&#34;</span><span class="token punctuation">,</span>
fb<span class="token operator">-&gt;</span>len<span class="token punctuation">)</span><span class="token punctuation">;</span>
res <span class="token operator">&#61;</span> <span class="token function">httpd_resp_send_chunk</span><span class="token punctuation">(</span>req<span class="token punctuation">,</span> part_buf<span class="token punctuation">,</span> hlen<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span>res <span class="token operator">!&#61;</span> ESP_OK<span class="token punctuation">)</span> <span class="token keyword">break</span><span class="token punctuation">;</span>
res <span class="token operator">&#61;</span> <span class="token function">httpd_resp_send_chunk</span><span class="token punctuation">(</span>req<span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token keyword">const</span> <span class="token keyword">char</span> <span class="token operator">*</span><span class="token punctuation">)</span>fb<span class="token operator">-&gt;</span>buf<span class="token punctuation">,</span> fb<span class="token operator">-&gt;</span>len<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span>res <span class="token operator">!&#61;</span> ESP_OK<span class="token punctuation">)</span> <span class="token keyword">break</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{<!-- --></span>
<span class="token function">ESP_LOGE</span><span class="token punctuation">(</span>TAG<span class="token punctuation">,</span> <span class="token string">&#34;JPEG 数据异常&#xff0c;缺少 SOI 标记&#34;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token comment">// 释放缓冲区&#xff0c;避免内存泄漏</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span>fb<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
<span class="token function">esp_camera_fb_return</span><span class="token punctuation">(</span>fb<span class="token punctuation">)</span><span class="token punctuation">;</span>
fb <span class="token operator">&#61;</span> <span class="token constant">NULL</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token comment">// 检测客户端断开连接&#xff08;ESP-IDF v5.1.6 标准写法&#xff09;</span>
<span class="token class-name">ssize_t</span> conn_hdr_len <span class="token operator">&#61;</span> <span class="token function">httpd_req_get_hdr_value_len</span><span class="token punctuation">(</span>req<span class="token punctuation">,</span> <span class="token string">&#34;Connection&#34;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span>conn_hdr_len <span class="token operator">&gt;</span> <span class="token number">0</span> <span class="token operator">&amp;&amp;</span> conn_hdr_len <span class="token operator">&lt;</span> <span class="token keyword">sizeof</span><span class="token punctuation">(</span>conn_hdr<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
<span class="token function">httpd_req_get_hdr_value_str</span><span class="token punctuation">(</span>req<span class="token punctuation">,</span> <span class="token string">&#34;Connection&#34;</span><span class="token punctuation">,</span> conn_hdr<span class="token punctuation">,</span> conn_hdr_len <span class="token operator">&#43;</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">strcmp</span><span class="token punctuation">(</span>conn_hdr<span class="token punctuation">,</span> <span class="token string">&#34;close&#34;</span><span class="token punctuation">)</span> <span class="token operator">&#61;&#61;</span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
<span class="token keyword">break</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token comment">// 清理资源</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span>fb<span class="token punctuation">)</span> <span class="token function">esp_camera_fb_return</span><span class="token punctuation">(</span>fb<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token function">httpd_resp_send_chunk</span><span class="token punctuation">(</span>req<span class="token punctuation">,</span> <span class="token string">&#34;\r\n--frame--\r\n&#34;</span><span class="token punctuation">,</span> <span class="token function">strlen</span><span class="token punctuation">(</span><span class="token string">&#34;\r\n--frame--\r\n&#34;</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token function">ESP_LOGI</span><span class="token punctuation">(</span>TAG<span class="token punctuation">,</span> <span class="token string">&#34;流连接断开&#34;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">return</span> res<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token class-name">httpd_handle_t</span> <span class="token function">start_webserver</span><span class="token punctuation">(</span><span class="token keyword">void</span><span class="token punctuation">)</span>
<span class="token punctuation">{<!-- --></span>
<span class="token class-name">httpd_config_t</span> config <span class="token operator">&#61;</span> <span class="token function">HTTPD_DEFAULT_CONFIG</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
config<span class="token punctuation">.</span>max_uri_handlers <span class="token operator">&#61;</span> <span class="token number">16</span><span class="token punctuation">;</span>
config<span class="token punctuation">.</span>server_port <span class="token operator">&#61;</span> <span class="token number">80</span><span class="token punctuation">;</span>
<span class="token class-name">httpd_handle_t</span> server <span class="token operator">&#61;</span> <span class="token constant">NULL</span><span class="token punctuation">;</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">httpd_start</span><span class="token punctuation">(</span><span class="token operator">&amp;</span>server<span class="token punctuation">,</span> <span class="token operator">&amp;</span>config<span class="token punctuation">)</span> <span class="token operator">&#61;&#61;</span> ESP_OK<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
<span class="token comment">// 注册主页路由</span>
<span class="token class-name">httpd_uri_t</span> index_uri <span class="token operator">&#61;</span> <span class="token punctuation">{<!-- --></span>
<span class="token punctuation">.</span>uri <span class="token operator">&#61;</span> <span class="token string">&#34;/&#34;</span><span class="token punctuation">,</span>
<span class="token punctuation">.</span>method <span class="token operator">&#61;</span> HTTP_GET<span class="token punctuation">,</span>
<span class="token punctuation">.</span>handler <span class="token operator">&#61;</span> index_handler<span class="token punctuation">,</span>
<span class="token punctuation">.</span>user_ctx <span class="token operator">&#61;</span> <span class="token constant">NULL</span>
<span class="token punctuation">}</span><span class="token punctuation">;</span>
<span class="token function">httpd_register_uri_handler</span><span class="token punctuation">(</span>server<span class="token punctuation">,</span> <span class="token operator">&amp;</span>index_uri<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 注册视频流路由</span>
<span class="token class-name">httpd_uri_t</span> stream_uri <span class="token operator">&#61;</span> <span class="token punctuation">{<!-- --></span>
<span class="token punctuation">.</span>uri <span class="token operator">&#61;</span> <span class="token string">&#34;/stream&#34;</span><span class="token punctuation">,</span>
<span class="token punctuation">.</span>method <span class="token operator">&#61;</span> HTTP_GET<span class="token punctuation">,</span>
<span class="token punctuation">.</span>handler <span class="token operator">&#61;</span> stream_handler<span class="token punctuation">,</span>
<span class="token punctuation">.</span>user_ctx <span class="token operator">&#61;</span> <span class="token constant">NULL</span>
<span class="token punctuation">}</span><span class="token punctuation">;</span>
<span class="token function">httpd_register_uri_handler</span><span class="token punctuation">(</span>server<span class="token punctuation">,</span> <span class="token operator">&amp;</span>stream_uri<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token function">ESP_LOGI</span><span class="token punctuation">(</span>TAG<span class="token punctuation">,</span> <span class="token string">&#34;HTTP 服务器启动成功&#xff0c;端口&#xff1a;80&#34;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{<!-- --></span>
<span class="token function">ESP_LOGE</span><span class="token punctuation">(</span>TAG<span class="token punctuation">,</span> <span class="token string">&#34;HTTP 服务器启动失败&#34;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">return</span> server<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">void</span> <span class="token function">stop_webserver</span><span class="token punctuation">(</span><span class="token class-name">httpd_handle_t</span> server<span class="token punctuation">)</span>
<span class="token punctuation">{<!-- --></span>
<span class="token keyword">if</span> <span class="token punctuation">(</span>server<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
<span class="token function">httpd_stop</span><span class="token punctuation">(</span>server<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token function">ESP_LOGI</span><span class="token punctuation">(</span>TAG<span class="token punctuation">,</span> <span class="token string">&#34;HTTP 服务器已停止&#34;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre>
<h5><a id="7_app_httpdhHTTP__466"></a>7. app_httpd.h&#xff08;HTTP 函数声明&#xff09;</h5>
<pre><code class="prism language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">ifndef</span> <span class="token expression">APP_HTTPD_H</span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">APP_HTTPD_H</span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&#34;esp_http_server.h&#34;</span></span>
<span class="token class-name">httpd_handle_t</span> <span class="token function">start_webserver</span><span class="token punctuation">(</span><span class="token keyword">void</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">void</span> <span class="token function">stop_webserver</span><span class="token punctuation">(</span><span class="token class-name">httpd_handle_t</span> server<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">endif</span> <span class="token comment">// APP_HTTPD_H</span></span>
</code></pre>
<h4><a id="_4_CMakeListstxt_479"></a>步骤 4&#xff1a;修改 CMakeLists.txt&#xff08;编译配置&#xff09;</h4>
<p>打开 <code>main</code> 目录下的 <code>CMakeLists.txt</code>&#xff0c;替换为以下内容&#xff1a;</p>
<pre><code class="prism language-cmake">idf_component_register(SRCS &#34;app_main.c&#34; &#34;app_wifi.c&#34; &#34;app_camera.c&#34; &#34;app_httpd.c&#34;
INCLUDE_DIRS &#34;.&#34;)
</code></pre>
<h3><a id="_486"></a>五、编译与烧录&#xff08;使用烧录座&#xff0c;新手零门槛&#xff09;</h3>
<h4><a id="_1_487"></a>步骤 1&#xff1a;配置串口与目标芯片</h4>
<ol><li><code>Ctrl&#43;Shift&#43;P</code>&#xff0c;输入 <code>ESP-IDF: Select Port</code>&#xff0c;选择烧录座对应的串口&#xff08;例如 COM3&#xff09;&#xff1b;</li><li>输入 <code>ESP-IDF: Select Target</code>&#xff0c;选择 <code>esp32</code></li></ol>
<h4><a id="_2_491"></a>步骤 2&#xff1a;清理并编译</h4>
<p>在 VS Code 终端中执行以下命令&#xff08;复制粘贴即可&#xff09;&#xff1a;</p>
<pre><code class="prism language-bash"><span class="token comment"># 彻底清理旧缓存&#xff08;解决编译残留问题&#xff09;</span>
idf.py fullclean
<span class="token comment"># 编译项目</span>
idf.py build
</code></pre>
<blockquote>
<p>编译成功会显示「Project build complete」&#xff0c;无任何报错。</p>
</blockquote>
<h4><a id="_3_502"></a>步骤 3&#xff1a;烧录程序&#xff08;烧录座专用&#xff09;</h4>
<ol><li>将 ESP32-CAM 插入烧录座&#xff0c;确保引脚对齐&#xff1b;</li><li>用 USB 数据线连接烧录座与电脑&#xff0c;在终端执行&#xff1a;</li></ol>
<pre><code class="prism language-bash">idf.py flash
</code></pre>
<ol start="3"><li>烧录完成后&#xff0c;按一下 ESP32-CAM 的复位键&#xff08;RST&#xff09;&#xff0c;无需手动切换 IO0。</li></ol>
<h4><a id="_4_ESP32_IP_510"></a>步骤 4&#xff1a;查看串口日志&#xff08;获取 ESP32 IP&#xff09;</h4>
<p>在终端执行&#xff1a;</p>
<pre><code class="prism language-bash">idf.py monitor
</code></pre>
<p>等待日志输出&#xff0c;找到以下关键信息&#xff1a;</p>
<pre><code>I (5471) WIFI: WiFi 连接成功&#xff0c;IP地址&#xff1a;192.168.31.179
I (5941) MAIN: 系统初始化完成&#xff01;访问&#xff1a;http://ESP32_IP/ 查看摄像头
</code></pre>
<blockquote>
<p>记录下你的 ESP32 IP&#xff08;例如 192.168.31.179&#xff09;</p>
</blockquote>
<h3><a id="_522"></a>六、查看摄像头画面&#xff08;最终验证&#xff09;</h3>
<ol><li>确保电脑/手机与 ESP32 连接<strong>同一个 WiFi</strong>&#xff1b;</li><li>打开微软 Edge/谷歌 Chrome 浏览器&#xff0c;输入刚才记录的 IP&#xff08;例如 <code>http://192.168.31.179</code>&#xff09;&#xff1b;</li><li><code>Ctrl&#43;F5</code> 强制刷新&#xff08;避免浏览器缓存&#xff09;&#xff0c;即可看到实时摄像头画面&#xff01;</li><li>画面如下<br /> <img src="https://i-blog.csdnimg.cn/direct/9f9565a200eb4fc885d11e4d78e7b45e.png" alt="在这里插入图片描述" /></li></ol>
<h3><a id="_529"></a>七、新手常见问题排查</h3>
<table><thead><tr><th>问题现象</th><th>原因</th><th>解决方法</th></tr></thead><tbody><tr><td>编译报错「unknown type name」</td><td>头文件缺失/顺序错误</td><td>严格按本文代码的头文件顺序引入</td></tr><tr><td>日志显示「NO-SOI」</td><td>OV3660 编码异常</td><td>检查 app_camera.c 中 xclk_freq_hz 是否为 10MHz&#xff0c;fb_count 是否为 2</td></tr><tr><td>Edge 只显示标题&#xff0c;不显示画面</td><td>浏览器缓存/流格式不兼容</td><td>按 Ctrl&#43;F5 强制刷新&#xff0c;关闭 Edge 安全增强模式</td></tr><tr><td>WiFi 连接失败</td><td>账号密码错误/信号差</td><td>检查 app_wifi.c 中的 WIFI_SSID 和 WIFI_PASSWORD&#xff0c;靠近路由器</td></tr><tr><td>烧录失败</td><td>烧录座接触不良/串口错误</td><td>重新插拔 ESP32-CAM&#xff0c;重新选择正确串口</td></tr></tbody></table>
<h3><a id="_538"></a>结语</h3>
<p>本文从硬件到软件&#xff0c;全程为新手打造&#xff0c;代码经过实测验证&#xff0c;完美适配 ESP-IDF v5.1.6、OV3660 摄像头与 Edge 浏览器。新手只需按步骤复制代码、接线、编译&#xff0c;即可快速搭建属于自己的 ESP32 摄像头流服务器&#xff0c;后续可在此基础上扩展人脸识别、视频录制等功能。</p>
<h3><a id="_542"></a>源码</h3>
<p>已上传Gitee<br /> https://gitee.com/yunjingshan/esp32-ov3660-mjpeg-server</p>
</div>
<link href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-e1cc28b339.css" rel="stylesheet">
<link href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-d1e89cace4.css" rel="stylesheet">
</div>
</article>
<script>
$(function() {
setTimeout(function () {
var mathcodeList = document.querySelectorAll('.htmledit_views img.mathcode');
if (mathcodeList.length > 0) {
for (let i = 0; i < mathcodeList.length; i++) {
if (mathcodeList[i].complete) {
if (mathcodeList[i].naturalWidth === 0 || mathcodeList[i].naturalHeight === 0) {
var alt = mathcodeList[i].alt;
alt = '\\(' + alt + '\\)';
var curSpan = $('<span class="img-codecogs"></span>');
curSpan.text(alt);
$(mathcodeList[i]).before(curSpan);
$(mathcodeList[i]).remove();
}
} else {
mathcodeList[i].onerror = function() {
var alt = mathcodeList[i].alt;
alt = '\\(' + alt + '\\)';
var curSpan = $('<span class="img-codecogs"></span>');
curSpan.text(alt);
$(mathcodeList[i]).before(curSpan);
$(mathcodeList[i]).remove();
};
}
}
MathJax.Hub.Queue(["Typeset",MathJax.Hub]);
}
}, 500)
});
</script>
</div>
<div class="hide-article-box hide-article-pos text-center">
<a class="btn-readmore fans_read_more btn-readmore-gz" id="btn-readmore-zk">
<span class="follow-text">关注博主即可阅读全文</span>
<img class="chevrondown" src="https://csdnimg.cn/release/blogv2/dist/pc/img/arrowDownAttend.png">
</a>
</div>
<div class="directory-boxshadow-dialog" style="display:none;">
<div class="directory-boxshadow-dialog-box">
</div>
<div class="vip-limited-time-offer-box-new" id="vip-limited-time-offer-box-new">
<img class="limited-img limited-img-new" src="https://csdnimg.cn/release/blogv2/dist/pc/img/vip-limited-close-newWhite.png">
<div class="vip-limited-time-top">
确定要放弃本次机会?
</div>
<span class="vip-limited-time-text">福利倒计时</span>
<div class="limited-time-box-new">
<span class="time-hour"></span>
<i>:</i>
<span class="time-minite"></span>
<i>:</i>
<span class="time-second"></span>
</div>
<div class="limited-time-vip-box">
<p>
<img class="coupon-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/vip-limited-close-roup.png">
<span class="def">立减 ¥</span>
<span class="active limited-num"></span>
</p>
<span class="">普通VIP年卡可用</span>
</div>
<a class="limited-time-btn-new" href="https://mall.csdn.net/vip" data-report-click='{"spm":"1001.2101.3001.9621"}' data-report-query='spm=1001.2101.3001.9621'>立即使用</a>
</div>
</div>
<div class="more-toolbox-new more-toolbar" id="toolBarBox">
<div class="left-toolbox">
<div class="toolbox-left">
<div class="profile-box">
<a class="profile-href" target="_blank" href="https://yunjingshan.blog.csdn.net"><img class="profile-img" src="https://profile-avatar.csdnimg.cn/81c124b92b654588bc74a98c0be3c684_qq_42807924.jpg!1">
<span class="profile-name">
云敬山
</span>
</a>
</div>
<div class="profile-attend">
<a class="tool-attend tool-bt-button tool-bt-attend" href="javascript:;" data-report-view='{"mod":"1592215036_002","spm":"1001.2101.3001.4232","extend1":"关注"}'>关注</a>
<a class="tool-item-follow active-animation" style="display:none;">关注</a>
</div>
</div>
<div class="toolbox-middle">
<ul class="toolbox-list">
<li class="tool-item tool-item-size tool-active is-like" id="is-like" data-type="bottom">
<a class="tool-item-href">
<img style="display:none;" id="is-like-imgactive-animation-like" class="animation-dom active-animation" src="https://csdnimg.cn/release/blogv2/dist/pc/img/tobarThumbUpactive.png" alt="">
<img class="isactive" style="display:none" id="is-like-imgactive" src="https://csdnimg.cn/release/blogv2/dist/pc/img/toolbar/like-active.png" alt="">
<img class="isdefault" style="display:block" id="is-like-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/toolbar/like.png" alt="">
<span id="spanCount" class="count ">
17
</span>
</a>
<div class="tool-hover-tip"><span class="text space">点赞</span></div>
</li>
<li class="tool-item tool-item-size tool-active is-unlike" id="is-unlike">
<a class="tool-item-href">
<img class="isactive" style="margin-right:0px;display:none" id="is-unlike-imgactive" src="https://csdnimg.cn/release/blogv2/dist/pc/img/toolbar/unlike-active.png" alt="">
<img class="isdefault" style="margin-right:0px;display:block" id="is-unlike-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/toolbar/unlike.png" alt="">
<span id="unlikeCount" class="count "></span>
</a>
<div class="tool-hover-tip"><span class="text space"></span></div>
</li>
<li class="tool-item tool-item-size tool-active is-collection ">
<a class="tool-item-href" href="javascript:;" data-report-click='{"mod":"popu_824","spm":"1001.2101.3001.4130","ab":"new"}'>
<img style="display:none" id="is-collection-img-collection" class="animation-dom active-animation" src="https://csdnimg.cn/release/blogv2/dist/pc/img/toolbar/collect-active.png" alt="">
<img class="isdefault" id="is-collection-img" style="display:block" src="https://csdnimg.cn/release/blogv2/dist/pc/img/toolbar/collect.png" alt="">
<img class="isactive" id="is-collection-imgactive" style="display:none" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newCollectActive.png" alt="">
<span class="count get-collection " data-num="18" id="get-collection">
18
</span>
</a>
<div class="tool-hover-tip collect">
<div class="collect-operate-box">
<span class="collect-text" id="is-collection">
收藏
</span>
</div>
</div>
<div class="tool-active-list">
<div class="text">
觉得还不错?
<span class="collect-text" id="tool-active-list-collection">
一键收藏
</span>
<img id="tool-active-list-close" src="https://csdnimg.cn/release/blogv2/dist/pc/img/collectionCloseWhite.png" alt="">
</div>
</div>
</li>
<li class="tool-item tool-item-size tool-active tool-item-comment">
<div class="guide-rr-first">
<img src="https://csdnimg.cn/release/blogv2/dist/pc/img/guideRedReward01.png" alt="">
<button class="btn-guide-known">知道了</button>
</div>
<a class="tool-item-href go-side-comment" data-report-click='{"spm":"1001.2101.3001.7009"}'>
<img class="isdefault" src="https://csdnimg.cn/release/blogv2/dist/pc/img/toolbar/comment.png" alt="">
<span class="count">
1
</span>
</a>
<div class="tool-hover-tip"><span class="text space">评论</span></div>
</li>
<li class="tool-item tool-item-size tool-active tool-QRcode" data-type="article" id="tool-share">
<a class="tool-item-href" href="javascript:;" data-report-view='{"spm":"3001.4129","extra":{"type":"blogdetail"}}'>
<img class="isdefault" src="https://csdnimg.cn/release/blogv2/dist/pc/img/toolbar/share.png" alt="">
<span class="count">分享</span>
</a>
<div class="QRcode" id="tool-QRcode">
<div class="share-bg-box">
<div class="share-content">
<a id="copyPosterUrl" data-type="link" class="btn-share">复制链接</a>
</div>
<div class="share-content">
<a class="btn-share" data-type="qq">分享到 QQ</a>
</div>
<div class="share-content">
<a class="btn-share" data-type="weibo">分享到新浪微博</a>
</div>
<div class="share-code">
<div class="share-code-box" id='shareCode'></div>
<div class="share-code-text">
<img src="https://csdnimg.cn/release/blogv2/dist/pc/img/share/icon-wechat.png" alt="">扫一扫
</div>
</div>
</div>
</div>
</li>
<li class="tool-item tool-item-size tool-active is-more" id="is-more">
<a class="tool-item-href">
<img class="isdefault" style="margin-right:0px;display:block" src="https://csdnimg.cn/release/blogv2/dist/pc/img/toolbar/more.png" alt="">
<span class="count"></span>
</a>
<div class="more-opt-box">
<div class="mini-box">
<a class="tool-item-href" id="toolReportBtnHide">
<img class="isdefault" src="https://csdnimg.cn/release/blogv2/dist/pc/img/toolbar/report.png" alt="">
<span class="count">举报</span>
</a>
</div>
<div class="normal-box">
<a class="tool-item-href" id="toolReportBtnHideNormal">
<img class="isdefault" src="https://csdnimg.cn/release/blogv2/dist/pc/img/toolbar/report.png" alt="">
<span class="count">举报</span>
</a>
</div>
</div>
</li>
</ul>
</div>
<div class="toolbox-right">
<div class="tool-directory">
<a class="bt-columnlist-show"
data-id="13134725"
data-free="true"
data-description=""
data-subscribe="false"
data-title="ESP32 嵌入式开发"
data-img="https://i-blog.csdnimg.cn/columns/default/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_224,w_224"
data-url="https://blog.csdn.net/qq_42807924/category_13134725.html"
data-sum="5"
data-people="0"
data-price="0"
data-hotRank="0"
data-status="true"
data-oldprice="0"
data-join="false"
data-studyvip="false"
data-studysubscribe="false"
data-report-view='{"spm":"1001.2101.3001.6334","extend1":"专栏目录"}'
data-report-click='{"spm":"1001.2101.3001.6334","extend1":"专栏目录"}'>专栏目录</a>
</div>
</div>
</div>
</div>
<script type=text/javascript crossorigin src="https://csdnimg.cn/release/phoenix/production/qrcode-7c90a92189.min.js"></script>
<script type="text/javascript" crossorigin src="https://g.csdnimg.cn/common/csdn-login-box/csdn-login-box.js"></script>
<script type="text/javascript" crossorigin src="https://g.csdnimg.cn/collection-box/2.1.2/collection-box.js"></script>
<div id="dmp_ad_58" style="width:100%;overflow-x:hidden">
<div id="kp_box_58" data-pid="58"><iframe src="https://kunpeng-sc.csdnimg.cn/?timestamp=1645783940/#/preview1/3897426?positionId=58&adBlockFlag=0&adId=1087529&queryWord=新手零门槛搭建 ESP32 + OV3660 摄像头 MJPEG 流服务器ESP-IDF v5.1.6 适配版)&spm=1001.2101.3001.5002&articleId=158542939" frameborder="0" width= "100%" height= "75px" scrolling="no" ></iframe><img class="pre-img-lasy" data-src="https://kunyu.csdn.net/1.png?p=58&adBlockFlag=0&adId=1087529&a=1087529&c=3897426&k=新手零门槛搭建 ESP32 + OV3660 摄像头 MJPEG 流服务器ESP-IDF v5.1.6 适配版)&spm=1001.2101.3001.5002&articleId=158542939&d=1&t=3&u=b267a3800712466598c8ca6ccff005e6" style="display: block;width: 0px;height: 0px;"><script src="https://kunpeng-render.csdnimg.cn/publisher/latest/closeAdFrame.js"></script></div>
</div>
<script src="https://csdnimg.cn/release/blogv2/dist/components/js/pc_wap_commontools-55fb7fc975.min.js" type="text/javascript" async></script>
<div class="second-recommend-box recommend-box ">
<div class="recommend-item-box type_blog clearfix" data-url="https://handsome-man.blog.csdn.net/article/details/146138482" data-report-view='{"ab":"new","spm":"1001.2101.3001.6650.1","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BlogOpenSearchComplete~PaidSort-1-146138482-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"1","strategy":"2~default~BlogOpenSearchComplete~PaidSort","dest":"https://handsome-man.blog.csdn.net/article/details/146138482"}'>
<div class="content-box">
<div class="content-blog display-flex">
<div class="title-box">
<a href="https://handsome-man.blog.csdn.net/article/details/146138482" class="tit" target="_blank" data-report-click='{"ab":"new","spm":"1001.2101.3001.6650.1","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BlogOpenSearchComplete~PaidSort-1-146138482-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"1","strategy":"2~default~BlogOpenSearchComplete~PaidSort","dest":"https://handsome-man.blog.csdn.net/article/details/146138482"}' data-report-query='spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogOpenSearchComplete%7EPaidSort-1-146138482-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogOpenSearchComplete%7EPaidSort-1-146138482-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4'>
<div class="left ellipsis-online ellipsis-online-1">Arduino、<em>ESP32</em>驱动<em>OV</em><em>3660</em><em>摄像头</em>实现物体轮廓识别(<em>摄像头</em>支持红外夜视、边缘<em>AI</em>计算)</div>
</a>
</div>
<div class="info-box display-flex">
<div class="info">
<a href="https://blog.csdn.net/m0_38106923" target="_blank"><span class="blog-title">不脱发的程序猿</span></a>
</div>
<div class="info display-flex">
<span class="info-block time">03-09</span>
<span class="info-block read"><img class="read-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
1338
</span>
</div>
</div>
</div>
<div class="desc-box">
<a href="https://handsome-man.blog.csdn.net/article/details/146138482" target="_blank" data-report-click='{"ab":"new","spm":"1001.2101.3001.6650.1","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BlogOpenSearchComplete~PaidSort-1-146138482-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"1","strategy":"2~default~BlogOpenSearchComplete~PaidSort","dest":"https://handsome-man.blog.csdn.net/article/details/146138482"}' data-report-query='spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogOpenSearchComplete%7EPaidSort-1-146138482-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogOpenSearchComplete%7EPaidSort-1-146138482-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4'>
<div class="desc ellipsis-online ellipsis-online-1"><em>ESP32</em><em>-</em>S3 <em>AI</em>智能<em>摄像头</em>模块是一款专为智能家居和<em>物联网</em>应用打造的高性能边缘<em>AI</em>开发模组。它集成了<em>摄像头</em>、麦克风、音频功放、环境光传感器和夜视补光灯,无需依赖云端即可实现本地化<em>AI</em>推理。</div>
</a>
</div>
</div>
</div>
</div>
<a id="commentBox" name="commentBox"></a>
<div id="pcCommentBox" class="comment-box comment-box-new2 login-comment-box-new" style="display:none">
<div class="has-comment" style="display:block">
<div class="one-line-box">
<div class="has-comment-tit go-side-comment">
<span class="count">1</span>&nbsp;条评论
</div>
<div class="has-comment-con comment-operate-item"></div>
<a class="has-comment-bt-right go-side-comment focus">写评论</a>
</div>
</div>
</div>
<div class="recommend-box insert-baidu-box recommend-box-style ">
<div class="recommend-item-box no-index" style="display:none"></div>
<div class="recommend-item-box type_blog clearfix" data-url="https://handsome-man.blog.csdn.net/article/details/146139062" data-report-view='{"ab":"new","spm":"1001.2101.3001.6650.2","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~OPENSEARCH~PaidSort-2-146139062-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"2","strategy":"2~default~OPENSEARCH~PaidSort","dest":"https://handsome-man.blog.csdn.net/article/details/146139062"}'>
<div class="content-box">
<div class="content-blog display-flex">
<div class="title-box">
<a href="https://handsome-man.blog.csdn.net/article/details/146139062" class="tit" target="_blank" data-report-click='{"ab":"new","spm":"1001.2101.3001.6650.2","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~OPENSEARCH~PaidSort-2-146139062-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"2","strategy":"2~default~OPENSEARCH~PaidSort","dest":"https://handsome-man.blog.csdn.net/article/details/146139062"}' data-report-query='spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7EPaidSort-2-146139062-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7EPaidSort-2-146139062-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4'>
<div class="left ellipsis-online ellipsis-online-1">Arduino、<em>ESP32</em>驱动<em>OV</em><em>3660</em><em>摄像头</em>实现EdgeImpulse图像识别<em>摄像头</em>支持红外夜视、边缘<em>AI</em>计算)</div>
</a>
</div>
<div class="info-box display-flex">
<div class="info">
<a href="https://blog.csdn.net/m0_38106923" target="_blank"><span class="blog-title">不脱发的程序猿</span></a>
</div>
<div class="info display-flex">
<span class="info-block time">03-09</span>
<span class="info-block read"><img class="read-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
1431
</span>
</div>
</div>
</div>
<div class="desc-box">
<a href="https://handsome-man.blog.csdn.net/article/details/146139062" target="_blank" data-report-click='{"ab":"new","spm":"1001.2101.3001.6650.2","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~OPENSEARCH~PaidSort-2-146139062-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"2","strategy":"2~default~OPENSEARCH~PaidSort","dest":"https://handsome-man.blog.csdn.net/article/details/146139062"}' data-report-query='spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7EPaidSort-2-146139062-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7EPaidSort-2-146139062-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4'>
<div class="desc ellipsis-online ellipsis-online-1"><em>ESP32</em><em>-</em>S3 <em>AI</em>智能<em>摄像头</em>模块是一款专为智能家居和<em>物联网</em>应用打造的高性能边缘<em>AI</em>开发模组。它集成了<em>摄像头</em>、麦克风、音频功放、环境光传感器和夜视补光灯,无需依赖云端即可实现本地化<em>AI</em>推理。</div>
</a>
</div>
</div>
</div>
<div class="recommend-item-box type_blog clearfix" data-url="https://blog.csdn.net/gitblog_01051/article/details/156350139" data-report-view='{"ab":"new","spm":"1001.2101.3001.6650.3","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~Ctr-3-156350139-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"3","strategy":"2~default~baidujs_baidulandingword~Ctr","dest":"https://blog.csdn.net/gitblog_01051/article/details/156350139"}'>
<div class="content-box">
<div class="content-blog display-flex">
<div class="title-box">
<a href="https://blog.csdn.net/gitblog_01051/article/details/156350139" class="tit" target="_blank" data-report-click='{"ab":"new","spm":"1001.2101.3001.6650.3","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~Ctr-3-156350139-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"3","strategy":"2~default~baidujs_baidulandingword~Ctr","dest":"https://blog.csdn.net/gitblog_01051/article/details/156350139"}' data-report-query='spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7Ebaidujs_baidulandingword%7ECtr-3-156350139-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7Ebaidujs_baidulandingword%7ECtr-3-156350139-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4'>
<div class="left ellipsis-online ellipsis-online-1"><em>ESP32</em><em>摄像头</em>开发完整指南:从<em></em>开始掌握<em>物联网</em>视觉应用</div>
</a>
</div>
<div class="info-box display-flex">
<div class="info">
<a href="https://blog.csdn.net/gitblog_01051" target="_blank"><span class="blog-title">gitblog_01051的博客</span></a>
</div>
<div class="info display-flex">
<span class="info-block time">04-08</span>
<span class="info-block read"><img class="read-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
605
</span>
</div>
</div>
</div>
<div class="desc-box">
<a href="https://blog.csdn.net/gitblog_01051/article/details/156350139" target="_blank" data-report-click='{"ab":"new","spm":"1001.2101.3001.6650.3","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~Ctr-3-156350139-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"3","strategy":"2~default~baidujs_baidulandingword~Ctr","dest":"https://blog.csdn.net/gitblog_01051/article/details/156350139"}' data-report-query='spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7Ebaidujs_baidulandingword%7ECtr-3-156350139-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7Ebaidujs_baidulandingword%7ECtr-3-156350139-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4'>
<div class="desc ellipsis-online ellipsis-online-1"><em>ESP32</em><em>摄像头</em>开发是<em>物联网</em>视觉应用的基础,本指南将帮助你快速上手<em>ESP32</em><em>摄像头</em>模块的开发与应用。通过简单的步骤,你可以轻松实现图像采集、处理和传输等功能,开启<em>物联网</em>视觉应用的大门。
## 一、<em>ESP32</em><em>摄像头</em>模块简介
<em>ESP32</em><em>摄像头</em>模块是一款基于<em>ESP32</em>芯片的图像采集设备,它集成了<em>摄像头</em>传感器和相关的驱动电路能够实现图像的采集和处理。该模块支持多种分辨率的图像采集并且可以通过WiF</div>
</a>
</div>
</div>
</div>
<dl id="recommend-item-box-tow" class="recommend-item-box type_blog clearfix">
</dl>
<div class="recommend-item-box type_blog clearfix" data-url="https://blog.csdn.net/jj890/article/details/155746668" data-report-view='{"ab":"new","spm":"1001.2101.3001.6650.4","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BlogOpenSearchComplete~Ctr-4-155746668-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"4","strategy":"2~default~BlogOpenSearchComplete~Ctr","dest":"https://blog.csdn.net/jj890/article/details/155746668"}'>
<div class="content-box">
<div class="content-blog display-flex">
<div class="title-box">
<a href="https://blog.csdn.net/jj890/article/details/155746668" class="tit" target="_blank" data-report-click='{"ab":"new","spm":"1001.2101.3001.6650.4","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BlogOpenSearchComplete~Ctr-4-155746668-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"4","strategy":"2~default~BlogOpenSearchComplete~Ctr","dest":"https://blog.csdn.net/jj890/article/details/155746668"}' data-report-query='spm=1001.2101.3001.6650.4&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogOpenSearchComplete%7ECtr-4-155746668-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogOpenSearchComplete%7ECtr-4-155746668-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4'>
<div class="left ellipsis-online ellipsis-online-1"><em>ESP32</em><em>-</em>S3 <em>摄像头</em> <em>MJPEG</em> 视频流实现</div>
</a>
</div>
<div class="info-box display-flex">
<div class="info">
<a href="https://blog.csdn.net/jj890" target="_blank"><span class="blog-title">jj890的博客</span></a>
</div>
<div class="info display-flex">
<span class="info-block time">12-08</span>
<span class="info-block read"><img class="read-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
1156
</span>
</div>
</div>
</div>
<div class="desc-box">
<a href="https://blog.csdn.net/jj890/article/details/155746668" target="_blank" data-report-click='{"ab":"new","spm":"1001.2101.3001.6650.4","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BlogOpenSearchComplete~Ctr-4-155746668-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"4","strategy":"2~default~BlogOpenSearchComplete~Ctr","dest":"https://blog.csdn.net/jj890/article/details/155746668"}' data-report-query='spm=1001.2101.3001.6650.4&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogOpenSearchComplete%7ECtr-4-155746668-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogOpenSearchComplete%7ECtr-4-155746668-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4'>
<div class="desc ellipsis-online ellipsis-online-1">本文介绍如何利用<em>ESP32</em><em>-</em>S3与<em>OV</em>2<em>6</em>40<em>摄像头</em>通过<em>MJPEG</em>协议将实时视频流推送到浏览器涵盖硬件连接、图像采集优化、HTTP流传输及安全防护等关键技术点构建轻量级视觉系统。</div>
</a>
</div>
</div>
</div>
<div class="recommend-item-box type_blog clearfix" data-url="https://blog.csdn.net/z2a3b4c5d/article/details/155746810" data-report-view='{"ab":"new","spm":"1001.2101.3001.6650.5","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BlogOpenSearchComplete~Ctr-5-155746810-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"5","strategy":"2~default~BlogOpenSearchComplete~Ctr","dest":"https://blog.csdn.net/z2a3b4c5d/article/details/155746810"}'>
<div class="content-box">
<div class="content-blog display-flex">
<div class="title-box">
<a href="https://blog.csdn.net/z2a3b4c5d/article/details/155746810" class="tit" target="_blank" data-report-click='{"ab":"new","spm":"1001.2101.3001.6650.5","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BlogOpenSearchComplete~Ctr-5-155746810-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"5","strategy":"2~default~BlogOpenSearchComplete~Ctr","dest":"https://blog.csdn.net/z2a3b4c5d/article/details/155746810"}' data-report-query='spm=1001.2101.3001.6650.5&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogOpenSearchComplete%7ECtr-5-155746810-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogOpenSearchComplete%7ECtr-5-155746810-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4'>
<div class="left ellipsis-online ellipsis-online-1">GC0308 VS <em>OV</em><em>3660</em><em>ESP32</em><em>-</em>S3 <em>摄像头</em>选择建议</div>
</a>
</div>
<div class="info-box display-flex">
<div class="info">
<a href="https://blog.csdn.net/z2a3b4c5d" target="_blank"><span class="blog-title">z2a3b4c5d的博客</span></a>
</div>
<div class="info display-flex">
<span class="info-block time">12-08</span>
<span class="info-block read"><img class="read-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
1605
</span>
</div>
</div>
</div>
<div class="desc-box">
<a href="https://blog.csdn.net/z2a3b4c5d/article/details/155746810" target="_blank" data-report-click='{"ab":"new","spm":"1001.2101.3001.6650.5","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BlogOpenSearchComplete~Ctr-5-155746810-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"5","strategy":"2~default~BlogOpenSearchComplete~Ctr","dest":"https://blog.csdn.net/z2a3b4c5d/article/details/155746810"}' data-report-query='spm=1001.2101.3001.6650.5&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogOpenSearchComplete%7ECtr-5-155746810-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogOpenSearchComplete%7ECtr-5-155746810-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4'>
<div class="desc ellipsis-online ellipsis-online-1">本文深入对比GC0308与<em>OV</em><em>3660</em>两款常用<em>摄像头</em><em>ESP32</em><em>-</em>S3平台上的性能差异涵盖分辨率、功耗、帧率、内存占用及实际应用场景帮助开发者根据项目需求做出合理选型避免因传感器不<em>适配</em>导致的识别率低、功耗高或成本失控问题。</div>
</a>
</div>
</div>
</div>
<div class="recommend-item-box type_blog clearfix" data-url="https://devpress.csdn.net/v1/article/detail/159055035" data-report-view='{"ab":"new","spm":"1001.2101.3001.6650.6","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~activity-6-159055035-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"6","strategy":"2~default~baidujs_baidulandingword~activity","dest":"https://devpress.csdn.net/v1/article/detail/159055035"}'>
<div class="content-box">
<div class="content-blog display-flex">
<div class="title-box">
<a href="https://devpress.csdn.net/v1/article/detail/159055035" class="tit" target="_blank" data-report-click='{"ab":"new","spm":"1001.2101.3001.6650.6","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~activity-6-159055035-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"6","strategy":"2~default~baidujs_baidulandingword~activity","dest":"https://devpress.csdn.net/v1/article/detail/159055035"}' data-report-query='spm=1001.2101.3001.6650.6&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7Ebaidujs_baidulandingword%7Eactivity-6-159055035-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7Ebaidujs_baidulandingword%7Eactivity-6-159055035-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4'>
<div class="left ellipsis-online ellipsis-online-1"><em>ESP32</em><em>-</em>S3<em>-</em>CAM<em>ov</em><em>3660</em><em>摄像头</em></div>
</a>
</div>
<div class="info-box display-flex">
<div class="info">
<a href="https://blog.csdn.net/Diaoliangwang" target="_blank"><span class="blog-title">Diaoliangwang的专栏</span></a>
</div>
<div class="info display-flex">
<span class="info-block time">03-15</span>
<span class="info-block read"><img class="read-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
747
</span>
</div>
</div>
</div>
<div class="desc-box">
<a href="https://devpress.csdn.net/v1/article/detail/159055035" target="_blank" data-report-click='{"ab":"new","spm":"1001.2101.3001.6650.6","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~activity-6-159055035-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"6","strategy":"2~default~baidujs_baidulandingword~activity","dest":"https://devpress.csdn.net/v1/article/detail/159055035"}' data-report-query='spm=1001.2101.3001.6650.6&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7Ebaidujs_baidulandingword%7Eactivity-6-159055035-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7Ebaidujs_baidulandingword%7Eactivity-6-159055035-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4'>
<div class="desc ellipsis-online ellipsis-online-1">功能:每<em>5</em>秒钟拍一张照,然后通过局域网显示查看拍的照片其实一开始我也不知道居然可以用局域网打开个网址查看<em>摄像头</em>拍的照片,偶然一次通过<em>AI</em>给我一段代码检测<em>摄像头</em>的时候发现的居然还有这样的牛逼功能。前提又要增加一个联WiFi的功能。</div>
</a>
</div>
</div>
</div>
<div class="recommend-item-box type_blog clearfix" data-url="https://youyouhome.blog.csdn.net/article/details/155161877" data-report-view='{"ab":"new","spm":"1001.2101.3001.6650.7","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-7-155161877-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"7","strategy":"2~default~BlogCommendFromBaidu~Rate","dest":"https://youyouhome.blog.csdn.net/article/details/155161877"}'>
<div class="content-box">
<div class="content-blog display-flex">
<div class="title-box">
<a href="https://youyouhome.blog.csdn.net/article/details/155161877" class="tit" target="_blank" data-report-click='{"ab":"new","spm":"1001.2101.3001.6650.7","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-7-155161877-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"7","strategy":"2~default~BlogCommendFromBaidu~Rate","dest":"https://youyouhome.blog.csdn.net/article/details/155161877"}' data-report-query='spm=1001.2101.3001.6650.7&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-7-155161877-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-7-155161877-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4'>
<div class="left ellipsis-online ellipsis-online-1"><em>ESP32</em><em>-</em>S3<em>-</em>CAM】<em>OV</em><em>3660</em>视频不流畅优化</div>
</a>
</div>
<div class="info-box display-flex">
<div class="info">
<a href="https://blog.csdn.net/m0_60688978" target="_blank"><span class="blog-title">随笔</span></a>
</div>
<div class="info display-flex">
<span class="info-block time">11-23</span>
<span class="info-block read"><img class="read-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
2539
</span>
</div>
</div>
</div>
<div class="desc-box">
<a href="https://youyouhome.blog.csdn.net/article/details/155161877" target="_blank" data-report-click='{"ab":"new","spm":"1001.2101.3001.6650.7","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-7-155161877-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"7","strategy":"2~default~BlogCommendFromBaidu~Rate","dest":"https://youyouhome.blog.csdn.net/article/details/155161877"}' data-report-query='spm=1001.2101.3001.6650.7&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-7-155161877-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-7-155161877-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4'>
<div class="desc ellipsis-online ellipsis-online-1"><em>ESP32</em><em>-</em>S3<em>-</em>CAM】<em>OV</em><em>3660</em>视频不流畅处理方案</div>
</a>
</div>
</div>
</div>
<div class="recommend-item-box type_blog clearfix" data-url="https://yunjingshan.blog.csdn.net/article/details/158668202" data-report-view='{"ab":"new","spm":"1001.2101.3001.6650.8","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-8-158668202-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"8","strategy":"2~default~BlogCommendFromBaidu~Rate","dest":"https://yunjingshan.blog.csdn.net/article/details/158668202"}'>
<div class="content-box">
<div class="content-blog display-flex">
<div class="title-box">
<a href="https://yunjingshan.blog.csdn.net/article/details/158668202" class="tit" target="_blank" data-report-click='{"ab":"new","spm":"1001.2101.3001.6650.8","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-8-158668202-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"8","strategy":"2~default~BlogCommendFromBaidu~Rate","dest":"https://yunjingshan.blog.csdn.net/article/details/158668202"}' data-report-query='spm=1001.2101.3001.6650.8&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-8-158668202-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-8-158668202-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4'>
<div class="left ellipsis-online ellipsis-online-1">【小白实操】<em>ESP32</em><em>-</em>CAM接入豆包<em>AI</em>,实现猫识别(附完整代码)</div>
</a>
</div>
<div class="info-box display-flex">
<div class="info">
<a href="https://blog.csdn.net/qq_42807924" target="_blank"><span class="blog-title">云敬山</span></a>
</div>
<div class="info display-flex">
<span class="info-block time">03-05</span>
<span class="info-block read"><img class="read-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
399
</span>
</div>
</div>
</div>
<div class="desc-box">
<a href="https://yunjingshan.blog.csdn.net/article/details/158668202" target="_blank" data-report-click='{"ab":"new","spm":"1001.2101.3001.6650.8","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-8-158668202-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"8","strategy":"2~default~BlogCommendFromBaidu~Rate","dest":"https://yunjingshan.blog.csdn.net/article/details/158668202"}' data-report-query='spm=1001.2101.3001.6650.8&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-8-158668202-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-8-158668202-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4'>
<div class="desc ellipsis-online ellipsis-online-1">本文手把手教你如何用经典的<em>ESP32</em>开发板(<em>OV</em><em>3660</em><em>摄像头</em>)接入火山引擎豆包大模型,实现拍照识别画面中是否有猫。无需昂贵的设备,只需几十元的<em>ESP32</em><em>-</em>CAM模块和一个Python中转<em>服务器</em>,即可拥有自己的<em>AI</em>猫眼。</div>
</a>
</div>
</div>
</div>
<div class="recommend-item-box type_download clearfix" data-url="https://download.csdn.net/download/m0_38106923/87800496" data-report-view='{"ab":"new","spm":"1001.2101.3001.6650.9","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-download-2~default~OPENSEARCH~Rate-9-87800496-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"9","strategy":"2~default~OPENSEARCH~Rate","dest":"https://download.csdn.net/download/m0_38106923/87800496"}'>
<div class="content-box">
<div class="content-blog display-flex">
<div class="title-box">
<a href="https://download.csdn.net/download/m0_38106923/87800496" class="tit" target="_blank" data-report-click='{"ab":"new","spm":"1001.2101.3001.6650.9","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-download-2~default~OPENSEARCH~Rate-9-87800496-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"9","strategy":"2~default~OPENSEARCH~Rate","dest":"https://download.csdn.net/download/m0_38106923/87800496"}' data-report-query='spm=1001.2101.3001.6650.9&utm_medium=distribute.pc_relevant.none-task-download-2%7Edefault%7EOPENSEARCH%7ERate-9-87800496-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-download-2%7Edefault%7EOPENSEARCH%7ERate-9-87800496-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4'>
<div class="left ellipsis-online ellipsis-online-1"><em>ESP32</em>驱动<em>OV</em><em>3660</em><em>摄像头</em>实现物体轮廓识别(<em>摄像头</em>支持红外夜视、边缘<em>AI</em>计算)</div>
</a>
</div>
<div class="info-box display-flex">
<div class="info display-flex">
<span class="info-block">05-19</span>
</div>
</div>
</div>
<div class="desc-box">
<a href="https://download.csdn.net/download/m0_38106923/87800496" target="_blank" data-report-click='{"ab":"new","spm":"1001.2101.3001.6650.9","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-download-2~default~OPENSEARCH~Rate-9-87800496-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"9","strategy":"2~default~OPENSEARCH~Rate","dest":"https://download.csdn.net/download/m0_38106923/87800496"}' data-report-query='spm=1001.2101.3001.6650.9&utm_medium=distribute.pc_relevant.none-task-download-2%7Edefault%7EOPENSEARCH%7ERate-9-87800496-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-download-2%7Edefault%7EOPENSEARCH%7ERate-9-87800496-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4'>
<div class="desc ellipsis-online ellipsis-online-1"><em>ESP32</em>驱动<em>OV</em><em>3660</em><em>摄像头</em>实现物体轮廓识别(<em>摄像头</em>支持红外夜视、边缘<em>AI</em>计算) 项目详情请参见https://handsome<em>-</em>man<em>.</em>blog<em>.</em>csdn<em>.</em>net/article/det<em>ai</em>ls/<em>1</em>4<em>6</em><em>1</em>38482 一分价钱一分货,项目代码可顺利编译运行~</div>
</a>
</div>
</div>
</div>
<div class="recommend-item-box type_download clearfix" data-url="https://download.csdn.net/download/dsbhgkrgherk/10726493" data-report-view='{"ab":"new","spm":"1001.2101.3001.6650.10","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-download-2~default~OPENSEARCH~Rate-10-10726493-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"10","strategy":"2~default~OPENSEARCH~Rate","dest":"https://download.csdn.net/download/dsbhgkrgherk/10726493"}'>
<div class="content-box">
<div class="content-blog display-flex">
<div class="title-box">
<a href="https://download.csdn.net/download/dsbhgkrgherk/10726493" class="tit" target="_blank" data-report-click='{"ab":"new","spm":"1001.2101.3001.6650.10","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-download-2~default~OPENSEARCH~Rate-10-10726493-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"10","strategy":"2~default~OPENSEARCH~Rate","dest":"https://download.csdn.net/download/dsbhgkrgherk/10726493"}' data-report-query='spm=1001.2101.3001.6650.10&utm_medium=distribute.pc_relevant.none-task-download-2%7Edefault%7EOPENSEARCH%7ERate-10-10726493-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-download-2%7Edefault%7EOPENSEARCH%7ERate-10-10726493-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4'>
<div class="left ellipsis-online ellipsis-online-1"><em>esp32</em> <em>ov</em>7<em>6</em>70 <em>摄像头</em></div>
</a>
</div>
<div class="info-box display-flex">
<div class="info display-flex">
<span class="info-block">10-17</span>
</div>
</div>
</div>
<div class="desc-box">
<a href="https://download.csdn.net/download/dsbhgkrgherk/10726493" target="_blank" data-report-click='{"ab":"new","spm":"1001.2101.3001.6650.10","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-download-2~default~OPENSEARCH~Rate-10-10726493-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"10","strategy":"2~default~OPENSEARCH~Rate","dest":"https://download.csdn.net/download/dsbhgkrgherk/10726493"}' data-report-query='spm=1001.2101.3001.6650.10&utm_medium=distribute.pc_relevant.none-task-download-2%7Edefault%7EOPENSEARCH%7ERate-10-10726493-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-download-2%7Edefault%7EOPENSEARCH%7ERate-10-10726493-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4'>
<div class="desc ellipsis-online ellipsis-online-1"><em>ESP32</em> <em>OV</em>7<em>6</em>70<em>摄像头</em>相关知识点 <em>ESP32</em>是一款功能强大的微控制器,由<em>Esp</em>ressif Systems开发集成了Wi<em>-</em>Fi和蓝牙双重无线通信功能适用于<em>物联网</em><em>(</em>IoT<em>)</em>应用。它拥有丰富的GPIO通用输入/输出引脚、高性能的32位双核<em>.</em><em>.</em><em>.</em></div>
</a>
</div>
</div>
</div>
<div class="recommend-item-box type_chatgpt clearfix" data-url="https://wenku.csdn.net/answer/5nbr839ze8" data-report-view='{"ab":"new","spm":"1001.2101.3001.6650.11","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-chatgpt-2~default~OPENSEARCH~Rate-11-5nbr839ze8-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"11","strategy":"2~default~OPENSEARCH~Rate","dest":"https://wenku.csdn.net/answer/5nbr839ze8"}'>
<div class="content-box">
<div class="content-blog display-flex">
<div class="title-box">
<a href="https://wenku.csdn.net/answer/5nbr839ze8" class="tit" target="_blank" data-report-click='{"ab":"new","spm":"1001.2101.3001.6650.11","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-chatgpt-2~default~OPENSEARCH~Rate-11-5nbr839ze8-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"11","strategy":"2~default~OPENSEARCH~Rate","dest":"https://wenku.csdn.net/answer/5nbr839ze8"}' data-report-query='spm=1001.2101.3001.6650.11&utm_medium=distribute.pc_relevant.none-task-chatgpt-2%7Edefault%7EOPENSEARCH%7ERate-11-5nbr839ze8-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-chatgpt-2%7Edefault%7EOPENSEARCH%7ERate-11-5nbr839ze8-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4'>
<div class="left ellipsis-online ellipsis-online-1">写段micropython <em>esp32</em> <em>ov</em><em>3660</em>代码</div>
</a>
</div>
<div class="info-box display-flex">
<div class="info display-flex">
<span class="info-block">12-17</span>
</div>
</div>
</div>
<div class="desc-box">
<a href="https://wenku.csdn.net/answer/5nbr839ze8" target="_blank" data-report-click='{"ab":"new","spm":"1001.2101.3001.6650.11","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-chatgpt-2~default~OPENSEARCH~Rate-11-5nbr839ze8-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"11","strategy":"2~default~OPENSEARCH~Rate","dest":"https://wenku.csdn.net/answer/5nbr839ze8"}' data-report-query='spm=1001.2101.3001.6650.11&utm_medium=distribute.pc_relevant.none-task-chatgpt-2%7Edefault%7EOPENSEARCH%7ERate-11-5nbr839ze8-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-chatgpt-2%7Edefault%7EOPENSEARCH%7ERate-11-5nbr839ze8-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4'>
<div class="desc ellipsis-online ellipsis-online-1">首先,我们需要了解一下<em>ESP32</em><em>ov</em><em>3660</em>模块。 <em>ESP32</em>是一款高性能的Wi<em>-</em>Fi和蓝牙双模系统级芯片具有完整的TCP/IP协议栈和微控制器功能。<em>ov</em><em>3660</em>是一款集成了<em>OV</em><em>5</em><em>6</em>40传感器的图像处理器模块可以用于实现机器视觉应用<em>.</em><em>.</em><em>.</em></div>
</a>
</div>
</div>
</div>
<div class="recommend-item-box type_blog clearfix" data-url="https://devpress.csdn.net/v1/article/detail/160324692" data-report-view='{"ab":"new","spm":"1001.2101.3001.6650.12","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BLOGTAG~activity-12-160324692-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"12","strategy":"2~default~BLOGTAG~activity","dest":"https://devpress.csdn.net/v1/article/detail/160324692"}'>
<div class="content-box">
<div class="content-blog display-flex">
<div class="title-box">
<a href="https://devpress.csdn.net/v1/article/detail/160324692" class="tit" target="_blank" data-report-click='{"ab":"new","spm":"1001.2101.3001.6650.12","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BLOGTAG~activity-12-160324692-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"12","strategy":"2~default~BLOGTAG~activity","dest":"https://devpress.csdn.net/v1/article/detail/160324692"}' data-report-query='spm=1001.2101.3001.6650.12&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBLOGTAG%7Eactivity-12-160324692-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBLOGTAG%7Eactivity-12-160324692-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4'>
<div class="left ellipsis-online ellipsis-online-1">警惕&ldquo;套牌&rdquo;4090如何辨别<em>服务器</em>用的是不是真卡?</div>
</a>
</div>
<div class="info-box display-flex">
<div class="info">
<a href="https://blog.csdn.net/xingyuzhisuan" target="_blank"><span class="blog-title">xingyuzhisuan的博客</span></a>
</div>
<div class="info display-flex">
<span class="info-block time">04-20</span>
<span class="info-block read"><img class="read-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
378
</span>
</div>
</div>
</div>
<div class="desc-box">
<a href="https://devpress.csdn.net/v1/article/detail/160324692" target="_blank" data-report-click='{"ab":"new","spm":"1001.2101.3001.6650.12","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BLOGTAG~activity-12-160324692-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"12","strategy":"2~default~BLOGTAG~activity","dest":"https://devpress.csdn.net/v1/article/detail/160324692"}' data-report-query='spm=1001.2101.3001.6650.12&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBLOGTAG%7Eactivity-12-160324692-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBLOGTAG%7Eactivity-12-160324692-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4'>
<div class="desc ellipsis-online ellipsis-online-1">202<em>6</em>年国内GPU<em>服务器</em>租用市场规模突破300亿元<em>AI</em>大模型训练、科研计算、工业渲染等场景对算力需求持续攀升RTX 4090因<em>1</em><em>6</em>384个CUDA核心、<em>1</em>008GB/s显存带宽的核心优势成为<em>服务器</em>主流配置之一。但需求激增催生&ldquo;套牌&rdquo;造假乱象第三方算力评测机构202<em>6</em>年Q<em>1</em>数据显示47%的GPU租用平台存在算力虚标问题其中32%的小型平台虚标率超过40%,而&ldquo;套牌&rdquo;4090是虚标重灾区之一。</div>
</a>
</div>
</div>
</div>
<div class="recommend-item-box type_blog clearfix" data-url="https://blog.csdn.net/s1t16/article/details/160201728" data-report-view='{"ab":"new","spm":"1001.2101.3001.6650.13","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BLOGTAG~default-13-160201728-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"13","strategy":"2~default~BLOGTAG~default","dest":"https://blog.csdn.net/s1t16/article/details/160201728"}'>
<div class="content-box">
<div class="content-blog display-flex">
<div class="title-box">
<a href="https://blog.csdn.net/s1t16/article/details/160201728" class="tit" target="_blank" data-report-click='{"ab":"new","spm":"1001.2101.3001.6650.13","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BLOGTAG~default-13-160201728-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"13","strategy":"2~default~BLOGTAG~default","dest":"https://blog.csdn.net/s1t16/article/details/160201728"}' data-report-query='spm=1001.2101.3001.6650.13&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBLOGTAG%7Edefault-13-160201728-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBLOGTAG%7Edefault-13-160201728-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4'>
<div class="left ellipsis-online ellipsis-online-1">基于C<em>+</em><em>+</em>实现的简单的SMTP<em>服务器</em></div>
</a>
</div>
<div class="info-box display-flex">
<div class="info">
<a href="https://blog.csdn.net/s1t16" target="_blank"><span class="blog-title">神仙别闹的自留地</span></a>
</div>
<div class="info display-flex">
<span class="info-block time">04-16</span>
<span class="info-block read"><img class="read-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
460
</span>
</div>
</div>
</div>
<div class="desc-box">
<a href="https://blog.csdn.net/s1t16/article/details/160201728" target="_blank" data-report-click='{"ab":"new","spm":"1001.2101.3001.6650.13","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BLOGTAG~default-13-160201728-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"13","strategy":"2~default~BLOGTAG~default","dest":"https://blog.csdn.net/s1t16/article/details/160201728"}' data-report-query='spm=1001.2101.3001.6650.13&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBLOGTAG%7Edefault-13-160201728-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBLOGTAG%7Edefault-13-160201728-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4'>
<div class="desc ellipsis-online ellipsis-online-1">客户端向<em>服务器</em>发送用户登录命令AUTH LOGIN<em>服务器</em>回复的两个334分别表示用户名和密码之后客户端分别向<em>服务器</em>发送编码后的用户名和密码SMTP要求用户名和密码都通过<em>6</em>4位编码后再发送不接受明文<em>服务器</em>分别回复23<em>5</em>表示身份验证成功。因为SMTP协议是基于TCP的所以先进行三次握手客户端与<em>服务器</em>建立TCP连接<em>服务器</em>返回连接信息表示是否连接成功S: 220 smtp<em>-</em>2<em>.</em>qy<em>.</em>internal ESMTP ready<em>服务器</em>发送220表示已经准备就绪。双方断开连接通信过程结束。</div>
</a>
</div>
</div>
</div>
<div class="recommend-item-box type_blog clearfix" data-url="https://blog.csdn.net/wanhengidc/article/details/160221373" data-report-view='{"ab":"new","spm":"1001.2101.3001.6650.14","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BLOGTAG~default-14-160221373-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"14","strategy":"2~default~BLOGTAG~default","dest":"https://blog.csdn.net/wanhengidc/article/details/160221373"}'>
<div class="content-box">
<div class="content-blog display-flex">
<div class="title-box">
<a href="https://blog.csdn.net/wanhengidc/article/details/160221373" class="tit" target="_blank" data-report-click='{"ab":"new","spm":"1001.2101.3001.6650.14","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BLOGTAG~default-14-160221373-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"14","strategy":"2~default~BLOGTAG~default","dest":"https://blog.csdn.net/wanhengidc/article/details/160221373"}' data-report-query='spm=1001.2101.3001.6650.14&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBLOGTAG%7Edefault-14-160221373-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBLOGTAG%7Edefault-14-160221373-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4'>
<div class="left ellipsis-online ellipsis-online-1"><em>服务器</em>和物理<em>服务器</em>的不同之处</div>
</a>
</div>
<div class="info-box display-flex">
<div class="info">
<a href="https://blog.csdn.net/wanhengidc" target="_blank"><span class="blog-title">wanhengidc的博客</span></a>
</div>
<div class="info display-flex">
<span class="info-block time">04-16</span>
<span class="info-block read"><img class="read-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
330
</span>
</div>
</div>
</div>
<div class="desc-box">
<a href="https://blog.csdn.net/wanhengidc/article/details/160221373" target="_blank" data-report-click='{"ab":"new","spm":"1001.2101.3001.6650.14","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BLOGTAG~default-14-160221373-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"14","strategy":"2~default~BLOGTAG~default","dest":"https://blog.csdn.net/wanhengidc/article/details/160221373"}' data-report-query='spm=1001.2101.3001.6650.14&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBLOGTAG%7Edefault-14-160221373-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBLOGTAG%7Edefault-14-160221373-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4'>
<div class="desc ellipsis-online ellipsis-online-1">在资源管理方面,物理<em>服务器</em>的计算、存储、网络等资源均为独占式,一旦配置完成,硬件资源难以动态调整,若业务增长导致资源不足,需手动升级硬件或新增<em>服务器</em>;云<em>服务器</em>则采用虚拟化技术将物理资源池化后按需分配用户可根据实际需求实时调整CPU、内存、存储等配置实现弹性伸缩资源利用率更高且支持自动负载均衡能应对业务流量的波动。而云<em>服务器</em>基于云计算技术,由云服务提供商在数据中心集中部署和管理物理硬件,用户通过网络远程访问,无需接触实体设备,开通和配置通常可在几分钟内完成,实现了快速弹性部署。</div>
</a>
</div>
</div>
</div>
<div class="recommend-item-box type_blog clearfix" data-url="https://blog.csdn.net/qq_32526087/article/details/160191352" data-report-view='{"ab":"new","spm":"1001.2101.3001.6650.15","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BLOGTAG~default-15-160191352-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"15","strategy":"2~default~BLOGTAG~default","dest":"https://blog.csdn.net/qq_32526087/article/details/160191352"}'>
<div class="content-box">
<div class="content-blog display-flex">
<div class="title-box">
<a href="https://blog.csdn.net/qq_32526087/article/details/160191352" class="tit" target="_blank" data-report-click='{"ab":"new","spm":"1001.2101.3001.6650.15","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BLOGTAG~default-15-160191352-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"15","strategy":"2~default~BLOGTAG~default","dest":"https://blog.csdn.net/qq_32526087/article/details/160191352"}' data-report-query='spm=1001.2101.3001.6650.15&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBLOGTAG%7Edefault-15-160191352-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBLOGTAG%7Edefault-15-160191352-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4'>
<div class="left ellipsis-online ellipsis-online-1">H20*8卡<em>服务器</em>装机指南</div>
</a>
</div>
<div class="info-box display-flex">
<div class="info">
<a href="https://blog.csdn.net/qq_32526087" target="_blank"><span class="blog-title">qq_32526087的博客</span></a>
</div>
<div class="info display-flex">
<span class="info-block time">04-15</span>
<span class="info-block read"><img class="read-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
489
</span>
</div>
</div>
</div>
<div class="desc-box">
<a href="https://blog.csdn.net/qq_32526087/article/details/160191352" target="_blank" data-report-click='{"ab":"new","spm":"1001.2101.3001.6650.15","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BLOGTAG~default-15-160191352-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"15","strategy":"2~default~BLOGTAG~default","dest":"https://blog.csdn.net/qq_32526087/article/details/160191352"}' data-report-query='spm=1001.2101.3001.6650.15&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBLOGTAG%7Edefault-15-160191352-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBLOGTAG%7Edefault-15-160191352-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4'>
<div class="desc ellipsis-online ellipsis-online-1">H20*8卡<em>服务器</em>配置</div>
</a>
</div>
</div>
</div>
<div class="recommend-item-box type_blog clearfix" data-url="https://risunjan.blog.csdn.net/article/details/160323541" data-report-view='{"ab":"new","spm":"1001.2101.3001.6650.16","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BLOGTAG~default-16-160323541-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"16","strategy":"2~default~BLOGTAG~default","dest":"https://risunjan.blog.csdn.net/article/details/160323541"}'>
<div class="content-box">
<div class="content-blog display-flex">
<div class="title-box">
<a href="https://risunjan.blog.csdn.net/article/details/160323541" class="tit" target="_blank" data-report-click='{"ab":"new","spm":"1001.2101.3001.6650.16","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BLOGTAG~default-16-160323541-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"16","strategy":"2~default~BLOGTAG~default","dest":"https://risunjan.blog.csdn.net/article/details/160323541"}' data-report-query='spm=1001.2101.3001.6650.16&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBLOGTAG%7Edefault-16-160323541-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBLOGTAG%7Edefault-16-160323541-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4'>
<div class="left ellipsis-online ellipsis-online-1">Linux命令<em>-</em>nfsstat列出NFS客户端和<em>服务器</em>的工作状态)</div>
</a>
</div>
<div class="info-box display-flex">
<div class="info">
<a href="https://blog.csdn.net/qq_32808455" target="_blank"><span class="blog-title">RisunJan的博客</span></a>
</div>
<div class="info display-flex">
<span class="info-block time">04-20</span>
<span class="info-block read"><img class="read-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
425
</span>
</div>
</div>
</div>
<div class="desc-box">
<a href="https://risunjan.blog.csdn.net/article/details/160323541" target="_blank" data-report-click='{"ab":"new","spm":"1001.2101.3001.6650.16","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BLOGTAG~default-16-160323541-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"16","strategy":"2~default~BLOGTAG~default","dest":"https://risunjan.blog.csdn.net/article/details/160323541"}' data-report-query='spm=1001.2101.3001.6650.16&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBLOGTAG%7Edefault-16-160323541-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBLOGTAG%7Edefault-16-160323541-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4'>
<div class="desc ellipsis-online ellipsis-online-1">nfsstat是 Linux 中一个的命令行工具。它通过读取内核维护的 NFS 统计信息,提供 RPC远程过程调用层和 NFS 层的详细性能数据,是 NFS 性能调优和故障排查的重要工具。</div>
</a>
</div>
</div>
</div>
<div class="recommend-item-box type_blog clearfix" data-url="https://phmatthaus.blog.csdn.net/article/details/160156457" data-report-view='{"ab":"new","spm":"1001.2101.3001.6650.17","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BLOGTAG~default-17-160156457-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"17","strategy":"2~default~BLOGTAG~default","dest":"https://phmatthaus.blog.csdn.net/article/details/160156457"}'>
<div class="content-box">
<div class="content-blog display-flex">
<div class="title-box">
<a href="https://phmatthaus.blog.csdn.net/article/details/160156457" class="tit" target="_blank" data-report-click='{"ab":"new","spm":"1001.2101.3001.6650.17","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BLOGTAG~default-17-160156457-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"17","strategy":"2~default~BLOGTAG~default","dest":"https://phmatthaus.blog.csdn.net/article/details/160156457"}' data-report-query='spm=1001.2101.3001.6650.17&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBLOGTAG%7Edefault-17-160156457-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBLOGTAG%7Edefault-17-160156457-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4'>
<div class="left ellipsis-online ellipsis-online-1">Linux网络驱动之Fixed<em>-</em>Link2<em>6</em></div>
</a>
</div>
<div class="info-box display-flex">
<div class="info">
<a href="https://blog.csdn.net/phmatthaus" target="_blank"><span class="blog-title">phmatthaus的专栏</span></a>
</div>
<div class="info display-flex">
<span class="info-block time">04-17</span>
<span class="info-block read"><img class="read-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
998
</span>
</div>
</div>
</div>
<div class="desc-box">
<a href="https://phmatthaus.blog.csdn.net/article/details/160156457" target="_blank" data-report-click='{"ab":"new","spm":"1001.2101.3001.6650.17","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BLOGTAG~default-17-160156457-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"17","strategy":"2~default~BLOGTAG~default","dest":"https://phmatthaus.blog.csdn.net/article/details/160156457"}' data-report-query='spm=1001.2101.3001.6650.17&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBLOGTAG%7Edefault-17-160156457-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBLOGTAG%7Edefault-17-160156457-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4'>
<div class="desc ellipsis-online ellipsis-online-1">Linux网络驱动之Fixed<em>-</em>Link2<em>6</em></div>
</a>
</div>
</div>
</div>
<div class="recommend-item-box type_blog clearfix" data-url="https://devpress.csdn.net/v1/article/detail/160322033" data-report-view='{"ab":"new","spm":"1001.2101.3001.6650.18","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BLOGTAG~activity-18-160322033-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"18","strategy":"2~default~BLOGTAG~activity","dest":"https://devpress.csdn.net/v1/article/detail/160322033"}'>
<div class="content-box">
<div class="content-blog display-flex">
<div class="title-box">
<a href="https://devpress.csdn.net/v1/article/detail/160322033" class="tit" target="_blank" data-report-click='{"ab":"new","spm":"1001.2101.3001.6650.18","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BLOGTAG~activity-18-160322033-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"18","strategy":"2~default~BLOGTAG~activity","dest":"https://devpress.csdn.net/v1/article/detail/160322033"}' data-report-query='spm=1001.2101.3001.6650.18&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBLOGTAG%7Eactivity-18-160322033-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBLOGTAG%7Eactivity-18-160322033-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4'>
<div class="left ellipsis-online ellipsis-online-1"><em>AI</em><em>服务器</em>功率电感解决方案_4<em>.</em>7&mu;H电感应对GPU高负载挑战</div>
</a>
</div>
<div class="info-box display-flex">
<div class="info">
<a href="https://blog.csdn.net/2509_92597854" target="_blank"><span class="blog-title">2509_92597854的博客</span></a>
</div>
<div class="info display-flex">
<span class="info-block time">04-20</span>
<span class="info-block read"><img class="read-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
307
</span>
</div>
</div>
</div>
<div class="desc-box">
<a href="https://devpress.csdn.net/v1/article/detail/160322033" target="_blank" data-report-click='{"ab":"new","spm":"1001.2101.3001.6650.18","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BLOGTAG~activity-18-160322033-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"18","strategy":"2~default~BLOGTAG~activity","dest":"https://devpress.csdn.net/v1/article/detail/160322033"}' data-report-query='spm=1001.2101.3001.6650.18&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBLOGTAG%7Eactivity-18-160322033-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBLOGTAG%7Eactivity-18-160322033-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4'>
<div class="desc ellipsis-online ellipsis-online-1">深入分析4<em>.</em>7&mu;H功率电感的技术特性与应用场景探讨其在<em>AI</em><em>服务器</em>、新能源汽车、消费电子等领域的核心作用,为电源工程师提供专业选型参考。
</div>
</a>
</div>
</div>
</div>
<div class="recommend-item-box type_blog clearfix" data-url="https://guoqingru.blog.csdn.net/article/details/160326555" data-report-view='{"ab":"new","spm":"1001.2101.3001.6650.19","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BLOGTAG~default-19-160326555-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"19","strategy":"2~default~BLOGTAG~default","dest":"https://guoqingru.blog.csdn.net/article/details/160326555"}'>
<div class="content-box">
<div class="content-blog display-flex">
<div class="title-box">
<a href="https://guoqingru.blog.csdn.net/article/details/160326555" class="tit" target="_blank" data-report-click='{"ab":"new","spm":"1001.2101.3001.6650.19","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BLOGTAG~default-19-160326555-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"19","strategy":"2~default~BLOGTAG~default","dest":"https://guoqingru.blog.csdn.net/article/details/160326555"}' data-report-query='spm=1001.2101.3001.6650.19&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBLOGTAG%7Edefault-19-160326555-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBLOGTAG%7Edefault-19-160326555-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4'>
<div class="left ellipsis-online ellipsis-online-1">华为昇腾<em>服务器</em>安装docker</div>
<div class="tag">最新发布</div>
</a>
</div>
<div class="info-box display-flex">
<div class="info">
<a href="https://blog.csdn.net/guoqingru0311" target="_blank"><span class="blog-title">guoqingru0311的博客</span></a>
</div>
<div class="info display-flex">
<span class="info-block time">04-20</span>
<span class="info-block read"><img class="read-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
40
</span>
</div>
</div>
</div>
<div class="desc-box">
<a href="https://guoqingru.blog.csdn.net/article/details/160326555" target="_blank" data-report-click='{"ab":"new","spm":"1001.2101.3001.6650.19","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BLOGTAG~default-19-160326555-blog-158542939.235^v43^pc_blog_bottom_relevance_base4\",\"dist_request_id\":\"1776767558949_28716\"}","dist_request_id":"1776767558949_28716","ab_strategy":"landing_bge_commercial_hanlp_download_sign","index":"19","strategy":"2~default~BLOGTAG~default","dest":"https://guoqingru.blog.csdn.net/article/details/160326555"}' data-report-query='spm=1001.2101.3001.6650.19&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBLOGTAG%7Edefault-19-160326555-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBLOGTAG%7Edefault-19-160326555-blog-158542939.235%5Ev43%5Epc_blog_bottom_relevance_base4'>
<div class="desc ellipsis-online ellipsis-online-1">【代码】华为昇腾<em>服务器</em>安装docker。</div>
</a>
</div>
</div>
</div>
</div>
<div class="blog-footer-bottom" style="margin-top:10px;"></div>
<script src="https://g.csdnimg.cn/common/csdn-footer/csdn-footer.js" data-isfootertrack="false" type="text/javascript"></script>
<script type="text/javascript">
window.csdn.csdnFooter.options = {
el: '.blog-footer-bottom',
type: 2
}
</script> </main>
<aside class="blog_container_aside ">
<div id="asideProfile" class="aside-box active">
<div class="profile-intro d-flex">
<div class="avatar-box d-flex justify-content-center flex-column">
<a href="https://yunjingshan.blog.csdn.net" target="_blank" data-report-click='{"mod":"popu_379","spm":"3001.4121","dest":"https://yunjingshan.blog.csdn.net","ab":"new"}'>
<img src="https://profile-avatar.csdnimg.cn/81c124b92b654588bc74a98c0be3c684_qq_42807924.jpg!1" class="avatar_pic">
</a>
</div>
<div class="user-info d-flex flex-column profile-intro-name-box">
<div class="profile-intro-name-boxTop">
<a href="https://yunjingshan.blog.csdn.net" target="_blank" class="" id="uid" title="云敬山" data-report-click='{"mod":"popu_379","spm":"3001.4122","dest":"https://yunjingshan.blog.csdn.net","ab":"new"}'>
<span class="name" username="qq_42807924">云敬山</span>
</a>
</div>
<div class="profile-intro-name-boxFooter-new">
<p class="profile-intro-name-leve">
<span>
博客等级
</span>
<img class="level" src="https://csdnimg.cn/identity/blog6.png">
</p>
<span class="profile-intro-name-years" title="已加入 CSDN 8年">码龄8年</span>
</div>
</div>
</div>
<div class="profile-intro-rank-information">
<dl>
<a href="https://yunjingshan.blog.csdn.net" data-report-click='{"mod":"1598321000_001","spm":"3001.4310"}' data-report-query="t=1">
<dd><span >118</span></dd>
<dt>原创</dt>
</a>
</dl>
<dl title="1071">
<dd>1071</dd>
<dt>点赞</dt>
</dl>
<dl title="5379">
<dd>5379</dd>
<dt>收藏</dt>
</dl>
<dl id="fanBox" title="1926">
<dd><span id="fan">1926</span></dd>
<dt>粉丝</dt>
</dl>
</div>
<div class="profile-intro-name-boxOpration">
<div class="opt-letter-watch-box">
<a class="personal-watch bt-button" id="btnAttent" >关注</a>
</div>
<div class="opt-letter-watch-box">
<a rel="nofollow" class="bt-button personal-letter" href="https://im.csdn.net/chat/qq_42807924" target="_blank" rel="noopener">私信</a>
</div>
</div>
</div>
<div class="swiper-remuneration-container" id="swiper-remuneration-container">
<div class="swiper-wrapper">
<!-- 这里可以添加多个Swiper幻灯片 -->
<div class="swiper-slide">
<a data-report-click='{"spm":"3001.9728","extra":{"index":"0"}}' data-report-swiper='{"spm":"3001.9728","extra":{"index":"0"}}' href="https://mp.csdn.net/vip?utm_source=902253762" target="_blank">
<img src="https://i-operation.csdnimg.cn/images/553f4616dcf04c6681b8b31a614d5cbe.png" alt="">
</a>
</div>
<div class="swiper-slide">
<a data-report-click='{"spm":"3001.9728","extra":{"index":"1"}}' data-report-swiper='{"spm":"3001.9728","extra":{"index":"1"}}' href="https://blog.csdn.net/blogdevteam/article/details/159927751?utm_source=1160366079" target="_blank">
<img src="https://i-operation.csdnimg.cn/images/b9a16c5abef246139d3e473e5efb8b61.png" alt="">
</a>
</div>
</div>
<div class="swiper-remuneration-pagination"></div>
<!-- 如果需要导航按钮 -->
<div class="swiper-remuneration-button-prev"></div>
<div class="swiper-remuneration-button-next"></div>
</div>
<div id="asideHotArticle" class="aside-box">
<h3 class="aside-title">热门文章</h3>
<div class="aside-content">
<ul class="hotArticle-list">
<li>
<a href="https://yunjingshan.blog.csdn.net/article/details/82229997" target="_blank" data-report-click='{"mod":"popu_541","spm":"3001.4139","dest":"https://yunjingshan.blog.csdn.net/article/details/82229997","ab":"new"}'>
【学习笔记】——16路PWM舵机驱动板(PCA 9685) + Arduino
<img src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
<span class="read">77515</span>
</a>
</li>
<li>
<a href="https://yunjingshan.blog.csdn.net/article/details/105948575" target="_blank" data-report-click='{"mod":"popu_541","spm":"3001.4139","dest":"https://yunjingshan.blog.csdn.net/article/details/105948575","ab":"new"}'>
【UG NX MCD 机电一体化概念设计】UG NX MCD+PLCSIM Advanced联合仿真实例基本配置
<img src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
<span class="read">59047</span>
</a>
</li>
<li>
<a href="https://yunjingshan.blog.csdn.net/article/details/88728764" target="_blank" data-report-click='{"mod":"popu_541","spm":"3001.4139","dest":"https://yunjingshan.blog.csdn.net/article/details/88728764","ab":"new"}'>
【Matlab】手把手教你用Matlab GUIDE画李萨如图形完整教程
<img src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
<span class="read">37182</span>
</a>
</li>
<li>
<a href="https://yunjingshan.blog.csdn.net/article/details/81988796" target="_blank" data-report-click='{"mod":"popu_541","spm":"3001.4139","dest":"https://yunjingshan.blog.csdn.net/article/details/81988796","ab":"new"}'>
【SolidWorks插件】 凯元工具(KYTool)
<img src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
<span class="read">31950</span>
</a>
</li>
<li>
<a href="https://yunjingshan.blog.csdn.net/article/details/82354413" target="_blank" data-report-click='{"mod":"popu_541","spm":"3001.4139","dest":"https://yunjingshan.blog.csdn.net/article/details/82354413","ab":"new"}'>
【学习笔记】OpenMV与arduino通讯
<img src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
<span class="read">30382</span>
</a>
</li>
</ul>
</div>
</div>
<div id="asideCategory" class="aside-box aside-box-column flexible-box-new">
<h3 class="aside-title">分类专栏</h3>
<div class="aside-content" id="aside-content">
<ul>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_13134725.html" data-report-click='{"mod":"popu_537","spm":"3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_13134725.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="title oneline">
ESP32 嵌入式开发
</span>
</a>
<span class="special-column-num">5篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_9288591.html" data-report-click='{"mod":"popu_537","spm":"3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_9288591.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/blog_column_migrate/02f70b47167debaaeef2fdf290b662b7.jpeg?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="title oneline">
AGV CAR
</span>
</a>
<span class="special-column-num">2篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_9288293.html" data-report-click='{"mod":"popu_537","spm":"3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_9288293.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/blog_column_migrate/60d321f36c9939bba6ec04c4ec5b4d36.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="title oneline">
【CNC项目】基于PMAC数控机床设计调试记录
</span>
</a>
<span class="special-column-num">12篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_9288099.html" data-report-click='{"mod":"popu_537","spm":"3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_9288099.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/blog_column_migrate/bb0efdfc43f671651ac4d38d827820f3.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="title oneline">
Automatic Mower Project
</span>
</a>
<span class="special-column-num">1篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_9280003.html" data-report-click='{"mod":"popu_537","spm":"3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_9280003.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/blog_column_migrate/aba062d09cf5388c16a1c5efa1661eed.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="title oneline">
手把手教你制作OpenMV视觉小车
</span>
</a>
<span class="special-column-num">4篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_10086205.html" data-report-click='{"mod":"popu_537","spm":"3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_10086205.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="title oneline">
脚本
</span>
</a>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_10329206.html" data-report-click='{"mod":"popu_537","spm":"3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_10329206.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="title oneline">
Halcon
</span>
</a>
<span class="special-column-num">8篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_9982804.html" data-report-click='{"mod":"popu_537","spm":"3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_9982804.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="title oneline">
MCD
</span>
</a>
<span class="special-column-num">8篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_9692859.html" data-report-click='{"mod":"popu_537","spm":"3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_9692859.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="title oneline">
机器视觉
</span>
</a>
<span class="special-column-num">2篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_9692858.html" data-report-click='{"mod":"popu_537","spm":"3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_9692858.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="title oneline">
口罩穿戴检测系统
</span>
</a>
<span class="special-column-num">3篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_10093663.html" data-report-click='{"mod":"popu_537","spm":"3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_10093663.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="title oneline">
控制原理
</span>
</a>
<span class="special-column-num">1篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_10093665.html" data-report-click='{"mod":"popu_537","spm":"3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_10093665.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="title oneline">
一级倒立摆
</span>
</a>
<span class="special-column-num">1篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_10039741.html" data-report-click='{"mod":"popu_537","spm":"3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_10039741.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="title oneline">
运动控制
</span>
</a>
<span class="special-column-num">2篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_9673885.html" data-report-click='{"mod":"popu_537","spm":"3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_9673885.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="title oneline">
PMAC运动控制【Turbo Clipper】
</span>
</a>
<span class="special-column-num">1篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_9719677.html" data-report-click='{"mod":"popu_537","spm":"3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_9719677.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="title oneline">
小万
</span>
</a>
<span class="special-column-num">1篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_9389793.html" data-report-click='{"mod":"popu_537","spm":"3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_9389793.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="title oneline">
plansimulation
</span>
</a>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_8104563.html" data-report-click='{"mod":"popu_537","spm":"3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_8104563.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="title oneline">
机械自动化
</span>
</a>
<span class="special-column-num">21篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_8024456.html" data-report-click='{"mod":"popu_537","spm":"3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_8024456.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="title oneline">
吟唱
</span>
</a>
<span class="special-column-num">2篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_8024458.html" data-report-click='{"mod":"popu_537","spm":"3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_8024458.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="title oneline">
技术第一
</span>
</a>
<span class="special-column-num">7篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_8032237.html" data-report-click='{"mod":"popu_537","spm":"3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_8032237.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="title oneline">
武协
</span>
</a>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_8104569.html" data-report-click='{"mod":"popu_537","spm":"3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_8104569.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="title oneline">
openmv
</span>
</a>
<span class="special-column-num">9篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_8104575.html" data-report-click='{"mod":"popu_537","spm":"3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_8104575.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="title oneline">
arduino
</span>
</a>
<span class="special-column-num">11篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_8114073.html" data-report-click='{"mod":"popu_537","spm":"3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_8114073.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="title oneline">
adobe
</span>
</a>
<span class="special-column-num">2篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_8124632.html" data-report-click='{"mod":"popu_537","spm":"3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_8124632.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="title oneline">
python
</span>
</a>
<span class="special-column-num">3篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_8296989.html" data-report-click='{"mod":"popu_537","spm":"3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_8296989.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="title oneline">
Matlab
</span>
</a>
<span class="special-column-num">6篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_8341101.html" data-report-click='{"mod":"popu_537","spm":"3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_8341101.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="title oneline">
win10
</span>
</a>
<span class="special-column-num">2篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_8453752.html" data-report-click='{"mod":"popu_537","spm":"3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_8453752.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="title oneline">
html
</span>
</a>
<span class="special-column-num">5篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_8533217.html" data-report-click='{"mod":"popu_537","spm":"3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_8533217.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="title oneline">
科幻
</span>
</a>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_8573105.html" data-report-click='{"mod":"popu_537","spm":"3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_8573105.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="title oneline">
历史记录机
</span>
</a>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_8631052.html" data-report-click='{"mod":"popu_537","spm":"3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_8631052.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="title oneline">
手把手教你做OpenMV小车
</span>
</a>
<span class="special-column-num">4篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_8874721.html" data-report-click='{"mod":"popu_537","spm":"3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_8874721.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="title oneline">
cnc
</span>
</a>
<span class="special-column-num">13篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_8892858.html" data-report-click='{"mod":"popu_537","spm":"3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_8892858.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="title oneline">
AGV
</span>
</a>
<span class="special-column-num">1篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_8940215.html" data-report-click='{"mod":"popu_537","spm":"3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_8940215.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="title oneline">
Proteus
</span>
</a>
<span class="special-column-num">1篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_8952722.html" data-report-click='{"mod":"popu_537","spm":"3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_8952722.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="title oneline">
opencv
</span>
</a>
<span class="special-column-num">3篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_8959150.html" data-report-click='{"mod":"popu_537","spm":"3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_8959150.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="title oneline">
vs
</span>
</a>
<span class="special-column-num">2篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_9060617.html" data-report-click='{"mod":"popu_537","spm":"3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_9060617.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="title oneline">
aistudio
</span>
</a>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_9073687.html" data-report-click='{"mod":"popu_537","spm":"3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_9073687.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="title oneline">
机器学习
</span>
</a>
<span class="special-column-num">2篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_9162072.html" data-report-click='{"mod":"popu_537","spm":"3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_9162072.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="title oneline">
Github
</span>
</a>
</li>
</ul>
</div>
<p class="text-center">
<a class="flexible-btn-new" data-report-click='{"spm":"3001.10779","strategy":"展开全部"}' data-maxheight="0" data-minheight="208px" data-fbox="#aside-content" data-flag="flag"><span class="text">展开全部</span> <img class="look-more" src="https://csdnimg.cn/release/blogv2/dist/pc/img/arrowup-line-bot-White.png" alt=""></a>
<a class="flexible-btn-new-close" data-report-click='{"spm":"3001.10779","strategy":"收起"}' data-minheight="208px" data-fbox="#aside-content" data-scroll="true" data-flag="flag"><span class="text">收起</span> <img class="look-more" src="https://csdnimg.cn/release/blogv2/dist/pc/img/arrowup-line-top-White.png" alt=""></a>
</p>
</div>
<div class="article-previous" id="article-previous">
<dl data-report-click='{"spm":"3001.10752","extend1":"上一篇"}' data-report-view='{"spm":"3001.10752","extend1":"上一篇"}'>
<dt>
上一篇:
</dt>
<dd>
<a href="https://blog.csdn.net/qq_42807924/article/details/118981291" data-report-query="spm=3001.10752">
检测、分选、固晶 芯片缺角检测 Halcon
</a>
</dd>
</dl>
<dl class="next" data-report-click='{"spm":"3001.10796","extend1":"下一篇"}' data-report-view='{"spm":"3001.10796","extend1":"下一篇"}'>
<dt>
下一篇:
</dt>
<dd >
<a href="https://blog.csdn.net/qq_42807924/article/details/158668202" data-report-query="spm=3001.10796">
【小白实操】ESP32-CAM接入豆包AI实现猫识别附完整代码
</a>
</dd>
</dl>
</div>
<div id="asideHotArticle" class="aside-box">
<h3 class="aside-title">大家在看</h3>
<div class="aside-content">
<ul class="hotArticle-list">
<li>
<a href="https://blog.csdn.net/2401_82617164/article/details/160342603" target="_blank" data-report-click='{"spm":"3001.10093","dest":"https://blog.csdn.net/2401_82617164/article/details/160342603","strategy":"202_1052723-4057455_RCMD","ab":"new"}' data-report-view='{"spm":"3001.10093","dest":"https://blog.csdn.net/2401_82617164/article/details/160342603","strategy":"202_1052723-4057455_RCMD","ab":"new"}'>
拆解程序员接单群的“死亡魔咒”:为何看似抱团的联盟,最终都走向沉寂?
<img src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
<span class="read">93</span>
</a>
</li>
<li>
<a href="https://blog.csdn.net/zmkmgeo/article/details/160244570" target="_blank" data-report-click='{"spm":"3001.10093","dest":"https://blog.csdn.net/zmkmgeo/article/details/160244570","strategy":"202_1052723-4057451_RCMD","ab":"new"}' data-report-view='{"spm":"3001.10093","dest":"https://blog.csdn.net/zmkmgeo/article/details/160244570","strategy":"202_1052723-4057451_RCMD","ab":"new"}'>
重塑AI时代的搜索可见性与内容营销—2026年GEO生成式引擎优化行业研究报告
<img src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
<span class="read">374</span>
</a>
</li>
<li>
<a href="https://blog.csdn.net/yundian17888/article/details/160370742" target="_blank" data-report-click='{"spm":"3001.10093","dest":"https://blog.csdn.net/yundian17888/article/details/160370742","strategy":"202_1052723-4057401_RCMD","ab":"new"}' data-report-view='{"spm":"3001.10093","dest":"https://blog.csdn.net/yundian17888/article/details/160370742","strategy":"202_1052723-4057401_RCMD","ab":"new"}'>
MA指标趋势反转信号
<img src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
<span class="read">5</span>
</a>
</li>
<li>
<a href="https://blog.csdn.net/weixin_55357163/article/details/160289831" target="_blank" data-report-click='{"spm":"3001.10093","dest":"https://blog.csdn.net/weixin_55357163/article/details/160289831","strategy":"202_1052723-4057446_RCMD","ab":"new"}' data-report-view='{"spm":"3001.10093","dest":"https://blog.csdn.net/weixin_55357163/article/details/160289831","strategy":"202_1052723-4057446_RCMD","ab":"new"}'>
一个人+一个AI Agent = 运维团队?我的真实体验报告
<img src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
<span class="read">179</span>
</a>
</li>
<li>
<a href="https://blog.csdn.net/m0_74901008/article/details/160378370" target="_blank" data-report-click='{"spm":"3001.10093","dest":"https://blog.csdn.net/m0_74901008/article/details/160378370","strategy":"202_1052723-4057393_RCMD","ab":"new"}' data-report-view='{"spm":"3001.10093","dest":"https://blog.csdn.net/m0_74901008/article/details/160378370","strategy":"202_1052723-4057393_RCMD","ab":"new"}'>
静态IPvs动态IP代理区别解析与多场景选型指南
</a>
</li>
</ul>
</div>
</div>
<div id="asideArchive" class="aside-box" style="display:block!important; width:300px;">
<h3 class="aside-title">最新文章</h3>
<div class="aside-content">
<ul class="inf_list clearfix">
<li class="clearfix">
<a href="https://yunjingshan.blog.csdn.net/article/details/159517007" target="_blank" data-report-click='{"mod":"popu_382","spm":"3001.4136","dest":"https://yunjingshan.blog.csdn.net/article/details/159517007","ab":"left"}' data-report-view='{"mod":"popu_382","spm":"3001.4136","dest":"https://yunjingshan.blog.csdn.net/article/details/159517007","ab":"left"}'>ESP32-CAM 炒面检测 + 语音报警小白也能搞定3D打印机智能监控</a>
</li>
<li class="clearfix">
<a href="https://yunjingshan.blog.csdn.net/article/details/159477240" target="_blank" data-report-click='{"mod":"popu_382","spm":"3001.4136","dest":"https://yunjingshan.blog.csdn.net/article/details/159477240","ab":"left"}' data-report-view='{"mod":"popu_382","spm":"3001.4136","dest":"https://yunjingshan.blog.csdn.net/article/details/159477240","ab":"left"}'>ESP32 CAM 实现 3D 打印机 “炒面” 检测,告别打印失败!</a>
</li>
<li class="clearfix">
<a href="https://yunjingshan.blog.csdn.net/article/details/159397419" target="_blank" data-report-click='{"mod":"popu_382","spm":"3001.4136","dest":"https://yunjingshan.blog.csdn.net/article/details/159397419","ab":"left"}' data-report-view='{"mod":"popu_382","spm":"3001.4136","dest":"https://yunjingshan.blog.csdn.net/article/details/159397419","ab":"left"}'>小白也能搞定ESP32驱动喇叭喊“小爱同学 关掉打印机”</a>
</li>
</ul>
<div class="archive-bar"></div>
<div class="archive-box">
<div class="archive-list-item"><a href="https://yunjingshan.blog.csdn.net?type=blog&amp;year=2026&amp;month=03" target="_blank" data-report-click='{"mod":"popu_538","spm":"3001.4138","ab":"new","dest":"https://yunjingshan.blog.csdn.net?type=blog&amp;year=2026&amp;month=03"}'><span class="year">2026年</span><span class="num">5篇</span></a></div>
<div class="archive-list-item"><a href="https://yunjingshan.blog.csdn.net?type=blog&amp;year=2021&amp;month=07" target="_blank" data-report-click='{"mod":"popu_538","spm":"3001.4138","ab":"new","dest":"https://yunjingshan.blog.csdn.net?type=blog&amp;year=2021&amp;month=07"}'><span class="year">2021年</span><span class="num">1篇</span></a></div>
<div class="archive-list-item"><a href="https://yunjingshan.blog.csdn.net?type=blog&amp;year=2020&amp;month=12" target="_blank" data-report-click='{"mod":"popu_538","spm":"3001.4138","ab":"new","dest":"https://yunjingshan.blog.csdn.net?type=blog&amp;year=2020&amp;month=12"}'><span class="year">2020年</span><span class="num">27篇</span></a></div>
<div class="archive-list-item"><a href="https://yunjingshan.blog.csdn.net?type=blog&amp;year=2019&amp;month=09" target="_blank" data-report-click='{"mod":"popu_538","spm":"3001.4138","ab":"new","dest":"https://yunjingshan.blog.csdn.net?type=blog&amp;year=2019&amp;month=09"}'><span class="year">2019年</span><span class="num">34篇</span></a></div>
<div class="archive-list-item"><a href="https://yunjingshan.blog.csdn.net?type=blog&amp;year=2018&amp;month=12" target="_blank" data-report-click='{"mod":"popu_538","spm":"3001.4138","ab":"new","dest":"https://yunjingshan.blog.csdn.net?type=blog&amp;year=2018&amp;month=12"}'><span class="year">2018年</span><span class="num">51篇</span></a></div>
</div>
</div>
</div>
<!-- 详情页显示目录 -->
<div class="aside-box cknows-side-card js-aside-cknows">
<div class="cknows-side-header">
<div class="cknows-side-header-row">
<div class="cknows-side-logo-wrap">
<img class="cknows-side-logo" src="https://csdnimg.cn/release/blogv2/dist/pc/img/c-blog-slidelogo-White.png" alt="C知道">
</div>
<p class="cknows-side-brand">· AI 阅读助手</p>
</div>
</div>
<div class="swiper cknows-side-swiper">
<div class="swiper-wrapper cknows-swiper-wrapper"></div>
<div class="cknows-side-pagination swiper-pagination"></div>
</div>
</div>
<!--文章目录-->
<div id="asidedirectory" class="aside-box">
<div class='groupfile groupfile-active' id="directory">
<h3 class="aside-title">目录</h3>
<div class="align-items-stretch group_item" id="align-items-stretch">
<div class="pos-box">
<div class="scroll-box">
<div class="toc-box"></div>
</div>
</div>
</div>
<p class="flexible-btn-new active" id="flexible-btn-groupfile" data-report-click='{"spm":"3001.10780","strategy":"展开全部"}' data-minheight="117px" data-maxheight="446px" data-fbox="#align-items-stretch"><span class="text">展开全部</span> <img class="look-more" src="https://csdnimg.cn/release/blogv2/dist/pc/img/arrowup-line-bot-White.png" alt=""></p>
<p class="flexible-btn-new-close active" data-report-click='{"spm":"3001.10780","strategy":"收起"}' data-minheight="117px" data-maxheight="446px" data-fbox="#align-items-stretch"><span class="text">收起</span> <img class="look-more" src="https://csdnimg.cn/release/blogv2/dist/pc/img/arrowup-line-top-White.png" alt=""></p>
</div>
</div>
<div class="gitcode-qc-left-box aside-box" data-report-click='{"spm":"3001.11256", "extra":"{\"position\":\"left\"}"}'></div>
</aside>
<script>
$("a.flexible-btn").click(function(){
$(this).parents('div.aside-box').removeClass('flexible-box');
$(this).parents("p.text-center").remove();
})
</script>
<script type="text/javascript" src="https://g.csdnimg.cn/user-tooltip/2.7/user-tooltip.js"></script>
<script type="text/javascript" src="https://g.csdnimg.cn/user-medal/2.0.0/user-medal.js"></script>
</div>
<div class="recommend-right align-items-stretch clearfix" id="rightAside" data-type="recommend">
<aside class="recommend-right_aside">
<div class="rightside-fixed-hide">
<div class="programmer1Box">
<div id="kp_box_530" data-pid="530"><iframe src="https://kunpeng-sc.csdnimg.cn/?timestamp=1645783940/#/preview/3819396?positionId=530&adBlockFlag=0&adId=1093540&queryWord=新手零门槛搭建 ESP32 + OV3660 摄像头 MJPEG 流服务器ESP-IDF v5.1.6 适配版)&spm=1001.2101.3001.4647&articleId=158542939" frameborder="0" width= "300px" height= "600px" scrolling="no" ></iframe><img class="pre-img-lasy" data-src="https://kunyu.csdn.net/1.png?p=530&adBlockFlag=0&adId=1093540&a=1093540&c=3819396&k=新手零门槛搭建 ESP32 + OV3660 摄像头 MJPEG 流服务器ESP-IDF v5.1.6 适配版)&spm=1001.2101.3001.4647&articleId=158542939&d=1&t=3&u=e5470a307c964e5c9701107a08cd8c55" style="display: block;width: 0px;height: 0px;"><script src="https://kunpeng-render.csdnimg.cn/publisher/latest/closeAdFrame.js"></script></div>
</div>
</div>
<div id="recommend-right" >
<div class="aside-box cknows-side-card js-aside-cknows">
<div class="cknows-side-header">
<div class="cknows-side-header-row">
<div class="cknows-side-logo-wrap">
<img class="cknows-side-logo" src="https://csdnimg.cn/release/blogv2/dist/pc/img/c-blog-slidelogo-White.png" alt="C知道">
</div>
<p class="cknows-side-brand">· AI 阅读助手</p>
</div>
</div>
<div class="swiper cknows-side-swiper">
<div class="swiper-wrapper cknows-swiper-wrapper"></div>
<div class="cknows-side-pagination swiper-pagination"></div>
</div>
</div>
<div class='flex-column aside-box groupfile groupfile-active ' id="groupfile">
<div class="groupfile-div">
<h3 class="aside-title">目录</h3>
<div class="align-items-stretch group_item" id="align-items-stretch-right">
<div class="pos-box">
<div class="scroll-box">
<div class="toc-box"></div>
</div>
</div>
</div>
<p class="flexible-btn-new" id="flexible-btn-groupfile" data-report-click='{"spm":"3001.10782","strategy":"展开全部"}' data-traigger="true" data-minheight="117px" data-maxheight="446px" data-fbox="#align-items-stretch-right"><span class="text">展开全部</span> <img class="look-more" src="https://csdnimg.cn/release/blogv2/dist/pc/img/arrowup-line-bot-White.png" alt=""></p>
<p class="flexible-btn-new-close close" data-report-click='{"spm":"3001.10782","strategy":"收起"}' data-traigger="true" data-minheight="117px" data-maxheight="446px" data-fbox="#align-items-stretch-right"><span class="text">收起</span> <img class="look-more" src="https://csdnimg.cn/release/blogv2/dist/pc/img/arrowup-line-top-White.png" alt=""></p>
</div>
</div>
<div class="gitcode-qc-right-box aside-box" data-report-click='{"spm":"3001.11256", "extra":"{\"position\":\"right\"}"}'></div>
<div id="recommendAdBox">
<div id="kp_box_479" data-pid="479"><div class="wwads-cn wwads-vertical" data-id="149" style="max-width:300px;margin-top:0;margin-bottom:10px;background-color: #fff;"></div>
<style>.wwads-img img {width: 150px; margin-top:10px}</style>
<script type="text/javascript" charset="UTF-8" src="https://cdn.wwads.cn/js/makemoney.js" async></script><img class="pre-img-lasy" data-src="https://kunyu.csdn.net/1.png?p=479&adId=1071044&adBlockFlag=0&a=1071044&c=0&k=新手零门槛搭建 ESP32 + OV3660 摄像头 MJPEG 流服务器ESP-IDF v5.1.6 适配版)&spm=1001.2101.3001.4834&articleId=158542939&d=1&t=3&u=2513f1af94844d2687cdce404504685a" style="display: block;width: 0px;height: 0px;"></div>
</div>
<div class="article-previous" id="article">
<dl data-report-click='{"spm":"3001.10752","extend1":"上一篇"}' data-report-view='{"spm":"3001.10752","extend1":"上一篇"}'>
<dt>
上一篇:
</dt>
<dd>
<a href="https://blog.csdn.net/qq_42807924/article/details/118981291" data-report-query="spm=3001.10752">
检测、分选、固晶 芯片缺角检测 Halcon
</a>
</dd>
</dl>
<dl class="next" data-report-click='{"spm":"3001.10796","extend1":"下一篇"}' data-report-view='{"spm":"3001.10796","extend1":"下一篇"}'>
<dt>
下一篇:
</dt>
<dd >
<a href="https://blog.csdn.net/qq_42807924/article/details/158668202" data-report-query="spm=3001.10796">
【小白实操】ESP32-CAM接入豆包AI实现猫识别附完整代码
</a>
</dd>
</dl>
</div>
<div class='aside-box kind_person d-flex flex-column flexible-box-new' >
<h3 class="aside-title">分类专栏</h3>
<div class="align-items-stretch kindof_item" id="kind_person_column">
<div class="aside-content" id="aside-content-column">
<ul>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_13134725.html" data-report-click='{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_13134725.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="">
ESP32 嵌入式开发
</span>
</a>
<span class="special-column-num">5篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_9288591.html" data-report-click='{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_9288591.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/blog_column_migrate/02f70b47167debaaeef2fdf290b662b7.jpeg?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="">
AGV CAR
</span>
</a>
<span class="special-column-num">2篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_9288293.html" data-report-click='{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_9288293.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/blog_column_migrate/60d321f36c9939bba6ec04c4ec5b4d36.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="">
【CNC项目】基于PMAC数控机床设计调试记录
</span>
</a>
<span class="special-column-num">12篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_9288099.html" data-report-click='{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_9288099.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/blog_column_migrate/bb0efdfc43f671651ac4d38d827820f3.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="">
Automatic Mower Project
</span>
</a>
<span class="special-column-num">1篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_9280003.html" data-report-click='{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_9280003.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/blog_column_migrate/aba062d09cf5388c16a1c5efa1661eed.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="">
手把手教你制作OpenMV视觉小车
</span>
</a>
<span class="special-column-num">4篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_10086205.html" data-report-click='{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_10086205.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="">
脚本
</span>
</a>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_10329206.html" data-report-click='{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_10329206.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="">
Halcon
</span>
</a>
<span class="special-column-num">8篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_9982804.html" data-report-click='{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_9982804.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="">
MCD
</span>
</a>
<span class="special-column-num">8篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_9692859.html" data-report-click='{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_9692859.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="">
机器视觉
</span>
</a>
<span class="special-column-num">2篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_9692858.html" data-report-click='{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_9692858.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="">
口罩穿戴检测系统
</span>
</a>
<span class="special-column-num">3篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_10093663.html" data-report-click='{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_10093663.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="">
控制原理
</span>
</a>
<span class="special-column-num">1篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_10093665.html" data-report-click='{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_10093665.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="">
一级倒立摆
</span>
</a>
<span class="special-column-num">1篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_10039741.html" data-report-click='{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_10039741.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="">
运动控制
</span>
</a>
<span class="special-column-num">2篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_9673885.html" data-report-click='{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_9673885.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="">
PMAC运动控制【Turbo Clipper】
</span>
</a>
<span class="special-column-num">1篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_9719677.html" data-report-click='{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_9719677.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="">
小万
</span>
</a>
<span class="special-column-num">1篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_9389793.html" data-report-click='{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_9389793.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="">
plansimulation
</span>
</a>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_8104563.html" data-report-click='{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_8104563.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="">
机械自动化
</span>
</a>
<span class="special-column-num">21篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_8024456.html" data-report-click='{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_8024456.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="">
吟唱
</span>
</a>
<span class="special-column-num">2篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_8024458.html" data-report-click='{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_8024458.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="">
技术第一
</span>
</a>
<span class="special-column-num">7篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_8032237.html" data-report-click='{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_8032237.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="">
武协
</span>
</a>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_8104569.html" data-report-click='{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_8104569.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="">
openmv
</span>
</a>
<span class="special-column-num">9篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_8104575.html" data-report-click='{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_8104575.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="">
arduino
</span>
</a>
<span class="special-column-num">11篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_8114073.html" data-report-click='{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_8114073.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="">
adobe
</span>
</a>
<span class="special-column-num">2篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_8124632.html" data-report-click='{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_8124632.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="">
python
</span>
</a>
<span class="special-column-num">3篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_8296989.html" data-report-click='{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_8296989.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="">
Matlab
</span>
</a>
<span class="special-column-num">6篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_8341101.html" data-report-click='{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_8341101.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="">
win10
</span>
</a>
<span class="special-column-num">2篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_8453752.html" data-report-click='{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_8453752.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="">
html
</span>
</a>
<span class="special-column-num">5篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_8533217.html" data-report-click='{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_8533217.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="">
科幻
</span>
</a>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_8573105.html" data-report-click='{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_8573105.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="">
历史记录机
</span>
</a>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_8631052.html" data-report-click='{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_8631052.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="">
手把手教你做OpenMV小车
</span>
</a>
<span class="special-column-num">4篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_8874721.html" data-report-click='{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_8874721.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="">
cnc
</span>
</a>
<span class="special-column-num">13篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_8892858.html" data-report-click='{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_8892858.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="">
AGV
</span>
</a>
<span class="special-column-num">1篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_8940215.html" data-report-click='{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_8940215.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="">
Proteus
</span>
</a>
<span class="special-column-num">1篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_8952722.html" data-report-click='{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_8952722.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="">
opencv
</span>
</a>
<span class="special-column-num">3篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_8959150.html" data-report-click='{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_8959150.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="">
vs
</span>
</a>
<span class="special-column-num">2篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_9060617.html" data-report-click='{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_9060617.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="">
aistudio
</span>
</a>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_9073687.html" data-report-click='{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_9073687.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="">
机器学习
</span>
</a>
<span class="special-column-num">2篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/qq_42807924/category_9162072.html" data-report-click='{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/qq_42807924/category_9162072.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://i-blog.csdnimg.cn/columns/default/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://i-blog.csdnimg.cn/columns/default/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="">
Github
</span>
</a>
</li>
</ul>
</div>
<p class="text-center">
<a class="flexible-btn-new" data-report-click='{"spm":"3001.10783","strategy":"展开全部"}' data-traigger="true" data-maxheight="0" data-minheight="208px" data-fbox="#aside-content-column" data-flag="flag"><span class="text">展开全部</span> <img class="look-more" src="https://csdnimg.cn/release/blogv2/dist/pc/img/arrowup-line-bot-White.png" alt=""></a>
<a class="flexible-btn-new-close" data-report-click='{"spm":"3001.10783","strategy":"收起"}'data-traigger="true" data-minheight="208px" data-fbox="#aside-content-column" data-scroll="true" data-flag="flag"><span class="text">收起</span> <img class="look-more" src="https://csdnimg.cn/release/blogv2/dist/pc/img/arrowup-line-top-White.png" alt=""></a>
</p>
</div>
</div>
</div>
</aside>
</div>
<div class="recommend-right1 align-items-stretch clearfix" id="rightAsideConcision" data-type="recommend">
<aside class="recommend-right_aside">
<div id="recommend-right-concision" >
<div class='flex-column aside-box groupfile' id="groupfileConcision">
<div class="groupfile-div1">
<h3 class="aside-title">目录</h3>
<div class="align-items-stretch group_item">
<div class="pos-box">
<div class="scroll-box">
<div class="toc-box"></div>
</div>
</div>
</div>
</div>
</div>
</div>
</aside>
</div>
</div>
<div class="mask-dark"></div>
<div class="skin-boxshadow"></div>
<div class="directory-boxshadow"></div>
<div class="comment-side-box-shadow comment-side-tit-close" id="commentSideBoxshadow">
<div class="comment-side-content">
<div class="comment-side-tit">
<div class="comment-side-tit-count">评论&nbsp;<span class="count">1</span></div>
<img class="comment-side-tit-close" src="https://csdnimg.cn/release/blogv2/dist/pc/img/closeBt.png"></div>
<div id="pcCommentSideBox" class="comment-box comment-box-new2 " style="display:block">
<div class="comment-edit-box d-flex">
<div class="user-img">
<a href="https://blog.csdn.net/weixin_40298538" target="_blank">
<img src="https://profile-avatar.csdnimg.cn/default.jpg!1">
</a>
</div>
<form id="commentform">
<textarea class="comment-content" name="comment_content" id="comment_content" placeholder="欢迎高质量的评论,低质的评论会被折叠" maxlength="1000"></textarea>
<div class="comment-reward-box" style="background-image: url('https://img-home.csdnimg.cn/images/20230131025301.png');">
<a class="btn-remove-reward"></a>
<div class="form-reward-box">
<div class="info">
成就一亿技术人!
</div>
<div class="price-info">
拼手气红包<span class="price">6.0元</span>
</div>
</div>
</div>
<div class="comment-operate-box">
<div class="comment-operate-l">
<span id="tip_comment" class="tip">还能输入<em>1000</em>个字符</span>
</div>
<div class="comment-operate-c">
&nbsp;
</div>
<div class="comment-operate-r">
<div class="comment-operate-item comment-reward">
<img class="comment-operate-img" data-url="https://csdnimg.cn/release/blogv2/dist/pc/img/" src="https://csdnimg.cn/release/blogv2/dist/pc/img/commentReward.png" alt="红包">
<span class="comment-operate-tip">添加红包</span>
</div>
<div class="comment-operate-item comment-emoticon">
<img class="comment-operate-img" data-url="https://csdnimg.cn/release/blogv2/dist/pc/img/" src="https://csdnimg.cn/release/blogv2/dist/pc/img/commentEmotionIcon.png" alt="表情包">
<span class="comment-operate-tip">插入表情</span>
<div class="comment-emoticon-box comment-operate-isshow">
<div class="comment-emoticon-img-box"></div>
</div>
</div>
<div class="comment-operate-item comment-code">
<img class="comment-operate-img" data-url="https://csdnimg.cn/release/blogv2/dist/pc/img/" src="https://csdnimg.cn/release/blogv2/dist/pc/img/commentCodeIcon.png" alt="表情包">
<span class="comment-operate-tip">代码片</span>
<div class="comment-code-box comment-operate-isshow">
<ul id="commentCode">
<li><a data-code="html">HTML/XML</a></li>
<li><a data-code="objc">objective-c</a></li>
<li><a data-code="ruby">Ruby</a></li>
<li><a data-code="php">PHP</a></li>
<li><a data-code="csharp">C</a></li>
<li><a data-code="cpp">C++</a></li>
<li><a data-code="javascript">JavaScript</a></li>
<li><a data-code="python">Python</a></li>
<li><a data-code="java">Java</a></li>
<li><a data-code="css">CSS</a></li>
<li><a data-code="sql">SQL</a></li>
<li><a data-code="plain">其它</a></li>
</ul>
</div>
</div>
<div class="comment-operate-item">
<input type="hidden" id="comment_replyId" name="comment_replyId">
<input type="hidden" id="article_id" name="article_id" value="158542939">
<input type="hidden" id="comment_userId" name="comment_userId" value="">
<input type="hidden" id="commentId" name="commentId" value="">
<a data-report-click='{"mod":"1582594662_003","spm":"1001.2101.3001.4227","ab":"new"}'>
<input type="submit" class="btn-comment btn-comment-input" value="评论">
</a>
</div>
</div>
</div>
</form>
</div>
<div class="comment-list-container">
<div class="comment-list-box comment-operate-item">
</div>
<div id="lookGoodComment" class="look-good-comment side-look-comment">
<a class="look-more-comment">查看更多评论<img src="https://csdnimg.cn/release/blogv2/dist/pc/img/commentArrowDownWhite.png" alt=""></a>
</div>
<div id="lookFlodComment" class="look-flod-comment">
<span class="count"></span>&nbsp;条评论被折叠&nbsp;<a class="look-more-flodcomment">查看</a>
</div>
<div class="opt-box text-center">
<div class="btn btn-sm btn-link-blue" id="btnMoreComment"></div>
</div>
</div>
</div>
<div id="pcFlodCommentSideBox" class="pc-flodcomment-sidebox">
<div class="comment-fold-tit"><span id="lookUnFlodComment" class="back"><img src="https://csdnimg.cn/release/blogv2/dist/pc/img/commentArrowLeftWhite.png" alt=""></span>被折叠的&nbsp;<span class="count"></span>&nbsp;条评论
<a href="https://blogdev.blog.csdn.net/article/details/122245662" class="tip" target="_blank">为什么被折叠?</a>
<a href="https://bbs.csdn.net/forums/FreeZone" class="park" target="_blank">
<img src="https://csdnimg.cn/release/blogv2/dist/pc/img/iconPark.png">到【灌水乐园】发言</a>
</div>
<div class="comment-fold-content"></div>
<div id="lookBadComment" class="look-bad-comment side-look-comment">
<a class="look-more-comment">查看更多评论<img src="https://csdnimg.cn/release/blogv2/dist/pc/img/commentArrowDownWhite.png" alt=""></a>
</div>
</div>
</div>
<div class="comment-rewarddialog-box">
<div class="form-box">
<div class="title-box">
添加红包
<a class="btn-form-close"></a>
</div>
<form id="commentRewardForm">
<div class="ipt-box">
<label for="txtName">祝福语</label>
<div class="ipt-btn-box">
<input type="text" name="name" id="txtName" autocomplete="off" maxlength="50">
<a class="btn-ipt btn-random"></a>
</div>
<p class="notice">请填写红包祝福语或标题</p>
</div>
<div class="ipt-box">
<label for="txtSendAmount">红包数量</label>
<div class="ipt-txt-box">
<input type="text" name="sendAmount" maxlength="4" id="txtSendAmount" placeholder="请填写红包数量(最小10个)" autocomplete="off">
<span class="after-txt"></span>
</div>
<p class="notice">红包个数最小为10个</p>
</div>
<div class="ipt-box">
<label for="txtMoney">红包总金额</label>
<div class="ipt-txt-box error">
<input type="text" name="money" maxlength="5" id="txtMoney" placeholder="请填写总金额(最低5元)" autocomplete="off">
<span class="after-txt"></span>
</div>
<p class="notice">红包金额最低5元</p>
</div>
<div class="balance-info-box">
<label>余额支付</label>
<div class="balance-info">
当前余额<span class="balance">3.43</span>
<a href="https://i.csdn.net/#/wallet/balance/recharge" class="link-charge" target="_blank">前往充值 ></a>
</div>
</div>
<div class="opt-box">
<div class="pay-info">
需支付:<span class="price">10.00</span>
</div>
<button type="button" class="ml-auto btn-cancel">取消</button>
<button type="button" class="ml8 btn-submit" disabled="true">确定</button>
</div>
</form>
</div>
</div>
<div class="rr-guide-box">
<div class="rr-first-box">
<img src="https://csdnimg.cn/release/blogv2/dist/pc/img/guideRedReward02.png" alt="">
<button class="btn-guide-known next">下一步</button>
</div>
<div class="rr-second-box">
<img src="https://csdnimg.cn/release/blogv2/dist/pc/img/guideRedReward03.png" alt="">
<button class="btn-guide-known known">知道了</button>
</div>
</div>
</div>
<div class="redEnvolope" id="redEnvolope">
<div class="env-box">
<div class="env-container">
<div class="pre-open" id="preOpen">
<div class="top">
<header>
<img class="clearTpaErr" :src="redpacketAuthor.avatar" alt="" />
<div class="author">成就一亿技术人!</div>
</header>
<div class="bot-icon"></div>
</div>
<footer>
<div class="red-openbtn open-start"></div>
<div class="tip">
领取后你会自动成为博主和红包主的粉丝
<a class="rule" target="_blank">规则</a>
</div>
</footer>
</div>
<div class="opened" id="opened">
<div class="bot-icon">
<header>
<a class="creatorUrl" href="" target="_blank">
<img class="clearTpaErr" src="https://profile-avatar.csdnimg.cn/default.jpg!2" alt="" />
</a>
<div class="author">
<div class="tt">hope_wisdom</div> 发出的红包
</div>
</header>
</div>
<div class="receive-box">
<header></header>
<div class="receive-list">
</div>
</div>
</div>
</div>
<div class="close-btn"></div>
</div>
</div>
<div class="pay-code">
<div class="pay-money">实付<span class="pay-money-span" data-nowprice='' data-oldprice=''></span></div>
<div class="content-blance"><a class="blance-bt" href="javascript:;">使用余额支付</a></div>
<div class="content-code">
<div id="payCode" data-id="">
<div class="renovate">
<img src="https://csdnimg.cn/release/blogv2/dist/pc/img/pay-time-out.png">
<span>点击重新获取</span>
</div>
</div>
<div class="pay-style"><span><img src="https://csdnimg.cn/release/blogv2/dist/pc/img/weixin.png"></span><span><img src="https://csdnimg.cn/release/blogv2/dist/pc/img/zhifubao.png"></span><span><img src="https://csdnimg.cn/release/blogv2/dist/pc/img/jingdong.png"></span><span class="text">扫码支付</span></div>
</div>
<div class="bt-close">
<svg t="1567152543821" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10924" xmlns:xlink="http://www.w3.org/1999/xlink" width="12" height="12">
<defs>
<style type="text/css"></style>
</defs>
<path d="M512 438.378667L806.506667 143.893333a52.032 52.032 0 1 1 73.6 73.621334L585.621333 512l294.485334 294.485333a52.074667 52.074667 0 0 1-73.6 73.642667L512 585.621333 217.514667 880.128a52.053333 52.053333 0 1 1-73.621334-73.642667L438.378667 512 143.893333 217.514667a52.053333 52.053333 0 1 1 73.621334-73.621334L512 438.378667z" fill="" p-id="10925"></path>
</svg>
</div>
<div class="pay-balance">
<input type="radio" class="pay-code-radio" data-type="details">
<span class="span">钱包余额</span>
<span class="balance" style="color:#FC5531;font-size:14px;">0</span>
<div class="pay-code-tile">
<img src="https://csdnimg.cn/release/blogv2/dist/pc/img/pay-help.png" alt="">
<div class="pay-code-content">
<div class="span">
<p class="title">抵扣说明:</p>
<p> 1.余额是钱包充值的虚拟货币按照1:1的比例进行支付金额的抵扣。<br> 2.余额无法直接购买下载可以购买VIP、付费专栏及课程。</p>
</div>
</div>
</div>
</div>
<a class="pay-balance-con" href="https://i.csdn.net/#/wallet/balance/recharge" target="_blank"><img src="https://csdnimg.cn/release/blogv2/dist/pc/img/recharge.png" alt=""><span>余额充值</span></a>
</div>
<div style="display:none;">
<img src="" onerror='setTimeout(function(){if(!/(csdn.net|iteye.com|baiducontent.com|googleusercontent.com|360webcache.com|sogoucdn.com|bingj.com|baidu.com)$/.test(window.location.hostname)){window.location.href="\x68\x74\x74\x70\x73\x3a\x2f\x2f\x77\x77\x77\x2e\x63\x73\x64\x6e\x2e\x6e\x65\x74"}},3000);'>
</div>
<div class="keyword-dec-box" id="keywordDecBox"></div>
</body>
<script src="https://csdnimg.cn/release/blogv2/dist/components/js/axios-83fa28cedf.min.js" type="text/javascript"></script>
<script src="https://csdnimg.cn/release/blogv2/dist/components/js/pc_wap_highlight-8defd55d6e.min.js" type="text/javascript"></script>
<script src="https://csdnimg.cn/release/blogv2/dist/components/js/pc_wap_common-3c7b273c43.min.js" type="text/javascript"></script>
<script src="https://csdnimg.cn/release/blogv2/dist/components/js/edit_copy_code-43c2d050a0.min.js" type="text/javascript"></script>
<script src="https://g.csdnimg.cn/lib/cboxEditor/1.1.6/embed-editor.min.js" type="text/javascript"></script>
<link rel="stylesheet" href="https://g.csdnimg.cn/lib/cboxEditor/1.1.6/embed-editor.min.css">
<link rel="stylesheet" href="https://csdnimg.cn/release/blog_editor_html/release1.6.12/ckeditor/plugins/codesnippet/lib/highlight/styles/dracula.css">
<script src="https://g.csdnimg.cn/user-accusation/1.0.6/user-accusation.js" type="text/javascript"></script>
<script>
// 全局声明
if (window.csdn === undefined) {
window.csdn = {};
}
var sideToolbarOpt = {}
$(function() {
$(document).on('click', "#toolReportBtnHideNormal,#toolReportBtnHide", function() {
window.csdn.loginBox.key({
biz: 'blog',
subBiz: 'other_service',
cb: function() {
window.csdn.feedback({
"type": 'blog',
"rtype": 'article',
"rid": articleId,
"reportedName": username,
"submitOptions": {
"title": articleTitle,
"contentUrl": articleDetailUrl
},
"callback": function() {
showToast({
text: "感谢您的举报,我们会尽快审核!",
bottom: '10%',
zindex: 9000,
speed: 500,
time: 1500
})
}
})
}
})
});
})
window.csdn.sideToolbar = {
options: {
...sideToolbarOpt,
theme: 'white',
}
}
</script>
<script src="https://g.csdnimg.cn/baidu-search/1.0.12/baidu-search.js" type="text/javascript"></script>
<script src="https://csdnimg.cn/release/download/old_static/js/qrcode.js"></script>
<script src="https://g.csdnimg.cn/lib/qrcode/1.0.0/qrcode.min.js"></script>
<script src="https://g.csdnimg.cn/user-ordercart/3.0.1/user-ordercart.js" type="text/javascript"></script>
<script src="https://g.csdnimg.cn/user-ordertip/5.0.3/user-ordertip.js" type="text/javascript"></script>
<script src="https://g.csdnimg.cn/order-payment/4.0.5/order-payment.js" type="text/javascript"></script>
<script src="https://csdnimg.cn/release/blogv2/dist/pc/js/common-f7813d62bc.min.js" type="text/javascript"></script>
<script src="https://csdnimg.cn/release/blogv2/dist/pc/js/detail-e9c2039a7d.min.js" type="text/javascript"></script>
<script src="https://csdnimg.cn/release/blogv2/dist/pc/js/column-6c0f4f56fb.min.js" type="text/javascript"></script>
<script src="https://g.csdnimg.cn/side-toolbar/3.6/side-toolbar.js" type="text/javascript"></script>
<script src="https://g.csdnimg.cn/copyright/1.0.4/copyright.js" type="text/javascript"></script>
<script>
$(".MathJax").remove();
if ($('div.markdown_views pre.prettyprint code.hljs').length > 0) {
$('div.markdown_views')[0].className = 'markdown_views';
}
</script>
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
tex2jax: {
inlineMath: [['$', '$'], ['\\(', '\\)']],
displayMath: [['$$', '$$'], ['\\[', '\\]']],
processEscapes: true,
processClass: "mathjax",
ignoreClass: "title-article|no-mathjax",
preview: "none"
},
// 优先使用 HTML-CSS 而非 NativeMML
"HTML-CSS": {
preferredFont: "STIX", // 使用 STIX 字体
availableFonts: ["STIX", "TeX"],
webFont: "STIX-Web",
scale: 100, // 放大 20%
minScaleAdjust: 100,
linebreaks: {
automatic: true,
width: "90% container"
},
matchFontHeight: true,
styles: {
".MathJax": {
"font-weight": "500 !important" // 加粗
}
}
},
// 禁用 NativeMML浏览器原生渲染质量不好
NativeMML: {
scale: 100
},
// 设置优先级HTML-CSS > SVG > NativeMML
menuSettings: {
renderer: "HTML-CSS"
},
messageStyle: "none"
});
MathJax.Hub.Queue(["Typeset", MathJax.Hub]);
</script>
<script src="https://g.csdnimg.cn/static/mathjax-2.7.9/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/javascript" crossorigin src="https://g.csdnimg.cn/common/csdn-login-box/csdn-login-box.js"></script></html>