Мазмуну:

Alexa Raspberry Pi Relay Controller: 6 кадам
Alexa Raspberry Pi Relay Controller: 6 кадам

Video: Alexa Raspberry Pi Relay Controller: 6 кадам

Video: Alexa Raspberry Pi Relay Controller: 6 кадам
Video: Alexa controlled 6-way distribution board with SonOff WiFi relay 2024, Ноябрь
Anonim
Alexa Raspberry Pi релелик контроллери
Alexa Raspberry Pi релелик контроллери
Alexa Raspberry Pi релелик контроллери
Alexa Raspberry Pi релелик контроллери
Alexa Raspberry Pi релелик контроллери
Alexa Raspberry Pi релелик контроллери

Мен IOS түзмөктөрүн Amazon'дун Alexa менен интеграциялоодо тажрыйбам менен бөлүшүү үчүн ушул Нускаманы түздүм.

Бул долбоор малина пи менен байланышкан реле тактасын смартом контроллерден башкарууга мүмкүндүк берет.

Бул Alexa менен сыналган, бирок Samsung Smartthings жана башка башкаруу интерфейстери менен жакшы иштейт окшойт, анткени ал Belkin Wemo розеткаларын туурайт.

Мыкты FAUXMO кодуна негизделген көптөгөн мисалдар бар, бирок бул питонду үйрөнүүнү билдирет жана мага түзмөктөрүмө керектүү деталдуу көзөмөлдү берген эмес, ошондуктан мен базалык коддоо тили катары С колдонуп, башынан баштап кайра түзүүнү чечтим.

Мен ошондой эле Amazon.com сайтындагы лямбда кодунун тереңдигине баргым келбеди, ошондуктан мен аны абдан жөнөкөй кармадым.

Мен булакты жана жазууларды Githubга жайгаштырдым:

github.com/Switchdoctorstu/StuPiMo

Үйрөткүч чындыгында аны кантип иштетүү керектигин жана башкаларга жардам берсе, менин жазууларымды жарыялоону камтыйт.

1 -кадам: Жабдуулар жана туташуулар

Жабдуулар жана туташуулар
Жабдуулар жана туташуулар
Жабдуулар жана туташуулар
Жабдуулар жана туташуулар
Жабдуулар жана туташуулар
Жабдуулар жана туташуулар

Сизге керектүү нерселер Amazon / EBayде жеткиликтүү:

  • Малина PI *
  • Pi электр менен камсыздоо
  • Dupont бириктиргичтери
  • Эстафета тактасы
  • Эски микро USB коргошун (реле картасынын кубаттуулугу үчүн жарымын кыскартуу үчүн)

Ар кандай малина Pi иштейт, мен муну Model B жана Zeroдо сынап көрдүм.

*Эгерде Pi Zero колдонулса, сизге OTG түйүнүнүн адаптери керек болот (эгерде 'W' версиясын WiFi менен buit менен сатып албасаңыз)

Пи тармагына туташууңуз керек болот.

Релейлик картаны Pi менен туташтыруу үчүн дюпонт коннекторлорун колдонуңуз.

Эскертүү, реле картасы тышкы кубатты колдонушу керек (шилтемени алып, тышкы 5vге туташуу). Бул PIден иштейт, бирок өндүрүштү иштетүү үчүн сунушталбайт.

Орнотуу үчүн мен сырттан кубатталган USB HUB колдондум. Бул PIге күч берет.

Мен ошондой эле эски USB кабелинин учун кесип, коопсуз болуу үчүн релелерди 2 -USB туташуусунан хабка чейин иштеттим. Менин "өндүрүш" версиямда кичинекей 5V 5A которуу режими электр энергиясы колдонулат. Дагы эле мен Micro-USB аркылуу Пиди кубаттоо үчүн USB коргошун экиге бөлүп, релелик тактаны иштетүү үчүн дюпонт коннекторлорунун экөөсүн кесип салдым. USB коргошунунда 4 зым бар, көбү 5v менен камсыз кылуу үчүн кызыл/кара түстү колдонушат, бирок эгер күмөн санасаңыз, туура зымдарды алуу үчүн метрди колдонуңуз.

Тактадагы реле казыктары PI башындагы тиешелүү GPIO казыктарына туташтырылган.

