Доплеровский датчик движения RCWL-0516 — способен определять движение объектов (препятствий), которые полностью или частично отражают радиоволны (люди, животные, металлы и т.д.), даже если они находятся за деревом (дверью), стеной (гипс, бетон), пластиками, стеклами и т.д. Стоит такой 33 рубля. Ссылка на модуль
2) Wi-Fi модуль с антенной за 168 рублей
Радиомодуль WiFi Serial ESP8266 необходим для того, чтобы управлять устройством дистанционно или чтобы снимать показания с сенсоров через интернет. Также он позволяет подключить гаджеты к социальным сетям или получать данные через API от веб-сервисов. Стоит набор на данный момент 168 руб. Ссылка
3) Переходник USB Type-C/DIP за 27 руб.
Переходая плата для проектов Arduino (Ардуино) для соединения электронных устройств. Плата содержит разъем USB type C и выводы на контакты шагом 2.54 мм. Стоит такой модуль на данный момент 27 руб.Ссылка
4) Разъём для наушников за 26 руб.
Модуль для наушников 3,5 мм с контактами. Стоит 26 руб. Ссылка
5) Модуль защиты аккумуляторов за 26 руб.
BMS-платы — платы, предназначенные для защиты аккумуляторов. Такие платы могут защищать аккумулятор от переразряда, больших токов потребления, коротких замыканий и тд. Стоит модуль на данный момент 26 руб.Ссылка
6) Понижающий стабилизатор
Плата AMS1117- 3.3 позволяет понизить напряжение 4,6-12 вольт в стабилизированное 3.3 вольта.Стоит такой 35 руб.Ссылка
7) Отсек для батареек
Батарейный блок на 4 AA. Стоит около 70 руб.. Ссылка
8) USB светильник
Модуль USB светильника с 3 светодиодами. Стоит 1 штука 37 руб.Ссылка
9) Датчик напряжения
Модуль Voltage Sensor – специальный модуль, созданный для удобного измерения напряжения без пайки. На модуле реализован резистивный делитель напряжения с коэффициентом 1:5, то есть на входе модуля напряжение может изменяться от 0 до 25 В, а на выходе оно будет пропорционально распределено по отрезку от 0 до 5 В. Стоит такой 38 руб.Ссылка
10) Повышающий преобразователь
Модуль повышающего DC-DC преобразователя из 3.7В в 5В/8В/9В/12В. Стоит такой 39 руб. Ссылка
11) ИК-модуль
Модуль ИК приёмника KY-022 на базе VS1838B представляет собой высокочувствительный приёмник инфракрасных сигналов. Совместим с широким спектром устройств, позволяя управлять различной техникой (робототехникой) с помощью ИК-пульта. Стоит 39 руб.ссылка
12) Пищалка
Пьезоизлучатель – это компактный модуль на плате, который преобразует электрические колебания в звук. Его отличие от обычного электромагнитного динамика состоит в том, что он может подключаться к микроконтроллеру Ардуино напрямую без использования электронного усилителя. В сравнении с активным пьезоизлучателем данный тип требует дополнительной установки генератора колебаний с частотой, находящейся внутри диапазона 2 – 5 кГц.
Питание на пассивный пьезоизлучатель можно подавать в диапазоне от 3.3 до 5 В. Если вы часто будете использовать пьезоизлучатель на максимальном пределе питания, это приведёт к искажению звука и быстрому износу модуля. Стоит такой 39 руб. Ссылка
13) Датчик уровня воды (жидкости)
Датчик предназначен для определения уровня воды в различных емкостях, с целью предупреждения перенаполнения емкости водой через критическую отметку. Имеет погружаемый тип установки. Cнятие показателей уровня воды производится при помощи аналогового анализа сопротивления. Стоит 42 рубля. ссылка
14) Датчик вибрации
Модуль изготовлен на базе датчика вибрации SW-420, который представляет из себя два контакта, замыкающиеся металлическим шариком при встряске. Операционный усилитель LM393, установленный на плате и включенный по схеме компаратора, служит для устранения дребезга и реализации регулировки чувствительности датчика.Стоит такой 44 рубля. Ссылка
15) Индикатор ёмкости акб
Модуль с индикатором уровня зарядки АКБ 12.6V. Стоит 49 руб. Ссылка
16) Контроллер
Эта плата построена на основе контроллера STM32F103C8T6, работающего на ядре ARM Cortex-M3, еще часто эту плату называют Maple Mini или Blue Pill. Мощное ядро способно работать на частоте до 72 МГц с производительностью до 1,25 DMips, то есть этот микроконтроллер мощнее типовой Arduino более чем в 5,5 раз. Всего у данного микроконтроллера 64 Кб памяти программ и 20 Кб ОЗУ - теперь можно не экономить на строках. Стоит такой 94 рубля.Ссылка
17) Модуль RTC часов
RTC DS3231 часы специально спроектированы для подключения к контроллеру Raspberry Pi, но они так же легко подключаются и работают с Ардуино. В RTC модуле можно настроить два будильника. Питание модуля DS3231, может находиться в пределах 2,5 - 5,5 В. Напряжение внешнего источника питания постоянно отслеживается микросхемой DS3231 и при падении ниже 2,5 В, часы переходят на питание от встроенной батареи. Стоит такой модуль около 160 руб. Ссылка
18) Вольтметр
Модуль вольтметра для различной робототехники и других электронных самоделок с синими цифрами. Стоит 54 руб. Ссылка
19) Контроллер
Контроллер для сборки питания на основе элементов 18650. 5V 2.4A. Стоит такой около 107 руб.Ссылка
20) RFID-модуль
Радиочастотная идентификация (RFID) — это технология бесконтактной идентификации объектов при помощи радиочастотного канала связи. Идентификация объектов производится по уникальному идентификатору, который имеет каждая электронная метка. Стоит такой набор 89 руб. Ссылка
21) Bluetooth модуль
JDY-62 -Bluetooth 4.0 стерео аудио модуль с рабочим напряжением 5В. Стоит 75 руб. Ссылка
22) Ультразвуковой дальномер
Ультразвуковой датчик расстояния (дальномер) HC-SR04 - может измерять расстояние при помощи ультразвука. TX сенсор излучает ультразвуковой импульс, который отражается от препятствия и принимается RX сенсором. Расстояние вычисляется по времени прохождения ультразвука от TX передатчика -> препятствие -> к RX приемнику. Скорость звука при температуре 20° C составляет 1235 км/ч или 343 м/с. При программировании датчика расстояния? нужно полученный результат поделить на 2. Так как ультразвук сначала движется до препятствия, а потом отразившись от него движется назад. То есть он преодолевает одно и тоже расстояние 2 раза. Еще стоит учитывать влажность воздуха и его температуру, скорость ультразвука изменяется в зависимости от этих параметров. Стоит такой 62 рубля. Ссылка
23) Модуль GSM, GPRS
Миниатюрный модуль GSM/GPRS сотовой связи на основе компонента SIM800L. Стандартный интерфейс управления компонента SIM800L предоставляет доступ к сервисам сетей GSM/GPRS 850/900/1800/1900МГц для отправки звонков, СМС сообщений и обмена цифровыми данными GPRS. Поставляется с встроенной антенной, также можно подключить дополнительные антенны для улучшения качества сигнала.
Управлять модулем можно при помощи персонального компьютера через преобразователь интерфейса USB-UART или непосредственно через UART модулем микроконтроллера самостоятельной разработки или Arduino, Raspberry Pi и аналогичными. Стоит такой 177 руб. Ссылка
24) Модуль камеры
Камера для установки на различных роботов, машинок и тд. Стоит 102 рубля. Ссылка
25) Микрофон с усилителем MAX9814
МАХ9814 - это устройство которое состоит из электретного микрофона и малошумящего микрофонного усилителя с автоматической регулировкой усиления (АРУ). Коэффициент усиления arduino микрофона можно настроить при помощи входа GAIN. Если оставить вход не подключенным, то активируется максимальное усиление 60 дБ. При подключении к входу сигнала GND, получим усиление 50 дБ. И минимальное усиление в 40 дБ можно получить подав на вход Gain напряжение питания. Также можно отрегулировать соотношение Attack/Release - время срабатывания/время восстановления АРУ. Подключив пин AR к VDD получим соотношение 1:2000ms. Оставив вывод открытым, получим 1:4000ms. Подключив вход на GND, получим минимальное время спада 1:500ms. Время запуска АРУ не изменяется и всегда в пределах 30 мс. Стоит 130 руб. ссылка на микрофон.
Часть 1 в этом обзоре не будет разбираться детально, в Сети много статей на эту тему. Вот пример расширенной установки Debian на диск с Windows. Самые важные моменты, когда Windows уже установлена на SSD:
выбрать раздел "basic data NTFS" с Windows и уменьшить его, чтобы на освободившемся месте создать новый раздел и установить Debian
установить Grub для мульти загрузки
grub multiboot
Для части 2 устанавливаем portable версию CrystalDiskMark и запускаем с параметрами по умолчанию, результат:
Часть 4 - результаты. Приведём результаты тестов fio (результаты под Windows на скрине Части 2):
1 Read | 2 Write
1.1 2527MB/s | 2.1 1882MB/s
1.2 2137MB/s | 2.2 1847MB/s
1.3 824MB/s | 2.3 787MB/s
1.4 46.1MB/s | 2.4 157MB/s
Итог: замеры скорости SSD утилитами CrystalDiskMark и fio практически идентичны. Разница в несколько MB/s (или даже в 10-20 MB/s) допускается даже в пределах одного эксперимента. Выше результаты только на тестах х.3 для fio под Debian. Тут можно предположить следующее: либо повезло в лучшую сторону, либо более совершенная реализация драйвера под Линукс. Также можно предположить, что реализация глубины очереди iodepth (количества потоков ввода/вывода) под Линукс работает эффективнее в случаях синхронного чтения/записи.
Еще примеры использования fio можно посмотреть, например, по ссылке.
Если сейчас приехать в пункт приема металлолома, то можно обнаружить просто огромные кучи различных телефонов и прочих электронных «отходов», которые стоят под открытым небом и ждут, когда придёт их черёд окончательного разложения. Однако при ближайшем рассмотрении выясняется, что многие девайсы оказываются полностью рабочими даже после недельного лежания под палящим солнцем и проливными дождями, а сдали их в чермет по причинам «не нужен, надоел, купил новый» и т. п. Я не считаю это правильным, ведь даже в простые кнопочные звонилки имеется возможность вдохнуть новую жизнь, если знать один интересный, но малоизвестный факт: для них можно писать нативные приложения на C и использовать железо телефона в своих целях. А это, на минуточку, как минимум: дисплей с подсветкой, вибромотор, динамик, клавиатура и GSM-радиомодуль с возможностью выхода в сеть. Сегодня мы с вами: узнаем, на каких аппаратных платформах работают китайские телефоны, какие существуют программные платформы и где взять для них SDK, а в практической части мы напишем 2D-игру с нуля, которая будет работать на многих китайских кнопочниках. Интересно? Тогда жду вас под катом!
Содержание:
Не J2ME едины
Аппаратные ресурсы
Кроссплатформенный рантайм
Кроссплатформенный рантайм: Win32
Кроссплатформенный рантайм: MRE
Кроссплатформенный рантайм: VXP
Наконец-то пишем игру
Тестируем на реальных девайсах
Заключение
❯ Не J2ME едины
Думаю, многие мои читатели помнят о такой платформе, как J2ME. Java-приложения стали фактически основной возможностью расширения функционала телефонов в 2000-х годах. API для них был достаточно хорошо стандартизировано, программы не зависели от архитектуры процессора и ОС устройства, а порог вхождения для написания собственных приложений был довольно низкий и даже новички могли за пару дней написать свою игрушку или какое-нибудь GUI-приложение!
Однако не одним J2ME мы были едины: существовало множество платформ, которые так или иначе пытались занять нишу Java на рынке. Некоторые из них я упоминал в своей прошлой статье о написании 3D-игры под Sony Ericsson с нуля: например, была такая платформа на телефонах Sony Ericsson серии T, как Mophun, а CDMA-телефонами с чипсетами Qualcomm использовалась нативная платформа BREW. Пожалуй, я не буду упоминать о .sis и .cab — поскольку это форматы нативных приложений для смартфонов, а не простых «фичефонов».
В какой-то момент, ближе к 2006-2007 году, прилавки российских официальных ритейлеров (по большей части это были телефоны Fly) и неофициальных продавцов на рынках заполонили различные китайские телефоны, которые предлагали какой-то немыслимый функционал для тех лет за копейки, да ещё и визуально напоминали флагманские модели известных брендов. Пожалуй, одним из самых популярных таких телефонов была Nokla TV E71/E72 (да, именно «нокла»), вышедшая примерно в 2008 году и производившаяся аж до 2011 года! За 2-3 тысячи рублей (это менее 100 баксов), пользователь получал здоровый 2.4" дисплей с разрешением 240x320 весьма неплохого качества (когда в те годы многие продолжали ходить с 176x220), да ещё и с тачскрином, гироскоп, огромный громкий динамик (пусть и не очень качественный), поддержку SD-карточек до 32Гб, нередко фронтальную камеру, а также премиальный дизайн с вставками из алюминия. Частенько китайцы заботливо клали в коробку ещё чехольчик и дополнительный аккумулятор :)
Были даже полные копии существующих устройств от Nokia. Особенно китайцы любили подделывать массовые модели на S40: они были очень популярными и китайцы хотели откусить свой кусок рынка у Nokia. Пусть и рынка серого импорта — очевидно, в салонах связи подделки никто не продавал:
Но была и ложка дёгтя в этой бочке меда: китайские телефоны очень часто не имели поддержки Java, из-за чего многие пользователи разочаровывались в них из-за отсутствия возможности установить необходимые им приложения. Никакой тебе оперы, аськи, игр… Скорее всего, это связано с необходимостью отчислений Sun, а также разработчикам реализации J2ME-машины (JBed/JBlend) и установки чипа флэш-памяти чуть большего объёма.
Но многие пользователи не знали, что такие девайсы не просто поддерживали сторонние приложения, но и умели выполнять настоящие нативные программы, написанные на полноценном C! Всему помешала китайская костыльность и тотальная закрытость. Платформа предполагалась для работы на внутреннем рынке. Для вызова менеджера нативных приложений необходимо было вводить специальный инженерный код в номеронабирателе, предварительно скопировав приложение в нужную папку, а SDK долгое время было платным и доступно только для компаний из Китая. Кроме того, далеко не все приложения могли запустить на конкретном девайсе — были серьезные проблемы с совместимостью.
Всё как вы любите: HiTech-девайсы на фоне ковра, который старше автора лет на 30 :)
В ранних китайских телефонах использовалась платформа Mythroad (MRP, MiniJ) от китайской компании SkyWorks, которая лицензировала свою технологию производителям чипсетов. Поддержку MRP можно было встретить на телефонах с чипсетами MediaTek, Spreadtrum, а также MStar (и возможно Coolsand). Mythroad предоставлял некоторое API для работы с железом телефона и разработки как UI-приложений, так и игр, кроме того, Mythroad позволял хранить ресурсы в одном бинарнике с основной программой и даже имел какой-то интерпретируемый язык помимо возможности запуска нативного кода. Для работы таких приложений необходимо было скопировать менеджер приложений dsm_gm.mrp и игру в папку mythroad во внутренней памяти устройства или на флэшке, а затем набрать в номеронабирателе код *#220807#, иногда при отключенной первой SIM-карте. Костыльно? Костыльно! Откуда об этом знать среднестатистическому пользователю? Не откуда! Но работало!
Эта платформа поддерживалась на большинстве подделок под брендовые устройства Nokia, Sony Ericsson и Samsung, а также iPhone и на многих китайских кнопочных телефонах 2008-2010 годов.
Ближе к 2010 году MediaTek разработала свою собственную платформу, которая должна была заменить MRP — WRE (VXP). Эта платформа была гораздо шире с точки зрения функционала (например, был доступ к UART) и её API был вполне удобно читаем для программиста, а SDK свободно доступен для всех. Один нюанс всё портил — приложения без подписи привязывались к IMSI (даже не IMEI) симки в девайсе и на некоторых девайсах требовали переподписания под каждую конкретную SIM или патчинг дампа оригинальной прошивки телефона на отключение проверки подписи. Эта платформа поддерживалась на многих кнопочниках и смарт-часиках 2010-2020 годов: к ним относятся новодельные телефоны Nokia, телефоны DNS и DEXP, Explay и т. п. Для запуска приложений достаточно было выбрать файл с разрешением VXP в проводнике и просто запустить его. Но с совместимостью всё равно имелись проблемы: если запустить VXP для версии 2.0 и выше, мы получим лишь белый экран. Ну хоть не софтресет, и на том спасибо!
Далеко не все такие часы поддерживают MRE, смотреть нужно от устройства к устройству
❯ Аппаратные ресурсы
Большинство китайских кнопочных телефонов работает на базе одних и тех же чипсетов. В конце нулевых чаще всего использовались чипсеты MT6225, SC6520 и некоторые чипы от Coolsand. Средние хар-ки девайса были следующими:
Процессор: ARMv5 ядро на частоте ~104МГц, ARM926EJ-S. Нет FPU, есть Thumb. Большую часть процессорного времени программа могла забрать себе.
ОЗУ: ~4Мб SDRAM. Программам было доступно 512Кб-1Мб Heap'а. Это, в целом, довольно немало для большинства применений.
Флэш-память: ~32Мб, пользователю доступно пару сотен килобайт. Да, вы не ослышались, килобайт! Однако можно без проблем использовать MicroSD-флэшки до 32Гб.
Дисплей: от 128x128 до 320x480, почти всегда есть 18-битный цвет (262.000 цветов), в случае TV E71/E72 используется очень неплохая TN-матрица с хорошими углами обзора и яркой подсветкой. Иногда есть тачскрин.
Звук: громкий динамик, наушники.
Аккумулятор: ~800мАч, на некоторых девайсах может быть и 2.000мАч, а то и больше!
Ввод: клавиатура, иногда была поддержка QWERTY.
Внешние шины: почти всегда был доступен UART, причём его можно было свободно взять прямо с платы — он был явно подмечен! Взять GPIO с проца не выйдет (кроме, возможно, вибромотора), SPI и I2C также напрямую недоступны. Внешние шины можно реализовать с помощью UART через GPIO-мост из микроконтроллера.
В итоге мы получаем очень неплохие характеристики для устройства, которое сочетает в себе сразу всё. На базе такого девайса можно сделать и сигнализацию, и HMI-дисплей с интерфейсом для управления каким-нибудь устройством, и игровую консоль с эмуляторами… да на что фантазии хватает! И это за какие-то 200-300 рублей, если мы говорим о б/у устройстве или 600 рублей, если говорим о новом. Это дешевле, чем собирать девайс с подобным функционалом самому из готового МК (например, RP2040) и отдельных модулей. Кстати, дешевые 2.4" дисплеи на алике — это ни что иное, как невостребованные остатки дисплеев для подобных китайских телефонов на складах! А вы думали, откуда там значки на тачскрине снизу?
Однако в рамках данной статьи мы не будем ограничиваться лишь теорией и на практике напишем примитивную 2D-игрушку, которая будет работать сразу на трех платформах без каких-либо изменений в коде самой игры: Windows, MRP (Mythroad) и VXP. Но для того, чтобы достигнуть такого уровня абстракции от платформы, нам необходимо написать рантайм, который оборачивает все необходимые платформозависимые функции для нашей игры.
Игрушка будет простой: 2D скролл-шутер с видом сверху, а-ля Asteroids. Летаем по космосу, и стреляем по враждебным корабликам, стараясь не попасть под вражеские лазеры. Всё просто и понятно :)
❯ Практическая часть: Кроссплатформенный рантайм
Итак, что нам необходимо от абстракции для такой простой игры? Давайте посмотрим:
Графика: очистка экрана, отрисовка спрайтов с прозрачностью (без альфа-блендинга, только колоркей), отрисовка текста. При возможности, желательно использовать нативное API системы для рисования графики, а не городить собственный блиттер. Формат пикселя фиксирован: RGB565 (65к цветов).
Ресурсы: хранятся в одном образе с основной игрой. Фактически, все ресурсы упакованы в виде обычных массивов байт в заголовочных файлах. Я пользуюсь вот этой тулзой для конвертации спрайтов в массивы байтов.
Звук: воспроизведение хотя-бы одного WAV-потока. Почему одного? Потому что далеко не на всех платформах есть доступ к аппаратному микшеру… да и вообще не везде есть прямой доступ к PCM (привет MRP), иногда разработчики ограничиваются лишь одним каналом для WAV-звука без возможности воспроизведения нескольких аудиофайлов одновременно.
Ввод: абстракция от клавиатуры классического моноблока: стрелки, OK, левый и правые софткеи.
Стандартная библиотека: не на всех платформах можно вызывать функции напрямую из stdlib. Как минимум в MRP и, например, «эльфах» для Motorola, нет возможности вызывать аллокатор, rand и некоторые другие функции из обычных заголовочников стандартной библиотеки. На таких платформах, системные инклуды дефайнами подменяют стандартные функции на своих реализации:
#define malloc system_alloc
#define free system_free
Но если у нас игра кроссплатформенная, то и платформозависимые инклуды мы использовать не будем.
Выглядит всё достаточно просто, верно? Примерно такого набора функций хватит для нашей игры:
❯ Win32
Давайте же перейдем к реализации рантайма на каждой платформе по отдельности. Начнём с Win32, поскольку адекватно отлаживать игру можно только на ПК.
На десктопе у нас будет фиксированное окно 240x320, в качестве GAPI будет использоваться аппаратно-ускоренный OpenGL, а для обработки ввода будет использоваться классически GetAsyncKeyState. Реализация точки входа, создания окна и инициализации контекста GL и главного цикла приложения у нас такая:
Реализация отрисовки спрайтов очень примитивная — OGL 1.0, полностью FFP, вся отрисовка — это 2 треугольника, формирующие квад. Спрайт заливается при первом использовании в текстуру, последующие кадры реюзается уже готовая текстура. Фактическая реализация всего рендерера — т. е. функций для рисования «просто картинок», без поддержки атласов, блендинга цветов (З.Ы - длинные листинги будут на пастбине, на Пикабу нет нормального тега для кода):
С вводом тоже всё просто. Есть биндинг кнопок клавиатуры к кнопкам на кейпаде телефона. inGetKeyState предполагается вызывать один раз за кадр, поэтому функция опрашивает ОС о состоянии нажатых кнопок на клавиатуре и назначает состояние виртуальных кнопок относительно состояния физических кнопок на клавиатуре.
Результат:
❯ MiniJ
Переходим к реализации рантайма для первой китайской платформы — MRP. Обратите внимание — я использую нативное API платформы для рисования спрайтов. Связано это с тем, что софтварный блиттер работает невероятно медленно даже с прямым доступом к скринбуферу устройства, а в чипсете предусмотрена отдельная графическая подсистема с командбуфером для быстрой отрисовки примитивов и графики:
SDK для MRE можно найти здесь (SKYSDK.zip): оно уже пропатчено от необходимости покупки лицензии. MRP не развивается более 10 лет, поэтому, думаю, его можно считать Abandonware. Компилятор находится в compiler/mrpbuilder.NET1.exe. За китайские SDK в публичном доступе нужно поблагодарить пользователя 4pda AjlekcaHgp MejlbHukoB, который раздобыл их на всяких csdn и выложил в свободный доступ :)
У MRP собственная система сборки, основанная на конфигурациях. Поскольку MRP может работать на устройствах с разными платформами и размерами дисплеев, под каждую можно настроить свой конфиг, который пережмет ресурсы в нужный формат. Дабы ничего не ломать, я заюзал абсолютные пути:
Компиляция приложения:
mrpbuilder.net1.exe game.mpr
Начинаем с функций обработки событий и инициализации, которые вызывает рантайм при старте приложения: mrc_init вызывается при старте приложения, а mrc_event при возникновении события. Вся инициализация очень простая: создаём таймер для обновления и перерисовки состояния игры и вызываем инициализацию игры:
С вводом тоже никаких проблем нет, нажатия кнопок прилетают как события в mrc_event. Переводим кейкоды MRE в наши кейкоды и сохраняем их состояние:
Опять же, отлаживать MRP-приложение под реальным устройством проблематично, поэтому платформозависимый код должен быть минимальным. Кроме того, обратите внимание, что некоторые функции в MRP зависят от библиотек-плагинов. Линкер слинкует вашу программу, но на реальном устройстве их вызов вывалится в SIGSEGV и софтресет устройства. Также нельзя использовать ничего из стандартной библиотеки именно в стандартных заголовочниках (т. е. stdlib.h, string.h и т. д.), часть стандартной библиотеки реализовывается MRP и дефайнится в mrc_base.h
Что интересно, защиты памяти толком нет. Если приложение падает в SIGSEGV или портит память — систему, судя по всему, ребутит Watchdog. Защиты памяти никакой, можно напрямую читать и писать в память ядра, а также писать в регистры периферии чипсета. jpegqs, покумекаем над этим? :)
Переходим к рендереру. Тут буквально две функции, gClearScreen очищает экран, а gDrawBitmap рисует произвольный спрайт с форматом пикселя RGB565. В качестве ROP используется BM_TRANSPARENT — таким образом, mrc_bitmapShowEx будет использовать левый верхний пиксель в качестве референсного цвета для реализации прозрачности без альфа-блендинга.
voidgDrawBitmap(CBitmap* bmp, int x, int y) {
mrc_bitmapShowEx((uint16*)bmp->pixels, x, y, bmp->width, bmp->width, bmp->height, BM_TRANSPARENT, 0, 0);
}
Да, всё вот так просто. Рантайм теперь запускается на реальных китайских девайсах и работает стабильно.
❯ VXP
Теперь переходим к VXP — платформе не менее неоднозначной, чем MRP. Пожалуй, начать стоит с того, что VXP существует аж в трёх версиях: MRE 1.0, MRE 2.0 и MRE 3.0. В MRE 2.0 и выше появилась поддержка плюсов (в MRE 1.0 только Plain C) и довольно интересного GUI-фреймворка, MRE 1.0 же предлагает реализовывать гуй самому. Платформа распространена на большинстве кнопочных телефонов и смарт-часиков на чипсетах MediaTek, примерно начиная с 6235 и заканчивания 6261D. SDK можно скачать вот здесь (см MRE_SDK_3.0).
VXP сам по себе более функционален чем MRE, поскольку ориентирован исключительно на телефоны с чипсетами MediaTek. Но что самое приятное — есть доступ к уарту без каких либо костылей! То есть, если сделать GPIO-мост на условной ESP32, то мы можем получить готовый мощный МК с клавиатурой, кнопками, дисплеем, звуком и т. д. Звучит не хило, да? Кроме того, у нас есть доступ и к BT, и к GPRS, и к SMS без каких либо ограничений.
Однако в бочке мёда нашлась и ложка дёгтя: для компиляции MRE-приложений необходимо накатывать и крякать довольно старый компилятор ADS, который сам по себе поддерживает только C89 (например, нет возможности объявить переменную в объявлении цикла или середине функции, только в начале, как в Pascal). ADS уже вроде как Abandonware, так что это вроде не наказуемо… но всё равно неприятно.
Кроме того, на некоторых девайсах (в основном, фирменных Nokia а-ля 225), прошивка требует подписи у всех бинарников, либо если бинарник отладочный, то должна быть привязка к конкретному IMSI.
К тому же, каждая программа должна фиксированно указывать в заголовке, сколько Heap-памяти ей необходимо выделить. Оптимальный вариант — ~500Кб, тогда приложение запустится вообще на всех MRE-телефонах.
Зато у VXP есть адекватный симулятор под Windows. Но зачем он нам, если у нас порт игры под Win32 есть? :)
Начинаем с инициализации приложения. В процессе вызова точки входа, приложение должно назначить обработчики системных событий, коих бывает несколько. Для обработки ввода и базовых событий хватает всего три: sysevt (события окна), keyboard (физическая клавиатура. Есть полная поддержка QWERTY-клавиатур), pen (тачскрин).
Переходим к обработчику системных событий. Обратите внимание, что MRE-приложения могут работать в фоне, из-за чего необходимо ответственно подходить к созданию и освобождению объектов. Что важно усвоить с самого начала — в MRE нет понятия процессов и защиты памяти, как на ПК и полноценных смартфонах. Любая программа может попортить память или стек ОС, более того, программа использует аллокатор остальной системы, поэтому если ваша программа не «убирает» после себя, данные останутся в памяти со временем приведут к зависанию. Впрочем, WatchDog делает свою работу быстро и приводит телефон в чувство (софтресетом) за 1-2 секунды. Но как и в случае с MRE, есть приятный бонус: прямой доступ к регистрам чипсета :)
Переходим к обработке событий с кнопок. Тут всё абсолютно также, как и на MRE, лишь имена дейфанов поменялись :)
И наконец-то, к графике! Пожалуй, стоит сразу отметить, что более 20-30 FPS на большинстве устройств вы не получите даже с прямым доступом к фреймбуферу. Похоже, это связано с тем, что в MRE довольно замороченная графическая подсистема с поддержкой альфа-канала (только фиксированного во время вызова функции отрисовки картинки/примитивов, сам пиксельформат всегда RGB565) и нескольких слоев. Кроме того, похоже есть ограничения со стороны контроллера дисплея.
Изначально, MRE предполагает то, что все картинки в программе хранятся в формате… GIF. Да, весьма необычный выбор. Однако для работы с пользовательской графикой, есть возможность блиттить произвольные картинки напрямую из RAM. Вот только один нюанс — посмотрите внимательно не объявление следующей функции:
dst_disp_buf — это целевой RGB565-буфер. Логично предположить, что и src_disp_buf — тоже обычный RGB565-буфер! Но как бы не так. Документация крайне скудная, пришлось посидеть и покумекать, откуда в обычном 565 буфере возьмется индекс кадра. С подсказкой пришёл пользователь 4pda Ximik_Boda — он скинул структуру-заголовок, которая идёт перед началом каждого кадра. В документации об этом не сказано ровным счетом ничего!
Сначала я реализовал софтовый блиттинг, но он безбожно лагал. Мне стало интересно, почему нативный blt быстрее и… вопросы отпали после того, как я поглядел в ДШ чипсета: тут есть аппаратный блиттинг. И даже с ним девайс не может выдать более 20FPS!
Для реализации более-менее шустрого вывода графики, необходимо сначала создать канвас (фактически, Bitmap в MRE), создать и привязать к нему layer, получить указатель на буфер слоя и только потом скопировать туда нашу картинку. Да, вот так вот замороченно:
И только после этого всё заработало достаточно шустро :) В остальном же платформа довольно неплохая. Да, без болячек не обошлось, но всё же перспективы вполне себе есть.
На данный момент, этого достаточно для нашей игры.
❯ Пишем геймплей
Рантайм у нас есть, а значит, можно начинать писать игрушку. Хоть пишем мы на Plain-C, я всё равно из проекта в проект использую +- одну и ту же архитектуру относительно системы сущностей, стейтов и т. п. Поэтому центральным объектом у нас станет CWorld, который хранит в себе на пулы с указателями на другие объектами в сцене, а также игрока и его состояние:
Система стейтов простая и понятная — фактически, между состояниями передавать ничего не нужно. При нажатии в главном меню на «старт», нам просто необходимо проинициализировать мир заново и начать геймплей, при смерти игрока — закинуть его обратно в состояние меню. Стейты представляют из себя три указателя на функции: переход (инициализация), обновление и отрисовка.
typedefvoid(CGameStateCallback)();
Поскольку мы хотим некоторой гибкости при создании новых классов противников, то вводим структуру CEnemyClass, которая описывает визуальную составляющую врагов и их флаги — могут ли они стрелять по игроку или просто летят вниз (астероиды), как они передвигаются (зигзагами например) и т. п.
Всё! Для текущего уровня реализации игры этого достаточно :) Переходим к реализации игровой логики. Вообще, динамический аллокатор в играх для китайских платформ лучше использовать как можно меньше. Heap'а довольно мало (~600Кб), да и не совсем понятно, как этот аллокатор реализован, есть вероятность, что используется аллокатор и куча основной ОС.
Начинаем с реализации полёта кораблика. Для этого он должен реагировать на стрелки и не улетать за границы экрана, а ещё для красоты он должен «вылетать» из нижней границы экрана при старте игры:
Переходим к динамическим пулам с объектами. Как вы уже заметили, их всего два — враги и летящие снаряды. Реализация спавна врагов/снарядов простая и понятная: мы обходим каждый элемент пула, если указатель на объект не-нулевой, значит объект всё ещё жив и используется на сцене. Если нулевой — значит ячейка свободна и можно заспавнить новый объект:
При обходе пула во время обновления кадра, мы обновляем состояние каждого объекта и если его функция Think вернула true, значит объект больше не нужен и его нужно удалить:
if (enemyThink(world.enemyPool[i]))
{
sysFree(world.enemyPool[i]);
world.enemyPool[i] = 0;
}
А вот и реализация Think:
boolenemyThink(CEnemy* enemy) {
enemy->y += enemy->_class->speed;
if (enemy->y > gGetScreenHeight() || enemy->health <= 0) return true;
return false;
}
Но кораблики должны же откуда-то появляться! Для этого у нас есть переменная nextSpawn, которая позволяет реализовать самый простой тип спавнера — относительно времени (или в нашем случае тиков):
world.nextSpawn--;
if (world.nextSpawn < 0) {
CEnemy* enemy = spawnEnemy(&enemyClasses[0]);
world.nextSpawn = randRange(40, 70);
}
Результат: мы уже можем полетать, пострелять и поуворачиваться от вражеских корабликов!
Уже что-то напоминающее игру! Осталось лишь добавить подсчет очков, менюшку, разные виды противников, возможно какие-то бонусы и у нас будет готовая простенькая аркада. В целом, выше приведена достаточно неплохая архитектура для простых 2D-игр на Plain C. Фактически, она может быть хорошей базой и для ваших игр: в теме о китах на 4pda я встречал немало людей, которые банально не знали, с чего начать.
❯ Что у нас получилось?
Но без тестов на реальных устройствах материал не был бы таким интересным! Поэтому давайте протестируем игру на двух реальных телефонах, как вы уже догадались, один — Nokla TV E71, а второй — клон Nokia 6700, который подарил мне мой читатель Никита.
На TV E71 игра идёт не сказать что очень бодро. Кадров 15 точно есть, что, учитывая разрешение 240x320, весьма неплохо для такого девайса.
а 6700,, даже учитывая более низкое разрешение — 176x220, дела примерно также — ~15FPS! Но поиграть всё равно можно. Уже хотите написать «автор наговнокодил, а теперь ноет из-за низкого FPS»? Ан-нет, я попробовал игры сторонних разработчиков — они идут примерно также :( К сожалению, таковы аппаратные ограничения устройства.
Исходный код игры с Makefile'ами и файлами проектов для Visual Studio и MRELauncher доступны на моём GitHub. Свободно изучайте и используйте его в любых целях :)
❯ Заключение
Но в остальном же, демка получилась довольно прикольной, как и сам опыт программирования для китайских телефонов. В общем и целом, китайцы пытались максимально упростить API и привлечь разработчиков к своей платформе. Если ради примера взглянуть на API для Elf'ов на Motorola, можно ужаснуться от state-based архитектуры платформы P2K. А тут тебе init, event, draw — и всё!
Но популярности помешала непонятная закрытость платформы, костыльный запуск программ, отсутствие нормального симулятора. А ведь сколько фишек было: даже возможность писать и читать память ядра! А вы как считаете? Можно ли вдохнуть в китайские кнопочники новую жизнь, узнав о наличии возможности запуска нативного кода на них?
P. S.: Друзья! Время от времени я пишу пост о поиске различных китайских девайсов (подделок, реплик, закосов на айфоны, самсунги, сони, HTC и т. п.) для будущих статей. Однако очень часто читатели пишут «где ж ты был месяц назад, мешок таких выбросил!», поэтому я решил в заключение каждой статьи вставлять объявление о поиске девайсов для контента. Есть желание что-то выкинуть или отправить в чермет? Даже нерабочую «невключайку» или полурабочую? А может, у этих девайсов есть шанс на более интересное существование! Смотрите в соответствующем посте, что я делаю с китайскими подделками на айфоны, самсунги, макбуки и айпады! Да и чего уж там говорить: эта статья уже сама по себе весьма наглядный пример! Найти меня можно в комментариях тут, на Пикабу, и в тг @monobogdan
Понравился материал? У меня есть канал в Телеге, куда я публикую бэкстейдж со статей, всякие мысли и советы касательно ремонта и программирования под различные девайсы, а также вовремя публикую ссылки на свои новые статьи. 1-2 поста в день, никакого мусора!
Полезный материал?
Были ли у вас такие китайчики?
Материал подготовлен при поддержке TimeWeb Cloud. Подписывайтесь на меня и @Timeweb.Cloud, дабы не пропускать новые статьи каждую неделю!
Интересный набор для самостоятельной сборки и пайки электронных компонентов, после правильной сборки получится самолет с марцающими светодиодами. В набор входят резисторы, конденсаторы, десятичный счетчик CD4017BE, светодиоды и тд. Идеальный вариант для начинающих радиолюбителей. Стоит такой комплект около 1150 руб. ссылка на источник
2) Понижающий модуль питания
Электронный комплект «сделай сам» - преобразователь напряжения переменного тока. Вход источника питания AC15V или DC18V, фиксированный выход постоянного тока 3 В/4,5 В/5 В/6 В/9 В/12 В. Стоит такой набор около 1260 руб. ссылка
3) Часы
Набор для сборки цифровых часов, также имеются датчики для отображения температуры окружающего воздуха, будильник, календарь и тд. Стоит такой набор для пайки и сборки где-то 1285 руб. ссылка
4) Увлажнитель
Набор для самостоятельного изготовления мини-увлажнителя воздуха, который работает от USB. Стоит такой около 83 руб. ссылка
5) Машинка
Комплект электронных деталей для сборки умного автомобиля. Суть умной машинки в том, что после правильной сборки и пайки она сможет ездить по жирно нарисованным линиям и не отклоняться от курса, например по бумаге. Стоит такой около 385 руб. ссылка на источник
6) Табло
Набор электронный для самостоятельной сборки модуля со множеством светодиодов и разными режимами работы, как таймер с секундами, отоброжение линий и тд. Стоит комплект около 390 руб. ссылка
7) Электромагнитная пушка
Занимательный набор для любителей физики и электроники, на сборку электромагнитной пушки в акриловом корпусе потребуется около 90 минут, если все собрано верно, она сможет стрелять маленькими металлическими шариками. Стоит набор где-то 1490 руб. ссылка
8) Светильник
Дешевый набор для сборки светильника с красными светодиодами и разными режимами работы, которые управляются однокристальным микрокомпьютером AT89S52. Стоит такой набор 145 руб. ссылка
9) Радиоприемник
Набор для сборки FM радиоприемника, который работает от 2х батареек АА, после сборки нужно подключить наушники и 'ловить' различные радиостанции. Стоит набор 120 руб. ссылка
10) Робот-танк
Программируемый электромеханический конструктор на гусеницах Elegoo Conqueror Robot Tank Kit имеет несколько встроенных функций, таких как движение по траектории, заданной линией, детектор препятствий и дистанционное управление. Набор для сборки робота позволяет пользователям познакомиться с графическим программированием. Конструктор идеально подходит для детей и подростков, которые хотят посвятить свою жизнь карьере в сфере высоких технологий. Стоит такой около 8000 руб. ссылка на источник
11) Светильник-круг
Очень простой набор для сборки и самостоятельной пайки круглого модуля с красными светодиодами, создающие эффект вращающегося колеса. Работает от напряжения 3-5 вольт. Стоит такой 120 руб. ссылка
12) Счетчик Гейгера
Интересный набор для сборки детектора радиации, а именно обнаружения 20 мР/ч ~ 120 мР/ч гамма-лучей и 100 ~ 1800 от переменных/точек мягкого бета-излучения. Стоит такой наборчик где-то 2640 руб. ссылка
13) Микрофонный усилитель
Очень простой и дешевый набор для сборки и пайки микрофонного усилителя. В наборе идут провода, плата,, конденсаторы и тд. Идеальный вариант для тех, кто хочет научится паять и разбиратся в электронике, также читать схемы. Стоит набор 68 руб. ссылка
14) DIY набор для сборки устройства обнаружения магнитного поля
Набор позволяет собрать простое устройство с помощью которого можно обнаружить магнитное поле, а также северный и южный полюса. Набор предназначен для изучения основ радиоэлектронники и развития навыка пайки компонентов разного типа. Рекомендован для начинающих.
В комплект входит:
Печатная плата
Набор активных и пассивных элементов для сборки
Схема. Стоит такой набор около 112 рублей. Ссылка на источник
15) Спиннер
Набор 'Сделай сам' - светодиодный спиннер в прозрачном акриловом корпусе. Все компоненты нужно спаять на плате самостоятельно. После сборке получится крутой спиннер и при вращении красочно будут светить светодиоды. Стоит такой набор около 494 руб. ссылка
16) Частотомер
Частотомер 1 Гц — 50 МГц E0330 позволяет измерять частоту кварцевых резонаторов. Простой цифровой прибор позволяет измерять наиболее применяемые "кварцы". Тестер кварцевых резонаторов удобен. Сборка тестера с цифровой светодиодной шкалой не представляет проблем. Собрать частотомер своими руками за пару часов под силу даже начинающему радиолюбителю. Стоит такой 660 руб. ссылка
17) Сердце
Красивое электронное сердечко с разноцветно переливающимися светодиодами. Питается от батарейки, которая вставляется позади сердечка. Всего состоит из 32 светодиодов и других электронных компонентов. Стоит набор около 900 руб. ссылка
18) 'Песочные часы'
Набор интересный для сборки электронных песочных часов. Светодиоды включаются и выключаются в таком порядке, что создается эффект работающих песочных часов. Стоит комплект для пайки около 300 руб. ссылка
19) Музыкальная колонка
Прикольный DIY Bluetooth динамик с множеством функций, включая дистанционное управление, поддержку USB, карт памяти, Блютус и многое другое. Набор требует самостоятельной сборки и пайки. Стоит комплект на данный момент около 1700 руб. ссылка
20) Сварочный аппарат
Набор для создания аппарата для точечной сварки, например контактной сварки пластин для соединения аккумуляторов. Рабочее напряжение: 12 ~ 14,6 В. Стоит набор около 1500 руб. ссылка на источник
Цифровая VGA камера OV7670 для Arduino с разрешением 640×480 px, 30 к/с. Максимально упрощенный вариант фото-видео камеры для совместной работы с любыми микроконтроллерами, в том числе и с контроллерами серии Ардуино. Стоит такая 110 руб. Ссылка на источник
RFID-модуль RC522 — радиосигнальный модуль, работающий на частоте 13.56 МГц с SPI-интерфейсом. В комплекте c модулем идет 2 RFID-метки — в виде карты и брелока. Стоит такой набор 105 руб. с бесплатной доставкой. ссылка
3) Фотодиод
Приёмник оптического излучения BPW34 - кремниевый PIN-фотодиод с высокой скоростью и высокой светочувствительностью в миниатюрном, плоском и прозрачном корпусе из пластика. Он чувствителен к видимому и близкому к ИК излучению. Стоит такой 38 рублей . ссылка
4) Корпус для размещения электроники
Пластиковый короб для скрытия и размещения плат и электроники. Стоит самая маленькая 31 руб.ссылка
5) Набор из 840 перемычек
Набор перемычек различной длины для робототехники и других проектов. Стоит набор около 490 руб. ссылка
6) Сенсорный диммер
Емкостный сенсорный диммер постоянного напряжения для регулировки яркости светодиодов, стоит такой 50 руб.ссылка
7) Магнитный извещатель
Магнитный извещатель (геркон) — это переключатель и магнит, помещенные в пластиковые корпуса. Работа по принципу "замкнутый контакт - разомкнутый контакт", извещатель позволяет использовать его в широком круге задач: контроль открытия дверей, счетчики срабатываний/скорости/частоты и т.д. Стоит такой 60 руб с бесплатной доставкой.ссылка
8) 6-канальный релейный модуль
6-канальный релейный модуль может управлять одновременно 6 нагрузками, состояние каждого реле можно определить по светодиодам, которые установлены на каждом канале. Стоит такой модуль на 12v - 330 руб.ссылка на источник.
9) Поплавковый выключатель
Горизонтальный датчик-выключатель, используемый для определения уровня жидкости в резервуаре. Переключатель может использоваться в насосе, индикаторе, сигнале тревоги или других устройствах.. Стоит такой 140 руб.ссылка
10) Импульсный генератор
Модуль NE555 генератора импульсов на микросхеме NE555 (YS-32), которая способна работать от 10 до 200 кГц. Стоит такой набор 66 руб. ссылка.
11) Радиомодуль RDA5807M
Стерео-модуль, который способен принимать FM-частоты в диапазоне от 50 МГц до 115 МГц, обладающий мощным цифровым аудиопроцессором, и который позволяет напрямую слушать звук через наушники или динамик со встроенным усилителем. Стоит такой 66 руб.ссылка.
12) Солнечная панель
Панель солнечная 5V, 0.5W стоит такая 78 руб.ссылка на источник
13) Беспроводной модуль связи на 1000 метров
Не смотря на свои миниатюрные размеры, радиус действия этого передатчика (чип SI4432) на открытой местности составляет 1000 метров. Это отличное решение для создание проектов с низким токо-потреблением и малым размером. Стоит такой 185 руб. ссылка
14) Импульсный повышающий трансформатор 20кВ
Мощный повышающий трансформатор. Стоит такой 163 рубля. ссылка
15) Кабель USB к UART TTL
Кабель на микросхеме PL2303HX с 4-контактами позволяет подключаться к компьютеру для программирования. Стоит такой 119 руб. ссылка на источник
16) Модуль LAN8720 для Arduino
Модуль Ethernet LAN8720 - предназначен для сборки устройства управления электрическими приборами через интернет. Стоит такой 173 рубля. ссылка
17) Модуль записи голоса SD1820
Модуль ISD1820 для записи и воспроизведения одного голосового сообщения длиной до 10 секунд. Стоит такой 126 руб.ссылка на источник
18) Плата расширения
Плата расширения CNC Shield v3 предназначена для создания на основе контроллера Arduino UNO 3D принтеров, станков с числовым программным управлением, в том числе гравировальных, фрезерных, маркировальных, станков портальной резки, промышленных роботов. Контроллер Arduino позволяет работать станку автономно или управлять с помощью компьютера через USB-порт. Стоит такая 111 руб. с бесплатной доставкойссылка
19) Оптический модуль для считывания отпеча пальцев
Сканер отпечатков пальцев, стоит такой 985 руб.ссылка
20) Элемент Пельтье
Под действием электрического тока элемент Пельтье TEC1-12706 способен создавать разность температур на своих сторонах (эффект Пельтье). Этот эффект имеет и обратное действие (эффект Зеебека): при создании на сторонах элемента Пельтье разности температур, он способен вырабатывать электрический ток. При работе элемента Пельтье одна его сторона значительно нагревается, а вторая охлаждается. Чтобы получить на охлаждающей стороне элемента Пельтье температуры ниже температуры окружающего воздуха необходимо принудительно охлаждать нагревающуюся сторону элемента, например, с помощью радиатора и термопасты. С помощью элемент Пельтье можно соорудить небольшой холодильник, мобильный мини-кондиционер или портативный нагреватель. Кроме того, используя обратный эффект, создавая большой перепад температур по средствам нагрева одной стороны элемента Пельтье и охлаждения другой стороны, можно добиться выработки электричества, что позволит создать зарядное устройство.. Стоит такой 1964 руб.ссылка на источник
21) Плата управления MEGA2560
Arduino Mega построена на микроконтроллере ATmega2560, реализованной на микросхеме CH340, может быть применим в сложных устройствах, например таких, как интеллектуальные роботы или принтеры трёхмерной печати. Стоит такая плата 1162 руб. ссылка
22) Модуль датчика напряжения 0-25В
Модуль датчика напряжения (вольтметр), для измерения напряжения в диапазоне 0-25В. Стоит такой 61 рубль. ссылка
23) Сервопривод
Сервопривод для Arduino ESP32. Стоит такой 136 руб. с бесплатной доставкой ссылка
24) Устройство для слежения за светом
Интеллектуальное устройство для слежения за светом с солнечной панелью для Arduino. Стоит такой набор для сборки 4 252 руб. ссылка
25) Шасси гусеничное для робота
Набор с гусеничным шасси и приемником для создания робота. Стоит такой набор около 13 000 руб. ссылка на источник.
Миниатюрная антенна совместимая с модулями Sim800, sim900 и с усилениеем 3DBI. Стоит такая штука 39 руб. с бесплатной доставкой. ссылка на источник
2) Датчик скорости
Компактный модуль измерения скорости с инфракрасным щелевым датчиком. Модуль применяется для контроля движения в колесных роботах и прочих устройствах. Стоит такой 53 рубля. ссылка
3) Герконовый модуль
Модуль представляет собой миниатюрный магнитный геркон Y213 (нормально разомкнутый) с обвязкой. При приближении магнита контакты замыкаются и модуль символизирует о наличии питания и о срабатывании датчика. Контакты геркона замыкают вход компаратора. Благодаря применению компаратора в модуле через геркон протекает очень малый ток, что значительно продлевает срок службы датчика. Состояние выхода цифрового сигнала говорит о наличии магнитного поля. На модуле установлен подстроечный резистор номиналом 10 кОм. Служит для установки пределов срабатывания геркона и таким образом отрегулировать чувствительность. Также на плате установлен компаратор LM393 для исключения ложных срабатываний магнитного датчика. При считывании показаний с модуля, если геркон разомкнут - выводится "1", если замкнут - выводится "0". Стоит такой 87 руб.ссылка
4) Защитная плата для литий-ионных батарей
Модуль защиты для зарядки аккумуляторов. Стоит такой около 55 руб.ссылка
5) Гигрометр HR31
Датчик для измерения влажности. Стоит такой 55 руб. ссылка на источник
6) Бегущая линия светодиодов
Набор 'сделай сам' - бегущие светодиоды, регулировка через потенциометр. Стоит такой набор 58 рублей с бесплатной доставкой. ссылка
7) Модуль датчика температуры
Термистор для arduino, с помощью регулировки потенциометра вы можете изменить порог обнаружения температуры. Стоит такой 56 руб.ссылка
8) Датчик обхода препятствий
Инфракрасный датчик обхода препятствий для создания Arduino роботов. Стоит такой 57 руб. ссылка
9) Модуль программирования чипов
Модкль для чипов ATtiny13A/ATtiny25 /ATtiny45/ATtiny85. Стоит такой 61 руб.ссылка
10) Разъем типа C
Разъем Type-c для передачи данных. стоит такой 62 рубля. ссылка на источник
11) Датчик управления светом
Набор для самостоятельной сборки фоточувствительного датчика. Стоит такой 63 рубля.ссылка
12) Модуль питания
Плата модуля питания 3.3V, 5V, 12V. Стоит такой 65 рублейссылка
13) Сигнал тревоги
Сигнал тревоги 95 дБ, 3-24 В. стоит такой 66 руб. ссылка
14) Кнопки
Набор кнопок для изготовления платы управления. Стоит такой набор 70 руб. ссылка
15) Низкоуровневый триггер
1-канальный релейный модуль 5В. Стоит такой 73 рубля с бесплатной доставкой. ссылка на источник
16) Датчик удара
Модуль датчика удара для Arduino, 3 контакта. Стоит такой 78 руб. ссылка
17) Мигающая лампочка
Модуль с 7-цветным мигающим светодиодом диаметром 5-миллиметров. Стоит такой 78 рублей. ссылка
18) Инфракрасный излучатель
10 пар инфракрасного излучателя и ИК-приемника. Стоит 76 руб. с бесплатной доставкой. ссылка
19) Разноцветные светодиоды
Разноцветные светодиоды диаметром 3 мм. Идут партиями по 100 штук. Стоит набор 79 руб. ссылка
20) Датчик наклона
Стандартный модуль датчика наклона KY020, 3 контакта. Стоит такой 79 руб с бесплатной доставкой. ссылка на источник
21) Пятипозиционный модуль навигации
Компактный модуль для обеспечения управления устройствами. Модуль имеет подвижный джойстик, который реагирует на наклоны, поддерживает движение вверх, вниз, влево, вправо и центральное нажатие. Стоит такой 79 рублей. ссылка
22) Датчик сердцебиения
Датчик Arduino KY-039 служит для измерения пульса (сердцебиения) на пальце. Данный сенсор реагирует на изменение прозрачности пальца для инфракрасного излучения от светодиода при колебаниях кровяного давления. Стоит такой 81 руб. ссылка
23) Датчик пламени
Датчик огня KY-026 (flame sensor Arduino) позволяет определить наличие открытого пламени с помощью инфракрасного приемника. Стоит такой 82 рубля.ссылка
24) Модуль энкодера
Модуль энкодера KY-040 для arduino (Ардуино) - это датчик угла поворота. Другое его название - модуль датчика вращения или валкодер. Модуль напоминает переменный резистор, но в отличии от него не имеет ограничений по количеству оборотов, его можно использовать в качестве кнопки. Фактически у него два режима вращения - без нажатия и с нажатием ручки энкодера. Модуль - механический датчик, преобразующий угол поворота в электрические сигналы. Стоит такой 82 рубляссылка
25) Антенна для IP-модуля SIM800L
Антенна для IP-модуля SIM800L GPRS TCP предназначена для усиления сигнала и обеспечения стабильной связи в сети GPRS и TCP. Стоит такая 86 рублей с бесплатной доставкой. Ссылка на источник.
Водонепроницаемый датчик температуры (терморезистор), использующийся во многих электроприборах для отображения температуры в диапазоне от -40°C до + 85°C, имеет провод длиной 50 см. Стоит такой 27 руб. с бесплатной доставкой. ссылка на источник
2) Oled-дисплей
Модуль с дисплеем 0,91 дюйма, OLED Разрешение: 128x32 пикселей , напряжение DC 3,3 ~ 5 В. стоит такой 104 рубля. ссылка
3) Разъем 9V
Разъем для батарейки типа Крона 9v со штекером. стоит такой около 25 руб. ссылка
4) Разъем Micro usb
Гнездовой разъем MICRO USB 5pin на плате. Стоит такой 22 руб.ссылка
5) Светодиод
Светодиод мощностью 10 Вт, 600mA 12V. Стоит где-то 23 рубля. ссылка
6) Адаптер для модулей Esp8266
Плата-адаптер для подключения модулей Esp8266 к таким шилдам, как Xbee Shield или ESP Base Shield. Стоит такая около 25 рублей. ссылка на источник
7) Понижающий модуль питания
Модуль для понижения напряжения с DC 5В до 3,3В. Стоит такой 27 руб.ссылка
8) Регулируемый силовой модуль
Плата для преобразования напряжения из 5 вольт в 24 вольта. Стоит 31 рубль с бесплатной доставкой. ссылка
Плата с корпусом для сборки. Аккумулятор 18650,5V 1A USB зарядка. Стоит такой набор около 100 руб. ссылка
15) Термостат
Модуль для контроля температуры. Стоит около 100 руб.ссылка на источник
16) Цифровой усилитель мощности
Плата усилителя TPA3110 XH-A232, 30 Вт + 30 Вт, 2,0 канала, постоянный ток 8-26v, 3 А. Стоит 100 руб. ссылка
17) Ультразвуковой модуль
Модуль HY-SRF05 с дальностью обнаружения: 3-4 м, угол в 30 градусов. Стоит 95 руб.ссылка
18) Модуль обнаружения металла
Текстолитовая плата с электронными компонентами модуля детектора металла. Стоит 82 рубля. ссылка
19) Модуль часов
Механизм с модулем кварцевых часов. Стоит набор 85 руб.ссылка
20) Индикатор заряда аккумулятора
Водонепроницаемый тестер для измерения заряда литий-ионного аккумулятора. Стоит 74 рубля. ссылка на источник
21) Модуль снижения оборотов кулера
2-USB регулятор напряжения понижающий 4-12 в 2.5-8 V для различных устройств. Стоит такой 71 рубль.ссылка
22) Звезда
Набор «сделай сам» для самостоятельной сборки и пайки на плату светящейся красной звезды. Питание 3-5 вольт. стоит такой набор 65 рублей с бесплатной доставкой. ссылка
23) ИК пульт
Инфракрасный беспроводной модуль дистанционного управления с приемником. стоит такой набор 79 рублей. ссылка
24) Инфракрасный датчик
Инфракрасный датчик для автоматического обнаружения объектов в диапазоне зондирования. Стоит такой модуль 53 рубля. ссылка
25) Модуль усилителя микрофона
Модуль основан на микросхеме-предусилителе MAX4466 и совмещает в себе операционный усилитель и минимальную обвязку для него, в электретном микрофоне. Стоит такой 66 рублей с бесплатной доставкой. Ссылка на источник.
Для всех поклонников футбола Hisense подготовил крутой конкурс в соцсетях. Попытайте удачу, чтобы получить классный мерч и технику от глобального партнера чемпионата.
А если не любите полагаться на случай и сразу отправляетесь за техникой Hisense, не прячьте далеко чек. Загрузите на сайт и получите подписку на Wink на 3 месяца в подарок.
Этот пьезоэлектрический датчик вибраций способен улавливать даже незначительные изменения во внутреннем механическом напряжении пьезо-диска и выдавать сигнал, пропорциональный силе вибрации. Стоит такой датчик 27 рублей с бесплатной доставкой. ссылка на источник.
2) Модуль RGB светодиода
Модуль RGB светодиода KY-009 - выполнен на печатной плате с установленным 3-х цветным RGB SMD светодиодом (модель 5050) и имеет 3 входа для управления и получения нужного цвета излучения светодиода (красный, зеленый и синий). Стоит такой 27 рублей. ссылка
3) Круглый модуль RGB светодиода
Стоит такой круглый модуль так же 27 рублей. ссылка
4) Зарядная плата для li-ion аккумуляторов
Модуль заряда аккумуляторов на основе чипа TP4056. Модуль имеет индикацию процесса заряда и сама отключает аккумулятор при достижении напряжения на нем 4.2В. В момент заряда светится красный светодиод, а когда батарея будет полностью заряжена засветится зеленый светодиод, красный при этом погаснет. Стоит 27 руб. ссылка
5) Плата цифрового усилителя
Плата цифрового усилителя мощности PAM8403 . Стоит 28 рублей. ссылка на источник
6) Плата pam8406
Плата pam8406 цифрового усилителя мощности. Стоит такая 64 рубля. ссылка
7) Светодиодный модуль
RGB светодиодный модуль датчика FZ0455 для Arduino. Стоит такой 28 рублей. ссылка
8) Преобразователь RS232
Переходник способен преобразовывать сигнал с RS232 в TTL с рабочим напряжением от 3 до 5.5 Вольт DC. стоит такой 29 руб. ссылка
9) Пьезодинамик
Пищалка на Ардуино, которую часто еще называют зуммером, пьезодинамиком или даже баззером – частый гость в DIY проектах. Стоит такой 33 рубля. ссылка
10) Двунаправленный преобразователь
Плата двунаправленного преобразователя логического уровня IIC I2C. Стоит такая 34 рубля. ссылка на источник
11) Плата-адаптер для ESP-07 / ESP-08 / ESP-12
Для отладки устройств на базе ESP8266 удобно применять специальный адаптер, подходящий для беспаечной макетной платы! На плате уже установлены необходимые для старта резисторы, таким образом, внешняя обвязка для работы нужна не будет. Стоит такая 34 рубля. ссылка
12) Вертикальный USB 2,0
Гнездовой разъем вертикальный. Стоит такой 35 руб.ссылка
13) MOSFET триггер
MOSFET триггер с ШИМ регуляцией 5-36B, 15A, 400Вт. Драйвер на базе 2-х MOSFET мощных полевых транзисторах D4184. Модуль MOSFET транзистора (силовой ключ) имеет долгий срок службы, прост в управлении. Позволяет получить ШИМ до 36 Вольт. Стоит такой 35 рублей. ссылка
14) Светофорный модуль
Плата с 3мя световыми сигналами. Стоит 34 рубля.ссылка
15) Плата з/у
Плата зарядки Li-ion аккумуляторов 18650. Стоит такая 35 руб. ссылка на источник
16) Кнопка
Простая кнопка для включения. Стоит такая 35 руб.ссылка
17) Кнопка 2 положения
Простая кнопка вкл. и выкл. Стоит такая около 35 руб.ссылка
18) Модуль датчика касания
Модуль датчика касания KY-036 позволяет оснастить приборы функцией сенсорной кнопки. В качестве сенсорной поверхности используется металлическая деталь напоминающая обычную кнопку, корпус электроприбора или другие металлические элементы конструкции. Стоит такая 36 руб.ссылка
19) Модуль фоторезистора
Модуль фоторезистора KY-018 - может применяться для измерения интенсивности света или определения его наличия/отсутствия. При отсутствии света сопротивление фоторезистора большое и доходит до 1 мОм, а при его освещении падает до нескольких Ом.. Стоит такой около 37 руб. ссылка
20) Модуль часов реального времени
Модуль часов реального времени DS1302 Аrduino с возможностью бесперебойного питания от литиевой батарейки. Стоит такой 38 руб.ссылка на источник
21) ИК-инфракрасный приемник
Предназначен для приема данных по инфракрасному каналу от пультов дистанционного управления. Стоит такой 37 руб. ссылка
22) Датчик отражения
Датчик отражения TCRT5000 — аналоговый датчик, меняющий значения в зависимости от яркости поверхности перед ним. Можно использовать при построении роботов, двигающихся по линии. Стоит 38 руб. ссылка
23) Модуль датчика вибрации
Модуль датчика вибрации KY-002 имеет на плате датчик вибрации (удара) – “SW-18015” и выдает на выход низкий уровень напряжения при срабатывании. Принцип действия “SW-18015” заключается в замыкании пружинки на металлический корпус при вибрации, ударе или сильном ускорении. Стоит 38 рублей.ссылка
24) type-C плата
Миниатюрный модуль с защитой для зарядки литиевой 18650 батареи 5В, type-C. Стоит примерно 38 руб.ссылка
25) Реле
Реле SRD-05VDC-SL-C. Стоит такое где-то 39 руб. ссылка на источник.