Оглавление:

Индикатор события RPi-Zero IoT / цветная лампа: 6 шагов (с изображениями)
Индикатор события RPi-Zero IoT / цветная лампа: 6 шагов (с изображениями)

Видео: Индикатор события RPi-Zero IoT / цветная лампа: 6 шагов (с изображениями)

Видео: Индикатор события RPi-Zero IoT / цветная лампа: 6 шагов (с изображениями)
Видео: Одесса. НАЧАЛОСЬ! 2024, Июль
Anonim
Индикатор события RPi-Zero IoT / цветная лампа
Индикатор события RPi-Zero IoT / цветная лампа
Индикатор события RPi-Zero IoT / цветная лампа
Индикатор события RPi-Zero IoT / цветная лампа
Индикатор события RPi-Zero IoT / цветная лампа
Индикатор события RPi-Zero IoT / цветная лампа

Никакого дополнительного микроконтроллера и дополнительного модуля HAT не требуется. RPi-Zero делает все это. А еще лучше использовать RPi-Zero W!

Пример использования: индикатор состояния веб-службы (например, отслеживание DowJonesIndex), индикатор состояния политического или спортивного события, индикатор настроения, отслеживание датчика, вы называете его. Просмотрите видео на шаге 6.

Raspberry-Pi имеет только одну аппаратно поддерживаемую линию ШИМ. Для этого проекта нужны 3 линии ШИМ, поэтому я использовал программную библиотеку PWM 'c' (https://wiringpi.com/reference/software-pwm-library/), которая уже должна быть установлена.

Я разбил обработку на 2 процесса. Первый, управляемый прерыванием, переключение линий управления на светодиод по мере необходимости, получение команд марша из потока 'stdin'. Другой - управляемый событиями сервер nodeJS, использующий ввод-вывод сокета. Это сделано для предотвращения таких вещей, как мерцание света, и при этом обеспечивает отзывчивость. Комбинация обычно использует менее 5% ЦП. Во время непрерывного обновления цвета (с помощью ползунков и / или многих клиентов) он может легко использовать более 50% (особенно при использовании браузера в графическом интерфейсе Pi-Zero). Обратите внимание, что при внесении изменений уведомления об обновлениях отправляются всем клиентам с открытым сокетом.

Шаг 1. Что вам понадобится

Что вам понадобится
Что вам понадобится
Что вам понадобится
Что вам понадобится
  • Карта Pi-Zero micro-SD, рекомендуется 8 ГБ. С Raspbian-Linux или NOOBS
  • RGB Led (я использовал вот этот:
  • 3 резистора (значение, основанное на желаемом токе и / или желаемой яркости, 1/8 Вт)
  • Wi-Fi, USB-ключ (например, https://www.ebay.com/itm/252018085448) или даже лучше использовать Raspberry Pi Z-W (со встроенным Wi-Fi)
  • футляр (например, маленький: https://www.ebay.com/itm/131583579374 с большим пространством:
  • диффузор (см. примеры на изображении)
  • Кабели и переходники по мере необходимости.

По желанию, в зависимости от того, как вы хотите соединить компоненты

  • заголовок (https://www.ebay.com/itm/14186077616)
  • перемычки (https://www.ebay.com/itm/262235387520)
  • прямоугольный адаптер micro-USB (Blue USB 2.0 OTG R)
  • мини-USB-концентратор, используется только на этапе настройки

Шаг 2: Настройка Pi-Zero и подготовка к разработке

Выполните эту первоначальную настройку для своего PiZero, чтобы подготовить его к разработке…

Если у вас есть карта microSD с настройкой NOOBS, выполните следующие действия:

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

Теперь подключите монитор и адаптер питания microUSB, и он загрузится. Продолжите и завершите инструкции по настройке Raspbian, Debian Linux, как показано в ссылке noobs-setup выше.

Вдобавок у меня было слишком низкое разрешение. Поэтому я добавил эти строки в /boot/config.txt

disable_overscan = 1

hdmi_group = 2 hdmi_mode = 58

На моем мониторе hdmi_mode = 58 работает, вам может понадобиться что-то еще.

обратитесь: make-raspberry-pi-use-full-resolution-monitor и

raspberrypi.org/documentation/configuration/config-txt.md

После загрузки Pi-Zero переходит в графический интерфейс.

Чтобы использовать весь размер моей карты microSD, я использовал выбор raspi-config # 1 «Expand Filesystem». В командной строке в окне терминала введите «sudo raspi-config» См.: Documentation / configuration / raspi -config.md

Также я изменил эти настройки в разделе №5 «Параметры интернационализации».

  • Язык: en_US. UTF-8 UTF-8
  • Часовой пояс: America… Los_Angeles
  • Раскладка клавиатуры: стандартная 105-клавишная (международная) ПК… английский (США)

Для меня стандарт клавиатуры Великобритании (для которого Raspbian предустановлен) превращал большую часть моих правок в настоящую рутину.

При необходимости измените эти настройки в соответствии с вашими потребностями. Обратите внимание, что вам нужно использовать клавиши со стрелками и клавишу табуляции для навигации в 'raspi-config'; и после выбора ответ может быть очень медленным.

Я не обнаружил проблем с подключением к Интернету с помощью ключа WiFi-USB (я использовал 2 разных). Мне просто нужно было ввести ключ-пароль для доступа к Wi-Fi, используя раскрывающийся список в правом верхнем углу графического интерфейса. Как только я это сделаю, он автоматически подключится после любой перезагрузки / включения.

Теперь я был готов к общему развитию.

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

Шаг 3. Среда разработки и инструменты

Среда разработки и инструменты
Среда разработки и инструменты
Среда разработки и инструменты
Среда разработки и инструменты

Для настройки конфигурации системы и программного обеспечения, которое я разработал для этого проекта, я провел НИОКР на Raspberry Pi-2; поскольку он имеет четырехъядерный процессор, что значительно ускоряет просмотр и разработку кода с несколькими окнами. Вы, конечно, можете использовать любую модель Raspberry-Pi для реализации этого проекта.

Чтобы настроить Node.js (поддержка JavaScripting на стороне сервера ввода-вывода, управляемая событиями), я сделал следующее…

sudo apt-get update

sudo apt-get install nodejs npm

Добавление этих пакетов nodeJS (npm - это диспетчер пакетов Nodejs)

npm установить экспресс

npm установить socket.io

Ссылки:

www.npmjs.com/package/express Быстрый минималистичный веб-фреймворк

www.npmjs.com/package/socket.io Socket. IO обеспечивает двунаправленную связь на основе событий в реальном времени

Шаг 4: оборудование

Аппаратное обеспечение
Аппаратное обеспечение
Аппаратное обеспечение
Аппаратное обеспечение
Аппаратное обеспечение
Аппаратное обеспечение
Аппаратное обеспечение
Аппаратное обеспечение

Все используемые значения резисторов различаются, так как падение напряжения и эффективность различаются для всех трех цветовых сегментов светодиодов. Уровни выходного сигнала GPIO High были примерно 3,2 вольт. Каждый светодиодный сегмент был протестирован, чтобы убедиться, что он потребляет меньше 20 мА и около 40 мА вместе (максимально допустимое значение <50 мА), с чем PiZero может легко справиться. Я получил максимально возможную выходную яркость, напрямую управляя светодиодом; чего достаточно для моих нужд. Для управления более высокими токами и более ярким выходом промежуточные управляющие транзисторы могут использоваться с обычным анодным светодиодом, анод которого подключен к линии 5 В. PS: Поскольку мои различные уровни белого имеют немного голубоватый оттенок, 27 вместо 24 Ом был бы для меня лучшим выбором.

Обратите внимание, я использовал разъем с штыревыми контактами и подключил его к ножкам светодиода с помощью перемычек F-F. Это снизило общую высоту. Я впаял резисторы в середину перемычек. Отсутствие печатной платы или платы без пайки, а также использование прямоугольного адаптера micro-USB-USB для ключа WiFi сделали окончательную сборку довольно компактной.

В качестве диффузора я рекомендую мяч для пинг-понга (легко просверлить отверстие, достаточно большое, чтобы вставить в него светодиод диаметром 5-8-10 мм). Или отрежьте верхнюю часть светодиодной лампочки (той, в которой используется пластиковый диффузор). Для этого наметьте линию острым фломастером, где вы хотите вырезать, и используйте инструмент, похожий на Dremel, с тонкой насадкой для обрезки. Если хотите, можно использовать небольшую хрустальную банку или стакан для питья. После того, как вы остановились на одном диффузоре, приклейте его к верхней части корпуса.

Для демонстраций мне нравится использовать небольшой литиевый power-bank, помещенный внутри корпуса. Это устройство кажется более впечатляющим с полностью беспроводным подключением. Конечно, в этой конфигурации у него будет ограниченное время работы. Для нормальной работы я просто использую сетевой адаптер micro-USB.

Шаг 5: Программное обеспечение проекта

Программное обеспечение проекта
Программное обеспечение проекта

Я использовал две программы: процесс Node.js, общающийся с дочерним процессом через его поток данных stdin, чтобы каждая из них могла делать то, что у них лучше всего получается, и работать как независимые процессы в своем собственном темпе.

Вот что я сделал: но вам не обязательно, так как я предоставил файл tar-gzip, который содержит результирующее дерево файлов.

Настройка NodeJS на стороне сервера:

cd ~

mkdir node_rgb cd node_rgb mkdir общедоступный

поместите 'index.html' и 'style.css' в каталог '~ / node_rgb / public' поместите 'rgbDriver.c' и 'rgb_main.js' в каталог '~ / node_rgb'

Скомпилируйте / соберите c-процесс 'rgbDriver':

cd ~ / node_rgb

cc -o rgbDriver rgbDriver.c -lwiringPi -lpthread

Скачивание и расширение эквивалентности

Чтобы загрузить node_rgb.tgz (см. Ниже) на Pi-Zero в свой домашний каталог (~ pi), вы можете выполнить одно из трех следующих действий:

  1. Загрузите из браузера в GUI вашего Pi-Zero Переместите файл в ~ pi /
  2. В окне терминала подключенного к вам Pi-Zero: cd ~ piwget

    mv FZBF9BDIL6VBHKF.tgz rgb_node.tgz

  3. Загрузите его из браузера на настольном компьютере. Используйте WinSCP, чтобы скопировать его в каталог ~ pi на Pi-Zero.

После выполнения пунктов 1, 2 или 3, описанных выше…

cd ~

tar -xzvf node_rgb.tgz tree node_rgb… node_rgb ├── public │ ├── Dow_Jones_Index.html │ ├── index.html │ └── style.css ├── rgbDriver ├── rgbDriver.c js ├── start_rgb ├── kill_rgb └── track_dji

Результирующий исполняемый файл (сверху) 'rgbDriver' можно использовать независимо от процесса интерфейса Node.js.

Чтобы убедиться, что этот драйвер и оборудование работают, передайте драйверу наборы из трех значений (от 0 до 255), разделенных пробелом. Like 'echo 255 0 0 |./rgbDriver 'для красного или' echo 0 255 0 |./rgbDriver 'для зеленого. Обратите внимание, что «./» указывает операционной системе найти нашу программу «rgbDriver» в текущем каталоге. Когда вы нажимаете ^ c (cntl-c), чтобы остановить драйвер, светодиод может оставаться включенным, а может и не гореть. В качестве альтернативы вы можете интерактивно вводить его значения. Попробуйте ввести в командной строке эти строки одну за другой и следить за индикатором.

./rgbDriver

0 255 0 100 0 100 255 255 0… и т. Д.… ^ C

Убедитесь, что у вас нет двух параллельных процессов.

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

sudo node rgb_main.js

Затем используйте cntl-c, если хотите остановить сервер Node.js. Запустите его с помощью

sudo node rgb_main.js &

чтобы он работал в фоновом режиме, но тогда вам придется использовать команду sudo kill -9 pid, чтобы остановить его. Если эта команда кажется вам чуждой, просмотрите вывод этих команд: 'man kill' и 'man sudo'.

Используйте браузер на своем компьютере, планшете или телефоне, который подключен к вашей локальной сети. Перейдите по адресу https:// raspberrypi: 8080 / или, если это не сработает, используйте IP-адрес устройства (полученный из cmd 'ifconfig'), например 192.168.1.15 плюс спецификацию порта: 8080 или при использовании Pi-Zero. GUI: localhost: 8080 будет работать.

Перемещайте ползунки RGB на открывшейся странице и наблюдайте, как за ним движется светодиодная лампа RGB.

Другие полезные команды Обратите внимание, что если у вас одновременно будет запущено более одного 'rgbDriver', вы, вероятно, получите непредсказуемое поведение. Если вы попытаетесь запустить вторую копию rgb_main.js, произойдет ошибка.

Эта команда выведет список всех связанных процессов:

пс aux | grep rgb

Эта команда убьет все процессы nodeJS вместе с дочерними процессами rgbDriver:

sudo ps aux | узел grep. * rgb | awk '{print "sudo kill -9" $ 2}' | ш

Автономная работа

Чтобы Pi-Zero запускал серверное приложение Node.js при загрузке … используя ваш любимый редактор (например, nano ~ /.bash_profile), введите следующие строки и сохраните в ~ /.bash_profile

cd node_rgb

sudo node rgb_main.js &

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

Когда Pi-Zero работает встроенным, без клавиатуры, мыши или монитора; графический интерфейс пользователя потребует минимального времени процессора, так как не будет взаимодействия с пользователем. Я не отключаю автоматический запуск графического интерфейса пользователя, поскольку в этом случае у Pi-Zero больше ресурсов, чем необходимо; и мне нравится иметь возможность подключить несколько кабелей и использовать их в любое время в будущем. Однако в этом нет необходимости, поскольку вы можете использовать удаленный терминал SSH (например, PuTTY) для выполнения любого необходимого обслуживания.

Использование в качестве монитора событий

Я создал веб-страницу для отслеживания ежедневных изменений индекса Доу-Джонса. Его источник можно использовать в качестве ориентира для вашей собственной страницы, которая использует некоторые веб-данные и соответственно управляет вашим индикатором Pi-Zero. Эта страница получает свои (json) данные из веб-службы Google. Существует множество форм веб-сервисов, поэтому вам нужно будет изучить ту, которую вы хотите использовать, чтобы определить код JavaScript для доступа к ней.

Если вы хотите использовать свое устройство, как и я, в качестве выделенного автономного индикатора изменения индекса Dow, добавьте эти строки в конец файла ~ /.bash_profile или, по желанию, через SSH и введите вторую командную строку.. Если вы впоследствии захотите использовать удаленное управление, «kill -9», получившийся процесс прозрения-браузера.

спать 20

epiphany-browser --display =: 0.0 localhost: 8080 / Dow_Jones_Index.html &

Индикатор загорится светло-серым цветом при значении 0. При увеличении значений он становится все более зеленым. Это самый яркий чистый зеленый цвет (около 250). Более высокие значения вызывают сначала неглубокую вспышку, вплоть до самой глубокой вспышки около 500. Для отрицательных значений (ежедневные падения индекса Доу-Джонса) он делает то же самое, но в красном цвете.

ОБНОВЛЕНИЕ Май 2018

Я создал новую веб-страницу (SolarStorm_devCon.html, прикрепленную как файл.txt из-за того, что файл.html не загружается), которая собирает информацию о геомагнитном шторме (которая может предсказывать разрушительный CME, EMP) и использует ее для представления цвета шкала, отражающая своего рода индекс Geo-Storm 'DevCon'. указывает на возможность катастрофы из-за электромагнитного импульса (ЭМИ) в результате космической погоды, предположительно солнечных вспышек или коронального выброса массы (CME). Используйте его, как если бы вы использовали "Dow_Jones_Index.html".

Шаг 6. Удаленное управление веб-страницей

Image
Image

На этом этапе вы можете управлять своей цветной лампой IOT из любой точки вашей локальной сети. Как сделать ее видимой в общедоступном Интернете, не входит в эту инструкцию. Если вы настроили общедоступный IP-адрес для своего устройства, вам необходимо используйте этот IP-адрес в команде открытого сокета в JavaScript ваших страниц (например, ~ / node_rgb / public / index.html)

Я планирую использовать свое устройство Pi-Zero IOT в качестве цветного индикатора в реальном времени для дневного изменения индекса Доу-Джонса. Я создал страницу для этого, которая получает данные json из google.com/finance. Я также создал несколько веб-страниц для демонстрации широкого спектра использования этого небольшого IOT-устройства. Вместо того, чтобы размещать свой PiZero в общедоступном Интернете, я размещал страницы на моем существующем общедоступном веб-сервере (в настоящее время @ 71.84.135.81 aka: https://raspi.ddns01.com/, когда работает мой бесплатный сервер динамических доменных имен), который работает на исходной версии B Raspberry-Pi.

В коде на моих удаленных страницах я открыл сокетные соединения на 192.168.1.41:8080 Я зафиксировал IP-адрес моего Pi-Zero на 192.168.1.41. Чтобы сделать то же самое, следуйте инструкциям по настройке-raspberry-pi-with-wifi-and-a-static-ip под заголовком: Статический IP-адрес. Итак, если вы настроили PiZero на 192.168.1.41 в локальной сети эти страницы, открытые с моего веб-сайта, будут связываться с вашим устройством, так как соединение выполняется со стороны клиента.

Вот те страницы, которые я использовал для тестирования и эксплуатации своего осветительного устройства Pi-Zero IOT. Если вы откроете эти страницы (https://71.84.135.81/iot/rgbLamp/, также известный как https://raspi.ddns01.com/iot/rgbLamp/, или любую из страниц, созданных на этой странице), клиентский JavaScript будет управляйте созданным вами источником света IOT (учитывая, что он работает по этому URL-адресу «192.168.1.41:8080»). Если хотите, вы можете скопировать исходный код любой из этих страниц и изменить по своему усмотрению.

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

Одна страница представляет собой простую кнопку, управляемую светофором.

Существует страница, предназначенная для отслеживания спортивных соревнований (например, футбола, баскетбола, бейсбола), выборов или даже адаптированная для средства сбора средств или индикатора уровня оповещения DEFCON. Очки (или подтвержденные голоса выборщиков) могут быть автоматически получены из веб-службы или скопированы с какой-либо другой веб-страницы. У меня нет автоматической подачи на мою страницу Contest_demo. Кто-то, обладающий нужным ноу-хау, мог бы добавить драйвер мощности для включения мощных светодиодных прожекторов и омывания комнаты (или спортивного бара) цветом команды, когда они впереди. К сожалению, я слишком запоздал с этой инструкцией для партий супер-кубка этого года, но как раз к выборам 2016 года.

Затем есть страница, похожая на ту, которую я использую, чтобы превратить свое устройство в индикатор отслеживания Dow Jones. Ползунок и кнопки находятся на демонстрационной странице DJI только в демонстрационных целях. В исходном коде этой страницы есть код, который я разработал, чтобы перекрасить изображение, вдохновленное зеленым экраном; с достаточным количеством комментариев, которые могут оказаться вам полезными.

Только первая из этих 4 страниц (вместе со страницей index.html на основе Pi-Zero) прослушивает сообщения об обновлении сервера и соответственно обновляется. Все остальное только отправляем на сервер.

Рекомендуемые: