[Из песочницы] Просто об «умном доме»: как сделать «умную» подсветку
Приходя домой, всегда было неудобно: открываешь дверь, а дальше темно, тогда появилась идея сделать подсветку в коридоре, да непростую, а что бы с телефона можно было включить до прихода домой. Ну сказано — значит надо начинать.
Так как в дальнейшем планируются расширения этой системы (или нет), было решено взять одноплатный компьютер за основу. Легким движением мыши на али был подобран самый дешевый<
spoiler title=«orange pi zero 256mb»>
orange pi zero 256mb.
Подключение
Дальше механичекая часть, тут ничего сложного. Точно так же, как к плате ардуино, только в соответсвии с выходами на orange pi.
Берем обычное реле для «самоделкиных». С одной стороны подключаем питание и управляющий пин, с другой стороны разрезаем провод питания нашего светильника и вставляем в реле (в моем случае это была диодная лента).
Схема:
Вот и все, вы гений.
Немного кода
С технической частью на этом закончили. Переходим к софту, тут тоже все просто:
- Устанавливаем на sd карту armbian или любой другой линукс, но я выбрал именно этот. Рекомендую записать образ с помощью etcher.
- Далеее через apt-get устанавливаем java в 3 команды:
#sudo add-apt-repository ppa:webupd8team/java #sudo apt-get update #sudo apt-get install oracle-java8-installer
- С помощью гита добавим набор 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, для этого нужно добавить репозиторий и зависимость.
И тогда финальный скрипт долже выглядеть как-то так:
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 классу:
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
@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)