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

«Это для птиц!»

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

Arduino 101
× 1
Intel Edison
× 1
Веб-камера Logitech c270 HD
× 1
Carrier Pololu с цифровым датчиком расстояния Sharp GP2Y0D815Z0F 15 см
× 2
Квадратный резистор, чувствительный к силе (FSR) Adafruit - Interlink 406
× 1
Плата подключения датчика температуры и влажности Adafruit Si7021
× 1
Seeed Grove Start Kit Plus, Intel IoT Edition
× 1
Конденсатор 47 мкФ
× 2
Резистор 1 кОм
× 1
Клеммная колодка Adafruit - 2-контактная, 3,5 мм - упаковка из 5 шт. !
× 1
Компактный импульсный источник питания Adafruit - выбираемый выход 3–12 В постоянного тока
× 1
Adafruit Perma-Proto макетная плата четвертого размера - одиночная
× 1
Перемычки (общие)
× 1

Необходимые инструменты и машины

3D-принтер (общий)
Паяльник (общий)

Приложения и онлайн-сервисы

Intel XDK для Интернета вещей
Autodesk Fusion 360
PubNub Publish / Subscribe API
Cloudinary
noble.js

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

"Это для птиц!" Переосмысление будущего экомониторинга с помощью Arduino 101

Введение и мотивация:

Один из способов измерить здоровье нашего климата и экосистемы, в которой мы живем, - это измерить размер и разнообразие ее фауны или популяции животных. Каждую зиму, начиная с 1987 года, Корнельская лаборатория орнитологии проводит масштабную научную кампанию под названием Project FeederWatch:

«Project FeederWatch - это зимний опрос птиц, которые посещают кормушки на задних дворах, в природных центрах, общественных местах и ​​других местах в Северной Америке… Данные FeederWatch показывают, какие виды птиц каждую зиму посещают кормушки в тысячах мест по всему континенту. . Данные также показывают, сколько особей каждого вида было замечено. Эта информация может использоваться для измерения изменений зимних ареалов и численности видов птиц с течением времени. ”

Это наш первый год участия, и мы хотели совместить наш интерес к созданию и взлому с нашим интересом к природе и нашим участием в Project FeederWatch. Поэтому мы решили заново изобрести будущее наблюдения за птицами и мониторинга окружающей среды с помощью Arduino 101!

Arduino 101 идеально подходит для этого проекта, потому что он сочетает в себе простоту Arduino IDE, чтобы упростить наше встроенное программирование, встроенные возможности, такие как Bluetooth LE, с множеством легко доступных датчиков и коммутационных плат. Встраивая Arduino 101 в самодельную кормушку для птиц, мы разработали экспериментальную платформу для измерения погодных параметров и мониторинга активности птиц в кормушке. Добавление некоторых интересных технологий Интернета вещей от Cloudinary и PubNub помогло нам заново изобрести будущее мониторинга окружающей среды и здоровья экосистем!

Обзор проекта:

Сердце нашего проекта - Arduino 101, встроенная в самодельную кормушку для птиц. Мы используем 2 инфракрасных датчика расстояния Sharp для обнаружения птиц, сидящих на деревянном штыре, проходящем через обе стороны кормушки. Резистор, чувствительный к усилию (FSR), используется для определения количества семян в подающем устройстве. Плата подключения датчиков температуры и влажности Adafruit Si7021 прикреплена к контактам i2c и используется для предоставления наших физических данных о погоде. Arduino 101 настроен для работы в качестве периферийного устройства BLE и отправки данных с этих датчиков через BLE в центральный BLE. устройство. Питание осуществляется от 4 батареек АА. Все эти компоненты помещены в специальный корпус, напечатанный на 3D-принтере.

Мы используем Intel Edison на плате Arduino Breakout Board как в качестве центрального BLE, так и в качестве интернет-шлюза. Веб-камера logitech c270 usb подключена к USB-порту на плате и используется для съемки при получении уведомления BLE, указывающего на активность на одном из выступов. Эти изображения хранятся локально на SD-карте, вставленной в слот для SD-карты на коммутационной плате.

Мы используем Wi-Fi в Intel Edison, чтобы использовать его в качестве интернет-шлюза. Это позволяет нам использовать супертехнологии, такие как PubNub для потоковой передачи данных в реальном времени и Cloudinary для хранения изображений и обработки в облаке.

Кормушка для птиц сделана из пустой бутылки из-под газировки и деревянного дюбеля и подвешена на столб у нас во дворе.

Создание проекта:

Arduino 101 - встроенная кормушка для птиц.

Основой этого проекта является Arduino 101, встроенный в нашу кормушку для птиц. Кормушка для птиц будет находиться на открытом воздухе и должна выдерживать физические нагрузки на открытом воздухе. Потребуется способ передачи данных в реальном времени по беспроводной сети. Расстояние между передающим Arduino 101 и принимающим Edison составляет всего несколько футов, и, поскольку Arduino 101 уже имеет встроенный BLE, мы будем использовать BLE!

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

  • Первая задача:обнаружить птицу на кормушке на открытом воздухе! Для этого проекта нам нужен датчик, который сможет работать на открытом воздухе, защищенный от внешних воздействий. Мы не хотим, чтобы это беспокоило или отпугивало объект. Он должен обнаруживать только то, что находится на насесте. Оценив характеристики различных датчиков, мы решили использовать Pololu Carrier с цифровым датчиком расстояния Sharp GP2Y0D815Z0F. Эти датчики, в отличие от обычных ИК-датчиков, имеют очень малый диапазон обнаружения. Нам нужно только знать, сидит ли птица в нескольких сантиметрах от датчика. Датчики PIR имеют очень большой и широкий диапазон обнаружения. Это отлично подходит для обнаружения любых движений на подъездной дорожке к вашему дому, но мы не хотим, чтобы обнаруживали ветви деревьев или другой «шум» каждый раз, когда кормушка для птиц раскачивается на ветру. Кроме того, быстрая лабораторная оценка показала, что ИК-датчики Sharp работают, когда их помещают в пластиковую бутылку из-под газировки. Это важно, потому что нам нужно защитить электронику от элементов и иметь возможность «видеть сквозь» эту часть корпуса.
  • Вторая задача:после подключения одного из датчиков и его тестирования мы были готовы к работе! Итак, мы подключили второй ИК-датчик Sharp к Arduino 101 и. . .они не сработали! После многократной проверки кода. После проверки пары плат и разных датчиков ничто не могло заставить эти два датчика работать вместе. Итак, мы столкнулись с нашей первой серьезной проблемой. Стоит ли попробовать датчик другого типа? Сделать одинарную кормушку для птиц (хромую!), Что делать? В отчаянии мы сделали то, что должны были сделать в первый раз, проверили веб-сайт и в разделе часто задаваемых вопросов о продукте обнаружили следующее: Этот датчик работает не так, как я ожидал:я часто получаю прерывистое обнаружение дальше, чем максимальный диапазон датчика, и он не обнаруживает объекты в заявленном диапазоне обнаружения. Что не так? Подобные проблемы могут быть результатом проблем с источником питания, особенно потому, что этот датчик потребляет энергию короткими, большими импульсами, поэтому убедитесь, что ваш источник питания способен выдавать необходимый ток. Если вы столкнулись с этой проблемой, попробуйте добавить конденсатор емкостью 10 мкФ или около того между питанием датчика и заземлением рядом с датчиком; это компенсирует недостаточный источник питания и обычно восстанавливает нормальную функциональность. Проблема решена! Мы добавили электролитический конденсатор емкостью 47 мкФ к каждому из датчиков, и они работали, только с одной оговоркой, они должны были питаться напрямую от контакта + 5V на плате. Вы увидите это на диаграмме фритзинга как перемычку от Линия + 5V одного датчика к питанию + 5V к другому датчику. Мы не EE, поэтому я не могу это объяснить, это просто то, что мы обнаружили, как в помещении, так и на улице!
  • Третья задача:в разделе «Сопутствующие занятия и обучение» веб-сайта Project FeederWatch одно из рекомендуемых занятий - взвешивать семена птицы в кормушке до и после каждого подсчета и вычислять, сколько семян было съедено. После нескольких подсчетов рассчитайте средний расход. Почему бы вместо ручного взвешивания не отслеживать расход семян в автоматическом режиме? Наше решение заключалось в использовании силочувствительного резистора (FSR). Это резистор, сопротивление которого зависит от приложенной к нему силы. Его можно подключить к выводу аналогового входа. Но будет ли он достаточно чувствительным, чтобы обнаруживать изменения в количестве семян? Наши первые попытки измерить уровень семян в небольшом пластиковом контейнере не увенчались успехом. Датчик хорошо реагировал на изменение давления пальца, но не на уровень семян. Итак, мы внесли два изменения, чтобы решить проблему. Сначала аналоговый сигнал подается на аналоговый вывод Arduino 101 через делитель напряжения с двумя резисторами, один из которых является FSR, а второй - обычным резистором. Мы уменьшили значение этого второго резистора, и датчик казался более чувствительным к прикосновению, но он все равно не так реагировал на изменения начального числа, как хотелось бы. Так что ко всему этому добавились аппаратные изменения. В некоторой степени по аналогии с принципом Паскаля, что если бы вместо приложения веса семян ко всей поверхности FSR мы создали платформу с небольшой точкой контакта в ее центре, мы бы значительно увеличили силу, действующую на семена. FSR. Полная противоположность снегоступам, и это сработало!

