Статья: Платы Arduino Nano 33

Оригинальный Arduino Nano был выпущен в 2008 году и стал очень популярным. По сути, это эквивалент популярного Arduino Uno в меньшем форм-факторе, и у него даже есть пара дополнительных аналоговых выходных контактов. Как и большинство разработок Arduino, это продукт с открытым исходным кодом, поэтому его копирует множество других производителей.

В 2019 году Arduino выпустила Arduino Every, обновленную версию Nano. Впоследствии они выпустили еще три «обновленные» платы Nano с разнообразной встроенной периферией.

«33» в названии платы указывает на то, что это 3,3-вольтовое устройство, в отличие от оригинального 5-вольтового Nano.

Благодаря распиновке, эквивалентной старой плате Nano, и возможности использовать огромную коллекцию существующего программного обеспечения и библиотек Arduino, в платы Nano 33 можно добавлять новые возможности к старым конструкциям и является отличным выбором для новых продуктов IoT.

Четыре «новые» платы Arduino Nano упакованы в тот же 30-контактный модуль, что и оригинальный Nano. В отличие от оригинала, более новые платы выпускаются в «зубчатом» форм-факторе. Этот дизайн, который мы также видели на Seeeduino XIAO и Raspberry Pi Pico, позволяет напрямую припаивать плату к другой печатной плате в качестве устройства для поверхностного монтажа. Вы также можете припаять штыревые контакты, модули упакованы с штекерными разъемами Dupont для этой цели.

Новые платы выглядят следующим образом:

Arduino Nano Every

Это Arduino Nano «начального уровня», и это прямое обновление оригинальной конструкции на основе ATmega328.

Arduino Nano Every использует микроконтроллер ATmega4809 , который представляет собой 8-битный контроллер, работающий на частоте 20 МГц.  

Arduino Nano 33 BLE

Как вы, наверное, догадались из названия, Arduino Nano 33 BLE поддерживает Bluetooth.

В устройстве используется модуль NINA-B3 серии B306 Bluetooth 5 с низким энергопотреблением. Этот модуль основан на SoC Nordic Semiconductor nRF52840 (система на кристалле), которая сама построена на базе 32-разрядного процессора ARM® Cortex-M4 с модулем с плавающей запятой, работающим на частоте 64 МГц.

Arduino Nano 33 BLE Sense

Это устройство похоже на предыдущее тем, что в нем используется тот же модуль NINA-B3

Он также имеет множество встроенных датчиков:

Совершенно очевидно, откуда произошло название «Sense»!

Arduino Nano 33 IoT

Этот 32-битный модуль оснащен WiFi, Bluetooth, встроенными часами реального времени (RTC) и инерциальным измерительным блоком (IMU). 

Давайте продолжим и обсудим этот модуль более подробно.

Arduino Nano 33 IoT

Arduino Nano 33 IoT — это небольшой модуль того же форм-фактора, что и оригинальный Arduino Nano. Однако, в отличие от оригинального Nano, в этой модели используется разъем MicroUSB (в оригинальном Nano используется MiniUSB). 

Распиновка

Arduino Nano 33 IoT не только имеет тот же 30-контактный корпус, что и его предшественник, но и имеет те же распиновки.

Однако, несмотря на одинаковую распиновку, между этим модулем и более ранним Nano есть некоторые ключевые отличия. 

Уровни логического напряжения

Самым большим и, возможно, самым важным отличием является то, что Arduino Nano 33 IoT представляет собой логическое устройство с напряжением питания 3,3 В. Он НЕ устойчив к напряжению 5 вольт , поэтому замена его в схеме, разработанной для оригинального Nano, может привести к его повреждению.

Устройство имеет встроенный регулятор напряжения и может питаться либо от порта MicroUSB, либо от напряжения, подаваемого на контакт VIN . Таким образом, вы можете подать на устройство максимум 14 вольт.

VUSB-контакт

Контакт VUSB является выходом, как и на оригинальном Nano. Однако по замыслу он не связан. Причина этого в том, что контакт VUSB является 5-вольтовым выходом из разъема MicroUSB, и если эти 5 вольт когда-либо соприкоснутся (скажем, через подтягивающий резистор) с входным контактом, это может повредить или разрушить Интернет вещей Nano 33.

