Пришло время задействовать шину I2C, будем подключать датчики серии BMP и BME компании Bosch Sensortec, такие как: BME280, BMP085, BMP180, и BMP280. Подключение датчиков по шине I2C позволяет экономить контакты GPIO. Дополнительно, в подобных датчиках уже есть АЦП, и значение напряжения уже не проецируется на шкалу температуры, а выдается в цифровом виде. Помимо датчиков температуры, к шине I2C можно подключать и другие всевозможные датчики и модули, например расширитель контактов GPIO
MCP23017 I2C I/O Expander.
Оглавление
- Постановка задачи
- Что такое шина I2C?
- Шина I2C/TWI на процессоре Allwinner A64
- Датчик BME280
- Схема подключения датчика BME280 к шине I2C
- Файл наложения устройств DTS для включения шины I2C
- Поиск устройств на шине I2C
- Файл наложения устройств DTS для датчика BME280
- Подсистема Linux Industrial I/O (промышленный ввод/вывод)
- Чтение значений датчика BME280
- Решение проблем
- Литература
Постановка задачи
Подключить датчики BME280, BMP085, BMP180, и BMP280 компании Bosch Sensortec для замера физических величин: температуры, влажности, атмосферного давления. Все датчики должны быть подключены к шине I2C.
- Плата Banana Pi BPI-M64 установлена версия Armbian_21.02.1_Bananapim64_bionic_current_5.10.12_minimal.img.xz, основанная на Ubuntu 18.04.5 LTS (Bionic Beaver), ядро 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 (обновление до последней версии ядра Linux, декларировали повышение производительности на ARM архитектуре, решение проблем со звуком в Armbian, но это не точно).
Что такое шина I2C?
I2C InterIC, или IIC (I2C) — двунаправленная шина передачи данных, разработанная еще в 1980 году компанией Philips для осуществления связи между разными схемами и устройствами. Очень часто на схемах указывают I2C/TWI(Two Wire Interface), это одно и тоже. Дело в том, что компания Philips, свою разработанную шину запатентовала и для ее использования необходимо было платить роялти, что конечно же разработчикам устройств не очень то хотелось. Так появился клон шины I2C — шина TWI, свободная от лицензионных отчислений. Все что применимо к шине I2C, применимо и к шине TWI, и наоборот.
К шине I2C можно подключить до 127 устройств, но есть одно «НО»: доступно для подключения всего 112 адресов, потому что 16 зарезервированы. Передача данных осуществляется по двум проводам:
- SDA (Serial Data) — эта линия отвечает непосредственно за передаваемые данных.
- SCL (Serial Clock) — эта линия отвечает за синхронизацию соединения.
Линии SCL и SDA шины I2C являются двунаправленными, что делает невозможным подключение устройств с разными напряжениями питания. Для выхода из такой ситуации нужно использовать конвертеры уровней напряжения!
Максимальное допустимое количество микросхем, подсоединённых к одной шине, ограничивается максимальной емкостью шины 400 пФ.
Режимы работы шины:
- Скоростной — 400 кбит/с;
- Обычный — 100 кбит/с;
- С пониженной скоростью — 10 кбит/с.
Особенности подключения к шине I2C
Как было сказано выше, к шине I2C можно подключить до 127 устройств. Устройство которое будет управлять этим набором периферии является ведущим (master), а модули подключенные к нему — ведомыми (slaves).
Генерация сигнала осуществляется «прижиманием» линии к нулю (низкий уровень), высокий уровень присутствует по умолчанию за счет подключенных подтягивающих резисторов к каждой из линий (SCL, SDA) и шине питания (VCC). От сопротивления этих резисторов зависит скорость восстановления на линиях высокого уровня, а заодно и скорость работы шины I2C.
Оптимальное сопротивление подтягивающих резисторов — 10 кОм, минимальное — примерно 1,5 кОм. Как правило, на многих готовых модулях уже установлены подтягивающие резисторы сопротивлением 3,3 — 4,7 кОм.
В случае использование питания в 3.3V линии SDA и SCL можно подтянуть к питанию резисторами сопротивлением в 4,7 кОм.
Схема подключения шины I2C с подтягивающими резисторами сопротивления 3,3 — 4,7 кОм.
Напряжения высокого (HIGH) и низкого (LOW) уровней на линиях I2C не фиксированы! Они напрямую зависят от напряжения питания подключаемого модуля.
В случае подключения нескольких модулей к одной шине I2C подтягивающие сопротивления окажутся включенными параллельно и результирующее сопротивление такого себе, комплексного подтягивающего резистора, окажется достаточно низким (менее 1,5 кОм), что в свою очередь может негативно сказаться на работе модулей и шины в целом.
Поэтому, при подключении нескольких готовых модулей к одной шине I2C нужно осмотреть модули и оставить подтягивающие резисторы только на одном из модулей, а остальные — отпаять!
Адресация в шине I2C
Каждое устройство, подключённое к шине, может быть программно адресовано по уникальному адресу. В обычном режиме используется 7-битная адресация.
Шина I2C/TWI на процессоре Allwinner A64
Ядром одноплатного компьютера Banana Pi BPI-M64 является процессор Allwinner A64. Рассмотрим спецификацию Allwinner A64:
- Два контроллера интерфейса TWI
- Поддержка стандартного режима (до 100 Кбит/с) и быстрого режима (до 400 Кбит/с) передачи данных
- Роль ведущего(master)/ведомого(slaves) настраивается.
- Доступны транзакции с 10-битной адресацией
- Возможность работы в широком диапазоне входных тактовых частот
На самой плате разведено два интерфейса TWI:
- TWI0 — располагается на разъеме MIPI DSI display
- TWI1 — располагается на 40-контактном разъеме (типа Raspberry Pi 3 GPIO), к нему будем подключать датчики.
Датчик BME280
Модуль BME280 фирмы Bosch Sensortec предназначен для измерения атмосферного давления, температуры и влажности. По сравнению с первыми датчиками серии (BMP085 и BMP180) он имеет лучшие характеристики и меньшие размеры. Отличие от датчика BMP280 – наличие гигрометра, что позволяет измерять относительную влажность воздуха и создать на его основе маленькую метеостанцию.
Технические характеристики модуля BME280:
- Интерфейс: SPI, I2C;
- Напряжение питания: от 3,3 до 5 В;
- Диапазон измерений давления: 300-1100hPa;
- Диапазон измерений температуры: -40 — +85 °C;
- Диапазон измерений влажности: 0 — 100 %;
- Энергопотребление: режим измерений — 3.6 нА; в спящий режим: — 0.1 нА;
- Точность измерений:давление — 0.01 hPa ( < 10 cm). Температура — 0.01° C. Влажность – 3%.
Назначение контактов:
- VCC — питание модуля 3.3 В или 5 В;
- GND — Ground;
- SCL — линия тактирования (Serial CLock);
- SDA — линия данных (Serial Data).
Данный модуль работает по двухпроводному интерфейсу I2C, адрес по умолчанию 0x76.
Новое поколение датчиков BOSCH обладают низким энергопотреблением. Например, для сбора показаний влажности и температуры раз в секунду потребуется всего 1,8 мкА. Если нужно анализировать еще и давление, суммарный ток составит 3,6 мкА. В режиме сна датчик потребляет и вовсе 0,1 мкА.
Такая энергоэффективность позволяет использовать датчик в мобильных устройствах умного дома, которые годами питаются от одного литиевого элемента питания, например, CR2450.
Данный датчик емкостного типа, что заведомо делает его более точным, чем резистивные датчики типа DHT11.
DataSheet на датчик BME280 можно загрузить по ссылке BST-BME280_DS001-10 [PDF 1,84 МБ]
Датчик был куплен на площадке Aliexpress позиция BME280 3.3V лот BME280 5V 3.3V Digital Sensor Temperature Humidity Barometric Pressure Sensor Module I2C SPI 1.8-5V продавец SAMIORE Store в 2020 году за $1.97. Сейчас, на 23.04.2021 цена возросла до $9.50.
Схема подключения датчика BME280 к шине I2C
Исходя из схемы (Распиновка GPIO для Banana Pi BPI-M64) шина I2C располагается на контактах № 3 и 5. Контакт №3 — TWI1-SDA — передача данных. Контакт №5 — TWI1-SCL — синхронизация, время. На линию TWI1-SDA и TWI1-SCL установим подтягивающие резисторы сопротивлением 4,7 кОм к линии питания VCC.
Схема подключения датчика BME280 к шине I2C
Файл наложения устройств DTS для включения шины I2C
Как формируются файлы наложения устройств (DTS) можно почитать в публикации Работа с GPIO на примере Banana Pi BPI-M64. Часть 2. Device Tree overlays.
По умолчанию в основном дереве устройств sun50i-a64-bananapi-m64.dts есть узел для шины I2C, и он включен по умолчанию.
Узел i2c1-pins (из файла sun50i-a64-bananapi-m64.dts) по адресу «/soc/pinctrl@1c20800/i2c1-pins» содержит указания используемых контактов:
i2c1-pins { pins = "PH2", "PH3"; function = "i2c1"; bias-pull-up; phandle = <0x3b>; };
Узел i2c@1c2b000 (из файла sun50i-a64-bananapi-m64.dts) по адресу «/soc/i2c@1c2b000» содержит само устройство I2C:
i2c@1c2b000 { compatible = "allwinner,sun6i-a31-i2c"; reg = <0x1c2b000 0x400>; interrupts = <0x0 0x7 0x4>; clocks = <0x2 0x40>; resets = <0x2 0x2b>; pinctrl-names = "default"; pinctrl-0 = <0x3b>; status = "okay"; #address-cells = <0x1>; #size-cells = <0x0>; phandle = <0x88>; };
Как видно из примера, статус устройства status = «okay», означает что шина I2C включена, и можно подключать датчики. Но если будет выключена, то потребуется создать файл dts для включения шины I2C. На этот случай приведен пример такого файла.
Создадим файл DTS с названием: sun50i-a64-i2c1-on.dts:
/dts-v1/; /plugin/; / { compatible = "allwinner,sun50i-a64"; fragment@0 { target-path = "/aliases"; __overlay__ { i2c1 = "/soc/i2c@1c2b000"; }; }; fragment@1 { target = <&i2c1>; __overlay__ { pinctrl-names = "default"; pinctrl-0 = <&i2c1_pins>; status = "okay"; }; }; };
Рассмотрим параметры:
- pinctrl-0 = <&i2c1_pins> — ссылка на используемые контакты узла по адресу «/soc/pinctrl@1c20800/i2c1-pins».
- status = «okay» — задействует шину I2C на плате для подключения устройств
Разместим файл по пути /boot/dtb/allwinner/overlay . Затем компилируем файл .dts в .dtbo:
$ dtc -O dtb -o sun50i-a64-i2c1-on.dtbo sun50i-a64-i2c1-on.dts
Запустим утилиту конфигурирования платы: armbian-config . Перейдем по меню: System > Hardware, и включим слой (overlay): sun50i-a64-i2c1-on. После перезагрузки платы, шина I2C будет включена.
Поиск устройств на шине I2C
После включения шины I2C и подключения датчика BME280 необходимо убедиться что все работает и датчик отзывается. Для этого необходимо установить утилиту i2c-tools , которая производит поиск всех устройств подключенных к шине I2C.
Установка утилиты i2c-tools :
sudo apt-get update sudo apt-get install -y python-smbus sudo apt-get install -y i2c-tools
Формат команды поиска устройств на шине I2C: sudo i2cdetect -y 0 , где 0 — номер шины I2C (1,2,3,..). На 40-контактном разъеме (типа Raspberry Pi 3 GPIO) располагается TWI1, в которому подключили датчик BME280. Поэтому вызываемая команда будет выглядеть так: sudo i2cdetect -y 1 . Выполним поиск устройств на шине I2C порт «1»:
root@bananapim64:~# sudo i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- 76 -- root@bananapim64:~#
Шина I2C работает и датчик BME280 по адресу 0x76 найден. Теперь можно переходить к формированию файла DTS для чтения значений самого датчика.
Файл наложения устройств DTS для датчика BME280
В Armbian уже есть драйвер для датчика BME280, поэтому все что требуется, это создать файл описания устройства в формате DTS, скомпилировать его в формат DTBO, и перезагрузить одноплатный компьютер.
Драйвера для Linux, в том числе и для BME280 располагаются по пути: /lib/modules/$(uname -r)/kernel/drivers/ . Убедимся в наличие драйвера, командой:
find /lib/modules/$(uname -r)/kernel/drivers/ -iname "*bmp280*"
Результат выполнения:
root@bananapim64:~# find /lib/modules/$(uname -r)/kernel/drivers/ -iname "*bmp280*" /lib/modules/5.10.12-sunxi64/kernel/drivers/iio/pressure/bmp280.ko /lib/modules/5.10.12-sunxi64/kernel/drivers/iio/pressure/bmp280-spi.ko /lib/modules/5.10.12-sunxi64/kernel/drivers/iio/pressure/bmp280-i2c.ko root@bananapim64:~#
Из результата видно наличие драйвера bmp280.ko для интерфейса SPI и I2C, можно продолжать настройку.
Для получения детальной информации о драйвере необходимо выполнить команду: modinfo bmp280 .
Результат выполнения:
root@bananapim64:~# modinfo bmp280 filename: /lib/modules/5.10.12-sunxi64/kernel/drivers/iio/pressure/bmp280.ko license: GPL v2 description: Driver for Bosch Sensortec BMP180/BMP280 pressure and temperature sensor author: Vlad Dogaru <vlad.dogaru@intel.com> depends: industrialio intree: Y name: bmp280 vermagic: 5.10.12-sunxi64 SMP mod_unload aarch64 signat: PKCS#7 signer: sig_key: sig_hashalgo: md4 root@bananapim64:~#
Создадим файл DTS с названием: sun50i-a64-i2c1-bme280.dts (на основе примера bmp085.yaml):
/dts-v1/; /plugin/; / { compatible = "allwinner,sun50i-a64"; fragment@0 { target-path = "/aliases"; __overlay__ { i2c1 = "/soc/i2c@1c2b000"; }; }; fragment@1 { target = <&i2c1>; __overlay__ { pinctrl-names = "default"; pinctrl-0 = <&i2c1_pins>; status = "okay"; bme280@76 { compatible = "bosch,bme280"; reg = <0x76>; status = "okay"; }; }; }; };
Рассмотрим параметры:
- pinctrl-0 = <&i2c1_pins> — ссылка на используемые контакты узла по адресу «/soc/pinctrl@1c20800/i2c1-pins»;
- status = «okay» — включает устройство;
- compatible = «bosch,bme280» — подключаемый драйвер для устройства.
- reg = <0x76> — адрес устройства на шине I2C: 0x76;
Разместим файл по пути /boot/dtb/allwinner/overlay . Затем компилируем файл .dts в .dtbo:
$ dtc -O dtb -o sun50i-a64-i2c1-bme280.dtbo sun50i-a64-i2c1-bme280.dts
Запустим утилиту конфигурирования платы: armbian-config . Перейдем по меню: System > Hardware, и включим слой (overlay): sun50i-a64-i2c1-bme280. После перезагрузки платы, по пути /sys/bus/i2c/devices появится устройство 1-0076 , которое соответствует датчику BME280.
Результат выполнения:
root@bananapim64:~# cd /sys/bus/i2c/devices root@bananapim64:/sys/bus/i2c/devices# ls -l total 0 lrwxrwxrwx 1 root root 0 Apr 24 13:46 1-0076 -> ../../../devices/platform/soc/1c2b000.i2c/i2c-1/1-0076 lrwxrwxrwx 1 root root 0 Apr 24 13:46 i2c-1 -> ../../../devices/platform/soc/1c2b000.i2c/i2c-1 lrwxrwxrwx 1 root root 0 Apr 24 13:46 i2c-2 -> ../../../devices/platform/soc/1ee0000.hdmi/i2c-2 root@bananapim64:/sys/bus/i2c/devices#
Подсистема Linux Industrial I/O (промышленный ввод/вывод)
Драйвер для BME280 использует подсистему Linux Industrial I/O (промышленный ввод/вывод). IIO — это подсистема ядра Linux для аналого-цифровых преобразователей (АЦП), цифро-аналоговых преобразователей (ЦАП) и различных типов датчиков. Может использоваться на высокоскоростных промышленных устройствах. Она, также, включает встроенный API для других драйверов.
Подсистема Industrial I/O Linux предлагает унифицированную среду для связи (чтения и записи) с драйверами, охватывающими различные типы встроенных датчиков и несколько исполнительных механизмов. Он также предлагает стандартный интерфейс для приложений пользовательского пространства, управляющих датчиками через sysfs и devfs.
Вот несколько примеров поддерживаемых типов датчиков в IIO:
- АЦП/ЦАП
- акселерометры
- магнетометры
- гироскопы
- давление
- влажность
- температура
- дальнометры
Поддерживаются устройства ввода данных (HID-устройства), взаимодействующие с человеком:
- Клавиатура
- Мышь
- Сенсорный экран
- Джойстик
Более подробно ознакомится с IIO можно в публикации Linux Industrial I/O Subsystem. Так же есть перевод на ресурсе Хабр — Нам нужно поговорить про Linux IIO.
Каждое устройство типа IIO регистрируется в каталоге по пути /sys/bus/iio/devices с именем iio:device0 , iio:device1 , iio:device2 , и т.д.
Таким образом датчик BME280 доступен по путям: /sys/bus/i2c/devices/1-0076/iio:device0 и /sys/bus/iio/devices/iio:device0 .
Чтение значений датчика BME280
Читать значения датчика будем по пути /sys/bus/i2c/devices/1-0076/iio:device0 .
Рассмотрим структуру каталога:
root@bananapim64:~# tree /sys/bus/i2c/devices/1-0076/iio:device0 /sys/bus/i2c/devices/1-0076/iio:device0 ├── dev ├── in_humidityrelative_input ├── in_humidityrelative_oversampling_ratio ├── in_pressure_input ├── in_pressure_oversampling_ratio ├── in_temp_input ├── in_temp_oversampling_ratio ├── name ├── of_node -> ../../../../../../../firmware/devicetree/base/soc/i2c@1c2b000/bme280@76 ├── power │ ├── autosuspend_delay_ms │ ├── control │ ├── runtime_active_time │ ├── runtime_status │ └── runtime_suspended_time ├── subsystem -> ../../../../../../../bus/iio └── uevent 3 directories, 14 files root@bananapim64:~#
Для нас представляет интерес файлы: in_humidityrelative_input, in_pressure_input, in_temp_input.
Файл /name содержит название датчика для идентификации:
Результат выполнения:
root@bananapim64:~# cat /sys/bus/i2c/devices/1-0076/iio:device0/name bme280 root@bananapim64:~#
Рассмотрим значения доступные для чтения:
- in_humidityrelative_input — относительная влажность в миллипроцентах (МИЛЛИ — приставка в сложных названиях единиц физ. величин, означающая уменьшение основной единицы измерения в 1000 раз);
- in_pressure_input — атмосферное давление, первое значение до точки в килопаскалях (кПа). 1 мм. рт. ст. равен 133,32 Паскаль;
- in_temp_input — температура в милли градусах Цельсия.
Прочитаем все доступные значения:
root@bananapim64:~# cd /sys/bus/i2c/devices/1-0076/iio:device0 root@bananapim64:/sys/bus/i2c/devices/1-0076/iio:device0# cat in_humidityrelative_input 28491 root@bananapim64:/sys/bus/i2c/devices/1-0076/iio:device0# cat in_pressure_input 100.368437500 root@bananapim64:/sys/bus/i2c/devices/1-0076/iio:device0# cat in_temp_input 25850 root@bananapim64:/sys/bus/i2c/devices/1-0076/iio:device0#
По результатам замера получается, что в комнате:
- Относительная влажность: in_humidityrelative_input = 28491 / 1000 = 28,491 %;
- Атмосферное давление: in_pressure_input = 100.368437500 * 1000 = 100368,437500 (Pa,Па) или 100368,437500/133,32 = 752,83 мм. рт. ст.;
- Температура: in_temp_input = 25850 / 1000 = 25,850 градусов Цельсия.
Решение проблем
Если получить значения от датчика BME280 не удалось, то выполните следующие действия:
- До подключение датчика BME280 рекомендуется его подключить к Arduino или другой Arduino-совместимой плате. После успешного тестирования и получения корректных данных можно подключать к одноплатному компьютеру.
- После подключения датчика необходимо выполнить сканирование устройств на шине I2C командой: sudo i2cdetect -y 0 , где 0 — номер шины I2C (1,2,3,..). Адрес датчика должен быть в таблице. Если в таблице отсутствует адрес датчика, то необходимо проверить физическое подключение датчика, возможно были перепутаны провода подключения.
- Если адрес датчика есть в таблице, то можно включать слой DTS с драйвером для BME280.
- После включения слоя DTS для BME280 и перезагрузки выполните сканирование шины I2C:
root@bananapim64:/sys/bus/i2c/devices/1-0076/iio:device0# sudo i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- UU -- root@bananapim64:/sys/bus/i2c/devices/1-0076/iio:device0#
Адрес датчика должен быть заменен на UU, это говорит что датчик был задействован операционной системой. После этого, показания датчика должны быть доступны.
- Выполните команду: lsmod | grep i2c Результат выполнения , должен содержать информацию о загруженном драйвере:
root@bananapim64:~# lsmod | grep i2c bmp280_i2c 16384 0 bmp280 24576 2 bmp280_i2c,bmp280_spi i2c_mv64xxx 24576 0 root@bananapim64:~#
- Если ничего из выше перечисленного не помогло, то проблема либо с подтягивающими резисторами, либо датчик просто нерабочий. Итоговое сопротивление линий SCL, SDA не должно быть менее 1,5 кОм. Необходимо отпаять лишние резисторы и снова подключить датчик.
TODO: добавить подключение датчиков BMP085, BMP180, и BMP280.
Файлы DTS для подключения датчиков компании Bosch Sensortec BMP085, BMP180, BMP280, BME280 и другие файлы наложения дерева доступны в каталоге GitHub Banana-Pi-BPI-M64/dt-overlays/
Литература
- I²C — Википедия
- Raspberry Pi. Работа с портами ввода-вывода GPIO — MicroTechnics.ru
- Raspberry Pi. Настройка и использование шины I2C. — MicroTechnics.ru
- Шина I2C. Основные понятия — Radio Prog
- Знакомство с шиной I2C в Raspberry Pi, работаем с ADC-DAC PCF8591 на Python — Ph0en1x.net
- Интерфейс I2C по-русски: особенности аппаратной и программной реализации шины, плюсы и минусы — kmpu.ru
- Подтяжка линии I2C — Zelectro
- Bosch Sensortec BME280 sensor driver — GitHub BoschSensortec/BME280_driver
- bmp085.yaml — GitHub torvalds/linux
- Linux Industrial I/O Subsystem — Wiki Analog Devices
- Нам нужно поговорить про Linux IIO — maquefel Хабр
- Building a Linux system for the STM32MP1: connecting an I2C sensor — bootlin Thomas Petazzoni Posted onMay 20, 2019
- Взаимодействие BME280, датчика температуры, влажности и давления, с Arduino — Radio Prog
- BME280, ардуино и BluePill — neirogeek hobbyprojects.home.blog
- Датчик атмосферного давления, влажности и температуры BME280 — 3DiY
- BME280 — датчик атмосферного давления, влажности и температуры — СЕРГЕЙ блог rchip