Еще одна небольшая проблема связана с безопасным и надежным подключением FSR к Arduino 101. Это легко решается использованием 2-контактных клеммных колодок 3,5 мм. Просто убедитесь, что расстояние между клеммной колодкой соответствует расстоянию на вашей плате.

В остальном аппаратная часть Arduino 101 проста. Мы подключили коммутационную плату Adafruit Si702 к контактам шины I2C () и использовали пустое + 3,3 В для питания. Питание всего блока осуществляется от переключаемой аккумуляторной батареи 4XAA, расположенной под основным корпусом.

Мы припаяли датчики IR и FSR к печатным платам Adafruit Perma-Proto четвертого размера и прикрепили их к нижней стороне Arduino 101 с помощью двустороннего скотча. Вся упаковка помещена в кормушку для птиц из бутылки с газировкой и выдержала отрицательные температуры ниже нуля, туман, небольшой дождь и снег (фальшивая метель «Стелла»!).

Эскиз Arduino 101:

Основная задача скетча - контролировать подключенные датчики и сообщать значения датчиков через BLE. Все данные в BLE передаются пакетом байтов. Независимо от того, являются ли ваши исходные данные int float или массивом char, вам придется разбить его на байтовое представление для передачи через BLE. Самый простой способ сделать это - создать объединение типов данных. Объединение позволяет нам использовать одно и то же место в памяти для двух разных типов данных. В нашем случае датчик температуры и влажности SI7021 предоставляет данные в виде числа с плавающей запятой. Язык Arduino C представляет число с плавающей запятой как 4 байта, поэтому мы создаем объединение между нашим поплавком температуры и плавающей точкой влажности и массивом из 4 байтов.

  / ** * Директива union позволяет этим переменным использовать одно и то же место в памяти. Пожалуйста, см. * Мой учебник Imu to You! (Https://www.hackster.io/gov/imu-to-you-ae53e1?team=18045) для дальнейшего * обсуждения использования директивы union в C. * / union {float t; беззнаковые байты символа [4]; } tempData; союз {float h; беззнаковые байты символа [4]; } влажностьData; объединение {int f; беззнаковые байты символа [2]; } feedData;  

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

Для встроенных приложений использование функции delay () может вызвать проблемы. Во-первых, пока вызывается функция задержки, вся активность процессора останавливается на время задержки. Это не идеально, когда птицы могут садиться на насест в любое время. Вторая проблема заключается в том, что функция delay () может вызывать проблемы с механизмом уведомления BLE. Способ избежать этого - не использовать delay () в нашем скетче. Однако во многих случаях потребуется задержка кода программы. Чтобы преодолеть это, мы будем использовать схему метода в этом наборе из 3 суперуроков Билла Эрла из Adafruit.

В общих чертах мы создаем объект, представляющий наше встроенное устройство. Мы выбираем интервал или набор интервалов для опроса наших датчиков, подключенных к этому устройству. Затем мы создаем функцию Update ().

  void Update () {// Serial.print ("Датчик подачи:"); Serial.println (analogRead (A0)); // Обновление / уведомления активности окуня зависят от времени и датчиков приближения currentPerchMillis =millis (); если ((currentPerchMillis - previousPerchMillis)> perchInterval) {previousPerchMillis =currentPerchMillis; currentLeftPerch =digitalRead (LEFT_PERCH); currentRightPerch =digitalRead (RIGHT_PERCH); if ((currentLeftPerch ==0) &&(previousLeftPerch ==1)) {// новое действие на левом насесте // BLE уведомляет perchCharacteristic.setValue (1); Serial.println ("АКТИВНОСТЬ ЛЕВОГО ПЕРСОНА"); previousLeftPerch =0; } ...}  

Эта функция служит для проверки того, прошли ли временные интервалы для наших датчиков, если да, обновите датчики, если не просто игнорируйте их. Функция Update () вызывается неоднократно в разделе loop () нашего скетча.

  void loop () {// поместите сюда ваш основной код для повторного запуска:blePeripheral.poll (); birdFeeder.Update (); }  

Таким образом, с помощью наших датчиков мы имитируем в реальном времени эффект многозадачности.

Интеллектуальная плата Intel Edison и Arduino:

Самая сложная часть работы с Intel Edison - это его настройка. Лучшее руководство, которое я нашел по этому поводу, - это Intel Edison Винсента Вонга и Intel XDK IoT Edition 101. Я могу гарантировать вам, что пройти этот процесс и попробовать некоторые примеры JavaScript того стоит!

Работа с вашим Edison с использованием Intel XDK IoT edition позволит вам взаимодействовать и настраивать его в командной строке. Вы также сможете воспользоваться преимуществами многих примеров программ и шаблонов JavaScript / Node. Изучение и использование JavaScript / Node для программирования откроет большое количество простых в использовании и мощных API, таких как PubNub, Noble.js и Cloudinary.

После того, как вы настроили Edison и подтвердили активное подключение к вашей сети Wi-Fi, вы можете установить библиотеки, необходимые для этого проекта:

npm install благородный

npm установить pubnub

npm установить облачный

Веб-камера USB

Поиск в Google по запросу "веб-камера Intel Edison" даст несколько прекрасных примеров и руководств. Но есть некоторые запутанные материалы, которые, как я полагаю, в основном связаны с некоторыми изменениями в модулях, доступных в ОС Yocto. Yocto - это встроенная версия Linux, работающая под управлением Intel edison. Logitech c270 - это веб-камера, совместимая с uvcvideo. Существует множество руководств, как убедиться, что на вашем Edison установлен драйвер / модуль uvcvideo. Без этого вы не сможете взаимодействовать с камерой и делать снимки с ее помощью.

Я использовал следующие шаги с веб-камеры на Intel Edison с загрузкой в ​​s3, чтобы веб-камера работала на моем Edison. Я разместил инструкции из этого сообщения в блоге ниже на тот случай, если оно когда-нибудь устареет.

С вашим Edison следующие инструкции будут выполняться в командной строке на вкладке последовательного терминала XDK.

"Мы будем использовать некоторые дополнительные пакеты, которые можно установить с помощью opkg менеджер пакетов. Для начала отредактируйте список репозиториев с помощью vi:

vi /etc/opkg/base-feeds.conf

и убедитесь, что в файле есть все эти строки:

src / gz все http://repo.opkg.net/edison/repo/all src / gz edison http://repo.opkg.net/edison/repo/edison src / gz core2–32 http:// repo. opkg.net/edison/repo/core2-32 src intel-iotdk http://iotdk.intel.com/repos/3.0/intelgalactic/opkg/i586

Теперь обновите кеш пакетов:

обновление opkg

И установите модуль ядра для поддержки USB-камер uvc.

opkg install kernel-module-uvcvideo

Теперь подключите веб-камеру к USB-порту и выполните эту команду.

ls -l / dev / video *

Если ваша камера успешно обнаружена, вывод будет примерно таким:

crw-rw ---- 1 корневое видео 81, 0 25 июля, 09:35 / dev / video0

Для работы с веб-камерой и своевременной фотосъемки необходимо установить 2 дополнительных пакета:

opkg установить fswebcam дружище

*** обратите внимание, что мы не устанавливали cronie для этого проекта, мы просто установили opkg instal fswebcam. В cronie нет необходимости, поскольку мы вызываем fswebcam всякий раз, когда птица срабатывает на насесте, а не по расписанию ***

Работа с камерой

Чтобы проверить камеру, запустите эту команду:

fswebcam -r 1280x720 --jpeg 100 -D 3 -S 13 "test.jpg"

  • -r 1280x720 установить разрешение изображения, лучше использовать максимально доступное для вашей камеры (необязательно)
  • - jpeg 100 установите максимальное качество JPEG. Это полезно, если вы собираетесь что-то сделать с этими изображениями позже (необязательно)
  • -D 3 -S 13 добавляет 3 секунды задержки и пропускает первые 13 кадров. Это необходимо, потому что некоторым веб-камерам нужно время, чтобы получать лучшие фотографии (рекомендуется)
  • test.jpg это имя выходного файла "

Дополнительную информацию об использовании веб-камеры с Edison и других действительно интересных проектах можно найти на странице доктора Кима на github. Еще она публикует крутые проекты на Hackster.io!

Помимо подтверждения наличия необходимого модуля, мне также нужно было перевернуть переключатель между кабелями microusb и USB-портом в направлении USB-порта и подключить экран Arduino к источнику питания. Я использовал компактный импульсный источник питания - выбираемый выход 3–12 В постоянного тока (идентификатор продукта Adafruit:1448).

Теперь вставьте SD-карту в слот для SD-карты. Использование последовательного терминала в Intel XDK используйте командную строку для проверки карты, введя следующие команды:

cd / media / sdcard

ls

Это должно отображать все файлы, имеющиеся на карте, или ничего, если файлов нет. Вы не должны видеть никаких сообщений об ошибках. Если вы видите сообщения об ошибках, я рекомендую перезагрузить плату Edison, не извлекая SD-карту, введя следующую команду:

перезагрузка

Затем повторите приведенные выше команды после повторного входа в систему Edison.

Теперь, чтобы позволить нашему Эдисону получить доступ к Bluetooth, введите следующую команду:

rfkill разблокировать bluetooth

Чтобы убедиться, что Bluetooth включен и работает, введите:

bluetoothctl

Затем введите

сканировать

Это должно отображаться на устройствах BLE как таковое:

Теперь выйдите из bluetoothctl и щелкните вкладку Intel XDK IoT, затем подключитесь к своей плате. Выберите проект в меню слева, например BLESCAN. Удалите содержимое index.js и удалите зависимости из файла package.json.

Замените содержимое index.js программой из нашего репозитория github здесь. Загрузите этот код в свой Edison. Убедитесь, что Arduino 101 включен, и запустите код Эдисона. Как только Edison обнаружит ваш Arduino 101, вы должны увидеть что-то вроде этого:

Код:

Код, работающий на Edison, написан на JavaScript или, точнее, на Node.js. После создания необходимых объектов из наших импортированных библиотек мы создадим переменные для представления службы BLE, работающей на Arduino 101.

noble.js

  // Служба BLE и характеристики для благородных // Они должны соответствовать сервису периферийного устройства и характеристическим UUID // (в данном случае на Arduino 101) var LOCAL_NAME ='bird'; var SERVICE_UUID ='917649a0d98e11e59eec0002a5d5c51b'; //без тире!!!! var PERCH_UUID ='917649a1d98e11e59eec0002a5d5c51b'; var TEMPERATURE_UUID ='917649a2d98e11e59eec0002a5d5c51b'; var HUMIDITY_UUID ='917649a3d98e11e59eec0002a5d5c51b'; var FEED_UUID ='917649a4d98e11e59eec0002a5d5c51b';  

Эти UUID будут использоваться noble.js. Если вы измените UUID на своем Arduino, они также должны быть изменены здесь. Для правильной работы noble.js важно убедиться, что у вас нет тире.

Чтобы работать с noble.js, нам нужно будет сканировать периферийные устройства BLE, а затем обнаруживать их и подключаться. После подключения мы рассмотрим доступные для использования характеристики, используя UUID, определенный выше. Все характеристики являются характеристиками чтения / уведомления.

  noble.on ('обнаружить', функция (периферийное устройство) {console.log ('Найдено устройство BLE:[' + периферийное.id + ']' + периферийное.advertise.localName); if (периферийное. ads.localName ==LOCAL_NAME) {console.log ('Найдено:' + периферийное.advertise.localName);} noble.stopScanning (); // предотвращаем обнаружение "блуждающих" служб. [0]; console.log ('Bird Feeder Service!'); FeederService.discoverCharacteristics ([], function (error, характеристики) {features.forEach (function (характеристика) {console.log ('UUID характеристики:' + характеристика .uuid); характеристика.on ('данные', функция (данные, isNotification) {transformRawData (характеристика.uuid, данные);}); характеристика.notify ('истина', функция (ошибка) {если (ошибка) выбросить e ррор; }); }); }); }); }); });  

Из приведенного выше раздела кода следует выделить 2 ключевых элемента. Во-первых, изменилось то, как вы сообщаете noble.js, что это характеристика чтения / уведомления. Со страницы github Сандипа Мистри:

Данные

Генерируется, когда чтение характеристики завершено, результат character.read (...) или значение характеристики было обновлено периферийным устройством посредством уведомления или индикации - после включения с помощью notify (true [, callback (error)]) .

характеристика.on ('данные', обратный вызов (данные, isNotification));

характеристика.once ('чтение', обратный вызов (данные, isNotification)); // наследие

Изменение происходит с «чтения» на «данные». Здесь мы столкнулись с некоторыми проблемами, когда случайно использовали старую версию noble, а затем изменили последнюю версию. Чтобы выяснить, что произошло, потребовалось много часов, поэтому мы хотели помочь вам избежать этого

Другой ключевой момент здесь - это функция transformRawData (feature.uuid, data). Эта функция принимает uuid и данные, полученные от чтения, и передает их большой и громоздкой функции. Каждый раз, когда механизм уведомления BLE активируется изменением характеристики, эта функция вызывается и обрабатывает полученные данные. Вот где происходит все волнение.

tranformRawData проверяет, какая характеристика получена.

В случае, если Arduino сообщает нам, что на насесте есть активность, мы хотим сделать снимок. В этом случае мы используем библиотеку child_process для вызова программы fswebcam, которая находится в нашей системе Yocto (linux). Библиотека child_process позволяет нам выполнять функции командной строки из нашего кода node.js. Это очень мощная функция.

  childProcess.execFile ('fswebcam', ['- r 1280x720', имя файла], функция (ошибка, stdout, stderr) {console.log (stdout););  

PubNub и Cloudinary:

В этой функции также вступают в игру PubNub и Cloudinary! PubNub предоставляет вашему приложению сеть потоковой передачи данных в реальном времени. Это означает, что с подключением к Интернету ваше приложение может транслировать данные в потоковом режиме в любой точке мира. Любое другое приложение или программа, у которых есть ключ подписки к вашим опубликованным потокам, будет иметь доступ к полезной нагрузке JSON, представляющей ваши данные. В нашем случае мы отправляем текущий уровень семян, температуру, влажность и количество посещений окуня. Дополнительно отправляем ссылку на 3 самые свежие фотографии кормушки! Это jpeg-файлы, которые были загружены в Cloudinary с помощью нашей программы. Нет необходимости запускать сервер! Простой HTML-файл со встроенным JavaScript служит интерфейсом в реальном времени для нашей кормушки для птиц, любезно предоставленной PubNub!

На картинке выше я просто отправил себе по электронной почте HTML-файл, содержащий код для взаимодействия с кормушкой для птиц через PubNub, и загрузил каждый из локального каталога в браузер Chrome. Вам не нужно программировать сервер для обслуживания этой страницы на вашем Edison.

Cloudinary - это сервис загрузки, хранения и преобразования изображений. У него очень простой в использовании api. При разработке этого проекта я не мог найти более простого и понятного API. Нет ничего сопоставимого. Их служба поддержки тоже фантастическая. Это определенно то, что вы захотите проверить в своих проектах!

В приведенном ниже коде мы используем облачный API для загрузки трех последних изображений с локальной SD-карты. URL-адрес, возвращаемый из этой загрузки, затем сохраняется в массиве. Эти URL-адреса затем отправляются как часть нашей полезной нагрузки JSON в PubNub, чтобы наша HTML-страница могла получить к ним доступ для отображения. Красавица, а ?!

index.html

Что это за файл index.html? Файл index.html - это наш пользовательский интерфейс. Поскольку мы передаем наши данные в потоковом режиме с помощью PubNub и размещаем наши изображения в общедоступном URL-адресе с помощью Cloudinary, мы можем воспользоваться преимуществами мощного трио Javascript / HTML / CSS для создания портативного пользовательского интерфейса. И PubNub, и Cloudinary очень просты в использовании и мощны API-интерфейсы Javascript. Мы просто импортируем их в наш html файл, чтобы использовать:

      

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

  

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

  1. DHT Tiny Breakout для Raspberry Pi
  2. Ультразвуковой датчик диапазона HC-SR04 на Raspberry Pi
  3. Лучшие аксессуары для Raspberry Pi
  4. Зрение:для слепых
  5. Intel привлекает Udacity к присуждению степени за искусственный интеллект на периферии
  6. Как правильно выбрать датчик для заполнения приложений
  7. Сенсорная пленка для аэрокосмической отрасли
  8. Трекер датчика WiFi RSSI для МКС
  9. Новый математический инструмент позволяет выбирать лучшие датчики для работы
  10. Задача метода 5S для индустрии 4.0