Чтобы использовать этот штырек, вам нужно перемыкнуть набор контактных площадок на нижней стороне модуля. Эти контактные площадки расположены рядом с контактом VUSB .

Обратите внимание, что после того, как пэды будут перемычены , контакт VUSB будет выдавать 5 вольт ТОЛЬКО при питании через разъем MicroUSB. Если модуль питается от вывода VIN, то на выводе VUSB не будет выходного напряжения .

Подтягивающие резисторы I2C

Как и многие другие Arduino, в том числе оригинальный Nano, Arduino Nano 33 IoT разделяет свои соединения I2C с двумя аналоговыми входными контактами, A4 и A5. Но, в отличие от других моделей Arduino, Arduino Nano 33 IoT имеет внутренние подтягивающие резисторы, подключенные к этим контактам.

Эти подтяжки необходимы, поскольку IMU является устройством I2C, поэтому шина используется внутри.

Поскольку невозможно отключить подтяжки, вы не сможете использовать контакты A4 и A5 в качестве аналоговых входов. Фактически, вам лучше ограничить использование этих контактов соединениями I2C , если вы планируете использовать внутренний IMU.

Функции

Как я уже кратко упомянул, плата Arduino Nano 33 IoT имеет несколько полезных функций и встроенных периферийных устройств. Давайте посмотрим на них.

Микроконтроллер SAMD21G

Сердцем IoT-модуля Arduino Nano 33 является 32-битный микроконтроллер SAMD21G . Это тот же микроконтроллер, который мы исследовали, когда рассматривали Seeeduino XIAO.

Процессор работает на частоте 48 МГц, что дает Nano 33 IoT значительные преимущества в скорости и мощности по сравнению с 16-мегагерцовой 8-битной мощностью ATMega328 оригинального Nano.

Этот процессор имеет шесть портов SERCOM, которые являются последовательными портами общего назначения. Вы можете настроить порт SERCOM как соединение SPI, I2C или Serial UART. По умолчанию Arduino Nano 33 IoT имеет порт I2C, настроенный на адресные контакты A4 и A5, для обеспечения совместимости со старыми конструкциями.

Wi-Fi и Bluetooth

Arduino Nano 33 IoT использует модуль Bluetooth и WiFi ublox NINA-W102 для своих функций беспроводной связи. Этот модуль содержит микросхему ESP-32 и имеет встроенную антенну.

NIN-W102 может предоставлять услуги хоста и ведомого устройства Bluetooth и BLE 4.2.

Wi-Fi работает на частоте 2,4 ГГц и соответствует стандартам IEEE b, g и n. 

Модуль NINOA-W102 подключается к микроконтроллеру SAMD21G по шине SPI.

Счетчик в реальном времени

Микроконтроллер SAMD21G имеет встроенный 32-битный RTC. Это устройство измеряет количество секунд, прошедших с начала эпохи Unix, и может использоваться для предоставления функций времени и даты.

Инерциальный измерительный блок (IMU)

Arduino Nano 33 IoT включает в себя инерциальный измерительный блок LSM6DS3  или IMU.

Этот IMU оснащен цифровым 3D-акселерометром и цифровым 3D-гироскопом, а связанная с ним библиотека упрощает работу с ним.

LSM6DS3 — это устройство I2C, и внутри оно подключено к той же шине I2C, что и контакты A4 и A5. По этой причине в модуле есть два внутренних подтягивающих резистора. IMU имеет адрес I2C 0x6A.

Начало работы с Nano 33 IoT

Arduino Nano 33 IoT упакован в небольшую коробку, в которую также входят два набора 20-контактных штекерных разъемов. Вам нужно будет припаять их к модулю, если вы не планируете использовать зубчатые контакты и использовать плату в своем собственном дизайне.

Пакет также включает информацию о гарантии (когда вы в последний раз получали информацию о гарантии на микроконтроллер?) и набор милых маленьких наклеек на тему Arduino.

Если у вас также есть Arduino Nano, старая 8-битная версия 12 МГц, вы можете сравнить размер двух модулей, они очень похожи. На самом деле, если у вас есть какие-либо адаптеры для прототипирования Nano, такие как тот, который я проиллюстрировал на предыдущем изображении, они идеально подойдут.

После того, как вы припаяете контакты (вы также можете проводить большинство экспериментов без припаивания контактов), все, что вам останется, чтобы начать работать с вашим новым улучшенным Nano, — это подключить его к компьютеру. 

