{"id":400224,"date":"2024-06-29T15:08:07","date_gmt":"2024-06-29T15:08:07","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=400224"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=400224","title":{"rendered":"<span>\u041c\u0435\u0442\u0435\u043e\u0441\u0442\u0430\u043d\u0446\u0438\u044f \u043d\u0430 Banana Pi M64 (Linux, C#, Docker, RabbitMQ, AvaloniaUI)<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\"><a href=\"https:\/\/habrastorage.org\/webt\/q7\/5n\/8y\/q75n8y9l6ymnpfg7n2qn1zvk0jm.jpeg\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/q7\/5n\/8y\/q75n8y9l6ymnpfg7n2qn1zvk0jm.jpeg\" alt=\"Weather station Banana Pi BPI-M64 Linux C# Docker RabbitMQ AvaloniaUI\" data-src=\"https:\/\/habrastorage.org\/webt\/q7\/5n\/8y\/q75n8y9l6ymnpfg7n2qn1zvk0jm.jpeg\" data-blurred=\"true\"\/><\/a><\/p>\n<p>  \u0421\u0442\u0430\u0442\u0435\u0439 \u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043c\u0435\u0442\u0435\u043e\u0441\u0442\u0430\u043d\u0446\u0438\u0438 \u043d\u0430 \u0431\u0430\u0437\u0435 Arduino \u043d\u0435 \u0441\u0447\u0435\u0441\u0442\u044c. \u041c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u0440\u043e \u043c\u0435\u0442\u0435\u043e\u0441\u0442\u0430\u043d\u0446\u0438\u044e, \u0442\u043e \u044d\u0442\u043e \u043f\u0440\u043e \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b Arduino, ESP32 \u0438\u043b\u0438 STM32. \u041d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435 \u0432 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437. \u0411\u0443\u0434\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043c\u0435\u0442\u0435\u043e\u0441\u0442\u0430\u043d\u0446\u0438\u044e \u043d\u0430 Banana Pi BPI-M64 \u043f\u043e\u0434 Linux, \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f Arduino-\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u043e\u0431\u0435\u0440\u0442\u043e\u043a \u0432 \u0432\u0438\u0434\u0435 WiringPi, \u043d\u0430 C# .NET5. \u041f\u0440\u0438\u043c\u0435\u0440 \u043c\u0435\u0442\u0435\u043e\u0441\u0442\u0430\u043d\u0446\u0438\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0435\u0439 \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 GPIO, \u0434\u0430\u0442\u0447\u0438\u043a\u0430\u043c\u0438 \u0438 \u0432\u044b\u0432\u043e\u0434\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043d\u0430 LCD. \u0412 \u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f: Linux (Armbian) \u2014 \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u041e\u0421, .NET \u0438 C# \u2014 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u043e\u0433\u043e \u041f\u041e, AvaloniaUI \u2014 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0441 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u043c\u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u0430\u043c\u0438 \u0438 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0435\u0439, Docker \u2014 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f, \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, RabbitMQ \u2014 \u0431\u0440\u043e\u043a\u0435\u0440 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043c\u0435\u0436\u0434\u0443 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u043c\u0438. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u0438 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 Docker, \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 Banana Pi BPI-M64, \u043d\u043e \u0438 \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 Banana\/Orange\/Rock\/Nano Pi \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430\u0445, \u0432\u043a\u043b\u044e\u0447\u0430\u044f Raspberry Pi.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h2>\u041e \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435<\/h2>\n<p>  \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430 AvaloniaUI \u0441 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435\u0439 Docker-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0443 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 <strong>Linux framebuffer<\/strong>. \u0421\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044e UI \u0431\u044b\u043b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d \u043d\u0430 \u0425\u0430\u0431\u0440\u0435 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 <a href=\"https:\/\/habr.com\/ru\/company\/dataart\/blog\/569192\/\">\u00ab\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b \u0434\u043b\u044f \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u043d\u0430 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 Web-\u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f\u0445\u00bb<\/a>, \u043f\u0440\u043e\u0449\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043d\u0430 HTML \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435. \u041a\u0430\u043a\u0438\u0435 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0432 \u043e\u0431\u043e\u0438\u0445 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u0445, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0438\u0445 \u0434\u043e\u0441\u0442\u043e\u0438\u043d\u0441\u0442\u0432\u0430 \u0438 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432 \u043a\u043e\u043d\u0446\u0435 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0441\u0442\u0430.<\/p>\n<h2>\u041f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0437\u0430\u0434\u0430\u0447\u0438<\/h2>\n<p>  \u041d\u0430\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u0438\u0442 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432, \u0437\u0430\u0442\u0435\u043c \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u0440\u043e\u043a\u0435\u0440\u0443 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 <a href=\"https:\/\/www.rabbitmq.com\/\">RabbitMQ<\/a>. \u0413\u0434\u0435 \u0432\u0442\u043e\u0440\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0437\u0430\u0431\u0435\u0440\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 RabbitMQ \u0438 \u0432\u044b\u0432\u0435\u0434\u0435\u0442 \u0438\u0445 \u043d\u0430 LCD-\u044d\u043a\u0440\u0430\u043d. RabbitMQ \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u0430\u0431\u043e\u0441\u0432\u044f\u0437\u0430\u043d\u043d\u0443\u044e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443. \u0415\u0441\u043b\u0438 \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043e\u0431\u043b\u0430\u043a\u043e \u0438\/\u0438\u043b\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u043d\u0430 \u0434\u0438\u0441\u043a\u0435, \u0442\u043e, \u043d\u0435 \u043c\u0435\u043d\u044f\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0435\u0449\u0435 \u043e\u0434\u043d\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043d\u043e\u0432\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c.<\/p>\n<h2>\u041f\u0440\u0438\u043d\u0446\u0438\u043f \u0440\u0430\u0431\u043e\u0442\u044b<\/h2>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0441\u0442\u0430\u0440\u0442\u0430 \u041e\u0421 Armbian \u043d\u0430 Banana Pi BPI-M64, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f Docker-\u0434\u0435\u043c\u043e\u043d, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b. \u0413\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 LCD ILI9341. \u0414\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0434\u0432\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u044d\u043a\u0440\u0430\u043d\u0430. \u041d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u044d\u043a\u0440\u0430\u043d\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430, \u0432\u043b\u0430\u0436\u043d\u043e\u0441\u0442\u044c, \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u0435. \u041d\u0430 \u0432\u0442\u043e\u0440\u043e\u043c \u044d\u043a\u0440\u0430\u043d\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0433\u0440\u0430\u0444\u0438\u043a \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u0441 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435\u043c. \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u043a\u043d\u043e\u043f\u043a\u0438. \u041d\u0430\u0436\u0430\u0442\u0438\u0435 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044e \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430 \u0434\u043b\u044f \u0438\u043d\u0434\u0438\u043a\u0430\u0446\u0438\u0438 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f. \u041f\u0440\u0438 \u043e\u0442\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u0438 \u043a\u043d\u043e\u043f\u043a\u0438 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0441\u043c\u0435\u043d\u044b \u044d\u043a\u0440\u0430\u043d\u0430. \u041d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0438\u043a\u043e\u043d\u043a\u0430 \u0438\u043d\u0434\u0438\u043a\u0430\u0446\u0438\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0443 RabbitMQ. \u041a\u043e\u0433\u0434\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c RabbitMQ, \u0438\u043a\u043e\u043d\u043a\u0430 \u2014 \u0437\u0435\u043b\u0435\u043d\u043e\u0433\u043e \u0446\u0432\u0435\u0442\u0430; \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u2014 \u0438\u043a\u043e\u043d\u043a\u0430 \u043a\u0440\u0430\u0441\u043d\u043e\u0433\u043e \u0446\u0432\u0435\u0442\u0430.<\/p>\n<p>  <a href=\"https:\/\/habrastorage.org\/webt\/vu\/e2\/fn\/vue2fnc1-bqfbwhbvzc1cj34ysy.jpeg\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/vu\/e2\/fn\/vue2fnc1-bqfbwhbvzc1cj34ysy.jpeg\" alt=\"Weather station Banana Pi BPI-M64 Linux C# Docker RabbitMQ AvaloniaUI\" data-src=\"https:\/\/habrastorage.org\/webt\/vu\/e2\/fn\/vue2fnc1-bqfbwhbvzc1cj34ysy.jpeg\" data-blurred=\"true\"\/><\/a><br \/>  <em>\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0432\u0435\u043b\u0438\u0447\u0438\u043d \u043d\u0430 LCD ILI9341<\/em><\/p>\n<p>  <a href=\"https:\/\/habrastorage.org\/webt\/be\/jy\/iq\/bejyiqlgk78eo3dplfxmck1kvqa.jpeg\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/be\/jy\/iq\/bejyiqlgk78eo3dplfxmck1kvqa.jpeg\" alt=\"Weather station Banana Pi BPI-M64 Linux C# Docker RabbitMQ AvaloniaUI\" data-src=\"https:\/\/habrastorage.org\/webt\/be\/jy\/iq\/bejyiqlgk78eo3dplfxmck1kvqa.jpeg\" data-blurred=\"true\"\/><\/a><br \/>  <em>\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b<\/em><\/p>\n<p>  \u0417\u0430\u043f\u0443\u0441\u043a \u043c\u0435\u0442\u0435\u043e\u0441\u0442\u0430\u043d\u0446\u0438\u0438 \u043d\u0430 Banana Pi M64 (\u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442):<\/p>\n<div class=\"oembed\">\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/60fef1fbf2fa57a26f179faf\" data-style=\"\" id=\"60fef1fbf2fa57a26f179faf\" width=\"\"><\/div>\n<\/div>\n<p>  <\/p>\n<h2>\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430<\/h2>\n<p>  \u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u043e\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435 <a href=\"https:\/\/devdotnet.org\/post\/otladochnaya-plata-banana-pi-bpi-m64\/\">Banana Pi BPI-M64<\/a>, \u041e\u0421 <a href=\"https:\/\/devdotnet.org\/post\/armbian-linux-distributiv-dlya-otladochnyh-plat-na-arm\/\">Armbian<\/a> 21.02.1 (Ubuntu 18.04.5 LTS Bionic Beaver, \u044f\u0434\u0440\u043e Linux 5.10.12). \u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 Docker-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043c\u0435\u0442\u0435\u043e\u0441\u0442\u0430\u043d\u0446\u0438\u0438 \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430\u0445, \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 Docker. \u0422\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f Docker \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0438 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e. \u041e\u0434\u043d\u043e \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u0433\u043b\u0430\u0432\u043d\u044b\u0445 \u043a\u0430\u0447\u0435\u0441\u0442\u0432 Docker \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0435\u0433\u043e \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0441\u0442\u044c. \u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u043b\u0438\u0431\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0435\u0442\u0441\u044f, \u043b\u0438\u0431\u043e \u043d\u0435\u0442. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0431\u043e\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043d\u043e\u0432\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 A\/B, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043d\u0435 \u0443\u0434\u0430\u043b\u044f\u0435\u0442\u0441\u044f, \u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043e\u0442\u043a\u0430\u0442 \u043f\u0440\u0438 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043d\u043e\u0432\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430. \u041f\u043e\u0434\u043e\u0431\u043d\u0430\u044f \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0431\u044b\u0441\u0442\u0440\u043e \u0431\u0435\u0437 \u0437\u0430\u0434\u0435\u0440\u0436\u0435\u043a, \u0447\u0442\u043e \u0441\u043d\u0438\u0436\u0430\u0435\u0442 \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430. \u041f\u0440\u0438 \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u0435 \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u043e\u0433\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0431\u043e\u044f \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f, \u043e\u0442\u043a\u0430\u0442 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0432\u0435\u0441\u044c\u043c\u0430 \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439. \u0415\u0432\u0440\u043e\u043f\u0435\u0439\u0441\u043a\u0430\u044f \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f <a href=\"https:\/\/www.toradex.com\/operating-systems\/torizon\">Toradex<\/a> \u0432 \u0441\u0432\u043e\u0438\u0445 \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u0445 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0433\u0440\u0443\u0437\u043e\u043f\u0435\u0440\u0435\u0432\u043e\u0437\u043e\u043a \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u0438 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044e Docker. \u041a\u043e\u043c\u043f\u0430\u043d\u0438\u0435\u0439 \u0431\u044b\u043b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d \u043c\u043e\u0434\u0443\u043b\u044c Verdin \u043d\u0430 \u0431\u0430\u0437\u0435 <a href=\"https:\/\/www.cnx-software.com\/2018\/02\/28\/nxp-i-mx-8m-mini-low-power-cortex-a53-cortex-m4-processor-to-be-manufactured-using-14lpc-finfet-process-technology\/\">NXP i.MX8 M Mini SoC<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0441 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0435\u043c \u0447\u0435\u0440\u0435\u0437 CAN-\u0448\u0438\u043d\u0443 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0442\u0435\u043b\u0435\u043c\u0435\u0442\u0440\u0438\u0438 \u043e\u0442 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043e\u0431\u043b\u0430\u043a\u043e. \u0420\u0430\u0431\u043e\u0442\u0430 \u0441 CAN-\u0448\u0438\u043d\u043e\u0439 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043e\u0431\u043b\u0430\u043a\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0432 Docker-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435.<\/p>\n<p>  <a href=\"https:\/\/habrastorage.org\/webt\/lk\/xr\/wt\/lkxrwtb5mkr5o8yzbjkr-s_i2lm.jpeg\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/lk\/xr\/wt\/lkxrwtb5mkr5o8yzbjkr-s_i2lm.jpeg\" alt=\"Docker ARM ARM64 Banana Pi BPI-M64 Cubietruck\" data-src=\"https:\/\/habrastorage.org\/webt\/lk\/xr\/wt\/lkxrwtb5mkr5o8yzbjkr-s_i2lm.jpeg\" data-blurred=\"true\"\/><\/a><\/p>\n<p>  \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438\u00a0<a href=\"https:\/\/www.cnx-software.com\/2020\/11\/17\/reading-vehicle-obd-ii-data-through-can-within-a-containerized-application-in-embedded-linux\/\">Reading Vehicle OBD-II data through CAN within a containerized application in Embedded Linux \u2014 CNX SOFTWARE<\/a>. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c Docker \u043d\u0430 ARM \u0438 64-bit ARM \u043c\u043e\u0436\u043d\u043e \u043f\u043e \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0443 <a href=\"https:\/\/docs.docker.com\/engine\/install\/ubuntu\/\">Install Docker Engine on Ubuntu<\/a>.<\/p>\n<p>  \u0414\u0430\u043d\u043d\u044b\u0435 \u043c\u0435\u0436\u0434\u0443 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u043c\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0431\u0440\u043e\u043a\u0435\u0440 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 <a href=\"https:\/\/www.rabbitmq.com\">RabbitMQ<\/a> \u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/AMQP\">AMQP<\/a>. \u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b AMQP (Advanced Message Queuing Protocol) \u2014 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0433\u0438\u0431\u043a\u043e \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u0442\u044c\u00a0 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b (\u0438\u043b\u0438 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f) \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439. AMQP-\u0431\u0440\u043e\u043a\u0435\u0440 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u044e, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0443, \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0443 \u043d\u0430 \u043d\u0443\u0436\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u0432\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043f\u0435\u0440\u0432\u043e\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0442\u0435\u043b\u0435\u043c\u0435\u0442\u0440\u0438\u044e, \u0430 \u0432\u0442\u043e\u0440\u043e\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043e\u0431\u043b\u0430\u043a\u043e. \u0415\u0441\u043b\u0438 \u0432\u0442\u043e\u0440\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e \u043a\u0430\u043a\u0438\u043c-\u043b\u0438\u0431\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c \u0430\u0432\u0430\u0440\u0438\u0439\u043d\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u0441\u044f, \u0442\u043e \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0431\u0440\u043e\u043a\u0435\u0440\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0434\u0430\u043d\u043d\u044b\u0435 \u0442\u0435\u043b\u0435\u043c\u0435\u0442\u0440\u0438\u0438 \u043d\u0435 \u043f\u043e\u0442\u0435\u0440\u044f\u044e\u0442\u0441\u044f, \u0430 \u0431\u0443\u0434\u0443\u0442 \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0431\u0440\u043e\u043a\u0435\u0440\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439. \u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u044b \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u044b \u0432 \u043e\u0431\u043b\u0430\u043a\u043e. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0440\u043e\u043a\u0435\u0440\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0431\u044b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0440\u0435\u0448\u0430\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0443 \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u0438\u044f \u0438 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438\u0445 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0432 \u043e\u0431\u043b\u0430\u043a\u043e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u0440\u043e\u043a\u0435\u0440 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0438 \u0438\u0437\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043e\u0442 \u043b\u0438\u0448\u043d\u0435\u0439 \u0437\u0430\u0431\u043e\u0442\u044b \u043f\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044e \u0434\u0430\u043d\u043d\u044b\u0445. \u0423\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 AMQP \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0443 RabbitMQ \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441 \u0441\u0430\u043c\u044b\u043c\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b \u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.<br \/>  <a href=\"https:\/\/habrastorage.org\/webt\/ew\/ow\/kl\/ewowklgbqrrhl2yegropjr39wz0.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ew\/ow\/kl\/ewowklgbqrrhl2yegropjr39wz0.png\" alt=\"Weather station Banana Pi BPI-M64 Linux C# Docker RabbitMQ AvaloniaUI\" data-src=\"https:\/\/habrastorage.org\/webt\/ew\/ow\/kl\/ewowklgbqrrhl2yegropjr39wz0.png\"\/><\/a><\/p>\n<p>  <em>\u0412\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c RabbitMQ<\/em><\/p>\n<p>  \u0414\u043b\u044f \u0437\u0430\u043c\u0435\u0440\u0430 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0432\u0435\u043b\u0438\u0447\u0438\u043d \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b, \u0432\u043b\u0430\u0436\u043d\u043e\u0441\u0442\u0438 \u0438 \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u0430\u0442\u0447\u0438\u043a BME280, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043a \u0448\u0438\u043d\u0435 I2C. \u0412 \u0441\u0432\u044f\u0437\u0438 \u0441 \u0442\u043e\u0440\u0433\u043e\u0432\u043e\u0439 \u0432\u043e\u0439\u043d\u043e\u0439 \u043c\u0435\u0436\u0434\u0443 \u0421\u0428\u0410 \u0438 \u041a\u0438\u0442\u0430\u0435\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432 \u0440\u0435\u0437\u043a\u043e \u0432\u0437\u043b\u0435\u0442\u0435\u043b\u0438 \u0432 \u0446\u0435\u043d\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u044b \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u00a0 \u0434\u0430\u0442\u0447\u0438\u043a DS18B20, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 OneWire. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043d\u0430 \u0431\u043e\u0440\u0442\u0443 \u0432\u0430\u0448\u0435\u0433\u043e \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u044b GPIO \u0438\/\u0438\u043b\u0438 \u0448\u0438\u043d\u0430 I2C \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f BME280. \u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e <strong>Linux\u00a0 Framebuffer<\/strong>. \u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 framebuffer \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u043c \u044d\u043a\u0440\u0430\u043d\u0435. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u044d\u043a\u0440\u0430\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f HDMI-\u043c\u043e\u043d\u0438\u0442\u043e\u0440 \u0438\u043b\u0438 LCD \u043d\u0430 SPI \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u0438\u0441\u043f\u043b\u0435\u0439 SPI LCD ILI9341, \u043f\u043e\u0434 \u0435\u0433\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0441\u0434\u0435\u043b\u0430\u043d\u0430 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0430.<\/p>\n<p>  \u0411\u043e\u043b\u044c\u0448\u0430\u044f \u0441\u0445\u0435\u043c\u0430, \u043a\u0430\u043a \u0432\u0441\u0435 \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442:<br \/>  <a href=\"https:\/\/habrastorage.org\/webt\/yr\/nj\/r6\/yrnjr66zigs1zuvaay9y6xhxcsy.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/yr\/nj\/r6\/yrnjr66zigs1zuvaay9y6xhxcsy.png\" alt=\"Weather station Banana Pi BPI-M64 Linux C# Docker RabbitMQ AvaloniaUI\" data-src=\"https:\/\/habrastorage.org\/webt\/yr\/nj\/r6\/yrnjr66zigs1zuvaay9y6xhxcsy.png\"\/><\/a><\/p>\n<p>  <em>\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u043c\u0435\u0442\u0435\u043e\u0441\u0442\u0430\u043d\u0446\u0438\u0438 \u043d\u0430 Banana Pi M64<\/em><\/p>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043e, \u043a\u0430\u043a \u0432\u0441\u0435 \u044d\u0442\u043e \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434 \u0441\u0432\u043e\u0439 \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d\u044b, \u0442.\u043a. \u0441\u0442\u0430\u0442\u044c\u044f \u043e\u0441\u043d\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 <a href=\"https:\/\/habr.com\/ru\/company\/vdsina\/blog\/555598\/\">\u0423\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430\u043c\u0438 GPIO \u0438\u0437 C# .NET 5 \u0432 Linux \u043d\u0430 \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u043e\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435 Banana Pi M64 (ARM64) \u0438 Cubietruck (ARM32)<\/a>. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u043f\u043e\u043d\u044f\u0442\u0438\u044f\u043c\u0438: \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 GPIO, \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 Libgpiod, \u043a\u0430\u043a \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u043e\u043c\u0435\u0440\u0430 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432 GPIOXX, \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 .NET IoT, \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043e \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u043c \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u043e\u0442 \u043a\u043d\u043e\u043f\u043a\u0438. \u0420\u0430\u0437\u0434\u0435\u043b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 Libgpiod \u0438 .NET \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c, \u0442.\u043a. Docker-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0443\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0438 \u0441\u0440\u0435\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f.<\/p>\n<h2>\u0410\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>  \u041d\u0430 \u043f\u043b\u0430\u0442\u0435 Banana Pi BPI-M64 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d SoC\u00a0Allwinner A64, \u0432 \u043d\u0435\u0433\u043e \u0432\u0445\u043e\u0434\u0438\u0442 4 \u044f\u0434\u0440\u0430 Cortex-A53 \u0441 \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439 1.2 \u0413\u0413\u0446, \u0441 2 \u0413\u0411 DDR3. \u0414\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u0440\u0442\u0430 microSD Class 10 \u043e\u0431\u044a\u0435\u043c\u043e\u043c 16 \u0413\u0431. \u041d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u041e\u0421 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 Docker CE. \u041d\u0430 \u043f\u043b\u0430\u0442\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u044b GPIO \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432, \u043a\u043d\u043e\u043f\u043a\u0438 \u0438 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430. \u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 \u2014 \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u043e\u0433\u043e \u0434\u0430\u0442\u0447\u0438\u043a\u0430 DS18B20 \u043f\u043e OneWire-\u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443. \u041a 40-\u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043d\u043e\u043c\u0443 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u043c\u0443 \u0441 Raspberry Pi \u0440\u0430\u0437\u044a\u0435\u043c\u0443 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f:<\/p>\n<ul>\n<li>BME280 \u2014 \u0434\u0430\u0442\u0447\u0438\u043a \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b, \u0432\u043b\u0430\u0436\u043d\u043e\u0441\u0442\u0438 \u0438 \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u044f;<\/li>\n<li>DS18B20 \u2014 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0434\u0430\u0442\u0447\u0438\u043a \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f BME280;<\/li>\n<li>\u041a\u043d\u043e\u043f\u043a\u0430 \u2014 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u044d\u043a\u0440\u0430\u043d\u043e\u0432, \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e;<\/li>\n<li>\u0421\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u2014 \u0434\u043b\u044f \u0438\u043d\u0434\u0438\u043a\u0430\u0446\u0438\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443, \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e;<\/li>\n<li>LCD ILI9341 \u2014 \u044d\u043a\u0440\u0430\u043d, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u044b\u0439 \u043a SPI-\u0448\u0438\u043d\u0435, \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0439 LCD \u043d\u0430 HDMI \u0438\u043b\u0438 VGA \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435.<\/li>\n<\/ul>\n<p>  <\/p>\n<h2>\u0421\u0445\u0435\u043c\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f<\/h2>\n<p>  \u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f:<\/p>\n<ul>\n<li>\u0414\u0430\u0442\u0447\u0438\u043a BME280 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d \u043a \u0448\u0438\u043d\u0435 I2C, \u043a\u0430\u043a \u0432 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 <a href=\"https:\/\/devdotnet.org\/post\/rabota-s-gpio-v-linux-na-primere-banana-pi-bpi-m64-chast-5-device-tree-overlays-shina-i2c-podkyuchenie-datchikov-bosh-bmx\/\">\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 GPIO \u0432 Linux \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 Banana Pi BPI-M64. \u0427\u0430\u0441\u0442\u044c 5. Device Tree overlays. \u0428\u0438\u043d\u0430 I2C, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432 Bosh BMx<\/a>;<\/li>\n<li>\u042d\u043a\u0440\u0430\u043d ILI9341 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d \u043a \u0448\u0438\u043d\u0435 SPI, \u043a\u0430\u043a \u0432 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 <a href=\"https:\/\/devdotnet.org\/post\/rabota-s-gpio-v-linux-na-primere-banana-pi-bpi-m64-chast-4-device-tree-overlays-podkluchenie-displey-spi-lcd-ili9341\/\">\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 GPIO \u0432 Linux \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 Banana Pi BPI-M64. \u0427\u0430\u0441\u0442\u044c 4. Device Tree overlays. \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0434\u0438\u0441\u043f\u043b\u0435\u044f SPI LCD ILI9341<\/a>;<\/li>\n<li>\u041a\u043d\u043e\u043f\u043a\u0430 \u0438 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u044b \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u043a\u0430\u043a \u0432 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 <a href=\"https:\/\/devdotnet.org\/post\/upravlyaem-gpio-iz-csharp-net-5-v-linux-na-banana-pi-m64-arm64-i-cubietruck-arm32\/\">\u0423\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430\u043c\u0438 GPIO \u0438\u0437 C# .NET 5<\/a>;<\/li>\n<li>\u0414\u0430\u0442\u0447\u0438\u043a DS18B20 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d \u043d\u0430 \u211631 \u043a\u043e\u043d\u0442\u0430\u043a\u0442 \u0440\u0430\u0437\u044a\u0435\u043c\u0430, \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430 \u00abPB5\u00bb, \u043d\u043e\u043c\u0435\u0440 \u043b\u0438\u043d\u0438\u0438 \u2014 <strong>37<\/strong>.<\/li>\n<\/ul>\n<p>  \u0418\u0442\u043e\u0433\u043e\u0432\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<br \/>  <a href=\"https:\/\/habrastorage.org\/webt\/gd\/fx\/qa\/gdfxqavpzkcefvbznjqqndaux14.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/gd\/fx\/qa\/gdfxqavpzkcefvbznjqqndaux14.png\" alt=\"Weather station Banana Pi BPI-M64 Linux C# Docker RabbitMQ AvaloniaUI\" data-src=\"https:\/\/habrastorage.org\/webt\/gd\/fx\/qa\/gdfxqavpzkcefvbznjqqndaux14.png\"\/><\/a><\/p>\n<p>  <em>\u041f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u043a Banana Pi BPI-M64<\/em><\/p>\n<p>  \u0414\u043b\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 I2C, OneWire, SPI \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u041e\u0421 Linux \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435\u00a0\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430. \u042d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u043f\u0443\u0442\u0435\u043c \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u0430 \u043d\u0430\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0434\u0435\u0440\u0435\u0432\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 DTO. \u041a\u0430\u043a \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0444\u0430\u0439\u043b\u044b \u043d\u0430\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 (DTS), \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 <a href=\"https:\/\/devdotnet.org\/post\/rabota-s-gpio-na-primere-banana-pi-bpi-m64-chast-2-device-tree-overlays\/\">\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 GPIO \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 Banana Pi BPI-M64. \u0427\u0430\u0441\u0442\u044c 2. Device Tree overlays.<\/a><\/p>\n<p>  \u0424\u0430\u0439\u043b\u044b DTS \u0434\u043b\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432:<\/p>\n<ul>\n<li>\u0414\u0430\u0442\u0447\u0438\u043a BME280 \u2014 <a href=\"https:\/\/github.com\/devdotnetorg\/Banana-Pi-BPI-M64\/blob\/master\/dt-overlays\/sun50i-a64-i2c1-bme280.dts\">sun50i-a64-i2c1-bme280.dts<\/a> \u0438\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 I2C \u2014 <a href=\"https:\/\/github.com\/devdotnetorg\/Banana-Pi-BPI-M64\/blob\/master\/dt-overlays\/sun50i-a64-i2c1-on.dts\">sun50i-a64-i2c1-on.dts<\/a>;<\/li>\n<li>\u042d\u043a\u0440\u0430\u043d ILI9341 \u2014 <a href=\"https:\/\/github.com\/devdotnetorg\/Banana-Pi-BPI-M64\/blob\/master\/dt-overlays\/sun50i-a64-spi-ili9341-backlight-on-off.dts\">sun50i-a64-spi-ili9341-backlight-on-off.dts<\/a>;<\/li>\n<li>\u0414\u0430\u0442\u0447\u0438\u043a DS18B20 \u2014 <a href=\"https:\/\/github.com\/devdotnetorg\/Banana-Pi-BPI-M64\/blob\/master\/dt-overlays\/sun50i-a64-w1-gpio-pb5.dts\">sun50i-a64-w1-gpio-pb5.dts<\/a>.<\/li>\n<\/ul>\n<p>  <a href=\"https:\/\/habrastorage.org\/webt\/2l\/3t\/sn\/2l3tsnyujw-lofjkj5e2oq1zuoc.jpeg\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/2l\/3t\/sn\/2l3tsnyujw-lofjkj5e2oq1zuoc.jpeg\" alt=\"Weather station Banana Pi BPI-M64 Linux C# Docker RabbitMQ AvaloniaUI\" data-src=\"https:\/\/habrastorage.org\/webt\/2l\/3t\/sn\/2l3tsnyujw-lofjkj5e2oq1zuoc.jpeg\" data-blurred=\"true\"\/><\/a><\/p>\n<p>  <em>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043a Banana Pi BPI-M64, \u0432\u0438\u0434 \u0441\u0432\u0435\u0440\u0445\u0443<\/em><\/p>\n<h2>Docker-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 Libgpiod<\/h2>\n<p>  \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 <a href=\"https:\/\/devdotnet.org\/post\/rabota-s-gpio-v-linux-chast-6-biblioteka-libgpiod\/\">Libgpiod<\/a> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430\u043c\u0438 GPIO \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 \u0438\u0437 .NET \u0441\u0440\u0435\u0434\u044b \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f, \u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0430 \u043d\u0430 Linux (Armbian). \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e-\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0439, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430\u0445 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b ARM32, ARM64, \u0438 x86.<\/p>\n<p>  \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430\u043c\u0438 GPIO \u0432 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 <a href=\"https:\/\/habr.com\/ru\/company\/vdsina\/blog\/555598\/\">\u0423\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430\u043c\u0438 GPIO \u0438\u0437 C# .NET 5 \u0432 Linux \u043d\u0430 \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u043e\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435 Banana Pi M64 (ARM64) \u0438 Cubietruck (ARM32)<\/a> \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0438\u0441\u043a\u043e\u043c\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0441 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f. \u0421\u0435\u0439\u0447\u0430\u0441 \u0441\u043e\u0437\u0434\u0430\u043d Docker-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439, \u0438 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0438\u0437 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u00a0\u0443\u0442\u0438\u043b\u0438\u0442\u044b: gpiodetect, gpioinfo, gpioset, gpioget, gpiomon. \u041e\u0431\u0440\u0430\u0437 Docker <a href=\"https:\/\/hub.docker.com\/r\/devdotnetorg\/libgpiod\">devdotnetorg\/libgpiod<\/a>, GitHub <a href=\"https:\/\/github.com\/devdotnetorg\/docker-libgpiod\">devdotnetorg\/docker-libgpiod<\/a>.<\/p>\n<p>  \u0414\u043e\u0441\u0442\u0443\u043f \u043a \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430\u043c GPIO \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 <i>\/dev\/gpiochipX<\/i>. \u0414\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u043d\u0430 \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u043e\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n<pre><code class=\"bash\">$ ls \/dev\/gpiochip* <\/code><\/pre>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b:<\/p>\n<pre><code class=\"bash\">root@bananapim64:~# ls \/dev\/gpiochip* \/dev\/gpiochip0 \/dev\/gpiochip1 \/dev\/gpiochip2 <\/code><\/pre>\n<p>  \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0434\u0430\u043d\u043d\u044b\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0443 <a href=\"https:\/\/hub.docker.com\/r\/devdotnetorg\/libgpiod\">devdotnetorg\/libgpiod<\/a>. \u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u043c \u0434\u043e\u0441\u0442\u0443\u043f \u043a\u043e \u0432\u0441\u0435\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c <i>\/dev\/gpiochipX<\/i> \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <strong>gpiodetect<\/strong>. \u0423\u0442\u0438\u043b\u0438\u0442\u0430 <strong>gpiodetect<\/strong> \u0432\u044b\u0432\u0435\u0434\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u0447\u0438\u043f\u043e\u0432 GPIO, \u0438\u0445 \u043c\u0435\u0442\u043a\u0438 \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043b\u0438\u043d\u0438\u0439. \u041a\u043e\u043c\u0430\u043d\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"bash\">$ docker run --rm --name test-libgpiod --device \/dev\/gpiochip0 --device \/dev\/gpiochip1 --device \/dev\/gpiochip2 devdotnetorg\/libgpiod gpiodetect <\/code><\/pre>\n<p>  \u0433\u0434\u0435 <em>&#171;&#8212;device \/dev\/gpiochip0&#187;<\/em> \u2014 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443, <em>gpiodetect<\/em> \u2014 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0443\u0442\u0438\u043b\u0438\u0442\u044b, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0439 \u0438\u0437 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430.<\/p>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b:<\/p>\n<pre><code class=\"bash\">root@bananapim64:~# docker run --rm --name test-libgpiod --device \/dev\/gpiochip0 --device \/dev\/gpiochip1 --device \/dev\/gpiochip2 devdotnetorg\/libgpiod gpiodetect gpiochip0 [1f02c00.pinctrl] (32 lines) gpiochip1 [1c20800.pinctrl] (256 lines) gpiochip2 [axp20x-gpio] (2 lines) <\/code><\/pre>\n<p>  \u0412 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 <a href=\"https:\/\/habr.com\/ru\/company\/vdsina\/blog\/555598\/\">\u0423\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430\u043c\u0438 GPIO \u0438\u0437 C# .NET 5<\/a>, \u043a\u043d\u043e\u043f\u043a\u0430 \u0438 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u043b\u0438\u0441\u044c \u0432 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435\u00a0 <i>\/dev\/gpiochip1<\/i>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u0442\u043e\u043b\u044c\u043a\u043e \u043a \u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443. \u041f\u043e\u0432\u0442\u043e\u0440\u0438\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b <strong>gpiodetect<\/strong>, \u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u0434\u043e\u0441\u0442\u0443\u043f \u043a <i>\/dev\/gpiochip1<\/i>, \u043a\u043e\u043c\u0430\u043d\u0434\u0430:<\/p>\n<pre><code class=\"bash\">$ docker run --rm --name test-libgpiod --device \/dev\/gpiochip1 devdotnetorg\/libgpiod gpiodetect <\/code><\/pre>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b:<\/p>\n<pre><code class=\"bash\">root@bananapim64:~# docker run --rm --name test-libgpiod --device \/dev\/gpiochip1 devdotnetorg\/libgpiod gpiodetect gpiochip1 [1c20800.pinctrl] (256 lines) <\/code><\/pre>\n<p>  \u041a\u043e\u043c\u0430\u043d\u0434\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u0430\u043a \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438, \u0432\u043a\u043b\u044e\u0447\u0438\u043c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u043d\u0430 36-\u043c \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0435, \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u00ab1\u00bb, \u043a\u043e\u043c\u0430\u043d\u0434\u0430:<\/p>\n<pre><code class=\"bash\">$ docker run --rm --name test-libgpiod --device \/dev\/gpiochip1 devdotnetorg\/libgpiod gpioset 1 36=1 <\/code><\/pre>\n<p>  \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u0441\u044f.<\/p>\n<h2>\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 dotnet-gpioset \u043d\u0430 C#<\/h2>\n<p>  \u0412 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0438\u043c\u0435\u043d <strong>System.Device.Gpio.Drivers<\/strong> \u0432\u0445\u043e\u0434\u0438\u0442 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u2014 <strong>LibGpiodDriver<\/strong>. \u0414\u0440\u0430\u0439\u0432\u0435\u0440 LibGpiodDriver \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 Libgpiod \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043f\u043e\u0440\u0442\u0430\u043c GPIO, \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 SysFsDriver. \u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 <strong>dotnet-gpioset<\/strong> \u043d\u0430 .NET5, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0434\u0440\u0430\u0439\u0432\u0435\u0440 <strong>LibGpiodDriver<\/strong>, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u043e \u0442\u0443 \u0436\u0435 \u0441\u0430\u043c\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0447\u0442\u043e \u0438 \u0443\u0442\u0438\u043b\u0438\u0442\u0430 gpioset \u0438\u0437 \u0441\u043e\u0441\u0442\u0430\u0432\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 Libgpiod. \u0414\u0430\u043d\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0432 \u0432\u0438\u0434\u0435 Docker-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 <a href=\"https:\/\/hub.docker.com\/r\/devdotnetorg\/dotnet-gpioset\">devdotnetorg\/dotnet-gpioset<\/a> GitHub <a href=\"https:\/\/github.com\/devdotnetorg\/dotnet-libgpiod-gpioset\">dotnet-libgpiod-gpioset<\/a>.<\/p>\n<p>  \u0412\u043a\u043b\u044e\u0447\u0438\u043c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434, \u043d\u043e \u0443\u0436\u0435 \u0438\u0437 .NET \u043a\u043e\u0434\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 Libgpiod, \u043a\u043e\u043c\u0430\u043d\u0434\u0430:<\/p>\n<pre><code class=\"bash\">$ docker run --rm --name test-dotnet-gpioset --device \/dev\/gpiochip1 devdotnetorg\/dotnet-gpioset 1 36=1 <\/code><\/pre>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b:<\/p>\n<pre><code class=\"bash\">root@bananapim64:~# docker run --rm --name test-dotnet-gpioset --device \/dev\/gpiochip1 devdotnetorg\/dotnet-gpioset 1 36=1 Args gpiochip=1, pin=36, value=High OK <\/code><\/pre>\n<p>  \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u0441\u044f. Dockerfile \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0430\u00a0\u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0445 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 <strong>LibGpiodDriver<\/strong> \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430\u043c GPIO \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430.<\/p>\n<h2>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u0442\u0447\u0438\u043a\u0430 BME280 \u043a \u0448\u0438\u043d\u0435 I2C<\/h2>\n<p>  \u0414\u0430\u0442\u0447\u0438\u043a BME280 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043a \u0448\u0438\u043d\u0435 I2C. I2C (InterIC, \u0438\u043b\u0438 IIC) \u2014 \u0434\u0432\u0443\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u0448\u0438\u043d\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u0430\u044f \u0435\u0449\u0435 \u0432 1980 \u0433\u043e\u0434\u0443 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0435\u0439 Philips \u0434\u043b\u044f \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0432\u044f\u0437\u0438 \u043c\u0435\u0436\u0434\u0443 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0441\u0445\u0435\u043c\u0430\u043c\u0438 \u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438. \u041e\u0447\u0435\u043d\u044c \u0447\u0430\u0441\u0442\u043e \u043d\u0430 \u0441\u0445\u0435\u043c\u0430\u0445 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 I2C\/TWI(Two Wire Interface) \u2014 \u044d\u0442\u043e \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f Philips \u0448\u0438\u043d\u0443 I2C \u0437\u0430\u043f\u0430\u0442\u0435\u043d\u0442\u043e\u0432\u0430\u043b\u0430. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0448\u0438\u043d\u044b I2C \u0434\u0440\u0443\u0433\u0438\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043e\u0431\u044f\u0437\u0430\u043d\u044b \u0431\u044b\u043b\u0438 \u0437\u0430\u043f\u043b\u0430\u0442\u0438\u0442\u044c \u0440\u043e\u044f\u043b\u0442\u0438, \u0447\u0442\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c-\u0442\u043e \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c. \u0422\u0430\u043a \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u043a\u043b\u043e\u043d \u0448\u0438\u043d\u044b I2C \u2014 \u0448\u0438\u043d\u0430 TWI, \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u0430\u044f \u043e\u0442 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u043e\u043d\u043d\u044b\u0445 \u043e\u0442\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439. \u0412\u0441\u0435, \u0447\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e \u043a \u0448\u0438\u043d\u0435 I2C, \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e \u0438 \u043a \u0448\u0438\u043d\u0435 TWI, \u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442.<\/p>\n<p>  \u041a \u0448\u0438\u043d\u0435 I2C \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0434\u043e 127 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432. \u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u0434\u0432\u0443\u043c \u043f\u0440\u043e\u0432\u043e\u0434\u0430\u043c:<\/p>\n<ul>\n<li>SDA (Serial Data) \u2014 \u044d\u0442\u0430 \u043b\u0438\u043d\u0438\u044f \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0437\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0434\u0430\u043d\u043d\u044b\u0445;<\/li>\n<li>SCL (Serial Clock) \u2014 \u044d\u0442\u0430 \u043b\u0438\u043d\u0438\u044f \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f.<\/li>\n<\/ul>\n<p>  <a href=\"https:\/\/devdotnet.org\/wp-content\/uploads\/ddotnet-service-weather-station-i2c.jpg\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/kg\/3o\/fk\/kg3ofkfmaobtxyl2x2yjtfwwdio.jpeg\" alt=\"Weather station Banana Pi BPI-M64 Linux C# Docker RabbitMQ AvaloniaUI\" data-src=\"https:\/\/habrastorage.org\/webt\/kg\/3o\/fk\/kg3ofkfmaobtxyl2x2yjtfwwdio.jpeg\" data-blurred=\"true\"\/><\/a><\/p>\n<p>  <em>\u0420\u0430\u0441\u043f\u0430\u0439\u043a\u0430 \u0448\u0438\u043d\u044b I2C \u0441 \u043f\u043e\u0434\u0442\u044f\u0433\u0438\u0432\u0430\u044e\u0449\u0438\u043c\u0438 \u0440\u0435\u0437\u0438\u0441\u0442\u043e\u0440\u0430\u043c\u0438 \u043d\u0430 4,7 \u043a\u041e\u043c<\/em><\/p>\n<h3><strong>\u0410\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u044f \u0432 \u0448\u0438\u043d\u0435 I2C<\/strong><\/h3>\n<p>  \u041a\u0430\u0436\u0434\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u043e\u0435 \u043a \u0448\u0438\u043d\u0435, \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e \u0430\u0434\u0440\u0435\u0441\u043e\u0432\u0430\u043d\u043e \u043f\u043e \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443. \u0412 \u043e\u0431\u044b\u0447\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f 7-\u0431\u0438\u0442\u043d\u0430\u044f \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u044f.<\/p>\n<h3>\u0428\u0438\u043d\u0430 I2C\/TWI \u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0435 Allwinner A64<\/h3>\n<p>  \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e SoC Allwinner A64:<\/p>\n<ul>\n<li>\u0414\u0432\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 TWI;<\/li>\n<li>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e \u0440\u0435\u0436\u0438\u043c\u0430 (\u0434\u043e 100 \u041a\u0431\u0438\u0442\/\u0441) \u0438 \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0440\u0435\u0436\u0438\u043c\u0430 (\u0434\u043e 400 \u041a\u0431\u0438\u0442\/\u0441) \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445;<\/li>\n<li>\u0420\u043e\u043b\u044c \u0432\u0435\u0434\u0443\u0449\u0435\u0433\u043e (master) \/ \u0432\u0435\u0434\u043e\u043c\u043e\u0433\u043e (slaves) \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f;<\/li>\n<li>\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u0441 10-\u0431\u0438\u0442\u043d\u043e\u0439 \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u0435\u0439;<\/li>\n<li>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u0448\u0438\u0440\u043e\u043a\u043e\u043c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u0445 \u0447\u0430\u0441\u0442\u043e\u0442.<\/li>\n<\/ul>\n<p>  \u041d\u0430 \u0441\u0430\u043c\u043e\u0439 \u043f\u043b\u0430\u0442\u0435 \u0440\u0430\u0437\u0432\u0435\u0434\u0435\u043d\u043e \u0434\u0432\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 TWI:<\/p>\n<ul>\n<li>TWI0 \u2014 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0440\u0430\u0437\u044a\u0435\u043c\u0435 MIPI DSI display;<\/li>\n<li>TWI1 \u2014 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043d\u0430 40-\u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043d\u043e\u043c \u0440\u0430\u0437\u044a\u0435\u043c\u0435 (\u0442\u0438\u043f\u0430 Raspberry Pi 3 GPIO), \u043a \u043d\u0435\u043c\u0443 \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0434\u0430\u0442\u0447\u0438\u043a\u0438.<\/li>\n<\/ul>\n<p>  \u0414\u043b\u044f \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0441 \u0434\u0430\u0442\u0447\u0438\u043a\u0430 BME280 \u0438\u0437 .NET \u043a\u043e\u0434\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u043d\u0430\u0442\u044c \u043d\u043e\u043c\u0435\u0440 \u043b\u0438\u043d\u0438\u0438 I2C. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 TWI1 \u0441 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u043c \u00ab1\u00bb. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 <strong>\u043d\u043e\u043c\u0435\u0440 \u043b\u0438\u043d\u0438\u0438 I2C \u0434\u043b\u044f .NET \u043a\u043e\u0434\u0430<\/strong> \u0431\u0443\u0434\u0435\u0442 \u2014 <strong>\u00ab1\u00bb<\/strong>.<\/p>\n<h3>\u0414\u0430\u0442\u0447\u0438\u043a BME280<\/h3>\n<p>  <a href=\"https:\/\/habrastorage.org\/webt\/fq\/bg\/tm\/fqbgtmhjntbonahwdjxbodd2q7e.jpeg\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/fq\/bg\/tm\/fqbgtmhjntbonahwdjxbodd2q7e.jpeg\" alt=\"Linux I2C Bosch BME280\" data-src=\"https:\/\/habrastorage.org\/webt\/fq\/bg\/tm\/fqbgtmhjntbonahwdjxbodd2q7e.jpeg\" data-blurred=\"true\"\/><\/a><\/p>\n<p>  \u041c\u043e\u0434\u0443\u043b\u044c BME280 \u0444\u0438\u0440\u043c\u044b Bosch Sensortec \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0430\u0442\u043c\u043e\u0441\u0444\u0435\u0440\u043d\u043e\u0433\u043e \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u0438 \u0432\u043b\u0430\u0436\u043d\u043e\u0441\u0442\u0438. \u041f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u043f\u0435\u0440\u0432\u044b\u043c\u0438 \u0434\u0430\u0442\u0447\u0438\u043a\u0430\u043c\u0438 \u0441\u0435\u0440\u0438\u0438 (BMP085 \u0438 BMP180) \u043e\u043d \u0438\u043c\u0435\u0435\u0442 \u043b\u0443\u0447\u0448\u0438\u0435 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438 \u0438 \u043c\u0435\u043d\u044c\u0448\u0438\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u044b. \u041e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0434\u0430\u0442\u0447\u0438\u043a\u0430 BMP280 \u2013 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0433\u0438\u0433\u0440\u043e\u043c\u0435\u0442\u0440\u0430, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0437\u043c\u0435\u0440\u044f\u0442\u044c \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0432\u043b\u0430\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u043e\u0437\u0434\u0443\u0445\u0430 \u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0430 \u0435\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u0435 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0443\u044e \u043c\u0435\u0442\u0435\u043e\u0441\u0442\u0430\u043d\u0446\u0438\u044e.<\/p>\n<p>  \u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438 \u043c\u043e\u0434\u0443\u043b\u044f BME280:<\/p>\n<ul>\n<li>\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441: SPI, I2C;<\/li>\n<li>\u041d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u043f\u0438\u0442\u0430\u043d\u0438\u044f: \u043e\u0442 3,3 \u0434\u043e 5 \u0412;<\/li>\n<li>\u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0439 \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u044f: 300-1100 hPa;<\/li>\n<li>\u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0439 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b: -40 \u2014 +85 \u00b0C;<\/li>\n<li>\u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0439 \u0432\u043b\u0430\u0436\u043d\u043e\u0441\u0442\u0438: 0 \u2014 100 %;<\/li>\n<li>\u042d\u043d\u0435\u0440\u0433\u043e\u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435: \u0440\u0435\u0436\u0438\u043c \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0439 \u2014 3.6 \u043c\u043a\u0410, \u0441\u043f\u044f\u0449\u0438\u0439 \u0440\u0435\u0436\u0438\u043c: \u2014 0.1 \u043c\u043a\u0410;<\/li>\n<li>\u0422\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0439: \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u2014 0.01 hPa ( &lt; 10 cm), \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430 \u2014 0.01\u00b0 C, \u0432\u043b\u0430\u0436\u043d\u043e\u0441\u0442\u044c \u2013 3%.<\/li>\n<\/ul>\n<p>  \u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432:<\/p>\n<ul>\n<li>VCC \u2014 \u043f\u0438\u0442\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u044f 3.3 \u0412 \u0438\u043b\u0438 5 \u0412;<\/li>\n<li>GND \u2014\u00a0 Ground;<\/li>\n<li>SCL \u2014 \u043b\u0438\u043d\u0438\u044f \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f;<\/li>\n<li>SDA \u2014 \u043b\u0438\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445.<\/li>\n<\/ul>\n<p>  \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043c\u043e\u0434\u0443\u043b\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e \u0434\u0432\u0443\u0445\u043f\u0440\u043e\u0432\u043e\u0434\u043d\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 I2C, \u0430\u0434\u0440\u0435\u0441 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 0x76.<\/p>\n<p>  <a href=\"https:\/\/habrastorage.org\/webt\/l3\/bt\/zw\/l3btzwvdak0yyvck-fw2a94ux7i.jpeg\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/l3\/bt\/zw\/l3btzwvdak0yyvck-fw2a94ux7i.jpeg\" alt=\"Weather station Banana Pi BPI-M64 Linux C# Docker RabbitMQ AvaloniaUI\" data-src=\"https:\/\/habrastorage.org\/webt\/l3\/bt\/zw\/l3btzwvdak0yyvck-fw2a94ux7i.jpeg\" data-blurred=\"true\"\/><\/a><br \/>  <em>\u0414\u0430\u0442\u0447\u0438\u043a BME280 \u043d\u0430 3,3 \u0412<\/em><\/p>\n<p>  \u041d\u043e\u0432\u043e\u0435 \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u0435 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432 BOSCH \u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 \u043d\u0438\u0437\u043a\u0438\u043c \u044d\u043d\u0435\u0440\u0433\u043e\u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435\u043c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u0439 \u0432\u043b\u0430\u0436\u043d\u043e\u0441\u0442\u0438 \u0438 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u0441 \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439 \u0440\u0430\u0437 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432\u0441\u0435\u0433\u043e 1,8 \u043c\u043a\u0410. \u0415\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0449\u0435 \u0438 \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u0441\u0443\u043c\u043c\u0430\u0440\u043d\u044b\u0439 \u0442\u043e\u043a \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442 3,6 \u043c\u043a\u0410. \u0412 \u0440\u0435\u0436\u0438\u043c\u0435 \u0441\u043d\u0430 \u0434\u0430\u0442\u0447\u0438\u043a \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u044f\u0435\u0442 \u0438 \u0432\u043e\u0432\u0441\u0435 0,1 \u043c\u043a\u0410.<\/p>\n<p>  \u0422\u0430\u043a\u0430\u044f \u044d\u043d\u0435\u0440\u0433\u043e\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u0442\u0447\u0438\u043a \u0432 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445 \u0443\u043c\u043d\u043e\u0433\u043e \u0434\u043e\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0433\u043e\u0434\u0430\u043c\u0438 \u043f\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u043e\u0442 \u043e\u0434\u043d\u043e\u0433\u043e \u043b\u0438\u0442\u0438\u0435\u0432\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043f\u0438\u0442\u0430\u043d\u0438\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, CR2450.<\/p>\n<p>  \u0414\u0430\u043d\u043d\u044b\u0439 \u0434\u0430\u0442\u0447\u0438\u043a \u0435\u043c\u043a\u043e\u0441\u0442\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430, \u0447\u0442\u043e \u0437\u0430\u0432\u0435\u0434\u043e\u043c\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0435\u0433\u043e \u0431\u043e\u043b\u0435\u0435 \u0442\u043e\u0447\u043d\u044b\u043c, \u0447\u0435\u043c \u0440\u0435\u0437\u0438\u0441\u0442\u0438\u0432\u043d\u044b\u0435 \u0434\u0430\u0442\u0447\u0438\u043a\u0438 \u0442\u0438\u043f\u0430 DHT11.<\/p>\n<p>  Datasheet \u043d\u0430 \u0434\u0430\u0442\u0447\u0438\u043a BME280 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 <a href=\"https:\/\/github.com\/devdotnetorg\/Site\/blob\/master\/Uploads\/files\/BST-BME280_DS001-10.pdf\">BST-BME280_DS001-10<\/a> [PDF 1,84 \u041c\u0411].<\/p>\n<h3>\u0421\u0445\u0435\u043c\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u0442\u0447\u0438\u043a\u0430 BME280 \u043a \u0448\u0438\u043d\u0435 I2C<\/h3>\n<p>  \u0418\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u0441\u0445\u0435\u043c\u044b <a href=\"https:\/\/devdotnet.org\/post\/raspinovka-gpio-dlya-banana-pi-bpi-m64\/\">\u0420\u0430\u0441\u043f\u0438\u043d\u043e\u0432\u043a\u0430 GPIO \u0434\u043b\u044f Banana Pi BPI-M64<\/a>, \u0448\u0438\u043d\u0430 I2C \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430\u0445 \u2116 3 \u0438 5. \u041a\u043e\u043d\u0442\u0430\u043a\u0442 \u21163 \u2014 TWI1-SDA \u2014 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0434\u0430\u043d\u043d\u044b\u0445. \u041a\u043e\u043d\u0442\u0430\u043a\u0442 \u21165 \u2014 TWI1-SCL \u2014 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f, \u0442\u0430\u043a\u0442\u044b. \u041b\u0438\u043d\u0438\u0438 TWI1-SDA \u0438 TWI1-SCL \u043f\u043e\u0434\u0442\u044f\u043d\u0435\u043c \u043a \u043b\u0438\u043d\u0438\u0438 \u043f\u0438\u0442\u0430\u043d\u0438\u044f VCC, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0432 \u043f\u043e\u0434\u0442\u044f\u0433\u0438\u0432\u0430\u044e\u0449\u0438\u0435 \u0440\u0435\u0437\u0438\u0441\u0442\u043e\u0440\u044b \u0441\u043e\u043f\u0440\u043e\u0442\u0438\u0432\u043b\u0435\u043d\u0438\u0435\u043c 4,7 \u043a\u041e\u043c.<\/p>\n<p>  <a href=\"https:\/\/habrastorage.org\/webt\/bv\/cr\/au\/bvcrauvkw9tnw_2ldrctgs5pvry.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/bv\/cr\/au\/bvcrauvkw9tnw_2ldrctgs5pvry.png\" alt=\"Linux I2C Bosch BME280\" data-src=\"https:\/\/habrastorage.org\/webt\/bv\/cr\/au\/bvcrauvkw9tnw_2ldrctgs5pvry.png\"\/><\/a><br \/>  <em>\u0421\u0445\u0435\u043c\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u0442\u0447\u0438\u043a\u0430 BME280 \u043a \u0448\u0438\u043d\u0435 I2C<\/em><\/p>\n<h3>\u0424\u0430\u0439\u043b \u043d\u0430\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 DTS \u0434\u043b\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0448\u0438\u043d\u044b I2C<\/h3>\n<p>  \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0434\u0435\u0440\u0435\u0432\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 <a href=\"https:\/\/github.com\/devdotnetorg\/Banana-Pi-BPI-M64\/blob\/master\/dt-overlays\/sun50i-a64-bananapi-m64_Armbian_21.02.1.dts\">sun50i-a64-bananapi-m64.dts<\/a> \u0435\u0441\u0442\u044c \u0443\u0437\u0435\u043b \u0434\u043b\u044f \u0448\u0438\u043d\u044b I2C, \u0438 \u043e\u043d \u0432\u043a\u043b\u044e\u0447\u0435\u043d \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e.<\/p>\n<p>  \u0423\u0437\u0435\u043b <strong>i2c1-pins<\/strong> (\u0438\u0437 \u0444\u0430\u0439\u043b\u0430<a href=\"https:\/\/github.com\/devdotnetorg\/Banana-Pi-BPI-M64\/blob\/master\/dt-overlays\/sun50i-a64-bananapi-m64_Armbian_21.02.1.dts\"> sun50i-a64-bananapi-m64.dts<\/a>) \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <strong>&#171;\/soc\/pinctrl@1c20800\/i2c1-pins&#187;<\/strong> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432:<\/p>\n<pre><code class=\"bash\">i2c1-pins { pins = \"PH2\", \"PH3\"; function = \"i2c1\"; bias-pull-up; phandle = &lt;0x3b>; }; <\/code><\/pre>\n<p>  \u0423\u0437\u0435\u043b <strong>i2c@1c2b000<\/strong> (\u0438\u0437 \u0444\u0430\u0439\u043b\u0430 <a href=\"https:\/\/github.com\/devdotnetorg\/Banana-Pi-BPI-M64\/blob\/master\/dt-overlays\/sun50i-a64-bananapi-m64_Armbian_21.02.1.dts\">sun50i-a64-bananapi-m64.dts<\/a>) \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <strong>&#171;\/soc\/i2c@1c2b000&#187;<\/strong> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u0430\u043c\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e I2C:<\/p>\n<pre><code class=\"bash\">i2c@1c2b000 { compatible = \"allwinner,sun6i-a31-i2c\"; reg = &lt;0x1c2b000 0x400>; interrupts = &lt;0x0 0x7 0x4>; clocks = &lt;0x2 0x40>; resets = &lt;0x2 0x2b>; pinctrl-names = \"default\"; pinctrl-0 = &lt;0x3b>; status = \"okay\"; #address-cells = &lt;0x1>; #size-cells = &lt;0x0>; phandle = &lt;0x88>; }; <\/code><\/pre>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u0438\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u0430, \u0441\u0442\u0430\u0442\u0443\u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 <strong>status = \u00abokay\u00bb<\/strong> \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0448\u0438\u043d\u0430 I2C \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0434\u0430\u0442\u0447\u0438\u043a\u0438. \u041d\u043e \u0435\u0441\u043b\u0438 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0430, \u0442\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0444\u0430\u0439\u043b dts \u0434\u043b\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0448\u0438\u043d\u044b I2C. \u041d\u0430 \u044d\u0442\u043e\u0442 \u0441\u043b\u0443\u0447\u0430\u0439 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d \u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u0430\u043a\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430.<\/p>\n<p>  <strong>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0444\u0430\u0439\u043b DTS \u0441 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c: <a href=\"https:\/\/github.com\/devdotnetorg\/Banana-Pi-BPI-M64\/blob\/master\/dt-overlays\/sun50i-a64-i2c1-on.dts\">sun50i-a64-i2c1-on.dts<\/a>:<\/strong><\/p>\n<pre><code class=\"bash\">\/dts-v1\/; \/plugin\/;  \/ { compatible = \"allwinner,sun50i-a64\";  fragment@0 { target-path = \"\/aliases\"; __overlay__ { i2c1 = \"\/soc\/i2c@1c2b000\"; }; };  fragment@1 { target = &lt;&amp;i2c1>; __overlay__ { pinctrl-names = \"default\"; pinctrl-0 = &lt;&amp;i2c1_pins>; status = \"okay\"; }; }; };<\/code><\/pre>\n<p>  \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b:<\/p>\n<ul>\n<li><strong>pinctrl-0 = &lt;&amp;i2c1_pins><\/strong> \u2014 \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u044b \u0443\u0437\u043b\u0430 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 &#171;\/soc\/pinctrl@1c20800\/i2c1-pins&#187;;<\/li>\n<li><strong>status = \u00abokay\u00bb<\/strong> \u2014 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0448\u0438\u043d\u0443 I2C \u043d\u0430 \u043f\u043b\u0430\u0442\u0435 \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432.<\/li>\n<\/ul>\n<p>  \u0420\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u043c \u0444\u0430\u0439\u043b \u043f\u043e \u043f\u0443\u0442\u0438 <i>\/boot\/dtb\/allwinner\/overlay<\/i>. \u0417\u0430\u0442\u0435\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c \u0444\u0430\u0439\u043b .dts \u0432 .dtbo:<\/p>\n<pre><code class=\"bash\">$ dtc -O dtb -o sun50i-a64-i2c1-on.dtbo sun50i-a64-i2c1-on.dts <\/code><\/pre>\n<p>  \u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0443\u0442\u0438\u043b\u0438\u0442\u0443 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043b\u0430\u0442\u044b: <i>armbian-config<\/i>. \u041f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043f\u043e \u043c\u0435\u043d\u044e: <strong>System > Hardware<\/strong>, \u0432\u043a\u043b\u044e\u0447\u0438\u043c \u0441\u043b\u043e\u0439 (overlay): <strong>sun50i-a64-i2c1-on<\/strong>. \u041f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043f\u043b\u0430\u0442\u044b \u0448\u0438\u043d\u0430 I2C \u0431\u0443\u0434\u0435\u0442 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430.<\/p>\n<h3>\u041f\u043e\u0438\u0441\u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u043d\u0430 \u0448\u0438\u043d\u0435 I2C<\/h3>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0448\u0438\u043d\u044b I2C \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u0442\u0447\u0438\u043a\u0430 BME280 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0432\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438 \u0434\u0430\u0442\u0447\u0438\u043a \u043e\u0442\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0443\u0442\u0438\u043b\u0438\u0442\u0443 <i>i2c-tools<\/i>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442 \u043f\u043e\u0438\u0441\u043a \u0432\u0441\u0435\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445 \u043a \u0448\u0438\u043d\u0435 I2C.<\/p>\n<p>  \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0443\u0442\u0438\u043b\u0438\u0442\u044b <i>i2c-tools<\/i>:<\/p>\n<pre><code class=\"bash\">sudo apt-get update sudo apt-get install -y python-smbus sudo apt-get install -y i2c-tools <\/code><\/pre>\n<p>  \u0424\u043e\u0440\u043c\u0430\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043f\u043e\u0438\u0441\u043a\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u043d\u0430 \u0448\u0438\u043d\u0435 I2C: sudo i2cdetect -y 0, \u0433\u0434\u0435 0 \u2014 \u043d\u043e\u043c\u0435\u0440 \u0448\u0438\u043d\u044b I2C (1,2,3,..). \u041d\u0430 40-\u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043d\u043e\u043c \u0440\u0430\u0437\u044a\u0435\u043c\u0435 (\u0442\u0438\u043f\u0430 Raspberry Pi 3 GPIO) \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f TWI1, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b\u0438 \u0434\u0430\u0442\u0447\u0438\u043a BME280. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a: <i>sudo i2cdetect -y 1<\/i>. \u0412\u044b\u043f\u043e\u043b\u043d\u0438\u043c \u043f\u043e\u0438\u0441\u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u043d\u0430 <strong>\u0448\u0438\u043d\u0435 I2C \u043f\u043e\u0440\u0442 \u00ab1\u00bb<\/strong>:<\/p>\n<pre><code class=\"bash\">root@bananapim64:~# sudo i2cdetect -y 1      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f 00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- 76 -- root@bananapim64:~# <\/code><\/pre>\n<p>  \u0428\u0438\u043d\u0430 I2C \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0438 \u0434\u0430\u0442\u0447\u0438\u043a BME280 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 0x76 \u043d\u0430\u0439\u0434\u0435\u043d. \u0412 \u041e\u0421 Linux \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0441 \u0434\u0430\u0442\u0447\u0438\u043a\u0430\u00a0 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u0444\u0430\u0439\u043b\u043e\u0432\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 sysfs. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043f\u0440\u043e \u0448\u0438\u043d\u0443 I2\u0421 \u0432 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 <a href=\"https:\/\/devdotnet.org\/post\/rabota-s-gpio-v-linux-na-primere-banana-pi-bpi-m64-chast-5-device-tree-overlays-shina-i2c-podkyuchenie-datchikov-bosh-bmx\/\">\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 GPIO \u0432 Linux \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 Banana Pi BPI-M64. \u0427\u0430\u0441\u0442\u044c 5. Device Tree overlays. \u0428\u0438\u043d\u0430 I2C, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432 Bosh BMx<\/a>.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u043e \u043a\u0430\u043a\u0438\u043c-\u043b\u0438\u0431\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c \u0432\u044b\u0437\u043e\u0432 \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u043e\u0439, \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 I2C. \u0412 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0444\u0430\u0439\u043b-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043d\u043e\u043c\u0435\u0440\u0430 \u043b\u0438\u043d\u0438\u0438 I2C: <i>\/dev\/i2c-0<\/i>, <i>\/dev\/i2c-1<\/i> \u0438 \u0442.\u0434. \u0415\u0441\u043b\u0438 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0435\u0442, \u0437\u043d\u0430\u0447\u0438\u0442, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0444\u0430\u0439\u043b DTS \u0434\u043b\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0448\u0438\u043d\u044b I2C.<\/p>\n<h2>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u0442\u0447\u0438\u043a\u0430 DS18B20<\/h2>\n<p>  <a href=\"https:\/\/habrastorage.org\/webt\/ir\/5x\/-g\/ir5x-gt8xh6jrrw7ne0h1npr9em.jpeg\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/ir\/5x\/-g\/ir5x-gt8xh6jrrw7ne0h1npr9em.jpeg\" alt=\"Weather station Banana Pi BPI-M64 Linux C# Docker RabbitMQ AvaloniaUI\" data-src=\"https:\/\/habrastorage.org\/webt\/ir\/5x\/-g\/ir5x-gt8xh6jrrw7ne0h1npr9em.jpeg\" data-blurred=\"true\"\/><\/a><\/p>\n<p>  <em>\u0414\u0430\u0442\u0447\u0438\u043a DS18B20<\/em><\/p>\n<p>  \u042d\u0442\u043e\u0442 \u0440\u0430\u0437\u0434\u0435\u043b \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c, \u0435\u0441\u043b\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u0442\u0447\u0438\u043a\u0430 BME280 \u043f\u0440\u043e\u0448\u043b\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u043e. \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0434\u0430\u0442\u0447\u0438\u043a DS18B20 \u043c\u043e\u0436\u043d\u043e \u043d\u0430 \u043b\u044e\u0431\u043e\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0430\u043a\u0442 GPIO \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430. \u0414\u043b\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439\u00a0\u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u0438\u0437 .NET \u043a\u043e\u0434\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u041e\u0421 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/1-Wire\"><strong>1-Wire<\/strong><\/a>. \u041a\u0430\u043a \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u043c\u043e\u0436\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u00ab\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u0432\u043e\u0435\u0433\u043e DTBO \u0434\u043b\u044f \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 1-Wire\u00bb \u0432 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 <a href=\"https:\/\/devdotnet.org\/post\/rabota-s-gpio-na-primere-banana-pi-bpi-m64-chast-2-device-tree-overlays\/\">\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 GPIO \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 Banana Pi BPI-M64. \u0427\u0430\u0441\u0442\u044c 2. Device Tree overlays<\/a>.<\/p>\n<h2>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0431\u0440\u043e\u043a\u0435\u0440\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 RabbitMQ<\/h2>\n<p>  RabbitMQ \u2012 \u044d\u0442\u043e \u0431\u0440\u043e\u043a\u0435\u0440 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439. \u0415\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0446\u0435\u043b\u044c \u2012 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0438 \u043e\u0442\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. \u041e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u0441\u044f \u0441 RabbitMQ \u043c\u043e\u0436\u043d\u043e \u0432 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u043c \u0446\u0438\u043a\u043b\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0439 <a href=\"https:\/\/habr.com\/ru\/post\/488654\/\">RabbitMQ. \u0427\u0430\u0441\u0442\u044c 1. Introduction. Erlang, AMQP<\/a>.<\/p>\n<p>  \u0412 \u044d\u0442\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 RabbitMQ. \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 RabbitMQ \u0431\u0443\u0434\u0435\u0442 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0440\u0430\u0437\u0434\u0435\u043b\u0430\u0445.<\/p>\n<p>  \u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b AMQP \u0432\u0432\u043e\u0434\u0438\u0442 \u0442\u0440\u0438 \u043f\u043e\u043d\u044f\u0442\u0438\u044f:<\/p>\n<ul>\n<li>exchange (\u043e\u0431\u043c\u0435\u043d\u043d\u0438\u043a \u0438\u043b\u0438 \u0442\u043e\u0447\u043a\u0430 \u043e\u0431\u043c\u0435\u043d\u0430) \u2014 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0442 \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u0430. \u041e\u0431\u043c\u0435\u043d\u043d\u0438\u043a \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 \u043e\u0434\u043d\u0443 \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u0435\u0439. \u041e\u043d \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0432\u044f\u0437\u0435\u0439 (binding) \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c \u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u044c\u044e;<\/li>\n<li>queue (\u043e\u0447\u0435\u0440\u0435\u0434\u044c) \u2014 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0430\u044f \u0438\u0437 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u043d\u0443\u0442\u0440\u0438 RabbitMQ. \u0425\u043e\u0442\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442 \u0447\u0435\u0440\u0435\u0437 RabbitMQ \u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u043e\u043d\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044f\u0445. \u041e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439 \u043d\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439, \u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043d\u044f\u0442\u044c \u0441\u043a\u043e\u043b\u044c \u0443\u0433\u043e\u0434\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0438\u0445 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u2012 \u043c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0435\u0435 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u043c \u0431\u0443\u0444\u0435\u0440\u043e\u043c. \u041b\u044e\u0431\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u043e\u0432 \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u043e\u0434\u043d\u0443 \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0442\u0430\u043a\u0436\u0435 \u043b\u044e\u0431\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u043e\u0432 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438\u0437 \u043e\u0434\u043d\u043e\u0439 \u043e\u0447\u0435\u0440\u0435\u0434\u0438;<\/li>\n<li>binding (\u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0430) \u2014 \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u0442\u043e\u0447\u043a\u0435 \u043e\u0431\u043c\u0435\u043d\u0430, \u0432 \u043a\u0430\u043a\u0443\u044e \u0438\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u0435\u0439 \u044d\u0442\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u043f\u0430\u0434\u0430\u0442\u044c. \u041e\u0431\u043c\u0435\u043d\u043d\u0438\u043a \u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0441\u0432\u044f\u0437\u0430\u043d\u044b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0430\u043c\u0438.<\/li>\n<\/ul>\n<p>  \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0434\u0435\u043b\u044f\u0442\u0441\u044f \u043d\u0430:<\/p>\n<ul>\n<li>Publishers (\u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u0438) \u2014 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f;<\/li>\n<li>Consumers (\u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u0438) \u2014 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u0438. \u041e\u0431\u044b\u0447\u043d\u043e \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439.<\/li>\n<\/ul>\n<p>  \u041f\u0440\u0438 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0434\u0430\u043d\u043d\u044b\u043c \u0432 RabbitMQ \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u0438\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0430 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0439. \u0412 RabbitMQ \u0431\u0443\u0434\u0435\u0442 \u0434\u0432\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f:<\/p>\n<ul>\n<li><strong>user-sensors:<\/strong> \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440, \u0434\u043b\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f <em>WeatherStation.Sensors<\/em>;<\/li>\n<li><strong>user-lcd:<\/strong> \u0447\u0442\u0435\u043d\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439, \u0434\u043b\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f <em>WeatherStation.Panel<\/em>.<\/li>\n<\/ul>\n<p>  \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c <strong>user-sensors<\/strong> \u0431\u0443\u0434\u0435\u0442 <strong>\u041f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u043e\u043c (Publisher)<\/strong>, \u0430 <strong>user-lcd<\/strong> \u2014 <strong>\u041f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u043e\u043c (Consumer)<\/strong>.<\/p>\n<p>  \u0421\u0435\u0440\u0432\u0435\u0440 RabbitMQ \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0441 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0434\u043b\u044f \u041f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u0430\u00a0 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0440\u0435\u0442\u0438\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u043e\u0447\u0435\u0440\u0435\u0434\u0438. \u0421 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0441\u0430\u043c\u044b\u0439 \u043b\u0443\u0447\u0448\u0438\u0439, \u0442.\u043a. \u041f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u0442\u043e\u0439 \u043e\u0447\u0435\u0440\u0435\u0434\u044c\u044e, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u043b\u0438. \u041d\u043e \u0434\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 user-sensors \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u0434\u0430\u043d\u044b \u043f\u0440\u0430\u0432\u0430 \u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043e\u0447\u0435\u0440\u0435\u0434\u0438.<\/p>\n<h3>\u0428\u0430\u0433 1 \u2014 \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 Docker-\u0441\u0435\u0442\u0438<\/h3>\n<p>  \u0414\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f Docker \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c Docker-\u0441\u0435\u0442\u044c \u00abmynetwork\u00bb, IP-\u043f\u043e\u0434\u0441\u0435\u0442\u044c 172.21.0.0\/24:<\/p>\n<pre><code class=\"bash\">$ docker network create --driver bridge --subnet 172.21.0.0\/24 --ip-range=172.21.0.0\/25 --gateway 172.21.0.127 mynetwork <\/code><\/pre>\n<p>  <\/p>\n<h3>\u0428\u0430\u0433 2 \u2014 \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 Docker-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c RabbitMQ<\/h3>\n<p>  \u0412\u044b\u043f\u043e\u043b\u043d\u0438\u043c \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 RabbitMQ \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e Docker-\u043e\u0431\u0440\u0430\u0437\u0430 <a href=\"https:\/\/hub.docker.com\/_\/rabbitmq\">rabbitmq: RabbitMQ is an open source multi-protocol messaging broker<\/a>. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0441 RabbitMQ \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/p>\n<pre><code class=\"bash\">$ docker run -d --hostname rabbitmq-iot --name rabbit-iot -v rabbit-iot-config:\/etc\/rabbitmq -v rabbit-iot-lib:\/var\/lib\/rabbitmq --net mynetwork --ip 172.21.0.5 rabbitmq:alpine <\/code><\/pre>\n<p>  \u0421\u0435\u0440\u0432\u0435\u0440 RabbitMQ \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0434\u0432\u0430 TCP-\u043f\u043e\u0440\u0442\u0430: 5672 \u2014 \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432, 15672 \u2014 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 web-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441.<\/p>\n<p>  \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432\u0435\u0431-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043d\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0434\u043b\u044f \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u0438. \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043f\u043e\u0440\u0442\u0443 5672\/TCP, \u0442.\u043a. \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 API AvaloniaUI \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043d\u0430 Banana Pi BPI-M64 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u043e\u0442\u043b\u0430\u0434\u043a\u0438. \u0414\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\u00a0\u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043f\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e Docker-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439:<\/p>\n<pre><code class=\"bash\">$ docker run -d --hostname rabbitmq-iot --name rabbit-iot -p 5672:5672 -p 15672:15672 -v rabbit-iot-config:\/etc\/rabbitmq -v rabbit-iot-lib:\/var\/lib\/rabbitmq --net mynetwork --ip 172.21.0.5 rabbitmq:alpine <\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c Linux \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 RabbitMQ. \u0414\u043b\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f web-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n<pre><code class=\"bash\">$ docker exec -ti rabbit-iot rabbitmq-plugins enable rabbitmq_management <\/code><\/pre>\n<p>  \u0417\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043f\u043e IP-\u0430\u0434\u0440\u0435\u0441\u0443 \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: <a href=\"http:\/\/192.168.43.208\">192.168.43.208<\/a>:15672. \u041b\u043e\u0433\u0438\u043d\/\u043f\u0430\u0440\u043e\u043b\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e: guest\/guest.<\/p>\n<h3>\u0428\u0430\u0433 3 \u2014 \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0445\u043e\u0441\u0442\u0430<\/h3>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0445\u043e\u0441\u0442 <strong>\/host-iot<\/strong>:<\/p>\n<pre><code class=\"bash\">$ docker exec -ti rabbitmq-iot rabbitmqctl add_vhost \/host-iot <\/code><\/pre>\n<h3>\u0428\u0430\u0433 4 \u2014 \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439<\/h3>\n<p>  \u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u044b:<\/p>\n<pre><code class=\"bash\">$ docker exec -ti rabbitmq-iot rabbitmqctl add_user user-sensors Password1 $ docker exec -ti rabbitmq-iot rabbitmqctl add_user user-lcd Password2 <\/code><\/pre>\n<p>  \u0433\u0434\u0435 <em>Password1<\/em>, <em>Password2<\/em> \u2014 \u043f\u0430\u0440\u043e\u043b\u0438 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439.<\/p>\n<h3>\u0428\u0430\u0433 5 \u2014 \u0412\u044b\u0434\u0430\u0447\u0430 \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0439<\/h3>\n<p>  \u041a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0438 \u0440\u0430\u0437\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043d\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 <a href=\"https:\/\/www.rabbitmq.com\/access-control.html#authorisation\">Authorisation: How Permissions Work<\/a>. \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u0440\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438: configure (\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435), write (\u0437\u0430\u043f\u0438\u0441\u044c), \u0438 read (\u0447\u0442\u0435\u043d\u0438\u0435). \u041e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438: exchange (\u043e\u0431\u043c\u0435\u043d\u043d\u0438\u043a), queue (\u043e\u0447\u0435\u0440\u0435\u0434\u044c).<\/p>\n<p>  \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435:<\/p>\n<ul>\n<li>\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c <strong>user-sensors<\/strong> \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u043b\u0430\u0434\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0430\u043c\u0438: <em>configure exchange, configure queue, write exchange, write queue, read exchange, read queue<\/em>;<\/li>\n<li>\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c <strong>user-lcd<\/strong> \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u043b\u0430\u0434\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0430\u043c\u0438 \u0442\u043e\u043b\u044c\u043a\u043e <em>read queue.<\/em><\/li>\n<\/ul>\n<p>  \u041f\u0440\u0430\u0432\u0430 \u0432\u044b\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u0443\u0442\u0435\u043c \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f. \u0414\u043b\u044f \u0432\u044b\u0434\u0430\u0447\u0438 \u043f\u0440\u0430\u0432 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u044b:<\/p>\n<pre><code class=\"bash\">$ docker exec -ti rabbitmq-iot rabbitmqctl set_permissions -p \"\/host-iot\" \"user-sensors\" \".*\" \".*\" \".*\" $ docker exec -ti rabbitmq-iot rabbitmqctl set_permissions -p \"\/host-iot\" \"user-lcd\" \"\" \"\" \"queue\" <\/code><\/pre>\n<p>  \u0422\u0440\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u043f\u043e\u0441\u043b\u0435 \u0438\u043c\u0435\u043d\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u00abuser-lcd\u00bb, \u0432\u044b\u0434\u0430\u044e\u0442 \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0438 \u043d\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438: configure, write, \u0438 read. \u0412 \u043f\u0435\u0440\u0432\u044b\u0445 \u0434\u0432\u0443\u0445 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043e, \u0437\u043d\u0430\u0447\u0438\u0442, \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u0440\u0430\u0432 configure \u0438 write \u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u00abuser-lcd\u00bb \u043d\u0435 \u0431\u0443\u0434\u0435\u0442. \u0422\u0440\u0435\u0442\u0438\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0432\u044b\u0434\u0430\u0435\u0442 \u043f\u0440\u0430\u0432\u0430 \u043d\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e read, \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u00abqueue\u00bb, \u0437\u043d\u0430\u0447\u0438\u0442, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u00abuser-lcd\u00bb \u0432\u044b\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u0430\u0432\u0430 \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u0438.<\/p>\n<p>  \u041d\u0430 \u044d\u0442\u043e\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 RabbitMQ \u0437\u0430\u043a\u043e\u043d\u0447\u0435\u043d\u0430.<\/p>\n<h2>\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 WeatherStation.Sensors<\/h2>\n<p>  \u0421\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0441 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 RabbitMQ. \u041e\u043f\u0440\u043e\u0441 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445. \u0415\u0441\u043b\u0438 \u0434\u0430\u0442\u0447\u0438\u043a BME280 \u043d\u0435 \u0443\u0434\u0430\u0435\u0442\u0441\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d \u043f\u043e\u0438\u0441\u043a \u043b\u044e\u0431\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0433\u043e \u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 OneWire. \u041f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430 GitHub \u2014 <a href=\"https:\/\/github.com\/devdotnetorg\/dotnet-service-weather-station\/tree\/v1_habr\/src\/WeatherStation.Sensors\">WeatherStation.Sensors<\/a>. \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0435 Nuget-\u043f\u0430\u043a\u0435\u0442\u044b:<\/p>\n<ul>\n<li>Iot.Device.Bindings;<\/li>\n<li>System.Device.Gpio;<\/li>\n<li>Newtonsoft.Json;<\/li>\n<li>RabbitMQ.Client;<\/li>\n<li>Microsoft.Extensions.Hosting.<\/li>\n<\/ul>\n<p>  \u0424\u0430\u0439\u043b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u043f\u0443\u0442\u0438\u00a0<i>config\/appsettings.json<\/i>. \u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0430\u0439\u043b\u0430 <em>appsettings.json<\/em>:<\/p>\n<pre><code class=\"json\">{   \"AppSettings\": {         \"Sensors\": {       \"ReadEvery\": 50,       \"I2CBusId\": 1,       \"BME280Address\": 118,       \"GPIOCHIP\": 1,             \"pinLED\": 36,       \"pinLED_active_low\": true,       \"pinBUTTON\": 38     },     \"RabbitMQ\": {       \"UserName\": \"user-sensors\",       \"Password\": \"PASSWORD1\",       \"VirtualHost\": \"\/host-iot\",       \"HostName\": \"192.168.43.208\",       \"ClientProvidedName\": \"app:sensors component:event-consumer\",       \"x_message_ttl\": 300000,       \"x_max_length\": 5,       \"exchangeName\": \"exchange-sensors\",       \"queueName\": \"queue-sensors\",       \"routingKey\": \"rKey1\"     }       } } <\/code><\/pre>\n<p>  \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b:<\/p>\n<ul>\n<li><strong>Sensors\\ReadEvery<\/strong> \u2014 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u0439 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445;<\/li>\n<li><strong>Sensors\\I2CBusId<\/strong> \u2014 ID \u0448\u0438\u043d\u044b I2C, \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c: 0,1,2, \u0438 \u0442.\u0434. \u0415\u0441\u043b\u0438 \u043d\u0435\u0442, \u0442\u043e \u0437\u0430\u0434\u0430\u0442\u044c null;<\/li>\n<li><strong>Sensors\\BME280Address<\/strong> \u2014 \u0430\u0434\u0440\u0435\u0441 \u0434\u0430\u0442\u0447\u0438\u043a\u0430 BME280 \u043d\u0430 \u0448\u0438\u043d\u0435 I2C, \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 byte. \u0415\u0441\u043b\u0438 \u043d\u0435\u0442, \u0442\u043e \u0437\u0430\u0434\u0430\u0442\u044c null;<\/li>\n<li><strong>Sensors\\GPIOCHIP<\/strong> \u2014 ID \u0447\u0438\u043f\u0430 GPIO. \u0415\u0441\u043b\u0438 \u043d\u0435\u0442 \u043a\u043d\u043e\u043f\u043a\u0438 \u0438 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430, \u0442\u043e \u0437\u0430\u0434\u0430\u0442\u044c null;<\/li>\n<li><strong>Sensors\\pinLED<\/strong> \u2014 \u043d\u043e\u043c\u0435\u0440 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430 (GPIOXX, \u043d\u043e\u0436\u043a\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430) \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430. \u0415\u0441\u043b\u0438 \u043d\u0435\u0442 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430, \u0442\u043e \u0437\u0430\u0434\u0430\u0442\u044c null;<\/li>\n<li><strong>Sensors\\pinLED_active_low<\/strong> \u2014 \u0438\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0434\u043b\u044f \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430. \u0415\u0441\u043b\u0438 \u0437\u0430\u0434\u0430\u0442\u044c \u00ab1\u00bb, \u0442\u043e \u043d\u0430 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u00ab1\u00bb \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d, \u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442;<\/li>\n<li><strong>Sensors\\pinBUTTON<\/strong> \u2014 \u043d\u043e\u043c\u0435\u0440 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430 (GPIOXX, \u043d\u043e\u0436\u043a\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430) \u043a\u043d\u043e\u043f\u043a\u0438. \u0415\u0441\u043b\u0438 \u043d\u0435\u0442 \u043a\u043d\u043e\u043f\u043a\u0438, \u0442\u043e \u0437\u0430\u0434\u0430\u0442\u044c null;<\/li>\n<li><strong>RabbitMQ\\UserName<\/strong> \u2014 \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0443 RabbitMQ;<\/li>\n<li><strong>RabbitMQ\\Password<\/strong> \u2014 \u043f\u0430\u0440\u043e\u043b\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f UserName;<\/li>\n<li><strong>RabbitMQ\\VirtualHost<\/strong> \u2014 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0445\u043e\u0441\u0442;<\/li>\n<li><strong>RabbitMQ\\HostName<\/strong> \u2014 IP-\u0430\u0434\u0440\u0435\u0441 \u0438\u043b\u0438 DNS-\u0438\u043c\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430 RabbitMQ;<\/li>\n<li><strong>RabbitMQ\\x_message_ttl<\/strong> \u2014 \u0432\u0440\u0435\u043c\u044f \u0436\u0438\u0437\u043d\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0432 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445 (\u043c\u0441);<\/li>\n<li><strong>RabbitMQ\\x_max_length<\/strong> \u2014 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438. \u041f\u0440\u0438 \u043f\u0440\u0435\u0432\u044b\u0448\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0438\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0443\u0434\u0430\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u0430\u043c\u044b\u0435 \u0441\u0442\u0430\u0440\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f;<\/li>\n<li><strong>RabbitMQ\\exchangeName<\/strong> \u2014 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043e\u0431\u043c\u0435\u043d\u043d\u0438\u043a\u0430;<\/li>\n<li><strong>RabbitMQ\\queueName<\/strong> \u2014 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043e\u0447\u0435\u0440\u0435\u0434\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0431\u0443\u0434\u0443\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f;<\/li>\n<li><strong>RabbitMQ\\routingKey<\/strong> \u2014 \u043a\u043b\u044e\u0447 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439.<\/li>\n<\/ul>\n<p>  \u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432 \u2014 \u044d\u0442\u043e \u043d\u0430\u043b\u0438\u0447\u0438\u0435 BME280 \u0438\u043b\u0438 DS18B20. \u0415\u0441\u043b\u0438 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430, \u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043a\u043d\u043e\u043f\u043a\u0430, \u0442\u043e \u043a\u043d\u043e\u043f\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u0415\u0441\u043b\u0438 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043a\u043d\u043e\u043f\u043a\u0438, \u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u044d\u043a\u0440\u0430\u043d \u0441 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u043c \u043d\u0435 \u0443\u0434\u0430\u0441\u0442\u0441\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c.<\/p>\n<h3>\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u0448\u0438\u043d\u043e\u0439 I2C \u0438 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0441 BME280 \u043d\u0430 C#<\/h3>\n<p>  \u0412\u0435\u0441\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0439 \u043a\u043e\u0434 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0434\u0430\u0442\u0447\u0438\u043a\u0430\u043c\u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0432 \u0444\u0430\u0439\u043b\u0435 <a href=\"https:\/\/github.com\/devdotnetorg\/dotnet-service-weather-station\/blob\/v1_habr\/src\/WeatherStation.Sensors\/Services\/ReadSensorsServices.cs\"><em>Services\/ReadSensorsServices.cs<\/em><\/a>. \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0448\u0438\u043d\u043e\u0439 I2C \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0438\u043c\u0435\u043d:<a href=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/api\/system.device.i2c.i2cdevice?view=iot-dotnet-1.5\"> System.Device.I2c<\/a>. \u0414\u043b\u044f \u0434\u0430\u0442\u0447\u0438\u043a\u0430 BME280 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0438\u043c\u0435\u043d: <a href=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/api\/iot.device.bmxx80?view=iot-dotnet-1.5\">Iot.Device.Bmxx80<\/a>. \u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0434\u0430\u0442\u0447\u0438\u043a\u0430\u043c\u0438 \u0441\u0435\u0440\u0438\u0438 Bmxx80 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 GitHub <a href=\"https:\/\/github.com\/dotnet\/iot\/tree\/main\/src\/devices\/Bmxx80\/samples\">Bmxx80\/samples<\/a>.<\/p>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0434\u0430\u0442\u0447\u0438\u043a BME280 \u0438 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f:<\/p>\n<pre><code class=\"cs\">I2cConnectionSettings i2cSettings = new(_appSettings.Sensors.I2CBusId.Value, _appSettings.Sensors.BME280Address.Value); I2cDevice i2cDevice = I2cDevice.Create(i2cSettings); Bme280 bme280 = new Bme280(i2cDevice) {    \/\/ set higher sampling    TemperatureSampling = Sampling.UltraHighResolution,    PressureSampling = Sampling.UltraHighResolution,    HumiditySampling = Sampling.UltraHighResolution,    FilterMode = Bmx280FilteringMode.X2 }; \/\/Test Read bme280.ReadAsync().Wait(); <\/code><\/pre>\n<p>  \u041a\u043b\u0430\u0441\u0441 <em>I2cConnectionSettings<\/em> \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a I2C \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u043f\u0435\u0440\u0432\u044b\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u2014 ID \u0448\u0438\u043d\u044b I2C, \u0432\u0442\u043e\u0440\u043e\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u2014 \u0430\u0434\u0440\u0435\u0441 \u0434\u0430\u0442\u0447\u0438\u043a\u0430 I2C. \u0412 \u043a\u043b\u0430\u0441\u0441\u0435 <a href=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/api\/iot.device.bmxx80.bmx280base?view=iot-dotnet-1.5\"><em>Bmx280Base<\/em><\/a> \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u0430\u0434\u0440\u0435\u0441\u0430 BME280:<\/p>\n<pre><code class=\"cs\">\/\/ Default I2C bus address. public const byte DefaultI2cAddress = 119; \/\/ Secondary I2C bus address. public const byte SecondaryI2cAddress = 118; <\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 <strong>Sensors\\BME280Address=118<\/strong> \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e <em>SecondaryI2cAddress<\/em>. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <em>Sampling.UltraHighResolution<\/em> \u0437\u0430\u0434\u0430\u0435\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u043c\u0435\u0440\u0430 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0432\u0435\u043b\u0438\u0447\u0438\u043d.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b DTS <a href=\"https:\/\/github.com\/devdotnetorg\/Banana-Pi-BPI-M64\/blob\/master\/dt-overlays\/sun50i-a64-i2c1-bme280.dts\">sun50i-a64-i2c1-bme280.dts<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0448\u0438\u043d\u0443 I2C \u0438 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 BME280 \u0447\u0435\u0440\u0435\u0437 \u0444\u0430\u0439\u043b\u043e\u0432\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 sysfs, \u0438 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 .NET \u043a\u043e\u0434\u0430, \u0442\u043e \u0432\u0441\u0435 \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0431\u0435\u0437 \u043e\u0448\u0438\u0431\u043e\u043a.<\/p>\n<h3>\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 DS18B20 \u043d\u0430 C#<\/h3>\n<p>  \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0439 \u043a\u043e\u0434 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u043c DS18B20 \u0441\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439. \u041a\u043b\u0430\u0441\u0441\u044b \u0438\u0437 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 <a href=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/api\/iot.device.onewire?view=iot-dotnet-1.5\"><em>Iot.Device.OneWire<\/em><\/a> \u043f\u043e \u0441\u0443\u0442\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0431\u0435\u0440\u0442\u043a\u0430\u043c\u0438 \u043d\u0430\u0434 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u043c OneWire \u0432 Sysfs. \u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u043c\u0438 \u0434\u0430\u0442\u0447\u0438\u043a\u0430\u043c\u0438 \u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 1-wire \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 GitHub <a href=\"https:\/\/github.com\/dotnet\/iot\/tree\/main\/src\/devices\/OneWire\/samples\">OneWire\/samples<\/a>.<\/p>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0439 \u043a\u043e\u0434 \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u043f\u0435\u0440\u0432\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0439 \u0434\u0430\u0442\u0447\u0438\u043a, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 OneWire, \u0438 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435:<\/p>\n<pre><code class=\"cs\">OneWireThermometerDevice devOneWire = OneWireThermometerDevice.EnumerateDevices().FirstOrDefault(); devOneWire.ReadTemperatureAsync().Wait(); <\/code><\/pre>\n<p>  \u0421\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044e <em>enum<\/em> \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 <strong>Iot.Device.OneWire<\/strong>, \u0444\u0430\u0439\u043b <a href=\"https:\/\/github.com\/dotnet\/iot\/blob\/main\/src\/devices\/OneWire\/DeviceFamily.cs\">DeviceFamily.cs<\/a>, \u043f\u043e\u043c\u0438\u043c\u043e DS18B20, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0445 \u043f\u043e OneWire-\u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443: DS18S20, MAX31820, DS1825, MAX31826, MAX31850, DS28EA00. \u0412\u0441\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u0442\u0447\u0438\u043a\u0438 \u0442\u043e\u0436\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u043d\u043e \u044d\u0442\u043e \u043d\u0435\u0442\u043e\u0447\u043d\u043e. \u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u044b\u043b\u043e \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u043c DS18B20.<\/p>\n<h3>\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u043a\u043d\u043e\u043f\u043a\u043e\u0439 \u0438 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u043c<\/h3>\n<p>  \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043e \u0432 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 <a href=\"https:\/\/devdotnet.org\/post\/upravlyaem-gpio-iz-csharp-net-5-v-linux-na-banana-pi-m64-arm64-i-cubietruck-arm32\/\">\u0423\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430\u043c\u0438 GPIO \u0438\u0437 C# .NET 5<\/a>, \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u043e\u0442 \u043a\u043d\u043e\u043f\u043a\u0438. \u041d\u043e\u043c\u0435\u0440\u0430 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432 \u0442\u0435 \u0436\u0435 \u0441\u0430\u043c\u044b\u0435.<\/p>\n<h3>\u041e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 RabbitMQ<\/h3>\n<p>  \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 RabbitMQ \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438 \u0438 \u043f\u043e\u0442\u0435\u0440\u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0441 \u043d\u0438\u043c. \u0415\u0441\u043b\u0438 \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441\u0435\u0440\u0432\u0435\u0440 RabbitMQ \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d, \u0442\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c\u0441\u044f \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c. \u0415\u0441\u043b\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u0440\u044b\u0432 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f, \u0442\u043e \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u043d\u044f\u0442\u044b \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u0412 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 JSON. \u041f\u0440\u0438\u043c\u0435\u0440 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"json\">{ \"HomeTemperature\": 30.19, \"HomePressure\": 100254.0, \"HomeHumidity\": 39.0, \"DateTimeNow\": 637622330482396513 } <\/code><\/pre>\n<p>  \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f:<\/p>\n<ul>\n<li>Home* \u2014 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0432\u0435\u043b\u0438\u0447\u0438\u043d;<\/li>\n<li>DateTimeNow \u2014 \u0434\u0430\u0442\u0430 \u0438 \u0432\u0440\u0435\u043c\u044f \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u0439 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432 \u0432 \u0442\u0438\u043a\u0430\u0445 \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 UTC:\u00a0 <em>DateTime.UtcNow.Ticks<\/em>.<\/li>\n<\/ul>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u043e\u0442\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u044f \u043a\u043d\u043e\u043f\u043a\u0438, \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u0437\u0430\u043c\u0435\u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e. \u041f\u0440\u0438\u043c\u0435\u0440 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"json\">{ \"DateTimeNow\": 637622332649242921, \"Command\": \"PressButton1\" } <\/code><\/pre>\n<p>  \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f:<\/p>\n<ul>\n<li>DateTimeNow \u2014 \u0434\u0430\u0442\u0430 \u0438 \u0432\u0440\u0435\u043c\u044f \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u0439 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432 \u0432 \u0442\u0438\u043a\u0430\u0445 \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 UTC:\u00a0 <em>DateTime.UtcNow.Ticks;<\/em><\/li>\n<li>Command \u2014 \u043a\u043e\u043c\u0430\u043d\u0434\u0430, \u043d\u0430\u0436\u0430\u0442\u0430 \u043a\u043d\u043e\u043f\u043a\u0430 \u21161.<\/li>\n<\/ul>\n<p>  <\/p>\n<h3>\u0417\u0430\u043f\u0443\u0441\u043a Docker-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430<\/h3>\n<p>  \u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f WeatherStation.Sensors \u2014 <a href=\"https:\/\/hub.docker.com\/r\/devdotnetorg\/dotnet-ws-sensors\">devdotnetorg\/dotnet-ws-sensors<\/a>, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0441\u0431\u043e\u0440\u043a\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 ARM64. \u041a\u043e\u043c\u0430\u043d\u0434\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430:<\/p>\n<pre><code class=\"bash\">$ docker run -d --name test-dotnet-ws-sensors --restart always --net mynetwork --ip 172.21.0.6 --device \/dev\/i2c-1 --device \/dev\/gpiochip1 -v \/sys\/bus\/w1\/devices:\/sys\/bus\/w1\/devices -v \/sys\/devices\/w1_bus_master1:\/sys\/devices\/w1_bus_master1 -v test-dotnet-ws-sensors-config:\/app\/config -e RabbitMQUserName=user-sensors -e RabbitMQPassword=PASSWORD1 devdotnetorg\/dotnet-ws-sensors <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c: <i>\/dev\/i2c-1<\/i> \u0438 <i>\/dev\/gpiochip1<\/i>. \u0414\u043e\u0441\u0442\u0443\u043f \u043a OneWire-\u0434\u0430\u0442\u0447\u0438\u043a\u0430\u043c \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 Sysfs, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043f\u0443\u0442\u0438 OneWire-\u0448\u0438\u043d\u044b: <i>\/sys\/devices\/w1_bus_master1<\/i>. \u0415\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f BME280, \u0442\u043e \u043f\u0440\u043e\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0442\u044c volume <i>\/sys\/devices\/w1_bus_master1<\/i> \u043d\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438. \u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f <i>RabbitMQUserName<\/i> \u0438 <i>RabbitMQPassword<\/i> \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 <i>config\/appsettings.json<\/i>. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0446\u0435\u043b\u044f\u0445 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u043b\u043e\u0433\u0438\u043d\/\u043f\u0430\u0440\u043e\u043b\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0443 RabbitMQ \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435.<\/p>\n<h2>\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 WeatherStation.Panel.AvaloniaX11<\/h2>\n<p>  \u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043d\u0430 LCD \u044d\u043a\u0440\u0430\u043d\u0435. \u041f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430 GitHub \u2014 <a href=\"https:\/\/github.com\/devdotnetorg\/dotnet-service-weather-station\/tree\/v1_habr\/src\/WeatherStation.Panel.AvaloniaX11\">WeatherStation.Panel.AvaloniaX11<\/a>. \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0435 Nuget-\u043f\u0430\u043a\u0435\u0442\u044b:<\/p>\n<ul>\n<li>Avalonia;<\/li>\n<li>System.Device.Gpio;<\/li>\n<li>Avalonia.Desktop;<\/li>\n<li>Avalonia.Diagnostics;<\/li>\n<li>Microsoft.Extensions.Configuration;<\/li>\n<li>Microsoft.Extensions.Hosting;<\/li>\n<li>Newtonsoft.Json;<\/li>\n<li>RabbitMQ.Client.<\/li>\n<\/ul>\n<p>  \u042f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u043c desktop-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c, \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c \u043d\u0430 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0435 <a href=\"https:\/\/habr.com\/ru\/post\/505036\/\">AvaloniaUI<\/a> (\u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 XAML, WPF\/UWP). \u0414\u043b\u044f \u043f\u0435\u0440\u0432\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u043f\u043e\u0434\u0445\u043e\u0434 MVVM \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430. \u041f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u043b\u0430\u0441\u044c \u0432 \u043f\u0440\u043e\u0441\u0442\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043d\u0430 Linux \u0432 Docker-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435. \u0420\u0430\u0437\u043c\u0435\u0442\u043a\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u0430 \u043d\u0430 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 320&#215;240 \u0442\u043e\u0447\u0435\u043a. \u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c RabbitMQ \u0442\u0430\u043a\u0430\u044f \u0436\u0435, \u043a\u0430\u043a \u0438 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 <em>WeatherStation.Sensors.\u00a0<\/em>\u041f\u0440\u0438 \u043f\u043e\u0442\u0435\u0440\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435, \u0438 \u043f\u0438\u043a\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0441 \u0437\u0435\u043b\u0435\u043d\u043e\u0433\u043e \u0446\u0432\u0435\u0442\u0430 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0441\u044f \u043d\u0430 \u043a\u0440\u0430\u0441\u043d\u044b\u0439.<\/p>\n<p>  <a href=\"https:\/\/habrastorage.org\/webt\/e2\/_b\/zb\/e2_bzb_y76m7w_2cbxafkh3j_ou.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/e2\/_b\/zb\/e2_bzb_y76m7w_2cbxafkh3j_ou.png\" alt=\"Weather station Banana Pi BPI-M64 Linux C# Docker RabbitMQ AvaloniaUI\" data-src=\"https:\/\/habrastorage.org\/webt\/e2\/_b\/zb\/e2_bzb_y76m7w_2cbxafkh3j_ou.png\"\/><\/a><br \/>  <em>\u0413\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0432 Windows 7<\/em><\/p>\n<p>  \u0412 \u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u044d\u043a\u0440\u0430\u043d\u0430 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0434\u0430\u0442\u0430 \u0438 \u0432\u0440\u0435\u043c\u044f, \u0437\u0430\u0442\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430, \u0432\u043b\u0430\u0436\u043d\u043e\u0441\u0442\u044c \u0438 \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u0435. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0441\u043b\u0443\u0436\u0438\u0442 \u0434\u043b\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0437\u0430\u043c\u0435\u0440\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u0439 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432. \u0415\u0441\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u044b\u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u044b \u043c\u0435\u043d\u0435\u0435 10 \u0441\u0435\u043a\u0443\u043d\u0434 \u043d\u0430\u0437\u0430\u0434, \u0442\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0434\u043f\u0438\u0441\u044c \u2014 \u00ab\u0414\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u044b \u043d\u0435\u0434\u0430\u0432\u043d\u043e\u00bb.<\/p>\n<p>  \u0412\u043d\u0435\u0448\u043d\u0438\u0439 \u0432\u0438\u0434 \u0432 Linux \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f:<\/p>\n<p>  <a href=\"https:\/\/habrastorage.org\/webt\/c1\/g8\/6d\/c1g86dqdxhhf0u-ggy7uk6rdsuq.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/c1\/g8\/6d\/c1g86dqdxhhf0u-ggy7uk6rdsuq.png\" alt=\"Weather station Banana Pi BPI-M64 Linux C# Docker RabbitMQ AvaloniaUI\" data-src=\"https:\/\/habrastorage.org\/webt\/c1\/g8\/6d\/c1g86dqdxhhf0u-ggy7uk6rdsuq.png\"\/><\/a><br \/>  <em>\u0413\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0432 Linux Alpine<\/em><\/p>\n<p>  \u041f\u043e\u043a\u0430 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0440\u0435\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u043e\u0439 culture \u0432 .NET, \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043c\u0435\u0441\u044f\u0446\u0430 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u043f\u043e-\u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438.<\/p>\n<p>  \u0413\u0440\u0430\u0444\u0438\u043a \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c \u0441 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435\u043c, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f.<\/p>\n<p>  <a href=\"https:\/\/habrastorage.org\/webt\/21\/za\/4f\/21za4fsynrvzsmuypqjldcthz_c.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/21\/za\/4f\/21za4fsynrvzsmuypqjldcthz_c.png\" alt=\"Weather station Banana Pi BPI-M64 Linux C# Docker RabbitMQ AvaloniaUI\" data-src=\"https:\/\/habrastorage.org\/webt\/21\/za\/4f\/21za4fsynrvzsmuypqjldcthz_c.png\"\/><\/a><br \/>  <em>\u0413\u0440\u0430\u0444\u0438\u043a \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b<\/em><\/p>\n<p>  \u0414\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 <a href=\"https:\/\/github.com\/beto-rodriguez\/LiveCharts2\">LiveCharts2<\/a> \u043e\u0442 Alberto Rodriguez, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430\u00a0WPF, WinForms, Xamarin \u0438 Avalonia. \u0412 \u043f\u0440\u043e\u0435\u043a\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u0432 \u0432\u0438\u0434\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 <i><em>\/Libs\/<\/em><\/i>.<\/p>\n<p>  <a href=\"https:\/\/habrastorage.org\/webt\/dd\/kd\/jo\/ddkdjo9_qzwenpg-dk6krajcwsu.gif\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/dd\/kd\/jo\/ddkdjo9_qzwenpg-dk6krajcwsu.gif\" alt=\"Weather station Banana Pi BPI-M64 Linux C# Docker RabbitMQ AvaloniaUI\" data-src=\"https:\/\/habrastorage.org\/webt\/dd\/kd\/jo\/ddkdjo9_qzwenpg-dk6krajcwsu.gif\"\/><\/a><br \/>  <em>\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <a href=\"https:\/\/github.com\/beto-rodriguez\/LiveCharts2\">LiveCharts2<\/a><\/em><\/p>\n<p>  \u041d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u044d\u0442\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0439 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u043d\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e \u0441\u044a\u0435\u0441\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b.<\/p>\n<p>  \u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b:<\/p>\n<div class=\"oembed\">\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/60fef1fb8ff4968fafa2a8e8\" data-style=\"\" id=\"60fef1fb8ff4968fafa2a8e8\" width=\"\"><\/div>\n<\/div>\n<p>  \u0424\u0430\u0439\u043b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u043f\u0443\u0442\u0438\u00a0<i>config\/appsettings.json<\/i>. \u0415\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435:<\/p>\n<pre><code class=\"json\">{   \"AppSettings\": {     \"RabbitMQ\": {       \"UserName\": \"user-lcd\",       \"Password\": \"PASSWORD2\",       \"VirtualHost\": \"\/host-iot\",       \"HostName\": \"192.168.43.208\",       \"ClientProvidedName\": \"app:sensors component:event-consumer\",       \"queueName\": \"queue-sensors\"     }   } } <\/code><\/pre>\n<p>  \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0443 RabbitMQ \u0442\u0430\u043a\u0438\u0435 \u0436\u0435, \u043a\u0430\u043a \u0438 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 <em>WeatherStation.Sensors<\/em>.<\/p>\n<p>  <strong>\u0412\u0430\u0436\u043d\u043e\u0435 \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u0435.<\/strong> \u0420\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044f \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0434\u043b\u044f Linux \u0432 IDE Windows, \u043e\u0431\u0440\u0430\u0449\u0430\u0439\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0445 \u0441\u0442\u0440\u043e\u043a, \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0438 \u0444\u0430\u0439\u043b\u043e\u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430. \u0412\u0441\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 UTF-8. \u0410 \u0442\u043e \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435:<\/p>\n<p>  <a href=\"https:\/\/habrastorage.org\/webt\/o9\/yn\/as\/o9ynas7xq1zq-hzibp_qwmhhzde.jpeg\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/o9\/yn\/as\/o9ynas7xq1zq-hzibp_qwmhhzde.jpeg\" alt=\"Weather station Banana Pi BPI-M64 Linux C# Docker RabbitMQ AvaloniaUI\" data-src=\"https:\/\/habrastorage.org\/webt\/o9\/yn\/as\/o9ynas7xq1zq-hzibp_qwmhhzde.jpeg\" data-blurred=\"true\"\/><\/a><br \/>  <em>\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0432 Linux \u0441 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u043e\u0439 Windows-1251<\/em><\/p>\n<h3>\u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 Docker-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440<\/h3>\n<p>  \u0414\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0430 Xorg \u0438 \u043e\u0431\u043e\u043b\u043e\u0447\u043a\u0430 xfce4. \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0430 Xorg, \u0437\u0430\u0442\u0435\u043c xfce4, \u0438 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0430\u0432\u0442\u043e\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f <i>dotnet \/app\/WeatherStation.Panel.AvaloniaX11.dll<\/i>.\u00a0\u041f\u043e\u043a\u0430 \u0431\u0435\u0437 xfce4 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0430\u0432\u0430\u0440\u0438\u0439\u043d\u043e \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f. \u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u044d\u0442\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0431\u0443\u0434\u0435\u0442 \u0440\u0435\u0448\u0435\u043d\u0430.<\/p>\n<p>  \u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 <strong>Linux\u00a0 Framebuffer<\/strong> \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <i>\/dev\/fb0<\/i>. \u0410\u0434\u0440\u0435\u0441 \u043f\u043e\u043a\u0430 \u0437\u0430\u0445\u0430\u0440\u0434\u043a\u043e\u0440\u0435\u043d, \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u044b\u0432\u043e\u0434 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d \u043d\u0430 \u043b\u044e\u0431\u043e\u0439 LCD-\u0434\u0438\u0441\u043f\u043b\u0435\u0439, SPI LCD, HDMI \u0438 VGA.<\/p>\n<h3>\u0417\u0430\u043f\u0443\u0441\u043a Docker-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430<\/h3>\n<p>  \u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f WeatherStation.Panel.AvaloniaX11 \u2014 <a href=\"https:\/\/hub.docker.com\/r\/devdotnetorg\/dotnet-ws-panel\">devdotnetorg\/dotnet-ws-sensors<\/a>, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0441\u0431\u043e\u0440\u043a\u0430 \u043f\u043e\u0434 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b: ARM64 \u0438 x86. \u041a\u043e\u043c\u0430\u043d\u0434\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430:<\/p>\n<pre><code class=\"bash\">$ docker run -d --name test-dotnet-ws-panel --restart always --net mynetwork --ip 172.21.0.7 --privileged --device=\/dev\/fb0 -v test-dotnet-ws-panel-config:\/app\/config -e RabbitMQUserName=user-lcd -e RabbitMQPassword=PASSWORD2 -e TZ=Europe\/Moscow devdotnetorg\/dotnet-ws-panel:avaloniax11 <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443 <strong>Linux framebuffer<\/strong>: <i>\/dev\/fb0<\/i>. \u0411\u0435\u0437 \u0432\u044b\u0434\u0430\u0447\u0438 \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0439 \u043d\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f Xorg. \u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f <em>RabbitMQUserName<\/em>, <em>RabbitMQPassword<\/em> \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 <i>config\/appsettings.json<\/i>. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0446\u0435\u043b\u044f\u0445 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u043b\u043e\u0433\u0438\u043d\/\u043f\u0430\u0440\u043e\u043b\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0443 RabbitMQ \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435. \u0414\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0447\u0430\u0441\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u044f\u0441\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u00abTZ\u00bb. \u0415\u0451 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e \u043c\u0435\u0436\u0434\u0443\u043d\u0430\u0440\u043e\u0434\u043d\u043e\u043c\u0443 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0443 \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0437\u043e\u043d \u2014 <a href=\"https:\/\/en.wikipedia.org\/wiki\/List_of_tz_database_time_zones\">List of tz database time zones<\/a>.<\/p>\n<h2>Docker Compose. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432<\/h2>\n<p>  \u0418\u0442\u043e\u0433\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b <a href=\"https:\/\/github.com\/devdotnetorg\/dotnet-service-weather-station\/blob\/v1_habr\/docker-compose.ws.AvaloniaX11.yml\">docker-compose.ws.AvaloniaX11.yml<\/a> \u0434\u043b\u044f Docker Compose \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c:<\/p>\n<pre><code class=\"plaintext\">version: '2.2'  services: # RabbitMQ   rabbitmq-iot:     container_name: rabbitmq-iot     image: rabbitmq:alpine #    restart: always     hostname: rabbitmq-iot         ports:       - 5672:5672\/tcp       - 15672:15672\/tcp     volumes:       - rabbit-iot-config:\/etc\/rabbitmq       - rabbit-iot-lib:\/var\/lib\/rabbitmq     networks:       mynetwork:         ipv4_address: 172.21.0.5     healthcheck:         test: rabbitmq-diagnostics -q ping         interval: 10 s         timeout: 10 s         retries: 10     cpus: 0.6      #WeatherStation.Sensors   test-dotnet-ws-sensors:     image: devdotnetorg\/dotnet-ws-sensors     container_name: test-dotnet-ws-sensors     restart: always     devices:       - \/dev\/i2c-1       - \/dev\/gpiochip1     environment:       - RabbitMQUserName=user-sensors       - RabbitMQPassword=PASSWORD1     volumes:       - \/sys\/bus\/w1\/devices:\/sys\/bus\/w1\/devices       - \/sys\/devices\/w1_bus_master1:\/sys\/devices\/w1_bus_master1       - test-dotnet-ws-sensors-config:\/app\/config     networks:       mynetwork:         ipv4_address: 172.21.0.6     depends_on:       rabbitmq-iot:         condition: service_healthy     links:       - rabbitmq-iot     cpus: 0.2                  #WeatherStation.Panel   test-dotnet-ws-panel:     image: devdotnetorg\/dotnet-ws-panel:avaloniax11     container_name: test-dotnet-ws-panel     restart: always     privileged: true     devices:       - \/dev\/fb0     networks:       mynetwork:         ipv4_address: 172.21.0.7     environment:       - RabbitMQUserName=user-lcd       - RabbitMQPassword=PASSWORD2       - TZ=Europe\/Moscow     volumes:       - test-dotnet-ws-panel-config:\/app\/config #      - \/etc\/timezone:\/etc\/timezone:ro     depends_on:       rabbitmq-iot:         condition: service_healthy     links:       - rabbitmq-iot     cpus: 0.8  volumes:   rabbit-iot-config:    name: rabbit-iot-config   rabbit-iot-lib:    name: rabbit-iot-lib   test-dotnet-ws-sensors-config:    name: test-dotnet-ws-sensors-config   test-dotnet-ws-panel-config:    name: test-dotnet-ws-panel-config     networks:   mynetwork:     external: true <\/code><\/pre>\n<p>  \u0414\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 Docker Compose \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n<pre><code class=\"bash\">$ sudo apt-get update $ sudo apt-get install docker-compose <\/code><\/pre>\n<p>  \u0414\u043b\u044f \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u0444\u0430\u0439\u043b <a href=\"https:\/\/github.com\/devdotnetorg\/dotnet-service-weather-station\/blob\/v1_habr\/docker-compose.ws.AvaloniaX11.yml\">docker-compose.ws.AvaloniaX11.yml<\/a>, \u0438 \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 \u0441 \u044d\u0442\u0438\u043c \u0444\u0430\u0439\u043b\u043e\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443<\/p>\n<pre><code class=\"bash\">$ docker-compose -p \"DotnetServiceWeatherStation\" --file docker-compose.ws.AvaloniaX11.yml up -d <\/code><\/pre>\n<p>  \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0432\u0441\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043d\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f. \u041f\u0440\u0438 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c RabbitMQ \u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c <em>WeatherStation.Panel.AvaloniaX11<\/em>, \u043d\u0430\u043a\u043e\u043f\u0438\u0442\u0435\u043b\u044c \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u043c\u0438\u0440\u0430\u0435\u0442, \u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0443\u0445\u043e\u0434\u0438\u0442 \u0432 \u0441\u0442\u0443\u043f\u043e\u0440 \u043d\u0430 20 \u043c\u0438\u043d\u0443\u0442. \u041f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0441\u0435\u0440\u0432\u0435\u0440 RabbitMQ \u043e\u0447\u0435\u043d\u044c \u0441\u0438\u043b\u044c\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u043c\u0438 I\/O \u043d\u0430\u043a\u043e\u043f\u0438\u0442\u0435\u043b\u044c \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 Docker Compose\u00a0\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u0442\u0430\u0440\u0442\u0443\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0432\u0430 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430: <em>WeatherStation.Sensors<\/em> \u0438 <em>WeatherStation.Panel<\/em>. \u0417\u0430\u043f\u0443\u0441\u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0430 RabbitMQ \u0440\u0435\u0448\u0435\u043d \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e cron \u0437\u0430\u0434\u0430\u0447\u0438. \u042d\u043c\u043f\u0438\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043f\u0443\u0442\u0435\u043c \u0431\u044b\u043b\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e, \u0447\u0442\u043e \u0434\u0432\u0443\u0445 \u043c\u0438\u043d\u0443\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 <em>WeatherStation.Sensors<\/em> \u0438 <em>WeatherStation.Panel<\/em>. \u0412\u044b\u043f\u043e\u043b\u043d\u0438\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0440\u0430\u0431\u043e\u0442\u044b cron \u0434\u0435\u043c\u043e\u043d\u0430, \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/p>\n<pre><code class=\"bash\">$ systemctl status cron <\/code><\/pre>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b:<\/p>\n<pre><code class=\"bash\">root@bananapim64:~# systemctl status cron \u25cf cron.service - Regular background program processing daemon    Loaded: loaded (\/lib\/systemd\/system\/cron.service; enabled; vendor preset: enabled)    Active: active (running) since Fri 2021-07-16 01:45:28 MSK; 2 days ago      Docs: man:cron(8)  Main PID: 707 (cron)     Tasks: 1 (limit: 2219)    CGroup: \/system.slice\/cron.service            \u2514\u2500707 \/usr\/sbin\/cron -f <\/code><\/pre>\n<p>  Cron \u0434\u0435\u043c\u043e\u043d \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<p>  \u0414\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 RabbitMQ \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c cron \u0437\u0430\u0434\u0430\u0447\u0443, \u043f\u043e\u043f\u043e\u043b\u043d\u0438\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n<pre><code class=\"bash\">crontab -e <\/code><\/pre>\n<p>  \u0412 \u043a\u043e\u043d\u0435\u0446 \u0444\u0430\u0439\u043b\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u0442\u0440\u043e\u043a\u0443:<\/p>\n<pre><code class=\"bash\">@reboot sleep 120 &amp;&amp; docker start rabbitmq-iot <\/code><\/pre>\n<p>  \u041a\u043e\u043c\u0430\u043d\u0434\u0430 <em>sleep 120<\/em>, \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u0434\u0432\u0443\u0445 \u043c\u0438\u043d\u0443\u0442.\u00a0\u0421\u0435\u0440\u0432\u0435\u0440 RabbitMQ \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 2 \u043c\u0438\u043d\u0443\u0442\u044b, \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043d\u0430 \u043f\u043e\u043b\u043d\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u0432\u0441\u0435\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0443\u0445\u043e\u0434\u0438\u0442 \u043e\u043a\u043e\u043b\u043e 4 \u043c\u0438\u043d\u0443\u0442.<\/p>\n<h2>\u0423\u0442\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432<\/h2>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u044f\u044e\u0442 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b. \u0412 \u041e\u0421 \u043d\u0435 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043e \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0444\u043e\u043d\u043e\u0432\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0438 \u043b\u0438\u0448\u043d\u0438\u0445 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432, \u043a\u0440\u043e\u043c\u0435\u00a0<a href=\"https:\/\/hub.docker.com\/r\/portainer\/portainer\">portainer\/portainer<\/a>. \u0411\u0443\u0434\u0435\u043c \u043e\u0446\u0435\u043d\u0438\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430. \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0447\u0435\u0442\u044b\u0440\u0435\u0445 \u044f\u0434\u0435\u0440 Cortex-A53 \u043d\u0430 100% \u0431\u0443\u0434\u0435\u0442 \u0432\u0437\u044f\u0442\u0430 \u0437\u0430 100% \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 CPU. \u042d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043e\u043c \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 Banana Pi BPI-M64 \u043f\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f Raspberry Pi 3 \u0438 \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 Orange Pi Zero 2.<\/p>\n<p>  <strong>\u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 devdotnetorg\/dotnet-ws-sensors<\/strong><\/p>\n<p>  \u041f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435 RAM \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u043a\u043e\u043b\u043e 20 \u041c\u0431, \u0437\u0430\u0442\u0435\u043c \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f (\u043e\u043a\u043e\u043b\u043e 30 \u043c\u0438\u043d\u0443\u0442) \u043f\u0430\u0434\u0430\u0435\u0442 \u0434\u043e ~7 \u041c\u0431. \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 CPU \u043d\u0430 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0435\u0440\u0438\u043e\u0434\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043a\u043e\u043b\u0435\u0431\u043b\u0435\u0442\u0441\u044f \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 1.5-3%, \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u0441\u043a\u0430\u0447\u043a\u043e\u0432 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 CPU \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u0442\u0430\u0440\u0442\u0430 \u043d\u0435 \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043e.<\/p>\n<p>  <a href=\"https:\/\/habrastorage.org\/webt\/dv\/64\/_h\/dv64_hvjsskivlfw0s-qjtxwkxo.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/dv\/64\/_h\/dv64_hvjsskivlfw0s-qjtxwkxo.png\" alt=\"Weather station Banana Pi BPI-M64 Linux C# Docker RabbitMQ AvaloniaUI\" data-src=\"https:\/\/habrastorage.org\/webt\/dv\/64\/_h\/dv64_hvjsskivlfw0s-qjtxwkxo.png\"\/><\/a><br \/>  <em>\u041f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u043c devdotnetorg\/dotnet-ws-sensors (\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u2014 <a href=\"https:\/\/hub.docker.com\/r\/portainer\/portainer\">portainer\/portainer<\/a>)<\/em><\/p>\n<p>  <strong>\u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 devdotnetorg\/dotnet-ws-panel<\/strong><\/p>\n<p>  \u041f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435 RAM \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u043a\u043e\u043b\u043e 75 \u041c\u0431. \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 CPU \u043d\u0430 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0435\u0440\u0438\u043e\u0434\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043a\u043e\u043b\u0435\u0431\u043b\u0435\u0442\u0441\u044f \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 12-18%. \u041f\u0435\u0440\u0432\u044b\u0439 \u043f\u0438\u043a (\u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b) \u0432\u044b\u0437\u0432\u0430\u043b\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 CPU \u043d\u0430 80%. \u0417\u0430\u0442\u0435\u043c \u044d\u043a\u0440\u0430\u043d \u0431\u044b\u043b \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 \u0440\u0435\u0436\u0438\u043c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b. \u0412\u0442\u043e\u0440\u043e\u0439 \u043f\u0438\u043a, \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0435 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a, \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 CPU 50%, \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u0430\u044f \u043f\u0440\u043e\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0443\u0436\u0435 \u043c\u0435\u043d\u044c\u0448\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432. \u0422\u0440\u0435\u0442\u0438\u0439 \u043f\u0438\u043a, \u0432 \u0442\u0440\u0435\u0442\u0438\u0439 \u0440\u0430\u0437 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u043b\u0438 \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a, \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 CPU 50%. \u0415\u0441\u043b\u0438 \u0441 \u0440\u0435\u0436\u0438\u043c\u0430 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u043c, \u043e\u043a\u043e\u043b\u043e 10 \u0441\u0435\u043a\u0443\u043d\u0434, \u0442\u043e \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 CPU.<\/p>\n<p>  \u0418\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0446\u0438\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f. \u041f\u0435\u0440\u0432\u0430\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 CPU \u043d\u0430 80%. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e, \u0435\u0441\u043b\u0438 \u0431\u044b\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u043d\u043e\u0432\u044b\u0435 \u0442\u043e\u0447\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u043f\u0435\u0440\u0435\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u0430, \u043f\u0440\u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 CPU \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 50%. \u0415\u0441\u043b\u0438 \u043d\u043e\u0432\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 \u043d\u0435 \u0431\u044b\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b, \u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a, \u0442\u043e \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 CPU. \u0418\u0437 \u044d\u0442\u043e\u0433\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442, \u0447\u0442\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u0440\u0430\u0441\u0445\u043e\u0434\u0443\u0435\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 CPU. \u041f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435 RAM \u043f\u0440\u0438 \u0432\u0441\u0435\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f\u0445 \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f, \u0442.\u043a. \u0433\u0440\u0430\u0444\u0438\u043a \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0440\u0435\u0436\u0438\u043c\u0430 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>  <a href=\"https:\/\/habrastorage.org\/webt\/n0\/o2\/zq\/n0o2zqlbahmyohzy3mnqltq1mam.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/n0\/o2\/zq\/n0o2zqlbahmyohzy3mnqltq1mam.png\" alt=\"Weather station Banana Pi BPI-M64 Linux C# Docker RabbitMQ AvaloniaUI\" data-src=\"https:\/\/habrastorage.org\/webt\/n0\/o2\/zq\/n0o2zqlbahmyohzy3mnqltq1mam.png\"\/><\/a><br \/>  <em>\u041f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u043c devdotnetorg\/dotnet-ws-panel (\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u2014 <a href=\"https:\/\/hub.docker.com\/r\/portainer\/portainer\">portainer\/portainer<\/a>)<\/em><\/p>\n<p>  \u0417\u0430\u043f\u0443\u0441\u043a \u043c\u0435\u0442\u0435\u043e\u0441\u0442\u0430\u043d\u0446\u0438\u0438 \u043d\u0430 Banana Pi M64 (\u043f\u043e\u043b\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442):  <\/p>\n<div class=\"oembed\">\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/60fef1fc920526a288c7e17b\" data-style=\"\" id=\"60fef1fc920526a288c7e17b\" width=\"\"><\/div>\n<\/div>\n<p>  <\/p>\n<h2>\u0412\u044b\u0432\u043e\u0434<\/h2>\n<p>  \u0414\u0430\u043d\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0431\u044b\u043b\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u0434\u0435\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 GPIO \u0438\u0437 Docker-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0438 \u0432\u044b\u0432\u043e\u0434\u0430 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0433\u043e UI \u043d\u0430 LCD \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0433\u043e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430 <a href=\"https:\/\/www.qt.io\/product\/develop-embedded-devices\">Qt for Embedded Linux<\/a>. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c\u00a0\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438. \u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 SoC Allwinner A64 (\u0431\u044b\u043b \u0432\u044b\u043f\u0443\u0449\u0435\u043d \u0432 2015 \u0433.) \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447. \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 <em>devdotnetorg\/dotnet-ws-sensors\u00a0<\/em>\u0432\u0441\u0435\u0433\u043e \u043d\u0430 3% \u0434\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441 \u0434\u0435\u0441\u044f\u0442\u043e\u043a \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432. \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a \u2014 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u043e\u0441\u044c \u0443\u0437\u043a\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0432 \u043d\u0438\u0437\u043a\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043e\u0431\u043c\u0435\u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0441 microSD. \u0415\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0431\u044b\u0441\u0442\u0440\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c eMMC, \u0442\u043e, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u0441 \u0434\u043e\u043b\u0433\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 RabbitMQ \u0432\u0441\u0435 \u0436\u0435 \u0442\u044f\u0436\u0435\u043b\u043e\u0432\u0430\u0442\u043e \u0434\u043b\u044f \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430. \u0416\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043b\u0435\u0433\u043a\u0438\u0439 \u0431\u0440\u043e\u043a\u0435\u0440 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439. \u0423 \u043a\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043a\u0430\u043a \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0441\u044f, welcome \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438.<\/p>\n<h2>\u0427\u0442\u043e \u0434\u0430\u043b\u044c\u0448\u0435?<\/h2>\n<p>  \u041d\u0435\u0442 \u043f\u0440\u0435\u0434\u0435\u043b\u0430 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0441\u0442\u0432\u0443, \u043f\u0440\u043e\u0435\u043a\u0442 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u043d, \u043f\u0435\u0440\u0435\u0440\u0430\u0431\u043e\u0442\u0430\u043d \u0438 \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u0430\u043d, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e:<\/p>\n<ul>\n<li><strong>\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0439 \u0448\u0430\u0431\u043b\u043e\u043d \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 WeatherStation.Sensors.<\/strong> \u041f\u0440\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u044b\u043b\u0430 \u0434\u043e\u043f\u0443\u0449\u0435\u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u0432 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0438 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b. \u041e\u0448\u0438\u0431\u043a\u0430 \u0431\u044b\u043b\u0430 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0430 \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0443\u0436\u0435 \u0431\u044b\u043b\u043e \u0433\u043e\u0442\u043e\u0432\u043e.<\/li>\n<li><strong>\u0420\u0435\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0441 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043a\u0443\u043b\u044c\u0442\u0443\u0440\u044b.<\/strong> \u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u043d\u0435 \u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0441\u043c\u0435\u043d\u0443 \u043a\u0443\u043b\u044c\u0442\u0443\u0440\u044b \u043d\u0430 \u00abru-RU\u00bb, \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u00aben-US\u00bb.<\/li>\n<li><strong>\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440 RabbitM \u0434\u0440\u0443\u0433\u0438\u043c \u0431\u0440\u043e\u043a\u0435\u0440\u043e\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439.<\/strong> \u0421\u0435\u0440\u0432\u0435\u0440 RabbitMQ \u0441\u0438\u043b\u044c\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u043c\u0438 I\/O \u043d\u0430\u043a\u043e\u043f\u0438\u0442\u0435\u043b\u044c \u0434\u0430\u043d\u043d\u044b\u0445, \u0447\u0442\u043e \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.<\/li>\n<li><strong>\u041f\u043e\u0432\u044b\u0441\u0438\u0442\u044c \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c.<\/strong> \u041f\u0440\u0438 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 Docker-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u043b\u0443\u0447\u0448\u0438\u0435 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438, \u0438 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e\u043c <a href=\"https:\/\/devdotnet.org\/post\/bezopasnost-vstraivaemyh-system-linux\/\">\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c Linux<\/a>.<\/li>\n<li><strong>\u0418\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 xfce4.<\/strong> \u0412 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 WeatherStation.Panel.AvaloniaX11 \u0440\u0435\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0441 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043f\u043e\u0432\u0435\u0440\u0445 Xorg. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0441\u043d\u0438\u0437\u0438\u0442\u0441\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043d\u0430 CPU \u0438 \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043c \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u043c\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438.<\/li>\n<li><strong>\u0421\u043e\u0431\u0440\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0434\u043b\u044f ARMv7<\/strong>. \u0420\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0434\u043b\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b ARM32.<\/li>\n<li><strong>\u0421\u0434\u0435\u043b\u0430\u0442\u044c \u0430\u0434\u0430\u043f\u0442\u0438\u0432\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441.<\/strong> \u0412 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 WeatherStation.Panel.AvaloniaX11 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0443 \u0434\u043b\u044f \u044d\u043a\u0440\u0430\u043d\u043e\u0432 \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c.<\/li>\n<li><strong>\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u0435\u043c\u043d\u0443\u044e \u0442\u0435\u043c\u0443.<\/strong> \u0414\u043b\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f WeatherStation.Panel.AvaloniaX11 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0435\u043c\u043d\u043e\u0439 \u0442\u0435\u043c\u044b.<\/li>\n<li><strong>\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u044f\u0440\u043a\u043e\u0441\u0442\u044c\u044e \u044d\u043a\u0440\u0430\u043d\u0430.<\/strong> \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0435\u0449\u0435 \u043e\u0434\u0438\u043d Docker-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0441 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0443\u0440\u043e\u0432\u043d\u044e \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f \u043e\u0442 \u0434\u0430\u0442\u0447\u0438\u043a\u0430 <a href=\"https:\/\/www.instructables.com\/How-to-Measure-LUX-With-Arduino\/\">TSL2561 Light Sensor<\/a>, \u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/micro-pi.ru\/rpi-pi4j-%D1%83%D1%80%D0%BE%D0%BA-10-%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0-%D1%86%D0%B0%D0%BF-mcp4725\/\">MCP4725 I2C DAC<\/a> \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u044f\u0440\u043a\u043e\u0441\u0442\u044c\u044e LCD ILI9341. \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u044f\u0440\u043a\u043e\u0441\u0442\u044c\u044e \u0447\u0435\u0440\u0435\u0437 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 <strong>gpio-backlight<\/strong> \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u0430\u043d\u043d\u043e\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0443 \u0434\u0438\u0441\u043f\u043b\u0435\u044f. \u0417\u0430\u043e\u0434\u043d\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0448\u0438\u043d\u043e\u0439 I2C \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0438\u0437 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432.<\/li>\n<li><strong>\u0421\u0434\u0435\u043b\u0430\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043d\u0430 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0435 Uno Platform.<\/strong> \u0424\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a <a href=\"https:\/\/platform.uno\/\">Uno Platform<\/a>, \u0442\u0430\u043a \u0436\u0435 \u043a\u0430\u043a \u0438 Avalonia, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u0432\u0435\u0440\u0445 Xorg. \u0421\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430.<\/li>\n<li><strong>\u0421\u0434\u0435\u043b\u0430\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043d\u0430 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0435 Uno Platform \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e Linux Framebuffer.<\/strong> Uno Platform \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u0442\u0438\u0432\u043d\u043e \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 <strong>Linux Framebuffer<\/strong> \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u0430\u043a\u043e\u0439-\u043b\u0438\u0431\u043e \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0432 \u0432\u0438\u0434\u0435 Xorg, \u0438 \u044d\u0442\u043e \u0442\u043e\u0447\u043d\u043e. \u0411\u044b\u043b\u043e \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 Banana Pi BPI-M64. \u0421 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u2014 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442.<\/li>\n<\/ul>\n<p>  <\/p>\n<h2>\u0420\u0435\u0441\u0443\u0440\u0441\u044b<\/h2>\n<p>  <strong>\u041f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430 GitHub \u2014 <a href=\"https:\/\/github.com\/devdotnetorg\/dotnet-service-weather-station\/tree\/v1_habr\">dotnet-service-weather-station<\/a>.<\/strong><br \/>  <strong> Docker-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b: <a href=\"https:\/\/hub.docker.com\/r\/devdotnetorg\/dotnet-ws-sensors\">devdotnetorg\/dotnet-ws-sensors<\/a>, <a href=\"https:\/\/hub.docker.com\/r\/devdotnetorg\/dotnet-ws-panel\">devdotnetorg\/dotnet-ws-panel<\/a>.<\/strong><\/p>\n<h2>\u0411\u0438\u0442\u0432\u0430 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432: Avalonia \u0438 Uno Platform VS. HTML (Node.js, Electron)<\/h2>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441\u0443\u0442\u044c \u043f\u043e\u0434\u0445\u043e\u0434\u0430. \u0410\u0432\u0442\u043e\u0440 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c web-\u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f HTML-\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b (\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f). HTML-\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u0441 http-\u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 Node.js. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0442\u0440\u0435\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432:<\/p>\n<ul>\n<li><strong>Http-server \u0438 web-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435<\/strong> \u2014 \u0441\u0435\u0440\u0432\u0435\u0440\/\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u0442\u0434\u0430\u0447\u0438 \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430;<\/li>\n<li><strong>\u0412\u0435\u0431-\u0431\u0440\u0430\u0443\u0437\u0435\u0440<\/strong> \u2014 \u0441\u0440\u0435\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432\u043e\u0433\u043e \u043a\u043e\u0434\u0430;<\/li>\n<li><strong>\u041a\u043e\u043d\u0442\u0435\u043d\u0442<\/strong> \u2014 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432\u044b\u0439 \u043a\u043e\u0434, \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u0432 web-\u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435.<\/li>\n<\/ul>\n<p>  \u041f\u0435\u0440\u0432\u043e\u0435 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u2014 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438\u0448\u043d\u0438\u043c \u0437\u0432\u0435\u043d\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0442\u044c. \u0412\u0442\u043e\u0440\u043e\u0435, \u043a\u043e\u0433\u0434\u0430 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u0432\u044b \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0435 \u00abHello word!\u00bb, \u0432\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e. \u041d\u043e \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u0432\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0441\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u0441 \u043c\u0430\u043b\u043e\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e. \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0441\u044a\u0435\u0434\u0430\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438. \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0432\u0441\u0435 \u0432 Electron? \u041d\u0430 \u043c\u043e\u0435\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435 \u0441 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u043c Intel Core i7-3520M \u0437\u0430\u043f\u0443\u0441\u043a \u00ab\u043d\u0430\u0441\u044b\u0449\u0435\u043d\u043d\u044b\u0445\u00bb \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 Electron \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0432\u0435\u043d\u0442\u0438\u043b\u044f\u0442\u043e\u0440\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0442\u0430\u043a, \u043a\u0430\u043a \u0431\u0443\u0434\u0442\u043e \u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e Watch Dogs 2. \u042d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u043e, \u0435\u0441\u043b\u0438 \u0432\u0430\u0448\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u0442 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u0441\u0435\u0442\u0438, \u0430 \u0435\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u044b\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043f\u0438\u0442\u0430\u043d\u0438\u044f? \u0422\u0430\u043a \u0447\u0442\u043e Electron \u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u0431\u0435\u0437\u0443\u043c\u043d\u043e \u0442\u043e\u0440\u043c\u043e\u0437\u043d\u0430\u044f \u0438 \u043e\u0447\u0435\u043d\u044c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043a \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c \u0448\u0442\u0443\u043a\u0430. Native-app must have!<\/p>\n<p>  \u0422\u0440\u0435\u0442\u044c\u0435, \u0434\u0440\u0443\u0433\u0430\u044f \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u2014 \u044d\u0442\u043e \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u043e\u0448\u0438\u0431\u043e\u043a \u0432 JS-\u043a\u043e\u0434\u0435. \u0421\u0435\u0440\u0432\u0435\u0440 \u043e\u0442\u0434\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e JS-\u043a\u043e\u0434 \u0438 \u043a\u043e\u043d\u0442\u0435\u043d\u0442 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 JSON. \u041e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u043e\u0448\u0438\u0431\u043e\u043a \u0432 JS-\u043a\u043e\u0434\u0435 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u0442\u0435\u043a\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440, \u0435\u0449\u0435 \u0442\u0430 \u0437\u0430\u0442\u0435\u044f. \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043c\u043e\u044f \u043f\u0440\u0435\u0442\u0435\u043d\u0437\u0438\u044f \u043a \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043d\u0430 HTML \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043d\u0438\u0437\u043a\u043e\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0445\u0443\u0434\u0448\u0435\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0435 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u0447\u0442\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u041c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 \u0432 JS-\u043a\u043e\u0434. \u041d\u043e \u0432\u0430\u043c \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0432 Node.js, JS-\u043a\u043e\u0434\u0435 \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430.<\/p>\n<p>  \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0439 \u043a\u043e\u0434 Avalonia \u0438 Uno Platform \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u0442\u0438\u0432\u043d\u043e \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0438 \u0431\u0443\u0434\u0435\u0442 \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 JS-\u043a\u043e\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430. \u0410 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u044b\u0432\u043e\u0434\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043d\u0430 <strong>Linux Framebuffer<\/strong>, \u043d\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u0443\u044e\u0442\u0441\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u043d\u0430 Xorg \u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432. \u0412\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0430 \u0434\u0432\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041f\u0435\u0440\u0432\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u2014 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 GPIO \u0438 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438. \u0412\u0442\u043e\u0440\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u2014 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441\u0430\u043c \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441. \u0415\u0441\u043b\u0438 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043d\u0430 Node.js, \u0442\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0441 \u043a\u0432\u0430\u043b\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 JS \u0438\/\u0438\u043b\u0438 TypeScript. \u041f\u0435\u0440\u0432\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043d\u0430 C \u0438\u043b\u0438 C#. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u043a\u0432\u0430\u043b\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 AvaloniaUI, \u0438 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0434\u0430\u0442\u0447\u0438\u043a\u0430\u043c\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430 C# \u043a\u043e\u0434\u0435, \u0442\u043e \u0432\u0430\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0441 \u043a\u0432\u0430\u043b\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0435\u0439 \u043f\u043e .NET (C#). \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0443 \u0432\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u043e\u0434\u043d\u043e\u0440\u043e\u0434\u043d\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430, \u0447\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u043a\u0430\u0434\u0440\u043e\u0432\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0437\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043d\u0430 HTML, \u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u0441\u0434\u0435\u043b\u0430\u043d\u043d\u044b\u0439 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0434\u0440\u0443\u0433\u0438\u0445 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439, \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0442\u0430\u043a\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0442\u0435\u0437\u0438\u0441\u044b:<\/p>\n<p>  <strong>\u00ab\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043d\u0438\u0445, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0430\u043f\u0433\u0440\u0435\u0439\u0434\u0430 \u043b\u044e\u0431\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0437\u0430\u043c\u0435\u043d\u0430 \u0434\u0438\u0441\u043f\u043b\u0435\u044f \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c) \u0447\u0430\u0441\u0442\u043e \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439.\u00bb<\/strong> \u041d\u0435\u0442, \u043d\u0435 \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f. \u0418\u0441\u0442\u043e\u0440\u0438\u044f \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u2014 \u044d\u0442\u043e \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u0443\u043d\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. \u0415\u0441\u043b\u0438 \u0432\u044b\u00a0\u0441\u043c\u0435\u043d\u0438\u0442\u0435 \u043d\u0430 Raspberry Pi \u043e\u0434\u0438\u043d \u043c\u043e\u043d\u0438\u0442\u043e\u0440 \u0441 HDMI \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439, \u0442\u043e\u0436\u0435 \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 HDMI, \u0442\u043e \u0432\u0430\u043c \u043d\u0435 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043d\u0438\u043a\u0430\u043a\u043e\u0435 \u041f\u041e. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441 \u043c\u0435\u0440\u0446\u0430\u043d\u0438\u0435\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f. \u041d\u043e \u044d\u0442\u043e \u043d\u0435 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u043e\u0433\u043e \u041f\u041e.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432 \u043c\u043e\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0440\u0435\u0448\u0438\u0442\u0435 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c LCD ILI9341 \u043d\u0430 SPI-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435, \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u0434\u0438\u0441\u043f\u043b\u0435\u0439, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0430 MIPI DSI(<a href=\"https:\/\/ru.wikipedia.org\/wiki\/Display_Serial_Interface\">Display Serial Interface<\/a>, \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0430\u0445 \u0438 \u043f\u043b\u0430\u043d\u0448\u0435\u0442\u0430\u0445) \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435, \u0442\u043e \u0432\u0430\u043c, \u0431\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u043e, \u043f\u043e\u0434 \u043d\u043e\u0432\u044b\u0439 \u0434\u0438\u0441\u043f\u043b\u0435\u0439 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u0434\u0440\u0430\u0439\u0432\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0434\u0438\u0441\u043f\u043b\u0435\u044f. \u041d\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u0430\u043a\u043e\u0435 \u043a\u0430\u043a WeatherStation.Panel.AvaloniaX11 \u043d\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f, \u0438 \u044d\u0442\u043e \u0442\u043e\u0447\u043d\u043e. \u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 <em>WeatherStation.Panel.AvaloniaX11<\/em> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u043e\u0435 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e <strong>Linux\u00a0 Framebuffer<\/strong>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u043e\u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u043c. API \u0440\u0430\u0431\u043e\u0442\u044b c \u0434\u0430\u043d\u043d\u044b\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043d\u0438 \u043e\u0442 \u043c\u043e\u0434\u0435\u043b\u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0445 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0430\u043d\u0435\u043b\u0435\u0439, \u043d\u0438 \u043e\u0442 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b: x86, ARM, RISC-V.<\/p>\n<p>  <strong>\u0412\u044b \u0433\u043e\u0442\u043e\u0432\u044b \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442\u044c \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u043d\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u0432? \u0411\u0443\u0434\u0435\u0442\u0435 \u043b\u0438 \u0432\u044b \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0438\u0445 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c: Windows, OSX, Linux? \u041d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u0435\u0449\u0435 \u0438 \u043e \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0434\u0435\u0432\u0430\u0439\u0441\u0430\u0445.\u00a0<\/strong>\u041d\u0435\u0442, \u0438 \u0432 \u044d\u0442\u043e\u043c \u043d\u0435\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b. \u0415\u0441\u043b\u0438 \u0432\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0435 \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u0442\u043e \u0432\u0430\u0441, \u0441\u043a\u043e\u0440\u0435\u0435, \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u043b\u043d\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e Linux, \u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430 Ubuntu, Debian \u0438 \u0442.\u0434. \u041d\u043e \u0435\u0441\u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 Docker-\u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044e \u0434\u043b\u044f \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u043e\u0433\u043e \u041f\u041e, \u0442\u043e \u044d\u0442\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f. \u0410 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0436\u0435\u043b\u0435\u0437\u043e \u0441 OS X \u2014 \u0434\u043e\u0440\u043e\u0433\u043e\u0435 \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u0435. Windows \u2014 \u044d\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0442\u0435\u043c\u0430, \u0435\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0441\u0442\u044c \u0432 \u0441\u0435\u043a\u0442\u043e\u0440\u0435 \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u0443\u0436\u0435 \u043d\u0435 \u0442\u0430\u043a\u0430\u044f \u043a\u0430\u043a \u0432 2000-\u0445 \u0433\u043e\u0434\u0430\u0445. \u0421\u0435\u0439\u0447\u0430\u0441 \u0432\u0441\u0435 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0440\u043e\u043b\u044c \u0438\u0433\u0440\u0430\u044e\u0442 Linux-\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 Linux-\u044f\u0434\u0440\u0435 (Android). \u041d\u043e, \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u044d\u0442\u043e, \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 <em>WeatherStation.Panel.AvaloniaX11\u00a0<\/em>\u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 Windows 7, 10 (x86) \u0438 Linux (x86, ARM64), \u043f\u0440\u0438\u0447\u0435\u043c \u0431\u0435\u0437 \u043a\u0430\u043a\u043e\u0433\u043e-\u043b\u0438\u0431\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430. \u0410 \u0435\u0441\u043b\u0438 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043d\u0430 <a href=\"https:\/\/platform.uno\/\">Uno Platform<\/a>, \u0442\u043e \u0442\u043e\u0442 \u0436\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0439 \u043a\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 Windows, iOS, macOS, Android, Linux \u0438 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 <strong>Linux Framebuffer<\/strong>.<\/p>\n<p>  <strong>\u041f\u043e\u0447\u0435\u043c\u0443 \u0436\u0435 \u043c\u044b \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043d\u0435 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c \u0442\u0430\u043a\u0438\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432? \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u043e\u043d\u0438 \u0435\u0441\u0442\u044c: \u0442\u0430\u043a\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b \u0435\u0441\u0442\u044c \u043f\u043e\u0447\u0442\u0438 \u0443 \u0432\u0441\u0435\u0445 \u0440\u043e\u0443\u0442\u0435\u0440\u043e\u0432 \u0438 \u0442\u043e\u0447\u0435\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u0430, \u0438 \u043e\u043d\u0438 \u0434\u0430\u0432\u043d\u044b\u043c-\u0434\u0430\u0432\u043d\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442. <\/strong>\u0414\u0430, \u043d\u0430 \u0440\u043e\u0443\u0442\u0435\u0440\u0435 \u0435\u0441\u0442\u044c Web-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u043d\u043e \u0440\u0435\u043d\u0434\u0435\u0440\u043e\u043c HTML-\u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043a\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f CPU \u0438 GPU \u043c\u043e\u0435\u0433\u043e \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430. \u0420\u043e\u0443\u0442\u0435\u0440 \u043b\u0438\u0448\u044c \u043e\u0442\u0434\u0430\u0435\u0442 \u0441\u0442\u0430\u0442\u0438\u043a\u0443 (\u0444\u0430\u0439\u043b\u044b html, js) \u0438 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0435\u0442 GET \u0438 POST \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0441 JSON \u0438\/\u0438\u043b\u0438 XML \u0434\u0430\u043d\u043d\u044b\u043c\u0438. \u042f \u0431\u0435\u0437 \u043e\u0441\u043e\u0431\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043c\u043e\u0433\u0443 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 ASP.NET Web API, \u043f\u0440\u0438\u043a\u0440\u0443\u0442\u0438\u0442\u044c \u0434\u043b\u044f \u0441\u0442\u0430\u0442\u0438\u043a\u0438 nginx \u0438 \u0432\u0441\u0435 \u044d\u0442\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432 Docker \u043d\u0430 Banana Pi BPI-M64. \u0417\u0430\u0442\u0435\u043c \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043a\u0440\u0443\u0442\u043e\u0439 Web-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0438 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0430 \u0441\u0432\u043e\u0435\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435. \u0422\u043e\u043b\u044c\u043a\u043e \u0432\u043e\u0442 \u0440\u0435\u043d\u0434\u0435\u0440\u043e\u043c \u043a\u0440\u0443\u0442\u043e\u0439 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c \u043c\u043e\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440, \u0430 \u043d\u0435 Banana Pi BPI-M64. \u0418 \u0432 \u044d\u0442\u043e\u043c \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0440\u0430\u0437\u043d\u0438\u0446\u0430.<\/p>\n<p>  <strong>\u041a\u0430\u043a \u043d\u0430\u0441\u0447\u0435\u0442 \u0437\u0430\u0434\u0430\u0447, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0435\u0448\u0430\u0442\u044c \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438? \u0418 \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430. \u041f\u043e\u043c\u0438\u043c\u043e \u0441\u0430\u043c\u043e\u0433\u043e \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e\u0433\u043e \u043f\u0443\u0442\u0438 \u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u043e\u0439 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432, \u0434\u043b\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c DMA. \u0412\u043e\u0442 \u0432\u0430\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u2014 PyCNC, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0435\u0437\u043e \u0432\u0441\u044f\u043a\u0438\u0445 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043c\u0438\u043a\u0440\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430\u043c\u0438 \u0448\u0430\u0433\u043e\u0432\u044b\u0445 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u0435\u0439.<\/strong> \u0412 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u0434\u0430, \u043d\u043e \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0435\u0449\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0438 \u043e \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0430\u0445 DMA \u0438 \u0437\u0430\u043e\u0434\u043d\u043e \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442. DMA (Direct Memory Access) \u2014 \u043f\u0440\u044f\u043c\u043e\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u043f\u0430\u043c\u044f\u0442\u0438 \u0432 Linux \u043f\u043e \u043f\u0443\u0442\u0438 <i>\/dev\/mem<\/i>. \u0423\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c GPIO \u043f\u0443\u0442\u0435\u043c \u043f\u0440\u044f\u043c\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u0430\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0432\u044b\u0438\u0433\u0440\u044b\u0448 \u0432 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438, \u043d\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0434\u0432\u0443\u043c \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u044b\u043c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c:<\/p>\n<ul>\n<li><strong>\u041d\u0438\u0437\u043a\u0430\u044f \u043d\u0430\u0434\u0435\u0436\u043d\u043e\u0441\u0442\u044c.<\/strong> \u041c\u0430\u043d\u0438\u043f\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441 \u044e\u0432\u0435\u043b\u0438\u0440\u043d\u043e\u0439 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c\u044e \u0438 \u0447\u0435\u0442\u043a\u043e \u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0437\u0430 \u0438\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c. \u0417\u0430\u043f\u0438\u0441\u044c \u0432 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0431\u0443\u0444\u0435\u0440\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043a\u0440\u0430\u0445\u0443 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u0410 \u0435\u0441\u043b\u0438 \u0437\u0430\u043b\u0435\u0437\u0435\u0442\u0435 \u043d\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043f\u0438\u0442\u0430\u043d\u0438\u0435\u043c, \u0442\u043e \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0437 \u0441\u0432\u043e\u0435\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0437\u0430\u043f\u0435\u043a\u0430\u043d\u043a\u0443;<\/li>\n<li><strong>\u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0442 SoC \u043d\u0430 \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u043e\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435.<\/strong> \u0410\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0447\u0438\u043f\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u044c\u043d\u043e\u0439, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u043f\u0430\u043c\u044f\u0442\u0438.<\/li>\n<\/ul>\n<p>  \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430\u043c\u0438 GPIO \u0432 \u043f\u043e\u0441\u0442\u0435 <a href=\"https:\/\/devdotnet.org\/post\/upravlyaem-gpio-iz-csharp-net-5-v-linux-na-banana-pi-m64-arm64-i-cubietruck-arm32\/\">\u0423\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430\u043c\u0438 GPIO \u0438\u0437 C#<\/a>\u00a0 \u0431\u044b\u043b\u0438 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0442\u043e\u0432\u0430\u0440\u0438\u0449\u0430 ZhangGaoxing. \u041e\u043d \u0434\u043b\u044f \u043f\u043b\u0430\u0442\u044b <a href=\"http:\/\/www.orangepi.org\/orangepizero\/\">Orange Pi Zero<\/a> \u043d\u0430\u043f\u0438\u0441\u0430\u043b <a href=\"https:\/\/github.com\/ZhangGaoxing\/sunxi-gpio-driver\">\u0434\u0440\u0430\u0439\u0432\u0435\u0440<\/a> \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432 Allwinner H2+\/H3 \u043f\u043e\u0434 .NET \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443. \u0412 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435, \u044f \u0442\u043e\u0436\u0435 \u0445\u043e\u0442\u0435\u043b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0434\u043b\u044f Allwinner A64. \u041f\u043e\u043d\u044f\u0432, \u043a\u0430\u043a\u0438\u0435 \u0435\u0441\u0442\u044c \u043d\u044e\u0430\u043d\u0441\u044b \u0441 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c\u044e, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0447\u0442\u043e \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043b\u0438\u0448\u044c \u043e\u0434\u0438\u043d Docker-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 GPIO, \u0432\u0437\u044f\u043b \u043d\u0430 \u0432\u043e\u043e\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 <a href=\"https:\/\/git.kernel.org\/pub\/scm\/libs\/libgpiod\/libgpiod.git\/\">Libgpiod<\/a>. \u0414\u0430\u043d\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442 \u043d\u0430\u0434\u0435\u0436\u043d\u043e\u0441\u0442\u044c \u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u0441 GPIO \u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f\u00a0 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u043e\u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0439. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0430 DMA \u043f\u043e\u0434\u043e\u0439\u0434\u0435\u0442 \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432.<\/p>\n<p>  <strong>\u041d\u043e \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e! \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u044d\u0442\u043e \u043d\u0435\u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u041d\u043e \u0442\u0430\u043a\u0430\u044f \u043b\u0438 \u043d\u0438\u0437\u043a\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0443 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0432\u0430\u0448\u0435\u0433\u043e \u0440\u043e\u0443\u0442\u0435\u0440\u0430? \u0423 Slack, Skype \u0438\u043b\u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 Atom? \u0422\u0440\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u2014 \u0442\u0430\u043a\u0438\u0435 \u0436\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u0431\u0430\u0437\u0435 Electron, \u0438 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u0438\u0445 \u043d\u0435 \u043d\u0430\u0437\u043e\u0432\u0435\u0448\u044c.<\/strong> \u0411\u0435\u0437 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u044d\u0442\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043d\u0430 Raspberry Pi \u0441\u043b\u043e\u0436\u043d\u043e \u0432 \u044d\u0442\u043e \u043f\u043e\u0432\u0435\u0440\u0438\u0442\u044c. \u0410 Skype \u0434\u0430\u0436\u0435 \u043d\u0430 \u043c\u043e\u0435\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435\u00a0\u0432\u0440\u0435\u043c\u0435\u043d\u0430\u043c\u0438 \u043b\u0430\u0433\u0430\u0435\u0442. \u041c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438 \u0431\u044b\u0441\u0442\u0440\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043d\u043e \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u0432\u0438\u0434\u0435\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b.<\/p>\n<p>  <strong>\u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u0432\u0430\u0448 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438, \u0435\u0441\u043b\u0438 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u0432\u044b \u0440\u0435\u0448\u0438\u0442\u0435 \u0441\u043c\u0435\u043d\u0438\u0442\u044c \u0436\u0435\u043b\u0435\u0437\u043e \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0435. \u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438 \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e.<\/strong> \u0421\u0435\u0439\u0447\u0430\u0441 \u044d\u0442\u0438\u043c \u043d\u0438\u043a\u043e\u0433\u043e \u043d\u0435 \u0443\u0434\u0438\u0432\u0438\u0448\u044c! \u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 WeatherStation.Panel.AvaloniaX11 \u043d\u0430 C# ( AvaloniaUI) \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u0441 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0435\u0439 \u0434\u043b\u044f x86 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b, \u043d\u0438\u0447\u0435\u0433\u043e \u0444\u0430\u043d\u0442\u0430\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e.<\/p>\n<p>  \u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0433\u0438\u043f\u043e\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043c\u043e\u0434\u0435\u0440\u043d\u0438\u0437\u0430\u0446\u0438\u044e \u0434\u043e Intel Core i5 \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c Docker-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 <strong>devdotnetorg\/dotnet-ws-panel\u00a0<\/strong>\u0432 Ubuntu 20.04.2.0 LTS (Focal Fossa). \u0421\u0440\u0435\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u043c\u0430\u0448\u0438\u043d\u0430 x86 \u0432 VMWare Workstation:<\/p>\n<div class=\"oembed\">\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/60fef1fcda3d598f9a4a5179\" data-style=\"\" id=\"60fef1fcda3d598f9a4a5179\" width=\"\"><\/div>\n<\/div>\n<p>  <\/p>\n<h3><strong>\u041f\u043e\u0434\u0432\u0435\u0434\u0435\u043c \u043e\u0431\u0449\u0438\u0439 \u0438\u0442\u043e\u0433<\/strong><\/h3>\n<p>  \u041a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u043e\u0441\u043e\u0431\u044b\u0445 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 HTML \u043d\u0430 \u0441\u0430\u043c\u0438\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445 \u043d\u0435 \u043f\u0440\u043e\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f. \u0421\u043e\u0433\u043b\u0430\u0441\u0435\u043d, \u0432 \u043a\u0430\u043a\u043e\u043c-\u0442\u043e \u0441\u043c\u044b\u0441\u043b\u0435 \u0443\u0434\u043e\u0431\u043d\u043e. \u041d\u043e \u043f\u043b\u0430\u0442\u0438\u0448\u044c \u0437\u0430 \u044d\u0442\u043e \u0443\u0441\u043b\u043e\u0436\u043d\u0435\u043d\u0438\u0435\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043b\u0438\u0448\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u0438 \u044d\u0442\u043e \u0431\u043e\u043b\u0435\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043a \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.<\/p>\n<p>  \u041a\u0430\u043a \u0432\u0435\u0440\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u043b <a href=\"https:\/\/habr.com\/ru\/users\/stanejkee\/\" class=\"user_link\">Stanejkee<\/a> \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445, \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0438\u0447\u0435\u043c \u0438\u043d\u044b\u043c \u043a\u0430\u043a \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u0432 \u0440\u0435\u0436\u0438\u043c <strong>Kiosk<\/strong>. \u0412\u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u0442\u043e\u0440\u0433\u043e\u0432\u044b\u0445 \u0446\u0435\u043d\u0442\u0440\u0430\u0445, \u0445\u043e\u043b\u043b\u0430\u0445 \u0433\u043e\u0441\u0442\u0438\u043d\u0438\u0446, \u0432\u044b\u0441\u0442\u0430\u0432\u043a\u0430\u0445 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u044e\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0442\u0435\u043d\u0434\u044b. \u0412\u043d\u0443\u0442\u0440\u0438 \u043d\u0438\u0445 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 x86 \u0441 \u043c\u0430\u0442\u0435\u0440\u0438\u043d\u0441\u043a\u043e\u0439 \u043f\u043b\u0430\u0442\u043e\u0439 \u0432 \u0444\u043e\u0440\u043c-\u0444\u0430\u043a\u0442\u043e\u0440\u0435 Mini-ITX \u0441\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, ASROCK J4105-ITX. \u0421 \u043b\u0438\u0446\u0435\u0432\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043c\u043e\u043d\u0438\u0442\u043e\u0440 \u0441 \u043f\u0440\u0438\u043a\u0440\u0443\u0447\u0435\u043d\u043d\u043e\u0439 touch-\u043f\u0430\u043d\u0435\u043b\u044c\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043c\u044b\u0448\u0438. \u0412\u043d\u0435\u0448\u043d\u0438\u0439 \u0432\u0438\u0434 \u0442\u0430\u043a\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043d\u0435 \u043f\u043e\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0439 \u043e\u0444\u0438\u0441\u043d\u044b\u0439 \u041f\u041a, \u043d\u043e \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435. \u0414\u043b\u044f \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0431\u0435\u0440\u0435\u0442\u0435 \u043b\u044e\u0431\u043e\u0439 \u0441\u0430\u0439\u0442 \u0438 \u0437\u0430\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0435\u0442\u0435 \u0435\u0433\u043e \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440, \u0438 \u0432\u0441\u0435 \u0433\u043e\u0442\u043e\u0432\u043e!\u00a0\u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0436\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u0441\u0430\u0439\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0432 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435, \u0442\u043e, \u0431\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u043e, \u044d\u0442\u043e\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u0435\u043d.\u00a0\u041d\u043e \u0435\u0441\u043b\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f, \u0434\u043e\u043c\u0430\u0448\u043d\u0435\u0439 \u0431\u044b\u0442\u043e\u0432\u043e\u0439 \u0442\u0435\u0445\u043d\u0438\u043a\u0438 \u0438 \u0442.\u0434., \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0434\u0440\u0443\u0433\u043e\u0439.<\/p>\n<h3>\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0442 05.08.2021<\/h3>\n<p>  <\/p>\n<h1>\u0417\u0430\u043f\u0443\u0441\u043a \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f WeatherStation.Panel.AvaloniaX11 \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f Xfce4<\/h1>\n<p>  \u0423\u0434\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0430\u043d\u0435\u043b\u044c\u044e \u043d\u0430 Xorg \u0431\u0435\u0437 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 Xfce. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u043b\u0430\u0441\u044c \u0432 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 \u043f\u0430\u043a\u0435\u0442\u0430 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430 \u0448\u0440\u0438\u0444\u0442\u043e\u0432 \u0438 \u0441\u0430\u043c\u0438\u0445 \u0448\u0440\u0438\u0444\u0442\u043e\u0432 \u043e\u0442 MS. \u041f\u043e\u0441\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432 \u0444\u0430\u0439\u043b <a href=\"https:\/\/github.com\/devdotnetorg\/dotnet-service-weather-station\/blob\/master\/Dockerfile.WS.Panel.AvaloniaX11.alpine\">Dockerfile.WS.Panel.AvaloniaX11.alpine<\/a>, \u043f\u0430\u043a\u0435\u0442\u043e\u0432 <strong>msttcorefonts-installer<\/strong> \u0438 <strong>fontconfig<\/strong>, \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0432 Avalonia Issues: <a href=\"https:\/\/github.com\/AvaloniaUI\/Avalonia\/issues\/4427\">System.InvalidOperationException: Default font family name can&#8217;t be null or empty #4427<\/a> \u0438 <a href=\"https:\/\/github.com\/AvaloniaUI\/Avalonia\/issues\/1072\">Avalonia on Raspbian.<\/a> \u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0441 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0431\u0430\u0437\u0435 Xorg \u2014 <strong>dotnet-ws-panel:avalonia-xorg<\/strong>. \u041f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435 RAM \u0441\u043d\u0438\u0437\u0438\u043b\u043e\u0441\u044c \u043d\u0430 25 \u041c\u0431, \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u043e\u0431\u0440\u0430\u0437\u043e\u043c Xfce4, \u0438 \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u043e 50 \u041c\u0431. \u041d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043d\u0430 CPU \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0430 8-12% \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 12-18%.<\/p>\n<p>  <a href=\"https:\/\/habrastorage.org\/webt\/z_\/b2\/wf\/z_b2wf6f1sx7jt2pmqxilidab-i.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/z_\/b2\/wf\/z_b2wf6f1sx7jt2pmqxilidab-i.png\" alt=\"Weather station Banana Pi BPI-M64 Linux C# Docker RabbitMQ AvaloniaUI\" data-src=\"https:\/\/habrastorage.org\/webt\/z_\/b2\/wf\/z_b2wf6f1sx7jt2pmqxilidab-i.png\"\/><\/a><br \/>  <em>\u041f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u043c devdotnetorg\/dotnet-ws-panel:avalonia-xorg (\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u2014 <a href=\"https:\/\/hub.docker.com\/r\/portainer\/portainer\">portainer\/portainer<\/a>)<\/em><\/p>\n<p>  \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043d\u0430 \u0441\u0442\u0430\u0440\u0442\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0443\u0441\u043a\u043e\u0440\u0438\u043b\u0430\u0441\u044c. \u041d\u043e \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043b \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u044d\u043a\u0440\u0430\u043d\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c, \u0438 \u043e\u043d \u0432 Xorg \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. <\/p>\n<p>  <a href=\"https:\/\/habrastorage.org\/webt\/sf\/s0\/g6\/sfs0g6nf-qjbo1elz4rczlw1zz8.jpeg\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/sf\/s0\/g6\/sfs0g6nf-qjbo1elz4rczlw1zz8.jpeg\" alt=\"Weather station Banana Pi BPI-M64 Linux C# Docker RabbitMQ AvaloniaUI\" data-src=\"https:\/\/habrastorage.org\/webt\/sf\/s0\/g6\/sfs0g6nf-qjbo1elz4rczlw1zz8.jpeg\" data-blurred=\"true\"\/><\/a><br \/>  <em>\u0413\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f Xfce4 \u043d\u0430 HDMI-\u043f\u0430\u043d\u0435\u043b\u0438 <a href=\"https:\/\/github.com\/devdotnetorg\/Banana-Pi-BPI-M64\/blob\/master\/Lcd\/7-Inch-1024x600%20Display%20Kit%20(with%20Touch%20Screen)%20SKU_Z-0017%20-%2052Pi%20Wiki.pdf\">7-Inch-1024&#215;600 Display Kit<\/a>, \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 Cubietruck (ARM32).<\/em><\/p>\n<p>  \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0431\u044b\u043b\u0430 \u0440\u0435\u0448\u0435\u043d\u044b \u043f\u0443\u0442\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0443\u0442\u0438\u043b\u0438\u0442\u044b <b>xrandr<\/b>. \u0414\u0430\u043d\u043d\u0430\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0448\u0438\u0440\u0438\u043d\u0443 \u0438 \u0432\u044b\u0441\u043e\u0442\u0443 \u044d\u043a\u0440\u0430\u043d\u0430 \u0432 \u0442\u043e\u0447\u043a\u0430\u0445, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0438\u0445 \u043e\u043a\u043d\u0443.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c, \u0432 \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e\u043b\u043d\u043e\u044d\u043a\u0440\u0430\u043d\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c.<\/p>\n<p>  <a href=\"https:\/\/habrastorage.org\/webt\/ys\/be\/w8\/ysbew8gcq-juyhwzanafhubfvq0.jpeg\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/ys\/be\/w8\/ysbew8gcq-juyhwzanafhubfvq0.jpeg\" alt=\"Weather station Banana Pi BPI-M64 Linux C# Docker RabbitMQ AvaloniaUI\" data-src=\"https:\/\/habrastorage.org\/webt\/ys\/be\/w8\/ysbew8gcq-juyhwzanafhubfvq0.jpeg\" data-blurred=\"true\"\/><\/a><br \/>  <em>\u0413\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0432 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435 Xfce4 \u043d\u0430 HDMI-\u043f\u0430\u043d\u0435\u043b\u0438 <a href=\"https:\/\/github.com\/devdotnetorg\/Banana-Pi-BPI-M64\/blob\/master\/Lcd\/7-Inch-1024x600%20Display%20Kit%20(with%20Touch%20Screen)%20SKU_Z-0017%20-%2052Pi%20Wiki.pdf\">7-Inch-1024&#215;600 Display Kit<\/a>, \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 Cubietruck (ARM32).<\/em><\/p>\n<h1>\u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0434\u043b\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b ARMv7 (ARM32)<\/h1>\n<p>  \u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a x86, ARM, RISC-V, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 <a href=\"https:\/\/github.com\/docker\/buildx\/\">Buildx<\/a>. \u041f\u0440\u0438 \u0441\u0431\u043e\u0440\u043a\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043f\u043e\u0434 ARM32, \u0448\u0430\u0433<strong> \u00abdotnet restore &#8230;\u00bb<\/strong> \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u043b\u0441\u044f \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439. \u0412 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435, \u043f\u0435\u0440\u0435\u0431\u0440\u0430\u0432 \u0432\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b, \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0441\u044f \u043d\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0441\u0431\u043e\u0440\u043a\u0438 \u043d\u0430 \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u043e\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435 Cubietruck \u0434\u043b\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b ARM32. \u041e\u0431\u0440\u0430\u0437\u044b \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0432 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0438 \u0442\u0435\u0433\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 <strong>*-armhf<\/strong>. \u0418\u0437-\u0437\u0430 \u0434\u0430\u0432\u043d\u0435\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0439 \u0441 \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u0432 Docker \u0438 Alpine, \u043e\u0431\u0440\u0430\u0437 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 Debian 10 (buster). \u0418 \u0432\u043d\u0435\u0437\u0430\u043f\u043d\u043e \u0440\u0435\u0448\u0438\u043b\u0430\u0441\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u00ab\u043a\u0443\u043b\u044c\u0442\u0443\u0440\u043e\u0439\u00bb, \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u0435\u0441\u044f\u0446 \u0438 \u0434\u0435\u043d\u044c \u043d\u0435\u0434\u0435\u043b\u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u043e\u043c \u044f\u0437\u044b\u043a\u0435, \u043a\u0430\u043a \u0438 \u0437\u0430\u0434\u0443\u043c\u044b\u0432\u0430\u043b\u043e\u0441\u044c:<\/p>\n<p>  <a href=\"https:\/\/habrastorage.org\/webt\/ns\/ev\/k_\/nsevk_flynx2yvcnmxpjwktsgvu.jpeg\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/ns\/ev\/k_\/nsevk_flynx2yvcnmxpjwktsgvu.jpeg\" alt=\"Weather station Banana Pi BPI-M64 Linux C# Docker RabbitMQ AvaloniaUI\" data-src=\"https:\/\/habrastorage.org\/webt\/ns\/ev\/k_\/nsevk_flynx2yvcnmxpjwktsgvu.jpeg\" data-blurred=\"true\"\/><\/a><br \/>  <em>\u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0441 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043e\u0431\u0440\u0430\u0437\u0430 debian:buster, \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 Cubietruck (ARM32).<\/em><\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043d\u0430 Raspberry Pi, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043a\u0440\u043e\u043c\u0435 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 Zero \u0438 Pico.<\/p>\n<p>  <a href=\"https:\/\/timeweb.com\/ru\/?utm_source=habr&amp;utm_medium=banner&amp;utm_campaign=10S&amp;utm_content=low\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/wo\/qf\/6c\/woqf6cweprtwtuq2m7jch92h5wk.png\" data-src=\"https:\/\/habrastorage.org\/webt\/wo\/qf\/6c\/woqf6cweprtwtuq2m7jch92h5wk.png\"\/><\/a><\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/569748\/\"> https:\/\/habr.com\/ru\/articles\/569748\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\"><a href=\"https:\/\/habrastorage.org\/webt\/q7\/5n\/8y\/q75n8y9l6ymnpfg7n2qn1zvk0jm.jpeg\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/q7\/5n\/8y\/q75n8y9l6ymnpfg7n2qn1zvk0jm.jpeg\" alt=\"Weather station Banana Pi BPI-M64 Linux C# Docker RabbitMQ AvaloniaUI\" data-src=\"https:\/\/habrastorage.org\/webt\/q7\/5n\/8y\/q75n8y9l6ymnpfg7n2qn1zvk0jm.jpeg\" data-blurred=\"true\"\/><\/a><\/p>\n<p>  \u0421\u0442\u0430\u0442\u0435\u0439 \u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043c\u0435\u0442\u0435\u043e\u0441\u0442\u0430\u043d\u0446\u0438\u0438 \u043d\u0430 \u0431\u0430\u0437\u0435 Arduino \u043d\u0435 \u0441\u0447\u0435\u0441\u0442\u044c. \u041c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u0440\u043e \u043c\u0435\u0442\u0435\u043e\u0441\u0442\u0430\u043d\u0446\u0438\u044e, \u0442\u043e \u044d\u0442\u043e \u043f\u0440\u043e \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b Arduino, ESP32 \u0438\u043b\u0438 STM32. \u041d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435 \u0432 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437. \u0411\u0443\u0434\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043c\u0435\u0442\u0435\u043e\u0441\u0442\u0430\u043d\u0446\u0438\u044e \u043d\u0430 Banana Pi BPI-M64 \u043f\u043e\u0434 Linux, \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f Arduino-\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u043e\u0431\u0435\u0440\u0442\u043e\u043a \u0432 \u0432\u0438\u0434\u0435 WiringPi, \u043d\u0430 C# .NET5. \u041f\u0440\u0438\u043c\u0435\u0440 \u043c\u0435\u0442\u0435\u043e\u0441\u0442\u0430\u043d\u0446\u0438\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0435\u0439 \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 GPIO, \u0434\u0430\u0442\u0447\u0438\u043a\u0430\u043c\u0438 \u0438 \u0432\u044b\u0432\u043e\u0434\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043d\u0430 LCD. \u0412 \u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f: Linux (Armbian) \u2014 \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u041e\u0421, .NET \u0438 C# \u2014 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u043e\u0433\u043e \u041f\u041e, AvaloniaUI \u2014 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0441 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u043c\u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u0430\u043c\u0438 \u0438 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0435\u0439, Docker \u2014 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f, \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, RabbitMQ \u2014 \u0431\u0440\u043e\u043a\u0435\u0440 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043c\u0435\u0436\u0434\u0443 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u043c\u0438. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u0438 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 Docker, \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 Banana Pi BPI-M64, \u043d\u043e \u0438 \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 Banana\/Orange\/Rock\/Nano Pi \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430\u0445, \u0432\u043a\u043b\u044e\u0447\u0430\u044f Raspberry Pi.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-400224","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/400224","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=400224"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/400224\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=400224"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=400224"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=400224"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}