Код GPIO казыктарын тандоого мүмкүндүк берет, бирок мен колдонгон демейки:

  1. Релелик пин 1 - Жер
  2. Реле 2 - Реле 1 - GPIO 0
  3. Реле 3 - Реле 2 - GPIO 1
  4. Релелик пин 4 - Реле 3 - GPIO 2
  5. Релелик пин 5 - Реле 4 - GPIO 3
  6. Релелик пин 6 - Реле 5 - GPIO 4
  7. Релелик пин 7 - Реле 6 - GPIO 5
  8. Релелик пин 8 - Реле 7 - GPIO 6
  9. Реле 9 - Реле 8 - GPIO 7
  10. Релелик пин 10 - +5в логика үчүн

2 -кадам: PI орнотуу

Мен сиздин ПИни кантип иштетүү жана тармакка туташуу боюнча окуу куралын кайра түзбөйм.

Көптөгөн гиддер бар, анын ичинде мыкты инструктор:

www.instructables.com/id/Ultimate-Raspberr…

Сиз тармакта ПИ көрүнүп турган жерге жетишиңиз керек жана сиз ага туташа аласыз.

Бул Ethernet же Wireless аркылуу болобу, айырмасы жок.

Бул долбоорду Geany Programmers Editor аркылуу Raspberry PI менен эле бүтүрсө болот, бирок мен жеке түрдө Visual Studio же Eclipseти (же ал тургай Notepad ++) колдонуп, компьютерге кодду даярдоону оңой табам, андан кийин аны мүчүлүштүктөрдү оңдоо үчүн PIге жүктөйм. VNC туташуусу. Дагы бир жолу мен муну айткым келбейт, анткени RPiде VNCти орнотуу боюнча көптөгөн сонун көрсөтмөлөр бар.

Сизге керектүү нерсенин баары - бул кодду жүктөп, түзө турган чекке жетүү.

Маанилүү бир эскертүү UPNP иштетүүчү UDP мультикастын талап кылгандыктан, колдонулган интерфейстер 'Promiscuous' режимине коюлушу керек.

Бул буйрук сабында жасалышы мүмкүн:

pi@raspberrypi: ~ $ ifconfig eth0 promisc

жана / же

pi@raspberrypi: ~ $ ifconfig wlan0 promisc

Бул туруктуу болушу керек, ошондуктан мен /etc/rc.local редакцияладым

sudo nano / etc / rc.local

сапты кошуу үчүн:

sudo ifconfig eth0 promisc

интерфейстерди ишке киргизүүдө камсыз кылуу үчүн баннер # линияларынын биринчи топтомунан кийин.

3 -кадам: Кодду жүктөө жана түзүү

Коддун өзү менин Github репозиторийимде отурат;

github.com/Switchdoctorstu/StuPiMo/blob/ma…

репозиторийди клондоштуруунун "туура" жолдору бар. Pi столунда Geany редакторун ачуу жана кодду чаптоо оңой болду.

Ошо сыяктуу эле, эгер сиз буйрук сабын колдонуп жатсаңыз;

Жаңы каталог түзүү

mkdir Stu

Ага өзгөртүү

cd Stu

Жаңы текст файлын түзүңүз

нано StuPiMo.c

Github чийки кодун көчүрүп, аны жаңы файлга чаптаңыз

Сактоо жана чыгуу.

Файлды C булак кодунун объектиси болгондон кийин, аны колдонуп түзө аласыз

gcc -o StuPiMo StuPiMo.c -l wiringPi

"-l wiringPi" талап кылуучу wiringPi китепканасына шилтеме берүү үчүн керек экенин эске алыңыз.

Андан кийин кодду колдонуп иштетсе болот

./StuPiMo

Дагы, эгер сиз муну баштоодо иштетүүнү кааласаңыз, буйрукту колдонуңуз:

sudo nano /etc/rc.local

кийинки сапты кошуу үчүн

sudo/home/pi/Stu/StuPiMo &

сиздин /etc/rc.local файлыңызга. Файлды чыкканда сактоону унутпаңыз.

Эскертүү, '&' бул учурда скрипттин бөгөттөлүшүн камсыз кылуу үчүн кошумча процесстин пайда болушун камсыз кылуу үчүн абдан маанилүү.

4 -кадам: Аны колдонуу

Сиз иштеп жаткан кодду алгандан кийин, Alexa'дан 'Discover Devices' сураңыз, ал виртуалдык Wemo түзмөктөрүнүн 8ин табышы керек.