Для этого вам понадобится кабель MicroUSB. Убедитесь, что это кабель, предназначенный для обмена данными, так как некоторые кабели MicroUSB предназначены только для питания и подзарядки.

Настройка Arduino IDE

Мы будем использовать Arduino IDE для работы с нашей платой, ведь это плата Arduino! Однако, прежде чем мы сможем начать с ним работать, нам нужно добавить несколько вещей.

Следующие инструкции предполагают, что вы используете последнюю версию Arduino IDE.

Менеджер плат

Мы начнем с установки расширения платы Arduino SAMD21 с помощью диспетчера плат.

Откройте диспетчер плат в Arduino IDE, щелкнув пункт меню « Инструменты » в верхнем меню, а затем переместившись вниз к текущему выбору платы (например, Arduino Uno). Справа откроется меню с « Менеджер плат » первым пунктом.  

Выберите Диспетчер плат . Откроется диалоговое окно Менеджера плат, и вы получите доступный для поиска список плат, которые вы можете установить.

Вам понадобится ввести в поисковое поле менеджера плат Arduino SAMD Boards (32-Bit ARM Cortex-M0+) . 

Обратите внимание, что в списке поддерживаемых плат есть и Arduino Nano IoT.

Вы можете искать «SAMD», но вам, скорее всего, это не нужно, так как это четвертый элемент в списке плат!

Выберите плату и нажмите кнопку « Установить ». Загрузка всех файлов и примеров кода для платы займет некоторое время, так что наберитесь терпения. Как только это будет сделано, вы можете закрыть Менеджер плат.

Обычно рекомендуется перезапустить (т.е. закрыть и открыть) Arduino IDE после этого, хотя обычно в этом нет необходимости.

Теперь вы должны увидеть выбор « Платы Arduino SAMD », когда будете выбирать свою плату. Вы можете открыть его и выбрать плату Arduino Nano 33 IoT.

Установите новые библиотеки

Для многих расширенных функций Arduino Nano 33 IoT потребуются дополнительные библиотеки. Все они могут быть установлены с помощью диспетчера библиотек.

Мы начнем с установки библиотеки, которую будем использовать для связи по WiFi.

Откройте элемент меню « Скетч », а затем откройте «Подключить библиотеку». Управлять библиотеками — это первый пункт в меню, которое открывается справа от вас. Выберите его, чтобы открыть окно диспетчера библиотек.

После того, как вы откроете менеджер библиотек, вы захотите найти нужную библиотеку, в данном случае это Arduino WiFiNINA Library . Найдите «WiFiNINA», и это должно быть первым результатом.

Нажмите кнопку «Установить», чтобы установить библиотеку WiFiNINIA и все ее образцы кода.

Надо повторить процесс со следующими библиотеками (не забываем выбрать версию библиотеки):

  • Библиотека Arduino LSM6DS3
  • Ардуино RTCZero
  • ArduinoBLE

После установки всех этих библиотек вы можете закрыть Менеджер библиотек. Теперь мы готовы к работе с нашей платой Arduino Nano 33 IoT.

Легкий тест — знакомый скетч Blink. Вставьте кабель в свою плату и выберите соответствующий порт. 

Теперь загрузите Blink и посмотрите на результаты. Поиграйте со временем и загрузите его снова.

Желтый светодиод у разъема MicroUSB — это встроенный светодиод, эквивалентный контакту 13 на любом другом Arduino.

Wi-Fi и часы реального времени

Теперь, когда мы запустили обязательный скетч Blink, мы можем запустить несколько демонстрационных скетчей и посмотреть, как использовать некоторые элементы платы Arduino Nano 33 IoT.

Первые две функции, которые мы продемонстрируем, — это подключение к WiFi и часы реального времени. Хотя эти две функции могут показаться довольно независимыми (и это так), мы можем использовать обе из них, чтобы установить время нашего клика, используя нашу сеть Wi-Fi.

Прежде чем мы перейдем к этому, давайте посмотрим, как работает WiFi.

WiFi-сканирование

Первый демонстрационный скетч, который мы запустим, — это WiFi Scan. Как следует из названия, этот скетч сканирует область на наличие доступных WiFi-соединений и отображает их на последовательном мониторе.

