- PVSM.RU - https://www.pvsm.ru -

Просто об «умном доме»: как сделать «умную» подсветку

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

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

spoiler title=«orange pi zero 256mb»>
orange pi zero 256mb [1].
Просто об «умном доме»: как сделать «умную» подсветку - 1

Подключение

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

Просто об «умном доме»: как сделать «умную» подсветку - 2

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

Просто об «умном доме»: как сделать «умную» подсветку - 3

Схема:

Просто об «умном доме»: как сделать «умную» подсветку - 4

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

Немного кода

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

  1. Устанавливаем на sd карту armbian [2] или любой другой линукс, но я выбрал именно этот. Рекомендую записать образ с помощью etcher. [3]
  2. Далеее через apt-get устанавливаем java [4] в 3 команды:
    #sudo add-apt-repository ppa:webupd8team/java	
    #sudo apt-get update
    #sudo apt-get install oracle-java8-installer
    	
  3. С помощью гита добавим набор wiringPi [5] для нашей платы ( он содержит в себе различные библиотеки для работы с gpio и всякие тулзы для этого же)
    Тоже не сложно:

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

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

    #gpio -v
    #gpio readall

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

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

Просто об «умном доме»: как сделать «умную» подсветку - 5

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

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

build.gradle

buildscript {
    ext {
        springBootVersion = '2.1.0.RELEASE'
    }
    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
и наслаждаемся, попутно надеясь, что это поможет сохранить наши пальцы ночью или включать свет, до прихода домой.

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

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

Автор: Larymar

Источник [10]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/java/300133

Ссылки в тексте:

[1] orange pi zero 256mb: http://www.orangepi.org/orangepizero/

[2] armbian: https://www.armbian.com/

[3] etcher.: https://www.balena.io/etcher/

[4] java: https://pcminipro.ru/os/linux-armbian/ustanovka-java-na-armbian/

[5] wiringPi: https://micro-pi.ru/wiringop-wiringpi-%D0%BD%D0%B0-orange-pi-pc/

[6] сайт: https://start.spring.io/

[7] pi4j: http://pi4j.com/

[8] вот тут исходники: https://gitlab.com/maindlab/opspringserver

[9] а тут работа с гребенкой (gpio): https://gitlab.com/maindlab/op

[10] Источник: https://habr.com/post/430928/?utm_source=habrahabr&utm_medium=rss&utm_campaign=430928