Часть 1 >> Часть 2 >> Вы находитесь здесь
Однажды любимая жена у друзей на даче нашла радужную пружинку слинки. Вспомнила детство, подошла к лестнице и запустила. Чудо, но пружинка с первого раза идеально пропружинила по каждой ступеньке.
— Получилось! — с радостным удивлением воскликнули все, кто был рядом.
Трёхлетней дочке тоже захотелось попробовать. Она взяла пружинку, забралась на лестницу и запустила её. Пружинка пролетела над лестницей и шмякнулась боком на траву.
— Получилось! — радостно закричала дочка.
Прошёл год с начала моего фанового проекта. Получилось! Та самая красивая железка выглядит вот так:

На первый взгляд может быть не понятно. Но, допустим, что это топор. И с помощью этого топора и нескольких деталек в конце у меня получится каша.
А для хорошей каши из топора нужна крупа.
WiFi Slot

Все знают про ESP8266. У этой борды несколько отличий.
- К ней подключаются Troyka-модули. И их разных очень много.
- Таких модулей туда можно поставить 4.
- У неё 8 каналов АЦП, с измерением диапазона от 0 до 3.3 В. А для голой ESP8266 это очень не характерно.
- Здесь есть две шины питания: силовая 5В, цифроаналоговая 3,3 В.
- Одно в другое превращается через DC/DC. Меня лично задолбали эти кипятильники-регуляторы. Привет высокий КПД.
- А это значит, что можно драйвить моторы прям с неё. И как-нибудь я покажу как.
- Она поддерживает Slot Connector. А это круто.
Короче, я могу воткнуть в неё 4 потенциометра, и это будет выглядеть шикарно. Ведь ради крутого лука всё и затевалось.
i2cio
А вот и мой любимый STM32F030F4P6.


На картинке две платы с одной и той же прошивкой i2cio. Это расширитель портов ввода/вывода.
9 управляющих пинов этой штуки умеют:
- 12-битный АЦП
- 16-битный ШИМ, с очень круто регулируемой частотой. Хоть сервы туда вешай (DC/DC помогает и тут), хоть моторы постоянного тока крути, хоть звук играй.
Так же эти 9 плюс ещё один могут цифровой ввод/вывод.
Дополнительно Slot Expander поддерживает Troyka-разъёмы и разделение питания на силовую и аналоговую части.
Аааа… Забыл. Таких расширителей можно к железке подключить чуть больше 100 штук. И они все рассортируются по I2C-адресам автоматом, предоставляя плоскую адресацию пинов. То есть вы сможете написать
i2cio.digitalWrite(852, HIGH);
int tooMuchForAnalogPinNumber_areYouReallyShureQuestion = i2cio.analogRead(942);И при этом всё получится.
Ну и стоит камень 33 рубля. И можно сделать с ним, например, ездуна по линии с самым большим в мире количеством датчиков оттенка серого. С 12 битным АЦП и 16-битной регулировкой чувствительности. Не меняя прошивку.
Что я обязательно и покажу в следующих сериях.
Едем дальше.
Экшн
Друг попросил меня сделать ему пульт для Traktor — любимой программы дискжокеев. Я подумал, что если у меня не получится сделать это быстро и красиво, то ерунда у меня получилась, а не красивая железка.
Скручиваем всё вместе

Примечание: здесь и далее подразумевается, что текста сверху никогда не было
Для этого мне понадобится материнская платка с мозгами esp8266 (слева). Её отличие от остальных то��ько в том, что она квадратная, имеет 8 входов АЦП и питается от 5 В через DC/DC преобразователь. А ещё к ней можно подключить такую же квадратную плату расширения на моём любимом stm32f030f4p6 (справа) через красивую железку (центр).
Добавим кучу потенциометров
Ещё одна особенность этих железок — в них очень просто вставить стандартные модули. Модулей у меня этих много разных. Я взял кучу потенциометров. Потому что все любят кучу потенциометров(с).

Больше потенциометров богу потенциометров!

Соль
Самый долгий пункт сборки. Если захочется сделать всё в точности как я, понадобится сделать следующее:
- Купить в Леруа деревянный уголок со стороной 2 см
- Взять пилу, и попытаться отпилить его под 45 градусов
- Понять, что это не так то просто. Начать бегать повсюду и искать стусло.
- Скрутить стусло из советского металлического конструктора.
- Упилить почти весь уголок в брак, потому что не дано тебе, Василий, делать что-то красивое руками.
- Купить, наконец, стусло.
- GOTO 5. Потому что не дано тебе, Василий. Нечего и пытаться.
Вот что получилось:

Ерунда, переделать
Друг говорит: «Это что это, пульт для трактора, да? Не похоже что-то».
Хороша работа. Начинай сначала.
Берём ещё 4 платы расширения, прикручиваем. Берём кучу модульков, и тыкаем куда попало.
Получилось вот это:

Аккуратно сверлим отверстие для Micro-USB коннектора, чтобы запрограммировать материнскую плату и, в последствии, заряжать батарейку.

Ох, не дано тебе, Василий, не дано...
Демонстрация работы
В итоге получился беспроводной пульт для трактора. Он управляет трактором по WiFi через Open Sound Control.
Исходный код
Исходный код на gitHub. Залил целиком рабочую п��пку, чтобы не искать библиотеки по всему интернету.
А как вообще это работает?
Красивая железка — это просто коннектор, который при помощи четырёх болтов умеет передавать два сигнала и питание. Два сигнала — это I2C. Материнская плата умеет разбрасывать все платы расширения по последовательно идущим I2C-адресам и, впоследствии, что-то с ними делать. Например, считывать 12-битный аналоговый сигнал с (почти) каждой ножки расширителя. Или управлять 16-битным ШИМ на каждой ножке расширителя. Ну или просто использовать эти ножки как цифровой вход/выход. Можно использовать эти расширители, если вам просто не хватило ног на вашем любимом микроконтроллере.
Прошивка stm32f030f4p6, установленного на плате расширения лежит здесь.
Библиотека для работы с расширителями портов в Arduino IDE лежит здесь.
Если уважаемым хабравчанам будет интересно, я обязательно расскажу об этом подробнее. Но не сегодня.