Бул жөн эле: "Alexa 1 розеткасын күйгүз" же "Alexa 6 розеткасын өчүр" ж.б.у.с. жана тиешелүү реле өзгөрөт.

5 -кадам: Кодекс кантип иштейт

Код Belkin Wemo розетка түзмөгүнүн эмуляциясы менен иштейт.

Бул үчүн 2 негизги функцияны аткарышы керек

  • UPNP ачылышын берүүчү
  • түзмөккө жөнөтүлгөн буйруктарды жана керектүү жоопторду башкаруу үчүн "түзмөк иштетүүчү" (виртуалдык түзмөккө бирден).

"Бонустун" өзгөчөлүгү, ал ошондой эле түзмөктөрдү көзөмөлдөөгө уруксат берүү үчүн веб -баракчаны чыгарат.

UPNP иштетүүчү

UPNP иштетүүчү 239.255.255.250 1900 портунда SSDP протоколунун пакеттерин көзөмөлдөө үчүн розетканы ачат.

Бул ар бир "M-SEARCH" суроосуна жооп берет, ал ачылыштын жооп пакети менен, жеке wemo эмуляторлорун сурагандардын баарына кабарлайт.

Түзмөк иштетүүчү

Түзмөктү иштетүүчүлөр (виртуалдык түзмөккө бирден) IP портторунун сериясын көзөмөлдөйт жана сурамдарга жооп берет.

Бул суралганда setup.xml жообун берет

Суралганда, ал окуяны сүрөттөө файлына кызмат кылат

Бул GETBINARYSTATE өтүнүчүнө жооп берет

Бул SETBINARYSTATE өтүнүчүн иштеп чыгат жана жооп берет

Web Server

Веб -сервер - бул реле үчүн бир баскычты камтыган HTML формасын түзүүчү жөнөкөй тартип.

Ал басылган баскычтарга жооп берет жана реленин абалын ошого жараша алмаштырат.

6 -кадам: Ыңгайлаштыруу жана достук аттар

Ыңгайлаштыруу жана достук аттар
Ыңгайлаштыруу жана достук аттар

Мен жөнөкөй жана оңдолушу үчүн коддон жиним келген жок.

Негиздер коддун башталышындагы аныктамалар менен ыңгайлаштырылышы мүмкүн:

// глобалдык аныктамалар#веб -серверди иштетүү үчүн WEBPORT 5353 // портун аныктайт

#define NUMDEVICES 8 // Түзүлө турган виртуалдык түзмөктөрдүн саны

#define PORTBASE 43450 // чейин көбөйтүү үчүн базалык IP порту

WEBPORT-бул камтылган веб-сервер иштеген порт номери. Муну оңой кылуу үчүн 80ге отургузууга болот, бирок мен бул жерде иштеген tomcat же башка кызматтарга карама -каршы келгенин байкадым.

NUMDEVICES жеке WEMO эмуляторлорунун санын аныктайт. Эгерде сизде 2 порттук реле картасы болсо, анда муну 2, 4 порт = 4 ж.

Түзмөктөрдүн достук аттары setup_names деп аталган тартипте коюлган:

int setup_names (шарттуу [NUMDEVICES] [NAMELEN]) {int i = 0;

// бул циклди колдонуңуз

үчүн (i = 0; i <NUMDEVICES; i ++) {

sprintf (достук , "Socket %d", i + 1);

}

// же түзмөк аттарын толтуруу үчүн төмөнкү колдонмо таблицасы

/*

strcpy (достук [0], "Уктоочу бөлмө сыналгы");

strcpy (достук [1], "Электр жууркан");

strcpy (достук [2], "Уктоочу чырак");

strcpy (достук [3], "Socket 4");

strcpy (достук [4], "Socket 5");

strcpy (достук [5], "Socket 6");

strcpy (достук [6], "Socket 7");

strcpy (достук [7], "Socket 8");

*/

return i;

}

Мен "Socket n" түзмөктөрүнүн ар бирине чалуу үчүн циклди колдондум, бирок сиз бул укурукту өчүрүп, ордуна достук аттарыңызды кошо аласыз (жөн гана NUMDEVICES менен бирдей санды кошкондугуңузду текшериңиз) / * * /

Эгер кандайдыр бир өзгөртүүлөрдү киргизсеңиз, кодду кайра түзүүнү унутпаңыз.

Сунушталууда: