{"id":392381,"date":"2024-06-29T10:22:52","date_gmt":"2024-06-29T10:22:52","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=392381"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=392381","title":{"rendered":"<span>\u0421\u0440\u0435\u0434\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 VS Code \u043d\u0430 \u0422\u0412-\u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0435<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0420\u0435\u0448\u0438\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043e\u0431\u0437\u043e\u0440 \u043f\u0440\u043e\u0434\u0435\u043b\u0430\u043d\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e, \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e, \u0438\u0445 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432.<\/p>\n<p>\u041a\u0440\u0430\u0442\u043a\u043e \u043e\u043d\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<p>\u041c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0430-\u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0430 (\u0431\u044b\u043b\u0430 \u0441 \u0410\u043d\u0434\u0440\u043e\u0438\u0434\u043e\u043c), \u0432 \u043d\u0435\u0439 \u0437\u0430\u043f\u0443\u0449\u0435\u043d \u041b\u0438\u043d\u0443\u043a\u0441, \u0432 \u043d\u0435\u043c \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u0430 IDE Visual Studio Code, \u0432 \u043d\u0435\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 PlatfformIO. \u0412\u0441\u0435 \u044d\u0442\u043e \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u043f\u043e SSH \u0438 RDP. \u041a \u044d\u0442\u043e\u043c\u0443 \u043c\u0438\u043d\u0438-\u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0443 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u043f\u043b\u0430\u0442\u0430 STM32F4 discovery \u0447\u0435\u0440\u0435\u0437 ST-Link \u043d\u0430 \u0431\u043e\u0440\u0442\u0443, \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0438 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a, \u0430 \u0447\u0435\u0440\u0435\u0437 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043d\u0438\u043a USB-UART \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0442\u0441\u044f \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. \u0422\u0435\u0441\u0442\u043e\u0432\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0434\u043b\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0410\u0440\u0434\u0443\u0438\u043d\u043e.<\/p>\n<hr\/>\n<p>\u0415\u0441\u043b\u0438 \u0447\u0435\u0441\u0442\u043d\u043e, \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f, \u0432\u0438\u0434\u0438\u043c\u043e, \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u044d\u0442\u0430\u043f\u044b \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0441\u0435\u0431\u044f, \u0447\u0442\u043e\u0431\u044b \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438. \u0427\u0435\u0440\u0435\u0437 \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0438\u0437 \u0433\u043e\u043b\u043e\u0432\u044b \u0432\u0441\u0435 \u0432\u044b\u0442\u0435\u0441\u043d\u0438\u0442\u0441\u044f \u0441\u0432\u0435\u0436\u0438\u043c\u0438 \u0437\u0430\u0434\u0430\u0447\u0430\u043c\u0438 \u0438 \u0431\u0435\u0437 \u0442\u0432\u0435\u0440\u0434\u043e\u0439 \u043a\u043e\u043f\u0438\u0438 \u043d\u0438\u043a\u0430\u043a)<\/p>\n<p>\u0418\u0442\u0430\u043a, \u0443 \u043c\u0435\u043d\u044f \u0432 \u043d\u0430\u043b\u0438\u0447\u0438\u0438, \u0443\u0436\u0435 \u0433\u043e\u0434\u0430 2 \u043b\u0435\u0436\u0430\u043b\u0430 \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0430 X96Air, \u043f\u0440\u0438\u043a\u0443\u043f\u043b\u0435\u043d\u043d\u0430\u044f \u0432 \u0434\u0440\u0443\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u041a\u0438\u0442\u0430\u0435. \u041a\u0430\u043a-\u0442\u043e \u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b \u043d\u0430 \u043d\u0435\u0439 Armbian c \u043f\u0440\u043e\u0441\u0442\u043e\u0440\u043e\u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430, \u0438, \u0443\u0431\u0435\u0434\u0438\u0432\u0448\u0438\u0441\u044c \u0447\u0442\u043e \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043e\u0442\u043b\u043e\u0436\u0438\u043b \u0434\u043e \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f. <\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e, \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0432\u0440\u0435\u043c\u044f, \u0447\u0443\u0442\u043e\u043a \u0443\u0432\u043b\u0435\u043a\u0430\u044f\u0441\u044c \u0434\u043e\u043c\u0430\u0448\u043d\u0435\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u043d\u0430 \u0431\u0430\u0437\u0435 Home Assitant, \u043f\u043e\u0434\u0443\u043c\u0430\u043b, \u0430 \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 ESPHome \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0447\u0435\u043c-\u0442\u043e, \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u0441\u043f\u043e\u0441\u043e\u0431\u043b\u0435\u043d\u043d\u043e\u043c, \u0430 \u043d\u0435 \u043d\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u043a\u0435 \u0441 Ubuntu? <\/p>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435 Home Assitant \u043d\u0430 \u0431\u0430\u0437\u0435 Opange Pi3 LTS. \u041d\u043e \u043d\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 &#8212; \u044d\u0442\u043e \u043d\u0435 \u0434\u0435\u043b\u043e. \u0422\u043e\u0433\u0434\u0430 \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043d\u0430 \u043c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0430-\u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0435. \u041f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 SoC Amlogic S905X3, \u043f\u0430\u043c\u044f\u0442\u0438 4 \u0413\u0431. <\/p>\n<p>\u041e\u0431\u0440\u0430\u0437 armbian \u0431\u044b\u043b \u0432\u0437\u044f\u0442 \u0443 <a href=\"https:\/\/github.com\/ophub\/amlogic-s9xxx-armbian\/releases\" rel=\"noopener noreferrer nofollow\">\u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u043e\u0432<\/a>, \u0442\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u0447\u0442\u043e \u043c\u043e\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0435\u0441\u0442\u044c \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0445, \u043d\u0435 \u0442\u043e \u0447\u0442\u043e 2-3 \u0433\u043e\u0434\u0430 \u043d\u0430\u0437\u0430\u0434. \u0411\u044b\u043b \u0432\u044b\u0431\u0440\u0430\u043d \u043e\u0431\u0440\u0430\u0437 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u043f\u0440\u043e\u0448\u0438\u0442 \u043d\u0430 \u0444\u043b\u0435\u0448\u043a\u0443 (\u043f\u043e\u0437\u0436\u0435 \u043f\u0435\u0440\u0435\u0435\u0445\u0430\u043b \u043d\u0430 \u043a\u0430\u0440\u0442\u0443 \u043f\u0430\u043c\u044f\u0442\u0438 SD). \u0424\u0430\u0439\u043b\u044b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, \u0441\u0443\u0434\u044f \u043f\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044e, \u043f\u043e\u0445\u043e\u0434\u0438\u043b\u0438 2: meson-sm1-x96-air-gbit.dtb, meson-sm1-x96-air.dtb. \u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u0432 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0438 gbit \u043e\u0437\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u0438\u0434\u0438\u043c\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0433\u0438\u0433\u0430\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0430. \u041e\u0434\u043d\u0430\u043a\u043e \u0443 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u0441\u0435\u0442\u044c \u043d\u0430 \u0433\u0438\u0433\u0430\u0431\u0438\u0442\u0435, \u043d\u043e \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b wifi. \u0423 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442, \u043d\u0435 \u0431\u044b\u043b\u043e \u0432\u0438\u0434\u043d\u043e \u043f\u0440\u043e\u0432\u043e\u0434\u043d\u043e\u0433\u043e \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0430, \u043d\u043e \u0441 \u0431\u0435\u0441\u043f\u0440\u043e\u0432\u043e\u0434\u043d\u043e\u0439 \u0441\u0435\u0442\u044c\u044e \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043d\u0435 \u0431\u044b\u043b\u043e. \u041f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 \u0444\u0430\u0439\u043b\u044b, \u0438 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0433\u0438\u0433\u0430\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0430 \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0444\u0430\u0439\u043b, \u0442\u0449\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0431\u043b\u044e\u0434\u0430\u044f \u0432\u0441\u0435 \u0441\u0432\u044f\u0437\u0438 \u0441 \u0442\u0430\u0439\u043c\u0435\u0440\u0430\u043c\u0438, \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f\u043c\u0438 \u0438 \u043f\u043e\u0440\u0442\u0430\u043c\u0438 \u0432\/\u0432. \u0412 <a href=\"https:\/\/disk.yandex.ru\/d\/v6AA-ALftOKs4g\" rel=\"noopener noreferrer nofollow\">\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 <\/a>\u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043e\u0431\u0430 \u0432\u0438\u0434\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0441\u0435\u0442\u0438, \u043f\u0440\u0430\u0432\u0434\u0430 \u043f\u0440\u043e\u0432\u043e\u0434\u043d\u0430\u044f \u0441\u0435\u0442\u044c \u0440\u0443\u0433\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043e\u0434\u043d\u043e \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u043e \u0435\u0433\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438. \u0417\u0432\u0443\u043a \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b\u0441\u044f, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u041d\u0430\u0432\u0435\u0440\u043d\u043e\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u0444\u0430\u0439\u043b dtb, \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0432 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043d\u043e \u043c\u043d\u0435 \u0445\u0432\u0430\u0442\u0438\u043b\u043e \u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430.<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0443\u0436\u0435 \u043d\u0435 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e \u0430 \u0447\u0435\u0440\u0435\u0437 SSH, \u0447\u0442\u043e \u0438  \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e.<\/p>\n<p>\u0412\u0441\u0435 \u0431\u044b\u043b\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e apt, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d pip \u0434\u043b\u044f Python 3. \u0418 \u0443\u0436\u0435 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e esphome. \u041a\u0441\u0442\u0430\u0442\u0438, \u043d\u0430 \u044d\u0442\u043e\u043c \u043e\u0431\u0440\u0430\u0437\u0435 \u0432 \u0440\u043e\u0434\u043d\u043e\u043c \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0435 \u041f\u041e armbian-software \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c Home Assitant \u0438\u0437 \u0440\u043e\u0434\u043d\u043e\u0433\u043e \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u0430\u0440\u0438\u044f. \u0415\u0441\u043b\u0438 \u043a\u043e\u043c\u0443 \u044d\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u044f \u043d\u0435 \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b:<\/p>\n<details class=\"spoiler\">\n<summary>root@armbian: armbian-software<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"bash\">root@armbian:~# armbian-software [ STEPS ] Start selecting software [ Current system: ubuntu\/jammy ]... -------------------------------------------------------------- ID    NAME                      STATE           MANAGE -------------------------------------------------------------- 101   Docker                    not-installed   install 102   Portainer                 not-installed   install 103   Yacht                     not-installed   install 104   Transmission              not-installed   install 105   qBittorrent               not-installed   install 106   NextCloud                 not-installed   install 107   Jellyfin                  not-installed   install 108   HomeAssistant             not-installed   install 109   Kodbox                    not-installed   install 110   CouchPotato               not-installed   install 111   Sonarr                    not-installed   install 112   Radarr                    not-installed   install 113   Syncthing                 not-installed   install 114   FileBrowser               not-installed   install 115   Heimdall                  not-installed   install 116   Node-RED                  not-installed   install 117   Mosquitto                 not-installed   install 118   OpenWrt                   not-installed   install <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u0431\u044b\u043b \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d \u043e\u0434\u0438\u043d \u043a\u043e\u043d\u0444\u0438\u0433 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 esphome \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 yaml. \u041f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u0434\u043b\u044f \u043f\u043b\u0430\u0442\u044b ESP32. \u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 Python (pytz, tzdata, pillow) \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u043e\u0434\u0433\u0440\u0443\u0437\u043a\u0438 PlatformIO \u0432\u0441\u0435 \u043f\u0440\u043e\u0448\u043b\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u043e.<\/p>\n<p>\u0420\u0430\u0437 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c PlatformIO, \u0442\u043e \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043d\u0430 \u043d\u0435\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0430 \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u0435 STM32? \u0420\u0435\u0448\u0435\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c Visual Studio Code. \u041e\u0434\u043d\u0430\u043a\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0441\u0440\u0435\u0434\u0430. <\/p>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d xfce4. \u0421\u0443\u0434\u044f \u043f\u043e history: <br \/><code>apt-get install xorg lightdm xfce4<\/code><\/p>\n<p>\u0417\u0430\u0442\u0435\u043c xrdp:<br \/><code>apt-get install tightvncserver xrdp xorgxrdp<\/code><br \/><code>systemctl enable xrdp<\/code><br \/><code>systemctl start xrdp<\/code><\/p>\n<p>\u0420\u0435\u0436\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0431\u044b\u043b \u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043f\u043e \u0443\u043c\u043e\u0447\u0430\u043d\u0438\u044e multi-user.target. \u041d\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0435, \u043f\u0440\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438, \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043e\u0431\u043e\u043b\u043e\u0447\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u0435\u043a\u0441\u0442\u0435. \u041e\u0434\u043d\u0430\u043a\u043e, \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u0443 \u043d\u0430 \u043d\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 startxfce4. \u0417\u0430\u043c\u0435\u0447\u0435\u043d\u043e, \u0447\u0442\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u043e RDP \u0441\u043d\u0430\u0440\u0443\u0436\u0438 \u0438\u0434\u0435\u0442 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0438 \u0447\u0435\u0440\u0435\u0437 root \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u0447\u0435\u0440\u0435\u0437 \u043b\u044e\u0431\u043e\u0433\u043e \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e, \u043e\u0434\u043d\u0430\u043a\u043e \u0447\u0435\u0440\u0435\u0437 root \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u0443\u0441\u043e\u0440, \u0442\u0438\u043f\u0430 \u043a\u0430\u043a \u043f\u0440\u0438 \u0441\u0431\u043e\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438\u043b\u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438, \u0442\u043e\u0433\u0434\u0430 \u043a\u0430\u043a \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u043f\u0440\u0438\u0432\u0435\u043b\u0438\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432\u0441\u0435 \u043a\u0440\u0430\u0441\u0438\u0432\u043e, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0435\u043c\u0443 \u043f\u0440\u0430\u0432\u0430 root. \u041d\u0435 \u0441\u0442\u0430\u043b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f, \u043a\u0442\u043e \u0437\u043d\u0430\u0435\u0442 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u0432\u0435\u043b\u043a\u0430\u043c)<\/p>\n<p>\u0417\u0430\u0442\u0435\u043c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0430 \u043f\u043e <a href=\"https:\/\/code.visualstudio.com\/docs\/setup\/setup-overview\" rel=\"noopener noreferrer nofollow\">\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438<\/a> Visual Studio Code. \u042d\u0442\u043e \u0431\u044b\u043b\u0430 \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f (dpkg -i code_1.74.3-1673284080_arm64.deb). \u0412\u043d\u0443\u0442\u0440\u044c <a href=\"https:\/\/docs.platformio.org\/en\/latest\/integration\/ide\/vscode.html\" rel=\"noopener noreferrer nofollow\">\u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f PlatformIO<\/a>. \u0414\u043b\u044f \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u0433\u0440\u0443\u043f\u043f\u0443 root \u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u0435\u0430\u043d\u0441.<\/p>\n<p><code>sudo usermod -a -G root $USER<\/code><\/p>\n<p>\u0418\u0437 \u0437\u0430\u043a\u0440\u043e\u043c\u043e\u0432 \u0431\u044b\u043b\u0430 \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0430 \u043f\u043b\u0430\u0442\u0430 STM32F4 Discovery, \u043a\u0443\u043f\u043b\u0435\u043d\u043d\u0430\u044f \u0434\u043b\u044f \u043e\u043f\u044b\u0442\u043e\u0432 \u043b\u0435\u0442 5 \u043d\u0430\u0437\u0430\u0434, \u043d\u043e \u0443\u0434\u0430\u0432\u0430\u043b\u043e\u0441\u044c \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043d\u0443\u0436\u0434 \u043e\u0431\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u0434\u0435\u0448\u0435\u0432\u044b\u043c\u0438 \u0447\u0438\u043f\u0430\u043c\u0438, \u0447\u0442\u043e \u0438\u0437 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u043e \u0435\u0439 \u0434\u043e\u0436\u0438\u0442\u044c \u0441 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u043e\u0439 \u0434\u043e \u0441\u0435\u0433\u043e \u0434\u043d\u044f.<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u0430\u044f \u043f\u043e USB, \u043f\u043b\u0430\u0442\u0430 \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043b\u0430\u0441\u044c<\/summary>\n<div class=\"spoiler__content\">\n<p> <code>[  101.188080] usb 1-1.3: USB disconnect, device number 5<br \/> [  103.560000] usb 1-1.3: new full-speed USB device number 6 using xhci-hcd<br \/> [  103.774675] usb 1-1.3: New USB device found, idVendor=0483, idProduct=3748, bcdDevice= 1.00<br \/> [  103.779907] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3<br \/> [  103.787911] usb 1-1.3: Product: STM32 STLink<br \/> [  103.791388] usb 1-1.3: Manufacturer: STMicroelectronics<br \/> [  103.796559] usb 1-1.3: SerialNumber: I\u00ffr\\x06guTU\\x11'\\x01g<\/code><\/p>\n<\/div>\n<\/details>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043f\u0440\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u043c\u0438\u0433\u0430\u043b\u043a\u0438, \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0430\u044f \u0437\u0430\u043c\u0438\u043d\u043a\u0430, \u043d\u0435 \u043d\u0430\u0448\u0435\u043b\u0441\u044f \u043f\u043e\u0434 \u043d\u0443\u0436\u043d\u0443\u044e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 \u043d\u0430\u0431\u043e\u0440 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 toolchain: &#171;Error: Could not find the package with &#8216;platformio\/toolchain-gccarmnoneeabi @ ~1.90201.0&#8217; requirements for your system &#8216;linux_aarch64&#8242;&#187;. \u041a\u0430\u043a \u043f\u043e\u043d\u044f\u043b, \u043f\u043e\u0434 \u0442\u0430\u043a\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 \u0435\u0433\u043e \u043f\u043e\u0434 aarch64 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u043e. \u0417\u0430\u043c\u0435\u043d\u0438\u043b \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e, ~1.90201.0 \u043d\u0430 1.90301.0 \u0432 ststm32\/platform.json \u0438 <a href=\"http:\/\/platform.py\" rel=\"noopener noreferrer nofollow\">platform.py<\/a>. \u0422\u0430\u043a\u0436\u0435, \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e <a href=\"https:\/\/www.wolinlabs.com\/blog\/linux.stm32.discovery.gcc.html\" rel=\"noopener noreferrer nofollow\">\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f\u043c<\/a>, \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u043b \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043d\u043e\u0432\u043e\u043c\u0443 USB \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443:<\/p>\n<p>\u041d\u043e\u0432\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \/etc\/udev\/rules\/45-usb-stlink-v2.rules:<br \/>SUBSYSTEM==&#187;usb&#187;, ATTR{idVendor}==&#187;0483&#8243;, ATTR{idProduct}==&#187;3748&#8243;, MODE=&#187;0666&#8243;<br \/>systemctl restart udev<br \/>\u041d\u0430\u0434\u043e \u043f\u0435\u0440\u0435\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043b\u0430\u0442\u0443 Discovery.<\/p>\n<p>\u041c\u0438\u0433\u0430\u043b\u043a\u0430 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u043b\u0435\u043c, \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0438\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e, \u0443 \u043c\u0435\u043d\u044f \u043d\u0430 \u0444\u0440\u0430\u0439\u043c\u0432\u043e\u0440\u043a\u0435 \u0410\u0440\u0434\u0443\u0438\u043d\u043e:<\/p>\n<details class=\"spoiler\">\n<summary>main.cpp<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">#include &lt;Arduino.h>  void setup() {   \/\/ initialize LED digital pin as an output.   pinMode(LED_GREEN, OUTPUT);   pinMode(LED_ORANGE, OUTPUT);   pinMode(LED_RED, OUTPUT);   pinMode(LED_BLUE, OUTPUT); }  void loop() {   digitalWrite(LED_GREEN, HIGH);   delay(1000);   digitalWrite(LED_GREEN, LOW);   delay(1000);   digitalWrite(LED_BLUE, HIGH);   delay(1000);   digitalWrite(LED_BLUE, LOW);   delay(1000);   digitalWrite(LED_RED, HIGH);   delay(1000);   digitalWrite(LED_RED, LOW);   delay(1000);   digitalWrite(LED_ORANGE, HIGH);   delay(1000);   digitalWrite(LED_ORANGE, LOW);   delay(1000); }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041e\u0442\u043b\u0430\u0434\u043a\u0430 \u0442\u043e\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b97\/87c\/e47\/b9787ce479c8ec6992dd33a917137004.png\" width=\"648\" height=\"484\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b97\/87c\/e47\/b9787ce479c8ec6992dd33a917137004.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0430\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u043a \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0430\u043a\u0441\u0435\u043b\u0435\u0440\u043e\u043c\u0435\u0442\u0440 (\u0443 \u043c\u0435\u043d\u044f \u043d\u0430 \u043f\u043b\u0430\u0442\u0435 \u0431\u044b\u043b LIS3DSH). \u041f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0438\u0437\u0440\u044f\u0434\u043d\u043e \u043f\u043e\u0438\u0441\u043a\u0430\u0442\u044c \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0438 \u0441\u043e\u0431\u0440\u0430\u0442\u044c <a href=\"https:\/\/github.com\/maichaell\/STM32GEN_huaweiwx\/blob\/master\/STM32\/libraries\/BoardExamples\/examples\/Discovery407VG\/LIS3DSH_demo\/LIS3DSH_demo.ino\" rel=\"noopener noreferrer nofollow\">\u043d\u0430 \u044d\u0442\u043e\u0439 \u043e\u0441\u043d\u043e\u0432\u0435 <\/a>\u0441\u0432\u043e\u0439. \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0431\u0438\u0442 \u043f\u0440\u0438 \u0438\u043d\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u043c\u0438\u0433\u0430\u043d\u0438\u044f \u043b\u0430\u043c\u043f\u043e\u0447\u043a\u0430\u043c\u0438 \u043f\u0440\u0438 \u043e\u0442\u043a\u043b\u043e\u043d\u0435\u043d\u0438\u0438 x \u0438 y \u0441\u0432\u0435\u0440\u0445 \u043f\u0440\u0435\u0434\u0435\u043b\u043e\u0432 \u0438 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0439 \u0432\u044b\u0432\u043e\u0434 \u0432 USART \u043f\u043e\u0440\u0442. \u041f\u0440\u043e \u043d\u0435\u0433\u043e \u043d\u0438\u0436\u0435.<\/p>\n<details class=\"spoiler\">\n<summary>main.cpp:<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">#include &lt;Arduino.h> #include &lt;SPI.h> #include \"main.h\" #include &lt;HardwareSerial.h>  #define RD 0x80 #define WR 0x00  #define CTRL_REG3 0x23 #define CTRL_REG4 0x20 #define CTRL_REG5 0x24 #define STAT_REG  0x18  #define OUT_X_L 0x28 #define OUT_X_H 0x29 #define OUT_Y_L 0x2A #define OUT_Y_H 0x2B #define OUT_Z_L 0x2C #define OUT_Z_H 0x2D  #define WHO_AM_I 0x0F  #define CS_PIN PE3  int16_t ThresholdLow = -400; int16_t ThresholdHigh = 400; uint32_t sec, oldSec = 0;    HardwareSerial Serial3(PD9, PD8); \/\/ init USART3  void readReg(uint8_t addr, uint8_t* data) {   digitalWrite(CS_PIN, LOW);   uint8_t ret =SPI.transfer(addr|RD);      ret =SPI.transfer(0x00);      digitalWrite(CS_PIN, HIGH);    *data=ret; }  void printXYZ(int16_t* x, int16_t* y, int16_t* z) {   uint8_t id;   readReg(WHO_AM_I, &amp;id);    uint8_t stat;   readReg(STAT_REG, &amp;stat);   uint8_t xl;   readReg(OUT_X_L, &amp;xl);    uint8_t xh;   readReg(OUT_X_H, &amp;xh);    *x = (xh &lt;&lt; 8) | (xl);    uint8_t yl;   readReg(OUT_Y_L, &amp;yl);    uint8_t yh;   readReg(OUT_Y_H, &amp;yh);    *y = (yh &lt;&lt; 8) | (yl);    uint8_t zl;   readReg(OUT_Z_L, &amp;zl);    uint8_t zh;   readReg(OUT_Z_H, &amp;zh);    *z = (zh &lt;&lt; 8) | (zl);   }  void initSensor() {  uint8_t reg4, reg5;   temp = (uint16_t) (LIS3DSH_DATARATE_100 | LIS3DSH_XYZ_ENABLE);   temp |= (uint16_t) (LIS3DSH_SERIALINTERFACE_4WIRE | LIS3DSH_SELFTEST_NORMAL);   temp |= (uint16_t) (LIS3DSH_FULLSCALE_2 | LIS3DSH_BDU_Continuous_update);   temp |= (uint16_t) (LIS3DSH_FILTER_BW_50 &lt;&lt; 8);   reg4 = (uint8_t) (temp);   reg5 = (uint8_t) (temp >> 8);   Serial3.println(\"init LIS3DSH Sensor\");   SPI.begin();    SPI.beginTransaction(SPISettings(8000000, MSBFIRST, SPI_MODE0));   digitalWrite(CS_PIN, LOW);   uint8_t ret =SPI.transfer(CTRL_REG4);    digitalWrite(CS_PIN, HIGH);   digitalWrite(CS_PIN, LOW);   ret =SPI.transfer(CTRL_REG5);    ret =SPI.transfer(reg5);     digitalWrite(CS_PIN, HIGH);   uint8_t id;   readReg(WHO_AM_I, &amp;id);    Serial3.print(\"ID=\");   Serial3.println(id, HEX);   Serial3.println(\"...done\"); }  void setup() {   Serial3.begin(115200);   pinMode(LED_GREEN, OUTPUT);   pinMode(LED_ORANGE, OUTPUT);   pinMode(LED_RED, OUTPUT);   pinMode(LED_BLUE, OUTPUT);   pinMode(CS_PIN, OUTPUT);   initSensor();  }  void loop() {   int16_t x, y, z;   printXYZ(&amp;x, &amp;y, &amp;z);   digitalWrite(LED_GREEN, LOW );   digitalWrite(LED_ORANGE, LOW );   digitalWrite(LED_RED, LOW );   digitalWrite(LED_BLUE, LOW );   if (x &lt; ThresholdLow){     digitalWrite(LED_RED, HIGH);   } else if (x > ThresholdHigh){     digitalWrite(LED_GREEN, HIGH);   }   if (y &lt; ThresholdLow){     digitalWrite(LED_ORANGE, HIGH);   } else if (y > ThresholdHigh){     digitalWrite(LED_BLUE, HIGH);   }   uint32_t sec = millis() \/ 1000ul;   if (sec != oldSec) {     Serial3.print(x);     Serial3.print(\",\");     Serial3.println(y);     oldSec = sec;   }   delay(20); }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>main.h<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">#ifndef TM_LIS302DL_LIS3DSH_H #define TM_LIS302DL_LIS3DSH_H #ifndef LIS302DL_LIS3DSH_SPI #define LIS302DL_LIS3DSH_SPISPI1 #define LIS302DL_LIS3DSH_SPI_PINSPACKTM_SPI_PinsPack_1 #endif  \/* CS pin on STM32F4-Discovery board *\/ #ifndef LIS302DL_LIS3DSH_CS_PIN #define LIS302DL_LIS3DSH_CS_RCCRCC_AHB1Periph_GPIOE #define LIS302DL_LIS3DSH_CS_PORTGPIOE #define LIS302DL_LIS3DSH_CS_PINGPIO_Pin_3 #endif  \/* CS pin settings *\/ #define LIS302DL_LIS3DSH_CS_LOWLIS302DL_LIS3DSH_CS_PORT->BSRRH = LIS302DL_LIS3DSH_CS_PIN #define LIS302DL_LIS3DSH_CS_HIGHLIS302DL_LIS3DSH_CS_PORT->BSRRL = LIS302DL_LIS3DSH_CS_PIN  \/* Who I am values *\/ #define LIS302DL_ID0x3B #define LIS3DSH_ID0x3F  \/* Common registers *\/ #define LIS302DL_LIS3DSH_REG_WHO_I_AM0x0F  \/* ----------------------------------------- *\/ \/* LIS3DSH registers *\/ \/* ----------------------------------------- *\/ #define LIS3DSH_WHO_AM_I_ADDR0x0F #define LIS3DSH_CTRL_REG4_ADDR0x20 #define LIS3DSH_CTRL_REG1_ADDR0x21 #define LIS3DSH_CTRL_REG2_ADDR0x22 #define LIS3DSH_CTRL_REG3_ADDR0x23 #define LIS3DSH_CTRL_REG5_ADDR0x24 #define LIS3DSH_CTRL_REG6_ADDR0x25 #define LIS3DSH_OUT_X_L_ADDR0x28 #define LIS3DSH_OUT_X_H_ADDR0x29 #define LIS3DSH_OUT_Y_L_ADDR0x2A #define LIS3DSH_OUT_Y_H_ADDR0x2B #define LIS3DSH_OUT_Z_L_ADDR0x2C #define LIS3DSH_OUT_Z_H_ADDR0x2D  #define LIS3DSH_SENSITIVITY_0_06G            0.06  \/* 0.06 mg\/digit*\/ #define LIS3DSH_SENSITIVITY_0_12G            0.12  \/* 0.12 mg\/digit*\/ #define LIS3DSH_SENSITIVITY_0_18G            0.18  \/* 0.18 mg\/digit*\/ #define LIS3DSH_SENSITIVITY_0_24G            0.24  \/* 0.24 mg\/digit*\/ #define LIS3DSH_SENSITIVITY_0_73G            0.73  \/* 0.73 mg\/digit*\/  #define LIS3DSH_DATARATE_25((uint8_t)0x40) #define LIS3DSH_DATARATE_50((uint8_t)0x50) #define LIS3DSH_DATARATE_100((uint8_t)0x60) #define LIS3DSH_DATARATE_400((uint8_t)0x70) #define LIS3DSH_DATARATE_800((uint8_t)0x80) #define LIS3DSH_DATARATE_1600((uint8_t)0x90)  #define LIS3DSH_BDU_Continuous_update((uint8_t)0x08)  #define LIS3DSH_FULLSCALE_2((uint8_t)0x00)  \/* 2 g  *\/ #define LIS3DSH_FULLSCALE_4((uint8_t)0x08)  \/* 4 g  *\/ #define LIS3DSH_FULLSCALE_6((uint8_t)0x10)  \/* 6 g  *\/ #define LIS3DSH_FULLSCALE_8((uint8_t)0x18)  \/* 8 g  *\/ #define LIS3DSH_FULLSCALE_16((uint8_t)0x20)  \/* 16 g *\/ #define LIS3DSH__FULLSCALE_SELECTION((uint8_t)0x38)  #define LIS3DSH_FILTER_BW_800((uint8_t)0x00)  \/* 800 Hz *\/ #define LIS3DSH_FILTER_BW_400((uint8_t)0x40)\/\/((uint8_t)0x08) \/* 400 Hz  *\/ #define LIS3DSH_FILTER_BW_200((uint8_t)0x80)\/\/((uint8_t)0x10)  \/* 200 Hz *\/ #define LIS3DSH_FILTER_BW_50((uint8_t)(0x80 | 0x40))\/\/((uint8_t)0x18)  \/* 50 Hz  *\/ #define LIS3DSH_SELFTEST_NORMAL((uint8_t)0x00) #define LIS3DSH_XYZ_ENABLE((uint8_t)0x07) #define LIS3DSH_SERIALINTERFACE_4WIRE((uint8_t)0x00) #define LIS3DSH_SM_ENABLE((uint8_t)0x01) #define LIS3DSH_SM_DISABLE((uint8_t)0x00)  \/* ----------------------------------------- *\/ \/* LIS302DL registers                        *\/ \/* ----------------------------------------- *\/ #define LIS302DL_CTRL_REG1_ADDR0x20 #define LIS302DL_CTRL_REG2_ADDR0x21 #define LIS302DL_CTRL_REG3_ADDR0x22 #define LIS302DL_OUT_X_ADDR0x29 #define LIS302DL_OUT_Y_ADDR0x2B #define LIS302DL_OUT_Z_ADDR0x2D  #define LIS302DL_SENSITIVITY_2_3G18  \/* 18 mg\/digit*\/ #define LIS302DL_SENSITIVITY_9_2G72  \/* 72 mg\/digit*\/  #define LIS302DL_DATARATE_100((uint8_t)0x00) #define LIS302DL_DATARATE_400((uint8_t)0x80)  #define LIS302DL_LOWPOWERMODE_ACTIVE((uint8_t)0x40) #define LIS302DL_FULLSCALE_2_3((uint8_t)0x00) #define LIS302DL_FULLSCALE_9_2((uint8_t)0x20) #define LIS302DL_SELFTEST_NORMAL((uint8_t)0x00) #define LIS302DL_XYZ_ENABLE((uint8_t)0x07) #define LIS302DL_SERIALINTERFACE_4WIRE((uint8_t)0x00) #define LIS302DL_BOOT_NORMALMODE((uint8_t)0x00) #define LIS302DL_BOOT_REBOOTMEMORY((uint8_t)0x40) #define LIS302DL_FILTEREDDATASELECTION_OUTPUTREGISTER((uint8_t)0x20) #define LIS302DL_HIGHPASSFILTERINTERRUPT_OFF((uint8_t)0x00) #define LIS302DL_HIGHPASSFILTERINTERRUPT_1((uint8_t)0x04) #define LIS302DL_HIGHPASSFILTERINTERRUPT_2((uint8_t)0x08) #define LIS302DL_HIGHPASSFILTERINTERRUPT_1_2((uint8_t)0x0C) #define LIS302DL_HIGHPASSFILTER_LEVEL_0((uint8_t)0x00) #define LIS302DL_HIGHPASSFILTER_LEVEL_1((uint8_t)0x01) #define LIS302DL_HIGHPASSFILTER_LEVEL_2((uint8_t)0x02) #define LIS302DL_HIGHPASSFILTER_LEVEL_3((uint8_t)0x03)  typedef enum { TM_LIS302DL_LIS3DSH_Device_Error, TM_LIS302DL_LIS3DSH_Device_LIS302DL, TM_LIS302DL_LIS3DSH_Device_LIS3DSH } TM_LIS302DL_LIS3DSH_Device_t;  typedef enum { \/* LIS3DSH *\/ TM_LIS3DSH_Sensitivity_2G, TM_LIS3DSH_Sensitivity_4G, TM_LIS3DSH_Sensitivity_6G, TM_LIS3DSH_Sensitivity_8G, TM_LIS3DSH_Sensitivity_16G, \/* LIS302DL *\/ TM_LIS302DL_Sensitivity_2_3G, TM_LIS302DL_Sensitivity_9_2G } TM_LIS302DL_LIS3DSH_Sensitivity_t;  typedef enum { \/* LIS3DSH *\/ TM_LIS3DSH_Filter_800Hz, TM_LIS3DSH_Filter_400Hz, TM_LIS3DSH_Filter_200Hz, TM_LIS3DSH_Filter_50Hz, \/* LIS302DL *\/ TM_LIS302DL_Filter_2Hz, TM_LIS302DL_Filter_1Hz, TM_LIS302DL_Filter_500mHz, TM_LIS302DL_Filter_250mHz } TM_LIS302DL_LIS3DSH_Filter_t; #endif<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>ST-LINK, \u043a\u0430\u043a \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0440\u0442 \u043d\u0435 \u0432\u0438\u0434\u0438\u0442\u0441\u044f \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0438\u0441\u043a\u0430\u0442\u044c \u0438 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0440\u0442. \u041f\u043e\u0434\u043e\u0448\u0435\u043b USART3 \u0438\u0437 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0445 \u043d\u0430 \u0433\u0440\u0435\u0431\u0435\u043d\u043a\u0435 Discovery \u043f\u0438\u043d\u043e\u0432. \u041e\u043d \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u0432 \u0442\u0435\u043a\u0441\u0442\u0435 \u0432\u044b\u0448\u0435. \u0414\u043b\u044f \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0440\u0442\u0430 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 Armbian \u0431\u044b\u043b \u0432\u043e\u0442\u043a\u043d\u0443\u0442 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043d\u0438\u043a USB-UART, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0440\u0430\u0437\u0443 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0438\u043b\u0441\u044f \u0432 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445:<\/p>\n<details class=\"spoiler\">\n<summary>ttyUSB0<\/summary>\n<div class=\"spoiler__content\">\n<p><code>[277498.708244] usb 1-1.2: New USB device found, idVendor=067b, idProduct=2303, bcdDevice= 3.00<br \/>[277498.711135] usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0<br \/>[277498.718480] usb 1-1.2: Product: USB-Serial Controller<br \/>[277498.723562] usb 1-1.2: Manufacturer: Prolific Technology Inc.<br \/>[277498.783420] usb 1-1.2: pl2303 converter now attached to ttyUSB0<\/code><\/p>\n<\/div>\n<\/details>\n<p>\u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u0441\u044f \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0432\u043e\u0434, \u0442.\u043a. \u0437\u0435\u043c\u043b\u044f \u0443 \u043d\u0438\u0445 \u0443\u0449\u0435 \u043e\u0431\u0449\u0430\u044f \u0447\u0435\u0440\u0435\u0437 USB\/ST-Link, \u043e\u0441\u0442\u0430\u043b\u0438\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0430\u043d\u043d\u044b\u0435. \u041d\u0430\u0434\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0432\u0445\u043e\u0434 RX \u043d\u0430 USB-UART \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043d\u0438\u043a\u0435 \u0438 \u0432\u044b\u0432\u043e\u0434 PD8 (\u044d\u0442\u043e TX) \u043d\u0430 STM32F4 Discovery. \u0418 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u0432\u0438\u0434\u0438\u043c \u0432\u044b\u0432\u043e\u0434 \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435 Visual Studio Code \u043a\u0430\u0436\u0434\u0443\u044e \u0441\u0435\u043a\u0443\u043d\u0434\u0443:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/104\/522\/88a\/10452288a9dfd1736b28555983dcb9df.png\" width=\"649\" height=\"469\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/104\/522\/88a\/10452288a9dfd1736b28555983dcb9df.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0443 \u0438 \u043b\u0430\u043c\u043f\u043e\u0447\u043a\u0438 \u0442\u043e\u0436\u0435 \u0437\u0430\u0433\u043e\u0440\u0430\u044e\u0442\u0441\u044f, \u0438\u043c\u043c\u0438\u0442\u0438\u0440\u0443\u044f &#171;\u043f\u0443\u0437\u044b\u0440\u0435\u043a&#187; \u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u043f\u0440\u0438 \u043d\u0430\u043a\u043b\u043e\u043d\u0430\u0445 \u043f\u043b\u0430\u0442\u044b.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ee9\/723\/645\/ee9723645322976fe0774d729820a3ca.png\" width=\"605\" height=\"1001\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ee9\/723\/645\/ee9723645322976fe0774d729820a3ca.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041a\u0430\u043a \u0440\u0435\u0437\u044e\u043c\u0435, \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u0430\u044f, \u0443\u0441\u043b\u043e\u0432\u043d\u043e \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438\/\u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e, \u043a\u0430\u043a \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e, \u0442\u0430\u043a \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0432 \u0441\u0440\u0435\u0434\u0435 Visual Studio Code \u043d\u0430 \u0442\u043e\u043c \u0447\u0442\u043e \u043e\u043d\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442. <\/p>\n<p>\u0411\u0443\u0434\u0443 \u0440\u0430\u0434, \u0435\u0441\u043b\u0438 \u043a\u043e\u043c\u0443 \u0442\u043e \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f.<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/715108\/\"> https:\/\/habr.com\/ru\/articles\/715108\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0420\u0435\u0448\u0438\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043e\u0431\u0437\u043e\u0440 \u043f\u0440\u043e\u0434\u0435\u043b\u0430\u043d\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e, \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e, \u0438\u0445 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432.<\/p>\n<p>\u041a\u0440\u0430\u0442\u043a\u043e \u043e\u043d\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<p>\u041c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0430-\u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0430 (\u0431\u044b\u043b\u0430 \u0441 \u0410\u043d\u0434\u0440\u043e\u0438\u0434\u043e\u043c), \u0432 \u043d\u0435\u0439 \u0437\u0430\u043f\u0443\u0449\u0435\u043d \u041b\u0438\u043d\u0443\u043a\u0441, \u0432 \u043d\u0435\u043c \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u0430 IDE Visual Studio Code, \u0432 \u043d\u0435\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 PlatfformIO. \u0412\u0441\u0435 \u044d\u0442\u043e \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u043f\u043e SSH \u0438 RDP. \u041a \u044d\u0442\u043e\u043c\u0443 \u043c\u0438\u043d\u0438-\u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0443 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u043f\u043b\u0430\u0442\u0430 STM32F4 discovery \u0447\u0435\u0440\u0435\u0437 ST-Link \u043d\u0430 \u0431\u043e\u0440\u0442\u0443, \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0438 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a, \u0430 \u0447\u0435\u0440\u0435\u0437 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043d\u0438\u043a USB-UART \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0442\u0441\u044f \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. \u0422\u0435\u0441\u0442\u043e\u0432\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0434\u043b\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0410\u0440\u0434\u0443\u0438\u043d\u043e.<\/p>\n<hr\/>\n<p>\u0415\u0441\u043b\u0438 \u0447\u0435\u0441\u0442\u043d\u043e, \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f, \u0432\u0438\u0434\u0438\u043c\u043e, \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u044d\u0442\u0430\u043f\u044b \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0441\u0435\u0431\u044f, \u0447\u0442\u043e\u0431\u044b \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438. \u0427\u0435\u0440\u0435\u0437 \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0438\u0437 \u0433\u043e\u043b\u043e\u0432\u044b \u0432\u0441\u0435 \u0432\u044b\u0442\u0435\u0441\u043d\u0438\u0442\u0441\u044f \u0441\u0432\u0435\u0436\u0438\u043c\u0438 \u0437\u0430\u0434\u0430\u0447\u0430\u043c\u0438 \u0438 \u0431\u0435\u0437 \u0442\u0432\u0435\u0440\u0434\u043e\u0439 \u043a\u043e\u043f\u0438\u0438 \u043d\u0438\u043a\u0430\u043a)<\/p>\n<p>\u0418\u0442\u0430\u043a, \u0443 \u043c\u0435\u043d\u044f \u0432 \u043d\u0430\u043b\u0438\u0447\u0438\u0438, \u0443\u0436\u0435 \u0433\u043e\u0434\u0430 2 \u043b\u0435\u0436\u0430\u043b\u0430 \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0430 X96Air, \u043f\u0440\u0438\u043a\u0443\u043f\u043b\u0435\u043d\u043d\u0430\u044f \u0432 \u0434\u0440\u0443\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u041a\u0438\u0442\u0430\u0435. \u041a\u0430\u043a-\u0442\u043e \u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b \u043d\u0430 \u043d\u0435\u0439 Armbian c \u043f\u0440\u043e\u0441\u0442\u043e\u0440\u043e\u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430, \u0438, \u0443\u0431\u0435\u0434\u0438\u0432\u0448\u0438\u0441\u044c \u0447\u0442\u043e \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043e\u0442\u043b\u043e\u0436\u0438\u043b \u0434\u043e \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f. <\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e, \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0432\u0440\u0435\u043c\u044f, \u0447\u0443\u0442\u043e\u043a \u0443\u0432\u043b\u0435\u043a\u0430\u044f\u0441\u044c \u0434\u043e\u043c\u0430\u0448\u043d\u0435\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u043d\u0430 \u0431\u0430\u0437\u0435 Home Assitant, \u043f\u043e\u0434\u0443\u043c\u0430\u043b, \u0430 \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 ESPHome \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0447\u0435\u043c-\u0442\u043e, \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u0441\u043f\u043e\u0441\u043e\u0431\u043b\u0435\u043d\u043d\u043e\u043c, \u0430 \u043d\u0435 \u043d\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u043a\u0435 \u0441 Ubuntu? <\/p>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435 Home Assitant \u043d\u0430 \u0431\u0430\u0437\u0435 Opange Pi3 LTS. \u041d\u043e \u043d\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 &#8212; \u044d\u0442\u043e \u043d\u0435 \u0434\u0435\u043b\u043e. \u0422\u043e\u0433\u0434\u0430 \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043d\u0430 \u043c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0430-\u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0435. \u041f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 SoC Amlogic S905X3, \u043f\u0430\u043c\u044f\u0442\u0438 4 \u0413\u0431. <\/p>\n<p>\u041e\u0431\u0440\u0430\u0437 armbian \u0431\u044b\u043b \u0432\u0437\u044f\u0442 \u0443 <a href=\"https:\/\/github.com\/ophub\/amlogic-s9xxx-armbian\/releases\" rel=\"noopener noreferrer nofollow\">\u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u043e\u0432<\/a>, \u0442\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u0447\u0442\u043e \u043c\u043e\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0435\u0441\u0442\u044c \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0445, \u043d\u0435 \u0442\u043e \u0447\u0442\u043e 2-3 \u0433\u043e\u0434\u0430 \u043d\u0430\u0437\u0430\u0434. \u0411\u044b\u043b \u0432\u044b\u0431\u0440\u0430\u043d \u043e\u0431\u0440\u0430\u0437 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u043f\u0440\u043e\u0448\u0438\u0442 \u043d\u0430 \u0444\u043b\u0435\u0448\u043a\u0443 (\u043f\u043e\u0437\u0436\u0435 \u043f\u0435\u0440\u0435\u0435\u0445\u0430\u043b \u043d\u0430 \u043a\u0430\u0440\u0442\u0443 \u043f\u0430\u043c\u044f\u0442\u0438 SD). \u0424\u0430\u0439\u043b\u044b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, \u0441\u0443\u0434\u044f \u043f\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044e, \u043f\u043e\u0445\u043e\u0434\u0438\u043b\u0438 2: meson-sm1-x96-air-gbit.dtb, meson-sm1-x96-air.dtb. \u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u0432 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0438 gbit \u043e\u0437\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u0438\u0434\u0438\u043c\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0433\u0438\u0433\u0430\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0430. \u041e\u0434\u043d\u0430\u043a\u043e \u0443 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u0441\u0435\u0442\u044c \u043d\u0430 \u0433\u0438\u0433\u0430\u0431\u0438\u0442\u0435, \u043d\u043e \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b wifi. \u0423 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442, \u043d\u0435 \u0431\u044b\u043b\u043e \u0432\u0438\u0434\u043d\u043e \u043f\u0440\u043e\u0432\u043e\u0434\u043d\u043e\u0433\u043e \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0430, \u043d\u043e \u0441 \u0431\u0435\u0441\u043f\u0440\u043e\u0432\u043e\u0434\u043d\u043e\u0439 \u0441\u0435\u0442\u044c\u044e \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043d\u0435 \u0431\u044b\u043b\u043e. \u041f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 \u0444\u0430\u0439\u043b\u044b, \u0438 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0433\u0438\u0433\u0430\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0430 \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0444\u0430\u0439\u043b, \u0442\u0449\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0431\u043b\u044e\u0434\u0430\u044f \u0432\u0441\u0435 \u0441\u0432\u044f\u0437\u0438 \u0441 \u0442\u0430\u0439\u043c\u0435\u0440\u0430\u043c\u0438, \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f\u043c\u0438 \u0438 \u043f\u043e\u0440\u0442\u0430\u043c\u0438 \u0432\/\u0432. \u0412 <a href=\"https:\/\/disk.yandex.ru\/d\/v6AA-ALftOKs4g\" rel=\"noopener noreferrer nofollow\">\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 <\/a>\u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043e\u0431\u0430 \u0432\u0438\u0434\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0441\u0435\u0442\u0438, \u043f\u0440\u0430\u0432\u0434\u0430 \u043f\u0440\u043e\u0432\u043e\u0434\u043d\u0430\u044f \u0441\u0435\u0442\u044c \u0440\u0443\u0433\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043e\u0434\u043d\u043e \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u043e \u0435\u0433\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438. \u0417\u0432\u0443\u043a \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b\u0441\u044f, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u041d\u0430\u0432\u0435\u0440\u043d\u043e\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u0444\u0430\u0439\u043b dtb, \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0432 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043d\u043e \u043c\u043d\u0435 \u0445\u0432\u0430\u0442\u0438\u043b\u043e \u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430.<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0443\u0436\u0435 \u043d\u0435 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e \u0430 \u0447\u0435\u0440\u0435\u0437 SSH, \u0447\u0442\u043e \u0438  \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e.<\/p>\n<p>\u0412\u0441\u0435 \u0431\u044b\u043b\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e apt, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d pip \u0434\u043b\u044f Python 3. \u0418 \u0443\u0436\u0435 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e esphome. \u041a\u0441\u0442\u0430\u0442\u0438, \u043d\u0430 \u044d\u0442\u043e\u043c \u043e\u0431\u0440\u0430\u0437\u0435 \u0432 \u0440\u043e\u0434\u043d\u043e\u043c \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0435 \u041f\u041e armbian-software \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c Home Assitant \u0438\u0437 \u0440\u043e\u0434\u043d\u043e\u0433\u043e \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u0430\u0440\u0438\u044f. \u0415\u0441\u043b\u0438 \u043a\u043e\u043c\u0443 \u044d\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u044f \u043d\u0435 \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b:<\/p>\n<details class=\"spoiler\">\n<summary>root@armbian: armbian-software<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"bash\">root@armbian:~# armbian-software [ STEPS ] Start selecting software [ Current system: ubuntu\/jammy ]... -------------------------------------------------------------- ID    NAME                      STATE           MANAGE -------------------------------------------------------------- 101   Docker                    not-installed   install 102   Portainer                 not-installed   install 103   Yacht                     not-installed   install 104   Transmission              not-installed   install 105   qBittorrent               not-installed   install 106   NextCloud                 not-installed   install 107   Jellyfin                  not-installed   install 108   HomeAssistant             not-installed   install 109   Kodbox                    not-installed   install 110   CouchPotato               not-installed   install 111   Sonarr                    not-installed   install 112   Radarr                    not-installed   install 113   Syncthing                 not-installed   install 114   FileBrowser               not-installed   install 115   Heimdall                  not-installed   install 116   Node-RED                  not-installed   install 117   Mosquitto                 not-installed   install 118   OpenWrt                   not-installed   install <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u0431\u044b\u043b \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d \u043e\u0434\u0438\u043d \u043a\u043e\u043d\u0444\u0438\u0433 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 esphome \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 yaml. \u041f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u0434\u043b\u044f \u043f\u043b\u0430\u0442\u044b ESP32. \u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 Python (pytz, tzdata, pillow) \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u043e\u0434\u0433\u0440\u0443\u0437\u043a\u0438 PlatformIO \u0432\u0441\u0435 \u043f\u0440\u043e\u0448\u043b\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u043e.<\/p>\n<p>\u0420\u0430\u0437 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c PlatformIO, \u0442\u043e \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043d\u0430 \u043d\u0435\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0430 \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u0435 STM32? \u0420\u0435\u0448\u0435\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c Visual Studio Code. \u041e\u0434\u043d\u0430\u043a\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0441\u0440\u0435\u0434\u0430. <\/p>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d xfce4. \u0421\u0443\u0434\u044f \u043f\u043e history: <br \/><code>apt-get install xorg lightdm xfce4<\/code><\/p>\n<p>\u0417\u0430\u0442\u0435\u043c xrdp:<br \/><code>apt-get install tightvncserver xrdp xorgxrdp<\/code><br \/><code>systemctl enable xrdp<\/code><br \/><code>systemctl start xrdp<\/code><\/p>\n<p>\u0420\u0435\u0436\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0431\u044b\u043b \u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043f\u043e \u0443\u043c\u043e\u0447\u0430\u043d\u0438\u044e multi-user.target. \u041d\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0435, \u043f\u0440\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438, \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043e\u0431\u043e\u043b\u043e\u0447\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u0435\u043a\u0441\u0442\u0435. \u041e\u0434\u043d\u0430\u043a\u043e, \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u0443 \u043d\u0430 \u043d\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 startxfce4. \u0417\u0430\u043c\u0435\u0447\u0435\u043d\u043e, \u0447\u0442\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u043e RDP \u0441\u043d\u0430\u0440\u0443\u0436\u0438 \u0438\u0434\u0435\u0442 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0438 \u0447\u0435\u0440\u0435\u0437 root \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u0447\u0435\u0440\u0435\u0437 \u043b\u044e\u0431\u043e\u0433\u043e \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e, \u043e\u0434\u043d\u0430\u043a\u043e \u0447\u0435\u0440\u0435\u0437 root \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u0443\u0441\u043e\u0440, \u0442\u0438\u043f\u0430 \u043a\u0430\u043a \u043f\u0440\u0438 \u0441\u0431\u043e\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438\u043b\u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438, \u0442\u043e\u0433\u0434\u0430 \u043a\u0430\u043a \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u043f\u0440\u0438\u0432\u0435\u043b\u0438\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432\u0441\u0435 \u043a\u0440\u0430\u0441\u0438\u0432\u043e, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0435\u043c\u0443 \u043f\u0440\u0430\u0432\u0430 root. \u041d\u0435 \u0441\u0442\u0430\u043b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f, \u043a\u0442\u043e \u0437\u043d\u0430\u0435\u0442 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u0432\u0435\u043b\u043a\u0430\u043c)<\/p>\n<p>\u0417\u0430\u0442\u0435\u043c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0430 \u043f\u043e <a href=\"https:\/\/code.visualstudio.com\/docs\/setup\/setup-overview\" rel=\"noopener noreferrer nofollow\">\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438<\/a> Visual Studio Code. \u042d\u0442\u043e \u0431\u044b\u043b\u0430 \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f (dpkg -i code_1.74.3-1673284080_arm64.deb). \u0412\u043d\u0443\u0442\u0440\u044c <a href=\"https:\/\/docs.platformio.org\/en\/latest\/integration\/ide\/vscode.html\" rel=\"noopener noreferrer nofollow\">\u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f PlatformIO<\/a>. \u0414\u043b\u044f \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u0433\u0440\u0443\u043f\u043f\u0443 root \u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u0435\u0430\u043d\u0441.<\/p>\n<p><code>sudo usermod -a -G root $USER<\/code><\/p>\n<p>\u0418\u0437 \u0437\u0430\u043a\u0440\u043e\u043c\u043e\u0432 \u0431\u044b\u043b\u0430 \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0430 \u043f\u043b\u0430\u0442\u0430 STM32F4 Discovery, \u043a\u0443\u043f\u043b\u0435\u043d\u043d\u0430\u044f \u0434\u043b\u044f \u043e\u043f\u044b\u0442\u043e\u0432 \u043b\u0435\u0442 5 \u043d\u0430\u0437\u0430\u0434, \u043d\u043e \u0443\u0434\u0430\u0432\u0430\u043b\u043e\u0441\u044c \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043d\u0443\u0436\u0434 \u043e\u0431\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u0434\u0435\u0448\u0435\u0432\u044b\u043c\u0438 \u0447\u0438\u043f\u0430\u043c\u0438, \u0447\u0442\u043e \u0438\u0437 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u043e \u0435\u0439 \u0434\u043e\u0436\u0438\u0442\u044c \u0441 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u043e\u0439 \u0434\u043e \u0441\u0435\u0433\u043e \u0434\u043d\u044f.<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u0430\u044f \u043f\u043e USB, \u043f\u043b\u0430\u0442\u0430 \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043b\u0430\u0441\u044c<\/summary>\n<div class=\"spoiler__content\">\n<p> <code>[  101.188080] usb 1-1.3: USB disconnect, device number 5<br \/> [  103.560000] usb 1-1.3: new full-speed USB device number 6 using xhci-hcd<br \/> [  103.774675] usb 1-1.3: New USB device found, idVendor=0483, idProduct=3748, bcdDevice= 1.00<br \/> [  103.779907] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3<br \/> [  103.787911] usb 1-1.3: Product: STM32 STLink<br \/> [  103.791388] usb 1-1.3: Manufacturer: STMicroelectronics<br \/> [  103.796559] usb 1-1.3: SerialNumber: I\u00ffr\\x06guTU\\x11'\\x01g<\/code><\/p>\n<\/div>\n<\/details>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043f\u0440\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u043c\u0438\u0433\u0430\u043b\u043a\u0438, \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0430\u044f \u0437\u0430\u043c\u0438\u043d\u043a\u0430, \u043d\u0435 \u043d\u0430\u0448\u0435\u043b\u0441\u044f \u043f\u043e\u0434 \u043d\u0443\u0436\u043d\u0443\u044e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 \u043d\u0430\u0431\u043e\u0440 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 toolchain: &#171;Error: Could not find the package with &#8216;platformio\/toolchain-gccarmnoneeabi @ ~1.90201.0&#8217; requirements for your system &#8216;linux_aarch64&#8242;&#187;. \u041a\u0430\u043a \u043f\u043e\u043d\u044f\u043b, \u043f\u043e\u0434 \u0442\u0430\u043a\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 \u0435\u0433\u043e \u043f\u043e\u0434 aarch64 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u043e. \u0417\u0430\u043c\u0435\u043d\u0438\u043b \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e, ~1.90201.0 \u043d\u0430 1.90301.0 \u0432 ststm32\/platform.json \u0438 <a href=\"http:\/\/platform.py\" rel=\"noopener noreferrer nofollow\">platform.py<\/a>. \u0422\u0430\u043a\u0436\u0435, \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e <a href=\"https:\/\/www.wolinlabs.com\/blog\/linux.stm32.discovery.gcc.html\" rel=\"noopener noreferrer nofollow\">\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f\u043c<\/a>, \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u043b \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043d\u043e\u0432\u043e\u043c\u0443 USB \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443:<\/p>\n<p>\u041d\u043e\u0432\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \/etc\/udev\/rules\/45-usb-stlink-v2.rules:<br \/>SUBSYSTEM==&#187;usb&#187;, ATTR{idVendor}==&#187;0483&#8243;, ATTR{idProduct}==&#187;3748&#8243;, MODE=&#187;0666&#8243;<br \/>systemctl restart udev<br \/>\u041d\u0430\u0434\u043e \u043f\u0435\u0440\u0435\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043b\u0430\u0442\u0443 Discovery.<\/p>\n<p>\u041c\u0438\u0433\u0430\u043b\u043a\u0430 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u043b\u0435\u043c, \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0438\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e, \u0443 \u043c\u0435\u043d\u044f \u043d\u0430 \u0444\u0440\u0430\u0439\u043c\u0432\u043e\u0440\u043a\u0435 \u0410\u0440\u0434\u0443\u0438\u043d\u043e:<\/p>\n<details class=\"spoiler\">\n<summary>main.cpp<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">#include &lt;Arduino.h>  void setup() {   \/\/ initialize LED digital pin as an output.   pinMode(LED_GREEN, OUTPUT);   pinMode(LED_ORANGE, OUTPUT);   pinMode(LED_RED, OUTPUT);   pinMode(LED_BLUE, OUTPUT); }  void loop() {   digitalWrite(LED_GREEN, HIGH);   delay(1000);   digitalWrite(LED_GREEN, LOW);   delay(1000);   digitalWrite(LED_BLUE, HIGH);   delay(1000);   digitalWrite(LED_BLUE, LOW);   delay(1000);   digitalWrite(LED_RED, HIGH);   delay(1000);   digitalWrite(LED_RED, LOW);   delay(1000);   digitalWrite(LED_ORANGE, HIGH);   delay(1000);   digitalWrite(LED_ORANGE, LOW);   delay(1000); }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041e\u0442\u043b\u0430\u0434\u043a\u0430 \u0442\u043e\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0430\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u043a \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0430\u043a\u0441\u0435\u043b\u0435\u0440\u043e\u043c\u0435\u0442\u0440 (\u0443 \u043c\u0435\u043d\u044f \u043d\u0430 \u043f\u043b\u0430\u0442\u0435 \u0431\u044b\u043b LIS3DSH). \u041f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0438\u0437\u0440\u044f\u0434\u043d\u043e \u043f\u043e\u0438\u0441\u043a\u0430\u0442\u044c \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0438 \u0441\u043e\u0431\u0440\u0430\u0442\u044c <a href=\"https:\/\/github.com\/maichaell\/STM32GEN_huaweiwx\/blob\/master\/STM32\/libraries\/BoardExamples\/examples\/Discovery407VG\/LIS3DSH_demo\/LIS3DSH_demo.ino\" rel=\"noopener noreferrer nofollow\">\u043d\u0430 \u044d\u0442\u043e\u0439 \u043e\u0441\u043d\u043e\u0432\u0435 <\/a>\u0441\u0432\u043e\u0439. \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0431\u0438\u0442 \u043f\u0440\u0438 \u0438\u043d\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u043c\u0438\u0433\u0430\u043d\u0438\u044f \u043b\u0430\u043c\u043f\u043e\u0447\u043a\u0430\u043c\u0438 \u043f\u0440\u0438 \u043e\u0442\u043a\u043b\u043e\u043d\u0435\u043d\u0438\u0438 x \u0438 y \u0441\u0432\u0435\u0440\u0445 \u043f\u0440\u0435\u0434\u0435\u043b\u043e\u0432 \u0438 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0439 \u0432\u044b\u0432\u043e\u0434 \u0432 USART \u043f\u043e\u0440\u0442. \u041f\u0440\u043e \u043d\u0435\u0433\u043e \u043d\u0438\u0436\u0435.<\/p>\n<details class=\"spoiler\">\n<summary>main.cpp:<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">#include &lt;Arduino.h> #include &lt;SPI.h> #include \"main.h\" #include &lt;HardwareSerial.h>  #define RD 0x80 #define WR 0x00  #define CTRL_REG3 0x23 #define CTRL_REG4 0x20 #define CTRL_REG5 0x24 #define STAT_REG  0x18  #define OUT_X_L 0x28 #define OUT_X_H 0x29 #define OUT_Y_L 0x2A #define OUT_Y_H 0x2B #define OUT_Z_L 0x2C #define OUT_Z_H 0x2D  #define WHO_AM_I 0x0F  #define CS_PIN PE3  int16_t ThresholdLow = -400; int16_t ThresholdHigh = 400; uint32_t sec, oldSec = 0;    HardwareSerial Serial3(PD9, PD8); \/\/ init USART3  void readReg(uint8_t addr, uint8_t* data) {   digitalWrite(CS_PIN, LOW);   uint8_t ret =SPI.transfer(addr|RD);      ret =SPI.transfer(0x00);      digitalWrite(CS_PIN, HIGH);    *data=ret; }  void printXYZ(int16_t* x, int16_t* y, int16_t* z) {   uint8_t id;   readReg(WHO_AM_I, &amp;id);    uint8_t stat;   readReg(STAT_REG, &amp;stat);   uint8_t xl;   readReg(OUT_X_L, &amp;xl);    uint8_t xh;   readReg(OUT_X_H, &amp;xh);    *x = (xh &lt;&lt; 8) | (xl);    uint8_t yl;   readReg(OUT_Y_L, &amp;yl);    uint8_t yh;   readReg(OUT_Y_H, &amp;yh);    *y = (yh &lt;&lt; 8) | (yl);    uint8_t zl;   readReg(OUT_Z_L, &amp;zl);    uint8_t zh;   readReg(OUT_Z_H, &amp;zh);    *z = (zh &lt;&lt; 8) | (zl);   }  void initSensor() {  uint8_t reg4, reg5;   temp = (uint16_t) (LIS3DSH_DATARATE_100 | LIS3DSH_XYZ_ENABLE);   temp |= (uint16_t) (LIS3DSH_SERIALINTERFACE_4WIRE | LIS3DSH_SELFTEST_NORMAL);   temp |= (uint16_t) (LIS3DSH_FULLSCALE_2 | LIS3DSH_BDU_Continuous_update);   temp |= (uint16_t) (LIS3DSH_FILTER_BW_50 &lt;&lt; 8);   reg4 = (uint8_t) (temp);   reg5 = (uint8_t) (temp >> 8);   Serial3.println(\"init LIS3DSH Sensor\");   SPI.begin();    SPI.beginTransaction(SPISettings(8000000, MSBFIRST, SPI_MODE0));   digitalWrite(CS_PIN, LOW);   uint8_t ret =SPI.transfer(CTRL_REG4);    digitalWrite(CS_PIN, HIGH);   digitalWrite(CS_PIN, LOW);   ret =SPI.transfer(CTRL_REG5);    ret =SPI.transfer(reg5);<\/code><\/pre>\n<\/div>\n<\/details>\n<\/div>\n<\/div>\n<\/div>\n<\/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-392381","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/392381","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=392381"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/392381\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=392381"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=392381"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=392381"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}