Хабрахабр

[Из песочницы] Просто об «умном доме»: как сделать «умную» подсветку

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

Легким движением мыши на али был подобран самый дешевый< Так как в дальнейшем планируются расширения этой системы (или нет), было решено взять одноплатный компьютер за основу.

spoiler title=«orange pi zero 256mb»>
orange pi zero 256mb.

Подключение

Дальше механичекая часть, тут ничего сложного. Точно так же, как к плате ардуино, только в соответсвии с выходами на orange pi.

С одной стороны подключаем питание и управляющий пин, с другой стороны разрезаем провод питания нашего светильника и вставляем в реле ( в моем случае это была диодная лента). Берем обычное реле для «самоделкиных».

Схема:

Вот и все, вы гений.

Немного кода

С технической частью на этом закончили. Переходим к софту, тут тоже все просто:

  1. Устанавливаем на sd карту armbian или любой другой линукс, но я выбрал именно этот. Рекомендую записать образ с помощью etcher.
  2. Далеее через apt-get устанавливаем java в 3 команды:

    #sudo add-apt-repository ppa:webupd8team/java #sudo apt-get update
    #sudo apt-get install oracle-java8-installer

  3. С помощью гита добавим набор wiringPi для нашей платы ( он содержит в себе различные библиотеки для работы с gpio и всякие тулзы для этого же)
    Тоже не сложно:

    #git clone https://github.com/vladikoms/WiringOP-Zero.git
    #cd WiringOP-Zero
    #chmod +x ./build
    #sudo ./build

    Ну и проверим:

    #gpio -v
    #gpio readall

На этой части с платой закончили, переходим к компьютеру и любимым ide.

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

Для работы с gpio необходимо установить библиотеку pi4j, для этого нужно добавить репозиторий и зависимость.

И тогда финальный скрипт долже выглядеть как-то так:

build.gradle

buildscript repositories { mavenCentral() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") }
} apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management' group = 'com.lary.sh'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8 jar{ baseName = 'SH' version = '0.0.1-SNAPSHOT'
}
repositories { mavenCentral() maven{ url "https://oss.sonatype.org/content/groups/public" //вот репозиторий }
} dependencies { implementation('org.springframework.boot:spring-boot-starter-data-rest') implementation('org.springframework.boot:spring-boot-starter-web') runtimeOnly('org.springframework.boot:spring-boot-devtools') testImplementation('org.springframework.boot:spring-boot-starter-test') compile 'com.pi4j:pi4j-core:1.2-SNAPSHOT' //а вот зависимость
}

Отлично переходим к управляющему gpio классу:

Gpio.java

public class MyGpio{ private GpioController gpio ; private GpioPinDigitalOutput myLed; public Gpio() { try { // с ошибками не особо пока что запариваемся только прототип же( наверное) PlatformManager.setPlatform(Platform.ORANGEPI);// указываем , что работаем с OrangePI } catch (PlatformAlreadyAssignedException e) { e.printStackTrace(); } gpio= GpioFactory.getInstance(); myLed = gpio.provisionDigitalOutputPin(OrangePiPin.GPIO_08); // инициализируем 8 пин как выход // то есть будем управлять его напряжением } public void light(){ // метод отвечающий за свечение if(myLed.isHigh()) myLed.low(); // если на выбранном пине высокое напряжение сделать его равным напряжению на земле else myLed.high();// иначе подать высокое напряжение на выбранный пин (8) } public void blink(){ // ну и так помигать для виду for (int i =0;i<10;i++) { try { light(); Thread.sleep(500); } catch (Exception e){ e.printStackTrace(); } } } }

Представленный код достаточно простой и не предполагает хорошего управления пинами платы, но открывает дверь на пути к этому.

Ну и завершающая стадия создание контроллера в spring

GpioController.java

@Controller
public class GpioController { @RequestMapping("/blink") @ResponseBody public String blink(HttpServletResponse response, HttpServletRequest request ) { Gpio gpio =new Gpio(); gpio.blink(); return "blink"; } @RequestMapping("/light") @ResponseBody public void light(){ Gpio gpio =new Gpio(); gpio.light(); }
}

Теперь пара последних телодвижений в виде создания jar файла при помощи gradle. После этого перенос по sftp на плату ( во многих иде можно настроить деплой напрямую) и запустить jar на устройстве. Далее идем в браузере на заветные 192.168.0.***:8080/light
и наслаждаемся, попутно надеясь, что это поможет сохранить наши пальцы ночью или включать свет, до прихода домой.

В следующей части (если когда нибудь доберусь до нее) обязательно покажу разные способы взаимодействия с нашим «умным» домом.

вот тут исходники
а тут работа с гребенкой (gpio)

Показать больше

Похожие публикации

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»