Arduino Primo
Примечание
Данная страница описывает продукт, снятый с производства.
Arduino Primo сочетает в себе вычислительную мощность процессора nRF52, Espressif ESP8266 для WiFi, а также несколько встроенных датчиков и зарядное устройство для батарей.
Arduino Primo — первая плата, разработанная совместно с Nordic Semiconductor. Она предоставляет новые преимущества для мира IoT на одной платформе: продвинутую 32-битную архитектуру микроконтроллера, Bluetooth Low Energy, Wi-Fi, связь ближнего поля (NFC), а также возможность передачи и приёма инфракрасного (ИК) излучения.
На плате расположены три микроконтроллера:
nRF52832 — основной микроконтроллер Arduino со встроенным Bluetooth Low Energy и NFC
STM32f103 — сервисный микроконтроллер, используемый для расширенной отладки и программирования других микроконтроллеров
ESP8266 — для Wi-Fi и связанных функций интернет-подключения
Плата имеет:
14 цифровых входов/выходов (из которых 12 могут использоваться как выходы ШИМ)
6 аналоговых входов
Керамический резонатор 64 МГц
Разъём micro-USB
Разъём ICSP
Зарядное устройство для батарей
Инфракрасный приёмник и передатчик
NFC-антенна
Интерфейс Bluetooth Low Energy
Зуммер
Две сервисные кнопки
Светодиоды
Кнопки сброса (для сброса различных микроконтроллеров)
Arduino Primo может быть подключён к компьютеру с помощью кабеля micro-USB, или он может питаться от батареи, подключённой через 2-контактный разъём JST-PH. Наличие Bluetooth и Wi-Fi на борту облегчает начало работы в мире IoT.
Документация
OSH: Схемы
Arduino Primo — оборудование с открытым исходным кодом! Вы можете собрать свою собственную плату, используя следующие файлы:
Программирование
Arduino Primo можно программировать с помощью Arduino IDE, а также стороннего программного обеспечения. Arduino доступен начиная с Arduino IDE 1.8.x, при загрузке соответствующей платформы (Arduino NRF52) из менеджера плат.
Питание
Arduino Primo может питаться тремя различными способами:
с помощью разъёма micro-USB
подключением источника питания к выводу Vin
с помощью внешней батареи, подключённой через 2-контактный разъём JST-PH
Primo имеет встроенное зарядное устройство и схему управления питанием, которые позволяют работать от батареи или внешних 5 В, а также заряжать Li-Ion и Li-Pol батареи. При работе от внешних 5 В (4,75–5,25 В) он отключает батарею, если напряжение ниже 3,5 В, и переключение с одного источника на другой происходит автоматически.
Зарядное устройство
Ток зарядки составляет 340 мА по умолчанию, но вы можете замкнуть паяльные перемычки на задней стороне платы, когда вам нужен больший ток:
MED: 810 мА
HIGH: 910 мА
Выводы питания:
VIN. Входное напряжение платы Arduino может подаваться от внешнего источника питания или батареи. Оно должно быть в диапазоне от 2,7 В до 5,5 В.
5V. Этот вывод выдаёт стабилизированное напряжение 5 В, генерируемое встроенным регулятором. Подача входного напряжения питания на выводы 5V или 3.3V обходит регулятор и может повредить плату. Мы не рекомендуем этого делать.
3V3. Этот вывод выдаёт стабилизированное напряжение 3,3 В, генерируемое встроенным регулятором. Максимальный потребляемый ток — 50 мА.
GND. Выводы заземления.
IOREF. Этот вывод на плате Arduino предоставляет опорное напряжение, при котором работает микроконтроллер. Правильно сконфигурированный шилд может считать напряжение с вывода IOREF и выбрать соответствующий источник питания или включить преобразователи уровня на выходах 5 В или 3,3 В.
Память
nRF52832 имеет 512 КБ флеш-памяти и 64 КБ SRAM. Встроенная EEPROM-память отсутствует.
Входы и выходы
Каждый из 14 цифровых выводов Primo может использоваться как вход или выход с помощью функций pinMode(), digitalWrite() и digitalRead(). Они работают при напряжении 3,3 В. Каждый вывод может обеспечить или принять максимальный ток 14 мА. Кроме того, некоторые выводы имеют специализированные функции:
Serial: 0 (RX) и 1 (TX) — выводы 0 и 1 используются для приёма (RX) и передачи (TX) последовательных данных TTL. На Primo светодиоды TX и RX отсутствуют, но светодиод ON мигает каждый раз при отправке данных через последовательный порт nRF52.
Внешние прерывания: все выводы (цифровые и аналоговые) могут использоваться как внешние прерывания, за исключением выводов 0 и 1. Имейте в виду, что нельзя использовать более восьми выводов прерываний одновременно. Эти выводы можно сконфигурировать для срабатывания прерывания по низкому уровню, по нарастающему или спадающему фронту, или по изменению значения. Подробнее см. функцию attachInterrupt().
ШИМ: широтно-импульсная модуляция доступна на всех цифровых выводах, кроме выводов 0 и 1. Разрешение 12-битного выхода ШИМ можно настроить с помощью функции analogWriteResolution().
SPI: шина последовательного периферийного интерфейса (SPI) доступна через выводы 10 (SS), 11 (MOSI), 12 (MISO) и 13 (SCK), а также через встроенный разъём ICSP. Связь SPI доступна с помощью библиотеки SPI.
LED: встроенный светодиод подключён к цифровому выводу 9. Когда вывод имеет значение HIGH, светодиод горит, когда вывод имеет значение LOW — он выключен.
Primo имеет 6 аналоговых входов, обозначенных A0–A5, каждый из которых обеспечивает до 14 бит разрешения (т.е. 16384 различных значений). По умолчанию они измеряют от земли до 3,3 вольт, хотя можно изменить верхний предел их диапазона с помощью функции analogReference(). Несколько дополнительных выводов на разъёмах имеют специализированные функции:
TWI: связь по двухпроводному интерфейсу (TWI) доступна через линию данных (SDA) и линию тактового сигнала (SCL) (расположенные рядом с AREF). Связь TWI поддерживается с помощью библиотеки Wire.
AREF. В отличие от некоторых других плат Arduino, вывод аналогового опорного напряжения (AREF) не может использоваться для подключения внешнего опорного напряжения для команды analogRead().
RESET. Подайте LOW на линию сброса для сброса микроконтроллера. Вывод RESET сбрасывает только микроконтроллер nRF52832. Для сброса всех трёх микроконтроллеров на плате используйте кнопку сброса.
Связь
Arduino Primo имеет ряд средств для связи с компьютером, планшетом или смартфоном; другим Arduino; или другими микроконтроллерами и устройствами.
Самый простой способ связи — использование USB-кабеля между портом micro-USB на Primo и стандартным USB-портом на ПК. Это тот же метод, который используется для связи между классическим Arduino UNO и ПК для загрузки скетчей. Также, как и UNO, Primo поддерживает функцию монитора последовательного порта, позволяющую проверять связь между платой и ПК, а также отправлять текстовые сообщения и данные датчиков для отладки или анализа работы скетча.
Библиотека SoftwareSerial позволяет осуществлять последовательную связь через любой из цифровых выводов.
nRF52832 также поддерживает связь I2C (TWI) и SPI. Программное обеспечение Arduino включает библиотеку Wire для упрощения использования шины I2C и библиотеку SPI для связи SPI.
Плата позволяет беспроводную связь с другими устройствами через Bluetooth, NFC, WiFi и ИК, используя специальные библиотеки для каждого протокола.
Интерфейс Bluetooth Low Energy позволяет Primo обмениваться данными с другими устройствами Bluetooth Low Energy. Он также может использоваться ПК, планшетами и смартфонами. Используемая библиотека — Bluetooth Low Energy, предоставляющая возможности периферийного устройства и центрального устройства.
Периферийное устройство NFC поддерживает сигналы связи типа A со скоростью 106 кбит/с. Библиотека NFC содержится в платформе NRF52 для программного обеспечения Arduino (Arduino IDE 1.8.x или более поздней версии).
Wi-Fi связь Primo поддерживается модулем ESP8266, который включает автономную SoC со встроенным стеком протоколов TCP/IP. Этот модуль позволяет подключать Primo к сети Wi-Fi. Конфигурация Wi-Fi Primo поддерживает режим точки доступа (AP), режим станции (STA) и комбинацию двух: AP + STA с помощью библиотеки WiFi Link.
Библиотека CIR позволяет плате Primo взаимодействовать с большим количеством ИК-датчиков. Плата имеет как приёмник, так и передатчик, что обеспечивает полную гибкость для ваших скетчей.
Физические характеристики
Длина и ширина печатной платы (PCB) Primo составляют 2,7 x 2,1 дюйма соответственно. Она включает разъём micro-USB и 2-контактный адаптер для питания от батареи или внешнего источника. Четыре отверстия для винтов позволяют прикрепить плату к поверхности или корпусу.
Примечание
Как и у Arduino Uno и нескольких других плат, расстояние между цифровыми выводами 7 и 8 составляет 160 мил (0,16»), что не является чётным кратным шага 100 мил остальных выводов.
Технические характеристики
WiFi-микроконтроллер |
Микроконтроллер Arduino |
Сервисный микроконтроллер |
|
|---|---|---|---|
Процессор |
ESP8266 |
Nordic nRF52832 |
STM32F103RBT6 |
Архитектура |
Tensilica Xtensa LX106 |
ARM Cortex-M4F |
ARM Cortex-M3 |
Рабочее напряжение |
3,3 В |
3,3 В |
2,0–3,6 В |
Флеш-память |
4 МБ |
512 КБ |
64 КБ |
SRAM / RAM |
8 МБ инструкций / 12 МБ данных |
64 КБ |
20 КБ |
Тактовая частота |
80 МГц |
64 МГц |
до 72 МГц |
WiFi |
802.11 b/g/n 2,4 ГГц |
— |
— |
Время пробуждения |
< 2 мс |
— |
— |
Аналоговые выводы |
— |
6 + 1 ЦАП |
— |
Постоянный ток на вывод |
— |
15 мА |
— |
Bluetooth Smart |
— |
BLE 4.0: мощность TX до +4 дБм, чувствительность -96 дБм в режиме BLE |
— |
Другие функции: интерфейс PDM, аппаратное шифрование AES, тег NFC, преобразователь USB/UART, CMSIS-DAP, расширитель GPIO, управление питанием платы, IrDA
Настройка Linux для Arduino Primo
Выполните этот скрипт для настройки Linux-машины для использования Arduino Primo:
#! /bin/bash
# arduino-linux-setup.sh : A simple Arduino setup script for Linux systems
# Copyright (C) 2015 Arduino Srl
#
# Author : Arturo Rinaldi
# E-mail : arturo@arduino.org
# Project URL : https://github.com/artynet/arduino-linux-setup
refreshudev () {
echo ""
echo "Restarting udev"
echo ""
sudo service udev restart
sudo udevadm control --reload-rules
sudo udevadm trigger
}
groupsfunc () {
echo ""
echo "******* Add User to dialout,tty, uucp, plugdev groups *******"
echo ""
sudo usermod -a -G tty $1
sudo usermod -a -G dialout $1
sudo usermod -a -G uucp $1
sudo groupadd plugdev
sudo usermod -a -G plugdev $1
}
acmrules () {
echo ""
echo "# Setting serial port rules"
echo ""
cat <<EOF
"KERNEL="ttyUSB[0-9]*", TAG+="udev-acl", TAG+="uaccess", OWNER="$1"
"KERNEL="ttyACM[0-9]*", TAG+="udev-acl", TAG+="uaccess", OWNER="$1"
EOF
}
openocdrules () {
echo ""
echo "# Adding Arduino M0/M0 Pro, Primo UDEV Rules for CMSIS-DAP port"
echo ""
cat <<EOF
ACTION!="add|change", GOTO="openocd_rules_end"
SUBSYSTEM!="usb|tty|hidraw", GOTO="openocd_rules_end"
#Please keep this list sorted by VID:PID
#CMSIS-DAP compatible adapters
ATTRS{product}=="*CMSIS-DAP*", MODE="664", GROUP="plugdev"
LABEL="openocd_rules_end"
EOF
}
avrisprules () {
echo ""
echo "# Adding AVRisp UDEV rules"
echo ""
cat <<EOF
SUBSYSTEM!="usb_device", ACTION!="add", GOTO="avrisp_end"
# Atmel Corp. JTAG ICE mkII
ATTR{idVendor}=="03eb", ATTRS{idProduct}=="2103", MODE="660", GROUP="dialout"
# Atmel Corp. AVRISP mkII
ATTR{idVendor}=="03eb", ATTRS{idProduct}=="2104", MODE="660", GROUP="dialout"
# Atmel Corp. Dragon
ATTR{idVendor}=="03eb", ATTRS{idProduct}=="2107", MODE="660", GROUP="dialout"
LABEL="avrisp_end"
EOF
}
dfustm32rules () {
echo ""
echo "# Adding STM32 bootloader mode UDEV rules"
echo ""
cat <<EOF
# Example udev rules (usually placed in /etc/udev/rules.d)
# Makes STM32 DfuSe device writeable for the "plugdev" group
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", MODE="664", GROUP="plugdev", TAG+="uaccess"
EOF
}
dfuarduino101rules (){
echo ""
echo "# Arduino 101 in DFU Mode"
echo ""
cat <<EOF
SUBSYSTEM=="tty", ENV{ID_REVISION}=="8087", ENV{ID_MODEL_ID}=="0ab6", MODE="0666", ENV{ID_MM_DEVICE_IGNORE}="1", ENV{ID_MM_CANDIDATE}="0"
SUBSYSTEM=="usb", ATTR{idVendor}=="8087", ATTR{idProduct}=="0aba", MODE="0666", ENV{ID_MM_DEVICE_IGNORE}="1"
EOF
}
removemm () {
echo ""
echo "******* Removing modem manager *******"
echo ""
if [ -f /etc/lsb-release -a ! -f /etc/SuSE-release ] || [ -f /etc/debian_version ] || [ -f /etc/linuxmint/info ]
then
sudo apt-get -y remove modemmanager
elif [ -f /etc/SuSE-release ]
then
sudo zypper remove modemmanager
elif [ -f /etc/fedora-release ] || [ -f /etc/redhat-release ]
then
sudo yum remove modemmanager
else
echo ""
echo "Your system is not supported, please take care of it with your package manager"
echo ""
fi
}
if [ "$1" = "" ]
then
echo ""
echo "Run the script with command ./arduino-linux-setup.sh \$USER"
echo ""
else
[ `whoami` != $1 ] && echo "" && echo "The user name is not the right one, please double-check it !" && echo "" && exit 1
groupsfunc $1
removemm
acmrules $1 > /tmp/90-extraacl.rules
openocdrules > /tmp/98-openocd.rules
avrisprules > /tmp/avrisp.rules
dfustm32rules > /tmp/40-dfuse.rules
dfuarduino101rules > /tmp/99-arduino-101.rules
sudo mv /tmp/*.rules /etc/udev/rules.d/
refreshudev
echo ""
echo "*********** Please Reboot your system ************"
echo ""
fi