Не предпринимается никаких попыток фактического подключения к этим сигналам, и отображаются как зашифрованные, так и незашифрованные сети.

Вы можете загрузить этот скетч, открыв меню « Файл» в Arduino IDE, а затем открыв подменю « Примеры ». Прокрутите подменю вниз, пока не увидите WIFININA . Откройте этот пункт меню, и вы увидите несколько примеров эскизов. 

Загрузите пример ScanNetworks .

Следует отметить, что в этом скетче используются обе библиотеки WiFiNINA и SPI. Это связано с тем, что модуль NINA требует для связи SPI.

В остальном схема довольно проста. Большая часть из них связана с настройкой модуля WiFi и проверкой его доступности.

Функция listNetworks является сердцевиной скетча, используя библиотеку WiFiNINA для сканирования, а затем распечатки SSID, а также сведений о мощности и шифровании для каждой найденной сети.

Убедитесь, что Arduino Nano 33 IoT подключен к компьютеру, а затем выберите его в качестве типа платы. Кроме того, выберите правильный порт для устройства, в названии порта будет указано «Arduino Nano 33 IoT USB».

Теперь загрузите скетч и откройте серийный монитор. Вы должны увидеть список ближайших сетей Wi-Fi, а также мощность их сигнала.

Тест подключения WiFi

Вот простой скетч, иллюстрирующий, как подключиться к сети Wi-Fi и получить IP-адрес. Вы можете использовать это как основу для более сложного эскиза.

/*

  Arduino Nano 33 IoT WiFi RTC Demo

  nano-33-iot-wifi-rtc.ino

  Demonstrates use of Real Time Clock

  Gets Linux epoch from network NTP service and determines current time

  Results on serial monitor

  DroneBot Workshop 2021

  Based upon Arduino example by Arturo Guadalupi

*/

// Include required libraries

#include <SPI.h>

#include <WiFiNINA.h>

#include <WiFiUdp.h>

#include <RTCZero.h>

// WiFi Credentials (edit as required)

char ssid[] = “xxxxxxx”;      // Wifi SSID

char pass[] = “xxxxxxxxx”;       // Wifi паспорт

int keyIndex = 0;                // Номер индекса сетевого ключа (необходим только для WEP)

// Объект для часов реального времени

RTCZero rtc;

int status = WL_IDLE_STATUS;

// Постоянный часовой пояс – меняйте его в зависимости от вашего местоположения

const int GMT = -5;

void printTime()

{

  print2digits(rtc.getHours() + GMT);

  Serial.print(“:”);

  print2digits(rtc.getMinutes());

  Serial.print(“:”);

  print2digits(rtc.getSeconds());

  Serial.println();

}

void printDate()

{

  Serial.print(rtc.getDay());

  Serial.print(“/”);

  Serial.print(rtc.getMonth());

  Serial.print(“/”);

  Serial.print(rtc.getYear());

  Serial.print(” “);

}

void printWiFiStatus() {

  // Print the network SSID

  Serial.print(“SSID: “);

  Serial.println(WiFi.SSID());

  // Print the IP address

  IPAddress ip = WiFi.localIP();

  Serial.print(“IP Address: “);

  Serial.println(ip);

  // Print the received signal strength

  long rssi = WiFi.RSSI();

  Serial.print(“signal strength (RSSI):”);

  Serial.print(rssi);

  Serial.println(” dBm”);

}

void print2digits(int number) {

  if (number < 10) {

    Serial.print(“0”);

  }

  Serial.print(number);

}

void setup() {

  // Start Serial port

  Serial.begin(115200);

  // Check if the WiFi module works

  if (WiFi.status() == WL_NO_SHIELD) {

    // Wait until WiFi ready

    Serial.println(“WiFi adapter not ready”);

    while (true);

  }

      // Establish a WiFi connection

  while ( status != WL_CONNECTED) {

    Serial.print(“Attempting to connect to SSID: “);

    Serial.println(ssid);

    status = WiFi.begin(ssid, pass);

    // Wait 10 seconds for connection:

    delay(10000);

  }

  // Print connection status

  printWiFiStatus();

  // Start Real Time Clock

  rtc.begin();

  // Variable to represent epoch

  unsigned long epoch;

// Variable for number of tries to NTP service

  int numberOfTries = 0, maxTries = 6;

// Get epoch

  do {

    epoch = WiFi.getTime();

    numberOfTries++;

  }

  while ((epoch == 0) && (numberOfTries < maxTries));

    if (numberOfTries == maxTries) {

    Serial.print(“NTP unreachable!!”);

    while (1);

    }

    else {

    Serial.print(“Epoch received: “);

    Serial.println(epoch);

    rtc.setEpoch(epoch);

    Serial.println();

    }

}

void loop() {

  printDate();

  printTime();

  Serial.println();

  delay(1000);

}

Этот скетч — адаптация примера Arduino от Артуро Гуадалупи . Он был немного изменен для правильной работы с платой Nano 33 IoT.

В скетче используются те же две библиотеки (WiFiNINA и SPI) вместе с библиотекой RTCZero для часов.

Обратите внимание на константу часового пояса в строке 31. Вам нужно будет настроить ее для вашего региона, так как она представляет собой количество часов, на которые вы смещены от GMT (или «UTC», как это правильно называется).

Если вы не знаете свое смещение по Гринвичу, вы можете определить его здесь . У меня есть значение -5 (смещение может быть положительным или отрицательным), так как я нахожусь в восточном часовом поясе в Северной Америке.

Многие функции в скетче просто форматируют вывод для печати.

Свойство getTime библиотеки WiFi используется для получения времени с NTP-сервера, вы увидите это в строке 125. 

В строке 139 rtc.setEpoch устанавливает часы на основе полученного номера эпохи.

В цикле мы вызываем функции printDate и printTime , а затем задерживаемся на секунду. Это будет отображать наше время, обновляемое каждую секунду.

Загрузите скетч и откройте последовательный монитор. Вы должны следить за правильным временем в последовательном мониторе.

Обратите внимание, что в моей демонстрации время отличается ровно на один час, это потому, что я снимал это, когда мы были на летнем времени. Скетч не учитывает летнее время.

Инерциальная единица измерения

Инерциальный измерительный блок, или IMU, представляет собой простое в использовании устройство, которое может действовать как гироскоп и акселерометр. 

Обратите внимание, что LSM6DS3, используемый в Nano 33 IoT, не является таким сложным устройством, как некоторые IMU, которые также включают в себя магнитометры. Но у него все еще есть несколько приложений, таких как контроллеры жестов и датчики положения.

Библиотека для LSM6DS3 делает работу с устройством очень простой, как вы увидите в следующих двух примерах. 

Вы можете найти эти скетчи, зайдя в меню «Файл» Arduino IDE и выбрав « Примеры » .

 Затем перейдите к выбору Arduino LSM6DS3 (в Примерах для любой платы), и вы увидите два эскиза, SimpleAccelerometer и SimpleGyroscope .

Простой акселерометр

Вот скетч простого акселерометра:

/*

  Arduino LSM6DS3 – Simple Accelerometer

  This example reads the acceleration values from the LSM6DS3

  sensor and continuously prints them to the Serial Monitor

  or Serial Plotter.

  The circuit:

  – Arduino Uno WiFi Rev 2 or Arduino Nano 33 IoT

  created 10 Jul 2019

  by Riccardo Rizzo

  This example code is in the public domain.

*/

#include <Arduino_LSM6DS3.h>

void setup() {

  Serial.begin(9600);

  while (!Serial);

  if (!IMU.begin()) {

    Serial.println(“Failed to initialize IMU!”);

    while (1);

  }

  Serial.print(“Accelerometer sample rate = “);

  Serial.print(IMU.accelerationSampleRate());

  Serial.println(” Hz”);

  Serial.println();

  Serial.println(“Acceleration in G’s”);

  Serial.println(“X\tY\tZ”);

}

void loop() {

  float x, y, z;

  if (IMU.accelerationAvailable()) {

    IMU.readAcceleration(x, y, z);

    Serial.print(x);

    Serial.print(‘\t’);

    Serial.print(y);

    Serial.print(‘\t’);

    Serial.println(z);

  }

}

Как видите, это действительно очень просто! Библиотека IMU — единственная необходимая библиотека, и она выполняет большую часть работы.

В строке 23 IMU инициализируется как часть функции настройки. 

Затем в цикле вызывается функция IMU.readAcceleration для считывания компонентов ускорения x, y и z.

Загрузите скетч и наблюдайте за ним на последовательном мониторе. 

