Arduino Pro Mini: распиновка, питание и прошивка через FTDI
Pro Mini куплена под датчик на батарейке, корпус выбран, батарейка заряжена, и тут выясняется: USB-разъёма на плате нет вообще. Это Uno без всего лишнего: тот же ATmega328P, тот же код, габарит спичечного коробка и цена в два-три раза ниже. Расплата это прошивка через отдельный USB-UART адаптер и два слова, которые нужно прочитать на плате до включения: 3.3V/8MHz или 5V/16MHz. Перепутаете, тайминги поплывут вдвое, а Serial выдаст кашу.
Ниже две версии и их отличия, RAW против VCC, шестиконтактный разъём прошивки (DTR, TXO, RXI, VCC и два GND), таблица пинов с ловушкой A6/A7 и скетч батарейного датчика, который спит до единиц микроампер. Родня с USB-разъёмом разобрана в распиновке Nano, а логику скетчей можно прогнать в симуляторе, для него Pro Mini неотличима от Uno.
Отдельные разделы ниже отвечают на вопросы, которые возникают на практике: почему прошивка не идёт, почему Serial выдаёт мусор, сколько реально экономит сон и когда Pro Mini лучше Nano.
Две версии: 3.3 В/8 МГц или 5 В/16 МГц
Pro Mini выпускается в двух исполнениях, и разница не сводится к напряжению. Версия 5 В живёт на 16 МГц и ведёт себя как Uno: любые скетчи, любые скорости, модули 5 В без согласования. Версия 3.3 В работает на 8 МГц, вдвое медленнее, зато кормится от трёх батареек АА и дружит с датчиками 3.3 В без делителей на резисторах. Ток пина у обеих одинаковый: 20 мА рабочий, 40 мА предел.
| Версия | RAW (вход стабилизатора) | Активный режим | Для чего |
|---|---|---|---|
| 3.3 В / 8 МГц | 3.35–12 В | ≈3–4 мА | Батарейки, сон, датчики 3.3 В |
| 5 В / 16 МГц | 5–12 В | ≈15 мА | Скорость, модули и скетчи от Uno |
Питание заходит двумя путями. RAW это вход бортового стабилизатора: подали 7–12 В, получили ровные 3.3 или 5 В на шине VCC. VCC это сама шина микроконтроллера: сюда можно подать уже стабилизированное напряжение, минуя стабилизатор, и не греть его. Крона 9 В идёт на RAW, Li-ion банк на 3.7–4.2 В прямо на VCC 3.3-вольтовой версии (на 8 МГц чипу хватает 2.7–5.5 В). Отдельного пина 3.3V на плате нет, его роль играет VCC.
Пины: 14 цифровых и 8 аналоговых, A6/A7 только входы
Расклад унаследован от ATmega328P: D0–D13, восемь аналоговых входов A0–A7, светодиод L на D13. Ловушка это A6 и A7: рука, привыкшая к Uno, пишет digitalWrite, а цифровой части у этих выводов нет физически, в корпусе TQFP они заведены только на АЦП. Читать датчик или потенциометр сколько угодно, это урок про аналоговые входы; кнопки и светодиоды на A0–A5 и цифровые пины. Шина I2C сидит на A4 (SDA) и A5 (SCL), как у Uno.
| Группа | Пины | Нюанс |
|---|---|---|
| Цифровые | D0–D13, всего 14 | D0/D1 это аппаратный UART: заняты при прошивке |
| Аналоговые входы | A0–A5 | A4/A5 это SDA и SCL шины I2C |
| Только входы | A6, A7 | digitalWrite и digitalRead не работают, нет цифрового режима |
| Разъём прошивки | DTR, TXO, RXI, VCC, GND, GND | Крайние контакты помечены BLK и GRN |
| Питание | RAW, VCC, GND | RAW это вход стабилизатора, VCC это шина чипа |
Разъём прошивки: шесть контактов и DTR
Прошивают Pro Mini любым USB-UART адаптером (FTDI FT232RL, CP2102, CH340), лишь бы уровень сигнала совпадал с версией платы. Разъём шестиконтактный: DTR, TXO, RXI, VCC и два GND по краям. TXO платы идёт в RX адаптера, RXI в TX, ориентацию держат маркеры BLK и GRN у крайних контактов. Пин DTR через конденсатор 100 нФ дёргает reset сам, и IDE вводит чип в загрузчик без вашего участия. Адаптеры без DTR тоже работают, но кнопку reset придётся жать в момент старта заливки, а словить окно в полсекунды это то ещё упражнение. Первый скетч и лечение not in sync в уроке про первый скетч в IDE.
Сон до единиц микроампер: батарейные проекты
Ради автономки Pro Mini и берут. Числа с условиями: в активном режиме 3.3-вольтовая версия ест около 3–4 мА, 5-вольтовая около 15 мА. В режиме power-down плата в заводском виде оседает на 35–60 мкА (на шине остаются регулятор и платный светодиод), после удаления светодиода около 5 мкА, а с выпаянными стабилизатором и светодиодом порядка 0,4 мкА. Разница между 3,5 мА и 4 мкА почти в тысячу раз: проект живёт не три недели, а год. Спит чип по будильнику watchdog: проснулся, снял данные, отправил, уснул. Регистры прячет библиотека LowPower за одну строку, механику будильников мы разбираем в уроке про watchdog и сон.
#include <LowPower.h> const int PIN_DANNYE = A0; // датчик, например освещённостиconst int PIN_SVETODIOD = 13; // вспышка: я жив void setup() { Serial.begin(9600); pinMode(PIN_SVETODIOD, OUTPUT);} void loop() { int uroven = analogRead(PIN_DANNYE); digitalWrite(PIN_SVETODIOD, HIGH); delay(10); digitalWrite(PIN_SVETODIOD, LOW); Serial.print("t="); Serial.print(millis()); Serial.print(" uroven="); Serial.println(uroven); LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF); // сон 8 секунд}Pro Mini или Nano: когда что брать
Nano это та же электроника с USB-разъёмом: удобен на столе, но крупнее, дороже и в заводском виде ест больше: USB-чип и светодиод сидят на шине даже во сне. Pro Mini берут тиражом, по цене клона это идеальная плата, которую не жалко замуровать в стену: десяток датчиков по дому, каждый на своей батарейке. Для отладки удобно держать одну Nano, для тиража пачку Pro Mini 3.3 В.
Тупик: прошивка не идёт, а плата точно живая
Классика для Pro Mini: адаптер воткнут, порт появился в списке, IDE начала загрузку, и через пару секунд всё оборвалось сообщением not in sync. Мы переставляли провода, перезапускали IDE и меняли адаптер, но картина не менялась.
Проверка занимает минуту, если знать, куда смотреть. Первое: у клонов на CH340 не установлен драйвер, и порта в списке просто не будет, это выглядит иначе. Второе и главное: перепутаны TXO и RXI, то есть выход платы попал во вход адаптера. Плата молчит, адаптер молчит, и IDE получает мусор вместо ответа загрузчика. Третье: выбран не тот процессор, и для 3.3-вольтовой версии в 8 МГц IDE шлёт прошивку на скорости, которую старая плата не понимает. Четвёртое: у некоторых адаптеров нет вывода DTR, тогда нужно вручную нажать reset в момент старта загрузки. Мы выстроили проверку именно в таком порядке, и после первого раза второй затык не повторялся.
Личный опыт: сколько реально съедает батарейка
Мы ставили датчик освещённости на Pro Mini 3.3 В с восьмисекундным сном и смотрели, как живёт батарейка. Пока плата спала, потребление было незаметным, а в момент пробуждения она на несколько десятков миллиампер просыпалась, снимала показание и снова засыпала.
Самое интересное началось, когда мы убрали с платы штатный светодиод и выпаяли стабилизатор: плата стала есть в десятки раз меньше в режиме сна, и время жизни батарейки выросло так заметно, что это было видно без всяких замеров, просто по сроку замены батарейки. Второе, что мы сделали, убрали из скетча Serial.begin(9600) во сне: у UART нет смысла держать включённым, пока чип спит. Третье: мы перевели датчик с аналогового чтения на цифровое там, где это было возможно, потому что пробуждение ради одного бита экономит заметную часть энергии.
Авторская позиция: когда брать Pro Mini
Мы советуем брать Pro Mini, когда проект уходит в корпус или в стену и больше не нужно перепрошивать, и когда важно время жизни батарейки. Для версии 3.3 В это ещё и удобство: датчики с трёхвольтовой логикой подключаются напрямую, без делителей на резисторах, которых в проекте и так не хватает места.
Но есть два случая, где мы бы не стали её брать. Первый: учебный проект, который вы будете переделывать десять раз. Без USB возиться с адаптером на каждой правке неудобно, и Nano окупится разницей в удобстве уже на втором занятии. Второй: проект с 5-вольтовыми модулями и требованием скорости. Тогда 16 МГц и логика 5 В важнее размера, и подходит Nano. Короткое правило: Pro Mini это не «покруче», а ответ на конкретный вопрос «как я буду прошивать и питать это устройство, когда оно уедет в стену».