{"id":398383,"date":"2024-06-29T14:02:34","date_gmt":"2024-06-29T14:02:34","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=398383"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=398383","title":{"rendered":"<span>Esp32-\u043c\u0430\u0448\u0438\u043d\u043a\u0430 \u0441 \u043a\u0430\u043c\u0435\u0440\u043e\u0439. \u041f\u0440\u043e\u0435\u043a\u0442 \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0438<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/rk\/8d\/21\/rk8d21ruruywz9ankryj3jiqzs0.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/rk\/8d\/21\/rk8d21ruruywz9ankryj3jiqzs0.jpeg\" data-blurred=\"true\"\/><\/p>\n<p>  \u0421\u0440\u0435\u0434\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0445 \u043c\u0430\u0448\u0438\u043d\u043e\u043a, \u043e\u0441\u043d\u0430\u0449\u0435\u043d\u043d\u044b\u0445 \u043a\u0430\u043c\u0435\u0440\u043e\u0439, \u043e\u0441\u043e\u0431\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 \u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0431\u044b\u0441\u0442\u0440\u043e, \u0441 \u043c\u0438\u043d\u0438\u043c\u0443\u043c\u043e\u043c \u0434\u0435\u0442\u0430\u043b\u0435\u0439 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043d\u0435\u0447\u0442\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u0435 \u043f\u043e wi-fi. \u041d\u043e, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0437\u0434\u0435\u0441\u044c \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u0434\u0430\u0436\u0435 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043f\u043e\u0434\u0431\u043e\u0440\u043a\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0438\u0445 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043c\u044b \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0432 \u0431\u043e\u044e esp32-cam \u0438 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044f \u2014 tb6612fng.<\/p>\n<p>  \u041c\u0430\u0448\u0438\u043d\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0441\u043e \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0430 \u043b\u0438\u0431\u043e \u0441\u0442\u0430\u0446\u0438\u043e\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u041f\u041a \u0438, \u0440\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u0431\u0443\u0434\u0435\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0431\u044e\u0434\u0436\u0435\u0442\u043d\u0430\u044f. \u041f\u043e\u043c\u0438\u043c\u043e \u043f\u0440\u043e\u0447\u0435\u0433\u043e \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u043d\u044f\u0442\u0430 \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0443\u0439\u0442\u0438 \u043e\u0442 arduin, \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b.<\/p>\n<p>  \u041f\u0440\u043e\u0435\u043a\u0442 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d \u043d\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0445, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044e\u0449\u0438\u0445.<br \/>  <a name=\"habracut\"><\/a>   <\/p>\n<h3>\u041f\u0440\u0435\u0434\u0438\u0441\u043b\u043e\u0432\u0438\u0435<\/h3>\n<p>  \u041f\u043e\u0447\u0435\u043c\u0443 \u0438\u043c\u0435\u043d\u043d\u043e esp32-cam?<\/p>\n<p>  \u0414\u0430\u043d\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0430 \u0432\u044b\u0431\u0440\u0430\u043d\u0430 \u0432 \u0441\u0438\u043b\u0443 \u0441\u0432\u043e\u0435\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438 \u043f\u043e \u0446\u0435\u043d\u0435 \u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438.<br \/>  \u0418\u0437 \u0435\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432 \u0442\u0430\u043a\u0436\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044c \u2014 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u0430\u043c\u0435\u0440\u044b, \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e wi-fi, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0438\u0437\u043a\u043e\u0435 \u044d\u043d\u0435\u0440\u0433\u043e\u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435 \u0441\u0430\u043c\u043e\u0439 \u043f\u043b\u0430\u0442\u044b.<\/p>\n<p>  \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0432 <a href=\"https:\/\/www.instructables.com\/ESP32-Camera-Robot-FPV-Teacher-Entry\/\" rel=\"nofollow noopener noreferrer\">\u0441\u0445\u043e\u0436\u0438\u0445<\/a> \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432\u0441\u0435\u043c \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0435 arduino. \u041e\u043d\u0438 \u0431\u0435\u0440\u0443\u0442 \u043d\u0430 \u0441\u0435\u0431\u044f \u0437\u0430\u0431\u043e\u0442\u0443 \u043f\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044f\u043c\u0438. \u041d\u0435\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u0432 \u044d\u0442\u043e\u043c \u0437\u0430\u0437\u043e\u0440\u043d\u043e\u0433\u043e. \u041d\u043e \u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u0431\u0435\u0437 \u043d\u0438\u0445, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0442\u043e\u043b\u044c\u043a\u043e esp32? \u041e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u043c\u043e\u0436\u043d\u043e.<\/p>\n<p>  \u0412 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c, \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0435\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0432 \u0438 \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0432. <\/p>\n<p>  \u0412\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 (<a href=\"https:\/\/www.youtube.com\/watch?v=dZjbGpynQJA&amp;t=1265s\" rel=\"nofollow noopener noreferrer\">\u0441\u0441\u044b\u043b\u043a\u0430<\/a>), \u043d\u0430 \u043d\u0430\u0448 \u0432\u0437\u0433\u043b\u044f\u0434 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0443\u0434\u0430\u0447\u0435\u043d \u0441\u0440\u0435\u0434\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u043f\u0440\u043e\u0447\u0438\u0445 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 <a href=\"https:\/\/www.youtube.com\/watch?v=D0ugVJ1pEQw&amp;t=436s\" rel=\"nofollow noopener noreferrer\">\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e<\/a> \u043b\u0438\u0431\u043e <a href=\"https:\/\/www.youtube.com\/watch?v=xvkwcLCyFT0&amp;t=127s\" rel=\"nofollow noopener noreferrer\">\u044d\u0442\u043e\u0433\u043e<\/a>). <br \/>  *\u0425\u043e\u0442\u044f \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u043f\u043e-\u0441\u0432\u043e\u0435\u043c\u0443 \u0445\u043e\u0440\u043e\u0448\u0438 \u0438 \u0442\u0443\u0442 \u0443\u0436\u0435 \u0434\u0435\u043b\u043e \u0432\u043a\u0443\u0441\u0430.<\/p>\n<h3>\u0416\u0435\u043b\u0435\u0437\u043e<\/h3>\n<p>  \u041c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043e\u0434\u043d\u0443 \u043a\u043e\u043b\u0435\u0441\u043d\u0443\u044e \u043f\u0430\u0440\u0443 \u0438 \u043e\u0434\u043d\u043e \u00ab\u043f\u0441\u0435\u0432\u0434\u043e-\u043a\u043e\u043b\u0435\u0441\u043e\u00bb \u0441 \u0448\u0430\u0440\u043e\u043c \u0432\u043d\u0443\u0442\u0440\u0438. \u041c\u0430\u0448\u0438\u043d\u043a\u0430 \u0441 \u0434\u0432\u0443\u043c\u044f \u043a\u043e\u043b\u0435\u0441\u0430\u043c\u0438 \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u0441\u0442\u044c \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0447\u0435\u0442\u044b\u0440\u0435\u0445\u043a\u043e\u043b\u0435\u0441\u043d\u043e\u0439.<\/p>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u043d\u0430 \u0431\u0430\u0437\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u0431\u043e\u0440\u043a\u0430, \u043d\u0430\u0448\u0438 \u043a\u043e\u043b\u0435\u0441\u0430 \u0431\u0443\u0434\u0443\u0442 \u0438\u043d\u044b\u043c\u0438, \u043a\u0430\u043a \u0438 \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u0438. \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u043d\u044b\u0445 \u043a\u043e\u043b\u0435\u0441 \u043f\u0440\u043e\u0434\u0438\u043a\u0442\u043e\u0432\u0430\u043d\u0430 \u043e\u043f\u044b\u0442\u043e\u043c \u043f\u0440\u043e\u0441\u043a\u0430\u043b\u044c\u0437\u044b\u0432\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u043a\u043e\u043b\u0435\u0441 \u043d\u0430 \u043f\u0430\u0440\u043a\u0435\u0442\u0435, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043b\u044e\u0444\u0442\u043e\u043c \u0432 \u043c\u0435\u0441\u0442\u0430\u0445 \u043a\u0440\u0435\u043f\u043b\u0435\u043d\u0438\u044f \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u0435\u0439 \u043a \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435. \u041d\u0430\u0448\u0438 \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u0438 \u0431\u0443\u0434\u0443\u0442 \u043a\u0440\u0435\u043f\u0438\u0442\u044c\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u043b\u0430\u0441\u0442\u0438\u043a\u043e\u0432\u044b\u0445 \u0434\u0435\u0440\u0436\u0430\u0442\u0435\u043b\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u043a \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0442\u0435\u043d\u0438\u044e.<\/p>\n<p>  \u0412 \u0446\u0435\u043b\u043e\u043c \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442 \u0441\u0431\u043e\u0440\u043a\u0438 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c.<\/p>\n<p>  <b>\u0421\u043e\u0441\u0442\u0430\u0432 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442\u0443\u044e\u0449\u0438\u0445<\/b>:<\/p>\n<p>   \u2014 <a href=\"https:\/\/aliexpress.ru\/item\/33026783171.html\" rel=\"nofollow noopener noreferrer\">\u043a\u043e\u043b\u0435\u0441\u043d\u0430\u044f \u043f\u0430\u0440\u0430<\/a> \u2014 35 \u0440\u0443\u0431.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/dc\/rm\/xg\/dcrmxg-a25z8jlb5iqfsmxzbddw.png\" data-src=\"https:\/\/habrastorage.org\/webt\/dc\/rm\/xg\/dcrmxg-a25z8jlb5iqfsmxzbddw.png\"\/><\/p>\n<p>   \u2014 <a href=\"https:\/\/aliexpress.ru\/item\/32910935772.html\" rel=\"nofollow noopener noreferrer\">\u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u0438<\/a> \u2014 185 \u0440\u0443\u0431. (12V 1500rpm)<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/3d\/rv\/su\/3drvsud5qiyb_hyahunt89n58pu.png\" data-src=\"https:\/\/habrastorage.org\/webt\/3d\/rv\/su\/3drvsud5qiyb_hyahunt89n58pu.png\"\/><\/p>\n<p>   \u2014 <a href=\"https:\/\/aliexpress.ru\/item\/32915644268.html\" rel=\"nofollow noopener noreferrer\">\u043f\u043b\u0430\u0441\u0442\u0438\u043a\u043e\u0432\u044b\u0435 \u043a\u0440\u0435\u043f\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u0435\u0439<\/a> \u2014 220 \u0440\u0443\u0431.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ny\/1_\/v3\/ny1_v3idrgehjfwwj6yj6dd5mq0.png\" data-src=\"https:\/\/habrastorage.org\/webt\/ny\/1_\/v3\/ny1_v3idrgehjfwwj6yj6dd5mq0.png\"\/><\/p>\n<p>   \u2014 <a href=\"https:\/\/aliexpress.ru\/item\/4000589847400.html\" rel=\"nofollow noopener noreferrer\">esp32-cam c \u043a\u0430\u043c\u0435\u0440\u043e\u0439 \u043d\u043e\u0447\u043d\u043e\u0433\u043e \u0432\u0438\u0434\u0430<\/a> \u2014 550 \u0440\u0443\u0431.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/c0\/-5\/tq\/c0-5tqldww1ph4wodstztgocrow.png\" data-src=\"https:\/\/habrastorage.org\/webt\/c0\/-5\/tq\/c0-5tqldww1ph4wodstztgocrow.png\"\/><\/p>\n<p>  -* \u0430\u043d\u0442\u0435\u043d\u043d\u0430 \u0434\u043b\u044f esp32-cam \u2014 65 \u0440\u0443\u0431.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/v_\/z6\/un\/v_z6unsidrk53cwwwmjff_bkevy.png\" data-src=\"https:\/\/habrastorage.org\/webt\/v_\/z6\/un\/v_z6unsidrk53cwwwmjff_bkevy.png\"\/><\/p>\n<p>   \u2014 <a href=\"https:\/\/aliexpress.ru\/item\/32223093678.html\" rel=\"nofollow noopener noreferrer\">tb6612fng<\/a> \u2014 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u0435\u0439 \u2014 100 \u0440\u0443\u0431.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ob\/tw\/rt\/obtwrtk16zhr3nk_aw8qfqbbagq.png\" data-src=\"https:\/\/habrastorage.org\/webt\/ob\/tw\/rt\/obtwrtk16zhr3nk_aw8qfqbbagq.png\"\/><\/p>\n<p>   \u2014 <a href=\"https:\/\/aliexpress.ru\/item\/4000500042973.html\" rel=\"nofollow noopener noreferrer\">\u043f\u043e\u043d\u0438\u0436\u0430\u044e\u0449\u0438\u0439 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441 12V \u0434\u043e 5V<\/a> \u2014 38 \u0440\u0443\u0431.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/rx\/zj\/z0\/rxzjz0x9nbkbezii1v7a0wl2dfk.png\" data-src=\"https:\/\/habrastorage.org\/webt\/rx\/zj\/z0\/rxzjz0x9nbkbezii1v7a0wl2dfk.png\"\/><\/p>\n<p>   \u2014 <a href=\"https:\/\/chipster.ru\/catalog\/robotech\/wheels\/5644.html\" rel=\"nofollow noopener noreferrer\">\u043e\u043f\u043e\u0440\u0430 \u0448\u0430\u0440\u043e\u0432\u0430\u044f \u0441 \u0436\u0435\u043b\u0435\u0437\u043d\u044b\u043c \u0448\u0430\u0440\u043e\u043c<\/a> -60 \u0440\u0443\u0431.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/96\/sk\/np\/96sknpb3z_hrqhn65s53mgubw5e.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/96\/sk\/np\/96sknpb3z_hrqhn65s53mgubw5e.jpeg\" data-blurred=\"true\"\/><\/p>\n<p>   \u2014 \u043f\u0440\u043e\u0432\u043e\u0434\u0430 \u2014 200 \u0440\u0443\u0431.<br \/>   \u2014 ftdi-\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c (\u0434\u043b\u044f \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 esp-32) \u2014 100 \u0440\u0443\u0431.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/wz\/qw\/se\/wzqwsegbvqqydzmm1mbxcllr3by.png\" data-src=\"https:\/\/habrastorage.org\/webt\/wz\/qw\/se\/wzqwsegbvqqydzmm1mbxcllr3by.png\"\/><\/p>\n<p>   \u2014 18650 \u0430\u043a\u043a\u0443\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u044b + \u0431\u0430\u0442\u0430\u0440\u0435\u0439\u043d\u044b\u0439 \u043e\u0442\u0441\u0435\u043a \u2014 300 \u0440\u0443\u0431.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/bd\/0r\/pa\/bd0rpakvguyum-mgjw-pz1aqiwq.png\" data-src=\"https:\/\/habrastorage.org\/webt\/bd\/0r\/pa\/bd0rpakvguyum-mgjw-pz1aqiwq.png\"\/><\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/pq\/bi\/lr\/pqbilrcpg-52_gct4e_okvhsyqs.png\" data-src=\"https:\/\/habrastorage.org\/webt\/pq\/bi\/lr\/pqbilrcpg-52_gct4e_okvhsyqs.png\"\/><\/p>\n<p>  <b>\u0418\u0442\u043e\u0433\u043e<\/b>: ~1800 \u0440\u0443\u0431.<\/p>\n<p>  <b>\u041f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u044f \u043f\u043e \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0443 \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u0435\u0439<\/b><\/p>\n<p>  Tb6612fng \u043a\u0430\u043a \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044f\u043c\u0438 \u0432\u044b\u0431\u0440\u0430\u043d \u043d\u0435 \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u043e\u0442\u0445\u043e\u0434\u0438\u0442\u044c \u043e\u0442 \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e \u0438\u043d\u044b\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c.<\/p>\n<p>  \u0425\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u044b, \u043a\u0430\u043a \u0438 \u0435\u0433\u043e \u0446\u0435\u043d\u0430. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u044f\u044e\u0442, \u0435\u0441\u043b\u0438 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u00ab\u0437\u043e\u043b\u043e\u0442\u043e\u0439 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u00bb \u0432 \u043c\u0430\u0448\u0438\u043d\u043a\u0430\u0445 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u2014 L298N.<\/p>\n<p>  \u0412\u043e\u0442 \u0441\u0432\u043e\u0434\u043d\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u043f\u043e \u0441\u0445\u043e\u0436\u0438\u043c \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430\u043c(\u0432\u043a\u043b\u044e\u0447\u0430\u044f \u00ab\u0437\u043e\u043b\u043e\u0442\u043e\u0439 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u00bb):<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/q5\/ze\/0p\/q5ze0pexe5qhuwfc7smqgbsqky0.png\" data-src=\"https:\/\/habrastorage.org\/webt\/q5\/ze\/0p\/q5ze0pexe5qhuwfc7smqgbsqky0.png\"\/><\/p>\n<p>  <a href=\"https:\/\/www.youtube.com\/watch?v=3mfpERgAaWc&amp;list=PLqRHD3a6Huxy2ZJLx70LtD9aA1TL9DtdV&amp;index=74\" rel=\"nofollow noopener noreferrer\">\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 <br \/>  \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b<\/a>.<\/p>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e, tb6612fng \u043d\u0435 \u0441\u0430\u043c\u044b\u0439 \u043f\u043b\u043e\u0445\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/qm\/sx\/rq\/qmsxrqasas4oif_gfo6qf_ehbtg.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/qm\/sx\/rq\/qmsxrqasas4oif_gfo6qf_ehbtg.jpeg\" data-blurred=\"true\"\/><\/p>\n<p>  <b>\u041f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u044f \u043f\u043e \u043a\u0430\u043c\u0435\u0440\u0430\u043c esp-32 cam<\/b><\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/z1\/-j\/6o\/z1-j6oonpdbksi4u4eu9snunz8y.png\" data-src=\"https:\/\/habrastorage.org\/webt\/z1\/-j\/6o\/z1-j6oonpdbksi4u4eu9snunz8y.png\"\/><\/p>\n<p>  \u041a\u0430\u043c\u0435\u0440\u044b \u0434\u043b\u044f esp-32 cam \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0446\u0435\u043b\u044b\u043c \u0441\u043f\u0435\u043a\u0442\u0440\u043e\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u0435\u043b\u0435\u0439. \u041d\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0430, \u0447\u0442\u043e \u0432 \u043c\u043e\u043c\u0435\u043d\u0442, \u043a\u043e\u0433\u0434\u0430 \u0437\u0430 \u043e\u043a\u043d\u043e\u043c \u0441\u043c\u0435\u0440\u043a\u0430\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u0435\u043b\u0435\u0439 \u0442\u0430\u043a\u0436\u0435 \u00ab\u0441\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u044e\u0442 \u0441\u0432\u043e\u044e \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u044e\u00bb \u2014 \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0432\u0438\u0434\u043d\u043e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043e\u0431\u0440\u0430\u0432 \u043f\u0430\u0440\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0441 \u043e\u0431\u044b\u0447\u043d\u043e\u0439 \u043a\u0430\u043c\u0435\u0440\u043e\u0439 \u0434\u043b\u044f esp32-cam \u0431\u044b\u043b\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u043a\u0430\u043c\u0435\u0440\u0435 \u043d\u043e\u0447\u043d\u043e\u0433\u043e \u0437\u0440\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f \u0440\u0435\u0447\u044c \u0438\u0434\u0435\u0442 \u043e \u043f\u0441\u0435\u0432\u0434\u043e \u043d\u043e\u0447\u043d\u043e\u043c \u0437\u0440\u0435\u043d\u0438\u0438, \u0442\u0430\u043a \u043a\u0430\u043a \u0432 \u043f\u043e\u043b\u043d\u043e\u0439 \u0442\u0435\u043c\u043d\u043e\u0442\u0435 \u0447\u0435\u0440\u0435\u0437 \u043a\u0430\u043c\u0435\u0440\u0443 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0434\u0430\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434-\u0432\u0441\u043f\u044b\u0448\u043a\u0443 \u043d\u0430 esp-32 cam.<\/p>\n<p>  \u0415\u0441\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442\u044b, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0443\u043c\u0435\u043b\u044c\u0446\u044b \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430\u0432\u0435\u0448\u0438\u0432\u0430\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 \u043c\u043e\u0449\u043d\u043e\u0435 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0435 \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 <a href=\"https:\/\/www.youtube.com\/watch?v=MKiITEsOwRA&amp;list=PLqRHD3a6HuxxwZk_gtsct-P3Kk5RQmetX&amp;index=3&amp;t=113s\" rel=\"nofollow noopener noreferrer\">\u0437\u0434\u0435\u0441\u044c<\/a>. \u041d\u043e \u044d\u0442\u043e \u0443\u0436\u0435 \u0434\u0435\u043b\u043e \u0432\u043a\u0443\u0441\u0430. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0434\u043e\u043f. \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0435-\u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u0431\u0443\u0434\u0435\u0442.<\/p>\n<p>  *\u0421\u0442\u043e\u0438\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044c, \u0447\u0442\u043e \u0438\u0437 \u043e\u0431\u044b\u0447\u043d\u043e\u0439 \u043a\u0430\u043c\u0435\u0440\u044b, \u0435\u0441\u043b\u0438 \u0443\u0436 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0430\u0434\u043e, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u00ab\u043d\u043e\u0447\u043d\u0443\u044e\u00bb, \u0441\u043d\u044f\u0432 \u043e\u043a\u0443\u043b\u044f\u0440 \u0438 \u043e\u0442\u043a\u043b\u0435\u0438\u0432 \u0441 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u0444\u0438\u043b\u044c\u0442\u0440. \u041d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043d\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e, \u0442\u0430\u043a \u043a\u0430\u043a, \u043f\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435, \u0440\u0435\u0434\u043a\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e \u0438 \u043c\u043e\u0436\u043d\u043e \u00ab\u043e\u0442\u043a\u043b\u0435\u0438\u0442\u044c\u00bb \u0437\u0430\u043e\u0434\u043d\u043e \u043a\u0443\u0441\u043e\u043a \u043c\u0430\u0442\u0440\u0438\u0446\u044b, \u0438\u0441\u043f\u043e\u0440\u0442\u0438\u0432 \u043a\u0430\u043c\u0435\u0440\u0443.<\/p>\n<h3>\u0421\u043e\u0444\u0442<\/h3>\n<p>  \u041f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u043d\u0430\u0447\u0430\u0442\u044c \u0432\u0441\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043f\u0435\u0440\u0432\u0430 \u0437\u0430\u043b\u0438\u0442\u044c \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u0432 esp32-cam \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0435\u0435 \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c.<\/p>\n<p>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0443\u044e \u0441\u0440\u0435\u0434\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u043b\u044f arduino \u2014 <a href=\"https:\/\/www.arduino.cc\/en\/software\" rel=\"nofollow noopener noreferrer\">arduino ide<\/a>.<\/p>\n<p>  \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u043f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u044b, esp32-cam \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0442\u0430\u043c \u043d\u0435\u0442. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0438\u0445 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0432 arduino ide.<\/p>\n<p>  \u041e\u0442\u043a\u0440\u044b\u0432 \u0424\u0430\u0439\u043b-\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 esp32 <\/p>\n<pre><code class=\"bash\">https:\/\/dl.espressif.com\/dl\/package_esp32_index.json  <\/code><\/pre>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/m6\/-8\/ox\/m6-8oxyo_0awlvslbpkhqxv3ylo.png\" data-src=\"https:\/\/habrastorage.org\/webt\/m6\/-8\/ox\/m6-8oxyo_0awlvslbpkhqxv3ylo.png\"\/><\/p>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u0421\u043a\u0435\u0442\u0447-\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443-\u0423\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u043c\u0438:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/pd\/ks\/sm\/pdkssm0bklnzll7txuehwvcdshm.png\" data-src=\"https:\/\/habrastorage.org\/webt\/pd\/ks\/sm\/pdkssm0bklnzll7txuehwvcdshm.png\"\/><\/p>\n<p>  \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 \u043f\u043e\u0438\u0441\u043a\u0430 \u043d\u0430\u0439\u0442\u0438 esp32 \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c.<\/p>\n<h3>\u041f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u0441\u043a\u0435\u0442\u0447\u0443<\/h3>\n<p>  \u0423\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0438\u0437 <a href=\"https:\/\/dronebotworkshop.com\/esp32cam-robot-car\/\" rel=\"nofollow noopener noreferrer\">\u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/a>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0431\u043b\u043e\u043a \u043d\u0435 \u0431\u0443\u0434\u0435\u043c.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">esp32cam-robot.ino<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"xml\">\/*   ESP32CAM Robot Car   esp32cam-robot.ino (requires app_httpd.cpp)   Based upon Espressif ESP32CAM Examples   Uses TBA6612FNG H-Bridge Controller      DroneBot Workshop 2021   https:\/\/dronebotworkshop.com *\/  #include \"esp_wifi.h\" #include \"esp_camera.h\" #include &lt;WiFi.h> #include \"soc\/soc.h\" #include \"soc\/rtc_cntl_reg.h\"  \/\/ Setup Access Point Credentials const char* ssid1 = \"ESP32-CAM Robot\"; const char* password1 = \"1234567890\";  extern volatile unsigned int  motor_speed; extern void robot_stop(); extern void robot_setup(); extern uint8_t robo; extern volatile unsigned long previous_time;         extern volatile unsigned long move_interval;   #define CAMERA_MODEL_AI_THINKER #define PWDN_GPIO_NUM     32 #define RESET_GPIO_NUM    -1 #define XCLK_GPIO_NUM      0 #define SIOD_GPIO_NUM     26 #define SIOC_GPIO_NUM     27  #define Y9_GPIO_NUM       35 #define Y8_GPIO_NUM       34 #define Y7_GPIO_NUM       39 #define Y6_GPIO_NUM       36 #define Y5_GPIO_NUM       21 #define Y4_GPIO_NUM       19 #define Y3_GPIO_NUM       18 #define Y2_GPIO_NUM        5 #define VSYNC_GPIO_NUM    25 #define HREF_GPIO_NUM     23 #define PCLK_GPIO_NUM     22  void startCameraServer();  void setup()  {   WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0); \/\/ prevent brownouts by silencing them      Serial.begin(115200);   Serial.setDebugOutput(true);   Serial.println();      camera_config_t config;   config.ledc_channel = LEDC_CHANNEL_0;   config.ledc_timer = LEDC_TIMER_0;   config.pin_d0 = Y2_GPIO_NUM;   config.pin_d1 = Y3_GPIO_NUM;   config.pin_d2 = Y4_GPIO_NUM;   config.pin_d3 = Y5_GPIO_NUM;   config.pin_d4 = Y6_GPIO_NUM;   config.pin_d5 = Y7_GPIO_NUM;   config.pin_d6 = Y8_GPIO_NUM;   config.pin_d7 = Y9_GPIO_NUM;   config.pin_xclk = XCLK_GPIO_NUM;   config.pin_pclk = PCLK_GPIO_NUM;   config.pin_vsync = VSYNC_GPIO_NUM;   config.pin_href = HREF_GPIO_NUM;   config.pin_sscb_sda = SIOD_GPIO_NUM;   config.pin_sscb_scl = SIOC_GPIO_NUM;   config.pin_pwdn = PWDN_GPIO_NUM;   config.pin_reset = RESET_GPIO_NUM;   config.xclk_freq_hz = 20000000;   config.pixel_format = PIXFORMAT_JPEG;   \/\/init with high specs to pre-allocate larger buffers   if(psramFound()){     config.frame_size = FRAMESIZE_QVGA;     config.jpeg_quality = 10;     config.fb_count = 2;   } else {     config.frame_size = FRAMESIZE_QVGA;     config.jpeg_quality = 12;     config.fb_count = 1;   }    \/\/ camera init   esp_err_t err = esp_camera_init(&amp;config);   if (err != ESP_OK) {     Serial.printf(\"Camera init failed with error 0x%x\", err);     return;   }    \/\/drop down frame size for higher initial frame rate   sensor_t * s = esp_camera_sensor_get();   s->set_framesize(s, FRAMESIZE_QVGA);   s->set_vflip(s, 1);   s->set_hmirror(s, 1);    WiFi.softAP(ssid1, password1);   IPAddress myIP = WiFi.softAPIP();   Serial.print(\"AP IP address: \");   Serial.println(myIP);      startCameraServer();    ledcSetup(7, 5000, 8);   ledcAttachPin(4, 7);  \/\/pin4 is LED   robot_setup();      for (int i=0;i&lt;5;i++)    {     ledcWrite(7,10);  \/\/ flash led     delay(50);     ledcWrite(7,0);     delay(50);       }          previous_time = millis(); }  void loop() {   if(robo)   {     unsigned long currentMillis = millis();     if (currentMillis - previous_time >= move_interval) {       previous_time = currentMillis;       robot_stop();       char rsp[32];       sprintf(rsp,\"SPPED: %d\",motor_speed);       Serial.println(\"Stop\");       robo=0;     }   }   delay(1);   yield(); } <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0412 \u043a\u043e\u0434\u0435 \u043f\u043e\u043c\u0438\u043c\u043e \u043f\u0440\u043e\u0447\u0435\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f wifi \u0442\u043e\u0447\u043a\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0442\u043e\u0438\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0435\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0432 <\/p>\n<p>  <code>const char* ssid1 = \"ESP32-CAM Robot\";<br \/>  const char* password1 = \"1234567890\";<br \/>  <\/code><br \/>  \u0422\u0430\u043a\u0436\u0435 \u043f\u0440\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0444\u0430\u0439\u043b app_httpd.cpp, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u043e\u0434\u043d\u043e\u0439 \u043f\u0430\u043f\u043a\u0435 \u0441 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439.<\/p>\n<p>  \u041b\u0438\u0441\u0442\u0438\u043d\u0433 app_httpd.cpp \u2014 <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">app_httpd.cpp<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"xml\">\/*   ESP32CAM Robot Car   app_httpd.cpp (requires esp32cam-robot.ino)   Based upon Espressif ESP32CAM Examples   Uses TBA6612FNG H-Bridge Controller      DroneBot Workshop 2021   https:\/\/dronebotworkshop.com *\/  #include \"dl_lib_matrix3d.h\" #include &lt;esp32-hal-ledc.h> #include \"esp_http_server.h\" #include \"esp_timer.h\" #include \"esp_camera.h\" #include \"img_converters.h\" #include \"Arduino.h\"  \/\/ TB6612FNG H-Bridge Connections (both PWM inputs driven by GPIO 12) #define MTR_PWM   12 #define LEFT_M0     15 #define LEFT_M1     14 #define RIGHT_M0    13 #define RIGHT_M1    2  \/\/ Define Speed variables int speed = 255; int noStop = 0;  \/\/Setting Motor PWM properties const int freq = 2000; const int motorPWMChannnel = 8; const int lresolution = 8;  volatile unsigned int  motor_speed   = 200; volatile unsigned long previous_time = 0; volatile unsigned long move_interval = 250;  \/\/ Placeholder for functions void robot_setup(); void robot_stop(); void robot_fwd(); void robot_back(); void robot_left(); void robot_right(); uint8_t robo = 0;   typedef struct {   httpd_req_t *req;   size_t len; } jpg_chunking_t;  #define PART_BOUNDARY \"123456789000000000000987654321\" static const char* _STREAM_CONTENT_TYPE = \"multipart\/x-mixed-replace;boundary=\" PART_BOUNDARY; static const char* _STREAM_BOUNDARY = \"\\r\\n--\" PART_BOUNDARY \"\\r\\n\"; static const char* _STREAM_PART = \"Content-Type: image\/jpeg\\r\\nContent-Length: %u\\r\\n\\r\\n\";  httpd_handle_t stream_httpd = NULL; httpd_handle_t camera_httpd = NULL;  static size_t jpg_encode_stream(void * arg, size_t index, const void* data, size_t len) {   jpg_chunking_t *j = (jpg_chunking_t *)arg;   if (!index) {     j->len = 0;   }   if (httpd_resp_send_chunk(j->req, (const char *)data, len) != ESP_OK) {     return 0;   }   j->len += len;   return len; }  static esp_err_t capture_handler(httpd_req_t *req) {   camera_fb_t * fb = NULL;   esp_err_t res = ESP_OK;   int64_t fr_start = esp_timer_get_time();    fb = esp_camera_fb_get();   if (!fb) {     Serial.println(\"Camera capture failed\");     httpd_resp_send_500(req);     return ESP_FAIL;   }    httpd_resp_set_type(req, \"image\/jpeg\");   httpd_resp_set_hdr(req, \"Content-Disposition\", \"inline; filename=capture.jpg\");    size_t out_len, out_width, out_height;   uint8_t * out_buf;   bool s;   {     size_t fb_len = 0;     if (fb->format == PIXFORMAT_JPEG) {       fb_len = fb->len;       res = httpd_resp_send(req, (const char *)fb->buf, fb->len);     } else {       jpg_chunking_t jchunk = {req, 0};       res = frame2jpg_cb(fb, 80, jpg_encode_stream, &amp;jchunk) ? ESP_OK : ESP_FAIL;       httpd_resp_send_chunk(req, NULL, 0);       fb_len = jchunk.len;     }     esp_camera_fb_return(fb);     int64_t fr_end = esp_timer_get_time();     Serial.printf(\"JPG: %uB %ums\\n\", (uint32_t)(fb_len), (uint32_t)((fr_end - fr_start) \/ 1000));     return res;   }    dl_matrix3du_t *image_matrix = dl_matrix3du_alloc(1, fb->width, fb->height, 3);   if (!image_matrix) {     esp_camera_fb_return(fb);     Serial.println(\"dl_matrix3du_alloc failed\");     httpd_resp_send_500(req);     return ESP_FAIL;   }    out_buf = image_matrix->item;   out_len = fb->width * fb->height * 3;   out_width = fb->width;   out_height = fb->height;    s = fmt2rgb888(fb->buf, fb->len, fb->format, out_buf);   esp_camera_fb_return(fb);   if (!s) {     dl_matrix3du_free(image_matrix);     Serial.println(\"to rgb888 failed\");     httpd_resp_send_500(req);     return ESP_FAIL;   }    jpg_chunking_t jchunk = {req, 0};   s = fmt2jpg_cb(out_buf, out_len, out_width, out_height, PIXFORMAT_RGB888, 90, jpg_encode_stream, &amp;jchunk);   dl_matrix3du_free(image_matrix);   if (!s) {     Serial.println(\"JPEG compression failed\");     return ESP_FAIL;   }    int64_t fr_end = esp_timer_get_time();   return res; }  static esp_err_t stream_handler(httpd_req_t *req) {   camera_fb_t * fb = NULL;   esp_err_t res = ESP_OK;   size_t _jpg_buf_len = 0;   uint8_t * _jpg_buf = NULL;   char * part_buf[64];   dl_matrix3du_t *image_matrix = NULL;    static int64_t last_frame = 0;   if (!last_frame) {     last_frame = esp_timer_get_time();   }    res = httpd_resp_set_type(req, _STREAM_CONTENT_TYPE);   if (res != ESP_OK) {     return res;   }    while (true) {     fb = esp_camera_fb_get();     if (!fb) {       Serial.println(\"Camera capture failed\");       res = ESP_FAIL;     } else {       {         if (fb->format != PIXFORMAT_JPEG) {           bool jpeg_converted = frame2jpg(fb, 80, &amp;_jpg_buf, &amp;_jpg_buf_len);           esp_camera_fb_return(fb);           fb = NULL;           if (!jpeg_converted) {             Serial.println(\"JPEG compression failed\");             res = ESP_FAIL;           }         } else {           _jpg_buf_len = fb->len;           _jpg_buf = fb->buf;         }       }     }     if (res == ESP_OK) {       size_t hlen = snprintf((char *)part_buf, 64, _STREAM_PART, _jpg_buf_len);       res = httpd_resp_send_chunk(req, (const char *)part_buf, hlen);     }     if (res == ESP_OK) {       res = httpd_resp_send_chunk(req, (const char *)_jpg_buf, _jpg_buf_len);     }     if (res == ESP_OK) {       res = httpd_resp_send_chunk(req, _STREAM_BOUNDARY, strlen(_STREAM_BOUNDARY));     }     if (fb) {       esp_camera_fb_return(fb);       fb = NULL;       _jpg_buf = NULL;     } else if (_jpg_buf) {       free(_jpg_buf);       _jpg_buf = NULL;     }     if (res != ESP_OK) {       break;     }     int64_t fr_end = esp_timer_get_time();     int64_t frame_time = fr_end - last_frame;     last_frame = fr_end;     frame_time \/= 1000;     Serial.printf(\"MJPG: %uB %ums (%.1ffps)\\n\",                   (uint32_t)(_jpg_buf_len),                   (uint32_t)frame_time, 1000.0 \/ (uint32_t)frame_time                  );   }    last_frame = 0;   return res; }  enum state {fwd, rev, stp}; state actstate = stp;  static esp_err_t cmd_handler(httpd_req_t *req) {   char*  buf;   size_t buf_len;   char variable[32] = {0,};   char value[32] = {0,};    buf_len = httpd_req_get_url_query_len(req) + 1;   if (buf_len > 1) {     buf = (char*)malloc(buf_len);     if (!buf) {       httpd_resp_send_500(req);       return ESP_FAIL;     }     if (httpd_req_get_url_query_str(req, buf, buf_len) == ESP_OK) {       if (httpd_query_key_value(buf, \"var\", variable, sizeof(variable)) == ESP_OK &amp;&amp;           httpd_query_key_value(buf, \"val\", value, sizeof(value)) == ESP_OK) {       } else {         free(buf);         httpd_resp_send_404(req);         return ESP_FAIL;       }     } else {       free(buf);       httpd_resp_send_404(req);       return ESP_FAIL;     }     free(buf);   } else {     httpd_resp_send_404(req);     return ESP_FAIL;   }    int val = atoi(value);   sensor_t * s = esp_camera_sensor_get();   int res = 0;  \/\/ Look at values within URL to determine function   if (!strcmp(variable, \"framesize\"))   {     Serial.println(\"framesize\");     if (s->pixformat == PIXFORMAT_JPEG) res = s->set_framesize(s, (framesize_t)val);   }   else if (!strcmp(variable, \"quality\"))   {     Serial.println(\"quality\");     res = s->set_quality(s, val);   }   else if (!strcmp(variable, \"flash\"))   {     ledcWrite(7, val);   }   else if (!strcmp(variable, \"flashoff\"))   {     ledcWrite(7, val);   }   else if (!strcmp(variable, \"speed\"))   {     if      (val > 255) val = 255;     else if (val &lt;   0) val = 0;     speed = val;     ledcWrite(8, speed);   }   else if (!strcmp(variable, \"nostop\"))   {     noStop = val;   }   else if (!strcmp(variable, \"car\")) {     if (val == 1) {       Serial.println(\"Forward\");       robot_fwd();       robo = 1;     }     else if (val == 2) {       Serial.println(\"TurnLeft\");       robot_left();       robo = 1;     }     else if (val == 3) {       Serial.println(\"Stop\");       robot_stop();     }     else if (val == 4) {       Serial.println(\"TurnRight\");       robot_right();       robo = 1;     }     else if (val == 5) {       Serial.println(\"Backward\");       robot_back();       robo = 1;     }     if (noStop != 1)     {      }   }   else   {     Serial.println(\"variable\");     res = -1;   }    if (res) {     return httpd_resp_send_500(req);   }    httpd_resp_set_hdr(req, \"Access-Control-Allow-Origin\", \"*\");   return httpd_resp_send(req, NULL, 0); }  static esp_err_t status_handler(httpd_req_t *req) {   static char json_response[1024];    sensor_t * s = esp_camera_sensor_get();   char * p = json_response;   *p++ = '{';    p += sprintf(p, \"\\\"framesize\\\":%u,\", s->status.framesize);   p += sprintf(p, \"\\\"quality\\\":%u,\", s->status.quality);   *p++ = '}';   *p++ = 0;   httpd_resp_set_type(req, \"application\/json\");   httpd_resp_set_hdr(req, \"Access-Control-Allow-Origin\", \"*\");   return httpd_resp_send(req, json_response, strlen(json_response)); }  static const char PROGMEM INDEX_HTML[] = R\"rawliteral( &lt;!doctype html> &lt;html>     &lt;head>         &lt;meta charset=\"utf-8\">         &lt;meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">         &lt;title>ESP32 CAM Robot&lt;\/title>         &lt;style>     body{font-family:Arial,Helvetica,sans-serif;background:#181818;color:#efefef;font-size:16px}h2{font-size:18px}section.main{display:flex}#menu,section.main{flex-direction:column}#menu{display:none;flex-wrap:nowrap;min-width:340px;background:#363636;padding:8px;border-radius:4px;margin-top:-10px;margin-right:10px}#content{display:flex;flex-wrap:wrap;align-items:stretch}figure{padding:0;margin:0;-webkit-margin-before:0;margin-block-start:0;-webkit-margin-after:0;margin-block-end:0;-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:0;margin-inline-end:0}figure img{display:block;width:100%;height:auto;border-radius:4px;margin-top:8px}@media (min-width:800px) and (orientation:landscape){#content{display:flex;flex-wrap:nowrap;align-items:stretch}figure img{display:block;max-width:100%;max-height:calc(100vh - 40px);width:auto;height:auto}figure{padding:0;margin:0;-webkit-margin-before:0;margin-block-start:0;-webkit-margin-after:0;margin-block-end:0;-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:0;margin-inline-end:0}}section #buttons{display:flex;flex-wrap:nowrap;justify-content:space-between}#nav-toggle{cursor:pointer;display:block}#nav-toggle-cb{outline:0;opacity:0;width:0;height:0}#nav-toggle-cb:checked+#menu{display:flex}.input-group{display:flex;flex-wrap:nowrap;line-height:22px;margin:5px 0}.input-group>label{display:inline-block;padding-right:10px;min-width:47%}.input-group input,.input-group select{flex-grow:1}.range-max,.range-min{display:inline-block;padding:0 5px}button{display:block;margin:5px;padding:5px 12px;border:0;line-height:28px;cursor:pointer;color:#fff;background:#035806;border-radius:5px;font-size:16px;outline:0;width:100px}.button2{background-color:#008cba;width:100px}.button3{background-color:#f44336;width:100px}.button4{background-color:#e7e7e7;color:#000;width:120px}.button5{background-color:#555;width:100px}.button6{visibility:hidden;width:100px}button:hover{background:#ff494d}button:active{background:#f21c21}button.disabled{cursor:default;background:#a0a0a0}input[type=range]{-webkit-appearance:none;width:100%;height:22px;background:#363636;cursor:pointer;margin:0}input[type=range]:focus{outline:0}input[type=range]::-webkit-slider-runnable-track{width:100%;height:2px;cursor:pointer;background:#efefef;border-radius:0;border:0 solid #efefef}input[type=range]::-webkit-slider-thumb{border:1px solid rgba(0,0,30,0);height:22px;width:22px;border-radius:50px;background:#ff3034;cursor:pointer;-webkit-appearance:none;margin-top:-11.5px}input[type=range]:focus::-webkit-slider-runnable-track{background:#efefef}input[type=range]::-moz-range-track{width:100%;height:2px;cursor:pointer;background:#efefef;border-radius:0;border:0 solid #efefef}input[type=range]::-moz-range-thumb{border:1px solid rgba(0,0,30,0);height:22px;width:22px;border-radius:50px;background:#ff3034;cursor:pointer}input[type=range]::-ms-track{width:100%;height:2px;cursor:pointer;background:0 0;border-color:transparent;color:transparent}input[type=range]::-ms-fill-lower{background:#efefef;border:0 solid #efefef;border-radius:0}input[type=range]::-ms-fill-upper{background:#efefef;border:0 solid #efefef;border-radius:0}input[type=range]::-ms-thumb{border:1px solid rgba(0,0,30,0);height:22px;width:22px;border-radius:50px;background:#ff3034;cursor:pointer;height:2px}input[type=range]:focus::-ms-fill-lower{background:#efefef}input[type=range]:focus::-ms-fill-upper{background:#363636}.switch{display:block;position:relative;line-height:22px;font-size:16px;height:22px}.switch input{outline:0;opacity:0;width:0;height:0}.slider{width:50px;height:22px;border-radius:22px;cursor:pointer;background-color:grey}.slider,.slider:before{display:inline-block;transition:.4s}.slider:before{position:relative;content:\"\";border-radius:50%;height:16px;width:16px;left:4px;top:3px;background-color:#fff}input:checked+.slider{background-color:#ff3034}input:checked+.slider:before{-webkit-transform:translateX(26px);transform:translateX(26px)}select{border:1px solid #363636;font-size:14px;height:22px;outline:0;border-radius:5px}.image-container{position:absolute;top:50px;left:50%;margin-right:-50%;transform:translate(-50%,-50%);min-width:160px}.control-container{position:relative;top:400px;left:50%;margin-right:-50%;transform:translate(-50%,-50%)}.slider-container{position:relative;top:750px;right:36%;margin-left:-50%;transform:translate(-50%,-50%)}.close{position:absolute;right:5px;top:5px;background:#ff3034;width:16px;height:16px;border-radius:100px;color:#fff;text-align:center;line-height:18px;cursor:pointer}.hidden{display:none}.rotate90{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-o-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)} &lt;\/style>      &lt;\/head>     &lt;body>          &lt;br>     &lt;br>         &lt;section class=\"main\">         &lt;figure>       &lt;div id=\"stream-container\" class=\"image-container\">         &lt;div class=\"close\" id=\"close-stream\">\u00d7&lt;\/div>         &lt;img id=\"stream\" src=\"\" class=\"rotate90\">       &lt;\/div>     &lt;\/figure>     &lt;br>     &lt;br>                               &lt;section id=\"buttons\">                  &lt;div id=\"controls\" class=\"control-container\">                   &lt;table>                   &lt;tr>&lt;td align=\"center\">&lt;button class=\"button button6\" id=\"get-still\">Image&lt;\/button>&lt;\/td>&lt;td align=\"center\">&lt;button id=\"toggle-stream\">Start&lt;\/button>&lt;\/td>&lt;td>&lt;\/td>&lt;\/tr>                   &lt;tr>&lt;td>&lt;\/td>&lt;td align=\"center\">&lt;button class=\"button button2\" id=\"forward\" onclick=\"fetch(document.location.origin+'\/control?var=car&amp;val=1');\">FORWARD&lt;\/button>&lt;\/td>&lt;td>&lt;\/td>&lt;\/tr>                   &lt;tr>&lt;td align=\"center\">&lt;button class=\"button button2\" id=\"turnleft\" onclick=\"fetch(document.location.origin+'\/control?var=car&amp;val=2');\">LEFT&lt;\/button>&lt;\/td>&lt;td align=\"center\">&lt;\/td>&lt;td align=\"center\">&lt;button class=\"button button2\" id=\"turnright\" onclick=\"fetch(document.location.origin+'\/control?var=car&amp;val=4');\">RIGHT&lt;\/button>&lt;\/td>&lt;\/tr>                   &lt;tr>&lt;td>&lt;\/td>&lt;td align=\"center\">&lt;button class=\"button button2\" id=\"backward\" onclick=\"fetch(document.location.origin+'\/control?var=car&amp;val=5');\">REVERSE&lt;\/button>&lt;\/td>&lt;td>&lt;\/td>&lt;\/tr>                   &lt;tr>&lt;td>&lt;\/td>&lt;td align=\"center\">&lt;button class=\"button button4\" id=\"flash\" onclick=\"fetch(document.location.origin+'\/control?var=flash&amp;val=1');\">LIGHT ON&lt;\/button>&lt;\/td>&lt;td>&lt;\/td>&lt;\/tr>                   &lt;tr>&lt;td>&lt;\/td>&lt;td align=\"center\">&lt;button class=\"button button4\" id=\"flashoff\" onclick=\"fetch(document.location.origin+'\/control?var=flashoff&amp;val=0');\">LIGHT OFF&lt;\/button>&lt;\/td>&lt;td>&lt;\/td>&lt;\/tr>                   &lt;\/table>                 &lt;\/div>                &lt;br>                 &lt;div id=\"sliders\" class=\"slider-container\">                   &lt;table>                   &lt;tr>&lt;td>Motor Speed:&lt;\/td>&lt;td align=\"center\" colspan=\"2\">&lt;input type=\"range\" id=\"speed\" min=\"0\" max=\"255\" value=\"200\" onchange=\"try{fetch(document.location.origin+'\/control?var=speed&amp;val='+this.value);}catch(e){}\">&lt;\/td>&lt;\/tr>                   &lt;tr>&lt;td>Vid Quality:&lt;\/td>&lt;td align=\"center\" colspan=\"2\">&lt;input type=\"range\" id=\"quality\" min=\"10\" max=\"63\" value=\"10\" onchange=\"try{fetch(document.location.origin+'\/control?var=quality&amp;val='+this.value);}catch(e){}\">&lt;\/td>&lt;\/tr>                   &lt;tr>&lt;td>Vid Size:&lt;\/td>&lt;td align=\"center\" colspan=\"2\">&lt;input type=\"range\" id=\"framesize\" min=\"0\" max=\"6\" value=\"5\" onchange=\"try{fetch(document.location.origin+'\/control?var=framesize&amp;val='+this.value);}catch(e){}\">&lt;\/td>&lt;\/tr>                                                         &lt;\/table>                 &lt;\/div>             &lt;\/section>                  &lt;\/section>         &lt;script>           document.addEventListener('DOMContentLoaded',function(){function b(B){let C;switch(B.type){case'checkbox':C=B.checked?1:0;break;case'range':case'select-one':C=B.value;break;case'button':case'submit':C='1';break;default:return;}const D=`${c}\/control?var=${B.id}&amp;val=${C}`;fetch(D).then(E=>{console.log(`request to ${D} finished, status: ${E.status}`)})}var c=document.location.origin;const e=B=>{B.classList.add('hidden')},f=B=>{B.classList.remove('hidden')},g=B=>{B.classList.add('disabled'),B.disabled=!0},h=B=>{B.classList.remove('disabled'),B.disabled=!1},i=(B,C,D)=>{D=!(null!=D)||D;let E;'checkbox'===B.type?(E=B.checked,C=!!C,B.checked=C):(E=B.value,B.value=C),D&amp;&amp;E!==C?b(B):!D&amp;&amp;('aec'===B.id?C?e(v):f(v):'agc'===B.id?C?(f(t),e(s)):(e(t),f(s)):'awb_gain'===B.id?C?f(x):e(x):'face_recognize'===B.id&amp;&amp;(C?h(n):g(n)))};document.querySelectorAll('.close').forEach(B=>{B.onclick=()=>{e(B.parentNode)}}),fetch(`${c}\/status`).then(function(B){return B.json()}).then(function(B){document.querySelectorAll('.default-action').forEach(C=>{i(C,B[C.id],!1)})});const j=document.getElementById('stream'),k=document.getElementById('stream-container'),l=document.getElementById('get-still'),m=document.getElementById('toggle-stream'),n=document.getElementById('face_enroll'),o=document.getElementById('close-stream'),p=()=>{window.stop(),m.innerHTML='Start'},q=()=>{j.src=`${c+':81'}\/stream`,f(k),m.innerHTML='Stop'};l.onclick=()=>{p(),j.src=`${c}\/capture?_cb=${Date.now()}`,f(k)},o.onclick=()=>{p(),e(k)},m.onclick=()=>{const B='Stop'===m.innerHTML;B?p():q()},n.onclick=()=>{b(n)},document.querySelectorAll('.default-action').forEach(B=>{B.onchange=()=>b(B)});const r=document.getElementById('agc'),s=document.getElementById('agc_gain-group'),t=document.getElementById('gainceiling-group');r.onchange=()=>{b(r),r.checked?(f(t),e(s)):(e(t),f(s))};const u=document.getElementById('aec'),v=document.getElementById('aec_value-group');u.onchange=()=>{b(u),u.checked?e(v):f(v)};const w=document.getElementById('awb_gain'),x=document.getElementById('wb_mode-group');w.onchange=()=>{b(w),w.checked?f(x):e(x)};const y=document.getElementById('face_detect'),z=document.getElementById('face_recognize'),A=document.getElementById('framesize');A.onchange=()=>{b(A),5&lt;A.value&amp;&amp;(i(y,!1),i(z,!1))},y.onchange=()=>{return 5&lt;A.value?(alert('Please select CIF or lower resolution before enabling this feature!'),void i(y,!1)):void(b(y),!y.checked&amp;&amp;(g(n),i(z,!1)))},z.onchange=()=>{return 5&lt;A.value?(alert('Please select CIF or lower resolution before enabling this feature!'),void i(z,!1)):void(b(z),z.checked?(h(n),i(y,!0)):g(n))}});         &lt;\/script>     &lt;\/body> &lt;\/html> )rawliteral\";  static esp_err_t index_handler(httpd_req_t *req){     httpd_resp_set_type(req, \"text\/html\");     return httpd_resp_send(req, (const char *)INDEX_HTML, strlen(INDEX_HTML)); }  void startCameraServer() {     httpd_config_t config = HTTPD_DEFAULT_CONFIG();      httpd_uri_t index_uri = {         .uri       = \"\/\",         .method    = HTTP_GET,         .handler   = index_handler,         .user_ctx  = NULL     };      httpd_uri_t status_uri = {         .uri       = \"\/status\",         .method    = HTTP_GET,         .handler   = status_handler,         .user_ctx  = NULL     };      httpd_uri_t cmd_uri = {         .uri       = \"\/control\",         .method    = HTTP_GET,         .handler   = cmd_handler,         .user_ctx  = NULL     };      httpd_uri_t capture_uri = {         .uri       = \"\/capture\",         .method    = HTTP_GET,         .handler   = capture_handler,         .user_ctx  = NULL     };     httpd_uri_t stream_uri = {         .uri       = \"\/stream\",         .method    = HTTP_GET,         .handler   = stream_handler,         .user_ctx  = NULL     };          Serial.printf(\"Starting web server on port: '%d'\\n\", config.server_port);     if (httpd_start(&amp;camera_httpd, &amp;config) == ESP_OK) {         httpd_register_uri_handler(camera_httpd, &amp;index_uri);         httpd_register_uri_handler(camera_httpd, &amp;cmd_uri);         httpd_register_uri_handler(camera_httpd, &amp;status_uri);         httpd_register_uri_handler(camera_httpd, &amp;capture_uri);     }      config.server_port += 1;     config.ctrl_port += 1;     Serial.printf(\"Starting stream server on port: '%d'\\n\", config.server_port);     if (httpd_start(&amp;stream_httpd, &amp;config) == ESP_OK) {         httpd_register_uri_handler(stream_httpd, &amp;stream_uri);     } }  unsigned int get_speed(unsigned int sp) {   return map(sp, 0, 100, 0, 255); }  void robot_setup() {     \/\/ Pins for Motor Controller     pinMode(LEFT_M0,OUTPUT);     pinMode(LEFT_M1,OUTPUT);     pinMode(RIGHT_M0,OUTPUT);     pinMode(RIGHT_M1,OUTPUT);          \/\/ Make sure we are stopped     robot_stop();      \/\/ Motor uses PWM Channel 8     ledcAttachPin(MTR_PWM, 8);     ledcSetup(8, 2000, 8);           ledcWrite(8, 130);      }  \/\/ Motor Control Functions  void update_speed() {       ledcWrite(motorPWMChannnel, get_speed(motor_speed));      }  void robot_stop() {   digitalWrite(LEFT_M0,LOW);   digitalWrite(LEFT_M1,LOW);   digitalWrite(RIGHT_M0,LOW);   digitalWrite(RIGHT_M1,LOW); }  void robot_fwd() {   digitalWrite(LEFT_M0,HIGH);   digitalWrite(LEFT_M1,LOW);   digitalWrite(RIGHT_M0,HIGH);   digitalWrite(RIGHT_M1,LOW);   move_interval=250;   previous_time = millis();   }  void robot_back() {   digitalWrite(LEFT_M0,LOW);   digitalWrite(LEFT_M1,HIGH);   digitalWrite(RIGHT_M0,LOW);   digitalWrite(RIGHT_M1,HIGH);   move_interval=250;    previous_time = millis();   }  void robot_right() {   digitalWrite(LEFT_M0,LOW);   digitalWrite(LEFT_M1,HIGH);   digitalWrite(RIGHT_M0,HIGH);   digitalWrite(RIGHT_M1,LOW);   move_interval=100;    previous_time = millis(); }  void robot_left() {   digitalWrite(LEFT_M0,HIGH);   digitalWrite(LEFT_M1,LOW);   digitalWrite(RIGHT_M0,LOW);   digitalWrite(RIGHT_M1,HIGH);   move_interval=100;    previous_time = millis(); } <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u042d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 web-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u043c\u0430\u0448\u0438\u043d\u043a\u043e\u0439.<br \/>  \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u0447\u0442\u043e-\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u043e\u0434 \u0441\u0435\u0431\u044f, \u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b.<br \/>  \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u043c \u0440\u0430\u0437\u043c\u0435\u0440 \u0432\u044b\u0432\u043e\u0434\u0438\u043c\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u043b\u0435\u0432\u044b\u0439 \u2014 \u043d\u0430 \u043f\u0440\u0430\u0432\u044b\u0439 \u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442 (\u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u0435\u0439 \u043e\u043d\u0438 \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u043f\u0435\u0440\u0435\u043f\u0443\u0442\u0430\u043d\u044b \u043c\u0435\u0441\u0442\u0430\u043c\u0438).<br \/>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 esp32cam-robot.ino \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0438:<br \/>  <code>if(psramFound()){<br \/>   config.frame_size = FRAMESIZE_QVGA;<br \/>   config.jpeg_quality = 10;<br \/>   config.fb_count = 2;<br \/>   } else {<br \/>   config.frame_size = FRAMESIZE_QVGA;<br \/>   config.jpeg_quality = 12;<br \/>   config.fb_count = 1;<br \/>   }<br \/>  <\/code><br \/>  \u043d\u0430<br \/>  <code>if(psramFound()){<br \/>   config.frame_size = FRAMESIZE_UXGA;<br \/>   config.jpeg_quality = 10;<br \/>   config.fb_count = 2;<br \/>   } else {<br \/>   config.frame_size = FRAMESIZE_SVGA;<br \/>   config.jpeg_quality = 12;<br \/>   config.fb_count = 1;<br \/>   }<br \/>  <\/code><br \/>  *\u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u043f\u043e\u0447\u0435\u043c\u0443 \u0432 \u0431\u0430\u0437\u043e\u0432\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u0442\u0430\u043a\u043e\u0435 \u043d\u0438\u0437\u043a\u043e\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435. \u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u043f\u043e\u0447\u0442\u0438 \u043d\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u043c\u0430.   <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0440\u0435\u0436\u0438\u043c\u044b<\/b>                         <\/p>\n<div class=\"spoiler_text\">FRAMESIZE_UXGA (1600 x 1200)<br \/>  FRAMESIZE_QVGA (320 x 240)<br \/>  FRAMESIZE_CIF (352 x 288)<br \/>  FRAMESIZE_VGA (640 x 480)<br \/>  FRAMESIZE_SVGA (800 x 600)<br \/>  FRAMESIZE_XGA (1024 x 768)<br \/>  FRAMESIZE_SXGA (1280 x 1024)  <\/div>\n<\/p><\/div>\n<p>  \u0417\u0430\u043c\u0435\u043d\u0443 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u043e\u0432 \u0432\u043b\u0435\u0432\u043e \u043d\u0430 \u0432\u043f\u0440\u0430\u0432\u043e \u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442 \u043c\u044b \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043c \u043f\u0443\u0442\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0437\u0430\u043c\u0435\u043d\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f pin\u043e\u0432 \u0432 <b>app_httpd.cpp<\/b>:  <\/p>\n<pre><code class=\"xml\">#define LEFT_M0     15 #define LEFT_M1     14 #define RIGHT_M0    13 #define RIGHT_M1    2 <\/code><\/pre>\n<p>  \u043d\u0430  <\/p>\n<pre><code class=\"xml\">#define LEFT_M0     13 #define LEFT_M1     2 #define RIGHT_M0    15 #define RIGHT_M1    14 <\/code><\/pre>\n<p>  <\/p>\n<h3>\u0417\u0430\u043b\u0438\u0432\u0430\u0435\u043c \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443<\/h3>\n<p>  \u041f\u0435\u0440\u0435\u0434 \u0437\u0430\u043b\u0438\u0432\u043a\u043e\u0439 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c esp32-cam \u0447\u0435\u0440\u0435\u0437 ftdi \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043d\u0438\u043a.<\/p>\n<p>  \u0412 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u043c\u043e\u0434\u0443\u043b\u044f \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c 3.3V \u043b\u043e\u0433\u0438\u043a\u0438. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0438\u0442\u0430\u0442\u044c esp32 \u0447\u0435\u0440\u0435\u0437 \u043d\u043e\u0433\u0443 3.3V. \u041e\u0434\u043d\u0430\u043a\u043e \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u043d\u0435\u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e \u0438 \u043c\u043e\u0434\u0443\u043b\u044c \u043d\u0435 \u00ab\u0448\u0438\u043b\u0441\u044f\u00bb.<\/p>\n<p>  \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0432\u0438\u0434\u043e\u0438\u0437\u043c\u0435\u043d\u0435\u043d\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/lx\/yo\/gf\/lxyogfkfjmyftzim_usef93nji8.png\" data-src=\"https:\/\/habrastorage.org\/webt\/lx\/yo\/gf\/lxyogfkfjmyftzim_usef93nji8.png\"\/><\/p>\n<p>  \u041f\u0438\u0442\u0430\u043d\u0438\u0435 5V \u043f\u043e\u0434\u0430\u0435\u0442\u0441\u044f \u043d\u0430 pin 5V \u0432\u043c\u0435\u0441\u0442\u043e 3.3V \u043d\u0430 pin 3.3V!<br \/>  *\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u0447\u0442\u043e \u043d\u0430 ftdi \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043d\u0438\u043a\u0435 \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e 5,5V, \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u0434\u0432\u0443\u0445 \u0440\u0435\u0436\u0438\u043c\u043d\u044b\u0439 ftdi-\u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043d\u0438\u043a.<\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u043b\u0438\u0432\u043a\u043e\u0439 \u0441\u043a\u0435\u0442\u0447\u0430 \u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043c\u044b\u0447\u043a\u0430 (PGM \u043d\u0430 \u0441\u0445\u0435\u043c\u0435). <\/p>\n<p>  \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e \u0432 arduino ide \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043c\u043e\u0434\u0443\u043b\u044f \u2014 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/2h\/kb\/qe\/2hkbqegtrorarjgnniljni9xl3y.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/2h\/kb\/qe\/2hkbqegtrorarjgnniljni9xl3y.jpeg\" data-blurred=\"true\"\/><\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0441\u043a\u0435\u0442\u0447 \u0437\u0430\u043b\u0438\u043b\u0441\u044f \u0443\u0441\u043f\u0435\u0448\u043d\u043e, \u0442\u043e \u0432 \u0441\u0440\u0435\u0434\u0435 arduino ide \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u0443:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/mm\/io\/eq\/mmioeqzqhyldqatiz4zkjt7fbmw.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/mm\/io\/eq\/mmioeqzqhyldqatiz4zkjt7fbmw.jpeg\" data-blurred=\"true\"\/><\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u043b\u0438\u0432\u043a\u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u043c\u043e\u0434\u0443\u043b\u044c \u0433\u043e\u0442\u043e\u0432 \u043a \u0440\u0430\u0431\u043e\u0442\u0435 \u0438 \u043f\u0435\u0440\u0435\u043c\u044b\u0447\u043a\u0443 PGM \u043c\u043e\u0436\u043d\u043e \u0441\u043d\u044f\u0442\u044c.<\/p>\n<h3>\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u043e \u0441\u0445\u0435\u043c\u0435<\/h3>\n<p>  \u0421\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0441\u0445\u0435\u043c\u0430 \u0441\u0431\u043e\u0440\u043a\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u2014 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/1h\/u3\/al\/1hu3alloi2elm8xhqtq-3a7lwea.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/1h\/u3\/al\/1hu3alloi2elm8xhqtq-3a7lwea.jpeg\" data-blurred=\"true\"\/><\/p>\n<p>  \u0417\u0434\u0435\u0441\u044c \u043d\u0435\u0447\u0435\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c, \u043a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0447\u0435\u0441\u0442\u044c, \u0447\u0442\u043e \u0432 \u0441\u0445\u0435\u043c\u0435 \u0431\u0443\u0434\u0435\u0442 \u0435\u0449\u0435 \u043f\u043e\u043d\u0438\u0436\u0430\u044e\u0449\u0438\u0439 dc-dc, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0438\u0434\u0442\u0438 \u0441 \u0430\u043a\u043a\u0443\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u043e\u0432:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/_r\/ni\/u9\/_rniu9hty_dmhflkmr4gfrbhxsi.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/_r\/ni\/u9\/_rniu9hty_dmhflkmr4gfrbhxsi.jpeg\" data-blurred=\"true\"\/><\/p>\n<p>  \u041f\u0438\u0442\u0430\u043d\u0438\u0435 \u043d\u0430 esp32-cam \u043b\u0443\u0447\u0448\u0435 \u043f\u0440\u0438\u043f\u0430\u0438\u0432\u0430\u0442\u044c \u0441\u043d\u0430\u0440\u0443\u0436\u0438, \u0430 \u043d\u0435 \u043d\u0430 \u0441\u0430\u043c\u0438 \u043d\u043e\u0433\u0438 \u043f\u043b\u0430\u0442\u044b, \u0442\u0430\u043a \u043a\u0430\u043a \u0438\u043d\u0430\u0447\u0435 \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0442\u0440\u0443\u0434\u043d\u0435\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438. <\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u0441\u0435 \u0441\u043e\u0431\u0440\u0430\u043d\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u0442\u043e \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u0434\u0430\u0447\u0438 \u043f\u0438\u0442\u0430\u043d\u0438\u044f, esp32 \u0434\u043e\u043b\u0436\u0435\u043d \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u043c\u0438\u0433\u043d\u0443\u0442\u044c.<br \/>  \u0414\u0430\u043b\u0435\u0435 \u043c\u043e\u0434\u0443\u043b\u044c \u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u0442\u043e\u0447\u043a\u0443 \u0434\u043e\u0441\u0442\u0443\u043f\u0430, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0439, \u043a\u0430\u043a \u0443\u0436\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u043e\u0441\u044c, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f, \u0432\u0432\u0435\u0434\u044f ip 192.168.4.1.<\/p>\n<p>  \u0423\u0433\u043e\u043b \u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0440\u0435\u0433\u0443\u043b\u0438\u0440\u0443\u044f \u0441\u043b\u0430\u0439\u0434\u0435\u0440\u044b \u043f\u0440\u044f\u043c\u043e \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f.<br \/>  \u041d\u0430 \u044d\u0442\u043e\u043c \u0432\u0441\u0435.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0424\u043e\u0442\u043e \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<\/b>                         <\/p>\n<div class=\"spoiler_text\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/fr\/_v\/ga\/fr_vgavsvyh9wx-o2cw0fjplkby.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/fr\/_v\/ga\/fr_vgavsvyh9wx-o2cw0fjplkby.jpeg\" data-blurred=\"true\"\/>  <\/div>\n<\/p><\/div>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0424\u043e\u0442\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u0430\u0432\u043a\u0438.<\/b>                         <\/p>\n<div class=\"spoiler_text\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/b-\/ya\/ih\/b-yaihn-kuiru6iaoctinluklhe.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/b-\/ya\/ih\/b-yaihn-kuiru6iaoctinluklhe.jpeg\" data-blurred=\"true\"\/>  <\/div>\n<\/p><\/div>\n<p>  \u0418 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u0438\u0434\u0435\u043e.<\/p>\n<div class=\"oembed\">\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/6123ea552077cda25f846df5\" data-style=\"\" id=\"6123ea552077cda25f846df5\" width=\"\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/574156\/\"> https:\/\/habr.com\/ru\/articles\/574156\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/rk\/8d\/21\/rk8d21ruruywz9ankryj3jiqzs0.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/rk\/8d\/21\/rk8d21ruruywz9ankryj3jiqzs0.jpeg\" data-blurred=\"true\"\/><\/p>\n<p>  \u0421\u0440\u0435\u0434\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0445 \u043c\u0430\u0448\u0438\u043d\u043e\u043a, \u043e\u0441\u043d\u0430\u0449\u0435\u043d\u043d\u044b\u0445 \u043a\u0430\u043c\u0435\u0440\u043e\u0439, \u043e\u0441\u043e\u0431\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 \u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0431\u044b\u0441\u0442\u0440\u043e, \u0441 \u043c\u0438\u043d\u0438\u043c\u0443\u043c\u043e\u043c \u0434\u0435\u0442\u0430\u043b\u0435\u0439 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043d\u0435\u0447\u0442\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u0435 \u043f\u043e wi-fi. \u041d\u043e, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0437\u0434\u0435\u0441\u044c \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u0434\u0430\u0436\u0435 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043f\u043e\u0434\u0431\u043e\u0440\u043a\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0438\u0445 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043c\u044b \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0432 \u0431\u043e\u044e esp32-cam \u0438 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044f \u2014 tb6612fng.<\/p>\n<p>  \u041c\u0430\u0448\u0438\u043d\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0441\u043e \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0430 \u043b\u0438\u0431\u043e \u0441\u0442\u0430\u0446\u0438\u043e\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u041f\u041a \u0438, \u0440\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u0431\u0443\u0434\u0435\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0431\u044e\u0434\u0436\u0435\u0442\u043d\u0430\u044f. \u041f\u043e\u043c\u0438\u043c\u043e \u043f\u0440\u043e\u0447\u0435\u0433\u043e \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u043d\u044f\u0442\u0430 \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0443\u0439\u0442\u0438 \u043e\u0442 arduin, \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b.<\/p>\n<p>  \u041f\u0440\u043e\u0435\u043a\u0442 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d \u043d\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0445, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044e\u0449\u0438\u0445.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-398383","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/398383","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=398383"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/398383\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=398383"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=398383"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=398383"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}