Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Отправка данных со звуком

Компоненты и расходные материалы

Arduino Nano 33 BLE Sense
× 1

Об этом проекте

Здесь, в Chirp HQ, мы были очень рады услышать объявление о выпуске Arduino новой платы с целым рядом новых функций. Эти функции включают в себя широкий набор датчиков, мощный процессор и, самое главное, встроенный микрофон! Хорошие люди из Arduino прислали нам предварительный выпуск новой платы Nano 33 Sense, которая полностью совместима с Chirp, что позволяет сообществу разработчиков отправлять и получать данные с помощью звука.

Chirp добавляет совершенно уникальный транспортный механизм к платам Arduino, добавленные возможности передачи данных по звуку означают, что у хакеров есть больше возможностей подключения на кончиках пальцев. Некоторые из преимуществ передачи данных поверх звука:

  • Независимость от устройства:данные можно отправлять из мобильных приложений, веб-страниц или даже с помощью аудиофайла.
  • Один ко многим:любое устройство в пределах слышимости может получать данные за одну простую транзакцию.
  • Без трения:не требует сопряжения, паролей или начальной настройки.

В этом руководстве мы продемонстрируем, как использовать Chirp SDK для отправки значения RGB для изменения цвета встроенного светодиода.

Chirp работает даже в шумных местах, благодаря многолетним исследованиям, которые мы вложили, чтобы сделать декодер устойчивым к фоновому звуку. Подробнее о преимуществах передачи данных через звук читайте здесь.

Если вы все еще настроены скептически, попробуйте сами.

Начать работу с Chirp проще, чем когда-либо ...

Начало работы

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

Получение данных

Поскольку Nano 33 Sense поставляется со встроенным микрофоном, все, что вам нужно для получения данных с помощью Chirp, - это Chirp SDK, доступный непосредственно из Менеджера библиотек.

Просто откройте диспетчер библиотек и найдите Chirp SDK. Установите v3.3.0 или новее, и вы готовы начать кодирование.

Инструменты> Управление библиотеками

Для начала вы можете открыть наш пример кода.

Файл> Примеры> ChirpSDK> Nano33SenseReceive

Вам нужно будет скопировать и вставить свои учетные данные для 16 кГц-моно-встроенный протокол из developers.chirp.io в файл credentials.h.

Код примера просто распечатает любые полученные данные в Serial Monitor. Однако мы можем легко изменить поведение для включения светодиодов на плате, отредактировав onReceivedCallback функция.

