{"id":303975,"date":"2020-05-21T09:00:20","date_gmt":"2020-05-21T09:00:20","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=303975"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=303975","title":{"rendered":"\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0433\u0440\u044b \u0434\u043b\u044f embedded-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0430 ESP32"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/502528\/\">\n<h2>\u0427\u0430\u0441\u0442\u044c 0: \u043c\u043e\u0442\u0438\u0432\u0430\u0446\u0438\u044f<\/h2>\n<p>  <\/p>\n<h3>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h3>\n<p>  \u042f \u0438\u0441\u043a\u0430\u043b \u0434\u043b\u044f \u0441\u0435\u0431\u044f \u0445\u043e\u0431\u0431\u0438-\u043f\u0440\u043e\u0435\u043a\u0442, \u043d\u0430\u0434 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432\u043d\u0435 \u043c\u043e\u0438\u0445 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u0432\u043b\u0435\u0447\u044c\u0441\u044f \u043e\u0442 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u0432 \u043c\u0438\u0440\u0435. \u041f\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u043c\u0435\u0440\u0435 \u043c\u0435\u043d\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0433\u0440, \u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u043c\u043d\u0435 \u043d\u0440\u0430\u0432\u044f\u0442\u0441\u044f embedded-\u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u0421\u0435\u0439\u0447\u0430\u0441 \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0432 \u0438\u0433\u0440\u043e\u0432\u043e\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u043d\u043e \u0440\u0430\u043d\u044c\u0448\u0435 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0437\u0430\u043d\u0438\u043c\u0430\u043b\u0441\u044f \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u043c\u0438. \u0425\u043e\u0442\u044f \u0432 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432 \u044f \u0440\u0435\u0448\u0438\u043b \u0441\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0442\u0435\u0437\u044e \u0438 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u0438\u043d\u0434\u0443\u0441\u0442\u0440\u0438\u044e \u0438\u0433\u0440, \u043c\u043d\u0435 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u0441 \u043d\u0438\u043c\u0438 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u0422\u0430\u043a \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u043d\u0435 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043e\u0431\u0430 \u0443\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f?<\/p>\n<h3>Odroid Go<\/h3>\n<p>  \u0423 \u043c\u0435\u043d\u044f \u0437\u0430\u0432\u0430\u043b\u044f\u043b\u0441\u044f <a href=\"https:\/\/wiki.odroid.com\/odroid_go\/odroid_go\" rel=\"nofollow\">Odroid Go<\/a>, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0431\u044b\u043b\u043e \u0431\u044b \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043f\u043e\u0438\u0433\u0440\u0430\u0442\u044c\u0441\u044f. \u0415\u0433\u043e \u044f\u0434\u0440\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f ESP32 \u2014 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0439 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0441\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u041c\u041a (SPI, I2C, GPIO, \u0442\u0430\u0439\u043c\u0435\u0440\u044b \u0438 \u0442.\u0434.), \u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u0438\u043c\u0435\u044e\u0449\u0438\u0439 WiFi \u0438 Bluetooth, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0435\u0433\u043e \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f IoT-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432.<\/p>\n<p>  Odroid Go \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u0435\u0442 ESP32 \u043a\u0443\u0447\u0435\u0439 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044f \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u0435\u0433\u043e \u0432 \u043f\u043e\u0440\u0442\u0430\u0442\u0438\u0432\u043d\u0443\u044e \u0438\u0433\u0440\u043e\u0432\u0443\u044e \u043c\u0430\u0448\u0438\u043d\u0443, \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044e\u0449\u0443\u044e Gameboy Color: \u0416\u041a-\u0434\u0438\u0441\u043f\u043b\u0435\u0439, \u0434\u0438\u043d\u0430\u043c\u0438\u043a, \u043a\u0440\u0435\u0441\u0442\u043e\u0432\u0438\u043d\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0434\u0432\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0438 \u0447\u0435\u0442\u044b\u0440\u0435 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u043d\u043e\u043f\u043a\u0438, \u0430\u043a\u043a\u0443\u043c\u0443\u043b\u044f\u0442\u043e\u0440 \u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0447\u0442\u0435\u043d\u0438\u044f SD-\u043a\u0430\u0440\u0442.<\/p>\n<p>  \u0412 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u043b\u044e\u0434\u0438 \u043f\u043e\u043a\u0443\u043f\u0430\u044e\u0442 Odroid Go \u0434\u043b\u044f <a href=\"https:\/\/github.com\/OtherCrashOverride\/go-play\" rel=\"nofollow\">\u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u043e\u0432<\/a> \u0441\u0442\u0430\u0440\u044b\u0445 8-\u0431\u0438\u0442\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c. \u0415\u0441\u043b\u0438 \u044d\u0442\u0430 \u0448\u0442\u0443\u043a\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u0430 \u044d\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u0440\u044b\u0435 \u0438\u0433\u0440\u044b, \u0442\u043e \u0441\u043f\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u0438 \u0441 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0438\u0433\u0440\u044b, \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u043e\u0439 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u043d\u0435\u0451.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/44b\/800\/42e\/44b80042e94aa2f2da9da2d2296461ad.jpg\"><\/div>\n<p><a name=\"habracut\"><\/a>  <\/p>\n<h3>\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f<\/h3>\n<p>  <strong>\u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 320&#215;240<\/strong><\/p>\n<p>  \u0414\u0438\u0441\u043f\u043b\u0435\u0439 \u0438\u043c\u0435\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0440 \u0432\u0441\u0435\u0433\u043e 320&#215;240, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043e\u0447\u0435\u043d\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u044b \u0432 \u043e\u0431\u044a\u0451\u043c\u0435 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u043e\u0439 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438. \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0442\u0449\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0434\u0443\u043c\u0430\u0442\u044c, \u043a\u0430\u043a\u0443\u044e \u0438\u0433\u0440\u0443 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u0438 \u043a\u0430\u043a\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c.<\/p>\n<p>  <strong>16-\u0431\u0438\u0442\u043d\u044b\u0439 \u0446\u0432\u0435\u0442<\/strong><\/p>\n<p>  \u0414\u0438\u0441\u043f\u043b\u0435\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 16-\u0431\u0438\u0442\u043d\u044b\u0439 \u0446\u0432\u0435\u0442 \u043d\u0430 \u043f\u0438\u043a\u0441\u0435\u043b\u044c: 5 \u0431\u0438\u0442 \u043d\u0430 \u043a\u0440\u0430\u0441\u043d\u044b\u0439, 6 \u0431\u0438\u0442 \u043d\u0430 \u0437\u0435\u043b\u0451\u043d\u044b\u0439 \u0438 5 \u043d\u0430 \u0441\u0438\u043d\u0438\u0439. \u0422\u0430\u043a\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u043f\u043e \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f RGB565. \u0417\u0435\u043b\u0451\u043d\u044b\u0439 \u0446\u0432\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u043d\u0430 \u043e\u0434\u0438\u043d \u0431\u0438\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u043a\u0440\u0430\u0441\u043d\u043e\u0433\u043e \u0438 \u0441\u0438\u043d\u0435\u0433\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0447\u0435\u043b\u043e\u0432\u0435\u0447\u0435\u0441\u043a\u0438\u0439 \u0433\u043b\u0430\u0437 \u043b\u0443\u0447\u0448\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u0435\u0442 \u0433\u0440\u0430\u0434\u0430\u0446\u0438\u0438 \u0437\u0435\u043b\u0451\u043d\u043e\u0433\u043e, \u0447\u0435\u043c \u0441\u0438\u043d\u0435\u0433\u043e \u0438\u043b\u0438 \u043a\u0440\u0430\u0441\u043d\u043e\u0433\u043e.<\/p>\n<p>  16-\u0431\u0438\u0442\u043d\u044b\u0439 \u0446\u0432\u0435\u0442 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u0434\u043e\u0441\u0442\u0443\u043f \u0432\u0441\u0435\u0433\u043e \u043a 65 \u0442\u044b\u0441\u044f\u0447\u0430\u043c \u0446\u0432\u0435\u0442\u043e\u0432. \u0421\u0440\u0430\u0432\u043d\u0438\u0442\u0435 \u044d\u0442\u043e \u0441\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c 24-\u0431\u0438\u0442\u043d\u044b\u043c \u0446\u0432\u0435\u0442\u043e\u043c (\u043f\u043e 8 \u0431\u0438\u0442 \u043d\u0430 \u0446\u0432\u0435\u0442), \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e\u0449\u0438\u043c 16 <em>\u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432<\/em> \u0446\u0432\u0435\u0442\u043e\u0432.<\/p>\n<p>  <strong>\u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 GPU<\/strong><\/p>\n<p>  \u0411\u0435\u0437 GPU \u043c\u044b \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c API \u043d\u0430\u043f\u043e\u0434\u043e\u0431\u0438\u0435 OpenGL. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0434\u043b\u044f \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 2D-\u0438\u0433\u0440 \u043e\u0431\u044b\u0447\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0442\u0435 \u0436\u0435 GPU, \u0447\u0442\u043e \u0438 \u0434\u043b\u044f 3D-\u0438\u0433\u0440. \u041f\u0440\u043e\u0441\u0442\u043e \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0447\u0435\u0442\u044b\u0440\u0451\u0445\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0438, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0431\u0438\u0442\u043e\u0432\u044b\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b. \u0411\u0435\u0437 GPU \u043d\u0430\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0440\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0438\u043a\u0441\u0435\u043b\u044c \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 CPU, \u0447\u0442\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435, \u043d\u043e \u043f\u0440\u043e\u0449\u0435.<\/p>\n<p>  \u041f\u0440\u0438 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u044d\u043a\u0440\u0430\u043d\u0430 320&#215;240 \u0438 16-\u0431\u0438\u0442\u043d\u043e\u043c \u0446\u0432\u0435\u0442\u0435 \u043e\u0431\u0449\u0438\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u0443\u0444\u0435\u0440\u0430 \u043a\u0430\u0434\u0440\u043e\u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 153 600 \u0431\u0430\u0439\u0442. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0442\u0440\u0438\u0434\u0446\u0430\u0442\u044c \u0440\u0430\u0437 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0430 \u0434\u0438\u0441\u043f\u043b\u0435\u0439 153 600 \u0431\u0430\u0439\u0442. \u0412 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435 \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0435 \u044d\u043a\u0440\u0430\u043d\u0430 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u0443\u043c\u043d\u0435\u0435. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0446\u0432\u0435\u0442 \u0432 \u043f\u0430\u043b\u0438\u0442\u0440\u0443, \u0447\u0442\u043e\u0431\u044b \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u044f \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043e\u0434\u0438\u043d \u0431\u0430\u0439\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0438\u043d\u0434\u0435\u043a\u0441 \u043f\u0430\u043b\u0438\u0442\u0440\u044b \u0438\u0437 256 \u0446\u0432\u0435\u0442\u043e\u0432.<\/p>\n<p>  <strong>\u041f\u0430\u043c\u044f\u0442\u044c 4 \u041c\u0411<\/strong><\/p>\n<p>  ESP32 \u0438\u043c\u0435\u0435\u0442 520 \u041a\u0411 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e \u041e\u0417\u0423, \u0430 Odroid Go \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0435\u0449\u0451 4 \u041c\u0411 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u041e\u0417\u0423. \u041d\u043e \u043d\u0435 \u0432\u0441\u044f \u044d\u0442\u0430 \u043f\u0430\u043c\u044f\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u043d\u0430\u043c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0447\u0430\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f ESP32 SDK (\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e\u0431 \u044d\u0442\u043e\u043c \u043f\u043e\u0437\u0436\u0435). \u041f\u043e\u0441\u043b\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043f\u043e\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438 \u0432\u0432\u043e\u0434\u0430 \u043c\u043e\u0435\u0439 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 ESP32 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442, \u0447\u0442\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c 4 494 848 \u0431\u0430\u0439\u0442. \u0415\u0441\u043b\u0438 \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0430\u043c\u044f\u0442\u0438, \u0442\u043e \u043f\u043e\u0437\u0436\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u043a \u0443\u0440\u0435\u0437\u0430\u043d\u0438\u044e \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439.<\/p>\n<p>  <strong>\u041f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 80-240 \u041c\u0413\u0446<\/strong><\/p>\n<p>  CPU \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u0442\u0440\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438: 80 \u041c\u0413\u0446, 160 \u041c\u0413\u0446 \u0438 240 \u041c\u0413\u0446. \u0414\u0430\u0436\u0435 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u0432 240 \u041c\u0413\u0446 \u0434\u0430\u043b\u0451\u043a \u043e\u0442 \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u0435\u0439 \u0432 \u0442\u0440\u0438 \u0441 \u043b\u0438\u0448\u043d\u0438\u043c \u0433\u0438\u0433\u0430\u0433\u0435\u0440\u0446\u0430 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u0432, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u044b \u043f\u0440\u0438\u0432\u044b\u043a\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u041c\u044b \u043d\u0430\u0447\u043d\u0451\u043c \u0441 80 \u041c\u0413\u0446 \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u0434\u0430\u043b\u0435\u043a\u043e \u0441\u043c\u043e\u0436\u0435\u043c \u0437\u0430\u0439\u0442\u0438. \u0415\u0441\u043b\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u0438\u0433\u0440\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u043e\u0442 \u0430\u043a\u043a\u0443\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0430, \u0442\u043e \u044d\u043d\u0435\u0440\u0433\u043e\u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043d\u0438\u0437\u043a\u0438\u043c. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043f\u043e\u043d\u0438\u0437\u0438\u0442\u044c \u0447\u0430\u0441\u0442\u043e\u0442\u0443.<\/p>\n<p>  <strong>\u041f\u043b\u043e\u0445\u0430\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0430<\/strong><\/p>\n<p>  \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u043e\u0432 \u0441 embedded-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438 (JTAG), \u043d\u043e, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, Odroid Go \u043d\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u044b\u0445 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043a\u043e\u0434 \u0432 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0435, \u043a\u0430\u043a \u044d\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u0431\u044b\u0432\u0430\u0435\u0442. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043e\u0442\u043b\u0430\u0434\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0441\u043b\u043e\u0436\u043d\u044b\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c, \u0438 \u043d\u0430\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u044d\u043a\u0440\u0430\u043d\u043d\u043e\u0439 \u043e\u0442\u043b\u0430\u0434\u043a\u043e\u0439 (\u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0446\u0432\u0435\u0442\u043e\u0432 \u0438 \u0442\u0435\u043a\u0441\u0442\u0430), \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u043e\u0442\u043b\u0430\u0434\u043a\u0438 (\u043a\u043e\u0442\u043e\u0440\u0430\u044f, \u043a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u043b\u0435\u0433\u043a\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0447\u0435\u0440\u0435\u0437 USB UART).<\/p>\n<h3>\u0417\u0430\u0447\u0435\u043c \u0432\u043e\u043e\u0431\u0449\u0435 \u0442\u0430\u043a\u0438\u0435 \u0445\u043b\u043e\u043f\u043e\u0442\u044b?<\/h3>\n<p>  \u0417\u0430\u0447\u0435\u043c \u0432\u043e\u043e\u0431\u0449\u0435 \u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438\u0433\u0440\u0443 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043b\u0430\u0431\u0435\u043d\u044c\u043a\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u043c\u0438, \u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043d\u043e\u0433\u043e PC? \u041d\u0430 \u0442\u043e \u0435\u0441\u0442\u044c \u0434\u0432\u0435 \u043f\u0440\u0438\u0447\u0438\u043d\u044b:<\/p>\n<p>  <strong>\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0441\u0442\u0438\u043c\u0443\u043b\u0438\u0440\u0443\u044e\u0442 \u0442\u0432\u043e\u0440\u0447\u0435\u0441\u0442\u0432\u043e<\/strong><\/p>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0448\u044c \u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439, \u0438\u043c\u0435\u044e\u0449\u0435\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f, \u043a\u0430\u0436\u0434\u043e\u0435 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u043c\u0438, \u044d\u0442\u043e \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u0440\u043e\u0434\u0443\u043c\u044b\u0432\u0430\u0442\u044c, \u043a\u0430\u043a \u043b\u0443\u0447\u0448\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 \u044d\u0442\u0438\u0445 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439. \u0422\u0430\u043a \u043c\u044b \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0430\u0435\u043c\u0441\u044f \u043a \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c \u0438\u0433\u0440 \u0441\u0442\u0430\u0440\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, Super Nintendo (\u043d\u043e \u043d\u0430\u043c \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043f\u0440\u043e\u0449\u0435, \u0447\u0435\u043c \u0438\u043c).<\/p>\n<p>  <strong>\u041d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u0430\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u2014 \u044d\u0442\u043e \u0432\u0435\u0441\u0435\u043b\u043e<\/strong><\/p>\n<p>  \u0414\u043b\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0438\u0433\u0440\u044b \u0441 \u043d\u0443\u043b\u044f \u0434\u043b\u044f \u043e\u0431\u044b\u0447\u043d\u043e\u0439 \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043d\u0430\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c\u0438 \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u043c\u0438 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f\u043c\u0438 \u0434\u0432\u0438\u0436\u043a\u043e\u0432: \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433\u043e\u043c, \u0444\u0438\u0437\u0438\u043a\u043e\u0439, \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435\u043c \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u0439. \u041d\u043e \u043f\u0440\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e\u0433\u043e \u043d\u0430 embedded-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u043d\u0430\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u043c\u0435\u0442\u044c \u0434\u0435\u043b\u043e \u0438 \u0441 \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u043c\u0438 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f\u043c\u0438 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u0432, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u0416\u041a-\u0434\u0438\u0441\u043f\u043b\u0435\u044f.<\/p>\n<h3>\u041d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u0439?<\/h3>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u0434\u0435\u043b\u043e \u0434\u043e\u0445\u043e\u0434\u0438\u0442 \u0434\u043e \u043d\u0438\u0437\u043a\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0433\u0434\u0435-\u0442\u043e \u043f\u0440\u043e\u0447\u0435\u0440\u0442\u0438\u0442\u044c \u0433\u0440\u0430\u043d\u0438\u0446\u0443. \u0415\u0441\u043b\u0438 \u043c\u044b \u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0438\u0433\u0440\u0443 \u0431\u0435\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0434\u043b\u044f \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u0430, \u0442\u043e \u0433\u0440\u0430\u043d\u0438\u0446\u0435\u0439 \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0438\u043b\u0438 \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b\u0439 API \u043d\u0430\u043f\u043e\u0434\u043e\u0431\u0438\u0435 SDL. \u0412 \u0441\u0432\u043e\u0451\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u044f \u043f\u0440\u043e\u0447\u0435\u0440\u0447\u0443 \u0433\u0440\u0430\u043d\u0438\u0446\u0443 \u043d\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0442\u0430\u043a\u0438\u0445 \u0432\u0435\u0449\u0435\u0439, \u043a\u0430\u043a \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u044b SPI \u0438 bootloaders. \u0421 \u043d\u0438\u043c\u0438 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043c\u0443\u043a, \u0447\u0435\u043c \u0432\u0435\u0441\u0435\u043b\u044c\u044f.<\/p>\n<p>  \u0418\u0442\u0430\u043a, \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c ESP-IDF, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e \u0441\u0443\u0442\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f SDK \u0434\u043b\u044f ESP32. \u041c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c, \u0447\u0442\u043e \u043e\u043d \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0442\u0438\u043b\u0438\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u044b\u0447\u043d\u043e \u0434\u0430\u0451\u0442 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430, \u043d\u043e \u0432 ESP32 <strong>\u043d\u0435<\/strong> \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430. \u0421\u0442\u0440\u043e\u0433\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u044d\u0442\u043e\u0442 \u041c\u041a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 FreeRTOS, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <strong>\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438<\/strong>, \u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0430\u044f \u041e\u0421. \u042d\u0442\u043e \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a. \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0441 \u043d\u0438\u043c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c, \u043d\u043e \u0432 \u0441\u0432\u043e\u0451\u043c \u044f\u0434\u0440\u0435 ESP-IDF \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u0435\u0433\u043e.<\/p>\n<p>  ESP-IDF \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430\u043c API \u043a \u0442\u0430\u043a\u043e\u0439 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438 ESP32, \u043a\u0430\u043a SPI, I2C \u0438 UART, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0441\u0440\u0435\u0434\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f C, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0442\u0438\u043f\u0430 printf, \u043e\u043d\u0430 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u0431\u0430\u0439\u0442\u044b \u043f\u043e UART \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430. \u0422\u0430\u043a\u0436\u0435 \u043e\u043d\u0430 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0432\u0435\u0441\u044c \u043a\u043e\u0434 \u0437\u0430\u043f\u0443\u0441\u043a\u0430, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u0434\u043b\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u043c\u0430\u0448\u0438\u043d\u044b, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043e\u043d\u0430 \u0432\u044b\u0437\u043e\u0432\u0435\u0442 \u0442\u043e\u0447\u043a\u0443 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043d\u0430\u0448\u0435\u0439 \u0438\u0433\u0440\u044b.<\/p>\n<p>  \u0412 \u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u044f \u0431\u0443\u0434\u0443 \u0432\u0435\u0441\u0442\u0438 \u0436\u0443\u0440\u043d\u0430\u043b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u043f\u043e\u043a\u0430\u0437\u0430\u0432\u0448\u0438\u0445\u0441\u044f \u043c\u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c\u0438 \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u0445 \u0438 \u043e\u0431\u044a\u044f\u0441\u043d\u044e \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0442\u0440\u0443\u0434\u043d\u044b\u0435 \u0430\u0441\u043f\u0435\u043a\u0442\u044b. \u0423 \u043c\u0435\u043d\u044f \u043d\u0435\u0442 \u043f\u043b\u0430\u043d\u0430 \u0438 \u044f, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0431\u0443\u0434\u0443 \u0434\u0435\u043b\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u043e\u0448\u0438\u0431\u043e\u043a. \u0412\u0441\u0451 \u044d\u0442\u043e \u044f \u0441\u043e\u0437\u0434\u0430\u044e \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0430.<\/p>\n<h2>\u0427\u0430\u0441\u0442\u044c 1: \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u0431\u043e\u0440\u043a\u0438<\/h2>\n<p>  <\/p>\n<h3>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h3>\n<p>  \u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u043d\u0430\u0447\u0430\u0442\u044c \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434 \u0434\u043b\u044f Odroid Go, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c ESP32 SDK. \u041e\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043a\u043e\u0434, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e\u0449\u0438\u0439 ESP32 \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043d\u0430\u0448\u0443 \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043a\u043e\u0434 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, SPI), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0430\u043c, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0438\u0441\u0430\u0442\u044c \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0416\u041a-\u0434\u0438\u0441\u043f\u043b\u0435\u044f.<\/p>\n<p>  Espressif \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u0432\u043e\u0439 SDK <a href=\"https:\/\/github.com\/espressif\/esp-idf\" rel=\"nofollow\">ESP-IDF<\/a>; \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e <strong>v4.0<\/strong>.<\/p>\n<p>  \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u043b\u0438 \u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u043f\u043e \u0438\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c (\u0441 \u0444\u043b\u0430\u0433\u043e\u043c <strong>recursive<\/strong>), \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c zip \u0441\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0440\u0435\u043b\u0438\u0437\u043e\u0432.<\/p>\n<p>  \u041d\u0430\u0448\u0430 \u043f\u0435\u0440\u0432\u0430\u044f \u0446\u0435\u043b\u044c \u2014 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 \u0434\u0443\u0445\u0435 Hello World, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0435 \u043d\u0430 Odroid Go, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0434\u043e\u043a\u0430\u0436\u0435\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u0440\u0435\u0434\u044b \u0441\u0431\u043e\u0440\u043a\u0438.<\/p>\n<h3>C \u0438\u043b\u0438 C++<\/h3>\n<p>  ESP-IDF \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 C99, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0442\u043e\u0436\u0435 \u0432\u044b\u0431\u0435\u0440\u0435\u043c \u0435\u0433\u043e. \u041f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u043c\u044b \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c C++ (\u0432 \u0442\u0443\u043b\u0447\u0435\u0439\u043d\u0435 ESP32 \u0435\u0441\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 C++), \u043d\u043e \u043f\u043e\u043a\u0430 \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u0438\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c\u0441\u044f C.<\/p>\n<p>  \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043c\u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f C \u0438 \u0435\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430. \u0421\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u044b \u044f \u043d\u0438 \u043f\u0438\u0441\u0430\u043b \u043a\u043e\u0434\u0430 \u043d\u0430 C++, \u043c\u043d\u0435 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0443\u0434\u0430\u0432\u0430\u043b\u043e\u0441\u044c \u0434\u043e\u0441\u0442\u0438\u0447\u044c \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u043d\u0430\u0441\u043b\u0430\u0436\u0434\u0435\u043d\u0438\u044f \u0438\u043c.<\/p>\n<p>  <a href=\"https:\/\/jonathanwhiting.com\/writing\/blog\/games_in_c\/\" rel=\"nofollow\">\u042d\u0442\u043e\u0442 \u0447\u0435\u043b\u043e\u0432\u0435\u043a \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0440\u0435\u0437\u044e\u043c\u0438\u0440\u0443\u0435\u0442 \u043c\u043e\u0438 \u0440\u0430\u0437\u043c\u044b\u0448\u043b\u0435\u043d\u0438\u044f.<\/a><\/p>\n<p>  \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u044b \u0432 \u043b\u044e\u0431\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0441\u043c\u043e\u0436\u0435\u043c \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0430 C++.<\/p>\n<h3>\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442<\/h3>\n<p>  \u0414\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0438 IDF \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 CMake. \u0422\u0430\u043a\u0436\u0435 \u043e\u043d \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 Makefile, \u043d\u043e \u0432 \u0432\u0435\u0440\u0441\u0438\u0438 v4.0 \u043e\u043d\u0438 \u0441\u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u043c\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f CMake.<\/p>\n<p>  \u041a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c, \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0444\u0430\u0439\u043b <strong>CMakeLists.txt<\/strong> \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u043f\u0430\u043f\u043a\u0430 <strong>main<\/strong> \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u0444\u0430\u0439\u043b\u043e\u043c \u0442\u043e\u0447\u043a\u0438 \u0432\u0445\u043e\u0434\u0430 \u0432 \u0438\u0433\u0440\u0443 \u0438 \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0444\u0430\u0439\u043b <strong>CMakeLists.txt<\/strong> \u0432\u043d\u0443\u0442\u0440\u0438 <strong>main<\/strong>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044f\u044e\u0442\u0441\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b.<\/p>\n<p>  CMake \u043d\u0443\u0436\u043d\u043e \u0441\u0441\u044b\u043b\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0430\u0442 \u0435\u043c\u0443, \u0433\u0434\u0435 \u0438\u0441\u043a\u0430\u0442\u044c IDF \u0438 \u0442\u0443\u043b\u0447\u0435\u0439\u043d. \u041c\u0435\u043d\u044f \u0440\u0430\u0437\u0434\u0440\u0430\u0436\u0430\u043b\u043e, \u0447\u0442\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0438\u0445 \u0437\u0430\u043d\u043e\u0432\u043e \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043d\u043e\u0432\u043e\u0439 \u0441\u0435\u0441\u0441\u0438\u0438 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0441\u043a\u0440\u0438\u043f\u0442 <strong>export.sh<\/strong>. \u041e\u043d \u0437\u0430\u0434\u0430\u0451\u0442 <strong>IDF_PATH<\/strong> \u0438 <strong>IDF_TOOLS_PATH<\/strong>, \u0430 \u0442\u0430\u043a\u0436\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u043c \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 IDF, \u0437\u0430\u0434\u0430\u044e\u0449\u0438\u043c \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 <strong>IDF_PATH<\/strong> \u0438 <strong>IDF_TOOLS_PATH<\/strong>.<\/p>\n<pre><code class=\"powershell\">IDF_PATH= IDF_TOOLS_PATH=   if [ -z &quot;$IDF_PATH&quot; ] then \techo &quot;IDF_PATH not set&quot; \treturn fi  if [ -z &quot;$IDF_TOOLS_PATH&quot; ] then \techo &quot;IDF_TOOLS_PATH not set&quot; \treturn fi   export IDF_PATH export IDF_TOOLS_PATH  source $IDF_PATH\/export.sh<\/code><\/pre>\n<p>  <strong>CMakeLists.txt<\/strong> \u0432 \u043a\u043e\u0440\u043d\u0435:<\/p>\n<pre><code class=\"cmake\">cmake_minimum_required(VERSION 3.5)  set(COMPONENTS &quot;esptool_py main&quot;)  include($ENV{IDF_PATH}\/tools\/cmake\/project.cmake)  project(game)<\/code><\/pre>\n<p>  \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u0431\u043e\u0440\u043a\u0438 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0432\u043d\u0443\u0442\u0440\u0438 <strong>$ESP_IDF\/components<\/strong>, \u0438\u0437-\u0437\u0430 \u0447\u0435\u0433\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0433\u043e. \u041c\u044b \u0445\u043e\u0442\u0438\u043c \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u0432\u044b\u0437\u043e\u0432\u0430 \u043d\u0430\u0448\u0435\u0439 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043f\u043e\u0437\u0436\u0435 \u043f\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438. \u0418\u043c\u0435\u043d\u043d\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <strong>COMPONENTS<\/strong>.<\/p>\n<p>  <strong>CMakeLists.txt<\/strong> \u0432\u043d\u0443\u0442\u0440\u0438 <strong>main<\/strong>:<\/p>\n<pre><code class=\"cmake\">idf_component_register( \tSRCS &quot;main.c&quot;     INCLUDE_DIRS &quot;&quot;)<\/code><\/pre>\n<p>  \u0412\u0441\u0451, \u0447\u0442\u043e \u043e\u043d \u0434\u0435\u043b\u0430\u0435\u0442 \u2014 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0440\u0430\u0437 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u043d\u0430 \u043c\u043e\u043d\u0438\u0442\u043e\u0440 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u00abHello World\u00bb. \u0414\u043b\u044f \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 <strong>vTaskDelay<\/strong> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 FreeRTOS.<\/p>\n<p>  \u0424\u0430\u0439\u043b <b>main.c<\/b> \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442:<\/p>\n<pre><code class=\"cpp\">#include &lt;stdio.h&gt; #include &lt;freertos\/FreeRTOS.h&gt; #include &lt;freertos\/task.h&gt;   void app_main(void) { \tfor (;;) \t{ \t\tprintf(&quot;Hello World!\\n&quot;); \t\tvTaskDelay(1000 \/ portTICK_PERIOD_MS); \t}  \t\/\/ Should never get here \tesp_restart(); }<\/code><\/pre>\n<p>  \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043d\u0430\u0448\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <strong>app_main<\/strong>, \u0430 <em>\u043d\u0435<\/em> <strong>main<\/strong>. \u0424\u0443\u043d\u043a\u0446\u0438\u044f <strong>main<\/strong> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f IDF \u0434\u043b\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0439 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438, \u0430 \u0437\u0430\u0442\u0435\u043c \u043e\u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 <strong>\u0437\u0430\u0434\u0430\u0447\u0443 (task)<\/strong> \u0441 \u043d\u0430\u0448\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 <strong>app_main<\/strong> \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0442\u043e\u0447\u043a\u0438 \u0432\u0445\u043e\u0434\u0430.<\/p>\n<p>  \u0417\u0430\u0434\u0430\u0447\u0430 \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u0431\u043b\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u043e\u0436\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c FreeRTOS. \u041f\u043e\u043a\u0430 \u043d\u0430\u043c \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u043e\u0431 \u044d\u0442\u043e\u043c \u0431\u0435\u0441\u043f\u043e\u043a\u043e\u0438\u0442\u044c\u0441\u044f (\u0430 \u043c\u043e\u0436\u0435\u0442, \u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f), \u043d\u043e \u0437\u0434\u0435\u0441\u044c \u0432\u0430\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043d\u0430\u0448\u0430 \u0438\u0433\u0440\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u043e\u0434\u043d\u043e\u043c \u044f\u0434\u0440\u0435 (ESP32 \u0438\u043c\u0435\u0435\u0442 \u0434\u0432\u0430 \u044f\u0434\u0440\u0430), \u0438 \u0441 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0435\u0439 \u0446\u0438\u043a\u043b\u0430 for \u0437\u0430\u0434\u0430\u0447\u0430 \u043e\u0442\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043d\u0430 \u043e\u0434\u043d\u0443 \u0441\u0435\u043a\u0443\u043d\u0434\u0443. \u0412\u043e \u0432\u0440\u0435\u043c\u044f \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a FreeRTOS \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0439 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0436\u0438\u0434\u0430\u0435\u0442 \u0441\u0432\u043e\u0435\u0439 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 (\u0435\u0441\u043b\u0438 \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 \u0435\u0441\u0442\u044c).<\/p>\n<p>  \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438 \u043e\u0431\u0430 \u044f\u0434\u0440\u0430, \u043d\u043e \u043f\u043e\u043a\u0430 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u043c\u0441\u044f \u043e\u0434\u043d\u0438\u043c.<\/p>\n<h3>\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b<\/h3>\n<p>  \u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043c\u044b \u0441\u043d\u0438\u0437\u0438\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0434\u043e \u0441\u0430\u043c\u043e\u0433\u043e \u043c\u0438\u043d\u0438\u043c\u0443\u043c\u0430, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0433\u043e \u0434\u043b\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f Hello World (\u0430 \u044d\u0442\u043e <strong>esptool_py<\/strong> \u0438 <strong>main<\/strong>), \u0438\u0437-\u0437\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u043e\u043d\u043e \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u044b. \u041e\u043d\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0432\u0441\u0435 \u044d\u0442\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b:<\/p>\n<pre><code class=\"cmake\">app_trace app_update bootloader bootloader_support cxx driver efuse esp32 esp_common esp_eth esp_event esp_ringbuf esp_rom esp_wifi espcoredump esptool_py freertos heap log lwip main mbedtls newlib nvs_flash partition_table pthread soc spi_flash tcpip_adapter vfs wpa_supplicant xtensa<\/code><\/pre>\n<p>  \u041c\u043d\u043e\u0433\u0438\u0435 \u0438\u0437 \u043d\u0438\u0445 \u0432\u043f\u043e\u043b\u043d\u0435 \u043b\u043e\u0433\u0438\u0447\u043d\u044b (<strong>bootloader<\/strong>, <strong>esp32<\/strong>, <strong>freertos<\/strong>), \u043d\u043e \u0437\u0430 \u043d\u0438\u043c\u0438 \u0438\u0434\u0443\u0442 \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0435 \u043d\u0430\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u044b \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439: <strong>esp_eth, esp_wifi, lwip, mbedtls, tcpip_adapter, wpa_supplicant<\/strong>. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043c\u044b \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0432\u044b\u043d\u0443\u0436\u0434\u0435\u043d\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u044d\u0442\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b.<\/p>\n<p>  \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u0449\u0438\u043a \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u043c\u0451\u043d \u0438 \u043d\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0443\u0435\u0442 \u043d\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0432 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0438\u0433\u0440\u044b. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u044d\u0442\u043e \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <strong>make size-components<\/strong>.<\/p>\n<p>  <code><\/p>\n<pre>Total sizes:  DRAM .data size:    8476 bytes  DRAM .bss  size:    4144 bytes Used static DRAM:   12620 bytes ( 168116 available, 7.0% used) Used static IRAM:   56345 bytes (  74727 available, 43.0% used)       Flash code:   95710 bytes     Flash rodata:   40732 bytes Total image size:~ 201263 bytes (.bin may be padded larger) Per-archive contributions to ELF file:             Archive File DRAM .data &amp; .bss   IRAM Flash code &amp; rodata   Total                   libc.a        364      8   5975      63037     3833   73217               libesp32.a       2110    151  15236      15415    21485   54397            libfreertos.a       4148    776  14269          0     1972   21165                 libsoc.a        184      4   7909        875     4144   13116           libspi_flash.a        714    294   5069       1320     1386    8783                 libvfs.a        308     48      0       5860      973    7189          libesp_common.a         16   2240    521       1199     3060    7036              libdriver.a         87     32      0       4335     2200    6654                libheap.a        317      8   3150       1218      748    5441              libnewlib.a        152    272    869        908       99    2300         libesp_ringbuf.a          0      0    906          0      163    1069                 liblog.a          8    268    488         98        0     862          libapp_update.a          0      4    127        159      486     776  libbootloader_support.a          0      0      0        634        0     634                 libhal.a          0      0    519          0       32     551             libpthread.a          8     12      0        288        0     308              libxtensa.a          0      0    220          0        0     220                 libgcc.a          0      0      0          0      160     160                libmain.a          0      0      0         22       13      35                 libcxx.a          0      0      0         11        0      11                    (exe)          0      0      0          0        0       0               libefuse.a          0      0      0          0        0       0          libmbedcrypto.a          0      0      0          0        0       0      libwpa_supplicant.a          0      0      0          0        0       0<\/pre>\n<p><\/code><br \/>  \u0411\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u043d\u0430 \u0440\u0430\u0437\u043c\u0435\u0440 \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0432\u043b\u0438\u044f\u0435\u0442 libc, \u0438 \u044d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e.<\/p>\n<h3>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/h3>\n<p>  IDF \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043f\u0440\u0438 \u0441\u0431\u043e\u0440\u043a\u0435 \u0434\u043b\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439. \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0442 \u043d\u0430\u043c \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430\u043c\u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0430\u0441\u043f\u0435\u043a\u0442\u043e\u0432 Odroid Go.<\/p>\n<p>  \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c source \u0441\u043a\u0440\u0438\u043f\u0442\u0430 <strong>export.sh<\/strong>, \u0447\u0442\u043e\u0431\u044b CMake \u0438\u043c\u0435\u043b \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f. \u0414\u0430\u043b\u0435\u0435, \u043a\u0430\u043a \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 CMake, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0430\u043f\u043a\u0443 \u0441\u0431\u043e\u0440\u043a\u0438 \u0438 \u0432\u044b\u0437\u0432\u0430\u0442\u044c CMake \u0438\u0437 \u043d\u0435\u0451.<\/p>\n<pre><code class=\"cmake\">source export.sh mkdir build cd build cmake ..<\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c <strong>make menuconfig<\/strong>, \u0442\u043e \u043e\u0442\u043a\u0440\u043e\u0435\u0442\u0441\u044f \u043e\u043a\u043d\u043e, \u0433\u0434\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<\/p>\n<h4>\u0420\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u043c \u0444\u043b\u0435\u0448-\u043f\u0430\u043c\u044f\u0442\u044c \u0434\u043e 16 \u041c\u0411<\/h4>\n<p>  Odroid Go \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043e\u0431\u044a\u0451\u043c \u0444\u043b\u0435\u0448-\u043d\u0430\u043a\u043e\u043f\u0438\u0442\u0435\u043b\u044f \u0434\u043e 16 \u041c\u0411. \u042d\u0442\u0443 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c, \u043f\u0435\u0440\u0435\u0439\u0434\u044f \u0432 <strong>Serial flasher config -&gt; Flash size -&gt; 16MB<\/strong>.<\/p>\n<h4>\u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0432\u043d\u0435\u0448\u043d\u0435\u0435 SPI RAM<\/h4>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c 4 \u041c\u0411 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u041e\u0417\u0423, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043e SPI. \u041c\u043e\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0435\u0433\u043e, \u043f\u0435\u0440\u0435\u0439\u0434\u044f \u0432 <strong>Component config -&gt; ESP32-specific -&gt; Support for external, SPI-connected RAM<\/strong> \u0438 \u043d\u0430\u0436\u0430\u0432 \u00ab\u043f\u0440\u043e\u0431\u0435\u043b\u00bb \u0434\u043b\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f. \u0415\u0449\u0451 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u044f\u0432\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0432\u044b\u0434\u0435\u043b\u044f\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u044c \u0438\u0437 SPI RAM; \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c, \u043f\u0435\u0440\u0435\u0439\u0434\u044f \u0432 <strong>SPI RAM config -&gt; SPI RAM access method -&gt; Make RAM allocatable using heap_caps_malloc<\/strong>.<\/p>\n<h4>\u041f\u043e\u043d\u0438\u0436\u0430\u0435\u043c \u0447\u0430\u0441\u0442\u043e\u0442\u0443<\/h4>\n<p>  ESP32 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439 160 \u041c\u0413\u0446, \u043d\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043d\u0438\u0437\u0438\u043c \u0435\u0451 \u0434\u043e 80 \u041c\u0413\u0446, \u0447\u0442\u043e\u0431\u044b \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u043a\u0430\u043a \u0434\u0430\u043b\u0435\u043a\u043e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0439\u0442\u0438 \u0441 \u0441\u0430\u043c\u043e\u0439 \u043d\u0438\u0437\u043a\u043e\u0439 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439. \u041c\u044b \u0445\u043e\u0442\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u0438\u0433\u0440\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u043e\u0442 \u0430\u043a\u043a\u0443\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0430, \u0430 \u0441\u043d\u0438\u0436\u0435\u043d\u0438\u0435 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u0437\u0430\u0440\u044f\u0434. \u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0435\u0451 \u043c\u043e\u0436\u043d\u043e, \u043f\u0435\u0440\u0435\u0439\u0434\u044f \u0432 <strong>Component config -&gt; ESP32-specific -&gt; CPU frequency -&gt; 80MHz<\/strong>.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b\u0431\u0440\u0430\u0442\u044c <strong>Save<\/strong>, \u0432 \u043a\u043e\u0440\u0435\u043d\u044c \u043f\u0430\u043f\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d \u0444\u0430\u0439\u043b <strong>sdkconfig<\/strong>. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u0432 git, \u043d\u043e \u0432 \u043d\u0451\u043c \u043c\u043d\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u043c \u043d\u0435 \u0432\u0430\u0436\u043d\u044b. \u041f\u043e\u043a\u0430 \u043d\u0430\u0441 \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044e\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043a\u0440\u043e\u043c\u0435 \u0442\u0435\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438.<\/p>\n<p>  \u041c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0432\u043c\u0435\u0441\u0442\u043e \u043d\u0435\u0433\u043e \u0444\u0430\u0439\u043b <strong>sdkconfig.defaults<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0451\u043d\u043d\u044b\u0435 \u0432\u044b\u0448\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u0412\u0441\u0451 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043e \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u0412\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u0431\u043e\u0440\u043a\u0438 IDF \u0431\u0443\u0434\u0435\u0442 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c <strong>sdkconfig.defaults<\/strong>, \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432.<\/p>\n<p>  \u0421\u0435\u0439\u0447\u0430\u0441 <strong>sdkconfig.defaults<\/strong> \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cpp\"># Set flash size to 16MB CONFIG_ESPTOOLPY_FLASHSIZE_16MB=y  # Set CPU frequency to 80MHz CONFIG_ESP32_DEFAULT_CPU_FREQ_80=y  # Enable SPI RAM and allocate with heap_caps_malloc() CONFIG_ESP32_SPIRAM_SUPPORT=y CONFIG_SPIRAM_USE_CAPS_ALLOC=y<\/code><\/pre>\n<p>  \u0412 \u0446\u0435\u043b\u043e\u043c, \u0438\u0441\u0445\u043e\u0434\u043d\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0438\u0433\u0440\u044b \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<p>  <code><\/p>\n<pre>game \u251c\u2500\u2500 CMakeLists.txt \u251c\u2500\u2500 export.sh \u251c\u2500\u2500 main \u2502   \u251c\u2500\u2500 CMakeLists.txt \u2502   \u2514\u2500\u2500 main.c \u2514\u2500\u2500 sdkconfig.defaults<\/pre>\n<p><\/code>  <\/p>\n<h3>\u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 \u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430<\/h3>\n<p>  \u0421\u0430\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442.<\/p>\n<p>  \u041c\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c <strong>make<\/strong> \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 (\u0434\u043b\u044f \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0438 \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 <strong>-j4<\/strong> \u0438\u043b\u0438 <strong>-j8<\/strong>), <strong>make flash<\/strong> \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u043e\u0431\u0440\u0430\u0437\u0430 \u043d\u0430 Odroid Go \u0438 <strong>make monitor<\/strong> \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 <strong>printf<\/strong>.<\/p>\n<pre><code class=\"cmake\">make make flash make monitor<\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0438\u0445 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439<\/p>\n<pre><code class=\"cmake\">make flash monitor<\/code><\/pre>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0435 \u043e\u0441\u043e\u0431\u043e \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u044f\u0435\u0442, \u043d\u043e \u043e\u043d \u0441\u0442\u0430\u043d\u0435\u0442 \u043e\u0441\u043d\u043e\u0432\u043e\u0439 \u0434\u043b\u044f \u043e\u0441\u0442\u0430\u0432\u0448\u0435\u0439\u0441\u044f \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/3c2\/329\/62f\/3c232962f8e782c9220b25b7e3c0df5e.png\"><\/div>\n<p>  <\/p>\n<h3>\u0421\u0441\u044b\u043b\u043a\u0438<\/h3>\n<p>  <\/p>\n<ul>\n<li><a href=\"https:\/\/docs.espressif.com\/projects\/esp-idf\/en\/v4.0\/api-guides\/build-system.html\" rel=\"nofollow\">ESP-IDF Documentation: Build System<\/a><\/li>\n<li><a href=\"https:\/\/www.freertos.org\/a00127.html\" rel=\"nofollow\">FreeRTOS Documentation: vTaskDelay<\/a><\/li>\n<\/ul>\n<p>  <\/p>\n<h2>\u0427\u0430\u0441\u0442\u044c 2: \u0432\u0432\u043e\u0434<\/h2>\n<p>  <\/p>\n<h3>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h3>\n<p>  \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043d\u0430\u0436\u0438\u043c\u0430\u0435\u043c\u044b\u0445 \u0438\u0433\u0440\u043e\u043a\u043e\u043c \u043a\u043d\u043e\u043f\u043e\u043a \u0438 \u043a\u0440\u0435\u0441\u0442\u043e\u0432\u0438\u043d\u044b \u043d\u0430 Odroid Go.<\/p>\n<h3>\u041a\u043d\u043e\u043f\u043a\u0438<\/h3>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/106\/142\/ca2\/106142ca2250eb9301215015b6f0bbad.png\"><\/div>\n<p>  <\/p>\n<h4>GPIO<\/h4>\n<p>  Odroid Go \u0438\u043c\u0435\u0435\u0442 \u0448\u0435\u0441\u0442\u044c \u043a\u043d\u043e\u043f\u043e\u043a: <strong>A<\/strong>, <strong>B<\/strong>, <strong>Select<\/strong>, <strong>Start<\/strong>, <strong>Menu<\/strong> \u0438 <strong>Volume<\/strong>.<\/p>\n<p>  \u041a\u0430\u0436\u0434\u0430\u044f \u0438\u0437 \u043a\u043d\u043e\u043f\u043e\u043a \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u043a \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c\u0443 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0443 <strong>General Purpose IO (GPIO)<\/strong>. \u041a\u043e\u043d\u0442\u0430\u043a\u0442\u044b GPIO \u043c\u043e\u0433\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0432\u0432\u043e\u0434\u044b (\u0434\u043b\u044f \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u044f) \u0438\u043b\u0438 \u043a\u0430\u043a \u0432\u044b\u0432\u043e\u0434\u044b (\u043c\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0432 \u043d\u0438\u0445 \u0437\u0430\u043f\u0438\u0441\u044c). \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043a\u043d\u043e\u043f\u043e\u043a \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u0435.<\/p>\n<p>  \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u044b \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u0432\u043e\u0434\u043e\u0432, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0438\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u0412\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u044b \u0438\u043c\u0435\u044e\u0442 \u043e\u0434\u043d\u043e \u0438\u0437 \u0434\u0432\u0443\u0445 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0439 (3.3V \u0438\u043b\u0438 0V), \u043d\u043e \u043f\u0440\u0438 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u0438 \u0438\u0445 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 IDF \u043e\u043d\u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442\u0441\u044f \u0432 \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.<\/p>\n<h4>\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f<\/h4>\n<p>  \u042d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u043d\u044b\u0435 \u043d\u0430 \u0441\u0445\u0435\u043c\u0435 \u043a\u0430\u043a <strong>SW<\/strong> \u2014 \u044d\u0442\u043e \u0441\u0430\u043c\u0438 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043a\u043d\u043e\u043f\u043a\u0438. \u041a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043d\u0430\u0436\u0430\u0442\u044b, \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u044b ESP32 (<strong>IO13<\/strong>, <strong>IO0<\/strong> \u0438 \u0442.\u0434.) \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u044b \u0441 3,3 \u0412; \u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 3,3 \u0412 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043a\u043d\u043e\u043f\u043a\u0430 <strong>\u043d\u0435 \u043d\u0430\u0436\u0430\u0442\u0430<\/strong>. \u041b\u043e\u0433\u0438\u043a\u0430 \u0437\u0434\u0435\u0441\u044c \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u0430 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u0439.<\/p>\n<p>  <strong>IO0<\/strong> \u0438 <strong>IO39<\/strong> \u0438\u043c\u0435\u044e\u0442 \u043d\u0430 \u043f\u043b\u0430\u0442\u0435 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0440\u0435\u0437\u0438\u0441\u0442\u043e\u0440\u044b. \u0415\u0441\u043b\u0438 \u043a\u043d\u043e\u043f\u043a\u0430 \u043d\u0435 \u043d\u0430\u0436\u0430\u0442\u0430, \u0442\u043e \u0440\u0435\u0437\u0438\u0441\u0442\u043e\u0440 <strong>\u043f\u043e\u0434\u0442\u044f\u0433\u0438\u0432\u0430\u0435\u0442<\/strong> \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u044b \u0434\u043e \u0432\u044b\u0441\u043e\u043a\u043e\u0433\u043e \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f. \u0415\u0441\u043b\u0438 \u043a\u043d\u043e\u043f\u043a\u0430 \u043d\u0430\u0436\u0430\u0442\u0430, \u0442\u043e \u0438\u0434\u0443\u0449\u0438\u0439 \u043f\u043e \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430\u043c \u0442\u043e\u043a \u0432\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u0443\u0445\u043e\u0434\u0438\u0442 \u0432 \u0437\u0435\u043c\u043b\u044e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 0.<\/p>\n<p>  <strong>IO13<\/strong>, <strong>IO27<\/strong>, <strong>IO32<\/strong> \u0438 <strong>IO33<\/strong> \u043d\u0435 \u0438\u043c\u0435\u044e\u0442 \u0440\u0435\u0437\u0438\u0441\u0442\u043e\u0440\u043e\u0432, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0435 \u043d\u0430 ESP32 \u0438\u043c\u0435\u044e\u0442 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u0440\u0435\u0437\u0438\u0441\u0442\u043e\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043d\u0430 \u0440\u0435\u0436\u0438\u043c \u043f\u043e\u0434\u0442\u044f\u0433\u0438\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>  \u0417\u043d\u0430\u044f \u044d\u0442\u043e, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0448\u0435\u0441\u0442\u044c \u043a\u043d\u043e\u043f\u043e\u043a \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 GPIO API.<\/p>\n<pre><code class=\"cpp\">const gpio_num_t BUTTON_PIN_A = GPIO_NUM_32; const gpio_num_t BUTTON_PIN_B = GPIO_NUM_33; const gpio_num_t BUTTON_PIN_START = GPIO_NUM_39; const gpio_num_t BUTTON_PIN_SELECT = GPIO_NUM_27; const gpio_num_t BUTTON_PIN_VOLUME = GPIO_NUM_0; const gpio_num_t BUTTON_PIN_MENU = GPIO_NUM_13;  gpio_config_t gpioConfig = {};  gpioConfig.mode = GPIO_MODE_INPUT; gpioConfig.pull_up_en = GPIO_PULLUP_ENABLE; gpioConfig.pin_bit_mask = \t  (1ULL &lt;&lt; BUTTON_PIN_A) \t| (1ULL &lt;&lt; BUTTON_PIN_B) \t| (1ULL &lt;&lt; BUTTON_PIN_START) \t| (1ULL &lt;&lt; BUTTON_PIN_SELECT) \t| (1ULL &lt;&lt; BUTTON_PIN_VOLUME) \t| (1ULL &lt;&lt; BUTTON_PIN_MENU);  ESP_ERROR_CHECK(gpio_config(&amp;gpioConfig));<\/code><\/pre>\n<p>  \u0417\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u043a\u043e\u0434\u0430 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0438\u0437 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432 \u0441\u0445\u0435\u043c\u044b. \u041c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 <strong>gpio_config_t<\/strong> \u0434\u043b\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u0448\u0435\u0441\u0442\u0438 \u043a\u043d\u043e\u043f\u043e\u043a \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u0432\u043e\u0434\u0430 \u0441 \u043f\u043e\u0434\u0442\u044f\u0433\u0438\u0432\u0430\u043d\u0438\u0435\u043c. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 <strong>IO13<\/strong>, <strong>IO27<\/strong>, <strong>IO32<\/strong> \u0438 <strong>IO33<\/strong> \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u0442\u044c IDF \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043e\u0434\u0442\u044f\u0433\u0438\u0432\u0430\u044e\u0449\u0438\u0435 \u0440\u0435\u0437\u0438\u0441\u0442\u043e\u0440\u044b \u044d\u0442\u0438\u0445 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432. \u0414\u043b\u044f <strong>IO0<\/strong> \u0438 <strong>IO39<\/strong> \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u044d\u0442\u043e\u0433\u043e \u0434\u0435\u043b\u0430\u0442\u044c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0443 \u043d\u0438\u0445 \u0435\u0441\u0442\u044c \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0440\u0435\u0437\u0438\u0441\u0442\u043e\u0440\u044b, \u043d\u043e \u043c\u044b \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u044d\u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0431\u044b\u043b\u0430 \u043a\u0440\u0430\u0441\u0438\u0432\u043e\u0439.<\/p>\n<p>  <strong>ESP_ERROR_CHECK<\/strong> \u2014 \u044d\u0442\u043e \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u0430\u043a\u0440\u043e\u0441 \u0438\u0437 IDF, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u0441\u0435\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <strong>esp_err_t<\/strong> (\u0431\u041e\u043b\u044c\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c IDF) \u0438 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442 (assert), \u0447\u0442\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0435 \u0440\u0430\u0432\u0435\u043d <strong>ESP_OK<\/strong>. \u042d\u0442\u043e\u0442 \u043c\u0430\u043a\u0440\u043e\u0441 \u0443\u0434\u043e\u0431\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0435\u0441\u043b\u0438 \u0435\u0451 \u043e\u0448\u0438\u0431\u043a\u0430 \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u0430 \u0438 \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u0451 \u043d\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0438\u0433\u0440\u0430 \u0431\u0435\u0437 \u0432\u0432\u043e\u0434\u0430 \u2014 \u043d\u0435 \u0438\u0433\u0440\u0430, \u0442\u0430\u043a \u0447\u0442\u043e \u044d\u0442\u043e \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u0441\u043f\u0440\u0430\u0432\u0435\u0434\u043b\u0438\u0432\u043e. \u041c\u044b \u0447\u0430\u0441\u0442\u043e \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u044d\u0442\u0438\u043c \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u043c.<\/p>\n<h4>\u0421\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u043a\u043d\u043e\u043f\u043e\u043a<\/h4>\n<p>  \u0418\u0442\u0430\u043a, \u043c\u044b \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0432\u0441\u0435 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u044b, \u0438 \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u043e \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u0426\u0438\u0444\u0440\u043e\u0432\u044b\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 <strong>gpio_get_level<\/strong>, \u043d\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0438\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u044b \u043f\u043e\u0434\u0442\u044f\u043d\u0443\u0442\u044b \u0432\u0432\u0435\u0440\u0445, \u0442\u043e \u0435\u0441\u0442\u044c \u0432\u044b\u0441\u043e\u043a\u0438\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u00ab\u043d\u0435 \u043d\u0430\u0436\u0430\u0442\u043e\u00bb, \u0430 \u043d\u0438\u0437\u043a\u0438\u0439 \u2014 \u00ab\u043d\u0430\u0436\u0430\u0442\u043e\u00bb. \u0418\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u0443\u044e \u043d\u0430\u043c \u043b\u043e\u0433\u0438\u043a\u0443: 1 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u00ab\u043d\u0430\u0436\u0430\u0442\u043e\u00bb, 0 \u2014 \u00ab\u043d\u0435 \u043d\u0430\u0436\u0430\u0442\u043e\u00bb.<\/p>\n<pre><code class=\"cpp\">int a = !gpio_get_level(BUTTON_PIN_A); int b = !gpio_get_level(BUTTON_PIN_B); int select = !gpio_get_level(BUTTON_PIN_SELECT); int start = !gpio_get_level(BUTTON_PIN_START); int menu = !gpio_get_level(BUTTON_PIN_MENU); int volume = !gpio_get_level(BUTTON_PIN_VOLUME);<\/code><\/pre>\n<p>  <\/p>\n<h3>\u041a\u0440\u0435\u0441\u0442\u043e\u0432\u0438\u043d\u0430 (D-pad)<\/h3>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/1e8\/d9e\/a73\/1e8d9ea7303257afd45846771726a275.png\"><\/div>\n<p>  <\/p>\n<h4>ADC<\/h4>\n<p>  \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a\u0440\u0435\u0441\u0442\u043e\u0432\u0438\u043d\u044b \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a\u043d\u043e\u043f\u043e\u043a. \u041a\u043d\u043e\u043f\u043a\u0438 \u00ab\u0432\u0432\u0435\u0440\u0445\u00bb \u0438 \u00ab\u0432\u043d\u0438\u0437\u00bb \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u043a \u043e\u0434\u043d\u043e\u043c\u0443 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0443 <strong>\u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u043e-\u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f (Analog-to-Digital Converter, ADC)<\/strong>, \u0430 \u043a\u043d\u043e\u043f\u043a\u0438 \u00ab\u0432\u043b\u0435\u0432\u043e\u00bb \u0438 \u00ab\u0432\u043f\u0440\u0430\u0432\u043e\u00bb \u2014 \u043a \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0443 ADC.<\/p>\n<p>  \u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u0445 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432 GPIO, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u044b \u043c\u043e\u0433\u043b\u0438 \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043e\u0434\u043d\u043e \u0438\u0437 \u0434\u0432\u0443\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 (\u0432\u044b\u0441\u043e\u043a\u043e\u0435 \u0438\u043b\u0438 \u043d\u0438\u0437\u043a\u043e\u0435), ADC \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0435 \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u043e\u0435 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u0442 0 \u0412 \u0434\u043e 3,3 \u0412) \u0432 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u0442 0 \u0434\u043e 4095).<\/p>\n<p>  \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u044e, \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0438 Odroid Go \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u043d\u0430 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430\u0445 GPIO (\u043d\u0443\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0432\u0430 \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u044b\u0445 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430 \u0432\u043c\u0435\u0441\u0442\u043e \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u0445). \u041a\u0430\u043a \u0431\u044b \u0442\u043e \u043d\u0438 \u0431\u044b\u043b\u043e, \u044d\u0442\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0435\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0438 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0441 \u044d\u0442\u0438\u0445 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432.<\/p>\n<h4>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f<\/h4>\n<p>  \u041a\u043e\u043d\u0442\u0430\u043a\u0442 <strong>IO35<\/strong> \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d \u043a \u043e\u0441\u0438 Y \u043a\u0440\u0435\u0441\u0442\u043e\u0432\u0438\u043d\u044b, \u0430 \u043a\u043e\u043d\u0442\u0430\u043a\u0442 <strong>IO34<\/strong> \u2014 \u043a \u043e\u0441\u0438 X \u043a\u0440\u0435\u0441\u0442\u043e\u0432\u0438\u043d\u044b. \u041c\u044b \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043a\u0440\u0435\u0441\u0442\u043e\u0432\u0438\u043d\u044b \u0447\u0443\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u0435\u0435, \u0447\u0435\u043c \u0443 \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u0445 \u043a\u043d\u043e\u043f\u043e\u043a. \u0423 \u043a\u0430\u0436\u0434\u043e\u0439 \u043e\u0441\u0438 \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044f (<strong>SW1<\/strong> \u0438 <strong>SW2<\/strong> \u0434\u043b\u044f \u043e\u0441\u0438 Y, <strong>SW3<\/strong> \u0438 <strong>SW4<\/strong> \u2014 \u0434\u043b\u044f \u043e\u0441\u0438 X), \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0451\u043d \u043a \u043d\u0430\u0431\u043e\u0440\u0443 \u0440\u0435\u0437\u0438\u0441\u0442\u043e\u0440\u043e\u0432 (<strong>R2<\/strong>, <strong>R3<\/strong>, <strong>R4<\/strong>, <strong>R5<\/strong>).<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043d\u0435 \u043d\u0430\u0436\u0430\u0442\u043e \u043d\u0438 \u00ab\u0432\u0432\u0435\u0440\u0445\u00bb, \u043d\u0438 \u00ab\u0432\u043d\u0438\u0437\u00bb, \u043a\u043e\u043d\u0442\u0430\u043a\u0442 <strong>IO35<\/strong> \u043f\u043e\u0434\u0442\u044f\u0433\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u043d\u0438\u0437 \u043a \u0437\u0435\u043c\u043b\u0435 \u0447\u0435\u0440\u0435\u0437 <strong>R3<\/strong>, \u0438 \u043c\u044b \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 0 \u0412. \u0415\u0441\u043b\u0438 \u043d\u0435 \u043d\u0430\u0436\u0430\u0442\u043e \u043d\u0438 \u00ab\u0432\u043b\u0435\u0432\u043e\u00bb, \u043d\u0438 \u00ab\u0432\u043f\u0440\u0430\u0432\u043e\u00bb, \u043a\u043e\u043d\u0442\u0430\u043a\u0442 <strong>IO34<\/strong> \u043f\u043e\u0434\u0442\u044f\u0433\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u043d\u0438\u0437 \u043a \u0437\u0435\u043c\u043b\u0435 \u0447\u0435\u0440\u0435\u0437 <strong>R5<\/strong>, \u0438 \u043c\u044b \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 0 \u0412.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043d\u0430\u0436\u0430\u0442\u043e <strong>SW1 (\u00ab\u0432\u0432\u0435\u0440\u0445\u00bb)<\/strong>, \u0442\u043e \u0441 <strong>IO35<\/strong> \u043c\u044b \u0441\u0447\u0438\u0442\u0430\u0435\u043c 3,3 \u0412. \u0415\u0441\u043b\u0438 \u043d\u0430\u0436\u0430\u0442\u043e <strong>SW2 (\u00ab\u0432\u043d\u0438\u0437\u00bb)<\/strong>, \u0442\u043e \u0441 <strong>IO35<\/strong> \u043c\u044b \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e 1,65 \u0412, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f \u0443\u043f\u0430\u0434\u0451\u0442 \u043d\u0430 \u0440\u0435\u0437\u0438\u0441\u0442\u043e\u0440\u0435 <strong>R2<\/strong>.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043d\u0430\u0436\u0430\u0442\u043e <strong>SW3 (\u00ab\u0432\u043b\u0435\u0432\u043e\u00bb)<\/strong>, \u0442\u043e \u0441 <strong>IO34<\/strong> \u043c\u044b \u0441\u0447\u0438\u0442\u0430\u0435\u043c 3,3 \u0412. \u0415\u0441\u043b\u0438 \u043d\u0430\u0436\u0430\u0442\u043e <strong>SW4 (\u00ab\u0432\u043f\u0440\u0430\u0432\u043e\u00bb)<\/strong>, \u0442\u043e \u0441 <strong>IO34<\/strong> \u043c\u044b \u0442\u043e\u0436\u0435 \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 1,65 \u0412, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f \u0443\u043f\u0430\u0434\u0451\u0442 \u043d\u0430 \u0440\u0435\u0437\u0438\u0441\u0442\u043e\u0440\u0435 <strong>R4<\/strong>.<\/p>\n<p>  \u041e\u0431\u0430 \u0441\u043b\u0443\u0447\u0430\u044f \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Voltage_divider\" rel=\"nofollow\">\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0435\u0439 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f<\/a>. \u041a\u043e\u0433\u0434\u0430 \u0434\u0432\u0430 \u0440\u0435\u0437\u0438\u0441\u0442\u043e\u0440\u0430 \u0432 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0435 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f \u0438\u043c\u0435\u044e\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0435 \u0441\u043e\u043f\u0440\u043e\u0442\u0438\u0432\u043b\u0435\u043d\u0438\u0435 (\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u2014 100K), \u0442\u043e \u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u0432\u0445\u043e\u0434\u0435.<\/p>\n<p>  \u0417\u043d\u0430\u044f \u044d\u0442\u043e, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0440\u0435\u0441\u0442\u043e\u0432\u0438\u043d\u0443:<\/p>\n<pre><code class=\"cpp\">const adc1_channel_t DPAD_PIN_X_AXIS = ADC1_GPIO34_CHANNEL; const adc1_channel_t DPAD_PIN_Y_AXIS = ADC1_GPIO35_CHANNEL;  ESP_ERROR_CHECK(adc1_config_width(ADC_WIDTH_BIT_12)); ESP_ERROR_CHECK(adc1_config_channel_atten(DPAD_PIN_X_AXIS,ADC_ATTEN_DB_11)); ESP_ERROR_CHECK(adc1_config_channel_atten(DPAD_PIN_Y_AXIS,ADC_ATTEN_DB_11));<\/code><\/pre>\n<p>  \u041c\u044b \u0437\u0430\u0434\u0430\u043b\u0438 ADC \u0448\u0438\u0440\u0438\u043d\u0443 12 \u0431\u0438\u0442\u043e\u0432, \u0447\u0442\u043e\u0431\u044b 0 \u0412 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043b\u043e\u0441\u044c \u043a\u0430\u043a 0, \u0430 3,3 \u0412 \u2014 \u043a\u0430\u043a 4095 (2^12). Attenuation \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442, \u0447\u0442\u043e \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043e\u0441\u043b\u0430\u0431\u043b\u044f\u0442\u044c \u0441\u0438\u0433\u043d\u0430\u043b, \u0447\u0442\u043e\u0431\u044b \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043f\u043e\u043b\u043d\u044b\u0439 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0439 \u043e\u0442 0 \u0412 \u0434\u043e 3,3 \u0412.<\/p>\n<p>  \u041f\u0440\u0438 12 \u0431\u0438\u0442\u0430\u0445 \u043c\u043e\u0436\u043d\u043e \u043e\u0436\u0438\u0434\u0430\u0442\u044c, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0430\u0436\u0430\u0442\u043e, \u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c\u0441\u044f 0, \u043f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u0432\u0432\u0435\u0440\u0445 \u0438 \u0432\u043b\u0435\u0432\u043e \u2014 4096, \u0438 \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e 2048 \u0431\u0443\u0434\u0435\u0442 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u0432\u043d\u0438\u0437 \u0438 \u0432\u043f\u0440\u0430\u0432\u043e (\u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0440\u0435\u0437\u0438\u0441\u0442\u043e\u0440\u044b \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u044e\u0442 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u0432\u0434\u0432\u043e\u0435).<\/p>\n<h4>\u0421\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u043a\u0440\u0435\u0441\u0442\u043e\u0432\u0438\u043d\u044b<\/h4>\n<p>  \u0421\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u043a\u0440\u0435\u0441\u0442\u043e\u0432\u0438\u043d\u0443 \u0441\u043b\u043e\u0436\u043d\u0435\u0435, \u0447\u0435\u043c \u043a\u043d\u043e\u043f\u043a\u0438, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0441\u044b\u0440\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f (\u043e\u0442 0 \u0434\u043e 4095) \u0438 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445.<\/p>\n<pre><code class=\"cpp\">const uint32_t ADC_POSITIVE_LEVEL = 3072; const uint32_t ADC_NEGATIVE_LEVEL = 1024;  uint32_t dpadX = adc1_get_raw(DPAD_PIN_X_AXIS);  if (dpadX &gt; ADC_POSITIVE_LEVEL) { \t\/\/ Left pressed } else if (dpadX &gt; ADC_NEGATIVE_LEVEL) { \t\/\/ Right pressed }   uint32_t dpadY = adc1_get_raw(DPAD_PIN_Y_AXIS);  if (dpadY &gt; ADC_POSITIVE_LEVEL) { \t\/\/ Up pressed } else if (dpadY &gt; ADC_NEGATIVE_LEVEL) { \t\/\/ Down pressed }<\/code><\/pre>\n<p>  <strong>ADC_POSITIVE_LEVEL<\/strong> \u0438 <strong>ADC_NEGATIVE_LEVEL<\/strong> \u2014 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441 \u0437\u0430\u043f\u0430\u0441\u043e\u043c, \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0435, \u0447\u0442\u043e \u043c\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u043c \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.<\/p>\n<h3>\u041e\u043f\u0440\u043e\u0441<\/h3>\n<p>  \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u0432\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043a\u043d\u043e\u043f\u043e\u043a: \u043e\u043f\u0440\u043e\u0441 \u0438\u043b\u0438 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u0432\u043e\u0434\u0430 \u0438 \u043f\u0440\u043e\u0441\u0438\u0442\u044c IDF \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u044d\u0442\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043a\u043d\u043e\u043f\u043e\u043a, \u0438\u043b\u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043a\u043d\u043e\u043f\u043e\u043a, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d\u043e \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f. \u0423\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f\u043c\u0438 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432\u0441\u0451 \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0435\u0442 \u0438 \u0437\u0430\u0442\u0440\u0443\u0434\u043d\u044f\u0435\u0442 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043f\u043e\u0442\u043e\u043a\u0430 \u043a\u043e\u0434\u0430. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u044f \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u0442\u0440\u0435\u043c\u043b\u044e\u0441\u044c, \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0451 \u0431\u044b\u043b\u043e \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0449\u0435. \u041f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u0437\u0436\u0435.<\/p>\n<p>  \u041c\u044b \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0448\u0435\u0441\u0442\u0438 \u043a\u043d\u043e\u043f\u043e\u043a \u0438 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u043a\u0440\u0435\u0441\u0442\u043e\u0432\u0438\u043d\u044b. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0441 10 boolean, \u0438\u043b\u0438 10 int, \u0438\u043b\u0438 10 unsigned int. \u041e\u0434\u043d\u0430\u043a\u043e \u0432\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <strong>\u0431\u0438\u0442\u043e\u0432\u044b\u0445 \u043f\u043e\u043b\u0435\u0439<\/strong>.<\/p>\n<pre><code class=\"cpp\">typedef struct { \tuint16_t a : 1; \tuint16_t b : 1; \tuint16_t volume : 1; \tuint16_t menu : 1; \tuint16_t select : 1; \tuint16_t start : 1; \tuint16_t left : 1; \tuint16_t right : 1; \tuint16_t up : 1; \tuint16_t down : 1; } Odroid_Input;<\/code><\/pre>\n<p>  \u041f\u0440\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u0431\u0438\u0442\u043e\u0432\u044b\u0445 \u043f\u043e\u043b\u0435\u0439 \u043e\u0431\u044b\u0447\u043d\u043e \u0438\u0437\u0431\u0435\u0433\u0430\u044e\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u0438 \u043f\u043b\u043e\u0445\u043e \u043f\u043e\u0440\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0435 \u043c\u0430\u0448\u0438\u043d\u044b, \u043d\u043e \u043c\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u0435\u043c \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b \u0438 \u0432\u043e\u043b\u043d\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u043c \u043e\u0431 \u044d\u0442\u043e\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e.<\/p>\n<p>  \u0412\u043c\u0435\u0441\u0442\u043e \u043f\u043e\u043b\u0435\u0439 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0441 10 \u0431\u0443\u043b\u0435\u0432\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u043e\u0431\u0449\u0438\u043c \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 10 \u0431\u0430\u0439\u0442. \u0415\u0449\u0451 \u043e\u0434\u043d\u0438\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e <strong>uint16_t<\/strong> \u043c\u0430\u043a\u0440\u043e\u0441\u0430\u043c\u0438 \u0431\u0438\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0434\u0432\u0438\u0433\u0430 \u0438 \u043f\u043e\u0431\u0438\u0442\u043e\u0432\u043e\u0433\u043e \u043c\u0430\u0441\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c, \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0442\u044c \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0431\u0438\u0442\u044b. \u042d\u0442\u043e \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043a\u0440\u0430\u0441\u0438\u0432\u043e.<\/p>\n<p>  \u041f\u0440\u043e\u0441\u0442\u043e\u0435 \u0431\u0438\u0442\u043e\u0432\u043e\u0435 \u043f\u043e\u043b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 \u043e\u0431\u043e\u0438\u0445 \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u0432: \u0434\u0432\u0430 \u0431\u0430\u0439\u0442\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044f.<\/p>\n<h3>\u0414\u0435\u043c\u043e<\/h3>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432\u0432\u043e\u0434\u043e\u0432 \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.<\/p>\n<pre><code class=\"cpp\">void app_main(void) { \tOdroid_InitializeInput();  \tfor (;;) \t{ \t\tOdroid_Input input = Odroid_PollInput();  \t\tprintf( \t\t\t&quot;\\ra: %d  b: %d  start: %d  select: %d  vol: %d  menu: %d  up: %d  down: %d  left: %d  right: %d&quot;, \t\t\tinput.a, input.b, input.start, input.select, input.volume, input.menu, \t\t\tinput.up, input.down, input.left, input.right);  \t\tfflush(stdout);  \t\tvTaskDelay(250 \/ portTICK_PERIOD_MS); \t}  \t\/\/ Should never get here \tesp_restart(); }<\/code><\/pre>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u044f <strong>printf<\/strong> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 <strong>\\r<\/strong> \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0439. <strong>fflush<\/strong> \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a\u0438, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432 \u043e\u0431\u044b\u0447\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u043e\u043d\u0430 \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u043c \u043d\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 <strong>\\n<\/strong>.<\/p>\n<div class=\"oembed\">\n<div>\n<div style=\"left: 0; width: 100%; height: 0; position: relative; padding-bottom: 56.25%;\"><video controls style=\"top: 0; left: 0; width: 100%; height: 100%; position: absolute;\">Your browser does not support HTML5 video.<source src=\"https:\/\/austinmorlan.com\/posts\/embedded_game_programming_2\/media\/input.mp4\" type=\"video\/mp4\"><\/source><\/video><\/div>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h3>\u0421\u0441\u044b\u043b\u043a\u0438<\/h3>\n<p>  <\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/hardkernel\/ODROID-GO\/blob\/master\/Documents\/ODROID-GO_REV0.1_20180518.pdf\" rel=\"nofollow\">Odroid Go Schematic<\/a><\/li>\n<li><a href=\"https:\/\/docs.espressif.com\/projects\/esp-idf\/en\/v4.0\/api-reference\/peripherals\/adc.html\" rel=\"nofollow\">ESP-IDF Documentation: ADC<\/a><\/li>\n<li><a href=\"https:\/\/docs.espressif.com\/projects\/esp-idf\/en\/v4.0\/api-reference\/peripherals\/spi_master.html\" rel=\"nofollow\">ESP-IDF Documentation: GPIO<\/a><\/li>\n<\/ul>\n<p>  <\/p>\n<h2>\u0427\u0430\u0441\u0442\u044c 3: \u0434\u0438\u0441\u043f\u043b\u0435\u0439<\/h2>\n<p>  <\/p>\n<h3>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h3>\n<p>  \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u043d\u0430 \u0416\u041a-\u0434\u0438\u0441\u043f\u043b\u0435\u0435 Odroid Go.<\/p>\n<p>  \u0412\u044b\u0432\u0435\u0441\u0442\u0438 \u0446\u0432\u0435\u0442\u0430 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u043e\u0436\u043d\u0435\u0435, \u0447\u0435\u043c \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432\u0432\u043e\u0434\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0443 \u0416\u041a-\u0434\u0438\u0441\u043f\u043b\u0435\u044f \u0435\u0441\u0442\u044c \u043c\u043e\u0437\u0433\u0438. \u042d\u043a\u0440\u0430\u043d \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f <strong>ILI9341<\/strong> \u2014 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u043c \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u043c TFT LCD \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0447\u0438\u043f\u0435.<\/p>\n<p>  \u0414\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u043c\u044b \u043e\u0431\u0449\u0430\u0435\u043c\u0441\u044f \u0441 ILI9341, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0435\u0430\u0433\u0438\u0440\u0443\u0435\u0442 \u043d\u0430 \u043d\u0430\u0448\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044f \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u043c\u0438 \u043d\u0430 \u0416\u041a-\u0434\u0438\u0441\u043f\u043b\u0435\u0435. \u041a\u043e\u0433\u0434\u0430 \u0432 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u044f \u0431\u0443\u0434\u0443 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u00ab\u044d\u043a\u0440\u0430\u043d\u00bb \u0438\u043b\u0438 \u00ab\u0434\u0438\u0441\u043f\u043b\u0435\u0439\u00bb, \u0442\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0431\u0443\u0434\u0443 \u0438\u043c\u0435\u0442\u044c \u0432 \u0432\u0438\u0434\u0443 ILI9341. \u041c\u044b \u043e\u0431\u0449\u0430\u0435\u043c\u0441\u044f \u0441 ILI9341. \u041e\u043d \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0416\u041a-\u0434\u0438\u0441\u043f\u043b\u0435\u0435\u043c.<\/p>\n<h3>SPI<\/h3>\n<p>  \u0416\u041a-\u0434\u0438\u0441\u043f\u043b\u0435\u0439 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0451\u043d \u043a ESP32 \u043f\u043e <strong>SPI (Serial Peripheral Interface)<\/strong>.<\/p>\n<p>  SPI \u2014 \u044d\u0442\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u0434\u043b\u044f \u043e\u0431\u043c\u0435\u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043c\u0435\u0436\u0434\u0443 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438 \u043d\u0430 \u043f\u0435\u0447\u0430\u0442\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0435. \u041e\u043d \u0438\u043c\u0435\u0435\u0442 \u0447\u0435\u0442\u044b\u0440\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u0430: <strong>MOSI (Master Out Slave In)<\/strong>, <strong>MISO (Master In Slave Out)<\/strong>, <strong>SCK (Clock)<\/strong> \u0438 <strong>CS (Chip Select)<\/strong>.<\/p>\n<p>  \u0415\u0434\u0438\u043d\u043e\u0435 \u043c\u0430\u0441\u0442\u0435\u0440-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0430 \u0448\u0438\u043d\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0438\u0440\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0434\u0430\u043d\u043d\u044b\u0445, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044f SCK \u0438 CS. \u041d\u0430 \u043e\u0434\u043d\u043e\u0439 \u0448\u0438\u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432, \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044b CS. \u041a\u043e\u0433\u0434\u0430 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u0438\u0433\u043d\u0430\u043b CS \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u043e\u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435.<\/p>\n<p>  ESP32 \u0431\u0443\u0434\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c SPI (master), \u0430 \u0416\u041a-\u0434\u0438\u0441\u043f\u043b\u0435\u0439 \u2014 \u043f\u043e\u0434\u0447\u0438\u043d\u0451\u043d\u043d\u044b\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c SPI (slave). \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0448\u0438\u043d\u0443 SPI \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0416\u041a-\u0434\u0438\u0441\u043f\u043b\u0435\u0439 \u043d\u0430 \u0448\u0438\u043d\u0443, \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u044b.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/7bc\/60e\/18c\/7bc60e18c1b066ba7c22756464f92512.png\"><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/f12\/463\/615\/f124636158029efeab3259f299a2af36.png\"><\/div>\n<p>  \u0418\u043c\u0435\u043d\u0430 <strong>VSPI.XXXX<\/strong> \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043c\u0435\u0442\u043a\u0438 \u0434\u043b\u044f \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432 \u043d\u0430 \u0441\u0445\u0435\u043c\u0435, \u043d\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0439\u0442\u0438 \u0438 \u0434\u043e \u0441\u0430\u043c\u0438\u0445 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432, \u0432\u0437\u0433\u043b\u044f\u043d\u0443\u0432 \u043d\u0430 \u0447\u0430\u0441\u0442\u0438 \u0441\u0445\u0435\u043c\u044b LCD \u0438 ESP32.<\/p>\n<ul>\n<li><strong>MOSI<\/strong> -&gt; VSPI.MOSI -&gt; <strong>IO23<\/strong><\/li>\n<li><strong>MISO<\/strong> -&gt; VSPI.MISO -&gt; <strong>IO19<\/strong><\/li>\n<li><strong>SCK<\/strong> -&gt; VSPI.SCK -&gt; <strong>IO18<\/strong><\/li>\n<li><strong>CS0<\/strong> -&gt; VSPI.CS0 -&gt; <strong>IO5<\/strong><\/li>\n<\/ul>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c <strong>IO14<\/strong>, \u044f\u0432\u043b\u044f\u044e\u0449\u0438\u0439\u0441\u044f \u0432\u044b\u0432\u043e\u0434\u043e\u043c GPIO, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0438, \u0430 \u0435\u0449\u0451 <strong>IO21<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d \u043a \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0443 <strong>DC<\/strong> \u0416\u041a-\u0434\u0438\u0441\u043f\u043b\u0435\u044f. \u042d\u0442\u043e\u0442 \u043a\u043e\u043d\u0442\u0430\u043a\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u0442 \u0442\u0438\u043f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u043d\u0430 \u0434\u0438\u0441\u043f\u043b\u0435\u0439.<\/p>\n<p>  \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u0435\u043c \u0448\u0438\u043d\u0443 SPI.<\/p>\n<pre><code class=\"cpp\">const gpio_num_t LCD_PIN_MISO = GPIO_NUM_19; const gpio_num_t LCD_PIN_MOSI = GPIO_NUM_23; const gpio_num_t LCD_PIN_SCLK = GPIO_NUM_18; const gpio_num_t LCD_PIN_CS = GPIO_NUM_5; const gpio_num_t LCD_PIN_DC = GPIO_NUM_21; const gpio_num_t LCD_PIN_BACKLIGHT = GPIO_NUM_14; const int LCD_WIDTH = 320; const int LCD_HEIGHT = 240; const int LCD_DEPTH = 2;   spi_bus_config_t spiBusConfig = {}; spiBusConfig.miso_io_num = LCD_PIN_MISO; spiBusConfig.mosi_io_num = LCD_PIN_MOSI; spiBusConfig.sclk_io_num = LCD_PIN_SCLK; spiBusConfig.quadwp_io_num = -1; \/\/ Unused spiBusConfig.quadhd_io_num = -1; \/\/ Unused spiBusConfig.max_transfer_sz = LCD_WIDTH * LCD_HEIGHT * LCD_DEPTH;  ESP_ERROR_CHECK(spi_bus_initialize(VSPI_HOST, &amp;spiBusConfig, 1));<\/code><\/pre>\n<p>  \u041c\u044b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u0435\u043c \u0448\u0438\u043d\u0443 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <strong>spi_bus_config_t<\/strong>. \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u043d\u0430\u043c\u0438 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u044b \u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u043e\u0434\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>  \u041f\u043e\u043a\u0430 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043e\u0434\u043d\u0443 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u043f\u043e SPI \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0443\u0444\u0435\u0440\u0430 \u043a\u0430\u0434\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0432\u0435\u043d \u0448\u0438\u0440\u0438\u043d\u0435 \u0416\u041a-\u0434\u0438\u0441\u043f\u043b\u0435\u044f (\u0432 \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u0445), \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u043d\u043e\u0439 \u043d\u0430 \u0435\u0433\u043e \u0432\u044b\u0441\u043e\u0442\u0443 (\u0432 \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u0445), \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u043d\u044b\u043c \u043d\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0430\u0439\u0442 \u043d\u0430 \u043f\u0438\u043a\u0441\u0435\u043b\u044c.<\/p>\n<p>  \u0428\u0438\u0440\u0438\u043d\u0430 \u0440\u0430\u0432\u043d\u0430 320, \u0432\u044b\u0441\u043e\u0442\u0430 \u2014 240, \u0430 \u0433\u043b\u0443\u0431\u0438\u043d\u0430 \u0446\u0432\u0435\u0442\u0430 \u2014 2 \u0431\u0430\u0439\u0442\u0430\u043c (\u0434\u0438\u0441\u043f\u043b\u0435\u0439 \u043e\u0436\u0438\u0434\u0430\u0435\u0442, \u0447\u0442\u043e \u0446\u0432\u0435\u0442\u0430 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0438\u043c\u0435\u044e\u0442 \u0433\u043b\u0443\u0431\u0438\u043d\u0443 16 \u0431\u0438\u0442).<\/p>\n<pre><code class=\"cpp\">spi_handle_t gSpiHandle;  spi_device_interface_config_t spiDeviceConfig = {}; spiDeviceConfig.clock_speed_hz = SPI_MASTER_FREQ_40M; spiDeviceConfig.spics_io_num = LCD_PIN_CS; spiDeviceConfig.queue_size = 1; spiDeviceConfig.flags = SPI_DEVICE_NO_DUMMY;  ESP_ERROR_CHECK(spi_bus_add_device(VSPI_HOST, &amp;spiDeviceConfig, &amp;gSpiHandle));<\/code><\/pre>\n<p>  \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0432 \u0448\u0438\u043d\u0443, \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0416\u041a-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0430 \u0448\u0438\u043d\u0443, \u0447\u0442\u043e\u0431\u044b \u043c\u044b \u043c\u043e\u0433\u043b\u0438 \u043d\u0430\u0447\u0430\u0442\u044c \u0441 \u043d\u0438\u043c \u043e\u0431\u0449\u0430\u0442\u044c\u0441\u044f.<\/p>\n<ul>\n<li><strong>clock_speed_hz<\/strong> \u2014 \u0432 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f\u0445 \u0416\u041a-\u0434\u0438\u0441\u043f\u043b\u0435\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e, \u0447\u0442\u043e \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 SPI \u0432\u043f\u043b\u043e\u0442\u044c \u0434\u043e 40 \u041c\u0413\u0446, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0451 \u043c\u044b \u0438 \u0437\u0430\u0434\u0430\u0434\u0438\u043c. \u041e\u0434\u043d\u0430\u043a\u043e \u043c\u043d\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0443\u0434\u0430\u0432\u0430\u043b\u043e\u0441\u044c \u043e\u0431\u043c\u0435\u043d\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043f\u0440\u0438 80 \u041c\u0413\u0446, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043c\u044b \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0441\u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0432\u044b\u0441\u0438\u0442\u044c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c.<\/li>\n<li><strong>spics_io_num<\/strong> \u2014 \u043c\u044b \u0437\u0430\u0434\u0430\u0451\u043c \u043a\u043e\u043d\u0442\u0430\u043a\u0442 CS, \u0447\u0442\u043e\u0431\u044b IDF \u043c\u043e\u0433 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0441\u0438\u0433\u043d\u0430\u043b CS, \u043a\u043e\u0433\u0434\u0430 \u0435\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0449\u0430\u0442\u044c\u0441\u044f \u0441 \u0434\u0438\u0441\u043f\u043b\u0435\u0435\u043c (\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 SD-\u043a\u0430\u0440\u0442\u044b \u0442\u043e\u0436\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 \u0448\u0438\u043d\u0435 SPI).<\/li>\n<li><strong>queue_size<\/strong> \u2014 \u043c\u044b \u0437\u0430\u0434\u0430\u0451\u043c \u0435\u0433\u043e \u0440\u0430\u0432\u043d\u044b\u043c 1, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0437\u0430 \u0440\u0430\u0437 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0443 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 (\u0431\u0443\u0444\u0435\u0440 \u043a\u0430\u0434\u0440\u043e\u0432 \u0446\u0435\u043b\u0438\u043a\u043e\u043c).<\/li>\n<li><strong>flags<\/strong> \u2014 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 IDF SPI \u043e\u0431\u044b\u0447\u043d\u043e \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0432 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u043f\u0443\u0441\u0442\u044b\u0435 \u0431\u0438\u0442\u044b, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441 \u0442\u0430\u0439\u043c\u0438\u043d\u0433\u043e\u043c \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0438\u0437 SPI-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u043d\u043e \u043c\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043e\u0434\u043d\u043e\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u044e\u044e \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 (\u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0441 \u0434\u0438\u0441\u043f\u043b\u0435\u044f \u043c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c). <strong>SPI_DEVICE_NO_DUMMY<\/strong> \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442, \u0447\u0442\u043e \u043c\u044b \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u043c \u044d\u0442\u0443 \u043e\u0434\u043d\u043e\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u044e\u044e \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0438 \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u0443\u0441\u0442\u044b\u0435 \u0431\u0438\u0442\u044b.<\/li>\n<\/ul>\n<pre><code class=\"cpp\">gpio_set_direction(LCD_PIN_DC, GPIO_MODE_OUTPUT); gpio_set_direction(LCD_PIN_BACKLIGHT, GPIO_MODE_OUTPUT);<\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u044b <strong>DC<\/strong> \u0438 \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0438 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u044b\u0432\u043e\u0434\u043e\u0432 GPIO. \u041f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f <strong>DC<\/strong> \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430.<\/p>\n<h3>\u041a\u043e\u043c\u0430\u043d\u0434\u044b<\/h3>\n<p>  \u041e\u0431\u043c\u0435\u043d \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0441 \u0416\u041a-\u0434\u0438\u0441\u043f\u043b\u0435\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u0444\u043e\u0440\u043c\u0435 \u043a\u043e\u043c\u0430\u043d\u0434. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u0431\u0430\u0439\u0442, \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0449\u0438\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u0443, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0445\u043e\u0442\u0438\u043c \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c, \u0430 \u0437\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u043e\u043c\u0430\u043d\u0434\u044b (\u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u0435\u0441\u0442\u044c). \u0414\u0438\u0441\u043f\u043b\u0435\u0439 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442, \u0447\u0442\u043e \u0431\u0430\u0439\u0442 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439, \u0435\u0441\u043b\u0438 \u043d\u0430 <strong>DC<\/strong> \u043d\u0438\u0437\u043a\u0438\u0439 \u0441\u0438\u0433\u043d\u0430\u043b. \u0415\u0441\u043b\u0438 \u043d\u0430 <strong>DC<\/strong> \u0432\u044b\u0441\u043e\u043a\u0438\u0439 \u0441\u0438\u0433\u043d\u0430\u043b, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0441\u0447\u0438\u0442\u0430\u0442\u044c\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0440\u0430\u043d\u0435\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b.<\/p>\n<p>  \u0412 \u0446\u0435\u043b\u043e\u043c \u043f\u043e\u0442\u043e\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<ol>\n<li>\u041f\u043e\u0434\u0430\u0451\u043c \u043d\u0430 <strong>DC<\/strong> \u043d\u0438\u0437\u043a\u0438\u0439 \u0441\u0438\u0433\u043d\u0430\u043b<\/li>\n<li>\u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043e\u0434\u0438\u043d \u0431\u0430\u0439\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u044b<\/li>\n<li>\u041f\u043e\u0434\u0430\u0451\u043c \u043d\u0430 <strong>DC<\/strong> \u0432\u044b\u0441\u043e\u043a\u0438\u0439 \u0441\u0438\u0433\u043d\u0430\u043b<\/li>\n<li>\u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u043e\u043b\u044c \u0438\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u0431\u0430\u0439\u0442\u043e\u0432, \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b<\/li>\n<li>\u041f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u043c \u044d\u0442\u0430\u043f\u044b 1-4<\/li>\n<\/ol>\n<p>  \u0417\u0434\u0435\u0441\u044c \u043d\u0430\u0448 \u043b\u0443\u0447\u0448\u0438\u0439 \u0434\u0440\u0443\u0433 \u2014 <a href=\"https:\/\/www.crystalfontz.com\/controllers\/Ilitek\/ILI9341\/142\" rel=\"nofollow\">\u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f ILI9341<\/a>. \u0412 \u043d\u0435\u0439 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u044b \u0432\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u0438\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/68d\/8d8\/09c\/68d8d809ceb9446142cd5c77bb78d0e2.png\"><\/div>\n<p>  \u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0431\u0435\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u2014 <strong>Display ON<\/strong>. \u0411\u0430\u0439\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0440\u0430\u0432\u0435\u043d <strong>0x29<\/strong>, \u043d\u043e \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/35a\/4e0\/446\/35a4e04466c22aa6746fe441f345c02f.png\"><\/div>\n<p>  \u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u2014 <strong>Column Address Set<\/strong>. \u0411\u0430\u0439\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0440\u0430\u0432\u0435\u043d <strong>0x2A<\/strong>, \u043d\u043e \u0434\u043b\u044f \u043d\u0435\u0451 \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0447\u0435\u0442\u044b\u0440\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430. \u0427\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443, \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u0430\u0442\u044c \u043d\u0430 <strong>DC<\/strong> \u043d\u0438\u0437\u043a\u0438\u0439 \u0441\u0438\u0433\u043d\u0430\u043b, \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c <strong>0x2A<\/strong>, \u043f\u043e\u0434\u0430\u0442\u044c \u043d\u0430 <strong>DC<\/strong> \u0432\u044b\u0441\u043e\u043a\u0438\u0439 \u0441\u0438\u0433\u043d\u0430\u043b, \u0430 \u0437\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0431\u0430\u0439\u0442\u044b \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432.<\/p>\n<p>  \u0421\u0430\u043c\u0438 \u043a\u043e\u0434\u044b \u043a\u043e\u043c\u0430\u043d\u0434 \u0437\u0430\u0434\u0430\u043d\u044b \u0432 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0438.<\/p>\n<pre><code class=\"cpp\">typedef enum { \tSOFTWARE_RESET = 0x01u, \tSLEEP_OUT = 0x11u, \tDISPLAY_ON = 0x29u, \tCOLUMN_ADDRESS_SET = 0x2Au, \tPAGE_ADDRESS_SET = 0x2Bu, \tMEMORY_WRITE = 0x2Cu, \tMEMORY_ACCESS_CONTROL = 0x36u, \tPIXEL_FORMAT_SET = 0x3Au, } CommandCode;<\/code><\/pre>\n<p>  \u0412\u043c\u0435\u0441\u0442\u043e \u043d\u0435\u0433\u043e \u043c\u044b \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441 (<strong>#define SOFTWARE_RESET (0x01u)<\/strong>), \u043d\u043e \u043e\u043d\u0438 \u043d\u0435 \u0438\u043c\u0435\u044e\u0442 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0432 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0435 \u0438 \u0443 \u043d\u0438\u0445 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438. \u0422\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b integer, \u043a\u0430\u043a \u043c\u044b \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u043b\u0438 \u0441 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430\u043c\u0438 GPIO, \u043d\u043e \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f enum \u043c\u044b \u0441 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0432\u0437\u0433\u043b\u044f\u0434\u0430 \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u043b\u0438 \u0447\u043b\u0435\u043d\u0443 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b: \u043e\u043d\u0438 \u0438\u043c\u0435\u044e\u0442 \u0442\u0438\u043f <strong>CommandCode<\/strong>. \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u0431\u044b\u0442\u044c \u0441\u044b\u0440\u044b\u0435 <strong>uint8_t<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0433\u043e\u0432\u043e\u0440\u044f\u0442 \u0447\u0438\u0442\u0430\u044e\u0449\u0435\u043c\u0443 \u043a\u043e\u0434 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0443.<\/p>\n<h3>\u0417\u0430\u043f\u0443\u0441\u043a<\/h3>\n<p>  \u0412\u043e \u0432\u0440\u0435\u043c\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434, \u0447\u0442\u043e\u0431\u044b \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c. \u041a\u0430\u0436\u0434\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0438\u043c\u0435\u0435\u0442 \u0431\u0430\u0439\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u043d\u0430\u0437\u043e\u0432\u0451\u043c <strong>Command Code<\/strong>.<\/p>\n<p>  \u041c\u044b \u0437\u0430\u0434\u0430\u0434\u0438\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u0438\u0445 \u043c\u0430\u0441\u0441\u0438\u0432.<\/p>\n<pre><code class=\"cpp\">typedef struct { \tCommandCode code; \tuint8_t parameters[15]; \tuint8_t length; } StartupCommand;<\/code><\/pre>\n<p>  <\/p>\n<ul>\n<li><strong>code<\/strong> \u2014 \u044d\u0442\u043e \u043a\u043e\u0434 \u043a\u043e\u043c\u0430\u043d\u0434\u044b.<\/li>\n<li><strong>parameters<\/strong> \u2014 \u044d\u0442\u043e \u043c\u0430\u0441\u0441\u0438\u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u044b (\u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u0435\u0441\u0442\u044c). \u042d\u0442\u043e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 15, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0432\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u043d\u0430\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u043e\u0441\u0442\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u043d\u0430\u043c \u043d\u0435 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u0432\u043e\u043b\u043d\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b.<\/li>\n<li><strong>length<\/strong> \u2014 \u044d\u0442\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 <strong>parameters<\/strong>.<\/li>\n<\/ul>\n<p>  \u041f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u0434\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u043c\u0430\u043d\u0434 \u0437\u0430\u043f\u0443\u0441\u043a\u0430.<\/p>\n<pre><code class=\"cpp\">StartupCommand gStartupCommands[] = { \t\/\/ Reset to defaults \t{ \t\tSOFTWARE_RESET, \t\t{}, \t\t0 \t},  \t\/\/ Landscape Mode \t\/\/ Top-Left Origin \t\/\/ BGR Panel \t{ \t\tMEMORY_ACCESS_CONTROL, \t\t{0x20 | 0xC0 | 0x08}, \t\t1 \t},  \t\/\/ 16 bits per pixel \t{ \t\tPIXEL_FORMAT_SET, \t\t{0x55}, \t\t1 \t},  \t\/\/ Exit sleep mode \t{ \t\tSLEEP_OUT, \t\t{}, \t\t0 \t},  \t\/\/ Turn on the display \t{ \t\tDISPLAY_ON, \t\t{}, \t\t0 \t}, };<\/code><\/pre>\n<p>  \u041a\u043e\u043c\u0430\u043d\u0434\u044b \u0431\u0435\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <strong>SOFTWARE_RESET<\/strong>, \u0437\u0430\u0434\u0430\u044e\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 <strong>parameters<\/strong> \u043a\u0430\u043a \u043f\u0443\u0441\u0442\u043e\u0439 (\u0442.\u0435. \u0441 \u043e\u0434\u043d\u0438\u043c\u0438 \u043d\u0443\u043b\u044f\u043c\u0438) \u0430 length \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u044e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 0. \u041a\u043e\u043c\u0430\u043d\u0434\u044b \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438 \u0437\u0430\u0434\u0430\u044e\u0442 length. \u0411\u044b\u043b\u043e \u0431\u044b \u0437\u0434\u043e\u0440\u043e\u0432\u043e, \u0435\u0441\u043b\u0438 \u0431\u044b \u043c\u043e\u0433\u043b\u0438 \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c length \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u0430 \u043d\u0435 \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0447\u0438\u0441\u043b\u0430\u043c\u0438 (\u043d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439, \u0435\u0441\u043b\u0438 \u043c\u044b \u043e\u0448\u0438\u0431\u0451\u043c\u0441\u044f \u0438\u043b\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u0441\u044f), \u043d\u043e \u044f \u043d\u0435 \u0441\u0447\u0438\u0442\u0430\u044e, \u0447\u0442\u043e \u044d\u0442\u043e \u0441\u0442\u043e\u0438\u0442 \u0442\u0440\u0443\u0434\u043e\u0432.<\/p>\n<p>  \u041f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u043a\u043e\u043c\u0430\u043d\u0434 \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u0438\u0437 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f, \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0434\u0432\u0443\u0445.<\/p>\n<p>  <strong>MEMORY_ACCESS_CONTROL<\/strong><\/p>\n<ul>\n<li><strong>Landscape Mode:<\/strong> \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432 \u0434\u0438\u0441\u043f\u043b\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0440\u0442\u0440\u0435\u0442\u043d\u0430\u044f \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u044f (240&#215;320), \u043d\u043e \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u043b\u044c\u0431\u043e\u043c\u043d\u0443\u044e (320&#215;240).<\/li>\n<li><strong>Top-Left Origin:<\/strong> \u043c\u044b \u0437\u0430\u0434\u0430\u0451\u043c \u0442\u043e\u0447\u043a\u0443 \u043d\u0430\u0447\u0430\u043b\u0430 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 (0,0) \u0432 \u043b\u0435\u0432\u043e\u043c \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u0443\u0433\u043b\u0443 \u0434\u0438\u0441\u043f\u043b\u0435\u044f, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043b\u043e\u0433\u0438\u0447\u043d\u0435\u0435 (\u0434\u043b\u044f \u043c\u0435\u043d\u044f) \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0432 \u0431\u0443\u0444\u0435\u0440 \u043a\u0430\u0434\u0440\u043e\u0432 \u0441\u0432\u0435\u0440\u0445\u0443 \u0432\u043d\u0438\u0437 \u0438 \u0441\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e.<\/li>\n<li><strong>BGR Panel:<\/strong> \u0434\u0438\u0441\u043f\u043b\u0435\u0439 \u043e\u0436\u0438\u0434\u0430\u0435\u0442, \u0447\u0442\u043e \u0446\u0432\u0435\u0442\u0430 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0431\u0443\u0434\u0443\u0442 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 BGR. \u042d\u0442\u043e \u0441\u0442\u0430\u043b\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u044f \u0437\u0430\u0434\u0430\u0432\u0430\u043b \u043f\u0438\u043a\u0441\u0435\u043b\u0438, \u0434\u0443\u043c\u0430\u044f, \u0447\u0442\u043e \u043e\u043d\u0438 \u043a\u0440\u0430\u0441\u043d\u044b\u0435, \u043d\u043e \u043e\u043d\u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u043b\u0438\u0441\u044c \u043a\u0430\u043a \u0441\u0438\u043d\u0438\u0435.<\/li>\n<\/ul>\n<p>  <strong>PIXEL_FORMAT_SET<\/strong><\/p>\n<ul>\n<li><strong>16 bits per pixel:<\/strong> \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c 16-\u0431\u0438\u0442\u043d\u044b\u0435 \u0446\u0432\u0435\u0442\u0430.<\/li>\n<\/ul>\n<p>  \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0434\u0440\u0443\u0433\u0438\u0445 \u043a\u043e\u043c\u0430\u043d\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0434\u043b\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0430\u0441\u043f\u0435\u043a\u0442\u043e\u0432, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0433\u0430\u043c\u043c\u044b. \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0432 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0441\u0430\u043c\u043e\u0433\u043e \u0416\u041a-\u0434\u0438\u0441\u043f\u043b\u0435\u044f (\u0430 \u043d\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 ILI9341), \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0443 \u043d\u0430\u0441 \u043d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0430. \u0415\u0441\u043b\u0438 \u043c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u044d\u0442\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u0438\u0441\u043f\u043b\u0435\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u0447\u0442\u043e \u0432\u043f\u043e\u043b\u043d\u0435 \u043d\u0430\u0441 \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442.<\/p>\n<p>  \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0432 \u043c\u0430\u0441\u0441\u0438\u0432 \u043a\u043e\u043c\u0430\u043d\u0434 \u0437\u0430\u043f\u0443\u0441\u043a\u0430, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u0447\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0438\u0445 \u043d\u0430 \u0434\u0438\u0441\u043f\u043b\u0435\u0439.<\/p>\n<p>  \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0430\u044f \u043d\u0430 \u0434\u0438\u0441\u043f\u043b\u0435\u0439 \u043e\u0434\u0438\u043d \u0431\u0430\u0439\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u044b. \u041d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0439\u0442\u0435, \u0447\u0442\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u043a\u043e\u043c\u0430\u043d\u0434 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u0430\u0442\u044c \u043d\u0430 <strong>DC<\/strong> \u043d\u0438\u0437\u043a\u0438\u0439 \u0441\u0438\u0433\u043d\u0430\u043b.<\/p>\n<pre><code class=\"cpp\">#define BYTES_TO_BITS(value) ( (value) * 8 )  void SendCommandCode(CommandCode code) { \tspi_transaction_t transaction = {};  \ttransaction.length = BYTES_TO_BITS(1); \ttransaction.tx_data[0] = (uint8_t)code; \ttransaction.flags = SPI_TRANS_USE_TXDATA;  \tgpio_set_level(LCD_PIN_DC, 0); \tspi_device_transmit(gSpiHandle, &amp;transaction); }<\/code><\/pre>\n<p>  IDF \u0438\u043c\u0435\u0435\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 <strong>spi_transaction_t<\/strong>, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c, \u043a\u043e\u0433\u0434\u0430 \u0445\u043e\u0442\u0438\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u043e \u0448\u0438\u043d\u0435 SPI. \u041c\u044b \u0437\u043d\u0430\u0435\u043c, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u0438\u0442 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u0441\u0430\u043c\u0443 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443.<\/p>\n<p>  \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0438\u043b\u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043f\u043e\u043b\u0435\u0437\u043d\u0443\u044e \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443, \u0438\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044e\u044e struct <strong>tx_data<\/strong> \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u043c\u0435\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0440 \u0432\u0441\u0435\u0433\u043e \u0447\u0435\u0442\u044b\u0440\u0435 \u0431\u0430\u0439\u0442\u0430, \u043d\u043e \u0438\u0437\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u043e\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u043f\u0430\u043c\u044f\u0442\u0438. \u0415\u0441\u043b\u0438 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c <strong>tx_data<\/strong>, \u0442\u043e \u0434\u043e\u043b\u0436\u043d\u044b \u0437\u0430\u0434\u0430\u0442\u044c \u0444\u043b\u0430\u0433 <strong>SPI_TRANS_USE_TXDATA<\/strong>.<\/p>\n<p>  \u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435, \u043c\u044b \u043f\u043e\u0434\u0430\u0451\u043c \u043d\u0430 <strong>DC<\/strong> \u043d\u0438\u0437\u043a\u0438\u0439 \u0441\u0438\u0433\u043d\u0430\u043b, \u0441\u043e\u043e\u0431\u0449\u0430\u044e\u0449\u0438\u0439, \u0447\u0442\u043e \u044d\u0442\u043e \u043a\u043e\u0434 \u043a\u043e\u043c\u0430\u043d\u0434\u044b.<\/p>\n<pre><code class=\"cpp\">void SendCommandParameters(uint8_t* data, int length) { \tspi_transaction_t transaction = {};  \ttransaction.length = BYTES_TO_BITS(length); \ttransaction.tx_buffer = data; \ttransaction.flags = 0;  \tgpio_set_level(LCD_PIN_DC, 1); \tspi_device_transmit(SPIHANDLE, &amp;transaction); }<\/code><\/pre>\n<p>  \u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0431\u0443\u0444\u0435\u0440 (<strong>data<\/strong>) \u0438 \u043f\u043e\u0434\u0430\u0451\u043c \u043d\u0430 <strong>DC<\/strong> \u0432\u044b\u0441\u043e\u043a\u0438\u0439 \u0441\u0438\u0433\u043d\u0430\u043b, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c \u0434\u0438\u0441\u043f\u043b\u0435\u044e, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043c\u044b \u043d\u0435 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0444\u043b\u0430\u0433 <strong>SPI_TRANS_USE_TXDATA<\/strong>, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u0441\u0432\u043e\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0431\u0443\u0444\u0435\u0440.<\/p>\n<p>  \u0417\u0430\u0442\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430.<\/p>\n<pre><code class=\"cpp\">#define ARRAY_COUNT(value) ( sizeof(value) \/ sizeof(value[0]) )  int commandCount = ARRAY_COUNT(gStartupCommands);  for (int commandIndex = 0; commandIndex &lt; commandCount; ++commandIndex) { \tStartupCommand* command = &amp;gStartupCommands[commandIndex];  \tSendCommandCode(command-&gt;code);  \tif (command-&gt;length &gt; 0) \t{ \t\tSendCommandData(command-&gt;parameters, command-&gt;length); \t} }<\/code><\/pre>\n<p>  \u041c\u044b \u0438\u0442\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e \u043e\u0431\u0445\u043e\u0434\u0438\u043c \u043c\u0430\u0441\u0441\u0438\u0432 \u043a\u043e\u043c\u0430\u043d\u0434 \u0437\u0430\u043f\u0443\u0441\u043a\u0430, \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u044f \u043a\u043e\u0434 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u0430 \u0437\u0430\u0442\u0435\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b (\u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u0435\u0441\u0442\u044c).<\/p>\n<h3>\u041e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u043a\u0430\u0434\u0440\u0430<\/h3>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0438\u0441\u043f\u043b\u0435\u044f \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0443 \u043d\u0430 \u043d\u0451\u043c.<\/p>\n<pre><code class=\"cpp\">#define UPPER_BYTE_16(value) ( (value) &gt;&gt; 8u ) #define LOWER_BYTE_16(value) ( (value) &amp; 0xFFu )  void Odroid_DrawFrame(uint8_t* buffer) { \t\/\/ Set drawing window width to (0, LCD_WIDTH)     uint8_t drawWidth[] = { 0, 0, UPPER_BYTE_16(LCD_WIDTH), LOWER_BYTE_16(LCD_WIDTH) }; \tSendCommandCode(COLUMN_ADDRESS_SET); \tSendCommandParameters(drawWidth, ARRAY_COUNT(drawWidth));  \t\/\/ Set drawing window height to (0, LCD_HEIGHT)     uint8_t drawHeight[] = { 0, 0, UPPER_BYTE_16(LCD_HEIGHT), LOWER_BYTE_16(LCD_HEIGHT) }; \tSendCommandCode(PAGE_ADDRESS_SET); \tSendCommandParameters(drawHeight, ARRAY_COUNT(drawHeight));  \t\/\/ Send the buffer to the display \tSendCommandCode(MEMORY_WRITE); \tSendCommandParameters(buffer, LCD_WIDTH * LCD_HEIGHT * LCD_DEPTH); }<\/code><\/pre>\n<p>  ILI9341 \u0438\u043c\u0435\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0447\u0430\u0441\u0442\u0435\u0439 \u044d\u043a\u0440\u0430\u043d\u0430. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u043d\u0430\u043c \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c, \u0435\u0441\u043b\u0438 \u043c\u044b \u0437\u0430\u043c\u0435\u0442\u0438\u043c \u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u043a\u0430\u0434\u0440\u043e\u0432. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0432\u0448\u0438\u0435\u0441\u044f \u0447\u0430\u0441\u0442\u0438 \u044d\u043a\u0440\u0430\u043d\u0430, \u043d\u043e \u043f\u043e\u043a\u0430 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043d\u043e\u0432\u043e \u043f\u0435\u0440\u0435\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0432\u0435\u0441\u044c \u044d\u043a\u0440\u0430\u043d.<\/p>\n<p>  \u0414\u043b\u044f \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u043a\u0430\u0434\u0440\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u043e\u043a\u043d\u0430 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <strong>COLUMN_ADDRESS_SET<\/strong> \u0441 \u0448\u0438\u0440\u0438\u043d\u043e\u0439 \u043e\u043a\u043d\u0430 \u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <strong>PAGE_ADDRESS_SET<\/strong> \u0441 \u0432\u044b\u0441\u043e\u0442\u043e\u0439 \u043e\u043a\u043d\u0430. \u041a\u0430\u0436\u0434\u0430\u044f \u0438\u0437 \u043a\u043e\u043c\u0430\u043d\u0434 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0447\u0435\u0442\u044b\u0440\u0435 \u0431\u0430\u0439\u0442\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u043e\u043a\u043d\u043e, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0443.<\/p>\n<p>  <strong>UPPER_BYTE_16<\/strong> \u0438 <strong>LOWER_BYTE_16<\/strong> \u2014 \u044d\u0442\u043e \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u044b \u0434\u043b\u044f \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f \u0441\u0442\u0430\u0440\u0448\u0435\u0433\u043e \u0438 \u043c\u043b\u0430\u0434\u0448\u0435\u0433\u043e \u0431\u0430\u0439\u0442\u0430 \u0438\u0437 16-\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u044d\u0442\u0438\u0445 \u043a\u043e\u043c\u0430\u043d\u0434 \u0442\u0440\u0435\u0431\u0443\u044e\u0442, \u0447\u0442\u043e\u0431\u044b \u043c\u044b \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u043b\u0438 16-\u0431\u0438\u0442\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u0434\u0432\u0430 8-\u0431\u0438\u0442\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0430\u043a \u043c\u044b \u0438 \u0434\u0435\u043b\u0430\u0435\u043c.<\/p>\n<p>  \u041e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <strong>MEMORY_WRITE<\/strong> \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u043e\u0439 \u0434\u0438\u0441\u043f\u043b\u0435\u044e \u0437\u0430 \u0440\u0430\u0437 \u0432\u0441\u0435\u0445 153 600 \u0431\u0430\u0439\u0442 \u0431\u0443\u0444\u0435\u0440\u0430 \u043a\u0430\u0434\u0440\u043e\u0432.<\/p>\n<p>  \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0431\u0443\u0444\u0435\u0440\u0430 \u043a\u0430\u0434\u0440\u043e\u0432 \u0434\u0438\u0441\u043f\u043b\u0435\u044e:<\/p>\n<ul>\n<li>\u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0435\u0449\u0451 \u043e\u0434\u043d\u0443 \u0437\u0430\u0434\u0430\u0447\u0443 FreeRTOS (task), \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0443\u044e \u0437\u0430 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439 SPI.<\/li>\n<li>\u041c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u0430\u0434\u0440 \u043d\u0435 \u0432 \u043e\u0434\u043d\u043e\u0439, \u0430 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f\u0445.<\/li>\n<li>\u041c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0443\u044e \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u044b \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u0435\u043c \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0443, \u0430 \u0437\u0430\u0442\u0435\u043c \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438.<\/li>\n<li>\u041c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a\u043e\u0435-\u043d\u0438\u0431\u0443\u0434\u044c \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0435 \u0438\u0437 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432.<\/li>\n<\/ul>\n<p>  \u041f\u043e\u043a\u0430 \u043c\u044b \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c: \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0435\u0439 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0435\u0439. \u041f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 <strong>DrawFrame<\/strong> \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u043d\u0430 \u0434\u0438\u0441\u043f\u043b\u0435\u0439 \u0438 \u043d\u0430\u0448\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430. \u0415\u0441\u043b\u0438 \u043f\u043e\u0437\u0436\u0435 \u043c\u044b \u0432\u044b\u044f\u0441\u043d\u0438\u043c, \u0447\u0442\u043e \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0445\u043e\u0440\u043e\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u043a\u0430\u0434\u0440\u043e\u0432 \u043f\u0440\u0438 \u0442\u0430\u043a\u043e\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u0435, \u0442\u043e \u0432\u0435\u0440\u043d\u0451\u043c\u0441\u044f \u043a \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435.<\/p>\n<h3>RGB565 \u0438 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0430\u0439\u0442\u043e\u0432<\/h3>\n<p>  \u041e\u0431\u044b\u0447\u043d\u044b\u0439 \u0434\u0438\u0441\u043f\u043b\u0435\u0439 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u043d\u0438\u0442\u043e\u0440 \u0432\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430) \u0438\u043c\u0435\u0435\u0442 \u0431\u0438\u0442\u043e\u0432\u0443\u044e \u0433\u043b\u0443\u0431\u0438\u043d\u0443 24 \u0431\u0438\u0442\u0430 (1,6 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u0430 \u0446\u0432\u0435\u0442\u043e\u0432): \u043f\u043e 8 \u0431\u0438\u0442 \u043d\u0430 \u043a\u0440\u0430\u0441\u043d\u044b\u0439, \u0437\u0435\u043b\u0451\u043d\u044b\u0439 \u0438 \u0441\u0438\u043d\u0438\u0439. \u041f\u0438\u043a\u0441\u0435\u043b\u044c \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0430\u043c\u044f\u0442\u044c \u043a\u0430\u043a <strong>RRRRRRRRGGGGGGGGBBBBBBBB<\/strong>.<\/p>\n<p>  \u0416\u041a-\u0434\u0438\u0441\u043f\u043b\u0435\u0439 Odroid \u0438\u043c\u0435\u0435\u0442 \u0431\u0438\u0442\u043e\u0432\u0443\u044e \u0433\u043b\u0443\u0431\u0438\u043d\u0443 16 \u0431\u0438\u0442 (65 \u0442\u044b\u0441\u044f\u0447 \u0446\u0432\u0435\u0442\u043e\u0432): 5 \u0431\u0438\u0442 \u043a\u0440\u0430\u0441\u043d\u043e\u0433\u043e, 6 \u0431\u0438\u0442 \u0437\u0435\u043b\u0451\u043d\u043e\u0433\u043e \u0438 5 \u0431\u0438\u0442 \u0441\u0438\u043d\u0435\u0433\u043e. \u041f\u0438\u043a\u0441\u0435\u043b\u044c \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0430\u043c\u044f\u0442\u044c \u043a\u0430\u043a <strong>RRRRRGGGGGGBBBBB<\/strong>. \u042d\u0442\u043e\u0442 \u0444\u043e\u0440\u043c\u0430\u0442 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <strong>RGB565<\/strong>.<\/p>\n<pre><code class=\"cpp\">#define SWAP_ENDIAN_16(value) ( (((value) &amp; 0xFFu) &lt;&lt; 8u) | ((value) &gt;&gt; 8u)  ) #define RGB565(red, green, blue) ( SWAP_ENDIAN_16( ((red) &lt;&lt; 11u) | ((green) &lt;&lt; 5u) | (blue) ) )<\/code><\/pre>\n<p>  \u0417\u0430\u0434\u0430\u0434\u0438\u043c \u043c\u0430\u043a\u0440\u043e\u0441, \u0441\u043e\u0437\u0434\u0430\u044e\u0449\u0438\u0439 \u0446\u0432\u0435\u0442 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 RGB565. \u0411\u0443\u0434\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0435\u043c\u0443 \u0431\u0430\u0439\u0442 \u043a\u0440\u0430\u0441\u043d\u043e\u0433\u043e, \u0431\u0430\u0439\u0442 \u0437\u0435\u043b\u0451\u043d\u043e\u0433\u043e \u0438 \u0431\u0430\u0439\u0442 \u0441\u0438\u043d\u0435\u0433\u043e. \u041e\u043d \u0432\u043e\u0437\u044c\u043c\u0451\u0442 \u043f\u044f\u0442\u044c \u0441\u0442\u0430\u0440\u0448\u0438\u0445 \u0431\u0438\u0442 \u043a\u0440\u0430\u0441\u043d\u043e\u0433\u043e, \u0448\u0435\u0441\u0442\u044c \u0441\u0442\u0430\u0440\u0448\u0438\u0445 \u0431\u0438\u0442 \u0437\u0435\u043b\u0451\u043d\u043e\u0433\u043e \u0438 \u043f\u044f\u0442\u044c \u0441\u0442\u0430\u0440\u0448\u0438\u0445 \u0431\u0438\u0442 \u0441\u0438\u043d\u0435\u0433\u043e. \u041c\u044b \u0432\u044b\u0431\u0440\u0430\u043b\u0438 \u0441\u0442\u0430\u0440\u0448\u0438\u0435 \u0431\u0438\u0442\u044b, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u0447\u0435\u043c \u043c\u043b\u0430\u0434\u0448\u0438\u0435.<\/p>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e ESP32 \u0445\u0440\u0430\u043d\u0438\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Endianness\" rel=\"nofollow\">Little Endian<\/a>, \u0442\u043e \u0435\u0441\u0442\u044c \u0432 \u043d\u0438\u0436\u043d\u0435\u043c \u0430\u0434\u0440\u0435\u0441\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043d\u0430\u0438\u043c\u0435\u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0438\u043c\u044b\u0439 \u0431\u0430\u0439\u0442.<\/p>\n<p>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, 32-\u0431\u0438\u0442\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <strong>[0xDE 0xAD 0xBE 0xEF]<\/strong> \u0431\u0443\u0434\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043a\u0430\u043a <strong>[0xEF 0xBE 0xAD 0xDE]<\/strong>. \u041f\u0440\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u0434\u0438\u0441\u043f\u043b\u0435\u0439 \u044d\u0442\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0430\u0438\u043c\u0435\u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0438\u043c\u044b\u0439 \u0431\u0430\u0439\u0442 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043f\u0435\u0440\u0432\u044b\u043c, \u0430 \u0416\u041a-\u0434\u0438\u0441\u043f\u043b\u0435\u0439 \u043e\u0436\u0438\u0434\u0430\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u0435\u0440\u0432\u044b\u043c \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0437\u043d\u0430\u0447\u0438\u043c\u044b\u0439 \u0431\u0430\u0439\u0442.<\/p>\n<p>  \u0417\u0430\u0434\u0430\u0434\u0438\u043c \u043c\u0430\u043a\u0440\u043e\u0441 <strong>SWAP_ENDIAN_16<\/strong> \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u044b \u0431\u0430\u0439\u0442 \u043c\u0435\u0441\u0442\u0430\u043c\u0438 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0435\u0433\u043e \u0432 \u043c\u0430\u043a\u0440\u043e\u0441\u0435 <strong>RGB565<\/strong>.<\/p>\n<p>  \u0412\u043e\u0442 \u043a\u0430\u043a \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u0442\u0440\u0451\u0445 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0446\u0432\u0435\u0442\u043e\u0432 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 RGB565 \u0438 \u043a\u0430\u043a \u043e\u043d\u0438 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 ESP32, \u0435\u0441\u043b\u0438 \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0431\u0430\u0439\u0442\u043e\u0432.<\/p>\n<p>  <strong>\u041a\u0440\u0430\u0441\u043d\u044b\u0439<\/strong><\/p>\n<p>  11111|000000|00000?-&gt; 11111000 00000000 -&gt; 00000000 11111000<\/p>\n<p>  <strong>\u0417\u0435\u043b\u0451\u043d\u044b\u0439<\/strong><\/p>\n<p>  00000|111111|00000?-&gt; 00000111 11100000 -&gt; 11100000 00000111<\/p>\n<p>  <strong>\u0421\u0438\u043d\u0438\u0439<\/strong><\/p>\n<p>  00000|000000|11111?-&gt; 00000000 00011111 -&gt; 00011111 00000000<\/p>\n<h3>\u0414\u0435\u043c\u043e<\/h3>\n<p>  \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0434\u0435\u043c\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0416\u041a-\u0434\u0438\u0441\u043f\u043b\u0435\u0439 \u0432 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438. \u0412 \u043d\u0430\u0447\u0430\u043b\u0435 \u043a\u0430\u0434\u0440\u0430 \u043e\u043d\u043e \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u0431\u0443\u0444\u0435\u0440 \u043a\u0430\u0434\u0440\u043e\u0432 \u043d\u0430 \u0447\u0451\u0440\u043d\u044b\u0439 \u0446\u0432\u0435\u0442 \u0438 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u0442 \u043a\u0432\u0430\u0434\u0440\u0430\u0442 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 50&#215;50. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c \u043a\u0432\u0430\u0434\u0440\u0430\u0442 \u043a\u0440\u0435\u0441\u0442\u043e\u0432\u0438\u043d\u043e\u0439 \u0438 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0435\u0433\u043e \u0446\u0432\u0435\u0442 \u043a\u043d\u043e\u043f\u043a\u0430\u043c\u0438 <strong>A<\/strong>, <strong>B<\/strong> \u0438 <strong>Start<\/strong>.<\/p>\n<pre><code class=\"cpp\">void app_main(void) { \tOdroid_InitializeInput(); \tOdroid_InitializeDisplay();  \tESP_LOGI(LOG_TAG, &quot;Odroid initialization complete - entering main loop&quot;);  \tuint16_t* framebuffer = (uint16_t*)heap_caps_malloc(320 * 240 * 2, MALLOC_CAP_DMA); \tassert(framebuffer);  \tint x = 0; \tint y = 0;  \tuint16_t color = 0xffff;  \tfor (;;) \t{ \t\tmemset(framebuffer, 0, 320 * 240 * 2);  \t\tOdroid_Input input = Odroid_PollInput();  \t\tif (input.left) { x -= 10; } \t\telse if (input.right) { x += 10; }  \t\tif (input.up) { y -= 10; } \t\telse if (input.down) { y += 10; }  \t\tif (input.a) { color = RGB565(0xff, 0, 0); } \t\telse if (input.b) { color = RGB565(0, 0xff, 0); } \t\telse if (input.start) { color = RGB565(0, 0, 0xff); }  \t\tfor (int row = y; row &lt; y + 50; ++row) \t\t{ \t\t\tfor (int col = x; col &lt; x + 50; ++col) \t\t\t{ \t\t\t\tframebuffer[320 * row + col] = color; \t\t\t} \t\t}  \t\tOdroid_DrawFrame(framebuffer); \t}  \t\/\/ Should never get here \tesp_restart(); }<\/code><\/pre>\n<p>  \u041c\u044b \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u0431\u0443\u0444\u0435\u0440 \u043a\u0430\u0434\u0440\u043e\u0432 \u043f\u043e \u043f\u043e\u043b\u043d\u043e\u043c\u0443 \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u0434\u0438\u0441\u043f\u043b\u0435\u044f: 320 x 240, \u0434\u0432\u0430 \u0431\u0430\u0439\u0442\u0430 \u043d\u0430 \u043f\u0438\u043a\u0441\u0435\u043b\u044c (16-\u0431\u0438\u0442\u043d\u044b\u0439 \u0446\u0432\u0435\u0442). \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c <strong>heap_caps_malloc<\/strong>, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0431\u044b\u043b \u0432\u044b\u0434\u0435\u043b\u0435\u043d \u0432 \u043f\u0430\u043c\u044f\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439 SPI \u0441 <strong>Direct Memory Access (DMA)<\/strong>. DMA \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438 SPI \u0438\u043c\u0435\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0431\u0443\u0444\u0435\u0440\u0443 \u043a\u0430\u0434\u0440\u043e\u0432 \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0443\u0447\u0430\u0441\u0442\u0438\u044f \u0426\u041f. \u0411\u0435\u0437 DMA \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 SPI \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/p>\n<p>  \u041c\u044b \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438, \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0435, \u0447\u0442\u043e \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u043d\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0437\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0430\u043c\u0438 \u044d\u043a\u0440\u0430\u043d\u0430.<\/p>\n<div class=\"oembed\">\n<div>\n<div style=\"left: 0; width: 100%; height: 0; position: relative; padding-bottom: 56.25%;\"><video controls style=\"top: 0; left: 0; width: 100%; height: 100%; position: absolute;\">Your browser does not support HTML5 video.<source src=\"https:\/\/austinmorlan.com\/posts\/embedded_game_programming_3\/media\/demo.mp4\" type=\"video\/mp4\"><\/source><\/video><\/div>\n<\/div>\n<\/div>\n<p>  \u0417\u0430\u043c\u0435\u0442\u0435\u043d \u0441\u0438\u043b\u044c\u043d\u044b\u0439 \u0442\u0438\u0440\u0438\u043d\u0433. \u0412 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0442\u0438\u0440\u0438\u043d\u0433\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0431\u0443\u0444\u0435\u0440\u043e\u0432. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438 \u0434\u0432\u043e\u0439\u043d\u043e\u0439 \u0431\u0443\u0444\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u0431\u0443\u0444\u0435\u0440\u0430: \u043f\u0435\u0440\u0435\u0434\u043d\u0438\u0439 \u0438 \u0437\u0430\u0434\u043d\u0438\u0439 \u0431\u0443\u0444\u0435\u0440\u044b. \u041f\u043e\u043a\u0430 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0434\u043d\u0438\u0439 \u0431\u0443\u0444\u0435\u0440, \u0437\u0430\u043f\u0438\u0441\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f <br \/>  \u0432 \u0437\u0430\u0434\u043d\u0438\u0439. \u0417\u0430\u0442\u0435\u043c \u043e\u043d\u0438 \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u043c\u0435\u0441\u0442\u0430\u043c\u0438 \u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442\u0441\u044f.<\/p>\n<p>  \u0423 ESP32 \u043d\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u041e\u0417\u0423 \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438 DMA \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0432\u0443\u0445 \u0431\u0443\u0444\u0435\u0440\u043e\u0432 \u043a\u0430\u0434\u0440\u043e\u0432 (4 \u041c\u0411 \u0432\u043d\u0435\u0448\u043d\u0435\u0439 SPI RAM, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 DMA), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044d\u0442\u043e\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442.<\/p>\n<p>  \u0423 ILI9341 \u0435\u0441\u0442\u044c \u0441\u0438\u0433\u043d\u0430\u043b (<strong>TE<\/strong>), \u0441\u043e\u043e\u0431\u0449\u0430\u044e\u0449\u0438\u0439, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 <strong>VBLANK<\/strong>, \u0447\u0442\u043e\u0431\u044b \u043c\u044b \u043c\u043e\u0433\u043b\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u044c \u043d\u0430 \u0434\u0438\u0441\u043f\u043b\u0435\u0439, \u043f\u043e\u043a\u0430 \u043e\u043d \u043d\u0435 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f. \u041d\u043e \u0443 Odroid (\u0438\u043b\u0438 \u0443 \u043c\u043e\u0434\u0443\u043b\u044f \u0434\u0438\u0441\u043f\u043b\u0435\u044f) \u044d\u0442\u043e\u0442 \u0441\u0438\u0433\u043d\u0430\u043b \u043d\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d, \u0442\u0430\u043a \u0447\u0442\u043e \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a \u043d\u0435\u043c\u0443 \u0434\u043e\u0441\u0442\u0443\u043f.<\/p>\n<p>  \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043c\u044b \u0441\u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u043d\u0430\u0439\u0442\u0438 \u0434\u043e\u0441\u0442\u043e\u0439\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043d\u043e \u043f\u043e\u043a\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u044d\u0442\u0438\u043c \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0430\u0448\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u043f\u0438\u043a\u0441\u0435\u043b\u0438 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d.<\/p>\n<h3>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434<\/h3>\n<p>  \u0412\u0435\u0441\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 <a href=\"https:\/\/code.austinmorlan.com\/austin\/embedded-game-programming\" rel=\"nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<h3>\u0421\u0441\u044b\u043b\u043a\u0438<\/h3>\n<p>  <\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/hardkernel\/ODROID-GO\/blob\/master\/Documents\/ODROID-GO_REV0.1_20180518.pdf\" rel=\"nofollow\">Odroid Go Schematic<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/OtherCrashOverride\/go-play\/blob\/master\/odroid-go-common\/components\/odroid\/odroid_display.c\" rel=\"nofollow\">Go-Play<\/a><\/li>\n<li><a href=\"https:\/\/docs.espressif.com\/projects\/esp-idf\/en\/v4.0\/api-reference\/peripherals\/spi_master.html\" rel=\"nofollow\">ESP-IDF Documentation: SPI Master<\/a><\/li>\n<li><a href=\"https:\/\/www.crystalfontz.com\/controllers\/Ilitek\/ILI9341\/142\" rel=\"nofollow\">LCD Driver Datasheet<\/a><\/li>\n<\/ul>\n<\/div>\n<p> \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\/post\/502528\/\"> https:\/\/habr.com\/ru\/post\/502528\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/502528\/\">\n<h2>\u0427\u0430\u0441\u0442\u044c 0: \u043c\u043e\u0442\u0438\u0432\u0430\u0446\u0438\u044f<\/h2>\n<p>  <\/p>\n<h3>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h3>\n<p>  \u042f \u0438\u0441\u043a\u0430\u043b \u0434\u043b\u044f \u0441\u0435\u0431\u044f \u0445\u043e\u0431\u0431\u0438-\u043f\u0440\u043e\u0435\u043a\u0442, \u043d\u0430\u0434 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432\u043d\u0435 \u043c\u043e\u0438\u0445 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u0432\u043b\u0435\u0447\u044c\u0441\u044f \u043e\u0442 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u0432 \u043c\u0438\u0440\u0435. \u041f\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u043c\u0435\u0440\u0435 \u043c\u0435\u043d\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0433\u0440, \u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u043c\u043d\u0435 \u043d\u0440\u0430\u0432\u044f\u0442\u0441\u044f embedded-\u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u0421\u0435\u0439\u0447\u0430\u0441 \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0432 \u0438\u0433\u0440\u043e\u0432\u043e\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u043d\u043e \u0440\u0430\u043d\u044c\u0448\u0435 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0437\u0430\u043d\u0438\u043c\u0430\u043b\u0441\u044f \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u043c\u0438. \u0425\u043e\u0442\u044f \u0432 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432 \u044f \u0440\u0435\u0448\u0438\u043b \u0441\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0442\u0435\u0437\u044e \u0438 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u0438\u043d\u0434\u0443\u0441\u0442\u0440\u0438\u044e \u0438\u0433\u0440, \u043c\u043d\u0435 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u0441 \u043d\u0438\u043c\u0438 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u0422\u0430\u043a \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u043d\u0435 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043e\u0431\u0430 \u0443\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f?<\/p>\n<h3>Odroid Go<\/h3>\n<p>  \u0423 \u043c\u0435\u043d\u044f \u0437\u0430\u0432\u0430\u043b\u044f\u043b\u0441\u044f <a href=\"https:\/\/wiki.odroid.com\/odroid_go\/odroid_go\" rel=\"nofollow\">Odroid Go<\/a>, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0431\u044b\u043b\u043e \u0431\u044b \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043f\u043e\u0438\u0433\u0440\u0430\u0442\u044c\u0441\u044f. \u0415\u0433\u043e \u044f\u0434\u0440\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f ESP32 \u2014 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0439 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0441\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u041c\u041a (SPI, I2C, GPIO, \u0442\u0430\u0439\u043c\u0435\u0440\u044b \u0438 \u0442.\u0434.), \u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u0438\u043c\u0435\u044e\u0449\u0438\u0439 WiFi \u0438 Bluetooth, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0435\u0433\u043e \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f IoT-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432.<\/p>\n<p>  Odroid Go \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u0435\u0442 ESP32 \u043a\u0443\u0447\u0435\u0439 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044f \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u0435\u0433\u043e \u0432 \u043f\u043e\u0440\u0442\u0430\u0442\u0438\u0432\u043d\u0443\u044e \u0438\u0433\u0440\u043e\u0432\u0443\u044e \u043c\u0430\u0448\u0438\u043d\u0443, \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044e\u0449\u0443\u044e Gameboy Color: \u0416\u041a-\u0434\u0438\u0441\u043f\u043b\u0435\u0439, \u0434\u0438\u043d\u0430\u043c\u0438\u043a, \u043a\u0440\u0435\u0441\u0442\u043e\u0432\u0438\u043d\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0434\u0432\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0438 \u0447\u0435\u0442\u044b\u0440\u0435 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u043d\u043e\u043f\u043a\u0438, \u0430\u043a\u043a\u0443\u043c\u0443\u043b\u044f\u0442\u043e\u0440 \u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0447\u0442\u0435\u043d\u0438\u044f SD-\u043a\u0430\u0440\u0442.<\/p>\n<p>  \u0412 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u043b\u044e\u0434\u0438 \u043f\u043e\u043a\u0443\u043f\u0430\u044e\u0442 Odroid Go \u0434\u043b\u044f <a href=\"https:\/\/github.com\/OtherCrashOverride\/go-play\" rel=\"nofollow\">\u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u043e\u0432<\/a> \u0441\u0442\u0430\u0440\u044b\u0445 8-\u0431\u0438\u0442\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c. \u0415\u0441\u043b\u0438 \u044d\u0442\u0430 \u0448\u0442\u0443\u043a\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u0430 \u044d\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u0440\u044b\u0435 \u0438\u0433\u0440\u044b, \u0442\u043e \u0441\u043f\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u0438 \u0441 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0438\u0433\u0440\u044b, \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u043e\u0439 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u043d\u0435\u0451.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/44b\/800\/42e\/44b80042e94aa2f2da9da2d2296461ad.jpg\"><\/div>\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-303975","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/303975","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=303975"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/303975\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=303975"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=303975"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=303975"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}