{"id":322852,"date":"2021-05-10T15:00:55","date_gmt":"2021-05-10T15:00:55","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=322852"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=322852","title":{"rendered":"\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)"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/0n\/29\/-i\/0n29-ivfj3wztjrx6szghjireek.jpeg\" alt=\"dotnet libgpiod\"><\/p>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u0437\u0430\u0445\u043e\u0434\u0438\u0442 \u0440\u0435\u0447\u044c \u043f\u0440\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 C# .NET \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u0432, \u0442\u043e \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u044b \u043a\u0440\u0443\u0442\u044f\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0432\u043e\u043a\u0440\u0443\u0433 Raspberry Pi \u043d\u0430 Windows IoT. \u0410 \u043a\u0430\u043a \u0436\u0435 Banana\/Orange\/Rock\/Nano Pi, Odroid, Pine64 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u0435 \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0435 \u043d\u0430 Linux? \u0422\u0430\u043a \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u044d\u0442\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043c, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c .NET 5 \u043d\u0430 Banana Pi BPI-M64 (ARM64) \u0438 Cubietruck (ARM32), \u0438 \u0431\u0443\u0434\u0435\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430\u043c\u0438 GPIO \u0438\u0437 C# \u0432 Linux. \u0412 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0435\u0440\u0438\u0438 \u043f\u043e\u0441\u0442\u043e\u0432, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u0438 \u043a\u043d\u043e\u043f\u043a\u0443 \u0434\u043b\u044f \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 \u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 Libgpiod (\u0441\u043f\u043e\u0439\u043b\u0435\u0440, \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0442\u0430\u043a \u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 C++, Python) \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430\u043c GPIO.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h2>\u041f\u0440\u0435\u0434\u0438\u0441\u043b\u043e\u0432\u0438\u0435<\/h2>\n<p>  \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u043c \u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u043e\u0442 \u043a\u043d\u043e\u043f\u043a\u0438 \u0431\u0443\u0434\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 <strong>Libgpiod<\/strong>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b .NET. \u0414\u0430\u043d\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a GPIO \u0438\u0437 \u043b\u044e\u0431\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 \u043e\u0431\u0435\u0440\u0442\u043a\u0438.<\/p>\n<p>  \u0414\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0441\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043a \u043f\u043b\u0430\u0442\u0430\u043c Banana Pi BPI-M64 \u0438 <a href=\"https:\/\/devdotnet.org\/post\/otladochnaya-plata-cubietruck\/\">Cubietruck<\/a>, \u043d\u043e \u0438 \u0434\u0440\u0443\u0433\u0438\u043c, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0435 ARM \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b armv71(32-bit) \u0438 aarch64 (64-bit).\u00a0 \u041d\u0430 Banana Pi BPI-M64 (ARM64) \u0438 Cubietruck (ARM32) \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0430 \u041e\u0421 \u2014 Armbian \u0432\u0435\u0440\u0441\u0438\u0438 21.02.1, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043d\u0430 Ubuntu 18.04.5 LTS (Bionic Beaver), \u044f\u0434\u0440\u043e Linux 5.10.12. uname: Linux bananapim64 5.10.12-sunxi64 #21.02.1 SMP Wed Feb 3 20:42:58 CET 2021 aarch64 aarch64 aarch64 GNU\/Linux<\/p>\n<p>  <a href=\"https:\/\/www.armbian.com\/\">Armbian<\/a> \u2014 \u044d\u0442\u043e \u0441\u0430\u043c\u044b\u0439 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0439 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432 Linux, \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044b\u0439 \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u0432 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0445 \u043d\u0430 ARM \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0435, \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u043f\u043b\u0430\u0442 \u043e\u0433\u0440\u043e\u043c\u0435\u043d: Orange Pi, Banana Pi, Odroid, Olimex, Cubietruck, Roseapple Pi, Pine64, NanoPi \u0438 \u0434\u0440. \u0414\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432 Armbain \u043e\u0441\u043d\u043e\u0432\u0430\u043d \u043d\u0430 Debian \u0438 Ubuntu. \u0418\u0437 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0447\u043d\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043b\u0443\u0447\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u043e\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u0432\u0430\u0448\u0435\u0433\u043e IoT \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u043e\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u044d\u043d\u0435\u0440\u0433\u043e\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0434\u043e \u0432\u044b\u0441\u043e\u043a\u043e\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u043b\u0430\u0442 \u0441 NPU. \u0418 \u043d\u0430 \u0431\u0430\u0437\u0435 \u0432\u0441\u0435\u0445 \u044d\u0442\u0438\u0445 \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u0432, \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043d\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435 .NET \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0439\u043d\u044b\u043c\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438 \u0438\u0437 \u043a\u043e\u0434\u0430 \u043d\u0430 C#.<\/p>\n<h2>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 GPIO<\/h2>\n<p>  <a href=\"https:\/\/ru.wikipedia.org\/wiki\/GPIO\" rel=\"nofollow\"><strong>GPIO<\/strong>\u00a0(general-purpose input\/output)<\/a> \u2014 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0432\u0432\u043e\u0434\u0430\/\u0432\u044b\u0432\u043e\u0434\u0430 \u043e\u0431\u0449\u0435\u0433\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. <strong>GPIO<\/strong>\u00a0\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043a \u00ab\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0443\u00bb\u00a0<strong>SoC (System-on-a-Chip \u2014 \u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u043d\u0430 \u043a\u0440\u0438\u0441\u0442\u0430\u043b\u043b\u0435)<\/strong>, \u0438 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0435\u0433\u043e \u0438\u0437 \u0441\u0442\u0440\u043e\u044f. \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u0432, \u043a\u0440\u043e\u043c\u0435 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0434\u0432\u0443\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 Input\/Output \u043f\u043e\u0440\u0442\u043e\u0432, \u0438\u043c\u0435\u044e\u0442 \u043e\u0434\u0438\u043d \u0438\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432: UART,\u00a0SPI,\u00a0I\u00b2C\/TWI,\u00a0PWM (\u0428\u0418\u041c), \u043d\u043e \u043d\u0435 \u0438\u043c\u0435\u044e\u0442\u00a0ADC (\u0410\u0426\u041f). <strong>GPIO<\/strong>\u00a0&#8212; \u043f\u043e\u0440\u0442\u044b \u043e\u0431\u044b\u0447\u043d\u043e \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b \u043d\u0430 \u0432\u0432\u043e\u0434 \u0438\u043b\u0438 \u0432\u044b\u0432\u043e\u0434 (<strong>Input\/Output<\/strong>), \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043e\u0431\u044b\u0447\u043d\u043e\u00a0<strong>INPUT<\/strong>.<\/p>\n<p>  \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u00abGPIO\u00bb-\u043f\u043e\u0440\u0442\u044b \u2014 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0438\u0442\u0430\u044e\u0449\u0438\u043c\u0438 \u043f\u043e\u0440\u0442\u0430\u043c\u0438 3.3V, 5V \u0438 GND, \u043e\u043d\u0438 \u043d\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u044b \u0441\u00a0<strong>SoC<\/strong>\u00a0\u0438 \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u043b\u0438\u0431\u043e \u0435\u0449\u0435.<\/p>\n<p>  \u041f\u043e\u0440\u0442\u044b \u0441\u00a0<strong>\u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439<\/strong>\u00a0&#8212; \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b \u0441 \u043e\u0434\u043d\u0438\u043c \u0438\u0437\u00a0<em>\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0435\u043c\u0443<\/em>\u00a0\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432.<\/p>\n<p>  \u041f\u043e\u0440\u0442\u044b \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 <strong>INPUT<\/strong>\u00a0\u043c\u043e\u0433\u0443\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u00a0<strong>\u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f<\/strong> \u2014 \u043f\u043e \u0441\u043f\u0430\u0434\u0443, \u043f\u043e \u0444\u0440\u043e\u043d\u0442\u0443, \u043f\u043e \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u043c\u0443 \u0443\u0440\u043e\u0432\u043d\u044e, \u043f\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0438 \u0432 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u043f\u043e \u0444\u0440\u043e\u043d\u0442\u0443 \u0438 \u0441\u043f\u0430\u0434\u0443. \u041f\u043e\u0440\u0442\u044b \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 <strong>INPUT<\/strong>\u00a0\u0438\u043c\u0435\u044e\u0442 \u0432\u0445\u043e\u0434\u043d\u0443\u044e \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044e \u043d\u0430 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0435\u00a0<strong>\u0428\u043c\u0438\u0442\u0442\u0430<\/strong>\u00a0(\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u044e\u0442 \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u0432 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u0441 \u0440\u0435\u0437\u043a\u0438\u043c\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430\u043c\u0438 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f\u043c\u0438).<\/p>\n<p>  \u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430\u043c\u0438 <strong>GPIO\u00a0<\/strong>\u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \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 <strong>sysfs<\/strong>. \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430\u043c\u0438 sysfs \u0432\u043f\u0435\u0440\u0432\u044b\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u0441 \u0432\u0435\u0440\u0441\u0438\u0438 \u044f\u0434\u0440\u0430 2.6.26, \u0432 Linux. \u0420\u0430\u0431\u043e\u0442\u0430 \u0441 GPIO \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 <i>\/sys\/class\/gpio<\/i> \u043f\u0443\u0442\u0451\u043c \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u0444\u0430\u0439\u043b\u0430\u043c-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c.<\/p>\n<p>  \u041a \u043f\u043e\u0440\u0442\u0430\u043c GPIO \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f:<\/p>\n<ul>\n<li>\u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u044b;<\/li>\n<li>\u043a\u043d\u043e\u043f\u043a\u0438;<\/li>\n<li>\u0440\u0435\u043b\u0435;<\/li>\n<li>\u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0435 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0434\u0430\u0442\u0447\u0438\u043a\u0438;<\/li>\n<li>\u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0439\u043d\u044b\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.<\/li>\n<\/ul>\n<p>  \u0414\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f <strong>GPIO<\/strong> \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f:<\/p>\n<ul>\n<li>\u041f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u0444\u0430\u0439\u043b-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 <strong>GPIO<\/strong>;<\/li>\n<li>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u044f\u0437\u044b\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f:<br \/> \n<ul>\n<li>\u0427\u0435\u0440\u0435\u0437 \u043f\u0440\u044f\u043c\u043e\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c \u0447\u0438\u043f\u0430;<\/li>\n<li>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0443\u0436\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 (libgpiod).<\/li>\n<\/ul>\n<p>  <\/li>\n<\/ul>\n<p>  <\/p>\n<h2>\u041e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 Banana Pi BPI-M64<\/h2>\n<p>  <a href=\"https:\/\/devdotnet.org\/post\/otladochnaya-plata-banana-pi-bpi-m64\/\">Banana Pi BPI-M64<\/a> \u2014 \u044d\u0442\u043e 64-\u0431\u0438\u0442\u043d\u044b\u0439 \u0447\u0435\u0442\u044b\u0440\u0435\u0445\u044a\u044f\u0434\u0435\u0440\u043d\u044b\u0439 \u043c\u0438\u043d\u0438-\u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440, \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0439 \u043a\u0430\u043a \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u043e\u043c. \u042f\u0434\u0440\u043e\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 Allwinner A64 \u0441 4-\u043c\u044f \u044f\u0434\u0440\u0430\u043c\u0438 Cortex-A53 \u0441 \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439 1.2 \u0413\u0413\u0446. \u041d\u0430 \u043f\u043b\u0430\u0442\u0435 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u043e 2 \u0413\u0411 DDR3 SDRAM 733\u041c\u0413\u0446 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 8 \u0413\u0411 eMMC.<\/p>\n<p>  \u041d\u0430 \u043f\u043b\u0430\u0442\u0435 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d 40-\u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043d\u044b\u0439 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0439 \u0441 Raspberry Pi \u0440\u0430\u0437\u044a\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442: GPIO (x28), Power (+5V, +3.3V and GND), UART, I2C, SPI. \u0418 40-\u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 MIPI DSI.<\/p>\n<p>  <a href=\"https:\/\/habrastorage.org\/webt\/z-\/t-\/ae\/z-t-aex3tqmovdx4mgs0jgkhd_u.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/z-\/t-\/ae\/z-t-aex3tqmovdx4mgs0jgkhd_u.png\" alt=\"dotnet libgpiod\"><\/a><br \/>  <i>Banana Pi BPI-M64 \u0438 40-\u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043d\u044b\u0439 \u0440\u0430\u0437\u044a\u0435\u043c \u0442\u0438\u043f\u0430 Raspberry Pi 3<\/i><\/p>\n<p>  \u041d\u0430\u043b\u0438\u0447\u0438\u0435 40-\u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u044a\u0435\u043c\u0430 \u0442\u0438\u043f\u0430 Raspberry Pi 3 GPIO, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043e\u0431\u043b\u0435\u0433\u0447\u0430\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432 \u0438\u0437-\u0437\u0430 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432 \u0441\u00a0 Raspberry Pi 3. \u041d\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0433\u0430\u0434\u0430\u0442\u044c \u043a \u043a\u0430\u043a\u043e\u043c\u0443 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0443 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0442\u043e\u0442 \u0438\u043b\u0438 \u0438\u043d\u043e\u0439 \u0434\u0430\u0442\u0447\u0438\u043a. \u0423\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u0432 \u043f\u043e\u0441\u0442\u0435 \u0434\u0430\u0442\u0447\u0438\u043a\u0438 (\u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u0438 \u043a\u043d\u043e\u043f\u043a\u0430) \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0435 \u043a Banana Pi BPI-M64, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043d\u0430 \u0442\u0435 \u0436\u0435 \u0441\u0430\u043c\u044b\u0435 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u044b \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0442\u043e\u0436\u0435 \u0435\u0441\u0442\u044c 40-\u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043d\u044b\u0439 \u0440\u0430\u0437\u044a\u0435\u043c, \u0442\u0438\u043f\u0430 Raspberry Pi 3 (\u0438\u043b\u0438 \u043a \u0441\u0430\u043c\u043e\u0439 Raspberry Pi 3, \u0440\u0430\u0437\u043d\u0438\u0446\u044b \u043d\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u043e\u0439). \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u043e\u043c\u0435\u0440\u0430 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432 (\u043b\u0438\u043d\u0438\u0439, \u043d\u043e\u0436\u043a\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430) \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u043c \u043a\u043e\u0434\u0435, \u0442.\u043a. \u043e\u043d\u0438 \u0437\u0430\u0432\u0438\u0441\u044f\u0442 \u043e\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430. \u041d\u043e \u043b\u0435\u0433\u043a\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044e \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430. \u041f\u043b\u0430\u0442\u0430 Cubietruck (ARM32) \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438 \u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u043e\u0434\u0430 \u043d\u0430 32-\u0440\u0430\u0437\u0440\u044f\u0434\u043d\u044b\u0445 ARM \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430\u0445.<\/p>\n<p>  <a href=\"https:\/\/habrastorage.org\/webt\/cf\/zj\/e_\/cfzje_j0zh0oruz3ea8uw77lpyi.jpeg\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/cf\/zj\/e_\/cfzje_j0zh0oruz3ea8uw77lpyi.jpeg\" alt=\"Banana Pi BPI-M64 GPIO Header Position\"><\/a><br \/>  <i>\u041f\u043e\u0437\u0438\u0446\u0438\u044f <strong>[1] 3V3 power<\/strong> \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043d\u0430 \u043f\u043b\u0430\u0442\u0435 \u0441\u043e \u0441\u0442\u0440\u0435\u043b\u043e\u0447\u043a\u043e\u0439<\/i><\/p>\n<p>  <strong>\u0424\u043e\u0440\u043c\u0443\u043b\u0430 \u0434\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u043c\u0435\u0440\u0430 GPIOXX<\/strong><br \/>  \u0414\u043b\u044f \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430\u043c \u0438\u0437 C# \u043a\u043e\u0434\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u043d\u0430\u0442\u044c \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 (\u043b\u0438\u043d\u0438\u044f, \u043f\u043e\u0440\u0442) \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043d\u043e\u0436\u043a\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 SoC(\u0434\u043b\u044f Allwinner). \u042d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f\u0445 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e, \u0442.\u043a. \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u0443\u0442\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0440\u0430\u0441\u0447\u0435\u0442\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u0437 \u0441\u0445\u0435\u043c\u044b \u0432\u043e\u0437\u044c\u043c\u0435\u043c 32-\u043a\u043e\u043d\u0442\u0430\u043a\u0442 \u043d\u0430\u00a0 \u0440\u0430\u0437\u044a\u0435\u043c\u0435 \u0442\u0438\u043f\u0430 Raspberry Pi. \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430 <strong>PB7<\/strong>, \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043d\u043e\u043c\u0435\u0440\u0430 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430 \u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043c \u0440\u0430\u0441\u0447\u0435\u0442 \u043f\u043e \u0444\u043e\u0440\u043c\u0443\u043b\u0435:<br \/>  <strong>(\u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0431\u0443\u043a\u0432\u044b \u0432 \u0430\u043b\u0444\u0430\u0432\u0438\u0442\u0435 \u2014 1) * 32 + \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0432\u044b\u0432\u043e\u0434\u0430.\u00a0<\/strong>\u041f\u0435\u0440\u0432\u0430\u044f \u0431\u0443\u043a\u0432\u0430 \u043d\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0442.\u043a. P \u2014 PORT, \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0431\u0443\u043a\u0432\u044b B \u0432 \u0430\u043b\u0444\u0430\u0432\u0438\u0442\u0435 = 2, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c <strong>(2-1) * 32 + 7 = 39<\/strong>. \u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043d\u043e\u043c\u0435\u0440 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430 <strong>PB7\u00a0<\/strong>\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u043e\u043c\u0435\u0440 <strong>39<\/strong>. <strong>\u0423 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 SoC \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u0432\u043e\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u043d\u043e\u043c\u0435\u0440\u0430 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432, \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u043d \u0432 Datasheet \u043a \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0443.<\/strong><\/p>\n<p>  <a href=\"https:\/\/habrastorage.org\/webt\/_w\/hq\/uy\/_whquylhkypzr_euvccjcczuyza.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/_w\/hq\/uy\/_whquylhkypzr_euvccjcczuyza.png\" alt=\"Banana Pi BPI-M64 GPIOXX\"><\/a><br \/>  <i>\u041a\u043e\u043d\u0442\u0430\u043a\u0442 \u00abPB7\u00bb \u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0435 Allwiner A64, \u043d\u043e\u043c\u0435\u0440 \u043d\u043e\u0436\u043a\u0438 \u2014 39<\/i><\/p>\n<h2>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 .NET IoT<\/h2>\n<p>  \u0414\u043e \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043f\u0435\u0440\u0432\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043d\u0430 C# \u043f\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f GPIO, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0438\u043c\u0435\u043d \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0432 <a href=\"https:\/\/github.com\/dotnet\/iot\">dotnet\/iot<\/a>. \u0412\u0441\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 Nuget \u043f\u0430\u043a\u0435\u0442\u044b. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\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. \u041a\u043e\u0434 \u043d\u0430 C# \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0441 GPIO \u0447\u0435\u0440\u0435\u0437 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0434\u0440\u0430\u0439\u0432\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0435\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a GPIO \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043e\u0442 \u043e\u0434\u043d\u043e\u0433\u043e \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 \u043a \u0434\u0440\u0443\u0433\u043e\u043c\u0443, \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439.<\/p>\n<p>  \u041f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0438\u043c\u0435\u043d .NET IoT:<\/p>\n<ul>\n<li><strong>System.Device.Gpio.<\/strong> \u041f\u0430\u043a\u0435\u0442 System.Device.Gpio \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u0432 \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u043c\u0438 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u043c\u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430\u043c\u0438:<br \/> \n<ul>\n<li>General-purpose I\/O (GPIO);<\/li>\n<li>Inter-Integrated Circuit (I2C);<\/li>\n<li>Serial Peripheral Interface (SPI);<\/li>\n<li>Pulse Width Modulation (PWM);<\/li>\n<li>Serial port.<\/li>\n<\/ul>\n<p>  <\/li>\n<\/ul>\n<p>  <\/p>\n<ul>\n<li><strong>Iot.Device.Bindings. <\/strong>\u041f\u0430\u043a\u0435\u0442 Iot.Device.Bindings \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442:<br \/> \n<ul>\n<li>\u0414\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u0438 \u043e\u0431\u0435\u0440\u0442\u043a\u0438 \u043d\u0430\u0434 System.Device.Gpio \u0434\u043b\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u043f\u0440\u043e\u0449\u0430\u044e\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439;<\/li>\n<li>\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e\u043c (community-supported).<\/li>\n<\/ul>\n<p>  <\/li>\n<\/ul>\n<p>  <a href=\"https:\/\/habrastorage.org\/webt\/p5\/fr\/xl\/p5frxl6dypn7xtsppa4ozfopt6y.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/p5\/fr\/xl\/p5frxl6dypn7xtsppa4ozfopt6y.png\" alt=\"dotnet IoT Library\"><\/a><br \/>  <i>\u0421\u0442\u0435\u043a \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a .NET IoT<\/i><\/p>\n<p>  \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0435\u0440\u0432\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0442\u0438\u043f\u0430 Hello World, \u043c\u0438\u0433\u0430\u043d\u0438\u0435 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430 (<a href=\"https:\/\/docs.microsoft.com\/ru-ru\/dotnet\/iot\/tutorials\/blink-led\">Blink an LED<\/a>):<\/p>\n<pre><code class=\"cs\">using System; using System.Device.Gpio; using System.Threading;  Console.WriteLine(&quot;Blinking LED. Press Ctrl+C to end.&quot;); int pin = 18; using var controller = new GpioController(); controller.OpenPin(pin, PinMode.Output); bool ledOn = true; while (true) {     controller.Write(pin, ((ledOn) ? PinValue.High : PinValue.Low));     Thread.Sleep(1000);     ledOn = !ledOn; } <\/code><\/pre>\n<p>  <strong>\u0420\u0430\u0437\u0431\u043e\u0440 \u043a\u043e\u0434\u0430:<\/strong><\/p>\n<ul>\n<li><strong>using System.Device.Gpio<\/strong> \u2014 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0438\u043c\u0435\u043d \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 <strong>GpioController<\/strong> \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c;<\/li>\n<li><strong>using var controller = new GpioController()<\/strong> \u2014 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430\u043c\u0438 GPIO;<\/li>\n<li><strong>controller.OpenPin(pin, PinMode.Output)<\/strong> \u2014 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043a\u043e\u043d\u0442\u0430\u043a\u0442 pin = 18 \u043d\u0430 \u0432\u044b\u0432\u043e\u0434, \u043a 18 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0443 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434;<\/li>\n<li><strong>controller.Write(pin, ((ledOn)? PinValue.High: PinValue.Low))<\/strong> \u2014 \u0435\u0441\u043b\u0438 <strong>ledOn<\/strong> \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <strong>True<\/strong>, \u0442\u043e <strong>PinValue.High<\/strong> \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442 \u0432\u044b\u0441\u043e\u043a\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 18 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0443 \u0438 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u0437\u0430\u0433\u043e\u0440\u0430\u0435\u0442\u0441\u044f. \u041d\u0430 18 \u043a\u043e\u043d\u0442\u0430\u043a\u0442 \u043f\u043e\u0434\u0430\u0435\u0442\u0441\u044f\u00a0 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u0432 3.3V. \u0415\u0441\u043b\u0438 <strong>ledOn<\/strong> \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <strong>False<\/strong>, \u0442\u043e <strong>PinValue.Low<\/strong> \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442 \u043d\u0438\u0437\u043a\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0443 18 \u0438 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u0433\u0430\u0441\u043d\u0435\u0442. \u041d\u0430 18 \u043a\u043e\u043d\u0442\u0430\u043a\u0442 \u043f\u043e\u0434\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u0432 0V (\u0438\u043b\u0438 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u043e\u0440\u043e\u0433\u043e\u0432\u043e\u0435 \u0434\u043b\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u00ab0\u00bb, \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u044b\u0448\u0435 0V).<\/li>\n<\/ul>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u043f\u043e\u0434 ARM \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443: <i>dotnet publish -r linux-arm<\/i> \u0438\u043b\u0438 <i>dotnet publish -r linux-arm64<\/i>. \u041d\u043e \u0442\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f Raspberry Pi. \u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430\u0445 \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0445 \u043e\u0442 Raspberry Pi \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 <strong>GpioController<\/strong> \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a GPIO.<\/p>\n<h3>\u0414\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a GPIO \u0438\u0437 .NET<\/h3>\n<p>  \u041a\u043b\u0430\u0441\u0441\u044b \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a GPIO \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u0438\u043c\u0435\u043d <a href=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/api\/system.device.gpio.drivers?view=iot-dotnet-1.3\"><strong>System.Device.Gpio.Drivers<\/strong><\/a>. \u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u00a0 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430-\u043a\u043b\u0430\u0441\u0441\u044b:<\/p>\n<ul>\n<li><strong>HummingBoardDriver<\/strong> \u2014 GPIO \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0434\u043b\u044f \u043f\u043b\u0430\u0442\u044b <a href=\"https:\/\/developer.solid-run.com\/knowledge-base\/hummingboard-base-pro-getting-started\/\">HummingBoard<\/a> \u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0435 NXP i.MX 6 Arm Cortex A9;<\/li>\n<li><strong>LibGpiodDriver<\/strong> \u2014 \u044d\u0442\u043e\u0442 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 <strong>Libgpiod<\/strong> \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 <strong>SysFsDriver<\/strong>. \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 Libgpiod \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0430 \u043d\u0430 Linux \u0438 Armbian, \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 \u0434\u043b\u044f \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 ARM32 \u0438 ARM64;<\/li>\n<li><strong>RaspberryPi3Driver<\/strong> \u2014 GPIO \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u0432 Raspberry Pi 3 \u0438\u043b\u0438 4;<\/li>\n<li><strong>SysFsDriver<\/strong> \u2014 GPIO \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u043f\u043e\u0432\u0435\u0440\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 <strong>SysFs<\/strong> \u0434\u043b\u044f Linux \u0438 Unux \u0441\u0438\u0441\u0442\u0435\u043c, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043c\u0435\u043d\u044c\u0448\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439, \u0447\u0435\u043c \u0434\u0440\u0430\u0439\u0432\u0435\u0440 <strong>LibGpiodDriver<\/strong>, \u043d\u043e \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 Libgpiod. \u0422\u043e\u0442 \u0441\u043b\u0443\u0447\u0430\u0439, \u043a\u043e\u0433\u0434\u0430 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043c\u0438\u0433\u0430\u0442\u044c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u043c \u0438\u0437 C# \u0431\u0435\u0437 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439;<\/li>\n<li><strong>UnixDriver<\/strong> \u2014 \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a GPIO \u0434\u043b\u044f Unix \u0441\u0438\u0441\u0442\u0435\u043c;<\/li>\n<li><strong>Windows10Driver<\/strong> \u2014 GPIO \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0434\u043b\u044f \u041e\u0421 Windows 10 IoT. \u0418\u0437 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u043f\u043b\u0430\u0442 \u0442\u043e\u043b\u044c\u043a\u043e Raspberry Pi, \u0432\u0435\u0441\u044c\u043c\u0430 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435.<\/li>\n<\/ul>\n<p>  \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043e\u0441\u0442\u0443\u043f \u043a GPIO \u0447\u0435\u0440\u0435\u0437 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 <strong><a href=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/api\/system.device.gpio.drivers.libgpioddriver?view=iot-dotnet-1.3\">LibGpiodDriver<\/a><\/strong>. \u0414\u0440\u0430\u0439\u0432\u0435\u0440 <strong>SysFsDriver<\/strong> \u0431\u0430\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0435\u043c \u043c\u0435\u0442\u043e\u0434\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 GPIO \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. \u0414\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u0439 IoT, SysFs \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u043f\u043e \u0442\u0440\u0435\u043c \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u044b\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c:<\/p>\n<ul>\n<li>\u041d\u0438\u0437\u043a\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b I\/O;<\/li>\n<li>\u0415\u0441\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u043e\u0439 \u0441 GPIO \u043f\u0440\u0438 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0435;<\/li>\n<li>\u041f\u0440\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 C# \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u043f\u0443\u0442\u0435\u0439 \u0438\u0437 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b Linux, \u0447\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438. \u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 Libgpiod \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f.<\/li>\n<\/ul>\n<p>  \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 <strong>Libgpiod<\/strong> \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 GPIO \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437 .NET \u043a\u043e\u0434\u0430, \u043d\u043e \u0438 \u0438\u0437 Python, C++, \u0438 \u0442.\u0434. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0438\u0436\u0435 \u0438\u0437\u043b\u043e\u0436\u0435\u043d\u043d\u0430\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u043f\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <strong>Libgpiod<\/strong> \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c \u043d\u0430 Python \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u043e\u0431\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u043a\u0430\u043a \u0438 \u043d\u0430 C#. \u0412 \u0441\u043e\u0441\u0442\u0430\u0432 \u043f\u0430\u043a\u0435\u0442\u0430 <strong>Libgpiod<\/strong> \u0432\u0445\u043e\u0434\u044f\u0442 \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 GPIO. \u0414\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0430 C#, \u043f\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441 \u0434\u0430\u0442\u0447\u0438\u043a\u0430\u043c\u0438 \u0447\u0435\u0440\u0435\u0437 \u044d\u0442\u0438 \u0443\u0442\u0438\u043b\u0438\u0442\u044b.<\/p>\n<h2>\u0421\u0445\u0435\u043c\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430 (LED) \u0438 \u043a\u043d\u043e\u043f\u043a\u0438<\/h2>\n<p>  \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u0438 \u043a\u043d\u043e\u043f\u043a\u0443 \u0431\u0443\u0434\u0435\u043c \u043d\u0430 40-\u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043d\u044b\u0439 \u0440\u0430\u0437\u044a\u0435\u043c \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0439 \u0441 Raspberry Pi 3. <strong>\u0421\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434<\/strong> \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d \u043d\u0430 \u211633 \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 \u00abPB4\u00bb, \u043d\u043e\u043c\u0435\u0440 \u043b\u0438\u043d\u0438\u0438 \u2014 <strong>36<\/strong>. <strong>\u041a\u043d\u043e\u043f\u043a\u0430<\/strong> \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d \u043d\u0430 \u211635 \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 \u00abPB6\u00bb, \u043d\u043e\u043c\u0435\u0440 \u043b\u0438\u043d\u0438\u0438 \u2014 <strong>38<\/strong>. \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0435 \u00abPB6\u00bb \u0434\u043b\u044f \u043a\u043d\u043e\u043f\u043a\u0438. \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0434\u043b\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0433\u043e \u043e\u043f\u0440\u043e\u0441\u0430 \u043b\u0438\u043d\u0438\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e CPU. \u041d\u0430 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0435 \u00abPB6\u00bb \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u00abPB_EINT6\u00bb, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u043d\u043e\u043f\u043a\u0443 \u043a \u044d\u0442\u043e\u043c\u0443 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0443 \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0439 \u043a\u043e\u043d\u0442\u0430\u043a\u0442 \u00abPL12\u00bb \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043a\u043d\u043e\u043f\u043a\u0443 \u043a \u043d\u0435\u043c\u0443 \u043a\u043d\u043e\u043f\u043a\u0443 \u043d\u0435 \u0431\u0443\u0434\u0435\u043c. \u0415\u0441\u043b\u0438 \u0432\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0435 \u043a\u043d\u043e\u043f\u043a\u0443 \u0438 \u0440\u0435\u0437\u0438\u0441\u0442\u043e\u0440 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e, \u0442\u043e \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0439\u0442\u0435 \u0432 \u0446\u0435\u043f\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0440\u0435\u0437\u0438\u0441\u0442\u043e\u0440 \u0434\u043b\u044f \u0441\u043e\u043f\u0440\u043e\u0442\u0438\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0438\u0437\u0431\u0435\u0436\u0430\u043d\u0438\u044f \u0432\u044b\u0433\u043e\u0440\u0430\u043d\u0438\u044f \u043f\u043e\u0440\u0442\u0430!<\/p>\n<p>  <a href=\"https:\/\/habrastorage.org\/webt\/f7\/lb\/nl\/f7lbnldx01ny5xyfhpuae18mymi.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/f7\/lb\/nl\/f7lbnldx01ny5xyfhpuae18mymi.png\" alt=\"libgpiod Armbian\"><\/a><br \/>  <i>\u0421\u0445\u0435\u043c\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430 (LED) \u0438 \u043a\u043d\u043e\u043f\u043a\u0438 \u043a 40-\u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043d\u043e\u043c\u0443 \u0440\u0430\u0437\u044a\u0435\u043c\u0443 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0439 \u0441 Raspberry Pi 3 <\/i><\/p>\n<p>  <a href=\"https:\/\/habrastorage.org\/webt\/ta\/fx\/_s\/tafx_s9mf32wjac194wcdvtslmi.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ta\/fx\/_s\/tafx_s9mf32wjac194wcdvtslmi.png\" alt=\"libgpiod Armbian\"><\/a><br \/>  <i>\u0421\u0445\u0435\u043c\u0430 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432 \u043a \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 (LED) \u0438 \u043a\u043d\u043e\u043f\u043a\u0430<\/i><\/p>\n<h2>\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 GPIO \u044f\u0434\u0440\u0430 Linux<\/h2>\n<p>  <strong>GPIO (General-Purpose Input\/Output)<\/strong> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0439\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u0432\u043e \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 (embedded system) Linux.<\/p>\n<p>  \u0412\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 \u044f\u0434\u0440\u043e Linux \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a GPIO \u0447\u0435\u0440\u0435\u0437 \u043c\u043e\u0434\u0435\u043b\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\/\u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044c. \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442<a href=\"https:\/\/www.kernel.org\/doc\/html\/latest\/driver-api\/gpio\/driver.html\"> \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043b\u0438\u043d\u0438\u044f\u043c GPIO<\/a> (\u0434\u0440\u0430\u0439\u0432\u0435\u0440\u044b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 GPIO) \u0438 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 <a href=\"https:\/\/www.kernel.org\/doc\/html\/latest\/driver-api\/gpio\/consumer.html\">\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043b\u0438\u043d\u0438\u0438 GPIO<\/a> (\u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0430, \u0441\u0435\u043d\u0441\u043e\u0440\u043d\u044b\u0439 \u044d\u043a\u0440\u0430\u043d, \u0434\u0430\u0442\u0447\u0438\u043a\u0438 \u0438 \u0442. \u0434.).<\/p>\n<p>  \u0412 \u044f\u0434\u0440\u0435 Linux \u0441\u0438\u0441\u0442\u0435\u043c\u0430 <strong>gpiolib<\/strong> \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0435\u0439 \u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c GPIO. \u042d\u0442\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0447\u0435\u0440\u0435\u0437 API \u043a\u0430\u043a \u0434\u043b\u044f \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u0432 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0445 \u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u044f\u0434\u0440\u0430 (kernel space), \u0442\u0430\u043a \u0438 \u0434\u043b\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 (user space).<\/p>\n<p>  <a href=\"https:\/\/habrastorage.org\/webt\/f6\/tf\/_h\/f6tf_h7gvlt1r99yvko8pl5jut0.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/f6\/tf\/_h\/f6tf_h7gvlt1r99yvko8pl5jut0.png\" alt=\"libgpiod Armbian\"><\/a><br \/>  <i>\u0421\u0445\u0435\u043c\u0430 \u0440\u0430\u0431\u043e\u0442\u044b gpiolib<\/i><\/p>\n<h2>\u0421\u0442\u0430\u0440\u044b\u0439 \u043f\u0443\u0442\u044c: \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b sysfs \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a GPIO<\/h2>\n<p>  \u0414\u043e \u0432\u0435\u0440\u0441\u0438\u0438 \u044f\u0434\u0440\u0430 Linux 4.7 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f GPIO \u0432 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f <a href=\"https:\/\/www.kernel.org\/doc\/html\/latest\/driver-api\/gpio\/legacy.html#paths-in-sysfs\">\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 sysfs<\/a>. \u041b\u0438\u043d\u0438\u0438 GPIO \u0431\u044b\u043b\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u043f\u0440\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435 \u043f\u043e \u043f\u0443\u0442\u0438 <i>\/sys\/class\/gpio<\/i>. \u0422\u0430\u043a, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f \u043f\u043e\u0434\u0430\u0447\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u00ab0\u00bb \u0438\u043b\u0438 \u00ab1\u00bb \u043d\u0430 \u043b\u0438\u043d\u0438\u044e GPIO, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e:<\/p>\n<ol>\n<li>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u043e\u043c\u0435\u0440 \u043b\u0438\u043d\u0438\u0438 (\u0438\u043b\u0438 \u043d\u043e\u043c\u0435\u0440 \u043d\u043e\u0436\u043a\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430) GPIO;<\/li>\n<li>\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u043e\u043c\u0435\u0440 GPIO, \u0437\u0430\u043f\u0438\u0441\u0430\u0432 \u0435\u0433\u043e \u043d\u043e\u043c\u0435\u0440 \u0432 <i>\/sys\/class\/gpio\/export<\/i>;<\/li>\n<li>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043b\u0438\u043d\u0438\u044e GPIO \u043a\u0430\u043a \u0432\u044b\u0432\u043e\u0434, \u0443\u043a\u0430\u0437\u0430\u0432 \u044d\u0442\u043e \u0432 <i>\/sys\/class\/gpio\/gpioX\/direction<\/i>;<\/li>\n<li>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u00ab1\u00bb \u0438\u043b\u0438 \u00ab0\u00bb \u0434\u043b\u044f \u043b\u0438\u043d\u0438\u0438 GPIO <i>\/sys\/class\/gpio\/gpioX\/value<\/i>;<\/li>\n<\/ol>\n<p>  \u0414\u043b\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u0434\u043b\u044f \u043b\u0438\u043d\u0438\u0438 GPIO 36 (\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434) \u0438\u0437 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u00ab1\u00bb. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \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\"># echo 36 &gt; \/sys\/class\/gpio\/export # echo out &gt; \/sys\/class\/gpio\/gpio36\/direction # echo 1 &gt; \/sys\/class\/gpio\/gpio36\/value <\/code><\/pre>\n<p>  \u042d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043a\u0430\u043a \u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 sysfs, \u043e\u043d \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043d\u043e \u0438\u043c\u0435\u0435\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438:<\/p>\n<ol>\n<li>\u042d\u043a\u0441\u043f\u043e\u0440\u0442 \u043b\u0438\u043d\u0438\u0438 GPIO \u043d\u0435 \u0441\u0432\u044f\u0437\u0430\u043d \u0441 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0439 \u043b\u0438\u043d\u0438\u044e GPIO \u0430\u0432\u0430\u0440\u0438\u0439\u043d\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442 \u0441\u0432\u043e\u044e \u0440\u0430\u0431\u043e\u0442\u0443, \u0442\u043e \u044d\u0442\u0430 \u043b\u0438\u043d\u0438\u044f GPIO \u0442\u0430\u043a \u0438 \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f\u00a0 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439;<\/li>\n<li>\u0423\u0447\u0438\u0442\u044b\u0432\u0430\u044e \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u0443\u043d\u043a\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043e\u0434\u043d\u043e\u0439 \u0438 \u0442\u043e\u0439 \u0436\u0435 \u043b\u0438\u043d\u0438\u0438 GPIO, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u043a \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430. \u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u00ab\u0443\u0437\u043d\u0430\u0442\u044c\u00bb \u0443 \u041e\u0421 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043b\u0438 \u0442\u0430 \u0438\u043b\u0438 \u0438\u043d\u0430\u044f \u043b\u0438\u043d\u0438\u044f GPIO \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442;<\/li>\n<li>\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043b\u0438\u043d\u0438\u0438 GPIO \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 open()\/read()\/write()\/close(), \u0430 \u0442\u0430\u043a \u0436\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b (export, direction, value, \u0438 \u0442.\u0434.) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043c\u0435\u0442\u043e\u0434\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0444\u0430\u0439\u043b\u0430\u043c\u0438. \u042d\u0442\u043e \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0435\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0439 \u043a\u043e\u0434;<\/li>\n<li>\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c\/\u0432\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043b\u0438\u043d\u0438\u0439 GPIO \u043e\u0434\u043d\u0438\u043c \u0432\u044b\u0437\u043e\u0432\u043e\u043c;<\/li>\n<li>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u043f\u0440\u043e\u0441\u0430 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 (\u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 \u043e\u0442 \u043b\u0438\u043d\u0438\u0439 GPIO) \u043d\u0435\u043d\u0430\u0434\u0435\u0436\u0435\u043d;<\/li>\n<li>\u041d\u0435\u0442 \u0435\u0434\u0438\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 (API) \u0434\u043b\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043b\u0438\u043d\u0438\u0439 GPIO;<\/li>\n<li>\u041d\u043e\u043c\u0435\u0440\u0430, \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d\u043d\u044b\u0435 \u043b\u0438\u043d\u0438\u044f\u043c GPIO \u043d\u0435\u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b, \u0438\u0445 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c;<\/li>\n<li>\u041d\u0438\u0437\u043a\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043b\u0438\u043d\u0438\u044f\u043c\u0438 GPIO;<\/li>\n<\/ol>\n<p>  <\/p>\n<h2>\u041d\u043e\u0432\u044b\u0439 \u043f\u0443\u0442\u044c: \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 chardev<\/h2>\n<p>  \u041d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u044f\u0434\u0440\u0430 Linux \u0432\u0435\u0440\u0441\u0438\u0438 4.8 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 GPIO <strong>sysfs<\/strong> \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d \u043a\u0430\u043a <strong>\u00abdeprecated\u00bb<\/strong> \u0438 \u043d\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e. \u041d\u0430 \u0437\u0430\u043c\u0435\u043d\u0443 sysfs \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u043d\u043e\u0432\u044b\u0439 API, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445 \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043b\u0438\u043d\u0438\u044f\u043c GPIO \u0438\u0437 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430.<\/p>\n<p>  \u041a\u0430\u0436\u0434\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 GPIO <strong>(gpiochip)<\/strong> \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 <i>\/dev<\/i>, \u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 (open(), read(), write(), ioctl(), poll(), close()) \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u043b\u0438\u043d\u0438\u044f\u043c\u0438 GPIO. \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b GPIO \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u043f\u043e \u043f\u0443\u0442\u044f\u043c <i>\/dev\/gpiochipN<\/i> \u0438\u043b\u0438 <i>\/sys\/bus\/gpiochipN<\/i>, \u0433\u0434\u0435 N \u2014 \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 \u0447\u0438\u043f\u0430. \u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 GPIO (gpiochip) \u043d\u0430 Banana Pi BPI-M64:<\/p>\n<pre><code class=\"bash\">root@bananapim64:~# ls \/dev\/gpiochip* \/dev\/gpiochip0  \/dev\/gpiochip1  \/dev\/gpiochip2 <\/code><\/pre>\n<p>  <a href=\"https:\/\/habrastorage.org\/webt\/jr\/hd\/nu\/jrhdnu_zfxytkii6lzfbvksexw0.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/jr\/hd\/nu\/jrhdnu_zfxytkii6lzfbvksexw0.png\" alt=\"libgpiod Armbian\"><\/a><br \/>  <i>\u0421\u0442\u0435\u043a \u0440\u0430\u0431\u043e\u0442\u044b \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 libgpiod<\/i><\/p>\n<p>  \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043d\u043e\u0432\u044b\u0439 API \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043b\u0438\u043d\u0438\u044f\u043c\u0438\u00a0 GPIO \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a <strong>echo<\/strong> \u0438 <strong>cat<\/strong>, \u043e\u043d \u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 \u0432\u0435\u0441\u043e\u043c\u044b\u043c\u0438 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430\u043c\u0438 \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c sysfs, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e:<\/p>\n<ul>\n<li>\u0412\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043b\u0438\u043d\u0438\u0439 GPIO \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043d \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442. \u041f\u0440\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u0442\u0430\u043a \u0436\u0435 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0430\u0432\u0430\u0440\u0438\u0439\u043d\u043e\u0433\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f, \u043b\u0438\u043d\u0438\u0438 GPIO \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u044e\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438;<\/li>\n<li>\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u043c\u043e\u0436\u043d\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043a\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432 \u0434\u0430\u043d\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u0443\u044e \u043b\u0438\u043d\u0438\u044e GPIO;<\/li>\n<li>\u041c\u043e\u0436\u043d\u043e \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0447\u0438\u0442\u0430\u0442\u044c \u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043b\u0438\u043d\u0438\u0439 GPIO \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e;<\/li>\n<li>\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b GPIO \u0438 \u043b\u0438\u043d\u0438\u0438 GPIO \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043f\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044e;<\/li>\n<li>\u041c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432\u044b\u0432\u043e\u0434\u0430 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430 (open-source, open-drain \u0438 \u0442. \u0434.);<\/li>\n<li>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u043f\u0440\u043e\u0441\u0430 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 (\u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u043e\u0442 \u043b\u0438\u043d\u0438\u0439 GPIO) \u043d\u0430\u0434\u0435\u0436\u0435\u043d.<\/li>\n<\/ul>\n<p>  <\/p>\n<h2>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 libgpiod \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f GPIO<\/h2>\n<p>  \u0414\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0435\u0441\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0438 \u043d\u0430\u0431\u043e\u0440 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c <a href=\"https:\/\/git.kernel.org\/pub\/scm\/libs\/libgpiod\/libgpiod.git\"><strong>libgpiod<\/strong><\/a>.<\/p>\n<p>  <a href=\"https:\/\/git.kernel.org\/pub\/scm\/libs\/libgpiod\/libgpiod.git\/\">Libgpiod<\/a>\u00a0(<strong>Lib<\/strong>rary\u00a0<strong>G<\/strong>eneral\u00a0<strong>P<\/strong>urpose\u00a0<strong>I<\/strong>nput\/<strong>O<\/strong>utput\u00a0<strong>d<\/strong>evice) \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430\u0431\u043e\u0440 API \u0434\u043b\u044f \u0432\u044b\u0437\u043e\u0432\u0430 \u0438\u0437 \u0441\u0432\u043e\u0438\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0442\u0438\u043b\u0438\u0442 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043b\u0438\u043d\u0438\u044f\u043c\u0438 GPIO \u0438\u0437 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0440\u0435\u0436\u0438\u043c\u0430.<\/p>\n<p>  \u0412 \u0441\u043e\u0441\u0442\u0430\u0432 <strong>libgpiod<\/strong> \u0432\u0445\u043e\u0434\u044f\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0443\u0442\u0438\u043b\u0438\u0442\u044b:<\/p>\n<ul>\n<li><strong>gpiodetect<\/strong> \u2014 \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;<\/li>\n<li><strong>gpioinfo<\/strong> \u2014 \u0432\u044b\u0432\u0435\u0434\u0435\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043b\u0438\u043d\u0438\u044f\u0445 GPIO \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 GPIO. \u0412 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0432\u044b\u0432\u043e\u0434\u0430 \u043f\u043e \u043a\u043e\u043b\u043e\u043d\u043a\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u043d\u043e: \u043d\u043e\u043c\u0435\u0440 \u043b\u0438\u043d\u0438\u0438, \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430, \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u0432\u043e\u0434\u0430\/\u0432\u044b\u0432\u043e\u0434\u0430, \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435;<\/li>\n<li><strong>gpioget<\/strong> \u2014 \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043b\u0438\u043d\u0438\u0438 GPIO;<\/li>\n<li><strong>gpioset<\/strong> \u2014 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043b\u0438\u043d\u0438\u0438 GPIO;<\/li>\n<li><strong>gpiofind<\/strong> \u2014 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043f\u043e\u0438\u0441\u043a \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 GPIO \u0438 \u043b\u0438\u043d\u0438\u0438 \u043f\u043e \u0438\u043c\u0435\u043d\u0438;<\/li>\n<li><strong>gpiomon<\/strong> \u2014 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043b\u0438\u043d\u0438\u0438 GPIO \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f.<\/li>\n<\/ul>\n<p>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u0430\u044f \u043d\u0430 C \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 <strong>libgpiod<\/strong> \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a\u0438 GPIO:<\/p>\n<pre><code class=\"cs\">void main() { \tstruct gpiod_chip *chip; \tstruct gpiod_line *line; \tint req, value;  \tchip = gpiod_chip_open(&quot;\/dev\/gpiochip0&quot;); \tif (!chip) \t\treturn -1;  \tline = gpiod_chip_get_line(chip, 3); \tif (!line) { \t\tgpiod_chip_close(chip); \t\treturn -1; \t}  \treq = gpiod_line_request_input(line, &quot;gpio_state&quot;); \tif (req) { \t\tgpiod_chip_close(chip); \t\treturn -1; \t}  \tvalue = gpiod_line_get_value(line);  \tprintf(&quot;GPIO value is: %d\\n&quot;, value);  \tgpiod_chip_close(chip); } <\/code><\/pre>\n<p>  \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0442\u0430\u043a \u0436\u0435 \u0438 \u0438\u0437 \u043a\u043e\u0434\u0430 \u043d\u0430 <strong>C++, Python, C#,<\/strong> \u0438 \u0442.\u0434.<\/p>\n<p>  \u0414\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043b\u0438\u043d\u0438\u044f\u043c\u0438 GPIO \u0438\u0437 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0435 libgpiod. \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 libgpiod \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f GPIO \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0430 \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c.<\/p>\n<h2>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 libgpiod \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f GPIO<\/h2>\n<p>  \u0420\u0435\u043f\u043e\u0437\u0438\u0442\u0430\u0440\u0438\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 libgpiod \u0434\u043e\u0441\u0442\u0443\u043f \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <a href=\"https:\/\/git.kernel.org\/pub\/scm\/libs\/libgpiod\/libgpiod.git\">libgpiod\/libgpiod.git<\/a>. \u0412 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 <strong>Download<\/strong> \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u044b \u0440\u0435\u043b\u0438\u0437\u044b \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u041d\u0430 28.04.2021 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0440\u0435\u043b\u0438\u0437: <strong>v1.6.3.<\/strong><\/p>\n<p>  \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 libgpiod \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0438\u0437 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u0430\u0440\u0438\u044f \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0430, \u043d\u043e \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0441\u0442\u0430\u0440\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 libgpiod:<\/p>\n<pre><code class=\"bash\">$ sudo apt-get update $ sudo apt-get install -y libgpiod-dev gpiod <\/code><\/pre>\n<p>  \u0414\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043e\u0437\u044c\u043c\u0435\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u0430\u0440\u0438\u044f. \u0412 \u0441\u0442\u0440\u043e\u043a\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 <i>setup-libgpiod-arm64.sh<\/i>, \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u043e\u043c\u0435\u0440 \u0432\u0435\u0440\u0441\u0438\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: 1.6.3), \u0432\u0442\u043e\u0440\u043e\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 (\u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439) \u2014 \u043f\u0430\u043f\u043a\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u0430. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u043e \u043f\u0443\u0442\u0438: <i>\/usr\/share\/libgpiod<\/i>.<\/p>\n<p>  \u0421\u043a\u0440\u0438\u043f\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 libgpiod \u0438 \u0443\u0442\u0438\u043b\u0438\u0442 \u0434\u043b\u044f ARM32\/ARM64:<\/p>\n<pre><code class=\"bash\">$ cd ~\/ $ sudo apt-get update $ sudo apt-get install -y curl  $ curl -SL --output setup-libgpiod-armv7-and-arm64.sh https:\/\/raw.githubusercontent.com\/devdotnetorg\/dotnet-libgpiod-linux\/master\/setup-libgpiod-armv7-and-arm64.sh $ chmod +x setup-libgpiod-armv7-and-arm64.sh $ sudo .\/setup-libgpiod-armv7-and-arm64.sh 1.6.3 <\/code><\/pre>\n<p>  \u0414\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442: <a href=\"https:\/\/github.com\/devdotnetorg\/dotnet-libgpiod-linux\/blob\/master\/remove-libgpiod-armv7-and-arm64.sh\">remove-libgpiod-armv7-and-arm64.sh<\/a><\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u043e \u0438\u0442\u043e\u0433\u0443 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u043d\u0430\u0434\u043f\u0438\u0441\u044c <strong>\u00abSuccessfully\u00bb<\/strong>, \u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0438 \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b. \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438, \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0441 \u0432\u044b\u0432\u043e\u0434\u043e\u043c \u043d\u043e\u043c\u0435\u0440\u0430 \u0432\u0435\u0440\u0441\u0438\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438:<\/p>\n<pre><code class=\"bash\">root@bananapim64:~# gpiodetect -v gpiodetect (libgpiod) v1.6.3 Copyright (C) 2017-2018 Bartosz Golaszewski License: LGPLv2.1 This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. <\/code><\/pre>\n<p>  <\/p>\n<h3>\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 libgpiod<\/h3>\n<p>  \u041a\u043e\u043c\u0430\u043d\u0434\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. \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:~# gpiodetect gpiochip0 [1f02c00.pinctrl] (32 lines) gpiochip1 [1c20800.pinctrl] (256 lines) gpiochip2 [axp20x-gpio] (2 lines) <\/code><\/pre>\n<p>  <em>gpiochip0<\/em> \u0438<em> gpiochip1<\/em>, \u044d\u0442\u043e \u0447\u0438\u043f\u044b \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0432 \u0441\u043e\u0441\u0442\u0430\u0432 SoC Allwinner A64. <em>gpiochip1<\/em> \u0438\u043c\u0435\u0435\u0442 \u0432\u044b\u0445\u043e\u0434 \u043d\u0430 40-\u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043d\u044b\u0439 \u0440\u0430\u0437\u044a\u0435\u043c \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0439 \u0441 Raspberry Pi. \u0427\u0438\u043f <em>gpiochip2<\/em> \u2014 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0430 \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 axp209 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u0430\u044f \u043f\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 I2C.<\/p>\n<p>  \u0414\u043b\u044f \u0432\u044b\u0432\u043e\u0434 \u0441\u043f\u0440\u0430\u0432\u043a\u0438 \u043a \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440<strong> &quot;&#8212;help&quot;<\/strong>. \u0412\u044b\u0437\u043e\u0432 \u0441\u043f\u0440\u0430\u0432\u043a\u0438 \u0434\u043b\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b <em>gpiodetect<\/em>. \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:~# gpiodetect --help Usage: gpiodetect [OPTIONS]  List all GPIO chips, print their labels and number of GPIO lines.  Options:   -h, --help:           display this message and exit   -v, --version:        display the version and exit <\/code><\/pre>\n<p>  \u041a\u043e\u043c\u0430\u043d\u0434\u0430 <strong>gpioinfo<\/strong> \u0432\u044b\u0432\u0435\u0434\u0435\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043b\u0438\u043d\u0438\u044f\u0445 GPIO \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 GPIO (\u0438\u043b\u0438 \u0432\u0441\u0435\u0445 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 GPIO, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u044b).\u00a0\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:~# gpioinfo 1 gpiochip1 - 256 lines:         line   0:      unnamed       unused   input  active-high ...         line  64:      unnamed         &quot;dc&quot;  output  active-high [used] ...         line  68:      unnamed &quot;backlightlcdtft&quot; output active-high [used] ...         line  96:      unnamed   &quot;spi0 CS0&quot;  output   active-low [used]         line  97:      unnamed       unused   input  active-high         line  98:      unnamed       unused   input  active-high         line  99:      unnamed       unused   input  active-high         line 100:      unnamed      &quot;reset&quot;  output   active-low [used] ...         line 120:      unnamed &quot;bananapi-m64:red:pwr&quot; output active-high [used] ...         line 254:      unnamed       unused   input  active-high         line 255:      unnamed       unused   input  active-high <\/code><\/pre>\n<p>  \u0412 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043f\u043e \u043a\u043e\u043b\u043e\u043d\u043a\u0430\u043c \u0443\u043a\u0430\u0437\u0430\u043d\u043e: \u043d\u043e\u043c\u0435\u0440 \u043b\u0438\u043d\u0438\u0438, \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430, \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u0432\u043e\u0434\u0430\/\u0432\u044b\u0432\u043e\u0434\u0430, \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u0421\u0435\u0439\u0447\u0430\u0441 \u043a Banana Pi BPI-M64 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d <a href=\"https:\/\/habr.com\/ru\/post\/547180\/\">LCD \u044d\u043a\u0440\u0430\u043d ILI9341 \u043d\u0430 SPI \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435<\/a>, \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u0439 \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u043e\u0439, \u0444\u0430\u0439\u043b DTS <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>. \u0412 DTS \u0444\u0430\u0439\u043b\u0435 \u043a\u043e\u043d\u0442\u0430\u043a\u0442 \u00abPC4\u00bb GPIO68 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u043e\u0439, \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u00abbacklightlcdtft\u00bb. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432 \u0432\u044b\u0432\u043e\u0434\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u0443\u043a\u0430\u0437\u0430\u043d \u043d\u043e\u043c\u0435\u0440 \u043b\u0438\u043d\u0438\u0438 68, \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u00abbacklightlcdtft\u00bb, \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u2014 \u0432\u044b\u0432\u043e\u0434, \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u2014 active-high (\u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043e).<\/p>\n<p>  \u041a\u043e\u043c\u0430\u043d\u0434\u0430 <strong>gpioset<\/strong> \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043b\u0438\u043d\u0438\u0438 GPIO. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043f\u043e\u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0443 \u043d\u0430 LCD ILI9341. \u041a\u043e\u043c\u0430\u043d\u0434\u0430: <i>gpioset 1 68=0<\/i>, \u0433\u0434\u0435 1 \u2014 gpiochip1, 68 \u2014 \u043d\u043e\u043c\u0435\u0440 \u043b\u0438\u043d\u0438\u0438(\u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430), 0 \u2014 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u00ab0\u00bb \u0438\u043b\u0438 \u00ab1\u00bb. \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:~# gpioset 1 68=0 gpioset: error setting the GPIO line values: Device or resource busy root@bananapim64:~# <\/code><\/pre>\n<p>  \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043e\u0448\u0438\u0431\u043a\u0443 \u2014 \u043b\u0438\u043d\u0438\u044f \u0437\u0430\u043d\u044f\u0442\u0430, \u0442.\u043a. \u0434\u0430\u043d\u043d\u0430\u044f \u043b\u0438\u043d\u0438\u044f \u0437\u0430\u043d\u044f\u0442\u0430 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u043c <strong>\u00abgpio-backlight\u00bb<\/strong>.<\/p>\n<p>  \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u043d\u0430 \u043b\u0438\u043d\u0438\u0438 36, \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u00abPB4\u00bb, \u043d\u043e\u043c\u0435\u0440 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430 \u043d\u0430 40-\u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043d\u043e\u043c \u0440\u0430\u0437\u044a\u0435\u043c\u0435 (\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0439 \u0441 Raspberry Pi) \u2014 \u211633. \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:~# gpioset 1 36=1 <\/code><\/pre>\n<p>  \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u0441\u044f.<\/p>\n<p>  \u041a\u043e\u043c\u0430\u043d\u0434\u0430 <strong>gpioget<\/strong> \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043b\u0438\u043d\u0438\u0438 GPIO. \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:~# gpioget 1 36 1 <\/code><\/pre>\n<p>  \u041f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u00ab1\u00bb, \u0442.\u043a. \u0434\u043e \u044d\u0442\u043e\u0433\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u043b\u0438 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <strong>gpioset<\/strong>.<\/p>\n<p>  \u041a\u043e\u043c\u0430\u043d\u0434\u0430 <strong>gpiomon<\/strong> \u0431\u0443\u0434\u0435\u0442 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0442\u044c \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043b\u0438\u043d\u0438\u0438 GPIO \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f. \u0411\u0443\u0434\u0435\u043c \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043a\u043d\u043e\u043f\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u043d\u0430 \u043b\u0438\u043d\u0438\u044e 38, \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u00abPB4\u00bb, \u043d\u043e\u043c\u0435\u0440 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430 \u043d\u0430 40-\u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043d\u043e\u043c \u0440\u0430\u0437\u044a\u0435\u043c\u0435 (\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0439 \u0441 Raspberry Pi) \u211635. \u041a\u043e\u043c\u0430\u043d\u0434\u0430: <i>gpiomon 1 38<\/i>, \u0433\u0434\u0435 1 \u2014 gpiochip1, 38 \u2014 \u043d\u043e\u043c\u0435\u0440 \u043b\u0438\u043d\u0438\u0438 (\u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430). \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:~# gpiomon 1 38 event:  RISING EDGE offset: 38 timestamp: [     122.943878429] event: FALLING EDGE offset: 38 timestamp: [     132.286218099] event:  RISING EDGE offset: 38 timestamp: [     137.639045559] event: FALLING EDGE offset: 38 timestamp: [     138.917400584] <\/code><\/pre>\n<p>  \u041a\u043d\u043e\u043f\u043a\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u043d\u0430\u0436\u0438\u043c\u0430\u043b\u0430\u0441\u044c. <strong>RISING<\/strong> \u2014 \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u0435, \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f \u0441 0V \u0434\u043e 3.3V, \u043a\u043d\u043e\u043f\u043a\u0430 \u043d\u0430\u0436\u0430\u0442\u0430 \u0438 \u0443\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435. <strong>FALLING<\/strong> \u2014 \u043f\u043e\u043d\u0438\u0436\u0435\u043d\u0438\u0435, \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f \u0441 3.3V \u0434\u043e 0V, \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043e\u0442\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u0435 \u043a\u043d\u043e\u043f\u043a\u0438, \u0438 \u043a\u043d\u043e\u043f\u043a\u0430 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u00ab\u043d\u0435 \u043d\u0430\u0436\u0430\u0442\u0430\u00bb.<\/p>\n<p>  \u0421 \u043c\u0435\u0445\u0430\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u043e\u0439 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0438\u0437-\u0437\u0430 \u0434\u0440\u0435\u0431\u0435\u0437\u0433\u0430 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430, \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0434\u043d\u043e\u0433\u043e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u0435\u0445\u0430\u043d\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043a\u043d\u043e\u043f\u043a\u0430 \u0431\u044b\u043b\u0430 \u0437\u0430\u043c\u0435\u043d\u0435\u043d\u0430 \u043d\u0430 \u0435\u043c\u043a\u043e\u0441\u0442\u043d\u0443\u044e (touch) \u043a\u043d\u043e\u043f\u043a\u0443.<\/p>\n<h2>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 .NET 5.0 \u0434\u043b\u044f ARM<\/h2>\n<p>  \u041e\u0434\u043d\u043e \u0438\u0437 \u043b\u0443\u0447\u0448\u0438\u0445 \u043d\u043e\u0432\u043e\u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0439 \u0432 .NET 5.0 \u0441\u0442\u0430\u043b\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b ARM64. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0430 \u043d\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043d\u0430 \u0431\u0430\u0437\u0435 ARM64, \u043d\u043e \u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442 \u0432\u0440\u0435\u043c\u044f \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u0441\u043b\u0443\u0447\u0430\u0435\u00a0 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0430\u043a\u043a\u0443\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u043d\u043e\u0439 \u0431\u0430\u0442\u0430\u0440\u0435\u0438.<\/p>\n<h3>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b ARM32 \u0438 ARM64 \u0434\u043b\u044f SoC<\/h3>\n<p>  .NET 5 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u0441 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043e\u0439 SoC:<\/p>\n<ul>\n<li><strong>ARM32, ARMv7, aarch32, armhf<\/strong> \u2014 32-\u0440\u0430\u0437\u0440\u044f\u0434\u043d\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 ARM. \u041f\u0435\u0440\u0432\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u044b ARM \u0434\u043b\u044f \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u044d\u0442\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435. \u041f\u043e \u0437\u0430\u044f\u0432\u043b\u0435\u043d\u0438\u044e \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 <strong>ARM Holding<\/strong>, \u0432 2022 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 32-\u0431\u0438\u0442\u043d\u044b\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c \u043f\u0440\u0435\u043a\u0440\u0430\u0442\u0438\u0442\u0441\u044f, \u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e 64-\u0431\u0438\u0442\u043d\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u041f\u041e \u0434\u043b\u044f 32-\u0431\u0438\u0442\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c. \u0415\u0441\u043b\u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043f\u043e\u0436\u0435\u043b\u0430\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c 32-\u0431\u0438\u0442\u043d\u0443\u044e \u041e\u0421, \u0442\u043e \u0435\u043c\u0443 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u043d\u044f\u0442\u044c\u0441\u044f \u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u0432 \u0441 64-\u0431\u0438\u0442\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u043d\u0430 32-\u0431\u0438\u0442\u043d\u0443\u044e.<\/li>\n<li><strong>ARM64, ARMv8, aarch64<\/strong> \u2014 64-\u0440\u0430\u0437\u0440\u044f\u0434\u043d\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 ARM. \u042f\u0434\u0440\u0430 Cortex-A53 \u0438 Cortex-A57, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0435 ARMv8, \u0431\u044b\u043b\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0435\u0439 ARM Holding 30 \u043e\u043a\u0442\u044f\u0431\u0440\u044f 2012 \u0433\u043e\u0434\u0430.<\/li>\n<\/ul>\n<p>  \u041f\u043b\u0430\u0442\u0430 <strong>Banana Pi BPI-M64<\/strong> \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 <strong>Allwinner A64<\/strong>, \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 64-\u0431\u0438\u0442\u043d\u044b\u0435 \u044f\u0434\u0440\u0430 Cortex-A53, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 64-\u0440\u0430\u0437\u0440\u044f\u0434\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0414\u043b\u044f \u043f\u043b\u0430\u0442\u044b <strong>Banana Pi BPI-M64 <\/strong>\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f 64-\u0440\u0430\u0437\u0440\u044f\u0434\u043d\u044b\u0439 \u043e\u0431\u0440\u0430\u0437 \u041e\u0421 Armbian, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430 \u043f\u043b\u0430\u0442\u0443 \u0431\u0443\u0434\u0435\u043c \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c <strong>.NET \u0434\u043b\u044f 64-\u0440\u0430\u0437\u0440\u044f\u0434\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c ARM<\/strong>.<\/p>\n<p>  \u041f\u043b\u0430\u0442\u0430 <strong>Cubietruck<\/strong> \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 <strong>Allwinner A20<\/strong> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 32-\u0431\u0438\u0442\u043d\u044b\u0435 \u044f\u0434\u0440\u0430 Cortex-A7, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e 32-\u0440\u0430\u0437\u0440\u044f\u0434\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043d\u0430 \u043f\u043b\u0430\u0442\u0443 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f <strong>.NET \u0434\u043b\u044f 32-\u0440\u0430\u0437\u0440\u044f\u0434\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c.<\/strong><\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u0437\u043d\u0430\u0435\u0442\u0435 \u043a\u0430\u043a\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e .NET \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0430 \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440, \u0442\u043e \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 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e\u0431 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b: <i>uname -m<\/i>.<\/p>\n<p>  \u0412\u044b\u043f\u043e\u043b\u043d\u0438\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u043d\u0430\u00a0 Banana Pi BPI-M64:<\/p>\n<pre><code class=\"bash\">root@bananapim64:~# uname -m aarch64 <\/code><\/pre>\n<p>  \u0421\u0442\u0440\u043e\u043a\u0430 <strong>aarch64<\/strong> \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043e 64-\u0440\u0430\u0437\u0440\u044f\u0434\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 ARM64, ARMv8, aarch64, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 <strong>.NET \u0434\u043b\u044f 64-\u0445 \u0440\u0430\u0437\u0440\u044f\u0434\u043d\u044b\u0445 ARM \u0441\u0438\u0441\u0442\u0435\u043c<\/strong>.<\/p>\n<p>  \u0412\u044b\u043f\u043e\u043b\u043d\u0438\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u043d\u0430\u00a0 Cubietruck:<\/p>\n<pre><code class=\"bash\">root@cubietruck:~# uname -m armv7l <\/code><\/pre>\n<p>  \u0421\u0442\u0440\u043e\u043a\u0430 <strong>armv7l<\/strong> \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043e 32-\u0440\u0430\u0437\u0440\u044f\u0434\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 ARM32, ARMv7, aarch32, armhf, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 <strong>.NET \u0434\u043b\u044f 32-\u0440\u0430\u0437\u0440\u044f\u0434\u043d\u044b\u0445 ARM \u0441\u0438\u0441\u0442\u0435\u043c<\/strong>.<\/p>\n<h3>\u0420\u0435\u0434\u0430\u043a\u0446\u0438\u0438 .NET 5.0 \u043d\u0430 ARM<\/h3>\n<p>  .NET 5.0 \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0432 \u0442\u0440\u0435\u0445 \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u044f\u0445:<\/p>\n<ul>\n<li><strong>.NET Runtime<\/strong> \u2014 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/li>\n<li><strong>ASP.NET Core Runtime<\/strong> \u2014 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 ASP.NET Core \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u0442\u0430\u043a \u0436\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f .NET Runtime \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.<\/li>\n<li><strong>SDK<\/strong> \u2014 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f .NET Runtime, ASP.NET Core Runtime \u0438 .NET Desktop Runtime. \u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043a\u0440\u043e\u043c\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043d\u0430 \u044f\u0437\u044b\u043a\u0430\u0445 C# 9.0, F# 5.0, Visual Basic 15.9.<\/li>\n<\/ul>\n<p>  \u0414\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 .NET \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 <strong>.NET Runtime, <\/strong>\u0442.\u043a. \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435 x86.<\/p>\n<p>  \u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c .NET \u0441 \u0441\u0430\u0439\u0442\u0430 Microsoft \u043c\u043e\u0436\u043d\u043e \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 <a href=\"https:\/\/dotnet.microsoft.com\/download\/dotnet\/5.0\">Download .NET 5.0.<\/a><\/p>\n<h3>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 .NET Runtime<\/h3>\n<p>  \u041d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 <a href=\"https:\/\/dotnet.microsoft.com\/download\/dotnet\/5.0\">Download .NET 5.0.<\/a> \u043c\u043e\u0436\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e .NET. \u0412 \u043f\u0435\u0440\u0432\u043e\u0439 \u043a\u043e\u043b\u043e\u043d\u043a\u0435 <strong>Release information<\/strong> \u0431\u0443\u0434\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u044f: v5.0.5 Released 2021-04-06. \u0412\u0435\u0440\u0441\u0438\u044f \u043d\u043e\u043c\u0435\u0440: <strong>5.0.5<\/strong>. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u044b\u0445\u043e\u0434\u0430 \u0431\u043e\u043b\u0435\u0435 \u043d\u043e\u0432\u044b\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 .NET, \u043d\u0438\u0436\u0435 \u0432 \u0441\u043a\u0440\u0438\u043f\u0442\u0435 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 <strong>export DOTNET_VERSION=5.0.5<\/strong>, \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u043e\u043c\u0435\u0440 \u0432\u0435\u0440\u0441\u0438\u0438 \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439. \u0412\u044b\u043f\u043e\u043b\u043d\u0438\u043c \u0441\u043a\u0440\u0438\u043f\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438, \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0440\u0430\u0437\u0440\u044f\u0434\u043d\u043e\u0441\u0442\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b <strong>ARM32 (Cubietruck)<\/strong> \u0438\u043b\u0438 <strong>ARM64(Banana Pi BPI-M64)<\/strong>:<\/p>\n<p>  <b>ARM64<\/b><\/p>\n<pre><code class=\"bash\">$ cd ~\/ $ apt-get update &amp;&amp; apt-get install -y curl $ export DOTNET_VERSION=5.0.5 $ curl -SL --output dotnet.tar.gz https:\/\/dotnetcli.azureedge.net\/dotnet\/Runtime\/$DOTNET_VERSION\/dotnet-runtime-$DOTNET_VERSION-linux-arm64.tar.gz \\ &amp;&amp; mkdir -p \/usr\/share\/dotnet \\ &amp;&amp; tar -ozxf dotnet.tar.gz -C \/usr\/share\/dotnet \\ &amp;&amp; rm dotnet.tar.gz $ ln -s \/usr\/share\/dotnet\/dotnet \/usr\/bin\/dotnet <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">ARM32<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"bash\">$ cd ~\/ $ apt-get update &amp;&amp; apt-get install -y curl $ export DOTNET_VERSION=5.0.5 $ curl -SL --output dotnet.tar.gz https:\/\/dotnetcli.azureedge.net\/dotnet\/Runtime\/$DOTNET_VERSION\/dotnet-runtime-$DOTNET_VERSION-linux-arm.tar.gz \\ &amp;&amp; mkdir -p \/usr\/share\/dotnet \\ &amp;&amp; tar -ozxf dotnet.tar.gz -C \/usr\/share\/dotnet \\ &amp;&amp; rm dotnet.tar.gz $ ln -s \/usr\/share\/dotnet\/dotnet \/usr\/bin\/dotnet <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0437\u0430\u043f\u0443\u0441\u043a .NET, \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 (\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432 \u0434\u043b\u044f Banana Pi BPI-M64 \u0438 Cubietruck): <i>dotnet &#8212;info<\/i><\/p>\n<pre><code class=\"bash\">root@bananapim64:~# dotnet --info Host (useful for support):   Version: 5.0.5   Commit:  2f740adc14 .NET SDKs installed:   No SDKs were found. .NET runtimes installed:   Microsoft.NETCore.App 5.0.5 [\/usr\/share\/dotnet\/shared\/Microsoft.NETCore.App] To install additional .NET runtimes or SDKs:   https:\/\/aka.ms\/dotnet-download <\/code><\/pre>\n<p>  .NET \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0432 Linux \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439: <i> dotnet ConsoleApp1.dll<\/i><\/p>\n<h3>\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 .NET 5.0<\/h3>\n<p>  \u041f\u0440\u0438 \u0432\u044b\u0445\u043e\u0434\u0435 \u043d\u043e\u0432\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439 .NET \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<ol>\n<li>\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u0430\u043f\u043a\u0443 <i>\/usr\/share\/dotnet\/<\/i><\/li>\n<li>\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438, \u0443\u043a\u0430\u0437\u0430\u0432 \u043d\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e .NET \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 export: DOTNET_VERSION=5.0.5. \u041d\u043e\u043c\u0435\u0440 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 .NET \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 <a href=\"https:\/\/dotnet.microsoft.com\/download\/dotnet\/5.0\">Download .NET 5.0<\/a>. \u0421\u0442\u0440\u043e\u043a\u0443 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0438\u043c\u0432\u043e\u043b\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043d\u0435 \u043d\u0430\u0434\u043e: <i>ln -s \/usr\/share\/dotnet\/dotnet \/usr\/bin\/dotnet<\/i><\/li>\n<\/ol>\n<h2>\u0423\u0434\u0430\u043b\u0435\u043d\u043d\u0430\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 .NET 5.0 \u0432 Visual Studio Code \u0434\u043b\u044f ARM<\/h2>\n<p>  \u0423\u0434\u0430\u043b\u0435\u043d\u043d\u0430\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0430 \u0432 <a href=\"https:\/\/code.visualstudio.com\/#alt-downloads\">Visual Studio Code<\/a> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u0432\u0438\u0434\u0435\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0438 \u0438 \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0433\u043e \u0440\u0443\u0447\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440, \u0447\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043e\u0431\u043b\u0435\u0433\u0447\u0430\u0435\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443. \u0411\u0438\u043d\u0430\u0440\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u043a\u043e\u043f\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0443\u0442\u0438\u043b\u0438\u0442\u044b <strong>Rsync<\/strong>. \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 GPIO, \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0439 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439. \u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \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\/udalennaya-otladka-net50-visual-studio-code-dlya-arm-banana-pi-bpi-m64-i-cubietruck-armbian-linux\/\">\u0423\u0434\u0430\u043b\u0435\u043d\u043d\u0430\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 .NET 5.0 \u0432 Visual Studio Code \u0434\u043b\u044f ARM \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 Banana Pi BPI-M64 \u0438 Cubietruck (Armbian, Linux)<\/a>.<\/p>\n<h2>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f (\u0432\u043a\u043b\/\u0432\u044b\u043a\u043b \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430) GPIO \u043d\u0430 C#, \u0430\u043d\u0430\u043b\u043e\u0433 \u0443\u0442\u0438\u043b\u0438\u0442\u044b gpioset<\/h2>\n<p>  \u041f\u043e\u0437\u0434\u0440\u0430\u0432\u043b\u044f\u044e \u0442\u0435\u0431\u044f %habrauser%! \u041c\u044b \u0443\u0436\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u043c \u043a \u0444\u0438\u043d\u0430\u043b\u0443, \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u0447\u0443\u0442\u044c-\u0447\u0443\u0442\u044c. \u0420\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u043c \u043d\u0430 x86 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435 \u0432 \u0432 <a href=\"https:\/\/code.visualstudio.com\/#alt-downloads\">Visual Studio Code<\/a>. \u041d\u0430\u0445\u043e\u0434\u044f\u0441\u044c \u0432 \u044d\u0442\u043e\u0439 \u0442\u043e\u0447\u043a\u0435,\u00a0 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043d\u0430 \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u043e\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435 \u0443\u0436\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 <strong>.NET 5<\/strong> \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 <strong>Libgpiod<\/strong>, \u0430 \u043d\u0430 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435 x86 .NET 5 \u0438 Visual Studio Code. \u0418\u0442\u0430\u043a \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0435\u043c:<\/p>\n<h3>\u0428\u0430\u0433 1 \u2014 \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f dotnet-gpioset<\/h3>\n<p>  \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u043d\u0430 x86 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435. \u0412 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442 \u0441 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c <strong>dotnet-gpioset<\/strong>: <i>dotnet new console -o dotnet-gpioset<\/i>, \u0433\u0434\u0435 dotnet-gpioset \u2014 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \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\">D:\\Anton\\Projects&gt;dotnet new console -o dotnet-gpioset Getting ready... The template &quot;Console Application&quot; was created successfully.  Processing post-creation actions... Running 'dotnet restore' on dotnet-gpioset\\dotnet-gpioset.csproj...   \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0434\u043b\u044f \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f...   \u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d D:\\Anton\\Projects\\dotnet-gpioset\\dotnet-gpioset.csproj (\u0437\u0430 68 ms). Restore succeeded. <\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u043f\u0430\u043f\u043a\u0430 <i>\\Projects\\dotnet-gpioset\\<\/i>, \u0432 \u044d\u0442\u043e\u0439 \u043f\u0430\u043f\u043a\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d \u043d\u0430\u0448 \u043f\u0440\u043e\u0435\u043a\u0442: \u043f\u0430\u043f\u043a\u0430 \u2014 obj, \u0444\u0430\u0439\u043b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u2014 Program.cs \u0438 \u0444\u0430\u0439\u043b \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u2014 dotnet-gpioset.csproj.<\/p>\n<h3>\u0428\u0430\u0433 2 \u2014 \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f C# for Visual Studio Code (powered by OmniSharp) \u0434\u043b\u044f Visual Studio Code<\/h3>\n<p>  \u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043c Visual Studio Code \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 <a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=ms-dotnettools.csharp\">C# for Visual Studio Code (powered by OmniSharp)<\/a>, \u0434\u043b\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043a\u043e\u0434\u043e\u043c \u043d\u0430 C#. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0436\u043c\u0435\u043c \u043d\u0430 \u0437\u0430\u043a\u043b\u0430\u0434\u043a\u0435: <strong>1. Extensions<\/strong>, \u0437\u0430\u0442\u0435\u043c <strong>2. \u0432 \u043f\u043e\u043b\u0435 \u0432\u0432\u043e\u0434\u0430 \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f C# for Visual Studio Code<\/strong>, \u0432\u044b\u0431\u0435\u0440\u0435\u043c \u043f\u0443\u043d\u043a\u0442 <strong>3. C# for Visual Studio Code (powered by OmniSharp)<\/strong>. <strong>4. \u041f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f<\/strong> \u0438 \u043d\u0430\u0436\u043c\u0435\u043c \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 <strong>Install<\/strong>.<\/p>\n<p>  <a href=\"https:\/\/habrastorage.org\/webt\/tc\/w6\/05\/tcw605zwznxmjivcr47xx8ra9xe.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/tc\/w6\/05\/tcw605zwznxmjivcr47xx8ra9xe.png\" alt=\".NET Visual Studio Code ARM\"><\/a><br \/>  <i>C# for Visual Studio Code (powered by OmniSharp)<\/i><\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f.<\/p>\n<p>  <a href=\"https:\/\/habrastorage.org\/webt\/ci\/4b\/-q\/ci4b-qapnnixzvlygy3glpo_tno.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ci\/4b\/-q\/ci4b-qapnnixzvlygy3glpo_tno.png\" alt=\".NET Visual Studio Code ARM\"><\/a><br \/>  <i>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f C# for Visual Studio Code <\/i><\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f, \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c Visual Studio Code.<\/p>\n<h3>\u0428\u0430\u0433 3 \u2014 \u041e\u0442\u043a\u0440\u044b\u0442\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 Visual Studio Code \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 NuGet \u043f\u0430\u043a\u0435\u0442\u043e\u0432<\/h3>\n<p>  \u041e\u0442\u043a\u0440\u043e\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 Visual Studio Code. \u041c\u0435\u043d\u044e:<strong> File<\/strong> =&gt;<strong>Open Folder<\/strong>, \u0438 \u0432\u044b\u0431\u0435\u0440\u0435\u043c \u043f\u0430\u043f\u043a\u0443 \u0441 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c <i>\\Projects\\dotnet-gpioset\\<\/i><\/p>\n<p>  <a href=\"https:\/\/habrastorage.org\/webt\/n_\/ka\/7r\/n_ka7ruciournivfrwbn7eamuyu.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/n_\/ka\/7r\/n_ka7ruciournivfrwbn7eamuyu.png\" alt=\"dotnet libgpiod\"><\/a><br \/>  <i>\u041f\u0440\u043e\u0435\u043a\u0442 \u0432 Visual Studio Code<\/i><\/p>\n<p>  \u041e\u0442\u043a\u0440\u043e\u0435\u043c \u0444\u0430\u0439\u043b <i>dotnet-gpioset.csproj<\/i>, \u0443\u0431\u0435\u0434\u0438\u043c\u0441\u044f \u0447\u0442\u043e \u0432\u0435\u0440\u0441\u0438\u044f .NET \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u0432\u0435\u0440\u043d\u043e, \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435:<\/p>\n<p>  <a href=\"https:\/\/habrastorage.org\/webt\/z8\/im\/ax\/z8imax7ey8j7d32jai6ncbmhc1o.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/z8\/im\/ax\/z8imax7ey8j7d32jai6ncbmhc1o.png\" alt=\"dotnet libgpiod\"><\/a><br \/>  <i>\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 dotnet-gpioset.csproj<\/i><\/p>\n<p>  <strong>NuGet<\/strong> \u043f\u0430\u043a\u0435\u0442\u044b \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0438\u043b\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 <a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=jmrog.vscode-nuget-package-manager\">NuGet Package Manager<\/a>. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u0434\u0430\u043d\u043d\u043e\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435, \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043f\u0430\u043a\u0435\u0442\u044b: <strong>Iot.Device.Bindings<\/strong> \u0438 <strong>System.Device.Gpio<\/strong>. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0436\u043c\u0435\u043c \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044e <strong>Ctrl+Shift+P<\/strong>, \u0437\u0430\u0442\u0435\u043c \u0432 \u043f\u043e\u043b\u0435 \u0432\u0432\u0435\u0434\u0435\u043c: <strong>Nuget<\/strong>, \u0432\u044b\u0431\u0435\u0440\u0435\u043c <strong>Nuget Packet Managet: Add Package<\/strong>.<\/p>\n<p>  <a href=\"https:\/\/habrastorage.org\/webt\/mh\/mb\/-l\/mhmb-lxeyf6yxvlfsliy2dmlwss.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/mh\/mb\/-l\/mhmb-lxeyf6yxvlfsliy2dmlwss.png\" alt=\"dotnet libgpiod\"><\/a><br \/>  <i>\u0417\u0430\u043f\u0443\u0441\u043a \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f NuGet Package Manager<\/i><\/p>\n<p>  \u0412 \u043f\u043e\u043b\u0435 \u0432\u0432\u043e\u0434\u0430 \u0443\u043a\u0430\u0436\u0435\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430 <strong>Iot.Device.Bindings<\/strong>, \u043d\u0430\u0436\u043c\u0435\u043c<strong> Enter<\/strong>, \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u0431\u0435\u0440\u0435\u043c \u0432\u0435\u0440\u0441\u0438\u044e <strong>1.4.0<\/strong> \u0438 \u043d\u0430\u0436\u043c\u0435\u043c<strong> Enter<\/strong>. \u0422\u0430\u043a \u0436\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438 \u0434\u043b\u044f \u043f\u0430\u043a\u0435\u0442\u0430 <strong>System.Device.Gpio<\/strong>. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u043e\u0432, \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0430\u0439\u043b\u0430 <i>dotnet-gpioset.csproj<\/i> \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c:<\/p>\n<p>  <a href=\"https:\/\/habrastorage.org\/webt\/ms\/so\/wm\/mssowmozec4d-iyvmjp8fbnzh5i.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ms\/so\/wm\/mssowmozec4d-iyvmjp8fbnzh5i.png\" alt=\"dotnet libgpiod\"><\/a><br \/>  <i>\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 dotnet-gpioset.csproj<\/i><\/p>\n<h3>\u0428\u0430\u0433 4 \u2014 \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u043a\u043e\u0434<\/h3>\n<p>  \u0423\u0442\u0438\u043b\u0438\u0442\u0430 <strong>dotnet-gpioset<\/strong> \u043a\u0430\u043a \u0438 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f<strong> gpioset<\/strong> \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043d\u0430 \u0432\u0445\u043e\u0434 \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a\u0438\u0435 \u0436\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b. \u0412\u044b\u0437\u043e\u0432: <i>dotnet-gpioset 1 36=1<\/i>, \u0432\u043a\u043b\u044e\u0447\u0438\u0442 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u043d\u0430 gpiochipX \u2014 1, \u043d\u043e\u043c\u0435\u0440 \u043b\u0438\u043d\u0438\u0438 \u2014 36, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u2014 1. \u0412 \u0440\u0435\u0436\u0438\u043c\u0435 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u0434\u0430\u043d\u044b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u00a0 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e int_gpiochip=1, int_pin=36, pin_value = PinValue.High. \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0438\u043c\u0435\u043d\u00a0 <strong>System.Device.Gpio<\/strong> \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b <strong>PinValue<\/strong>.<\/p>\n<p>  \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432:<\/p>\n<pre><code class=\"cs\">static void Main(string[] args) {   \/\/run: dotnet-gpioset 1 36=1   \/\/-----------------------------------------------                           int? int_gpiochip=null,int_pin=null;   PinValue? pin_value=null;      #if DEBUG     Console.WriteLine(&quot;Debug version&quot;);     int_gpiochip=1;     int_pin=36;     pin_value = PinValue.High;   #endif \t   if (args.Length==2)     {       \/\/Read args       if (int.TryParse(args[0], out int output)) int_gpiochip = output;       Regex r = new Regex(@&quot;\\d+=\\d+&quot;);\/\/36=1       if (r.IsMatch(args[1])) \/\/check: 36=1         {           var i = args[1].Split(&quot;=&quot;);           if (int.TryParse(i[0], out output)) int_pin = output;           if (int.TryParse(i[1], out output))             {               pin_value=(output != 0) ? PinValue.High : PinValue.Low;                                          }         }       }\t   Console.WriteLine($&quot;Args gpiochip={int_gpiochip}, pin={int_pin}, value={pin_value}&quot;);   \/\/next code   Console.WriteLine(&quot;Hello World!&quot;); } <\/code><\/pre>\n<p>  \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438, \u043c\u0435\u043d\u044e <strong>Run =&gt; Start Debugging<\/strong>, \u0432\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u043d\u043e!<\/p>\n<pre><code class=\"bash\">\u0417\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043e &quot;C:\\Program Files\\dotnet\\shared\\Microsoft.NETCore.App\\5.0.5\\System.Text.Encoding.Extensions.dll&quot;. \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d\u0430. \u041c\u043e\u0434\u0443\u043b\u044c \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d, \u0432\u043a\u043b\u044e\u0447\u0435\u043d \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430 &quot;\u0422\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u0439 \u043a\u043e\u0434&quot;. Debug version Args gpiochip=1, pin=36, value=High Hello World! \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 &quot;[8528] dotnet-gpioset.dll&quot; \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0430\u0441\u044c \u0441 \u043a\u043e\u0434\u043e\u043c 0 (0x0). <\/code><\/pre>\n<p>  <\/p>\n<h3>\u0428\u0430\u0433 5 \u2014 \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f GPIO c \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u043c LibGpiodDriver<\/h3>\n<p>  \u0414\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f GPIO \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 <strong>GpioController<\/strong> \u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0434\u0440\u0430\u0439\u0432\u0435\u0440 <strong>LibGpiodDriver<\/strong>, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0438\u043c\u0435\u043d <strong>System.Device.Gpio.Drivers<\/strong>.<\/p>\n<p>  \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430:<\/p>\n<pre><code class=\"cs\">\/\/next code GpioController controller; var drvGpio = new LibGpiodDriver(int_gpiochip.Value);             controller = new GpioController(PinNumberingScheme.Logical, drvGpio); <\/code><\/pre>\n<p>  <strong>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043a\u043e\u0434\u0430:<\/strong><\/p>\n<ul>\n<li><strong>GpioController<\/strong> \u2014 \u043a\u043b\u0430\u0441\u0441 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430\u043c\u0438 GPIO;<\/li>\n<li><strong>LibGpiodDriver(int_gpiochip.Value)<\/strong> \u2014 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u043e\u0431\u0435\u0440\u0442\u043a\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <strong>Libgpiod<\/strong>, \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043d\u043e\u043c\u0435\u0440 <strong>gpiochip<\/strong>;<\/li>\n<li><strong>GpioController(PinNumberingScheme.Logical, drvGpio)<\/strong> \u2014 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430, <strong>PinNumberingScheme.Logical<\/strong> \u2014 \u0444\u043e\u0440\u043c\u0430\u0442 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432. \u0415\u0441\u0442\u044c \u0434\u0432\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430, \u043f\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044e \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430 \u0438\u043b\u0438 \u043f\u043e \u0435\u0433\u043e \u043d\u043e\u043c\u0435\u0440\u0443. \u041d\u043e \u0442.\u043a. \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432 \u043d\u0435 \u0437\u0430\u0434\u0430\u043d\u044b, \u0442\u043e \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e \u043d\u043e\u043c\u0435\u0440\u0443.<\/li>\n<\/ul>\n<p>  <\/p>\n<h3>\u0428\u0430\u0433 6 \u2014 \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u043c GPIO<\/h3>\n<p>  \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0443:<\/p>\n<pre><code class=\"cs\">\/\/set value             if(!controller.IsPinOpen(int_pin.Value))   {     controller.OpenPin(int_pin.Value,PinMode.Output);     controller.Write(int_pin.Value,pin_value.Value);                       }  <\/code><\/pre>\n<p>  <strong>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043a\u043e\u0434\u0430:<\/strong><\/p>\n<ul>\n<li><strong>controller.IsPinOpen<\/strong> \u2014 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430, \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u043d\u044f\u0442 \u0438\u043b\u0438 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d;<\/li>\n<li><strong>controller.OpenPin<\/strong> \u2014 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0435 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430 \u0438 \u0437\u0430\u0434\u0430\u043d\u0438\u0435 \u0435\u043c\u0443 \u0440\u0435\u0436\u0438\u043c\u0430 \u0440\u0430\u0431\u043e\u0442\u044b, <strong>PinMode.Output<\/strong> \u043d\u0430 \u0432\u044b\u0432\u043e\u0434;<\/li>\n<li><strong>controller.Write(int_pin.Value,pin_value.Value)<\/strong> \u2014 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0443 <strong>int_pin<\/strong> \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <strong>pin_value<\/strong>.<\/li>\n<\/ul>\n<p>  <\/p>\n<h3>\u0428\u0430\u0433 7 \u2014 \u041f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f \u0434\u043b\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b ARM<\/h3>\n<p>  \u041e\u0442\u043a\u0440\u044b\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443, \u0438 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u043f\u0430\u043f\u043a\u0443 <i>\\Projects\\dotnet-gpioset\\<\/i>.<\/p>\n<p>  \u0414\u043b\u044f ARM32 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n<ul>\n<li>\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440<strong> &#8212;runtime<\/strong> \u2014 \u0437\u0430\u0434\u0430\u0435\u0442 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b (\u0431\u0435\u0440\u0435\u0442\u0441\u044f \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u00a0<a href=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/core\/rid-catalog\">Runtime Identifiers (RIDs)<\/a>);<\/li>\n<li>\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <strong>&#8212;self-contained<\/strong> \u2014 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u0432\u0441\u0435\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0445 \u0441\u0431\u043e\u0440\u043e\u043a .NET, \u043f\u0440\u0438 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 <strong>False<\/strong>, \u043a\u043e\u043f\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 \u043d\u0435 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0432 .NET Runtime (\u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u0443\u0434\u0443\u0442 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0441\u0431\u043e\u0440\u043a\u0438 \u0438\u0437 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 NuGet \u043f\u0430\u043a\u0435\u0442\u043e\u0432).<\/li>\n<\/ul>\n<p>  <\/p>\n<pre><code class=\"bash\">dotnet publish dotnet-gpioset.csproj --configuration Release --runtime linux-arm --self-contained false <\/code><\/pre>\n<p>  \u0424\u0430\u0439\u043b\u044b \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430 \u043d\u0430 \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u0431\u0443\u0434\u0443\u0442 \u0432 \u043f\u0430\u043f\u043a\u0435: <i>\\Projects\\dotnet-gpioset\\bin\\Release\\net5.0\\linux-arm\\publish\\<\/i>.<\/p>\n<p>  \u0414\u043b\u044f ARM64 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n<pre><code class=\"bash\">dotnet publish dotnet-gpioset.csproj --configuration Release --runtime linux-arm64 --self-contained false <\/code><\/pre>\n<p>  \u0424\u0430\u0439\u043b\u044b \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430 \u043d\u0430 \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u0431\u0443\u0434\u0443\u0442 \u0432 \u043f\u0430\u043f\u043a\u0435: <i>\\Projects\\dotnet-gpioset\\bin\\Release\\net5.0\\linux-arm64\\publish\\<\/i>.<\/p>\n<h3>\u0428\u0430\u0433 8 \u2014 \u041f\u0435\u0440\u0435\u043d\u043e\u0441 \u043f\u0430\u043f\u043a\u0438 \\publish\\<\/h3>\n<p>  \u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043f\u0430\u043f\u043a\u0438 <i>\\publish\\<\/i> \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0432 \u0434\u043e\u043c\u0430\u0448\u043d\u0438\u0439 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 Linux \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0430 \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u043e\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b <a href=\"https:\/\/mobaxterm.mobatek.net\/download.html\">MobaXterm<\/a>.<\/p>\n<h3>\u0428\u0430\u0433 9 \u2014 \u0417\u0430\u043f\u0443\u0441\u043a dotnet-gpioset \u043d\u0430 \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u043e\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435<\/h3>\n<p>  \u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043f\u0430\u043f\u043a\u0438 <i>\\publish\\<\/i> \u0431\u044b\u043b\u043e \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0432 \u043f\u0430\u043f\u043a\u0443 <i>\/root\/publish-dotnet-gpioset<\/i>. \u0418\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u043c \u0444\u0430\u0439\u043b\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0444\u0430\u0439\u043b \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c *.dll. \u0412 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435, <strong>\u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434<\/strong> \u0431\u044b\u043b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d \u043d\u0430 \u043a\u043e\u043d\u0442\u0430\u043a\u0442 \u211633, 40-\u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u044a\u0435\u043c\u0430 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0433\u043e \u0441 Raspberry P, \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430 \u00abPB4\u00bb, \u043d\u043e\u043c\u0435\u0440 \u043b\u0438\u043d\u0438\u0438 \u2014 <strong>36<\/strong>. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u043d\u043e\u043c\u0435\u0440\u0430 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u2014 36. \u0414\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \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=\"cs\">dotnet dotnet-gpioset.dll 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:~# cd \/root\/publish-dotnet-gpioset root@bananapim64:~\/publish-dotnet-gpioset# dotnet dotnet-gpioset.dll 1 36=1 Args gpiochip=1, pin=36, value=High OK <\/code><\/pre>\n<p>  <strong>\u0421\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u0432\u043a\u043b\u044e\u0447\u0438\u043b\u0441\u044f!<\/strong><br \/>  <a href=\"https:\/\/habrastorage.org\/webt\/se\/6n\/n4\/se6nn43ugqxcy9ebzd7v58hhprs.jpeg\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/se\/6n\/n4\/se6nn43ugqxcy9ebzd7v58hhprs.jpeg\"><\/a><\/p>\n<div class=\"oembed\"><iframe allowfullscreen id=\"6091eb9f29e351865d36549a\" src=\"https:\/\/embedd.srv.habr.com\/iframe\/6091eb9f29e351865d36549a\"><\/iframe><\/div>\n<p>  \u041f\u0440\u043e\u0435\u043a\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043d\u0430 <a href=\"https:\/\/github.com\/devdotnetorg\/dotnet-libgpiod-linux\/tree\/master\/dotnet-gpioset\">GitHub dotnet-gpioset<\/a>.<\/p>\n<h2>\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<\/h2>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 \u043e\u0442 GPIO. \u0417\u0430\u0434\u0430\u0447\u0430 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430 \u043f\u043e \u043d\u0430\u0436\u0430\u0442\u0438\u044e \u043a\u043d\u043e\u043f\u043a\u0438. \u041f\u0435\u0440\u0432\u043e\u0435 \u043d\u0430\u0436\u0430\u0442\u0438\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 \u0432\u043a\u043b\u044e\u0447\u0438\u0442 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434, \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435, \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u0442 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434, \u0438 \u0442\u0430\u043a \u0434\u043e \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0441\u0442\u0438. \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0430 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 <a href=\"https:\/\/github.com\/microsoft\/Windows-iotcore-samples\/tree\/develop\/Samples\/PushButton\">Push button<\/a>.<\/p>\n<p>  <strong>\u0421\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434<\/strong> \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0443 \u0441 \u043d\u043e\u043c\u0435\u0440\u043e\u043c \u2014 <strong>36<\/strong>. <strong>\u041a\u043d\u043e\u043f\u043a\u0430<\/strong> \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u043d\u0430 \u043a\u043e\u043d\u0442\u0430\u043a\u0442 \u0441 \u043d\u043e\u043c\u0435\u0440\u043e\u043c \u2014 <strong>38<\/strong>. \u0418\u0442\u0430\u043a \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0435\u043c:<\/p>\n<h3>\u0428\u0430\u0433 1 \u2014 \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f dotnet-led-button<\/h3>\n<p>  \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u043d\u0430 x86 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435. \u0412 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442 \u0441 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c <strong>dotnet-led-button<\/strong>: <i>dotnet new console -o dotnet-led-button<\/i>, \u0433\u0434\u0435 dotnet-led-button \u2014 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<\/p>\n<pre><code class=\"bash\">D:\\Anton\\Projects&gt;dotnet new console -o dotnet-led-button Getting ready... The template &quot;Console Application&quot; was created successfully.  Processing post-creation actions... Running 'dotnet restore' on dotnet-led-button\\dotnet-led-button.csproj...   \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0434\u043b\u044f \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f...   \u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d D:\\Anton\\Projects\\dotnet-led-button\\dotnet-led-button.csproj (\u0437\u0430 76 ms). Restore succeeded. <\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u043f\u0430\u043f\u043a\u0430 \u0441 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 <i>\\Projects\\dotnet-led-button\\<\/i>.<\/p>\n<h3>\u0428\u0430\u0433 2 \u2014 \u041e\u0442\u043a\u0440\u044b\u0442\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 Visual Studio Code \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 NuGet \u043f\u0430\u043a\u0435\u0442\u043e\u0432<\/h3>\n<p>  \u0422\u043e\u0447\u043d\u043e \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u0438 \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c Nuget \u043f\u0430\u043a\u0435\u0442\u044b: <strong>Iot.Device.Bindings<\/strong> \u0438 <strong>System.Device.Gpio<\/strong>.<\/p>\n<h3>\u0428\u0430\u0433 3 \u2014 \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f GPIO c \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u043c LibGpiodDriver<\/h3>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f GPIO, \u0438 \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u043c \u0440\u0435\u0436\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432:<\/p>\n<pre><code class=\"cs\">private const int GPIOCHIP = 1; private const int LED_PIN = 36; private const int BUTTON_PIN = 38;        private static PinValue ledPinValue = PinValue.Low;      static void Main(string[] args) {                           GpioController controller;   var drvGpio = new LibGpiodDriver(GPIOCHIP);   controller = new GpioController(PinNumberingScheme.Logical, drvGpio);   \/\/set value   if(!controller.IsPinOpen(LED_PIN)&amp;&amp;!controller.IsPinOpen(BUTTON_PIN))     {       controller.OpenPin(LED_PIN,PinMode.Output);       controller.OpenPin(BUTTON_PIN,PinMode.Input);     }   controller.Write(LED_PIN,ledPinValue); \/\/LED OFF <\/code><\/pre>\n<p>  <strong>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043a\u043e\u0434\u0430:<\/strong><\/p>\n<ul>\n<li><strong>controller.OpenPin(LED_PIN,PinMode.Output) &#8212;<\/strong> \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043a\u043e\u043d\u0442\u0430\u043a\u0442 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430, \u0438 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0440\u0435\u0436\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0430 \u2014 \u0432\u044b\u0432\u043e\u0434;<\/li>\n<li><strong>controller.OpenPin(BUTTON_PIN,PinMode.Input) &#8212;<\/strong> \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043a\u043e\u043d\u0442\u0430\u043a\u0442 \u043a\u043d\u043e\u043f\u043a\u0438, \u0438 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0440\u0435\u0436\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0430 \u2014 \u0432\u0432\u043e\u0434 (\u0441\u0438\u0433\u043d\u0430\u043b \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u043e\u0442 \u043a\u043d\u043e\u043f\u043a\u0438.<\/li>\n<\/ul>\n<p>  <\/p>\n<h3>\u0428\u0430\u0433 4 \u2014 \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u043a\u043d\u043e\u043f\u043a\u0438<\/h3>\n<p>  \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0443\u0442\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 <strong>Callback<\/strong> \u043d\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430. <strong>Callback<\/strong> \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435 GPIO:<\/p>\n<pre><code class=\"cs\">controller.RegisterCallbackForPinValueChangedEvent(BUTTON_PIN,PinEventTypes.Rising,(o, e) =&gt;   {     ledPinValue=!ledPinValue;     controller.Write(LED_PIN,ledPinValue);     Console.WriteLine($&quot;Press button, LED={ledPinValue}&quot;);           }); <\/code><\/pre>\n<p>  <strong>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043a\u043e\u0434\u0430:<\/strong><\/p>\n<ul>\n<li><strong>RegisterCallbackForPinValueChangedEvent<\/strong> \u2014 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f Callback \u043d\u0430 \u043a\u043e\u043d\u0442\u0430\u043a\u0442 <strong>BUTTON_PIN<\/strong>, \u0431\u0443\u0434\u0435\u0442 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0435 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 \u2014 <strong>Rising<\/strong>. \u0422\u0430\u043a \u0436\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u043e\u0442\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u0435 \u043a\u043d\u043e\u043f\u043a\u0438.<\/li>\n<\/ul>\n<p>  <\/p>\n<h3>\u0428\u0430\u0433 5 \u2014 \u041f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f \u0434\u043b\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b ARM<\/h3>\n<p>  \u041e\u0442\u043a\u0440\u044b\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443, \u0438 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u043f\u0430\u043f\u043a\u0443 <i>\\Projects\\dotnet-led-button\\<\/i>.<\/p>\n<p>  \u0414\u043b\u044f ARM32 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n<pre><code class=\"bash\">dotnet publish dotnet-led-button.csproj --configuration Release --runtime linux-arm --self-contained false <\/code><\/pre>\n<p>  \u0424\u0430\u0439\u043b\u044b \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430 \u043d\u0430 \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u0431\u0443\u0434\u0443\u0442 \u0432 \u043f\u0430\u043f\u043a\u0435: <i>\\Projects\\dotnet-led-button\\bin\\Release\\net5.0\\linux-arm\\publish\\<\/i>.<\/p>\n<p>  \u0414\u043b\u044f ARM64 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n<pre><code class=\"bash\">dotnet publish dotnet-led-button.csproj --configuration Release --runtime linux-arm64 --self-contained false <\/code><\/pre>\n<p>  \u0424\u0430\u0439\u043b\u044b \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430 \u043d\u0430 \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u0431\u0443\u0434\u0443\u0442 \u0432 \u043f\u0430\u043f\u043a\u0435: <i>\\Projects\\dotnet-led-button\\bin\\Release\\net5.0\\linux-arm64\\publish\\<\/i>.<\/p>\n<h3>\u0428\u0430\u0433 6 \u2014 \u041f\u0435\u0440\u0435\u043d\u043e\u0441 \u043f\u0430\u043f\u043a\u0438 \\publish\\<\/h3>\n<p>  \u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043f\u0430\u043f\u043a\u0438 <i>\\publish\\<\/i> \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0432 \u0434\u043e\u043c\u0430\u0448\u043d\u0438\u0439 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 Linux \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0430 \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u043e\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435.<\/p>\n<h3>\u0428\u0430\u0433 7 \u2014 \u0417\u0430\u043f\u0443\u0441\u043a dotnet-led-button \u043d\u0430 \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u043e\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435<\/h3>\n<p>  \u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043f\u0430\u043f\u043a\u0438 <i>\\publish\\<\/i> \u0431\u044b\u043b\u043e \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0432 \u043f\u0430\u043f\u043a\u0443 <i>\/root\/publish-dotnet-led-button<\/i>. \u0414\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \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=\"cs\">dotnet dotnet-led-button.dll <\/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:~\/publish-dotnet-led-button# dotnet dotnet-led-button.dll CTRL+C to interrupt the read operation: Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation: Press button, LED=Low Press button, LED=High Press button, LED=Low Press button, LED=High Press button, LED=Low <\/code><\/pre>\n<p>  <strong>\u041a\u043d\u043e\u043f\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442!<\/strong>  <\/p>\n<div class=\"oembed\"><iframe allowfullscreen id=\"6091eba04bb7a5868986245b\" src=\"https:\/\/embedd.srv.habr.com\/iframe\/6091eba04bb7a5868986245b\"><\/iframe><\/div>\n<p>  \u041f\u0440\u043e\u0435\u043a\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043d\u0430 <a href=\"https:\/\/github.com\/devdotnetorg\/dotnet-libgpiod-linux\/tree\/master\/dotnet-led-button\">GitHub dotnet-led-button<\/a>.<\/p>\n<h2>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438<\/h2>\n<p>  \u0417\u0430\u043c\u0435\u0440\u044b \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f GPIO \u043d\u0430 Banana Pi BPI-M64 \u043d\u0435 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u043b\u0438\u0441\u044c \u0438\u0437-\u0437\u0430 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u043e\u0441\u0446\u0438\u043b\u043b\u043e\u0433\u0440\u0430\u0444\u0430. \u041d\u043e \u043d\u0435 \u0442\u0430\u043a \u0434\u0430\u0432\u043d\u043e, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c ZhangGaoxing <a href=\"https:\/\/github.com\/ZhangGaoxing\/sunxi-gpio-driver\">\u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b<\/a> \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0437\u0430\u043c\u0435\u0440\u043e\u0432 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043d\u0430 <a href=\"http:\/\/www.orangepi.org\/orangepizero\/\">Orange Pi Zero<\/a>: \u041e\u0421 Armbian buster, \u044f\u0434\u0440\u043e Linux 5.10.16, .NET 5.0.3. \u0422\u0435\u0441\u0442 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u043b\u0441\u044f \u0432 \u0431\u044b\u0441\u0442\u0440\u043e\u043c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430 GPIO \u0441 \u00ab0\u00bb \u043d\u0430 \u00ab1\u00bb \u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442, \u043f\u043e \u0441\u0443\u0442\u0438 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u043b\u0430\u0441\u044c \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0428\u0418\u041c (\u0432 Arduino \u0430\u043d\u0430\u043b\u043e\u0433 SoftPWM). \u0427\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0430\u0441\u0442\u043e\u0442\u0430, \u0442\u0435\u043c \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0441\u044f \u043a\u043e\u043d\u0442\u0430\u043a\u0442. \u0414\u043b\u044f \u0437\u0430\u043c\u0435\u0440\u0430 \u0431\u044b\u043b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d \u043f\u0440\u043e\u0435\u043a\u0442 <a href=\"https:\/\/github.com\/ZhangGaoxing\/sunxi-gpio-driver\/tree\/master\/src\/SunxiGpioDriver.GpioSpeed\">SunxiGpioDriver.GpioSpeed<\/a>. ZhangGaoxing \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0434\u0440\u0430\u0439\u0432\u0435\u0440 <strong>SunxiDriver<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f GPIO. \u041a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u0442\u0430\u043a \u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a \u043b\u044e\u0431\u043e\u0439 \u043f\u043b\u0430\u0442\u0435, \u043f\u0443\u0442\u0435\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438\u0437 datasheet \u043a \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0443. \u041c\u0438\u043d\u0443\u0441 \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u043a GPIO \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u041e\u0421, \u043c\u043e\u0436\u043d\u043e \u00ab\u0432\u043b\u0435\u0437\u0442\u044c\u00bb \u0432 \u043a\u043e\u043d\u0442\u0430\u043a\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0439 \u041e\u0421 \u0438 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0441\u0431\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b.<\/p>\n<p>  <strong>\u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u0437\u0430\u043c\u0435\u0440\u043e\u0432:<\/strong>  <\/p>\n<div class=\"scrollable-table\">\n<table>\n<tbody>\n<tr>\n<td><strong>\u0414\u0440\u0430\u0439\u0432\u0435\u0440<\/strong><\/td>\n<td><strong>\u042f\u0437\u044b\u043a<\/strong><\/td>\n<td><strong>\u0412\u0435\u0440\u0441\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438<\/strong><\/td>\n<td><strong>\u0421\u0440\u0435\u0434\u043d\u044f\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u0430<\/strong><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>SunxiDriver<\/td>\n<td>C#<\/td>\n<td>&#8212;<\/td>\n<td>185 KHz<\/td>\n<td><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/5e8\/196\/2bd\/5e81962bdd580f97fa3ea5fd36f2ba60.jpg\" height=\"60\"><\/td>\n<\/tr>\n<tr>\n<td>SysFsDriver<\/td>\n<td>C#<\/td>\n<td>System.Device.Gpio 1.3.0<\/td>\n<td>692 Hz<\/td>\n<td><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/aaa\/3ea\/9bf\/aaa3ea9bfe4069881d67a2dbdd5fb6fc.jpg\" height=\"60\"><\/td>\n<\/tr>\n<tr>\n<td>LibGpiodDriver<\/td>\n<td>C#<\/td>\n<td>System.Device.Gpio 1.3.0<br \/>  libgpiod 1.2-3<\/td>\n<td>81 KHz<\/td>\n<td><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/817\/979\/449\/8179794493f42805697351e79e1f4814.jpg\" height=\"60\"><\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/github.com\/orangepi-xunlong\/wiringOP\">wiringOP<\/a><\/td>\n<td>C<\/td>\n<td>35de015<\/td>\n<td>1.10 MHz<\/td>\n<td><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/11d\/75f\/882\/11d75f882a0efdb26ebead21d96ae633.jpg\" height=\"60\"><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u043b\u0438, \u0447\u0442\u043e \u0441\u0430\u043c\u044b\u043c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f SysFs, \u0438 \u0435\u0433\u043e \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432. wiringOP \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0421 \u043e\u0431\u0435\u0440\u0442\u043a\u043e\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a GPIO. \u041d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 GPIO \u0438\u0437 C \u043a\u043e\u0434\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c \u0438\u0437 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 .NET, \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0432 ~13 \u0440\u0430\u0437. \u042d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c \u043f\u043b\u0430\u0442\u0430 \u0437\u0430 Runtime.<\/p>\n<h2>\u0418\u0442\u043e\u0433<\/h2>\n<p>  \u0423\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430\u043c\u0438 GPIO \u0432 C# \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u043d\u0435 \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u0447\u0435\u043c \u043d\u0430 Arduino. \u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 Arduino \u0432 \u043d\u0430\u0448\u0435\u043c \u0440\u0430\u0441\u043f\u043e\u0440\u044f\u0436\u0435\u043d\u0438\u0435 Linux \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0439 \u0433\u0440\u0430\u0444\u0438\u043a\u0438, \u0437\u0432\u0443\u043a\u043e\u043c, \u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u043e\u0439 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438. \u0412 \u0434\u0430\u043b\u0435\u043a\u043e\u043c 2014 \u0433\u043e\u0434\u0443 \u0441 \u0445\u0430\u0431\u0440\u043e\u0432\u0447\u0430\u043d\u0438\u043d\u043e\u043c <a href=\"https:\/\/habr.com\/ru\/users\/prostosergik\/\" class=\"user_link\">prostosergik<\/a> \u0431\u044b\u043b <a href=\"https:\/\/habr.com\/ru\/post\/246853\/\">\u0441\u043f\u043e\u0440 \u043e \u0446\u0435\u043b\u0435\u0441\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 Raspberry Pi<\/a> \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0448\u043a\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u0432\u043e\u043d\u043a\u0430. \u041c\u043d\u043e\u044e \u0431\u044b\u043b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u043d\u0430 C# .NET Micro Framework, \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0430 FEZ Domino. \u0421 \u0442\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043c\u043d\u043e\u0433\u043e\u0435 \u0447\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c. \u0421\u0435\u0439\u0447\u0430\u0441 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447, \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u0432 \u043d\u0430 Linux \u0431\u043e\u043b\u0435\u0435 \u043e\u043f\u0440\u0430\u0432\u0434\u0430\u043d, \u0447\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430. \u041f\u0435\u0440\u0432\u043e\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u044d\u0442\u043e \u2014 .NET \u0442\u0435\u043f\u0435\u0440\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 Linux \u043d\u0430\u0442\u0438\u0432\u043d\u043e. \u0412\u0442\u043e\u0440\u043e\u0435 \u2014 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u043f\u0440\u043e\u0449\u0430\u044e\u0442 \u0438 \u0441\u043a\u0440\u044b\u0432\u0430\u044e\u0442 \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u0432\u0441\u0435 \u0441\u043b\u043e\u0436\u043d\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443. \u0422\u0440\u0435\u0442\u044c\u0435 \u2014 \u0446\u0435\u043d\u0430, \u0441\u0435\u0439\u0447\u0430\u0441 \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u0441 256 \u041c\u0431 \u041e\u0417\u0423, Ethernet \u0438 Wi-Fi \u0432 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u043c \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u043e\u043c \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0441\u0442\u0438 \u0437\u0430 18$. \u0417\u0430 \u0442\u0430\u043a\u0438\u0435 \u0434\u0435\u043d\u044c\u0433\u0438 \u041c\u041a, \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0433\u043e Web-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0438 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0442\u0440\u0430\u0444\u0438\u043a\u0430, \u0432\u0440\u044f\u0434 \u043b\u0438 \u043d\u0430\u0439\u0434\u0435\u0448\u044c. \u041f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 .NET IoT \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 GPIO \u043d\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u044b\u0441\u043e\u043a\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438, \u0447\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441\u043d\u0438\u0436\u0430\u0435\u0442 \u043f\u043e\u0440\u043e\u0433 \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043b\u044e\u0431\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a .NET \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b, \u043c\u043e\u0436\u0435\u0442 \u0441 \u043b\u0435\u0433\u043a\u043e\u0441\u0442\u044c\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043b\u044f IoT \u043d\u0435 \u0432\u0434\u0430\u0432\u0430\u044f\u0441\u044c \u0432 \u0434\u0435\u0442\u0430\u043b\u0438 \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u043d\u0443\u0442\u0440\u0438. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b .NET \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 Libgpiod \u0431\u044b\u043b\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043e \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f, \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043d\u043e \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u044b\u043c \u0443\u0434\u043e\u0431\u043d\u044b\u043c. \u0413\u043e\u0440\u0430\u0437\u0434\u043e \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u0432\u0441\u0435 \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u0432 Docker \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435, \u0442\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u044d\u0442\u043e mainstream \u0434\u043b\u044f Linux. \u0412 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0430\u043a \u0443\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 C# \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 .NET 5 \u0438 Libgpiod \u0432 \u043e\u0434\u0438\u043d \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440, \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0439 \u0443\u0434\u043e\u0431\u043d\u043e\u0439 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u044c\u044e\u0446\u0438\u0438 \u043d\u0430\u0448\u0435\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u0443, \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u043c LCD \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0438\u0437 .NET \u043a\u043e\u0434\u0430.<\/p>\n<hr>\n<p>  <\/p>\n<h4>\u041d\u0430 \u043f\u0440\u0430\u0432\u0430\u0445 \u0440\u0435\u043a\u043b\u0430\u043c\u044b<\/h4>\n<p>  \u041f\u0440\u044f\u043c\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u043a\u0430\u0437\u0430\u0442\u044c <a href=\"https:\/\/vdsina.ru\/cloud-servers?partner=habr359\">\u043c\u043e\u0449\u043d\u044b\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u044b<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043d\u043e\u0432\u0435\u0439\u0448\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u044b <a href=\"https:\/\/habr.com\/ru\/company\/vdsina\/blog\/514570\/\">AMD Epyc<\/a>. \u0413\u0438\u0431\u043a\u0438\u0435 \u0442\u0430\u0440\u0438\u0444\u044b \u2014 \u043e\u0442 1 \u044f\u0434\u0440\u0430 CPU \u0434\u043e \u0431\u0435\u0437\u0443\u043c\u043d\u044b\u0445 128 \u044f\u0434\u0435\u0440 CPU, 512 \u0413\u0411 RAM, 4000 \u0413\u0411 NVMe.<\/p>\n<p>  \u041f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0439\u0442\u0435\u0441\u044c \u043d\u0430 <a href=\"https:\/\/t.me\/vdsina\">\u043d\u0430\u0448 \u0447\u0430\u0442 \u0432 Telegram<\/a>.<\/p>\n<p>  <a href=\"https:\/\/vdsina.ru\/cloud-servers?partner=habr359\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/8p\/3v\/z4\/8p3vz47nluspfyc0axlkx88gdua.png\"><\/a><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/company\/vdsina\/blog\/555598\/\"> https:\/\/habr.com\/ru\/company\/vdsina\/blog\/555598\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/0n\/29\/-i\/0n29-ivfj3wztjrx6szghjireek.jpeg\" alt=\"dotnet libgpiod\"><\/p>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u0437\u0430\u0445\u043e\u0434\u0438\u0442 \u0440\u0435\u0447\u044c \u043f\u0440\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 C# .NET \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u0432, \u0442\u043e \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u044b \u043a\u0440\u0443\u0442\u044f\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0432\u043e\u043a\u0440\u0443\u0433 Raspberry Pi \u043d\u0430 Windows IoT. \u0410 \u043a\u0430\u043a \u0436\u0435 Banana\/Orange\/Rock\/Nano Pi, Odroid, Pine64 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u0435 \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0435 \u043d\u0430 Linux? \u0422\u0430\u043a \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u044d\u0442\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043c, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c .NET 5 \u043d\u0430 Banana Pi BPI-M64 (ARM64) \u0438 Cubietruck (ARM32), \u0438 \u0431\u0443\u0434\u0435\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430\u043c\u0438 GPIO \u0438\u0437 C# \u0432 Linux. \u0412 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0435\u0440\u0438\u0438 \u043f\u043e\u0441\u0442\u043e\u0432, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u0438 \u043a\u043d\u043e\u043f\u043a\u0443 \u0434\u043b\u044f \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 \u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 Libgpiod (\u0441\u043f\u043e\u0439\u043b\u0435\u0440, \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0442\u0430\u043a \u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 C++, Python) \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430\u043c GPIO.  <\/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-322852","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/322852","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=322852"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/322852\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=322852"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=322852"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=322852"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}