В этой статье показано как с помощью одноплатного компьютера и Pi4J сделать мигающий светодиод. Можно сказать, что это первый «урок для начинающих» из этой серии.
Проект Pi4J — это мост между оборудованием Raspberry Pi и Java с объектно-ориентированным подходом. Pi4J — проект с открытым исходным кодом. В дополнение к базовым функциональным возможностям доступа к аппаратным средствам, этот проект также пытается предоставить набор расширенных функций, которые делают работу с Raspberry Pi простой в использовании и более удобной для Java-разработчиков.
И так, для начала нужно установить библиотеки Pi4J на ваш компьютер. Pi4J поддерживает следующие платы: Raspberry Pi, Banana Pi, Banana Pro, Synovoip BPI, Odroid, Orange Pi и NanoPi. По умолчанию Pi4J настроен под Raspberry Pi.
Необходимые компоненты
Чтобы зажечь светодиод понадобится:
- одноплатный компьютер (в моём случае — это Orange Pi PC);
- светодиод;
- резистор 220 Ом.
Подключение светодиода
Мы подключаем резистор сопротивлением 220 Ом к выходу номер 24 (GPIO.24), к резистору в свою очередь подключаем анод (обычно длинная ножка) светодиода. Катод подсоединяем к земле (GND или 0v).
определить какой пин 24-й, так это колонка wpi после выполнения gpio readall
.
Инициализация компонентов
Если у вас есть Raspberry Pi, тогда вам не надо выбирать платформу. У меня Orange Pi PC, по этому я должны явно указывать платформу — Orange Pi.
PlatformManager.setPlatform(Platform.ORANGEPI);
Перед взаимодействием с Pi4J мы должны сначала создать экземпляр контроллера GPIO. GpioFactory
включает метод getInstance
для создания контроллера GPIO. Проект будет содержать только один экземпляр контроллера GPIO, так как паттерн Singleton гарантирует, что у класса есть только один экземпляр, и предоставляет к нему глобальную точку доступа.
final GpioController gpio = GpioFactory.getInstance();
Чтобы получить доступ к пинам GPIO, мы должны сначала обеспечить нужный пин. С помощью методов provisionDigitalOutputPin
мы можем настроить пин в режиме выхода, задать имя и состояние пина при запуске (0 или 1).
GpioPinDigitalOutput myLed = gpio.provisionDigitalOutputPin( OrangePiPin.GPIO_24, // Номер пина по WiringPi "Светодиод", // Имя пина (необязательный) PinState.LOW); // Состояние пина при запуске (необязательный)
Pi4J обеспечивает реализацию для автоматического задания состояний выводов GPIO, когда приложение завершает работу. К примеру, нам нужно освободить пин, установить в режим входа, отключить подтягивающий резистор и задать состояние LOW (0), чтобы вернуть пин в исходное состояние.
myLed.setShutdownOptions( true, // освобождаем пин PinState.LOW, // задаём состояние 0 PinPullResistance.OFF, // отключаем подтягивающий резистор PinMode.DIGITAL_INPUT);// установливаем режим входа
Если необходимо исполнять какой-то код во время изменения состояния пина (из 0 в 1 или наоборот), тогда нужно создать «слушатель». Обычно они нужны в случае подключения, к примеру, кнопки или датчика движения. В этом примере мы просто будем выводить в консоль имя и состояние пина.
myLed.addListener(new GpioPinListenerDigital() { @Override public void handleGpioPinDigitalStateChangeEvent(GpioPinDigitalStateChangeEvent event) { System.out.println(" --> Состояние пина: " + event.getPin() + " = " + event.getState()); } });
Интерфейс GpioPinDigitalOutput
Интерфейс GpioPinDigitalOutput
содержит методы для подачи (логический «1
«) или снятия (логический «0
«) рабочего напряжения на пины GPIO. Все методы этого интерфейса описаны ниже.
void high();
отправляет на цифровой вывод значение HIGH
.
void low();
отправляет на цифровой вывод значение LOW
.
void toggle();
отправляет на цифровой вывод значение HIGH
, если текущее значение LOW
или LOW
— если HIGH
.
Future<?> blink(long delay);
непрерывно отправляет на цифровой вывод значение HIGH
и LOW
.
Параметры:
long delay
— интервал в миллисекундах;
Future<?> blink(long delay, PinState blinkState);
непрерывно отправляет на цифровой вывод значение HIGH
и LOW
.
Параметры:
long delay
— интервал в миллисекундах;PinState blinkState
— начальное значение:PinState.LOW
илиPinState.HIGH
.
Future<?> blink(long delay, long duration);
отправляет на цифровой вывод значение HIGH
и LOW
.
Параметры:
long delay
— это интервал в миллисекундах;long duration
— продолжительность в миллисекундах.
Future<?> blink(long delay, long duration, PinState blinkState);
отправляет на цифровой вывод значение HIGH
и LOW
.
Параметры:
long delay
— это интервал в миллисекундах;long duration
— продолжительность в миллисекундах;PinState blinkState
— начальное значение:PinState.LOW
илиPinState.HIGH
.
Future<?> pulse(long duration);
отправляет на цифровой вывод значение HIGH
.
Параметры:
long duration
— продолжительность в миллисекундах.
Future<?> pulse(long duration, Callable<Void> callback);
отправляет на цифровой вывод значение HIGH
.
Параметры:
long duration
— продолжительность в миллисекундах;Callable<Void> callback
— задача, которая будет выполняться по истечению времениduration
.
Future<?> pulse(long duration, boolean blocking);
отправляет на цифровой вывод значение HIGH
.
Параметры:
long duration
— продолжительность в миллисекундах;boolean blocking
—true
блокирует текущий поток на время выполнения импульса иfalse
— запуск импульса в отдельный поток (в фоновом режиме).
Future<?> pulse(long duration, boolean blocking, Callable<Void> callback);
отправляет на цифровой вывод значение HIGH
.
Параметры:
long duration
— продолжительность в миллисекундах;boolean blocking
—true
блокирует текущий поток на время выполнения импульса иfalse
— запуск импульса в отдельный поток (в фоновом режиме);Callable<Void> callback
— задача, которая будет выполняться по истечению времениduration
.
Future<?> pulse(long duration, PinState pulseState);
отправляет на цифровой вывод значение.
Параметры:
long duration
— это продолжительность в миллисекундах;PinState pulseState
— это, непосредственно, значениеPinState.LOW
илиPinState.HIGH
.
Future<?> pulse(long duration, PinState pulseState, Callable<Void> callback);
отправляет на цифровой вывод значение.
Параметры:
long duration
— продолжительность в миллисекундах;PinState pulseState
— значениеPinState.LOW
илиPinState.HIGH
;Callable<Void> callback
— задача которая будет выполняться по истечению времениduration
.
Future<?> pulse(long duration, PinState pulseState, boolean blocking);
отправляет на цифровой вывод значение.
Параметры:
long duration
— продолжительность в миллисекундах;PinState pulseState
— значениеPinState.LOW
илиPinState.HIGH
;boolean blocking
—true
блокирует текущий поток на время выполнения импульса иfalse
— запуск импульса в отдельный поток (в фоновом режиме).
Future<?> pulse(long duration, PinState pulseState, boolean blocking, Callable<Void> callback);
отправляет на цифровой вывод значение.
Параметры:
long duration
— продолжительность в миллисекундах;PinState pulseState
— значениеPinState.LOW
илиPinState.HIGH
;boolean blocking
—true
блокирует текущий поток на время выполнения импульса иfalse
— запуск импульса в отдельный поток (в фоновом режиме);Callable<Void> callback
— задача которая будет выполняться по истечению времениduration
.
void setState(PinState state);
отправляет на цифровой вывод значение HIGH
и LOW
.
Параметры:
PinState pulseState
— значениеPinState.LOW
илиPinState.HIGH
;
void setState(boolean state);
отправляет на цифровой вывод значение HIGH
и LOW
.
Параметры:
boolean state
— значениеtrue
илиfalse
.
Future — это интерфейс для получения результатов работы асинхронной операции. Ключевым методом здесь является метод get, который блокирует текущий поток (с таймаутом или без) до завершения работы асинхронной операции в другом потоке. Также, дополнительно существуют методы для отмены операции и проверки текущего статуса.
Мигающий светодиод — примеры
Мигать светодиодом можно несколькими способами. Первый способ — используя методы void high();
и void low();
— зажигаем и выключаем светодиод соответственно.
for (int i = 0; i < 10; i++) { myLed.high(); Thread.sleep(500); myLed.low(); Thread.sleep(500); }
Второй способ — используя методы void setState(PinState state);
и void setState(boolean state);
— задаёт состояние пина в зависимости от значения параметра arg0
: true
и false
или PinState.LOW
и PinState.HIGH
.
for (int i = 0; i < 10; i++) { myLed.setState(true); Thread.sleep(500); myLed.setState(PinState.LOW); Thread.sleep(500); }
Третий способ — используя метод void toggle();
. Этот метод работает как переключатель, если пин в состоянии «1», тогда меняет её в «0» и наоборот.
for (int i = 0; i < 20; i++) { myLed.toggle(); Thread.sleep(500); }
Четвёртый способ — используя методы Future<?> blink(long delay);
. Как по мне, так это самый интересный способ мигать светодиодом. К примеру, нам нужно мигать непрерывно светодиодом пока программа запущена.
Future<?> future = myLed.blink(500);
Или непрерывно мигать в течении некоторого времени.
// непрерывно мигает светодиод каждые 1/2 секунды в течение 15 секунд Future<?> future = myLed.blink(500, 15000); // Ждём окончания мигания while (!future.isDone()) { Thread.sleep(50); }
Завершение программы
Метод shutdown()
остановливает все действия/потоки GPIO, выключив контроллер GPIO, другими словами, этот метод будет принудительно отключать все потоки мониторинга GPIO и задачи.
gpio.shutdown();
Пример Java программы
Ниже привёл пример программы «мигающий светодиод» с использованием функции Future<?> blink(long arg0, long arg1);
. Программа непрерывно мигает светодиод каждые 1/4 секунды в течение 3 секунд.
import java.util.concurrent.Future; import com.pi4j.io.gpio.GpioController; import com.pi4j.io.gpio.GpioFactory; import com.pi4j.io.gpio.GpioPinDigitalOutput; 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; public class LedBlinking { public static void main(String[] args) { try { /* * Поскольку мы не используем платформу Raspberry Pi, мы должны явно * указывать платформу, в нашем случае - это Orange Pi. */ PlatformManager.setPlatform(Platform.ORANGEPI); /* * Создаём экземпляр контроллера GPIO */ final GpioController gpio = GpioFactory.getInstance(); /* * настройка вывода GPIO.24, задаём режим выхода и установливаем значение * LOW при запуске */ GpioPinDigitalOutput myLed = gpio.provisionDigitalOutputPin( OrangePiPin.GPIO_24, // Номер пина по WiringPi "Светодиод", // Имя пина (необязательный) PinState.LOW); // Состояние пина при запуске (необязательный) /* * настроика поведения выключения */ myLed.setShutdownOptions( true, // освобождаем пин PinState.LOW, // задаём состояние 0 PinPullResistance.OFF, // отключаем подтягивающий резистор PinMode.DIGITAL_INPUT);// установливаем режим входа /* * Это объект, который "слушает" и исполняет код в зависимости от события. */ myLed.addListener(new GpioPinListenerDigital() { @Override public void handleGpioPinDigitalStateChangeEvent(GpioPinDigitalStateChangeEvent event) { System.out.println(" --> Состояние пина: " + event.getPin() + " = " + event.getState()); } }); // непрерывно мигает светодиод каждые 1/4 секунды в течение 3 секунд Future<?> future = myLed.blink(250, 3000); // ждёт окончания мигания while (!future.isDone()) { Thread.sleep(50); } gpio.shutdown(); } catch (Exception e) { e.printStackTrace(); } } }
Как скомпилировать Java файла
Для компиляции этой программы используйте следующую команду:
javac -classpath .:classes:/opt/pi4j/lib/'*' -d . LedBlinking.java
Как запуск class файла
Следующая команда запустит этот пример программы:
sudo java -classpath .:classes:/opt/pi4j/lib/'*' LedBlinking
банкротство отзывы
1win официальный сайт регистрация http://www.pboarders.borda.ru/?1-11-0-00000929-000-0-0-1742818701 .
mostbet kg https://www.shorts.borda.ru/?1-18-0-00000397-000-0-0 .
мостюет http://www.tagilshops.forum24.ru/?1-4-0-00000205-000-0-0 .
мостбет chrono https://kharkovbynight.forum24.ru/?1-15-0-00003047-000-0-0-1742814422 .
1win pro https://www.yamama.forum24.ru/?1-11-0-00000459-000-0-0-1742818616 .
мостбет казино maksipolinovtsu.forum24.ru/?1-1-0-00000194-000-0-0-1742815870 .
1win kg скачать http://mymoscow.forum24.ru/?1-6-0-00026928-000-0-0/ .
1 win.com https://dogzz.forum24.ru/?1-10-0-00000155-000-0-0-1742818537 .
mostbet официальный сайт http://corgan.borda.ru/?1-0-0-00000265-000-0-0 .
мостбет скачать на андроид http://ashapiter0.forum24.ru/?1-19-0-00001444-000-0-0-1742819001 .
сайт 1win https://www.knowledge.forum24.ru/?1-0-0-00000101-000-0-0-1742817704 .
мост бет http://mostbet6004.ru/ .
wan win http://www.belbeer.borda.ru/?1-6-0-00001583-000-0-0 .
мостбет официальный сайт https://girikms.forum24.ru/?1-1-0-00000361-000-0-0-1742819287/ .
мостбет казино войти https://alfatraders.borda.ru/?1-0-0-00004917-000-0-0-1743053068 .
мостбет зеркало http://cah.forum24.ru/?1-3-0-00000096-000-0-0-1743053764 .
1win вход на сайт https://fanfiction.borda.ru/?1-0-0-00029708-000-0-0-1743051664 .
1win сайт 1win сайт .
1вин вход с компьютера http://1win6020.ru/ .
1вин вход с компьютера http://www.1win6020.ru .
мостбет казино войти http://mostbet6006.ru/ .
mostbets mostbets .
мостбет кыргызстан https://mostbet6007.ru .
мостбет казино мостбет казино .
1 win pro http://balashiha.myqip.ru/?1-12-0-00000437-000-0-0-1743258848 .
1 win регистрация http://balashiha.myqip.ru/?1-12-0-00000437-000-0-0-1743258848/ .
Банкротство является прекрасной возможностью списать долги и начать жизнь с чистого листа. Не откладывайте решение проблемы, прочитайте отзывы тех, кто уже прошел процедуру банкротства https://bankrotstvo-v-moskve95.ru .
1vin казино http://balashiha.myqip.ru/?1-12-0-00000437-000-0-0-1743258848/ .
вход 1win https://www.balashiha.myqip.ru/?1-12-0-00000437-000-0-0-1743258848 .
скачать мостбет https://mostbet6008.ru/ .
служба поддержки мостбет номер телефона http://www.mostbet6008.ru .
мостбет войти мостбет войти .
скачать mostbet на телефон svstrazh.forum24.ru/?1-18-0-00000136-000-0-0-1743260517 .
mostbet apk скачать https://www.mostbet6008.ru .
мостбет скачать https://svstrazh.forum24.ru/?1-18-0-00000136-000-0-0-1743260517 .
мостбет скачать андроид http://svstrazh.forum24.ru/?1-18-0-00000136-000-0-0-1743260517/ .
мостбет вход https://mostbet6009.ru/ .
1 win pro 1 win pro .
1vin https://1win6051.ru/ .
1вин бет официальный сайт http://1win6051.ru/ .
mostbet kg отзывы https://mostbet6010.ru/ .
1вин официальный сайт мобильная http://1win6051.ru .
мост бет мост бет .
скачать 1win официальный сайт http://1win6005.ru .
мостбет кыргызстан http://mostbet6030.ru/ .
1 win сайт 1 win сайт .
mosbet mosbet .
мосбет казино мосбет казино .
мостбет официальный сайт mostbet6029.ru .
1win online games https://1win13.com.ng/ .
1вин сайт официальный 1win6054.ru .
1win com http://1win6054.ru/ .
1win pro 1win6005.ru .
1win site 1win13.com.ng .
мост бет мост бет .
mostbet https://mostbet6029.ru .
скачат мостбет https://www.mostbet6030.ru .
1win betting https://1win13.com.ng/ .
casino 1 win 1win1001.top .
1 win сайт http://1win6054.ru/ .
казино онлайн kg http://mostbet6031.ru .
sports betting 1win sports betting 1win .
1win mexico https://www.1win1001.top .
скачать мостбет скачать мостбет .
aplicația 1win http://1win5010.ru/ .
1 win вход https://1win6042.ru/ .
мостбет скачать казино https://mostbet6032.ru .
1win кыргызстан http://1win6054.ru/ .
1win bet deposit 1win bet deposit .
1 вин https://1win6042.ru .
служба поддержки мостбет номер телефона https://mostbet6032.ru .
1 вин официальный https://www.1win6043.ru .
portofele electronice casino portofele electronice casino .
1win mexico 1win1001.top .
1win cassino 1win cassino .
мостбет промокод http://www.mostbet6032.ru .
1win вход http://www.1win6042.ru .
поддержка мостбет https://www.mostbet6032.ru .
1win 1win .
cazinouri online moldova https://1win5010.ru/ .
1win молдова 1win молдова .
mostber http://www.mostbet6031.ru .
сайт 1win официальный сайт вход сайт 1win официальный сайт вход .
mostbet скачать на телефон бесплатно андроид mostbet скачать на телефон бесплатно андроид .
înregistrare 1win 1win5012.ru .
банкротство физических лиц отзывы банкротство физических лиц отзывы .
скачать 1win с официального сайта http://www.1win6007.ru .
мостбет скачать андроид http://mostbet6011.ru .
1вин http://1win6007.ru/ .
1win играть http://www.1win6008.ru .
mostbet игры http://www.mostbet6033.ru .
1vin 1win6044.ru .
скачать mostbet на телефон http://www.mostbet6011.ru .
1 вин вход https://1win6007.ru .
motsbet https://www.mostbet6011.ru .
1vin kg 1win6008.ru .
1 ван вин http://1win6008.ru/ .
1win http://www.1win5012.ru .
mostbet http://mostbet6011.ru .
1win online 1win6008.ru .
1 win.kg 1 win.kg .
1win.kg 1win.kg .
мостбет войти http://www.mostbet6034.ru .
1win uganda https://www.1win1003.top .
most bet http://mostbet6034.ru/ .
pariuri sportive moldova https://1win5013.ru .
мосбет казино мосбет казино .
1win login ug https://1win1003.top .
1win онлайн 1win онлайн .
1win md 1win5013.ru .
мостбет промокод http://mostbet6034.ru/ .
мостбет авиатор http://mostbet6034.ru/ .
партнёрка 1win https://1win6045.ru .
wan win 1win6010.ru .
mostbet kg отзывы https://www.mostbet6035.ru .
мостюет мостюет .
1вин официальный сайт вход http://1win6045.ru .
mostbet скачать на телефон бесплатно андроид http://mostbet6033.ru .
cazino md cazino md .
1вин приложение 1вин приложение .
1вин. 1вин. .
1win официальный сайт http://1win6045.ru .
зайти в 1вин http://1win6045.ru .
1win.com https://1win5015.ru .
jocuri de noroc online moldova http://1win5015.ru/ .
мостбет официальный сайт http://www.mostbet6033.ru .
мостбет кг https://mostbet6036.ru .
1 vin официальный сайт https://www.1win6045.ru .
мостбет вход mostbet6036.ru .
1wln http://1win7002.ru/ .
mostbet скачать mostbet скачать .
1win официальный сайт регистрация http://www.1win7014.ru .
1вин войти http://1win6045.ru/ .
1вин. https://1win7014.ru/ .
mostbet игры https://www.mostbet5002.ru .
1вин официальный регистрация http://1win5030.ru/ .
mostbet casino mostbet casino .
1 win.am https://1win5030.ru/ .
motsbet http://www.mostbet5002.ru .
mostbet kg скачать mostbet5003.ru .
баланс 1win http://1win5030.ru .
1 win http://1win7004.ru/ .
1 win сайт http://1win7004.ru/ .
мост бет http://www.mostbet5003.ru .
1winn 1win7004.ru .
aviator mostbet https://mostbet5003.ru/ .
мостбет chrono https://mostbet6038.ru/ .
1win sportsbook https://www.1win17.com.ng .
мостбет мостбет .
1win партнерка вход https://www.1win7004.ru .
мостбет скачать андроид мостбет скачать андроид .
мосбет казино http://mostbet7001.ru/ .
мостбет авиатор мостбет авиатор .
1 win moldova https://1win5026.ru .
мостбет скачать казино https://mostbet6038.ru/ .
1вин официальный мобильная http://www.1win7017.ru .
1win site https://www.1win18.com.ng .
1win md https://1win5026.ru/ .
1win betting http://www.1win18.com.ng .
1win online site https://www.1win18.com.ng .
1вин официальный сайт вход 1вин официальный сайт вход .
sports betting 1win sports betting 1win .
register with 1win website http://1win18.com.ng .
1win молдова http://www.1win5026.ru .
1 win moldova 1 win moldova .
1win pariuri http://1win5026.ru .
1win скачать 1win скачать .
1win онлайн https://www.1win7017.ru .
мостбет скачать андроид http://www.mostbet7003.ru .
1 вин скачать https://www.1win7006.ru .
1 win moldova http://1win5026.ru .
1вин официальный сайт мобильная https://1win7017.ru .
мостбет скачать на андроид mostbet7003.ru .
мостбет скачать бесплатно мостбет скачать бесплатно .
1win онлайн 1win онлайн .
cod promoțional 1win http://1win5027.ru/ .
1 ван вин http://1win7006.ru .
поддержка мостбет http://mostbet7003.ru .
1win зайти 1win зайти .
1 вин официальный сайт вход 1win7007.ru .
сайт 1win https://1win7018.ru/ .
мостбет скачать бесплатно mostbet6033.ru .
motbet https://www.1win5028.ru .
1win. com https://1win7007.ru/ .
mostbet https://www.1win5028.ru .
mostbet скачать на телефон бесплатно андроид https://www.mostbet6033.ru .
1win,com https://1win7007.ru .
мост бет мост бет .
мостбет промокод https://www.mostbet5008.ru .
мостбет скачать казино http://www.mostbet6033.ru .
1 win вход 1win7018.ru .
mostbet официальный сайт mostbet6033.ru .
mostbet chrono http://www.mostbet6033.ru .
melbet кыргызстан melbet кыргызстан .
melbet kg https://melbet1003.ru/ .
мост бет мост бет .
1win uganda http://1win1005.top/ .
поддержка мостбет http://www.mostbet5010.ru .
мелбет кыргызстан мелбет кыргызстан .
мостбет скачать бесплатно https://mostbet5010.ru .
мостбет скачать андроид мостбет скачать андроид .
wan win wan win .
казино онлайн kg http://mostbet5010.ru/ .
1вин официальный мобильная 1вин официальный мобильная .
mostbet kg скачать на андроид http://www.mostbet5010.ru .
1vin казино https://www.1win7009.ru .
mostbet скачать на телефон бесплатно андроид https://mostbet5009.ru/ .
скачать мостбет официальный сайт https://mostbet5009.ru/ .
1win,com https://1win7009.ru .
1 vin официальный сайт http://1win7009.ru/ .
скачать mostbet на телефон http://www.mostbet5009.ru .
1win 1win1005.top .
1 win вход http://1win7010.ru/ .
мостбет скачать на андроид http://mostbet7007.ru .
поддержка мостбет https://mostbet7006.ru/ .
mostbet kg mostbet kg .
мостбет chrono мостбет chrono .
Мы изготавливаем дипломы любых профессий по доступным ценам.
Вы покупаете диплом в надежной и проверенной временем компании. Купить диплом о высшем образовании— http://paintball-keller-lev.de/ucp.phpmode=login/ — paintball-keller-lev.de/ucp.phpmode=login
motbet http://mostbet6033.ru .
mostbet промокод https://mostbet7007.ru .
мостбет казино войти http://mostbet6040.ru/ .
mostbet chrono http://mostbet6040.ru .
Мы изготавливаем дипломы психологов, юристов, экономистов и любых других профессий по выгодным тарифам. Стараемся поддерживать для заказчиков адекватную политику цен. Для нас важно, чтобы дипломы были доступны для большого количества граждан.
Приобретение диплома, подтверждающего обучение в ВУЗе, — это грамотное решение. Купить диплом о высшем образовании: diplom-bez-problem.com/diplom-kupit-ekaterinburg-6/
1вин 1win7012.ru .
Заказать диплом о высшем образовании!
Мы готовы предложить дипломы любой профессии по приятным тарифам— ruobrazovanie.ru
pin up az pin up az .
вход 1win https://www.1win7012.ru .
aviator mostbet aviator mostbet .
pin up bet pin up bet .
мостбет скачать мостбет скачать .
мостбет кыргызстан скачать http://www.mostbet6040.ru .
mostbet apk скачать mostbet apk скачать .
pinap pinap .
dj music dj music .
1win.com http://1win706.ru .
москва хранение вещей москва хранение вещей .
mostbet chrono https://www.mostbet6040.ru .
pinab pinab .
слушать клубную музыку слушать клубную музыку .
casino 1win 1win706.ru .
mostbet сайт регистрация https://mostbet6042.ru .
Мы изготавливаем дипломы любых профессий по доступным тарифам. Мы предлагаем документы техникумов, которые расположены на территории всей России. Дипломы и аттестаты выпускаются на «правильной» бумаге самого высшего качества. Это дает возможность делать государственные дипломы, которые невозможно отличить от оригиналов. lixoro.de/read-blog/9807_kupit-diplom-moskva-s-zaneseniem-v-reestr.html
складские боксы в москве складские боксы в москве .
Заказать диплом о высшем образовании. Покупка документа о высшем образовании через проверенную и надежную фирму дарит ряд плюсов. Это решение дает возможность сберечь как личное время, так и значительные финансовые средства. psorum.ru/member.php?u=4348
mostbet личный кабинет https://mostbet6041.ru/ .
Заказать диплом на заказ возможно через сайт компании. deanonnic.listbb.ru/viewtopic.phpf=5&t=1582
1win баланс https://1win710.ru .
1win официальный сайт войти http://1win710.ru .
мостбет сом http://mostbet6042.ru/ .
femboy comic free graphic novels online
anime girl manga romance manga online free
https://receptmult.ru/
1win молдова 1win711.ru .
1вин регистрация 1вин регистрация .
1win moldova download http://www.1win711.ru .
1win գրանցում http://1win5034.ru .
mostbet. http://www.mostbet6042.ru .
1win.com официальный сайт http://1win707.ru/ .
http 1win http 1win .
1win. https://1win711.ru .
крутая музыка крутая музыка .
casino 1win https://1win707.ru .
1win официальный сайт казино https://1win711.ru .
1win. https://www.1win706.ru .
Kamagra Commander maintenant: kamagra gel — kamagra gel
Мы можем предложить дипломы любых профессий по доступным тарифам. Стараемся поддерживать для покупателей адекватную политику цен. Важно, чтобы документы были доступны для большого количества граждан.
Заказ документа, подтверждающего обучение в ВУЗе, — это выгодное решение. Приобрести диплом ВУЗа: diplomdoc.ru/kupit-attestat-texnikuma-3/
1winw 1winw .
Мы можем предложить дипломы любых профессий по приятным тарифам. Всегда стараемся поддерживать для заказчиков адекватную политику цен. Важно, чтобы документы были доступными для большого количества наших граждан.
Приобретение диплома, который подтверждает окончание ВУЗа, — это разумное решение. Заказать диплом любого ВУЗа: magazin-diplomov.ru/kupit-diplom-5/
1win armenia https://1win5034.ru/ .
kamagra livraison 24h: Kamagra pharmacie en ligne — kamagra gel
1win oficial https://1win706.ru .
1win.md 1win707.ru .
ван вин регистрация https://1win8002.ru .
1win россия 1win россия .
почта 1win http://1win8005.ru/ .
как зайти на 1win https://www.1win8002.ru .