В вашей функции настройки мы должны сначала настроить контакты GPIO, подключенные к светодиодам, как выходы

  #define R_LED_PIN 22 # define G_LED_PIN 23 # define B_LED_PIN 24void setup () {pinMode (R_LED_PIN, OUTPUT); pinMode (G_LED_PIN, ВЫХОД); pinMode (B_LED_PIN, OUTPUT);}  

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

  void onReceivedCallback (void * chirp, uint8_t * payload, size_t length, {if (length> 0) {// Высокие значения означают меньшую яркость, поэтому мы // вычитаем из UINT8_MAX analogWrite (R_LED_PIN, UINT8_MAX - payload [0]); analogWrite (B_LED_PIN, UINT8_MAX - payload [2]);} else {Serial.println («Ошибка декодирования»);}}  

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

Что дальше?

Первая итерация Chirp SDK для Arduino работает только со звуковой моно-встроенной частотой 16 кГц протокол. В ближайшие месяцы мы выпустим неслышную версию, которая будет работать на почти ультразвуковых частотах. Благодаря этому вы сможете отправлять данные на частотах, которые люди не могут слышать, поэтому, например, вы можете встроить данные щебета в существующий звук, такой как песни или видео, для запуска действий.

Мы также продолжим выпуск дополнительных руководств о том, как вы можете использовать передачу данных поверх звука с Arduino. Сообщите нам, где вы использовали Chirp в своих проектах Arduino, отметив нас в twitter @chirp, или свяжитесь с нами по адресу [email protected].

Код

  • Chirp RGB-значения в Nano 33 Sense
Chirp RGB-значения в Nano 33 Sense C / C ++
Отправляйте значения RGB с помощью Chirp, чтобы изменить цвет встроенного светодиода. Вы можете использовать наши прикрепленные звуковые клипы к этому руководству, чтобы опробовать его, или сделать это самостоятельно, отправив массив из 3 байтов.
 / ** ----------------- -------------------------------------------------- - Пример кода для получения данных с помощью платы Arduino Nano 33 Sense. @file Nano33SenseReceive.ino @brief Создайте учетную запись разработчика на https://developers.chirp.io, скопируйте и вставьте ключ, секрет и строку конфигурации для протокола «16 кГц-моно-встроенный» в определения chirp ниже. В этом примере мы начнем прослушивание значений RGB и изменим цвет встроенного светодиода. Схема:- Плата Arduino Nano 33 BLE Copyright © 2011-2019, Asio Ltd. Все права защищены. -------------------------------------------------- ----------------- * / # include  #include "chirp_connect.h" #define CHIRP_APP_KEY "YOUR_APP_KEY" #define CHIRP_APP_SECRET "YOUR_APP_SECRET" #define CHIRP_APP_CONFIG_CONFIG "YOUR_APP_CONFIG" YOUR_APP_SECRET " "#define SAMPLE_RATE 16000 # define BUFFER_SIZE 256 #define R_LED_PIN 22 #define G_LED_PIN 23 #define B_LED_PIN 24 // Глобальные переменные ------------------------- -------------------------- static chirp_connect_t * chirp =NULL; short sampleBuffer [BUFFER_SIZE]; volatile int samplesRead; // Определения функций --- -------------------------------------------- void setupChirp (void); void chirpErrorHandler (chirp_connect_error_code_t code); void onPDMdata (void); // Главная ---------------------------------- ----------------------------- void setup () {Serial.begin (115200); // while (! Serial); pinMode (R_LED_PIN, ВЫХОД); pinMode (G_LED_PIN, ВЫХОД); pinMode (B_LED_PIN, ВЫХОД); setupChirp (); PDM.onReceive (onPDMdata); PDM.setGain (30); if (! PDM.begin (1, SAMPLE_RATE)) {Serial.println («Не удалось запустить PDM!»); в то время как (1); } analogWrite (R_LED_PIN, UINT8_MAX); analogWrite (G_LED_PIN, UINT8_MAX); analogWrite (B_LED_PIN, UINT8_MAX);} void loop () {if (samplesRead) {chirp_connect_error_code_t err =chirp_connect_process_shorts_input (chirp, sampleBuffer, samplesRead); chirpErrorHandler (ошибка); samplesRead =0; }} void onPDMdata () {int bytesAvailable =PDM.available (); PDM.read (sampleBuffer, bytesAvailable); samplesRead =bytesAvailable / sizeof (short);} // Чирикать ------------------------------------- ------------------------- void onReceivingCallback (void * chirp, uint8_t * payload, size_t length, uint8_t channel) {Serial.println ("Получение данных ... "); analogWrite (R_LED_PIN, UINT8_MAX); analogWrite (G_LED_PIN, UINT8_MAX); analogWrite (B_LED_PIN, UINT8_MAX);} void onReceivedCallback (void * chirp, uint8_t * payload, size_t length, uint8_t channel) {if (length) {// Высокие значения означают меньшую яркость, поэтому мы // вычитаем из UINT8_MAX analogWrite (R_LED_PIN, UINT8_MAX - полезная нагрузка [0]); analogWrite (G_LED_PIN, UINT8_MAX - полезная нагрузка [1]); analogWrite (B_LED_PIN, UINT8_MAX - полезная нагрузка [2]); } еще {analogWrite (R_LED_PIN, 0); analogWrite (G_LED_PIN, UINT8_MAX); analogWrite (B_LED_PIN, UINT8_MAX); задержка (500); analogWrite (R_LED_PIN, UINT8_MAX); задержка (500); analogWrite (R_LED_PIN, 0); Serial.println («Ошибка декодирования»); }} void chirpErrorHandler (chirp_connect_error_code_t code) {if (code! =CHIRP_CONNECT_OK) {const char * error_string =chirp_connect_error_code_to_string (код); Serial.println (строка_ошибки); выход (42); }} void setupChirp (void) {chirp =new_chirp_connect (CHIRP_APP_KEY, CHIRP_APP_SECRET); if (chirp ==NULL) {Serial.println ("Ошибка инициализации Chirp."); возвращение; } chirp_connect_error_code_t err =chirp_connect_set_config (chirp, CHIRP_APP_CONFIG); chirpErrorHandler (ошибка); символ * информация =chirp_connect_get_info (щебетать); Serial.println (информация); chirp_connect_free (информация); chirp_connect_callback_set_t callback_set ={.on_state_changed =NULL, .on_sending =NULL, .on_sent =NULL, .on_receiving =onReceivingCallback, .on_received =onReceivedCallback}; err =chirp_connect_set_callbacks (щебетать, callback_set); chirpErrorHandler (ошибка); err =chirp_connect_set_input_sample_rate (chirp, SAMPLE_RATE); chirpErrorHandler (ошибка); err =chirp_connect_set_frequency_correction (chirp, 1.0096); chirpErrorHandler (ошибка); err =chirp_connect_start (щебетать); chirpErrorHandler (ошибка); Serial.println («Chirp SDK инициализирован.»); Serial.flush ();} 

Производственный процесс

  1. LP-запись
  2. Интеграция данных датчика с микропроцессором Raspberry Pi
  3. Что мне делать с данными ?!
  4. Приступаем к делу с помощью Интернета вещей
  5. Обновление Индустрии 4.0 с помощью пограничной аналитики
  6. Тип данных Char C++ с примерами
  7. 8 различных типов утечек данных с примерами
  8. Повышение энергоэффективности с помощью ЧМИ
  9. Расширение возможностей групп цифрового производства знаниями
  10. С городскими данными в режиме реального времени приходят инновации