В первом уроке мы заставили светодиод мигать и таким образом научились отправлять единички и нули (логические) на пины GPIO. Во втором уроке по изучению Pi4J, мы узнаем как считывать цифровые данные с GPIO, а для тестирования мы будем подключить кнопку и инфракрасный датчик движения HC-SR501.
Как подключить кнопку
Самый простой способ изменения состояния пина из «1» в «0» и наоборот — это подключить и нажать обычную кнопку.
Схема подключения кнопки
Схема, как мы видим, очень простая и состоит из: Orange Pi, макетной платы, кнопки и двух проводов. Нарисована в fritzing, очень удобная штука, да и красиво выглядит.
Код программы
Если для подачи и снятия рабочего напряжения на пины GPIO используется интерфейс GpioPinDigitalOutput
, то для чтения используется GpioPinDigitalInput
.
import com.pi4j.io.gpio.GpioController; import com.pi4j.io.gpio.GpioFactory; import com.pi4j.io.gpio.GpioPinDigitalInput; import com.pi4j.io.gpio.OrangePiPin; import com.pi4j.io.gpio.PinMode; import com.pi4j.io.gpio.PinPullResistance; import com.pi4j.io.gpio.PinState; import com.pi4j.io.gpio.event.GpioPinDigitalStateChangeEvent; import com.pi4j.io.gpio.event.GpioPinListenerDigital; import com.pi4j.platform.Platform; import com.pi4j.platform.PlatformManager; import com.pi4j.util.Console; public class PushButton { public static void main(String[] args) { try { /* * Поскольку мы не используем платформу Raspberry Pi, мы должны явно * указывать платформу, в нашем случае - это Orange Pi. */ PlatformManager.setPlatform(Platform.ORANGEPI); /* * Создаём экземпляр консоли */ Console console = new Console(); /* * Позволяем пользователю выйти из программы с помощью CTRL-C */ console.promptForExit(); /* * Создаём экземпляр контроллера GPIO */ GpioController gpio = GpioFactory.getInstance(); /* * настройка вывода GPIO.23, задаём режим входа и включаем подтягивающий * резистор в "1" */ GpioPinDigitalInput myButton = gpio.provisionDigitalInputPin( OrangePiPin.GPIO_23, // Номер пина по WiringPi "Кнопка", // Имя пина (необязательный) PinPullResistance.PULL_UP); // включаем подтягивающий (необязательный) /* * настроика поведения выключения */ myButton.setShutdownOptions( true, // освобождаем пин PinState.LOW, // задаём состояние 0 PinPullResistance.OFF, // отключаем подтягивающий резистор PinMode.DIGITAL_INPUT);// установливаем режим входа /* * Это объект, который "слушает" и исполняет код в зависимости от события. */ myButton.addListener(new GpioPinListenerDigital() { @Override public void handleGpioPinDigitalStateChangeEvent(GpioPinDigitalStateChangeEvent event) { if (event.getState() == PinState.LOW) { System.out.println(" --> Кнопка нажата: " + event.getPin() + " = " + event.getState()); } else { System.out.println(" --> Кнопка не нажата: " + event.getPin() + " = " + event.getState()); } } }); /* * ждёт, пока пользователь нажмёт CTRL-C */ console.waitForExit(); gpio.shutdown(); } catch (Exception e) { e.printStackTrace(); } } }
Чтобы проверить данный код нужно:
- создать java файл, вставить код (в PuTTY это делается правой кнопкой мыши) и сохранить файл (CTRL+X, Y, ENTER);
nano PushButton.java
- скомпилировать этот файл;
javac -classpath .:classes:/opt/pi4j/lib/'*' -d . PushButton.java
- запустить программу.
sudo java -classpath .:classes:/opt/pi4j/lib/'*' PushButton
Результат
Как подключить HC-SR501
Подключить кнопку и нажать её — это хорошо, но давайте попробуем что-то поинтереснее, к примеру, датчик движения и присутствия — HC-SR501. Более того мы подключим светодиод и включим его, когда датчик обнаружит играющегося кота. Всё это можно сделать и без этих одноплатных компьютеров, но мы-то не ищем лёгких путей.
Схема подключения HC-SR501
Код программы
import com.pi4j.io.gpio.GpioController; import com.pi4j.io.gpio.GpioFactory; import com.pi4j.io.gpio.GpioPinDigitalInput; import com.pi4j.io.gpio.GpioPinDigitalOutput; import com.pi4j.io.gpio.GpioPinShutdown; import com.pi4j.io.gpio.OrangePiPin; import com.pi4j.io.gpio.PinMode; import com.pi4j.io.gpio.PinPullResistance; import com.pi4j.io.gpio.PinState; import com.pi4j.io.gpio.event.GpioPinDigitalStateChangeEvent; import com.pi4j.io.gpio.event.GpioPinListenerDigital; import com.pi4j.io.gpio.impl.GpioPinShutdownImpl; import com.pi4j.platform.Platform; import com.pi4j.platform.PlatformManager; import com.pi4j.util.Console; public class PushButtonHcSr501 { /** * @param args */ public static void main(String[] args) { try { /* * Поскольку мы не используем платформу Raspberry Pi, мы должны явно * указывать платформу, в нашем случае - это Orange Pi. */ PlatformManager.setPlatform(Platform.ORANGEPI); /* * Создаём экземпляр консоли */ Console console = new Console(); /* * Позволяем пользователю выйти из программы с помощью CTRL-C */ console.promptForExit(); /* * Создаём экземпляр контроллера GPIO */ GpioController gpio = GpioFactory.getInstance(); /* * настройка вывода GPIO.23, задаём режим входа и включаем подтягивающий * резистор в "1" */ GpioPinDigitalInput myButton = gpio.provisionDigitalInputPin( OrangePiPin.GPIO_23, // Номер пина по WiringPi "HC-SR501", // Имя пина (необязательный параметр) PinPullResistance.PULL_UP); // включаем подтягивающий (необязательный // параметр) /* * настройка вывода GPIO.24, задаём режим выхода и установливаем значение * LOW при запуске */ GpioPinDigitalOutput myLed = gpio.provisionDigitalOutputPin( OrangePiPin.GPIO_24, // Номер пина по WiringPi "Светодиод", // Имя пина (необязательный параметр) PinState.LOW); // Состояние пина при запуске (необязательный параметр) GpioPinShutdown pinShutdown = new GpioPinShutdownImpl(); /* * установливаем режим входа */ pinShutdown.setMode(PinMode.DIGITAL_INPUT); /* * отключаем подтягивающий резистор */ pinShutdown.setPullResistor(PinPullResistance.OFF); /* * задаём состояние "0" */ pinShutdown.setState(PinState.LOW); /* * освобождаем пин */ pinShutdown.setUnexport(true); /* * настроика поведения выключения */ myLed.setShutdownOptions(pinShutdown); myButton.setShutdownOptions(pinShutdown); /* * Это объект, который "слушает" и исполняет код в зависимости от события. */ myButton.addListener(new GpioPinListenerDigital() { @Override public void handleGpioPinDigitalStateChangeEvent(GpioPinDigitalStateChangeEvent event) { System.out.println(" --> Состояние пина: " + event.getPin() + " = " + event.getState()); /* * Включаем/выключаем светодиод */ myLed.setState(event.getState()); } }); /* * ждёт, пока пользователь нажмёт CTRL-C */ console.waitForExit(); gpio.shutdown(); } catch (Exception e) { e.printStackTrace(); } } }
Проверяем код:
- создаём java файл и вставляем код;
nano PushButtonHcSr501.java
- компилируем файл;
javac -classpath .:classes:/opt/pi4j/lib/'*' -d . PushButtonHcSr501.java
- запускаем программу.
sudo java -classpath .:classes:/opt/pi4j/lib/'*' PushButtonHcSr501
Результат
Удачи! Если у вас возникнут какие-то вопросы, пишите, буду рад вам помочь.
При подключении к Orange Pi Zero к пину OrangePiPin.GPIO_01 и на некоторых других пинах (10, 4, 1, 5) в коде с кнопкой выдает ошибку «Unable to open GPIO edge interface for pin 1: Permission denied» (Даже если запускать от sudo), но на некоторых пинах работает. Подскажите пожалуйста, как заставить работать код?
Эта разъяснительная статья содержит простые и доступные разъяснения по актуальным вопросам. Мы стремимся сделать информацию понятной для широкой аудитории, чтобы каждый смог разобраться в предмете и извлечь из него максимум пользы.
Подробнее можно узнать тут — https://narko-zakodirovat1.ru/
магазин аккаунтов площадка для продажи аккаунтов
банкротство физических лиц
1win. http://www.pboarders.borda.ru/?1-11-0-00000929-000-0-0-1742818701 .
скачать мостбет https://shorts.borda.ru/?1-18-0-00000397-000-0-0/ .
1 win вход 1 win вход .
mostbet скачать http://shorts.borda.ru/?1-18-0-00000397-000-0-0 .
iphone specifications can iphone
интернет магазин аккаунтов маркетплейс готовых аккаунтов
скачать 1win официальный сайт boardwars.forum24.ru/?1-10-0-00000406-000-0-0 .
aviator mostbet http://tagilshops.forum24.ru/?1-4-0-00000205-000-0-0 .
mostbet игры mostbet игры .
mostbet kg https://www.kharkovbynight.forum24.ru/?1-15-0-00003047-000-0-0-1742814422 .
1 win официальный http://www.yamama.forum24.ru/?1-11-0-00000459-000-0-0-1742818616 .
мостбет скачать на андроид мостбет скачать на андроид .
1win. com http://yamama.forum24.ru/?1-11-0-00000459-000-0-0-1742818616 .
мостбет казино https://maksipolinovtsu.forum24.ru/?1-1-0-00000194-000-0-0-1742815870/ .
мотбет https://maksipolinovtsu.forum24.ru/?1-1-0-00000194-000-0-0-1742815870/ .
1win live mymoscow.forum24.ru/?1-6-0-00026928-000-0-0 .
1win ваучер http://dogzz.forum24.ru/?1-10-0-00000155-000-0-0-1742818537 .
мос бет мос бет .
most bet corgan.borda.ru/?1-0-0-00000265-000-0-0 .
1вин войти https://dogzz.forum24.ru/?1-10-0-00000155-000-0-0-1742818537/ .
мостбет кг ashapiter0.forum24.ru/?1-19-0-00001444-000-0-0-1742819001 .
1 win kg zdorovie.forum24.ru/?1-7-0-00000231-000-0-0-1742818050 .
мостбет скачать на андроид мостбет скачать на андроид .
1вин сайт официальный http://www.zdorovie.forum24.ru/?1-7-0-00000231-000-0-0-1742818050 .
Если не можете платить по своим долгам, не нужно откладывать решение проблемы. Вы можете воспользоваться законной процедурой банкротства http://bankrotstvo-v-moskve123.ru .
Банкротство является прекрасной возможностью списать долги и начать жизнь с чистого листа. Не откладывайте решение проблемы, прочитайте отзывы тех, кто уже прошел процедуру банкротства http://bankrotstvo-v-moskve123.ru .
1win официальный сайт скачать https://knowledge.forum24.ru/?1-0-0-00000101-000-0-0-1742817704/ .
мос бет http://mostbet6004.ru .
1win вход на сайт https://www.knowledge.forum24.ru/?1-0-0-00000101-000-0-0-1742817704 .
mostbet kg скачать https://www.mostbet6004.ru .
мостбет вход https://girikms.forum24.ru/?1-1-0-00000361-000-0-0-1742819287/ .
1win online http://belbeer.borda.ru/?1-6-0-00001583-000-0-0/ .
motbet http://girikms.forum24.ru/?1-1-0-00000361-000-0-0-1742819287 .
mostbet http://www.hiend.borda.ru/?1-16-0-00000259-000-0-0-1743052953 .
мостбет скачать alfatraders.borda.ru/?1-0-0-00004917-000-0-0-1743053068 .
mosbet hiend.borda.ru/?1-16-0-00000259-000-0-0-1743052953 .
мос бет http://alfatraders.borda.ru/?1-0-0-00004917-000-0-0-1743053068/ .
мостбет вход cah.forum24.ru/?1-3-0-00000096-000-0-0-1743053764 .
1win партнёрка 1win партнёрка .
motbet http://cah.forum24.ru/?1-3-0-00000096-000-0-0-1743053764 .
1win. 1win. .
ванвин ванвин .
1win скачать kg https://balashiha.myqip.ru/?1-12-0-00000437-000-0-0-1743258848/ .
банкротство отзывы банкротство отзывы .
мостбет промокод https://www.svstrazh.forum24.ru/?1-18-0-00000136-000-0-0-1743260517 .
банкротство физ лиц отзывы
1 win.pro 1win6051.ru .
mostbet kg отзывы http://mostbet6029.ru .
1win http://1win5010.ru .
1 ван вин 1win6008.ru .
скачать мостбет http://mostbet6011.ru .
wan win wan win .
1 win kg 1 win kg .
1win официальный сайт войти [url=http://1win5030.ru/]http://1win5030.ru/[/url] .
автомобиль в аренду в москве дешево самая дешевая аренда машин в москве
mostbet kg mostbet kg .
аренда машины владивосток без водителя аренда авто во владивостоке посуточно
прокат авто в спб водителя дешево https://prokat-avto2.ru/
Hello folks!
I came across a 103 awesome platform that I think you should browse.
This platform is packed with a lot of useful information that you might find interesting.
It has everything you could possibly need, so be sure to give it a visit!
https://lodz-hostel.pl/gry-kasynowe/popularne-gry-i-loterie-liczbowe-jako-hazard/
Hello pals!
I came across a 103 very cool platform that I think you should browse.
This tool is packed with a lot of useful information that you might find valuable.
It has everything you could possibly need, so be sure to give it a visit!
http://methodsclusters.ca/gambling-tricks/the-psychology-of-the-casino-how-interiors-are-designed-to-keep-you-playing/
1win online https://www.1win7004.ru .
1win metode de plată 1win5026.ru .
1 вин про https://1win7017.ru .
1win casino http://www.1win18.com.ng .
most bet http://1win5028.ru/ .
1-win https://1win7018.ru .
казино 1win казино 1win .
1вин. http://www.1win7007.ru .
мостбет скачать андроид https://www.mostbet5009.ru .
motsbet https://mostbet5010.ru .
aviator mostbet aviator mostbet .
1вин онлайн https://1win7012.ru .
1 win регистрация 1win7010.ru .
mostbet промокод http://mostbet7006.ru .
мостбет скачать андроид https://mostbet7007.ru/ .
мостбет скачать мостбет скачать .
Заказать диплом на заказ возможно через сайт компании. docs.brdocsdigitais.com/index.php/Диплом_без_посещения_учёбы
Для эффективного продвижения по карьере необходимо наличие официального диплома университета. Заказать диплом любого университета у сильной компании: poluchidiplom.com/diplom-goznak-kupit/
ставки на спорт бишкек онлайн http://mostbet6041.ru .
Мы изготавливаем дипломы любых профессий по приятным тарифам. Мы можем предложить документы ВУЗов, которые находятся на территории всей Российской Федерации. Дипломы и аттестаты выпускаются на бумаге высшего качества. Это позволяет делать настоящие дипломы, которые не отличить от оригинала. emploi-securite.com/societes/archive-diploma
поддержка мостбет https://mostbet6040.ru/ .
Приобрести диплом о высшем образовании!
Наши специалисты предлагаютвыгодно и быстро приобрести диплом, который выполняется на оригинальной бумаге и заверен мокрыми печатями, штампами, подписями официальных лиц. Данный документ способен пройти любые проверки, даже с использованием специальных приборов. Решите свои задачи быстро с нашей компанией- pulsevision.ru/forum/user/26304
1win պաշտոնական կայք http://1win5034.ru/ .
1 вин http://1win706.ru/ .
mosbet https://www.mostbet6042.ru .
1вин казино 1вин казино .
фільми 2025 вже вийшли новинки кіно 2025 дивитися безкоштовно
1вин официальный сайт мобильная https://1win8003.ru/ .
1хставка скачать на андроид https://www.1win8006.ru .
на карту сбербанка» на карту сбербанка» .
1 win md https://1win5050.ru/ .
мелбет http://melbet1004.ru/ .
1win metode de plată 1win metode de plată .
mostbet sayti http://mostbet3024.ru/ .
мостбет приложение https://www.mostbet8006.ru .
металлические значки штамповка производство значков из металла
Быстро приобрести диплом любого университета!
Заказать диплом ВУЗа по доступной цене возможно, обращаясь к проверенной специализированной фирме. Купить диплом о высшем образовании: diplomskiy.com/diplom-s-zaneseniem-karera-i-uspex-garantirovani
motbet motbet .
отзывы 1win отзывы 1win .
Купить диплом ВУЗа можем помочь. Купить аттестат в Ярославле — diplomybox.com/kupit-attestat-v-yaroslavle
1win комиссия на вывод 1win8010.ru .
промокод 1 x ставка http://www.1win8004.ru .