{"id":444494,"date":"2025-01-09T09:50:44","date_gmt":"2025-01-09T09:50:44","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=444494"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=444494","title":{"rendered":"<span>FreeRTOS \u0434\u043b\u044f \u0441\u0430\u043c\u044b\u0445 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 ESP-IDF<\/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\"><a href=\"https:\/\/habr.com\/ru\/companies\/ruvds\/articles\/868760\/\"><\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/jd\/ho\/3m\/jdho3muwcphe_qts7r7jppftnga.png\" data-src=\"https:\/\/habrastorage.org\/webt\/jd\/ho\/3m\/jdho3muwcphe_qts7r7jppftnga.png\"\/><\/div>\n<p><\/a><br \/> \u0412\u0441\u0435 \u043c\u044b \u0437\u043d\u0430\u0435\u043c, \u0447\u0442\u043e FreeRTOS \u2014 \u044d\u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u0433\u0434\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u0441\u0442\u0440\u043e\u0433\u0438\u0435 \u0440\u0430\u043c\u043a\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0447\u0442\u043e\u0431\u044b \u043b\u044e\u0431\u043e\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0431\u044b\u043b\u043e \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043e. \u041d\u0430 \u044d\u0442\u043e\u043c \u043f\u043e\u0437\u043d\u0430\u043d\u0438\u044f \u043e\u0431 \u044d\u0442\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0443 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u0430\u0439\u0442\u0438\u0448\u043d\u0438\u043a\u043e\u0432 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u044e\u0442\u0441\u044f, \u043f\u043e \u0442\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435, \u0447\u0442\u043e 99% \u0438\u0437 \u043d\u0430\u0441 \u043d\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u0432 \u0436\u0438\u0437\u043d\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0430\u043f\u043e\u0434\u043e\u0431\u0438\u0435 \u0441\u043e\u0444\u0442\u0430 \u0442\u043e\u0440\u043c\u043e\u0437\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f \u0438\u043b\u0438 \u043c\u0435\u0434\u0438\u0446\u0438\u043d\u0441\u043a\u043e\u0433\u043e \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f. \u041d\u043e \u044f \u0431\u044b \u0445\u043e\u0442\u0435\u043b \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0431 \u044d\u0442\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u043f\u043e\u0442\u043e\u043c\u0443 \u043a\u0430\u043a \u043e\u043d\u0430 \u0432\u043f\u043e\u043b\u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u043c\u043d\u043e\u0433\u0438\u043c \u0438\u0437 \u043d\u0430\u0441 \u043f\u043e \u0434\u0440\u0443\u0433\u0438\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c. \u0412\u0435\u0434\u044c FreeRTOS \u0432\u043f\u043e\u043b\u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0448\u0430\u0433\u043e\u043c \u0434\u043b\u044f \u0441\u0430\u043c\u043e\u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f \u043f\u043e\u0441\u043b\u0435 Arduino, \u043f\u043e\u0442\u043e\u043c\u0443 \u043a\u0430\u043a \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043d\u0435\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432 \u0438 \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0441\u0442\u0430\u043d\u0438\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0435\u043c\u043d\u043e\u0433\u0438\u043c \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u00abHello World\u00bb \u0435\u0451 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0449\u0435 \u0434\u043b\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u0437\u0430 \u0441\u0447\u0451\u0442 \u0441\u0432\u043e\u0435\u0439 \u043f\u0440\u043e\u0434\u0443\u043c\u0430\u043d\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b. \u0415\u0451 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u0445, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u043d\u043e\u0433\u0438\u0435 \u0443\u0436\u0435 \u043f\u0440\u0438\u0432\u044b\u043a\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 \u0441\u0432\u043e\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0434\u043d\u044f \u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u0441\u043c\u0435\u0448\u043d\u044b\u0435 \u0434\u0435\u043d\u044c\u0433\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 AVR, ESP32 \u0438 STM32. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u043f\u043e\u043a\u0430\u0436\u0443, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 FreeRTOS \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 ESP32 \u0438 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430 \u043e\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f Espressif \u2014 ESP-IDF, \u0434\u043b\u044f \u0441\u0432\u043e\u0435\u0439 \u043b\u0438\u043d\u0435\u0439\u043a\u0438 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432.<a name=\"habracut\"><\/a><\/p>\n<h2><font color=\"#3AC1EF\">\u041d\u0430\u0447\u043d\u0451\u043c<\/font><\/h2>\n<p> \u0412 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u044c \u0442\u043e\u0442 \u0444\u0430\u043a\u0442, \u0447\u0442\u043e \u0445\u043e\u0442\u044f FreeRTOS \u0438 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439, \u043e\u043d\u0430 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u0432\u0441\u0435\u0434\u043d\u0435\u0432\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439, \u043a\u0430\u043a, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, Linux \u0438\u043b\u0438 Windows, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043d\u0430 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u044b. \u0415\u0451 \u043d\u0435\u043b\u044c\u0437\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0430 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u0438 \u0434\u0430\u0436\u0435 \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0432 \u043d\u0435\u0439 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0439 \u0441\u043e\u0444\u0442. \u0422\u0443\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434. \u041d\u043e \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0443\u0433\u043b\u0443\u0431\u043b\u044f\u0442\u044c\u0441\u044f, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044b \u043a \u0440\u0435\u0448\u0435\u043d\u0438\u044e \u0437\u0430\u0434\u0430\u0447\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 \u0438\u043b\u0438 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430.<\/p>\n<h3><font color=\"#3AC1EF\">\u258d 1. Linux<\/font><\/h3>\n<p> \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 Linux-\u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0430 \u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u0441\u0432\u043e\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 \u0441\u043e\u0444\u0442\u0430 \u0441 github \u043f\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443, \u043f\u043e\u0445\u043e\u0436\u0435\u043c\u0443 \u043d\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u0441\u043e\u0444\u0442\u0430 \u043d\u0430 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440. \u0422\u0430\u043a\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0433\u043e\u0434\u0438\u0442\u0441\u044f \u0434\u043b\u044f \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u043e\u0449\u043d\u044b\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c \u0432\u0440\u043e\u0434\u0435 Raspberry. Linux \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043c\u043d\u043e\u0433\u043e\u044f\u0434\u0435\u0440\u043d\u043e\u0441\u0442\u044c, \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0443\u0436\u0435 \u0438\u043c\u0435\u0435\u0442 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u044b \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f, \u043c\u043e\u0436\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 PCIE, USB \u0438 \u0434\u0430\u0436\u0435 SDIO \u0438 UART \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0432\u0440\u043e\u0434\u0435 GPS \u043c\u043e\u0434\u0443\u043b\u0435\u0439, Bluetooth \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432. \u0421 \u043a\u0430\u0436\u0434\u044b\u043c \u043d\u043e\u0432\u044b\u043c \u044f\u0434\u0440\u043e\u043c \u0441\u043f\u0438\u0441\u043a\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0441\u0435\u043c\u0438\u043c\u0438\u043b\u044c\u043d\u044b\u043c\u0438 \u0448\u0430\u0433\u0430\u043c\u0438. \u042d\u0442\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u043e\u0435, \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0435, \u043d\u043e \u043e\u0447\u0435\u043d\u044c \u0434\u043e\u0440\u043e\u0433\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u043a\u043d\u043e\u043f\u043e\u0447\u043a\u0438, \u043c\u043e\u0440\u0433\u0430\u0442\u044c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430\u043c\u0438 \u0438 \u043a\u0440\u0443\u0442\u0438\u0442\u044c \u043c\u043e\u0442\u043e\u0440\u0447\u0438\u043a\u0438. \u0426\u0435\u043d\u044b \u043d\u0430 \u0442\u0430\u043a\u0438\u0435 \u043f\u043b\u0430\u0442\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442\u0441\u044f \u043e\u0442 3\u043a. \u0440\u0443\u0431. \u0438 \u0432\u0432\u0435\u0440\u0445 \u043d\u0430 \u043b\u0443\u043d\u0443. \u041e\u0434\u043d\u0430\u043a\u043e, \u044f \u0443\u0436\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u043b, \u043a\u0430\u043a \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 Linux \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u0432\u0448\u0435\u0435 \u0441\u0432\u043e\u044e \u0436\u0438\u0437\u043d\u044c \u0431\u044b\u0442\u043e\u0432\u043e\u0435 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u043f\u043e\u0441\u0442\u0430\u0445 \u043f\u0440\u043e <a href=\"https:\/\/habr.com\/ru\/companies\/ruvds\/articles\/769942\/\">\u00ab\u041e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u0438\u0437 \u043a\u0430\u043c\u0435\u0440\u044b \u0432\u0438\u0434\u0435\u043e\u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u044f\u00bb<\/a> \u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/765280\/\">\u00ab\u041f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u043c TV-box \u0432 \u043c\u0438\u043d\u0438-\u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u00bb<\/a>.<\/p>\n<h3><font color=\"#3AC1EF\">\u258d 2. \u041d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b Arduino<\/font><\/h3>\n<p> \u041e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0434\u043b\u044f \u0441\u0430\u043c\u044b\u0445 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c \u0434\u0435\u0442\u0438\u0448\u0435\u043a \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0438 \u043a\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043c\u043e\u0440\u0433\u0430\u0442\u044c LED. \u0421\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043a\u0430\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0442\u0430\u043a \u0438 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438, \u0447\u0435\u043c \u043d\u0435\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u0441\u043d\u0438\u0436\u0430\u0435\u0442 \u043f\u043e\u0440\u043e\u0433 \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f. \u0417\u0430 \u0441\u0447\u0451\u0442 \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043d\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435. \u0415\u0441\u0442\u044c \u043e\u0432\u0435\u0440\u0445\u0435\u0434 \u043f\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c, \u043d\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u0441\u0442\u043e\u0438\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u043a\u0430\u043a, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 ESP32 \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c Arduino \u043c\u044b \u043d\u0430\u0439\u0434\u0451\u043c \u0442\u043e\u0442 \u0436\u0435 FreeRTOS.<\/p>\n<h3><font color=\"#3AC1EF\">\u258d 3. \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u0441\u0432\u043e\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0431\u0435\u0437 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043a\u0438 (bare metal)<\/font><\/h3>\n<p> \u041f\u0438\u0448\u0435\u043c \u043d\u0430 \u0447\u0438\u0441\u0442\u043e\u043c \u0421\u0438 \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u0438 WiFi, Bluetooth, \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b \u0432\u0440\u043e\u0434\u0435 1wire, I2C e.t.c. \u0422\u0440\u0435\u0431\u0443\u0435\u0442 \u043f\u043e\u043b\u043d\u044b\u0439 \u0441\u043f\u0435\u043a\u0442\u0440 \u0437\u043d\u0430\u043d\u0438\u0439 \u0432 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0438 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u0438\u043a\u0435, \u0432 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u0435, \u0432\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430, \u0442\u0430\u043a\u043e\u0439 \u043a\u0430\u043a \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430, \u0442\u0430\u0439\u043c\u0435\u0440\u044b, \u043a\u043e\u043c\u043f\u0430\u0440\u0430\u0442\u043e\u0440\u044b, \u0443\u043c\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430 \u043d\u0438\u0437\u043a\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u0441 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f\u043c\u0438. \u0425\u043e\u0442\u044c \u044d\u0442\u043e \u0438 \u0434\u0430\u0451\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0443 \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043d\u0430\u0434 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f, \u043d\u043e \u043a\u043e\u0434 \u043f\u0438\u0448\u0435\u0442\u0441\u044f \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e. \u0414\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u043b\u044e\u0434\u0435\u0439 \u0441\u043b\u043e\u0436\u043d\u043e, \u043e\u0447\u0435\u043d\u044c \u0441\u043b\u043e\u0436\u043d\u043e.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/jm\/i3\/jf\/jmi3jfzq7kwb1rschqd-wkngywi.png\" data-src=\"https:\/\/habrastorage.org\/webt\/jm\/i3\/jf\/jmi3jfzq7kwb1rschqd-wkngywi.png\"\/><\/div>\n<p><i><font color=\"#999999\">\u041d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e!<\/font><\/i><\/p>\n<h3><font color=\"#3AC1EF\">\u258d 4. FreeRTOS<\/font><\/h3>\n<p> \u042d\u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0430\u044f \u043d\u0430\u0431\u043e\u0440 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u044b \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0432 \u0441\u0432\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0438\u0445 \u0432 \u0441\u0432\u043e\u0451\u043c \u043a\u043e\u0434\u0435. \u041e\u043d\u0430 \u043d\u0435 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a Linux! \u041e\u043d\u0430 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0432 \u0435\u0434\u0438\u043d\u0443\u044e \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043d\u0430\u0448\u0438\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c. <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/os\/pg\/gu\/ospggug_-bevsi9fzsqysk0q8t8.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/os\/pg\/gu\/ospggug_-bevsi9fzsqysk0q8t8.jpeg\" data-blurred=\"true\"\/><\/div>\n<p><i><font color=\"#999999\">\u0427\u0430\u0441\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u0447\u0430\u0441\u0442\u044c \u043a\u043e\u0440\u0430\u0431\u043b\u044f<\/font><\/i><\/p>\n<p> \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u043d\u0430 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u044f\u0434\u0435\u0440 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430, WiFi \u0438 BT \u043c\u043e\u0434\u0443\u043b\u0438. <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/gu\/b1\/-l\/gub1-lkchockdvuteiashmotjlw.png\" data-src=\"https:\/\/habrastorage.org\/webt\/gu\/b1\/-l\/gub1-lkchockdvuteiashmotjlw.png\"\/><\/div>\n<p><i><font color=\"#999999\">\u0412\u044b\u0431\u043e\u0440 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 FreeRTOS \u0447\u0435\u0440\u0435\u0437 &#8216;idf.py menuconfig&#8217;<\/font><\/i><\/p>\n<p> \u0415\u0441\u043b\u0438 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a GPIO, \u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 driver. \u0414\u043b\u044f HTTP-\u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c esp_http_server. \u0410 \u0432 \u043a\u043e\u0434\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 \u00abdriver\/ledc.h\u00bb \u0438 \u00abesp_http_server.h\u00bb. \u041d\u043e \u0447\u0442\u043e\u0431\u044b HTTP-\u0441\u0435\u0440\u0432\u0435\u0440 \u043e\u0431\u0440\u0451\u043b \u0441\u043c\u044b\u0441\u043b \u043d\u0430 \u043d\u0430\u0448\u0435\u0439 \u0436\u0435\u043b\u0435\u0437\u043a\u0435, \u043d\u0430\u043c \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0435\u0449\u0451 \u0438 \u0441\u0435\u0442\u044c, \u0430 \u044d\u0442\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 esp_wifi, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a WiFi-\u043a\u043b\u0438\u0435\u043d\u0442 \u0438\u043b\u0438 \u0442\u043e\u0447\u043a\u0443 \u0434\u043e\u0441\u0442\u0443\u043f\u0430. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c \u0438 \u043f\u0440\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u00abesp_wifi.h\u00bb. \u0412 \u043e\u0431\u0449\u0435\u043c \u043f\u0440\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0443\u0436\u043d\u043e \u0447\u0451\u0442\u043a\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u044b. \u0412\u0441\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043e\u0440\u0430 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u044b \u0432 \u0444\u0430\u0439\u043b \u00absdkconfig\u00bb.<\/p>\n<p> \u0422\u0443\u0442 \u043d\u0435\u043a\u0438\u0439 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u043d\u0430\u0447\u0430\u043b \u043f\u043e\u0434\u043e\u0437\u0440\u0435\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u0441 \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u043e\u0439 \u043d\u0430 \u0440\u0430\u0437\u0440\u0430\u0441\u0442\u0430\u043d\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 FreeRTOS \u0431\u0443\u0434\u0435\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c, \u043d\u043e \u0438 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u0437\u0430 \u0441\u0447\u0451\u0442 \u043e\u0442\u043b\u0438\u0447\u043d\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u0438 \u044d\u0442\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u0418 \u0442\u0430\u043a\u043e\u0439 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u0447\u0435\u0440\u0442\u043e\u0432\u0441\u043a\u0438 \u043f\u0440\u0430\u0432!<\/p>\n<p> \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u044f \u043f\u043e\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u043f\u043e\u043c\u043e\u0440\u0433\u0430\u0442\u044c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u043c, \u0430 \u043f\u043e\u0442\u043e\u043c \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a \u0431\u043e\u043b\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u043d\u0435 \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435, \u043d\u043e \u0431\u043b\u0438\u0436\u0435 \u043a \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c\u0443 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044e: \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0432 ESP32 WiFi-\u043c\u043e\u0434\u0443\u043b\u044c, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u0441\u0435\u0442\u0438, \u043f\u0440\u044f\u043c\u043e \u043d\u0430 ESP32 \u043f\u043e\u0434\u043d\u0438\u043c\u0435\u043c HTTP-\u0441\u0435\u0440\u0432\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043f\u043e \u043f\u0443\u0442\u0438 \/feed \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0430\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0448\u0430\u0433\u043e\u0432\u044b\u043c \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u0435\u043c \u0447\u0435\u0440\u0435\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442. \u0418 \u0432\u0441\u0451 \u044d\u0442\u043e \u043d\u0430 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0435 ESP-WROOM-32, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0443 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u0442\u0435\u0445 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439, \u043a\u0442\u043e \u0434\u043e\u0447\u0438\u0442\u0430\u043b \u0434\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430, \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u0432\u0430\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0437\u0430\u0433\u0430\u0448\u043d\u0438\u043a\u0435. \u0426\u0435\u043d\u0430 \u044d\u0442\u043e\u0439 \u043f\u043b\u0430\u0442\u044b, \u0431\u043b\u0438\u0437\u043a\u0430\u044f \u043a \u0446\u0435\u043d\u0435 \u0447\u0430\u0448\u0435\u0447\u043a\u0438 \u043a\u043e\u0444\u0435 \u0432 \u0442\u0440\u0438 \u0441\u043e\u0442\u043d\u0438 \u0440\u0443\u0431\u0447\u0438\u043a\u043e\u0432, \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043c\u0435\u0448\u043d\u0430. \u0410 \u0435\u0441\u043b\u0438 \u0443\u0447\u0435\u0441\u0442\u044c, \u0447\u0442\u043e \u043d\u0430 \u0431\u043e\u0440\u0442\u0443 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0432\u0443\u0445\u044a\u044f\u0434\u0435\u0440\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439 \u0434\u043e 240Mhz, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 WiFi \u0438 BT \u0441\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0439 \u0438\u043b\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u043e\u0439 \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u0430\u043d\u0442\u0435\u043d\u043d\u043e\u0439, \u0442\u043e \u044d\u0442\u0430 \u043f\u043b\u0430\u0442\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u043d\u0435 \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0446\u0438\u0438 \u0434\u043b\u044f \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043d\u0430 \u043f\u043b\u0430\u0442\u0435 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 UART-\u0430\u0434\u0430\u043f\u0442\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u043e\u0442\u043a\u043d\u0443\u0442\u044c \u043f\u043b\u0430\u0442\u0443 \u0432 USB, \u0431\u0435\u0437 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440\u0430 \u043f\u0440\u043e\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u0438 \u0434\u0430\u0436\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043d\u0441\u043e\u043b\u044c. \u041a\u0441\u0442\u0430\u0442\u0438, \u0435\u0441\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0434\u0435\u0448\u0451\u0432\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 \u0431\u0435\u0437 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e UART-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430\u043c \u043e\u0447\u0435\u043d\u044c \u043c\u0430\u043b\u044b \u0438, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0431\u043e\u043b\u0435\u0435 \u044d\u043d\u0435\u0440\u0433\u043e\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b \u0431\u0435\u0437 \u043f\u0438\u0442\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b. \u0422\u0430\u043a\u0438\u0435 \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0443\u0436\u0435 \u0432 \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0448\u0438\u0442\u044c \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0447\u0435\u0440\u0435\u0437 \u0432\u043d\u0435\u0448\u043d\u0438\u0439 USB UART \u0430\u0434\u0430\u043f\u0442\u0435\u0440.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/uv\/jv\/bi\/uvjvbiyj69ehvq9sz04a5om0ram.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/uv\/jv\/bi\/uvjvbiyj69ehvq9sz04a5om0ram.jpeg\" data-blurred=\"true\"\/><\/div>\n<p><i><font color=\"#999999\">ESP32 \u0431\u0435\u0437 UART-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0438 \u0441 IPEX \u0432\u044b\u0445\u043e\u0434\u043e\u043c \u043d\u0430 \u0432\u043d\u0435\u0448\u043d\u044e\u044e \u0430\u043d\u0442\u0435\u043d\u043d\u0443 WiFi<\/font><\/i><\/p>\n<h2><font color=\"#3AC1EF\">Hello world \u043d\u0430 FreeRTOS \u0432 ESP32: \u043c\u043e\u0440\u0433\u0430\u0435\u043c LED<\/font><\/h2>\n<p> \u041f\u0440\u0438\u0431\u043e\u0440\u044b \u0438 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b:<\/p>\n<ol>\n<li>\u041a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u0441 USB.<\/li>\n<li><a href=\"https:\/\/alii.pub\/74dae2?erid=2SDnjc2hBLX\">ESP-WROOM-32<\/a> \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u0441 USB-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c.<\/li>\n<li>LED \u0438 \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0435\u0437\u0438\u0441\u0442\u043e\u0440 \u043d\u0430 100-1000 \u041e\u043c, \u043d\u043e \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e.<\/li>\n<li>\u041f\u0430\u044f\u043b\u044c\u043d\u0438\u043a \u0438\u043b\u0438 \u043c\u0430\u043a\u0435\u0442\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u043e\u0434\u0430.<\/li>\n<\/ol>\n<p> \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0432 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043d\u044b\u0439 \u0440\u0430\u0437 \u043d\u0435 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435 \u0438 \u043d\u0435 \u0443\u0442\u043e\u043d\u0443\u0442\u044c \u0432 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u044f\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043e\u0434 Linux\/Windows\/MAC \u0438 \u043f\u043e\u0434 \u043b\u044e\u0431\u0438\u043c\u0443\u044e IDE, \u044f \u0431\u0443\u0434\u0443 \u0434\u0430\u0432\u0430\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043f\u043e\u0441\u0442\u044b. \u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u043f\u043e \u043b\u044e\u0431\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 ESP-IDF <a href=\"https:\/\/habr.com\/ru\/articles\/575098\">\u043b\u044e\u0431\u044b\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c<\/a>.<\/p>\n<p> \u0417\u0430\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u0435\u043c \u0432 \u0437\u0430\u0433\u0430\u0448\u043d\u0438\u043a \u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u043a\u0430\u043a\u043e\u0439-\u0442\u043e ESP32 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0441 WiFi \u043d\u0430 \u0431\u043e\u0440\u0442\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0436\u0435 \u0438 \u043d\u0435 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u0435 \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u0431\u0440\u0430\u043b\u0438. \u041c\u043e\u044f \u0441\u0442\u0430\u0432\u043a\u0430, \u0447\u0442\u043e \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0447\u0442\u043e-\u0442\u043e \u0432\u0440\u043e\u0434\u0435 ESP-WROOM-32. \u041d\u043e \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 ESP8266, \u043d\u0435 \u0440\u0430\u0441\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0439\u0442\u0435\u0441\u044c. \u041d\u0430 \u0442\u0430\u043a\u0438\u0445 \u0442\u043e\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u043f\u043e\u0434 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c FreeRTOS, \u043e\u0434\u043d\u0430\u043a\u043e \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a <a href=\"https:\/\/github.com\/espressif\/ESP8266_RTOS_SDK\">ESP8266_RTOS_SDK<\/a>.<\/p>\n<p> \u041f\u043e\u0441\u043b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 SDK \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0443\u0431\u0435\u0436\u0434\u0430\u0435\u043c\u0441\u044f, \u0447\u0442\u043e idf.py \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438, \u0433\u0434\u0435 \u0445\u043e\u0442\u0438\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442:<\/p>\n<pre><code class=\"bash\">$ idf.py create-project habr-esp32-led cd habr-esp32-led\/<\/code><\/pre>\n<p> \u0411\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f habr-esp32-led. \u0421\u0438\u043b\u044c\u043d\u043e \u043d\u0435 \u0440\u0430\u0434\u0443\u0439\u0442\u0435\u0441\u044c, \u0443\u0432\u0438\u0434\u0435\u0432 CMakeLists.txt, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u044d\u0442\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0435 \u0447\u0435\u0440\u0435\u0437 cmake, \u0430 \u0447\u0435\u0440\u0435\u0437 idf.py.<\/p>\n<p> \u0423 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f habr-esp32-led, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0430\u0439\u0434\u0451\u0442\u0441\u044f habr-esp32-led\/main\/CMakeLists.txt \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f:<\/p>\n<pre><code class=\"cpp\">idf_component_register(SRCS \"habr-esp32-led.c\"  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0INCLUDE_DIRS \".\")<\/code><\/pre>\n<p> \u0427\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0435\u043a\u0442 \u043c\u043e\u0433 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c GPIO, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u00abdriver\u00bb \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 GPIO. \u0421 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043d\u043e\u0432\u044b\u0445 \u0421\u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432 \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0432 \u044d\u0442\u043e\u043c \u0444\u0430\u0439\u043b\u0435. \u0412\u043e\u0442 \u0442\u0430\u043a \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439:<\/p>\n<pre><code class=\"cpp\">idf_component_register(SRCS \"habr-esp32-led.c\"  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0INCLUDE_DIRS \".\"  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0REQUIRES driver  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0) <\/code><\/pre>\n<p> \u0414\u043e\u043b\u0436\u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0432\u043e\u0442 \u0442\u0430\u043a\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0441 \u0434\u0432\u0443\u043c\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 CMakeLists.txt:<\/p>\n<pre><code class=\"bash\"> habr-esp32-led   - CMakeLists.txt   - sdkconfig   - main        - CMakeLists.txt        - habr-esp32-led.c  <\/code><\/pre>\n<p> \u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434 \u0432 .\/habr-esp32-led\/main\/habr-esp32-led.c:<\/p>\n<pre><code class=\"cpp\">#include \"freertos\/FreeRTOS.h\"  #include \"freertos\/task.h\"  #include \"driver\/gpio.h\"  #include &lt;stdio.h&gt;   #define LED_PIN GPIO_NUM_2  \/\/ \u041f\u0438\u043d \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430   void app_main(void)  {     gpio_reset_pin(LED_PIN);  \/\/ \u0421\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0438\u043d\u0430     gpio_set_direction(LED_PIN, GPIO_MODE_OUTPUT);  \/\/ \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043f\u0438\u043d \u043a\u0430\u043a \u0432\u044b\u0445\u043e\u0434      while (1) {         gpio_set_level(LED_PIN, 1);  \/\/ \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434         vTaskDelay(1000 \/ portTICK_PERIOD_MS);  \/\/ \u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 1 \u0441\u0435\u043a\u0443\u043d\u0434\u0430          gpio_set_level(LED_PIN, 0);  \/\/ \u0412\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434         vTaskDelay(1000 \/ portTICK_PERIOD_MS);  \/\/ \u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 1 \u0441\u0435\u043a\u0443\u043d\u0434\u0430     }  } <\/code><\/pre>\n<p> \u0423\u0432\u0435\u0440\u0435\u043d, \u043a\u0442\u043e \u0443\u0436\u0435 \u0438\u043c\u0435\u0435\u0442 \u043d\u0435\u043a\u0438\u0439 \u043e\u043f\u044b\u0442 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043d\u0430 \u0421\u0438 \u043f\u043e\u0434 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b, \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u0441 Arduino \u043f\u043e\u0439\u043c\u0451\u0442 \u043f\u043e \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c, \u0447\u0442\u043e \u0442\u0443\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043d\u043e \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0445\u043e\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u044f \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u044f\u0441\u043d\u0438\u0442\u044c.<\/p>\n<p> \u0417\u0430\u0434\u0430\u0451\u043c \u0430\u043b\u0438\u0430\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u044f\u0432\u043b\u044f\u0435\u0442, \u0447\u0442\u043e LED_PIN \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u0435\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e GPIO_NUM_2, \u0447\u0442\u043e \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0443 \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043f\u0438\u043d\u043e\u043c GPIO \u043f\u043e\u0434 \u043d\u043e\u043c\u0435\u0440\u043e\u043c 2. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 GPIO-\u0432\u044b\u0445\u043e\u0434\u044b.<\/p>\n<p> void app_main() \u2014 \u044d\u0442\u043e \u0433\u043b\u0430\u0432\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u0445\u043e\u0434\u0430 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443, \u0442\u0430\u043a\u0430\u044f \u043a\u0430\u043a void loop() \u0432 Arduino \u0438\u043b\u0438 void main() \u0432 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0421\u0438. \u0412\u044b\u0445\u043e\u0434 \u0438\u0437 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0435 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d, \u0438 \u043e\u043d\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u0435\u0434\u0438\u043d\u043e\u0436\u0434\u044b. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432\u0441\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043e\u0440\u0442\u043e\u0432 \u043d\u0435 \u0432\u044b\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e setup(), \u0430 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u00abwhile (1) {}\u00bb. <\/p>\n<p> vTaskDelay() \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043f\u043e\u0442\u043e\u043a \u043d\u0430 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u0438\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u0443\u0434\u043e\u0431\u043d\u044b\u0445 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u0435\u0440\u0435\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u043e\u0434 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u044b \u0438\u043b\u0438 \u0440\u0430\u0437\u043d\u044b\u0435 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430, \u043c\u044b \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u044b \u0432 \u0442\u0438\u043a\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0443 \u0444\u0440\u0435\u0439\u043c\u0444\u043e\u0440\u043a\u0430 portTICK_PERIOD_MS.<\/p>\n<p> \u041c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043e\u0440 \u0438\u0437 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 habr-esp32-led \u0438 \u043f\u0435\u0440\u0435\u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442, \u043d\u043e \u0434\u043b\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u043c\u0435\u043d\u044f\u0442\u044c \u043f\u043e\u043a\u0430 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f:<\/p>\n<pre><code class=\"bash\">$ idf.py menuconfig<\/code><\/pre>\n<p> \u0412\u044b\u0431\u0438\u0440\u0430\u0439\u0442\u0435 \u0432\u0430\u0448 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u043b\u044f ESP-WROOM-32:<\/p>\n<pre><code class=\"bash\">$ idf.py set-target esp32<\/code><\/pre>\n<p> \u0412\u043e\u0442 \u0442\u0430\u043a\u0438\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432 ESP32 IDF:<\/p>\n<pre><code class=\"bash\">$ idf.py set-target  Usage: idf.py set-target [OPTIONS] {esp32|esp32s2|esp32c3|esp32s3|esp32c2|esp32c6|esp32h2|esp32p4|linux|esp32c5|esp32c61}  Try 'idf.py set-target --help' for help.   Error: Missing argument '{esp32|esp32s2|esp32c3|esp32s3|esp32c2|esp32c6|esp32h2|esp32p4|linux|esp32c5|esp32c61}'. Choose from:  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0esp32,  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0esp32s2,  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0esp32c3,  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0esp32s3,  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0esp32c2,  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0esp32c6,  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0esp32h2,  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0esp32p4,  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0linux,  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0esp32c5,  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0esp32c61 <\/code><\/pre>\n<p> \u041f\u043e\u0441\u043b\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043f\u0440\u043e\u0435\u043a\u0442 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0438\u043d\u0443\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438 \u0432 \u043a\u043e\u043d\u0446\u0435 \u043d\u0430\u043f\u0438\u0448\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<pre><code class=\"bash\">idf.py build ... habr-esp32-led.bin binary size 0x2d2a0 bytes. Smallest app partition is 0x100000 bytes. 0xd2d60 bytes (82%) free.   Project build complete. To flash, run:  idf.py flash  or  idf.py -p PORT flash  or  python -m esptool --chip esp32 -b 460800 --before default_reset --after hard_reset write_flash --flash_mode dio --flash_size 2MB --flash_freq 40m 0x1000 build\/bootloader\/bootloader.bin 0x8000 build\/partition_table\/partition-table.bin 0x10000 build\/habr-esp32-led.bin  or from the \"\/mnt\/raid\/devel\/habr\/habr-esp32-led\/build\" directory  python -m esptool --chip esp32 -b 460800 --before default_reset --after hard_reset write_flash \"@flash_args\" <\/code><\/pre>\n<p> \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u0441\u043e\u0431\u0440\u0430\u043d\u0430 \u0438 \u0433\u043e\u0442\u043e\u0432\u0430 \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u0442\u044c \u0437\u0430\u043b\u0438\u0442\u043e\u0439 \u0432 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440:<\/p>\n<pre><code class=\"bash\">idf.py flash<\/code><\/pre>\n<p> \u0418\u043b\u0438 \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u043d\u0443\u0436\u043d\u043e\u0433\u043e USB \u043f\u043e\u0440\u0442\u0430:<\/p>\n<pre><code class=\"bash\">idf.py -p \/dev\/ttyUSB0 flash<\/code><\/pre>\n<p> \u042d\u0442\u043e \u043f\u0440\u043e\u0448\u044c\u0451\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0432 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0438 \u043d\u0430\u0448\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0441\u044f.<\/p>\n<p> \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0432 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u043a \u0432\u044b\u0432\u043e\u0434\u0430\u043c GPIO2 \u0438 GND, \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0435\u0433\u043e \u043c\u0438\u0433\u0430\u043d\u0438\u0435. \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u0442\u043e\u043a\u043e\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u044e\u0449\u0438\u0439 \u0440\u0435\u0437\u0438\u0441\u0442\u043e\u0440, \u043d\u043e \u0435\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u0430\u0431\u044b\u0439 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434, \u0442\u043e \u043e\u043d \u043d\u0435 \u043d\u0430\u043d\u0435\u0441\u0451\u0442 \u0443\u0449\u0435\u0440\u0431\u0430 \u0432\u0430\u0448\u0435\u0439 \u043f\u043b\u0430\u0442\u0435 \u0434\u0430\u0436\u0435 \u0431\u0435\u0437 \u0440\u0435\u0437\u0438\u0441\u0442\u043e\u0440\u0430, \u0435\u0441\u043b\u0438 \u0432\u0441\u0435\u0433\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u043c\u0438\u0433\u043d\u0451\u0442 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438.<\/p>\n<p> \u0412\u043e\u0442 \u0447\u0442\u043e \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0443\u0432\u0438\u0434\u0435\u0442\u044c:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/fa\/rf\/sl\/farfslusyf4blnq4tewrsoimrky.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/fa\/rf\/sl\/farfslusyf4blnq4tewrsoimrky.jpeg\" data-blurred=\"true\"\/><\/div>\n<p><i><font color=\"#999999\">LED \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435 ESP32 \u0434\u043e\u043b\u0436\u0435\u043d \u043c\u0438\u0433\u0430\u0442\u044c<\/font><\/i><\/p>\n<p> \u0414\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a ESP32-\u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0447\u0435\u0440\u0435\u0437 minicom \u0438\u043b\u0438 picocom, \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0430 \u043f\u043b\u0430\u0442\u0430\u0445 ESP32 \u0441 USB \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0443\u0436\u0435 \u0435\u0441\u0442\u044c UART-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440:<\/p>\n<pre><code class=\"bash\">picocom -b 115200 -r -l \/dev\/ttyUSB0<\/code><\/pre>\n<p> \u0422\u0430\u043a \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043b\u043e\u0433 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043f\u043e\u0441\u043b\u0435 \u043d\u0430\u0436\u0430\u0442\u0438\u044f RESET \u0438 \u0440\u0430\u0431\u043e\u0442\u044b FreeRTOS, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u0441\u0451, \u0447\u0442\u043e \u0432\u044b\u0432\u043e\u0434\u044f\u0442 \u043d\u0430\u0448\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b printf().<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041f\u0440\u0438\u043c\u0435\u0440 \u043b\u043e\u0433\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 FreeRTOS \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0442\u0430\u0441\u043a\u043e\u0432<\/b>                         <\/p>\n<div class=\"spoiler_text\">ets Jul 29 2019 12:21:46<\/p>\n<p> rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)<br \/> configsip: 0, SPIWP:0xee<br \/> clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00<br \/> mode:DIO, clock div:2<br \/> load:0x3fff0030,len:6276<br \/> load:0x40078000,len:15728<br \/> ho 0 tail 12 room 4<br \/> load:0x40080400,len:4<br \/> load:0x40080404,len:3860<br \/> entry 0x4008063c<br \/> I (31) boot: ESP-IDF v5.4-dev-3602-ga97a7b0962-dirty 2nd stage bootloader<br \/> I (31) boot: compile time Dec 10 2024 15:54:10<br \/> I (31) boot: Multicore bootloader<br \/> I (35) boot: chip revision: v3.1<br \/> I (38) boot.esp32: SPI Speed: 40MHz<br \/> I (41) boot.esp32: SPI Mode: DIO<br \/> I (45) boot.esp32: SPI Flash Size: 4MB<br \/> I (48) boot: Enabling RNG early entropy source\u2026<br \/> I (53) boot: Partition Table:<br \/> I (55) boot: ## Label Usage Type ST Offset Length<br \/> I (62) boot: 0 nvs WiFi data 01 02 00009000 00006000<br \/> I (68) boot: 1 phy_init RF data 01 01 0000f000 00001000<br \/> I (75) boot: 2 factory factory app 00 00 00010000 00100000<br \/> I (81) boot: End of partition table<br \/> I (85) esp_image: segment 0: paddr=00010020 vaddr=3f400020 size=21f1ch (139036) map<br \/> I (140) esp_image: segment 1: paddr=00031f44 vaddr=3ff80000 size=00018h ( 24) load<br \/> I (140) esp_image: segment 2: paddr=00031f64 vaddr=3ffb0000 size=03f38h ( 16184) load<br \/> I (150) esp_image: segment 3: paddr=00035ea4 vaddr=40080000 size=0a174h ( 41332) load<br \/> I (167) esp_image: segment 4: paddr=00040020 vaddr=400d0020 size=8c988h (575880) map<br \/> I (364) esp_image: segment 5: paddr=000cc9b0 vaddr=4008a174 size=0d6bch ( 54972) load<br \/> I (397) boot: Loaded app from partition at offset 0x10000<br \/> I (397) boot: Disabling RNG early entropy source\u2026<br \/> I (408) cpu_start: Multicore app<br \/> I (416) cpu_start: Pro cpu start user code<br \/> I (416) cpu_start: cpu freq: 160000000 Hz<br \/> I (416) app_init: Application information:<br \/> I (416) app_init: Project name: esp32shneck<br \/> I (420) app_init: App version: 1<br \/> I (424) app_init: Compile time: Dec 10 2024 15:54:09<br \/> I (429) app_init: ELF file SHA256: 932c20a3e\u2026<br \/> I (433) app_init: ESP-IDF: v5.4-dev-3602-ga97a7b0962-dirty<br \/> I (439) efuse_init: Min chip rev: v0.0<br \/> I (443) efuse_init: Max chip rev: v3.99 <br \/> I (447) efuse_init: Chip rev: v3.1<br \/> I (451) heap_init: Initializing. RAM available for dynamic allocation:<br \/> I (457) heap_init: At 3FFAE6E0 len 00001920 (6 KiB): DRAM<br \/> I (462) heap_init: At 3FFB81B0 len 00027E50 (159 KiB): DRAM<br \/> I (467) heap_init: At 3FFE0440 len 00003AE0 (14 KiB): D\/IRAM<br \/> I (473) heap_init: At 3FFE4350 len 0001BCB0 (111 KiB): D\/IRAM<br \/> I (478) heap_init: At 40097830 len 000087D0 (33 KiB): IRAM<br \/> I (485) spi_flash: detected chip: generic<br \/> I (487) spi_flash: flash io: dio<br \/> I (491) main_task: Started on CPU0<br \/> I (501) main_task: Calling app_main()<br \/> I (521) gpio: GPIO[14]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 <br \/> I (521) gpio: GPIO[25]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 <br \/> I (521) gpio: GPIO[26]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 <br \/> I (531) gpio: GPIO[27]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 <br \/> I (541) FEEDER: GPIO is initialised<br \/> I (541) FEEDER: Init Wi-Fi\u2026<br \/> I (551) main_task: Returned from app_main()<br \/> I (561) wifi:wifi driver task: 3ffc2e48, prio:23, stack:6656, core=0<br \/> I (571) wifi:wifi firmware version: 0a80d45<br \/> I (571) wifi:wifi certification version: v7.0<br \/> I (571) wifi:config NVS flash: enabled<br \/> I (571) wifi:config nano formatting: disabled<br \/> I (571) wifi:Init data frame dynamic rx buffer num: 32<br \/> I (581) wifi:Init static rx mgmt buffer num: 5<br \/> I (581) wifi:Init management short buffer num: 32<br \/> I (591) wifi:Init dynamic tx buffer num: 32<br \/> I (591) wifi:Init static rx buffer size: 1600<br \/> I (601) wifi:Init static rx buffer num: 10<br \/> I (601) wifi:Init dynamic rx buffer num: 32<br \/> I (601) wifi_init: rx ba win: 6<br \/> I (611) wifi_init: accept mbox: 6<br \/> I (611) wifi_init: tcpip mbox: 32<br \/> I (611) wifi_init: udp mbox: 6<br \/> I (621) wifi_init: tcp mbox: 6<br \/> I (621) wifi_init: tcp tx win: 5760<br \/> I (621) wifi_init: tcp rx win: 5760<br \/> I (621) wifi_init: tcp mss: 1440<br \/> I (631) wifi_init: WiFi IRAM OP enabled<br \/> I (631) wifi_init: WiFi RX IRAM OP enabled<br \/> W (641) wifi:Password length matches WPA2 standards, authmode threshold changes from OPEN to WPA2<br \/> I (641) phy_init: phy_version 4840,02e0d70,Sep 2 2024,19:39:07<br \/> I (721) wifi:mode: sta (a0:a3:b3:fe:eb:e5)<br \/> I (721) wifi:enable tsf<br \/> I (721) FEEDER: Wi-Fi is started<br \/> I (741) wifi:new:&lt;1,0&gt;, old:&lt;1,0&gt;, ap:&lt;255,255&gt;, sta:&lt;1,0&gt;, prof:1, snd_ch_cfg:0x0<br \/> I (741) wifi:state: init -&gt; auth (0xb0)<br \/> I (751) wifi:state: auth -&gt; assoc (0x0)<br \/> I (761) wifi:state: assoc -&gt; run (0x10)<br \/> I (781) wifi:connected with WIFIAP, aid = 3, channel 1, BW20, bssid = a0:f3:c1:6c:e6:93<br \/> I (781) wifi:security: WPA2-PSK, phy: bgn, rssi: -76<br \/> I (781) wifi:pm start, type: 1<\/p>\n<p> I (781) wifi:dp: 1, bi: 102400, li: 3, scale listen interval from 307200 us to 307200 us<br \/> I (801) wifi:&lt;ba-add&gt;idx:0 (ifx:0, a0:f3:c1:6c:e6:92), tid:0, ssn:1, winSize:64<br \/> I (881) wifi:dp: 2, bi: 102400, li: 4, scale listen interval from 307200 us to 409600 us<br \/> I (881) wifi:AP&#8217;s beacon interval = 102400 us, DTIM period = 2<br \/> I (1821) esp_netif_handlers: sta ip: 192.168.1.171, mask: 255.255.255.0, gw: 192.168.1.1<br \/> I (1821) FEEDER: Got IP address: 192.168.1.171 <\/div>\n<\/p><\/div>\n<p> <\/p>\n<h2><font color=\"#3AC1EF\">\u041a\u0440\u0443\u0442\u0438\u043c \u0448\u0430\u0433\u043e\u0432\u0438\u043a \u043f\u043e HTTP \u043d\u0430 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0448\u0430\u0433\u043e\u0432 \u0432 ESP32<\/font><\/h2>\n<p> \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0443\u0436\u0435 \u043f\u043e\u0432\u043e\u0437\u0438\u0442\u044c\u0441\u044f \u043f\u043e\u0434\u043e\u043b\u044c\u0448\u0435.<\/p>\n<p> \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043a \u043f\u0440\u0438\u0431\u043e\u0440\u0430\u043c \u0438 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430\u043c:<\/p>\n<ol>\n<li>\u041c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0430 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044f L293D \u0438\u043b\u0438 \u043f\u043e\u0445\u043e\u0436\u0430\u044f L298.<\/li>\n<li>\u041c\u0430\u043a\u0435\u0442\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0430 \u0441 \u043f\u0440\u043e\u0432\u043e\u0434\u0430\u043c\u0438 dupont \u0438\u043b\u0438 \u0437\u0430\u043f\u0430\u044f\u0442\u044c \u0432\u0441\u0451 \u043d\u0430 \u00ab\u0441\u043e\u043f\u043b\u044f\u0445\u00bb.<\/li>\n<li>\u0428\u0430\u0433\u043e\u0432\u044b\u0439 \u043c\u043e\u0442\u043e\u0440, \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 5\u0412 (\u044f \u0432\u044b\u043a\u043e\u0440\u0447\u0435\u0432\u0430\u043b \u0438\u0437 CD-\u043f\u0440\u0438\u0432\u043e\u0434\u0430 \u043e\u0442 \u0434\u0440\u0435\u0432\u043d\u0435\u0433\u043e \u043d\u043e\u0443\u0442\u0431\u0443\u043a\u0430).<\/li>\n<li>\u0416\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043d\u0434\u0435\u043d\u0441\u0430\u0442\u043e\u0440 \u0432 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c \u0441 \u043f\u0438\u0442\u0430\u043d\u0438\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 100mF \u0438 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435\u043c \u0432\u044b\u0448\u0435 10V.<\/li>\n<\/ol>\n<p> \u0428\u0430\u0433\u043e\u0432\u044b\u0439 \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044c \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0434\u0440\u0443\u0433\u0438\u0445 \u0442\u0438\u043f\u043e\u0432 \u0442\u0435\u043c, \u0447\u0442\u043e \u043f\u043e\u0434\u0430\u0432\u0430\u044f \u043f\u043e\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043e\u0431\u043c\u043e\u0442\u043a\u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0442\u043e\u0447\u043d\u043e \u043f\u043e\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0439 \u0443\u0433\u043e\u043b, \u043e\u0442\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043d\u044b\u0445 \u0448\u0430\u0433\u043e\u0432. \u0412\u044b\u0431\u0440\u0430\u043b \u044f \u044d\u0442\u043e\u0442 \u0442\u0438\u043f \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044f \u043b\u0438\u0448\u044c \u0434\u043b\u044f \u0443\u0441\u043b\u043e\u0436\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u043c\u044b\u0441\u043b \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0443 \u043e\u0442\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0448\u0430\u0433\u043e\u0432 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0442\u0430\u0441\u043a (\u0433\u0440\u0443\u0431\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u043f\u043e\u0442\u043e\u043a \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u043e\u043b\u043e\u0433\u0438\u0438 FreeRTOS). \u041d\u0443 \u0435\u0449\u0451 \u0438 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0443 \u043c\u0435\u043d\u044f \u0432 \u0433\u0440\u0443\u0434\u0435 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043d\u043e\u0433\u043e \u0445\u043b\u0430\u043c\u0430 \u0448\u0430\u0433\u043e\u0432\u0438\u043a\u0438 \u0432\u0430\u043b\u044f\u044e\u0442\u0441\u044f \u0432 \u0430\u0441\u0441\u043e\u0440\u0442\u0438\u043c\u0435\u043d\u0442\u0435.<\/p>\n<p> \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043a\u0430\u043a \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u043e \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u043c, \u0441\u0445\u0430\u043b\u0442\u0443\u0440\u0438\u0442\u044c \u0438 \u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0442\u043e\u043a \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0441 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043d\u0430 \u043c\u043e\u0442\u043e\u0440 \u0442\u0443\u0442 \u043d\u0435 \u0443\u0434\u0430\u0441\u0442\u0441\u044f. \u0421\u043b\u0438\u0448\u043a\u043e\u043c \u0443\u0436 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0442\u043e\u043a \u043f\u043e\u0442\u044f\u043d\u0435\u0442 \u0434\u0430\u0436\u0435 \u0441\u0430\u043c\u044b\u0439 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 \u0448\u0430\u0433\u043e\u0432\u0438\u0447\u0451\u043a, \u043d\u043e \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0442\u043e\u043a\u0430 \u043e\u0442 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u043f\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u044c. \u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u043c\u0430\u043b\u043e\u043c\u043e\u0449\u043d\u044b\u0439 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u043c\u043e\u0442\u043e\u0440\u043e\u0432 L293D, \u043f\u043e\u0442\u043e\u043c\u0443 \u043a\u0430\u043a \u0434\u043b\u044f \u043c\u043e\u0435\u0433\u043e \u0448\u0430\u0433\u043e\u0432\u0438\u043a\u0430 \u043e\u0442 \u043d\u043e\u0443\u0442\u0431\u0443\u043a\u043e\u0432\u0441\u043a\u043e\u0433\u043e CD-\u043f\u0440\u0438\u0432\u043e\u0434\u0430 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0442\u043e\u043a\u043e\u0432 \u0438 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f \u0432 5\u0412, \u0432\u0437\u044f\u0442\u044b\u0445 \u043f\u0440\u044f\u043c\u043e \u0441 \u043f\u0438\u0442\u0430\u043d\u0438\u044f ESP32-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430. \u0415\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u0448\u0430\u0433\u043e\u0432\u044b\u0435 \u043c\u043e\u0442\u043e\u0440\u044b, \u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0438\u0445 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u043f\u0438\u0442\u0430\u043d\u0438\u044f. \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043a \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0435 \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u043d\u043e\u0435 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435. \u0412\u043c\u0435\u0441\u0442\u043e L293D \u0432\u043f\u043e\u043b\u043d\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441 \u043f\u043e\u0445\u043e\u0436\u0435\u0439 \u0440\u0430\u0441\u043f\u0438\u043d\u043e\u0432\u043a\u043e\u0439 L298, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043a\u0440\u0443\u0442\u0438\u0442\u044c \u043c\u043e\u0442\u043e\u0440 \u0442\u043e\u043a\u0430\u043c\u0438 \u0434\u043e 3 \u0430\u043c\u043f\u0435\u0440 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0432\u044b\u0445\u043e\u0434 \u043f\u0440\u0438 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0438 \u0434\u043e 50 \u0432\u043e\u043b\u044c\u0442. \u041e\u0434\u043d\u0430\u043a\u043e \u0438\u0437-\u0437\u0430 \u0441\u0432\u043e\u0435\u0433\u043e \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u043e\u0433 L298 \u043d\u0435 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043d\u0430 \u043c\u0430\u043a\u0435\u0442\u043d\u0443\u044e \u043f\u043b\u0430\u0442\u0443. \u041d\u0430 Ali \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0442\u0430\u043a\u0438\u0435 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b \u0432 \u0432\u0438\u0434\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u0445 <a href=\"https:\/\/alii.pub\/74daft?erid=2SDnjcWrwh5\">\u043c\u043e\u0434\u0443\u043b\u0435\u0439 L298<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0431\u0435\u0437 \u043f\u0430\u0439\u043a\u0438.<\/p>\n<h3><font color=\"#3AC1EF\">\u258d \u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0436\u0435\u043b\u0435\u0437\u043e<\/font><\/h3>\n<p> <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/io\/jh\/pa\/iojhpayqswugv1h_iaditurgd94.png\" data-src=\"https:\/\/habrastorage.org\/webt\/io\/jh\/pa\/iojhpayqswugv1h_iaditurgd94.png\"\/><\/div>\n<p><i><font color=\"#999999\">\u041e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f<\/font><\/i><\/p>\n<p> \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438, \u0447\u0442\u043e \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u043c\u0435\u044e\u0442 \u0434\u0432\u0430 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f: ~ 5\u0412 \u0434\u043b\u044f \u043f\u0438\u0442\u0430\u043d\u0438\u044f \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u043b\u043e\u0433\u0438\u043a\u0438 (\u043d\u043e\u0436\u043a\u0430 16 \u043d\u0430 L293D) \u0438 \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u043d\u043e\u0435 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043f\u0438\u0442\u0430\u043d\u0438\u044f \u043c\u043e\u0442\u043e\u0440\u043e\u0432 (\u041d\u043e\u0436\u043a\u0430 8 \u043d\u0430 L293D). \u0412 \u0441\u0432\u043e\u0435\u0439 \u0441\u0431\u043e\u0440\u043a\u0435, \u043a\u0430\u043a \u044f \u0441\u043a\u0430\u0437\u0430\u043b, \u0434\u043b\u044f \u043f\u0438\u0442\u0430\u043d\u0438\u044f \u0448\u0430\u0433\u043e\u0432\u0438\u043a\u0430 \u0431\u044b\u043b\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e 5 \u0432\u043e\u043b\u044c\u0442 \u0438 \u044f \u0432\u0437\u044f\u043b \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u043f\u0440\u044f\u043c\u043e \u0441 \u043f\u043b\u0430\u0442\u044b ESP32, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0437\u0430\u043f\u0438\u0442\u0430\u043b \u043e\u0442 USB. \u042d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u043b\u043e \u0441\u0445\u0435\u043c\u0443 \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u043e \u0437\u0430\u043f\u0430\u044f\u0442\u044c \u0432\u0441\u0435 \u043f\u0440\u043e\u0432\u043e\u0434\u0430 \u043f\u043e\u0434\u0432\u0435\u0441\u043d\u044b\u043c \u043c\u043e\u043d\u0442\u0430\u0436\u043e\u043c. \u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u0441\u043e \u0441\u0445\u0435\u043c\u043e\u0439 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432\u043c\u0435\u0441\u0442\u043e \u0434\u0432\u0443\u0445 \u043c\u043e\u0442\u043e\u0440\u043e\u0432 DC \u043c\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0434\u0432\u0435 \u043e\u0431\u043c\u043e\u0442\u043a\u0438 \u0448\u0430\u0433\u043e\u0432\u043e\u0433\u043e \u043c\u043e\u0442\u043e\u0440\u0430. \u041d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0448\u0430\u0433\u043e\u0432\u0438\u043a \u0441 4 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430\u043c\u0438. \u041f\u0440\u043e\u0437\u0432\u043e\u043d\u0438\u0442\u0435 4 \u0432\u044b\u0445\u043e\u0434\u0430 \u0438 \u0432\u044b\u044f\u0441\u043d\u0438\u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u043d\u0438\u0445 \u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442 \u0437\u0430\u043c\u043a\u043d\u0443\u0442\u044b\u0435 \u043f\u0430\u0440\u044b \u043e\u0431\u043c\u043e\u0442\u043e\u043a, \u043a\u0430\u0436\u0434\u0443\u044e \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043a \u0432\u044b\u0445\u043e\u0434\u0430\u043c \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 OUT1-OUT2 \u0438 OUT3-OUT4 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/vk\/hf\/la\/vkhflahjuvfwgrkvn2r1dlsnc2w.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/vk\/hf\/la\/vkhflahjuvfwgrkvn2r1dlsnc2w.jpeg\" data-blurred=\"true\"\/><\/div>\n<p><i><font color=\"#999999\">L293D \u0440\u0430\u0441\u043f\u0438\u043d\u043e\u0432\u043a\u0430<\/font><\/i><\/p>\n<p> \u0418\u0442\u0430\u043a, \u043d\u0430 input 1-4 \u043c\u044b \u043f\u043e\u0434\u0430\u0451\u043c \u043c\u0430\u043b\u043e\u043c\u043e\u0449\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0432 \u043d\u0438\u0436\u0435\u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u043e\u043c \u043a\u043e\u0434\u0435 GPIO \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430, \u0430 \u043a output 1-4 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043e\u0431\u043c\u043e\u0442\u043a\u0438 \u0448\u0430\u0433\u043e\u0432\u043e\u0433\u043e \u043c\u043e\u0442\u043e\u0440\u0430. \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u0438\u0433\u043d\u0430\u043b, \u043e\u0431\u0430 \u043f\u0438\u043d\u0430 enable (Enable1,2, Enable3,4) \u0437\u0430\u043c\u044b\u043a\u0430\u0435\u043c \u043d\u0430 VCC +5v. \u0412 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u043c\u0438 \u0447\u0435\u0440\u0435\u0437 GPIO, \u043a\u0430\u043a \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u043d\u043e \u0432 \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u043e\u0439 \u0441\u0445\u0435\u043c\u0435.<\/p>\n<p> \u041e\u0434\u043d\u0430\u043a\u043e \u0435\u0441\u043b\u0438 \u0432\u044b \u043f\u0438\u0442\u0430\u0435\u0442\u0435 \u0441\u0445\u0435\u043c\u0443 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f \u0432\u044b\u0448\u0435 5 \u0432\u043e\u043b\u044c\u0442, \u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043b\u044e\u0431\u043e\u0439 \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, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430 \u0441\u0445\u0435\u043c\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a LM7805. \u0412\u044b\u0445\u043e\u0434\u043d\u044b\u0435 5 \u0432\u043e\u043b\u044c\u0442 \u0431\u0443\u0434\u0443\u0442 \u043f\u0438\u0442\u0430\u0442\u044c ESP32 \u0438 \u043b\u043e\u0433\u0438\u043a\u0443 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u043c\u043e\u0442\u043e\u0440\u0430, \u0430 \u0432\u044b\u0441\u043e\u043a\u043e\u0435 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u0431\u0435\u0437 \u043f\u043e\u043d\u0438\u0436\u0435\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0437\u0430\u043f\u0438\u0442\u0430\u0435\u0442 \u043c\u043e\u0442\u043e\u0440\u044b.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/-6\/y5\/b7\/-6y5b70hzf0e1dy9vfuy4rsc8ti.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/-6\/y5\/b7\/-6y5b70hzf0e1dy9vfuy4rsc8ti.jpeg\" data-blurred=\"true\"\/><\/div>\n<p><i><font color=\"#999999\">\u0418\u0442\u043e\u0433 \u0441\u0431\u043e\u0440\u043a\u0438 \u0436\u0435\u043b\u0435\u0437\u0430<\/font><\/i><\/p>\n<h3><font color=\"#3AC1EF\">\u258d \u041a\u043e\u0434<\/font><\/h3>\n<p> \u041f\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0438\u0437 \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0441\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 esp32_shneck.<\/p>\n<p> \u041c\u0435\u043d\u044f\u0435\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 .\/esp32_shneck\/main\/CMakeLists.txt \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<pre><code class=\"cpp\">                    PRIV_REQUIRES spi_flash                     INCLUDE_DIRS \"\"                     REQUIRES driver esp_wifi esp_netif nvs_flash esp_http_server ) <\/code><\/pre>\n<p> \u041e\u043f\u0446\u0438\u044f REQUIRES \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 ESP-IDF:<\/p>\n<p>  \u2014 driver \u2014 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a GPIO, SPI, I2C, UART, PWM,<br \/>  \u2014 esp_wifi \u2014 WiFi \u043a\u043b\u0438\u0435\u043d\u0442,<br \/>  \u2014 esp_netif \u2014 WiFi \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441,<br \/>  \u2014 nvs_flash \u2014 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0444\u043b\u044d\u0448 \u043f\u0430\u043c\u044f\u0442\u044c\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0443\u0436\u043d\u0430 \u0434\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 WiFi,<br \/>  \u2014 esp_http_server \u2014 HTTP \u0441\u0435\u0440\u0432\u0435\u0440.<\/p>\n<p> \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0430 \u0421\u0438 .\/esp32_shneck\/main\/esp32shneck.c:<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434 esp32shneck.c<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">#include &lt;stdio.h&gt; #include \"freertos\/FreeRTOS.h\" #include \"freertos\/task.h\" #include \"esp_wifi.h\" #include \"esp_event.h\" #include \"esp_log.h\" #include \"nvs_flash.h\" #include \"esp_http_server.h\" #include \"freertos\/queue.h\" #include \"driver\/ledc.h\"  #define TAG \"FEEDER\" #define WIFI_SSID \"WifiAP\" #define WIFI_PASSWORD \"WifiPassword\"  #define IN1_GPIO GPIO_NUM_25 \/\/ IN1 L293 #define IN2_GPIO GPIO_NUM_26 \/\/ IN2 L293 #define IN3_GPIO GPIO_NUM_27 \/\/ IN3 L293 #define IN4_GPIO GPIO_NUM_14 \/\/ IN4 L293 #define STEP_DELAY_MS 10  const int step_sequence[8][4] = {     {0, 1, 0, 0},     {0, 1, 0, 1},     {0, 0, 0, 1},     {1, 0, 0, 1},     {1, 0, 0, 0},     {1, 0, 1, 0},     {0, 0, 1, 0},     {0, 1, 1, 0} };   QueueHandle_t shneckQueue;  void step_motor_gpio_init() {     gpio_config_t io_conf = {         .pin_bit_mask = (1ULL &lt;&lt; IN1_GPIO) | (1ULL &lt;&lt; IN2_GPIO) |                         (1ULL &lt;&lt; IN3_GPIO) | (1ULL &lt;&lt; IN4_GPIO),         .mode = GPIO_MODE_OUTPUT,         .pull_down_en = GPIO_PULLDOWN_DISABLE,         .pull_up_en = GPIO_PULLUP_DISABLE,         .intr_type = GPIO_INTR_DISABLE     };     gpio_config(&amp;io_conf);      ESP_LOGI(TAG, \"GPIO is initialised\"); }  void step_motor_step(int step) {     gpio_set_level(IN1_GPIO, step_sequence[step][0]);     gpio_set_level(IN2_GPIO, step_sequence[step][1]);     gpio_set_level(IN3_GPIO, step_sequence[step][2]);     gpio_set_level(IN4_GPIO, step_sequence[step][3]); }  void schneck_rotate_task(void *pvParameters) {     int direction = 1;  \/\/ 1 - clockwise, -1 - counterclockwise     int current_step = 0;     int steps_left = 0;     while(1) {             if (steps_left == 0) {                 if (xQueueReceive(shneckQueue, &amp;steps_left, portMAX_DELAY))                     ESP_LOGI(TAG, \"Got %d steps from queue\", steps_left);                 }             else {                 step_motor_step(current_step);                 current_step = (current_step + direction + 8) % 8;                 steps_left--;                 }             vTaskDelay(pdMS_TO_TICKS(STEP_DELAY_MS));     } }  esp_err_t index_handler(httpd_req_t *req) {     char *indexhtml = \"&lt;!DOCTYPE html&gt;&lt;html&gt;&lt;head&gt;&lt;title&gt;GET&lt;\/title&gt;&lt;\/head&gt;&lt;body&gt;&lt;button onclick=\\\"fetch('\/feed?steps=100')\\\"&gt;FEED&lt;\/button&gt;&lt;\/body&gt;&lt;\/html&gt;\";     httpd_resp_send(req, indexhtml, strlen(indexhtml));     return ESP_OK; }  esp_err_t feed_handler(httpd_req_t *req) {     char query[128];     char value[32];     int error = 0;      if (httpd_req_get_url_query_str(req, query, sizeof(query)) == ESP_OK) {         ESP_LOGI(TAG, \"URL Query: %s\", query);          if (httpd_query_key_value(query, \"steps\", value, sizeof(value)) == ESP_OK) {             ESP_LOGI(TAG, \"Steps Parameter Value: %s\", value);             int steps = atoi(value);             ESP_LOGI(TAG, \"Steps as Integer: %d\", steps);             if (steps &gt; 0) {                 ESP_LOGI(TAG, \"Rotating motor ...\");                 if (xQueueSend(shneckQueue, &amp;steps, pdMS_TO_TICKS(100)) != pdPASS) {                     ESP_LOGW(\"ShneckTask\", \"Queue is full...\");                     error = 1;                 }             } else {                 ESP_LOGW(TAG, \"Invalid steps value: %d\", steps);             }         } else {             ESP_LOGW(TAG, \"Parameter 'steps' not found\");         }     } else {         ESP_LOGI(TAG, \"No URL query found\");     }          const char *resp_str = \"Steps parameter processed\";     httpd_resp_send(req, resp_str, strlen(resp_str));      if (error == 1) {         ESP_LOGW(TAG, \"Error during queueing\");         return ESP_ERR_NOT_ALLOWED;     }     return ESP_OK; }   httpd_handle_t start_webserver(void) {     httpd_config_t config = HTTPD_DEFAULT_CONFIG();      httpd_handle_t server = NULL;     if (httpd_start(&amp;server, &amp;config) == ESP_OK) {         httpd_uri_t write_servo_uri = {             .uri = \"\/feed\",             .method = HTTP_GET,             .handler = feed_handler,             .user_ctx = NULL         };         httpd_register_uri_handler(server, &amp;write_servo_uri);          httpd_uri_t index_uri = {             .uri = \"\/\",             .method = HTTP_GET,             .handler = index_handler,             .user_ctx = NULL         };         httpd_register_uri_handler(server, &amp;index_uri);      }     return server; }    void wifi_event_handler(void* arg, esp_event_base_t event_base, int32_t event_id, void* event_data) {     if (event_base == WIFI_EVENT &amp;&amp; event_id == WIFI_EVENT_STA_START) {         esp_wifi_connect();     } else if (event_base == WIFI_EVENT &amp;&amp; event_id == WIFI_EVENT_STA_DISCONNECTED) {         ESP_LOGI(TAG, \"Wi-Fi disconnected, reconnecting...\");         esp_wifi_connect();     } else if (event_base == IP_EVENT &amp;&amp; event_id == IP_EVENT_STA_GOT_IP) {         ip_event_got_ip_t* event = (ip_event_got_ip_t*) event_data;         ESP_LOGI(TAG, \"Got IP address: \" IPSTR, IP2STR(&amp;event-&gt;ip_info.ip));         start_webserver();     } }  void http_server_task(void *pvParameters) {     ESP_LOGI(TAG, \"Init Wi-Fi...\");     esp_netif_init();     esp_event_loop_create_default();     esp_netif_create_default_wifi_sta();      wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();     esp_wifi_init(&amp;cfg);      esp_event_handler_instance_t instance_any_id;     esp_event_handler_instance_t instance_got_ip;     esp_event_handler_instance_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &amp;wifi_event_handler, NULL, &amp;instance_any_id);     esp_event_handler_instance_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &amp;wifi_event_handler, NULL, &amp;instance_got_ip);      wifi_config_t wifi_config = {         .sta = {             .ssid = WIFI_SSID,             .password = WIFI_PASSWORD,         },     };     esp_wifi_set_mode(WIFI_MODE_STA);     esp_wifi_set_config(WIFI_IF_STA, &amp;wifi_config);     ESP_ERROR_CHECK(esp_wifi_start());     ESP_LOGI(TAG, \"Wi-Fi is started\");     vTaskDelete(NULL); }  void app_main(void) {     esp_err_t ret = nvs_flash_init();     if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {         ESP_ERROR_CHECK(nvs_flash_erase());         ret = nvs_flash_init();     }     ESP_ERROR_CHECK(ret);      shneckQueue = xQueueCreate(10, sizeof(int));     step_motor_gpio_init();      xTaskCreate(schneck_rotate_task, \"schneck_rotate_task\", 2048, NULL, 5, NULL);     xTaskCreate(http_server_task, \"http_server_task\", 8192, NULL, 5, NULL); } <\/code><\/pre>\n<p> <\/div>\n<\/p><\/div>\n<p> <\/p>\n<h3><font color=\"#3AC1EF\">\u258d \u041e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u044f \u043f\u043e \u043a\u043e\u0434\u0443<\/font><\/h3>\n<p> \u0414\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430\u043c\u0438 include \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u043d\u0430\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432. <\/p>\n<p> WIFI_SSID \u0438 WIFI_PASSWORD \u0437\u0430\u0434\u0430\u044e\u0442 \u0440\u0435\u043a\u0432\u0438\u0437\u0438\u0442\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0441\u0435\u0442\u0438 WiFi \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0430\u0448\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0430.<\/p>\n<p> IN1_GPIO, IN2_GPIO, IN3_GPIO, IN4_GPIO \u0437\u0430\u0434\u0430\u044e\u0442, \u043d\u0430 \u043a\u0430\u043a\u0438\u0445 GPIO \u0431\u0443\u0434\u0435\u043c \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u0448\u0430\u0433\u043e\u0432\u043e\u0433\u043e \u043c\u043e\u0442\u043e\u0440\u0430.<\/p>\n<p> STEP_DELAY_MS \u2014 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u043c\u0435\u0436\u0434\u0443 \u0448\u0430\u0433\u0430\u043c\u0438 \u043c\u043e\u0442\u043e\u0440\u0430. \u0427\u0435\u043c \u043c\u0435\u043d\u044c\u0448\u0435 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430, \u0442\u0435\u043c \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u0435.<\/p>\n<p> step_sequence \u2014 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0438\u0441\u0442\u0438\u043d\u043d\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u0434\u0430\u0451\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u0432\u044b\u0445\u043e\u0434\u043e\u0432 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u043d\u0430 \u0432\u0445\u043e\u0434\u044b \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u043c\u043e\u0442\u043e\u0440\u0430 IN1, IN2, IN3, IN4. \u0412\u0441\u0435\u0433\u043e 8 \u0441\u0442\u0440\u043e\u043a, \u043a\u0430\u0436\u0434\u0430\u044f \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043e\u0431\u043c\u043e\u0442\u043e\u043a \u0448\u0430\u0433\u043e\u0432\u0438\u043a\u0430 \u0434\u043b\u044f \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0445 8 \u0448\u0430\u0433\u043e\u0432. \u041c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u0447\u0435\u0442\u044b\u0440\u044c\u043c\u044f \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0448\u0430\u0433\u0430\u043c\u0438, \u043d\u043e \u0442\u043e\u0433\u0434\u0430 \u043c\u043e\u0442\u043e\u0440 \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0435 \u0442\u0430\u043a \u043f\u043b\u0430\u0432\u043d\u043e \u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u0448\u0443\u043c\u0435\u0442\u044c. \u0415\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044f \u043d\u043e\u043c\u0435\u0440\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439, \u0442\u043e \u043c\u043e\u0442\u043e\u0440 \u0431\u0443\u0434\u0435\u0442 \u0432\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u0432 \u043e\u0434\u043d\u0443 \u0441\u0442\u043e\u0440\u043e\u043d\u0443. \u0415\u0441\u043b\u0438 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0442\u044c \u043d\u043e\u043c\u0435\u0440 \u0441\u0442\u0440\u043e\u043a\u0438, \u0442\u043e \u043c\u043e\u0442\u043e\u0440 \u0431\u0443\u0434\u0435\u0442 \u0432\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u0443\u044e. \u0415\u0441\u043b\u0438 \u043c\u043e\u0442\u043e\u0440 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f, \u0430 \u043d\u0430\u0447\u043d\u0451\u0442 \u0432\u0438\u0431\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043c\u0435\u0441\u0442\u0435, \u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0434\u043d\u043e\u0439 \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u043e\u0439 \u043e\u0431\u043c\u043e\u0442\u043a\u0438 (\u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u043c\u0435\u0441\u0442\u0430\u043c\u0438 OUT1 \u0438 OUT2 \u0438\u043b\u0438 OUT 3 \u0438 OUT4).<\/p>\n<p> \u0414\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f FreeRTOS \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e <a href=\"https:\/\/www.youtube.com\/playlist?list=PLiu4O2eIDAdUz50gTS33a2qozzDSFMouI\">\u0431\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043a\u0443\u0440\u0441 \u0412\u043b\u0430\u0434\u0438\u043c\u0438\u0440\u0430 \u041c\u0435\u0434\u0438\u043d\u0446\u0435\u0432\u0430<\/a>.<\/p>\n<p> \u041d\u043e \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043b\u0438\u0448\u044c \u0432\u0441\u043a\u043e\u043b\u044c\u0437\u044c \u0433\u0430\u043b\u043e\u043f\u043e\u043c \u043f\u043e \u0415\u0432\u0440\u043e\u043f\u0430\u043c. \u041d\u0430\u0445\u043e\u0434\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0432\u0445\u043e\u0434\u0430 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 app_main() \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043a\u043e\u0434:<\/p>\n<ul>\n<li>\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u044e\u044e \u0444\u043b\u044d\u0448 \u043f\u0430\u043c\u044f\u0442\u044c \u0434\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b WiFi \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u0447\u0435\u0440\u0435\u0437 nvs_flash_init(),<\/li>\n<li>\u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043e\u0447\u0435\u0440\u0435\u0434\u044c shneckQueue \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0437\u0430\u043a\u0430\u0437\u044b \u043d\u0430 \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u0448\u0430\u0433\u043e\u0432\u0438\u043a\u0430 \u043e\u0442 \u0437\u0430\u0434\u0430\u0447\u0438 (\u043f\u043e\u0442\u043e\u043a\u0430) HTTP \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043a \u0437\u0430\u0434\u0430\u0447\u0435, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0439 \u0441 \u0436\u0435\u043b\u0435\u0437\u043e\u043c<\/li>\n<li>\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c GPIO step_motor_gpio_init()<\/li>\n<li>\u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0434\u0432\u0435 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0445 \u0437\u0430\u0434\u0430\u0447\u0438 FreeRTOS, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u0434\u0430\u043d\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 schneck_rotate_task() \u0438 http_server_task(). \u041d\u0438 \u043e\u0434\u043d\u0430 \u0438\u0437 \u044d\u0442\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0442\u044c\u0441\u044f, \u0438\u043d\u0430\u0447\u0435 \u044d\u0442\u043e \u0437\u0430\u043a\u0440\u0430\u0448\u0438\u0442 \u0432\u0441\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443. \u041a\u0430\u0436\u0434\u0430\u044f \u0438\u0437 \u044d\u0442\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0447\u0442\u043e\u0431\u044b \u0441\u0442\u0430\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0435\u0439, \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 pvParameters.<\/li>\n<\/ul>\n<p> <\/p>\n<h3><font color=\"#3AC1EF\">\u258d schneck_rotate_task()<\/font><\/h3>\n<p> \u0412 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f current_step \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432\u044b\u0445\u043e\u0434\u043e\u0432 \u0434\u043b\u044f \u043f\u043e\u0434\u0430\u0447\u0438 \u043d\u0430 \u043c\u043e\u0442\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 step_sequence \u043f\u043e\u0434 \u043d\u043e\u043c\u0435\u0440\u043e\u043c \u043e\u0442 0 \u0434\u043e 7. \u0415\u0441\u043b\u0438 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0448\u0430\u0433\u0435 current_step \u043f\u0440\u0435\u0432\u044b\u0441\u0438\u0442 7, \u0442\u043e \u0434\u043b\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043d\u0443\u043b\u0435\u0432\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430. \u041c\u0435\u0436\u0434\u0443 \u0448\u0430\u0433\u0430\u043c\u0438 \u0432\u044b\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0430\u0443\u0437\u0430, \u0437\u0430\u0434\u0430\u043d\u043d\u0430\u044f \u0432 STEP_DELAY_MS.<\/p>\n<p> steps_left \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0441\u0435\u0433\u043e \u0448\u0430\u0433\u043e\u0432 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0432\u043d\u043e \u043d\u0443\u043b\u044e \u0438 \u043c\u043e\u0442\u043e\u0440 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u043f\u043e\u043a\u043e\u044f. \u041d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u0447\u0435\u0440\u0435\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u044e xQueueReceive() \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u043d\u043e\u0432\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0431\u044a\u0435\u043a\u0442 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u044d\u0442\u043e \u0446\u0435\u043b\u043e\u0435 \u0447\u0438\u0441\u043b\u043e, \u043f\u0440\u0435\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0435\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0448\u0430\u0433\u043e\u0432. \u041d\u043e \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430, \u0438\u043c\u0435\u044e\u0449\u0430\u044f \u0431\u043e\u043b\u044c\u0448\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u0430\u043d\u043d\u044b\u0445, \u0438 \u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u043b \u044d\u0442\u043e \u0447\u0435\u0440\u0435\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0447\u0442\u043e\u0431\u044b \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u043f\u043e\u043d\u044f\u043b \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u043e \u043c\u0435\u0436\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043d\u043e\u0433\u043e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0432 \u041e\u0421 FreeRTOS.<\/p>\n<h3><font color=\"#3AC1EF\">\u258d http_server_task()<\/font><\/h3>\n<p> \u0412 \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0430 WiFi \u0438 \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0441\u043e\u0431\u044b\u0442\u0438\u0439 WiFi wifi_event_handler(), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043a \u0441\u0435\u0442\u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442 start_webserver().<\/p>\n<p> \u0410 \u0432\u043e\u0442 \u0432 \u043a\u043e\u0434\u0435 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u0430\u043c\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u043a\u0443\u0441\u0438\u0442\u044c \u043f\u0440\u0435\u043b\u0435\u0441\u0442\u044c \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0443 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e \u0432 FreeRTOS \u0432\u0435\u0431-\u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u041c\u044b \u0437\u0430\u0434\u0430\u0451\u043c \u0434\u0432\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 HTTP-\u043f\u0443\u0442\u0435\u0439:<\/p>\n<p> &#171;\/&#187; \u2014 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442 index_handler(),<br \/> &#171;\/feed&#187; \u2014 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442 feed_handler().<\/p>\n<p> \u042d\u0442\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u0435 Django \u0438 \u043d\u0435 Laravel, \u043d\u043e \u0434\u043b\u044f \u0441\u0435\u0440\u0432\u0430\u043a\u0430 \u0437\u0430 $3 \u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a!<\/p>\n<p> index_handler() \u0432\u044b\u0432\u0430\u043b\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e HTML \u0441 \u043a\u043d\u043e\u043f\u043a\u043e\u0439, \u0430 \u043f\u043e \u043d\u0430\u0436\u0430\u0442\u0438\u044e \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u00ab\u0437\u0430\u043a\u0430\u0437\u00bb \u043d\u0430 \u043f\u043e\u0432\u043e\u0440\u043e\u0442 \u043d\u0430 100 \u0448\u0430\u0433\u043e\u0432 \u043f\u043e IP \u0430\u0434\u0440\u0435\u0441\u0443 \u043d\u0430\u0448\u0435\u0433\u043e ESP32 \u0432 \u0441\u0435\u0442\u0438 <a href=\"http:\/\/192.168.1.10\/feed?steps=100\">192.168.1.10\/feed?steps=100<\/a>.<\/p>\n<p> \u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442 steps \u043c\u044b \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0438\u0437 GET-\u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 httpd_req_get_url_query_str(), \u0430 \u043f\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0430\u0436\u0435 \u0432\u044b\u0441\u044b\u043b\u0430\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e HTTP-\u043e\u0442\u0432\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 httpd_resp_send().<\/p>\n<h3><font color=\"#3AC1EF\">\u258d \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<\/font><\/h3>\n<p> <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/lv\/vj\/cl\/lvvjcle7pmr-x-kumgibqhznhf4.gif\" data-src=\"https:\/\/habrastorage.org\/webt\/lv\/vj\/cl\/lvvjcle7pmr-x-kumgibqhznhf4.gif\"\/><\/div>\n<p><i><font color=\"#999999\">\u0412\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u0448\u0430\u0433\u043e\u0432\u043e\u0433\u043e \u043c\u043e\u0442\u043e\u0440\u0430 \u043e\u0442 CD-\u043f\u0440\u0438\u0432\u043e\u0434\u0430 \u043d\u043e\u0443\u0442\u0431\u0443\u043a\u0430<\/font><\/i><\/p>\n<p> \u0420\u0430\u0437\u0432\u0438\u0432\u0430\u044f \u043f\u0440\u043e\u0435\u043a\u0442 \u0437\u0430 \u0441\u043c\u0435\u0448\u043d\u044b\u0435 \u0434\u0435\u043d\u044c\u0433\u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 ESP32, FreeRTOS \u0438 \u0448\u0430\u0433\u043e\u0432\u044b\u0445 \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u0435\u0439, \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e-\u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441 \u0434\u043b\u044f \u0441\u0430\u043c\u044b\u0445 \u0440\u0430\u0437\u043d\u044b\u0445 \u0446\u0435\u043b\u0435\u0439: \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u043e\u0440\u043c\u0443\u0448\u043a\u0438 \u0434\u043b\u044f \u043a\u043e\u0442\u0430 \u0438\u043b\u0438 \u0441\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u0436\u0438\u0432\u043d\u043e\u0441\u0442\u0438, \u0442\u0440\u0435\u043a\u0438\u043d\u0433\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0434\u043b\u044f \u0442\u0435\u043b\u0435\u0441\u043a\u043e\u043f\u0430, \u0444\u043e\u0442\u043e\u0430\u043f\u043f\u0430\u0440\u0430\u0442\u0430 \u0438\u043b\u0438 \u0441\u043e\u043b\u043d\u0435\u0447\u043d\u044b\u0445 \u043f\u0430\u043d\u0435\u043b\u0435\u0439, \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0435\u043f\u043b\u0438\u0446 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f \u0442\u043e\u0447\u043d\u043e\u0433\u043e \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0444\u043e\u0440\u0442\u043e\u0447\u0435\u043a), \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0448\u0442\u043e\u0440\u0430\u043c\u0438 \u0438\u043b\u0438 \u0436\u0430\u043b\u044e\u0437\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043c\u0430\u0448\u0438\u043d\u043a\u0430\u043c\u0438 \u0447\u0435\u0440\u0435\u0437 TCP\/IP.<\/p>\n<p> \u00a9 2025 \u041e\u041e\u041e \u00ab\u041c\u0422 \u0424\u0418\u041d\u0410\u041d\u0421\u00bb<\/p>\n<blockquote><p><b><font color=\"#3AC1EF\"><a href=\"https:\/\/t.me\/ruvds_community\">Telegram-\u043a\u0430\u043d\u0430\u043b \u0441\u043e \u0441\u043a\u0438\u0434\u043a\u0430\u043c\u0438, \u0440\u043e\u0437\u044b\u0433\u0440\u044b\u0448\u0430\u043c\u0438 \u043f\u0440\u0438\u0437\u043e\u0432 \u0438 \u043d\u043e\u0432\u043e\u0441\u0442\u044f\u043c\u0438 IT \ud83d\udcbb<\/a><\/font><\/b><\/p><\/blockquote>\n<p><a href=\"https:\/\/ruvds.com\/drive?utm_source=habr&amp;utm_medium=article&amp;utm_campaign=SergeyNovak&amp;utm_content=freertos_dlya_samyx_malenkix_na_primere_espidf\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/tp\/sk\/z-\/tpskz-7w7a8e74isoowuep40xeg.png\" data-src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/tp\/sk\/z-\/tpskz-7w7a8e74isoowuep40xeg.png\"\/><\/a><\/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\/868760\/\"> https:\/\/habr.com\/ru\/articles\/868760\/<\/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\"><a href=\"https:\/\/habr.com\/ru\/companies\/ruvds\/articles\/868760\/\"><\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/jd\/ho\/3m\/jdho3muwcphe_qts7r7jppftnga.png\" data-src=\"https:\/\/habrastorage.org\/webt\/jd\/ho\/3m\/jdho3muwcphe_qts7r7jppftnga.png\"\/><\/div>\n<p><\/a><br \/> \u0412\u0441\u0435 \u043c\u044b \u0437\u043d\u0430\u0435\u043c, \u0447\u0442\u043e FreeRTOS \u2014 \u044d\u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u0433\u0434\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u0441\u0442\u0440\u043e\u0433\u0438\u0435 \u0440\u0430\u043c\u043a\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0447\u0442\u043e\u0431\u044b \u043b\u044e\u0431\u043e\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0431\u044b\u043b\u043e \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043e. \u041d\u0430 \u044d\u0442\u043e\u043c \u043f\u043e\u0437\u043d\u0430\u043d\u0438\u044f \u043e\u0431 \u044d\u0442\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0443 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u0430\u0439\u0442\u0438\u0448\u043d\u0438\u043a\u043e\u0432 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u044e\u0442\u0441\u044f, \u043f\u043e \u0442\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435, \u0447\u0442\u043e 99% \u0438\u0437 \u043d\u0430\u0441 \u043d\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u0432 \u0436\u0438\u0437\u043d\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0430\u043f\u043e\u0434\u043e\u0431\u0438\u0435 \u0441\u043e\u0444\u0442\u0430 \u0442\u043e\u0440\u043c\u043e\u0437\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f \u0438\u043b\u0438 \u043c\u0435\u0434\u0438\u0446\u0438\u043d\u0441\u043a\u043e\u0433\u043e \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f. \u041d\u043e \u044f \u0431\u044b \u0445\u043e\u0442\u0435\u043b \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0431 \u044d\u0442\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u043f\u043e\u0442\u043e\u043c\u0443 \u043a\u0430\u043a \u043e\u043d\u0430 \u0432\u043f\u043e\u043b\u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u043c\u043d\u043e\u0433\u0438\u043c \u0438\u0437 \u043d\u0430\u0441 \u043f\u043e \u0434\u0440\u0443\u0433\u0438\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c. \u0412\u0435\u0434\u044c FreeRTOS \u0432\u043f\u043e\u043b\u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0448\u0430\u0433\u043e\u043c \u0434\u043b\u044f \u0441\u0430\u043c\u043e\u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f \u043f\u043e\u0441\u043b\u0435 Arduino, \u043f\u043e\u0442\u043e\u043c\u0443 \u043a\u0430\u043a \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043d\u0435\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432 \u0438 \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0441\u0442\u0430\u043d\u0438\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0435\u043c\u043d\u043e\u0433\u0438\u043c \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u00abHello World\u00bb \u0435\u0451 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0449\u0435 \u0434\u043b\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u0437\u0430 \u0441\u0447\u0451\u0442 \u0441\u0432\u043e\u0435\u0439 \u043f\u0440\u043e\u0434\u0443\u043c\u0430\u043d\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b. \u0415\u0451 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u0445, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u043d\u043e\u0433\u0438\u0435 \u0443\u0436\u0435 \u043f\u0440\u0438\u0432\u044b\u043a\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 \u0441\u0432\u043e\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0434\u043d\u044f \u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u0441\u043c\u0435\u0448\u043d\u044b\u0435 \u0434\u0435\u043d\u044c\u0433\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 AVR, ESP32 \u0438 STM32. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u043f\u043e\u043a\u0430\u0436\u0443, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 FreeRTOS \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 ESP32 \u0438 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430 \u043e\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f Espressif \u2014 ESP-IDF, \u0434\u043b\u044f \u0441\u0432\u043e\u0435\u0439 \u043b\u0438\u043d\u0435\u0439\u043a\u0438 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432.<\/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-444494","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/444494","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=444494"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/444494\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=444494"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=444494"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=444494"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}