Теперь перемещайте доску, медленно, а затем быстро. Обратите внимание на показания, полученные для трех разных осей.

Эффект будет намного более драматичным, если вместо этого вы используете серийный плоттер . Вы найдете его рядом с Мониторм порта в меню Инструменты .

Графическое представление трех векторов ускорения позволяет очень легко интерпретировать результаты. Попробуйте двигать доску в разных направлениях и наблюдайте за результатами на плоттере.

Простой гироскоп

Этот эскиз почти идентичен простому акселерометру, который мы только что рассмотрели.

/*
Arduino LSM6DS3 – Simple Gyroscope

This example reads the gyroscope values from the LSM6DS3
sensor and continuously prints them to the Serial Monitor
or Serial Plotter.

The circuit:Arduino Uno WiFi Rev 2 or Arduino Nano 33 IoT created 10 Jul 2019
by Riccardo Rizzo This example code is in the public domain.
*/

void setup() {
Serial.begin(9600);
while (!Serial);

if (!IMU.begin()) {
Serial.println(“Failed to initialize IMU!”);

while (1);

}

Serial.print(“Gyroscope sample rate = “);
Serial.print(IMU.gyroscopeSampleRate());
Serial.println(” Hz”);
Serial.println();
Serial.println(“Gyroscope in degrees/second”);
Serial.println(“X\tY\tZ”);
}

void loop() {
float x, y, z;

if (IMU.gyroscopeAvailable()) {
IMU.readGyroscope(x, y, z);

Serial.print(x); Serial.print(‘\t’); Serial.print(y); Serial.print(‘\t’); Serial.println(z);

}
}

На этот раз мы измеряем наше положение в трехмерном пространстве по осям x, y и z. И, опять же, библиотека Arduino LSM6DS3 позволяет очень просто получить эту информацию.

Загрузите скетч и наблюдайте за ним как на последовательном мониторе, так и на последовательном плоттере.

И снова легче интерпретировать данные при просмотре на последовательном плоттере.

С этой библиотекой добавить акселерометр или гироскоп в ваш проект действительно очень просто!

Bluetooth

Bluetooth-соединение позволяет использовать Arduino Nano 33 IoT в ряде проектов, на которые оригинальный Nano был бы неспособен. Поскольку устройство может действовать как ведомое или ведущее устройство Bluetooth, его можно использовать либо как управляемое устройство, либо как контроллер.

Bluetooth-сканирование

Этот скетч действует так же, как сканирование WiFi, которое мы выполняли ранее, с той разницей, что на этот раз мы сканируем периферийные устройства Bluetooth.

Как и в предыдущем скетче, мы отображаем только обнаруженные устройства, мы не пытаемся к ним подключиться.

Вы можете найти этот скетч в разделе Примеры . Перейдите в меню ArduinoBLE, и вы заметите, что оно разделено на две части. В центральной части найдите скан-скетч и загрузите его.

 /* Scan

  This example scans for BLE peripherals and prints out their advertising details:

  address, local name, advertised service UUID’s.

  The circuit:

  – Arduino MKR WiFi 1010, Arduino Uno WiFi Rev2 board, Arduino Nano 33 IoT,

    Arduino Nano 33 BLE, or Arduino Nano 33 BLE Sense board.

  This example code is in the public domain.

*/

#include <ArduinoBLE.h>

void setup() {

  Serial.begin(9600);

  while (!Serial);

  // begin initialization

  if (!BLE.begin()) {

    Serial.println(“starting BLE failed!”);

    while (1);

  }

  Serial.println(“BLE Central scan”);

  // start scanning for peripheral

  BLE.scan();

}

void loop() {

  // check if a peripheral has been discovered

  BLEDevice peripheral = BLE.available();

  if (peripheral) {

    // discovered a peripheral

    Serial.println(“Discovered a peripheral”);

    Serial.println(“———————–“);

    // print address

    Serial.print(“Address: “);

    Serial.println(peripheral.address());

    // print the local name, if present

    if (peripheral.hasLocalName()) {

      Serial.print(“Local Name: “);

      Serial.println(peripheral.localName());

    }

    // print the advertised service UUIDs, if present

    if (peripheral.hasAdvertisedServiceUuid()) {

      Serial.print(“Service UUIDs: “);

      for (int i = 0; i < peripheral.advertisedServiceUuidCount(); i++) {

        Serial.print(peripheral.advertisedServiceUuid(i));

        Serial.print(” “);

      }

      Serial.println();

    }

    // print the RSSI

    Serial.print(“RSSI: “);

    Serial.println(peripheral.rssi());

    Serial.println();

  }

Скетч довольно прост, так как большая часть работы выполняется с помощью библиотеки Arduino BLE. 

В библиотеке есть функция BLE.scan , которая довольно хорошо делает именно то, что нам нужно.

Всякий раз, когда обнаруживается периферийное устройство Bluetooth, его запрашивают для просмотра его рекламируемых услуг. Затем эта информация отображается на последовательном мониторе.

Загрузите скетч, откройте последовательный монитор и наблюдайте за результатами. Конечно, вам понадобится пара периферийных устройств Bluetooth, чтобы отображать какие-либо результаты. Я обнаружил, что приемник был настолько чувствительным, что он также принимал устройства, которыми я не владел, и которые, как я полагаю, принадлежат моим соседям!

Центральная и периферийная демонстрация Bluetooth

Это единственная демонстрация, для которой потребуется несколько внешних компонентов. Это также единственная демонстрация, которую мы рассмотрим, для которой требуются две платы Arduino Nano 33 IoT.

Дополнительные компоненты очень просты, на самом деле нужны только два (и вы даже можете исключить один из них, изменив скетч).

Помимо двух плат Arduino Nano 33 IoT вам понадобятся:

  • Кнопочный переключатель NO с мгновенным контактом SPST.
  • Подтягивающий резистор 10K для этого переключателя (вы также можете сделать это в коде) 
  • Светодиод (дополнительно, так как встроенный светодиод будет работать)
  • Подавляющий резистор для этого светодиода я использовал 220 Ом.

Цель этой демонстрации — показать, как мы можем использовать Arduino Nano 33 IoT как в качестве центрального контроллера Bluetooth, так и в качестве периферийного или ведомого устройства. Мы продемонстрируем это с помощью кнопки на центральном блоке, управляющей светодиодом на периферийном блоке.

Соединение следующее:

Обратите внимание, что мы используем выход 3,3 В в качестве ВЫСОКОГО сигнала при нажатии кнопки. Помните, что Arduino Nano 33 IoT — это логическое устройство с напряжением питания 3,3 вольта, которое не может работать с напряжением 5 вольт.

Возможно, вы захотите собрать эти схемы на двух независимых макетных платах. Вы также можете исключить светодиод и гасящий резистор и просто наблюдать за встроенным резистором в Nano 33 IoT, который действует как периферийное устройство.

Очевидно, нам понадобятся два эскиза, по одному для каждой платы. Вы найдете их в разделе «Примеры» раздела ArduinoBLE.  

Примеры ArduinoBLE разделены на две папки: одна для центрального контроллера, а другая для периферийного устройства. Нам понадобится эскиз из каждой из этих папок.

  • Скетч LedControl из папки Central
  • Скетч светодиода из папки Peripheral.

Ключевым элементом, который следует отметить в каждом эскизе, является то, что они используют общую (и очень длинную) идентификационную строку для идентификации периферийного устройства и установления совпадения.

Периферийное устройство устанавливает «рекламируемую услугу» с «характеристикой», которой в данном случае является светодиод. Центральный контроллер ищет эту объявленную услугу после установления соединения. 

«Характеристикой» является состояние светодиода, включенное или выключенное.

Если периферийное устройство имеет светодиодную характеристику, то центральный эскиз знает, что может им управлять. Он считывает состояние кнопки и изменяет характеристику. Периферийное устройство получает измененную характеристику и соответствующим образом устанавливает состояние светодиода.

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

Как только вы это сделаете, вы сможете управлять состоянием светодиода с помощью кнопки. Последовательный монитор на обоих устройствах будет отображать состояние кнопки или светодиода.

Очень простой пример, но его можно расширить для управления несколькими устройствами через Bluetooth с помощью пары плат Arduino Nano 33 IoT.

Вывод

Arduino Nano 33 IoT, безусловно, является значительным обновлением оригинального Nano, но, конечно, вы ожидаете этого после более чем десятилетнего перерыва между моделями.

Сохранение форм-фактора и распиновки было интересным конструктивным решением, однако, поскольку это 3,3-вольтовое устройство, не совсем возможно просто отключить старый чип и подключить новый. И еще несколько контактов позволят нам воспользоваться некоторыми другими функциями SAMD21, такими как аналоговые выходные контакты.

С точки зрения цены это не так выгодно, как плата MCU узла ESP-32, хотя следует помнить, что входящий в комплект модуль NINA-W103 на самом деле включает в себя ESP-32. Но поскольку этот ESP-32 изолирован подключением к шине SPI, его действительно нельзя использовать ни для чего, кроме канала связи WiFi и Bluetooth.

Это высококачественная плата, и включение IMU вместе с Wi-Fi и Bluetooth должно подходить для некоторых интересных конструкций контроллеров.

Но настоящая блестящая особенность Arduino Nano 33 IoT — это то, о чем я только кратко упомянул — возможность подключения к облаку Arduino. Это позволит использовать плату для того, для чего она предназначена, в качестве устройства контроллера IoT.

Очень скоро мы будем делать именно это с платой Arduino Nano 33 IoT, так что следите за новыми статьями и видеороликами, посвященными этой плате. 

А пока в разделе «Ресурсы» ниже есть несколько ссылок, которые помогут вам начать работу с Arduino Cloud.

Даже без подключения к облаку это очень мощный маленький микроконтроллер, который станет сердцем ряда интересных проектов , как IoT, так и не-IoT. Так что продолжайте искать новые приключения с Arduino Nano 33 IoT!

Дополнительно

Как использовать функцию Serial Plotter в Arduino IDE для отображения графиков.

Визуализация данных при работе с Arduino – это то, что нам всем приходилось делать в прошлом, используя стороннее или самостоятельно разработанное программное обеспечение. Но команда Arduino недавно решила это изменить. Сегодня мы рассмотрим их решение, называемое Serial Plotter, новый инструмент, который поставляется с новыми версиями Arduino IDE.

Serial Plotter обеспечивает среду, через которую мы можем видеть графики данных, выводимых в последовательный порт Arduino в режиме реального времени.

Перед включением этой функции в Arduino IDE инженерам и любителям обычно приходится писать дополнительный код с использованием других инструментов и языков программирования, таких как Python.

Иногда это затрудняет отладку из-за дополнительной работы и времени, которое требуется, особенно в приложениях, основанных на сигналах, где просмотр данных на последовательном мониторе будет недостаточным.

Serial Plotter или последовательный плоттер в основном принимает значения, поступающие из заданного последовательного порта, и отображает их на графике плоскости x-y. Ось Y представляет значения из последовательного порта и автоматически настраивается при увеличении или уменьшении значения.

Можно сказать, что ось X представляет собой момент времени. Каждая точка на оси x представляет выполнение оператора println в коде Arduino.

Проще говоря, каждый раз, когда выполняется команда println, на графике записывается новая точка / данные (значение Y, соответствующее этой конкретной инструкции println).

Ограничением Serial Plotter в этой версии Arduino IDE является тот факт, что он поддерживает всего 500 выборок данных, после чего может потребоваться перезапуск плоттера.

Это может сделать плоттер непригодным для определенных приложений, но, возможно, это изменится в следующих версиях Arduino IDE.

Serial Plotter можно вызвать после загрузки кода на плату Arduino, щелкнув Инструменты – serial plotter в раскрывающемся меню или нажав CTRL + SHIFT + L, что является сочетанием клавиш для той же операции.

Ресурсы

Код, используемый в статье — весь код, используемый в статье, в одном ZIP-файле.

Начало работы с Arduino Nano 33 IoT — официальное руководство от Arduino.

Arduino Nano 33 IoT — полное руководство — руководство от пользователя GitHub «ostaquet».

Облако Arduino — облачный IoT-сервис Arduino.

Начало работы с Arduino IoT Cloud — руководство Arduino по использованию их облачного сервиса.

NINA-W10 Datasheet – Техническое описание радиомодулей серии NINA-W10.

Техническое описание SAMD21 — техническое описание 32-разрядных микроконтроллеров серии SAMD21.

Техническое описание LSM6DS3 — Техническое описание для LSM6DS3 IMU.

Библиотека Arduino LSM6DS3 — библиотека для IMU.

Вы можете скачать этот скетч (и другие примеры) по ссылке