Raspberry Pi 3 гараждын эшиги: 15 кадам (сүрөттөр менен)
Raspberry Pi 3 гараждын эшиги: 15 кадам (сүрөттөр менен)
Anonim
Raspberry Pi 3 гараждын эшиги
Raspberry Pi 3 гараждын эшиги

Мен муну 2014 -жылы жараткам. Андан бери көп нерсе өзгөрдү. 2021 -жылы мен бул жерде Smart Garage Door Openerди жаңырттым.

Гараждын эшигин ачуу, жабуу жана көзөмөлдөө үчүн Raspberry Pi жана смартфонду колдонуңуз. Эшикти ачуу жана жабуу үй-бүлөнүн уюлдук телефондоруна орнотулган өздүк күбөлүктөрдү колдонуу менен камсыздалат. Эгерде гараждын эшиги ачык болбогондо, уюлдук телефонго SMS (SMS) жөнөтүңүз.

Гараждын эшиги 2014 -жылдын аягынан бери үзгүлтүксүз колдонулуп келе жатат. Көп жылдар бою мен өзгөрүүлөрдү жаңыртып турууга аракет кылдым. Нускоочуга өзгөртүүлөрдү сүрөттөгөн тиркеме бар.

Бул долбоордун максаттары:

  • Менин биринчи үйрөткүчүм болсун - мен муну жазууну пландаштырган эмесмин, бирок мага көптөгөн сурамдар келип түшкөн
  • Стандарттык пульт менен гараждын эшигин ачыңыз
  • Дубалга орнотулган коңгуроо гараждын ачкычы менен гараждын эшигин ачыңыз
  • SmartPhone менен гараждын эшигин ачыңыз
  • Гараждын эшигинин абалын уюлдук телефон же ноутбук аркылуу алыстан көзөмөлдөңүз (ал ачык же жабыкпы?)
  • Жабуу керек болгондо эшик ачык болсо, чөнтөк телефонума смс билдирүү жөнөтүңүз
  • Гараждын эшигин коопсуз кармаңыз (мисалы, электр энергиясын жоготкондо, эшик ачылбашы керек)
  • Эшикти ачууга башка эч кимге жол бербеңиз (эки тараптуу SSL тастыктамасы)
  • Зымдуу туташуунун ордуна WiFi колдонуңуз
  • Raspberry Pi 3 колдонуңуз

Бул Гараж Эшик Ачкычын ишке ашыруу үчүн негиз инструктаждан алынган: Raspberry Pi Garage Door Opener quararian. Башында мен B+ Raspberry Pi моделин колдондум, андан кийин Raspberry Pi 2 модели Bге көчтүм, эми ал Raspberry Pi 3 колдонот.

Мен Raspberry Pi менен баарлашуу үчүн MacBook колдончумун, бирок каалаган компьютерди колдонсо болот.

Бул аппаратты курууга эч кандай олуттуу себеп жок, бирок бул кызыктуу болду. Аны сатып алуу экономикалык жактан эффективдүү. Окшош аппаратты болжол менен 130 долларга сатып алууга болот.

  • Лифт мастери 828LM
  • Чемберлен MyQ $ 129
  • GoGo дарбазасы $ 179
  • Кол өнөрчү $ 100

Эскертүүлөр:

  • Дөңгөч менен жабылган текст, мисалы, алмаштыруу-бул an чыныгы мааниге алмаштырылышы керек
  • Ардуинонун астын сызган көк текст - бул шилтеме. Бул учурда, бул гараж эшик ачкычынын arduino версиясына шилтеме.
  • Мен колдонулган бардык булактарды насыялоого аракет кылдым. Ар кандай кемчиликтер үчүн кечирим сурайм. Бул документтин көбү башка адамдардын эмгегине негизделген.
  • $ MacBookтун терминалдык терезесинде аткарылган буйрукту билдирет жана адатта Raspberry Piде аткарылат

1 -кадам: Бөлүктөрдү чогултуу

Бөлүктөрдү жана шаймандарды сатып алыңыз же чогултуп алыңыз (баасы АКШ долларында).

  • Raspberry Pi 3 Model B Newark Element14 $ 35
  • 5.2V 2.5A USB Power адаптери Amazon $ 9.99
  • Микро USBден USB кабелине 6 фут Amazon 7,99 доллардан
  • Амазонкадан келген иш $ 6.99
  • SanDisk Ultra 16 GB microSDHC Class 10 адаптер менен (SDSQUAN-016G-G4A) Amazon $ 8.99
  • SunFounder 2 Channel 5V Relay Shield Module for Arduino UNO 2560 1280 ARM PIC AVR STM32 Raspberry Pi - $ 6.79
  • 3x Аял-Аял Jumper Wires. Fry's компаниясында 4,95 долларга сатылды.
  • Динамикалык DNS 30 $ үчүн жылына 30 (dyn.com)
  • 1-Gang 18 cu. жылы. Эски Иш Heavy Wall которуу жана розетка кутусу, $ 3.12
  • Ultra Pro Single Brush White Wall Plate, $ 7.88
  • SECO-LARM SM 226L, Garage Door Sensor, баасы көп өзгөрөт, бекер жеткирүү менен Amazon боюнча $ 9.99
  • 50ft Катуу термостат зымы, Home Depot же Lowe's, ~ $ 20

Менин жалпы суммам: ~ $ 172.00

Менде төмөнкү бөлүктөр, куралдар жана кызматтар болгон:

  • CAT5 Ethernet кабели
  • Чакан өлчөөчү зым, узундугу 6 фут
  • Филлипс бурагыч
  • Ийнелердин кычкачтары
  • Куту кескичтер
  • Зергерлер реледеги бурамаларды бошотуш үчүн тегиз баштуу бурагыч
  • MacBook (PC колдонсо болот)
  • AT&T GigaPower (каалаган интернет провайдери колдонулушу мүмкүн)

2 -кадам: Монитор же клавиатурасыз Raspberry Pi орнотуу

Монитор же клавиатура жок Raspberry Pi орнотуу
Монитор же клавиатура жок Raspberry Pi орнотуу

Бардык Raspberry Pi долбоорлору кандайдыр бир орнотууну талап кылат. Мен ошол эле көрсөтмөлөр топтомун колдонгонду жакшы көрөм жана керек болгондо ошол көрсөтмөлөрдү жаңыртуу үчүн бир жерим бар.

Raspberry Piди төмөнкү көрсөтмөлөрдү колдонуу менен орнотуңуз:

Монитор же клавиатура жок Raspberry Pi орнотуу

Жогорудагы көрсөтмөлөр тиркемедеги кошумча кадамдарды камтыйт. Кадам жасоо үчүн шектенбесек болот:

Веб серверлерге кардар тарабындагы сертификаттарды кошуңуз

Raspberry Pi өчүрүү

$ sudo өчүрүү -h 0

Өчүргөндөн кийин алып салыңыз

  • ethernet кабели
  • USB сериялык кабели

Буларга мындан ары муктаждык болбойт. Raspberry Piде буйруктарды аткаруу үчүн wifi, ssh жана Mac Bookтагы терминалдык терезени колдонуңуз.

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

3 -кадам: Wiring Pi, Apache жана PHP орнотуу

Wiring Pi орнотуу

Mac Bookтан терминал терезесин ачыңыз. Raspberry Pi'ге кириңиз, андан кийин Wiring Pi'ди жүктөп алып, түзүп жана орнотуңуз. Бул программа GPIO казыктарын башкарууга мүмкүндүк берет. Бул жерде этап-этабы менен көрсөтмө:

wiringpi.com/download-and-install/

Бул жерде инструкциянын кыскартылган версиясы:

$ ssh pi@♣ малина-pi-ip ♣

сырсөз: ♣ сырсөз ♣ $ sudo apt-get install git-core $ git clone git: //git.drogon.net/wiringPi $ cd wiringPi $ git pull $./build

Орнотууну текшерүү үчүн gpio буйругун аткарыңыз:

$ gpio -v

gpio версиясы: 2.29 Copyright (c) 2012-2015 Гордон Хендерсон Бул эч кандай кепилдик жок бекер программа. Чоо -жайын билүү үчүн: gpio -кепилдик Raspberry Pi Чоо -жайы: Түрү: Модели 2, Версиясы: 1.1, Эстутуму: 1024MB, Жаратуучусу: Sony [OV] Аспап дарагы иштетилген. Бул Raspberry Pi колдонуучу деңгээлиндеги GPIO мүмкүнчүлүгүн колдойт. -> Көбүрөөк маалымат алуу үчүн адам баракчасын караңыз $ gpio readall+-----+-----+---------+------+---+--- Pi 2 ---+---+------+---------+-----+-----+| BCM | wPi | Аты | Mode | V | Физикалык | V | Mode | Аты | wPi | BCM | +-----+-----+---------+------+---+---- ++ ----+---+- -----+---------+-----+-----+| | | 3.3v | | | 1 || 2 | | | 5v | | | | 2 | 8 | SDA.1 | IN | 1 | 3 || 4 | | | 5V | | | | 3 | 9 | SCL.1 | IN | 1 | 5 || 6 | | | 0v | | | | 4 | 7 | GPIO. 7 | OUT | 1 | 7 || 8 | 1 | ALT0 | TxD | 15 | 14 | | | | 0v | | | 9 || 10 | 1 | ALT0 | RxD | 16 | 15 | | 17 | 0 | GPIO. 0 | IN | 0 | 11 || 12 | 0 | IN | GPIO. 1 | 1 | 18 | | 27 | 2 | GPIO. 2 | IN | 0 | 13 || 14 | | | 0v | | | | 22 | 3 | GPIO. 3 | IN | 0 | 15 || 16 | 1 | IN | GPIO. 4 | 4 | 23 | | | | 3.3v | | | 17 || 18 | 0 | IN | GPIO. 5 | 5 | 24 | | 10 | 12 | MOSI | IN | 0 | 19 || 20 | | | 0v | | | | 9 | 13 | MISO | IN | 0 | 21 || 22 | 0 | IN | GPIO. 6 | 6 | 25 | | 11 | 14 | SCLK | IN | 0 | 23 || 24 | 1 | IN | CE0 | 10 | 8 | | | | 0v | | | 25 || 26 | 1 | IN | CE1 | 11 | 7 | | 0 | 30 | SDA.0 | IN | 1 | 27 || 28 | 1 | IN | SCL.0 | 31 | 1 | | 5 | 21 | GPIO.21 | IN | 1 | 29 || 30 | | | 0v | | | | 6 | 22 | GPIO.22 | IN | 1 | 31 || 32 | 0 | IN | GPIO.26 | 26 | 12 | | 13 | 23 | GPIO.23 | IN | 0 | 33 || 34 | | | 0v | | | | 19 | 24 | GPIO.24 | IN | 0 | 35 || 36 | 0 | IN | GPIO.27 | 27 | 16 | | 26 | 25 | GPIO.25 | IN | 0 | 37 || 38 | 0 | IN | GPIO.28 | 28 | 20 | | | | 0v | | | 39 || 40 | 0 | IN | GPIO.29 | 29 | 21 | +-----+-----+---------+------+---+---- ++ ----+---+- -----+---------+-----+-----+| BCM | wPi | Аты | Mode | V | Физикалык | V | Mode | Аты | wPi | BCM | +-----+-----+---------+------+---+--- Pi 2 ---+---+--- ---+---------+-----+-----+

Жогорудагы буйруктар wiringPi жакшы иштеп жатканына бир аз ишеним бериши керек.

Apache жана PHP орнотуу

Төмөнкү буйруктарды аткарыңыз:

$ cd..

$ sudo apt-get update $ sudo apt-get apache2 php5 libapache2-mod-php5 орнотуу

Веб -сервердин иштешин текшерүү үчүн, браузерди ачыңыз жана URL кутусуна киргизиңиз:

♣ малина-pi-ip ♣

Apacheдин демейки веб -сайты "Бул иштейт!"

4 -кадам: Вебсайт

Mac Bookтан терминал терезесин ачыңыз. Raspberry Pi'ге кириңиз, андан кийин index.html демейки файлын алып салыңыз, веб -каталогдогу уруксаттарды өзгөртүңүз жана index.php деп аталган файлды түзөтүңүз.

$ ssh pi@♣ малина-pi-ip ♣

сырсөз: ♣ сырсөз ♣ $ sudo rm /var/www/index.html $ sudo chown pi: root/var/www $ sudo nano /var/www/index.php

Жана төмөнкү кодду киргизиңиз:

Гараж ачкыч

Үй автоматизациясы

<? php if ($ switch == 1) {echo"

";} башка {echo"

"; } ?>

Гараждын эшиги Гараждын эшигин ачуу боюнча колдонмо жабык 1 ачык 0
<? php if ($ trigger == 0) {echo "<td colspan = \" 4 / "} башка {echo"

var13 ->

Файлды жазуу үчүн CTRL-o жана ENTER, редактордон чыгуу үчүн CTRL-x.

Файлдагы уруксаттарды өзгөртүү

$ sudo chmod 664 /var/www/index.php

5 -кадам: Вебсайттын сүрөтү

Вебсайттын сүрөтү
Вебсайттын сүрөтү
Вебсайттын сүрөтү
Вебсайттын сүрөтү

Интернеттен жогорку ажыратымдылыктагы гараждын эшигин ачыңыз. Сүрөттү Mac боёк щеткасын колдонууну каалагандай өзгөртүңүз. Жогорудагы сүрөттө, жогорку ажыратымдылыктагы Genie Garage Opener колдонулган, малина пи логотиби кошулган жана алып салынган.

Бир сүрөт-фон (remote-background.jpg), экинчиси-активдүү сүрөт (remote-press.jpg).

План кнопканы басканда, светодиоддун көзүн ирмебестен, малина көзүн ирмеп турган. Мен веб -сайтты жөнөкөйлөштүрдүм.

Сүрөттөрдү малина пи -ге көчүрүү:

$ scp *-j.webp

пароль: ♣ сырсөз ♣

Веб -сайтта бир эле баскыч бар. Ырастоо үчүн, браузерди ачып, asp raspberry-pi-ip enter киргизиңиз. "Бул иштейт!" Деп жазылган Apacheтин демейки веб -сайтынын ордуна, баскыч пайда болушу керек. Аны басыңыз.

6 -кадам: Алыстан башкаруу Webserver

Гараж эшик ачкычына алыскы жерден кирүүнү оңой кылуу үчүн, мен динамикалык DNS атын колдоном. Анткени мен IP даректерди эстегенди жактырбайм.

Бул өзгөчөлүк менен, мен браузердин URL талаасына ♣ dynamic-hostname ♣.getmyip.com киргизем. Эскертүү: Үй роутерлериндеги IP эскертүүсүз өзгөрүшү мүмкүн, бирок бул сейрек кездешет. Мен DynDNSти колдонууну чечтим. Сиз роутериңиздин ачык IP дарегин билишиңиз керек.

U-Verse Router IP: ♣ uverse-public-ip ♣

Сиз хост аттарыңызды жана DynDNS Pro каттоо эсебинин чоо -жайын көрө аласыз. Бул жерде баштоо үчүн бир нече кеңештер:

  • Динамикалык DNS хост атыңызды түзүңүз (1дин 30у):

    • (Динамикалык хосттун аты)
    • Жаңырткыч ачкычы: динамикалык-ip-жаңыртуучу ачкыч
  • Сиздин хост атыңыз дайыма туура IP дарегин көрсөтүп турушу үчүн жаңыртуу кардарын орнотуңуз.

    • MacBookко жүктөп алып, орнотуңуз
    • AT&T U-аятындагы IP даректери сейрек өзгөрөт, андыктан жогоруда көрсөтүлгөн жаңыртуучу өзгөргөн сайын аны иштетсе болот
    • Көрсөтмөлөрдү аткарыңыз:

      • Аккаунт кошуу
      • Колдонуучунун атын жана сырсөздү киргизиңиз: ♣ динамикалык-ip-колдонуучу аты ♣ ♣ динамикалык-ip-сырсөзү ♣
      • Хосттун атын тандаңыз
      • Тандалган хостторду конфигурациялоо чыкылдатыңыз
      • Үй ээси активдүү болушу керек
    • Тармагыңызды түзмөгүңүзгө Интернеттен кирүүгө уруксат берүү үчүн конфигурациялаңыз. Сиз муну кантип жасоо боюнча жалпы көрсөтмөлөрдү алуу үчүн Dyn Wizard колдоно аласыз, PortForward.com сыяктуу ресурстарды колдоно аласыз же жардам үчүн түзмөктүн өндүрүүчүсүнө кайрылсаңыз болот.

      • AT&T U-аяты
      • 2-Wire 3801HGV үчүн порт жөнөтүү-бул менде бар AT&T U-Verse роутери. AT&T U-аят 5268ac роутеринде кантип алдыга жылдыруу керектиги үчүн тиркемедеги Жаңыртууларды караңыз.
      • Браузерди ачыңыз жана asp raspberry-pi-ip to өтүңүз
      • Сырсөз: ♣ сырсөз ♣
      • Орнотуулар
      • Firewall

        • ♣ raspberry-pi-hostname Choose тандаңыз
        • Серверлер

          • Веб -сервер порту 80
          • HTTPS Server - порт 443
        • Кошуу
      • Сактоо

Бул бүткөндөн кийин, веб -сервер интернеттен иштейт. Текшерүү үчүн ♣ dynamic-hostname enter киргизиңиз жана сиз гараждын эшигин ачуу баскычын көрүшүңүз керек.

7 -кадам: Raspberry Pi үчүн Circuit зым

Raspberry Pi үчүн Circuit зым
Raspberry Pi үчүн Circuit зым

Берилген код үчүн (4 жана 6 -кадам) мен GPIO пин 7 колдондум. Бул GPIO 7 wiringPi pin 7 менен бирдей экени кокустук. PHP кодунда зым Pi пин сандары колдонулат жана GPIO пин сандары ЭМЕС. Сиз каалаганын колдонсоңуз болот, бирок кодду өзгөртүүнү унутпаңыз.

Мен буралган зымды колдонууга аракет кылдым, бирок реле ийилген зымга жакшы кармабайт. Катуу зым жакшы.

Биринчи аракетимде мен үч туташтыруучу кабелди (аялдан эркекке) түздүм.

  • Үч аялдан аялга секирүүчү кабелдерди колдонуңуз
  • Катуу зымдын үч бөлүгүн болжол менен 1ин.

    Катуу зымдын эки учунда 1/4ин тилкеси

  • Бир катуу зымды бир аял секирүүчү кабелине салыңыз.

Бул жерде туташтыруучу кабелдерди түзүүнүн жакшы жолу (аялдан эркекке):

  • Бир гана катуу зымды колдонуңуз
  • Катуу зымдын 4 4ин кесиниз
  • Катуу зымдын эки учунда 1/4ин тилкеси
  • Аялдардын туташтыргычтарын колдонуңуз

    • Катуу зымдын бир четине бир ургаачы туташтыргычты жылдырыңыз

      Ургаачы пин бошоп кетпеши керек, эгер керек болсо

    • Электр лентасы менен ургаачы туташтыргычтын же капкактын пининин үстүнөн түшүрүү

Реледи диаграммада көрсөтүлгөндөй пи менен өткөрүңүз:

  • Кабелдин аялдык учун Raspberry Pi пинине туташтырыңыз.
  • Релейге катуу зым салыңыз.

8 -кадам: Баштоо кызматын түзүңүз

Көпчүлүк реле, анын ичинде сатып алынган, мындай иштейт:

  • Сигнал КҮЙГҮН болгондо, схема өчүп калат.
  • Сигнал ӨЧҮК болгондо, чынжыр күйгүзүлөт.

Эгерде Raspberry Pi күчүн жоготсо, реле коопсуздукту коргоочу механизмге ээ, ал схеманы ӨЧҮРҮП коет.

Рапберри Пи жана реле кубаттуулукту калыбына келтиргенде көйгөй жаралышы мүмкүн, бирок Raspberry Pi жүктөлүп бүтө электе, сигналды күйгүзүү үчүн, схеманы өчүрүү керек. Сиз эртең менен гаражыңыз ачык жана бир нече жаңы досторуңуз менен ойгоно аласыз!

Бирок, реле GPIO пин режими бул буйрук аркылуу коюлганга чейин иш жүзүндө башталбайт: gpio mode 7 out. Андан тышкары, эгер GPIO режимин коюудан мурун GPIO PIN'и ON (gpio 7 1) деп коюлса, реле инициализацияланганда өчүп калат.

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

$ ssh pi@♣ малина-pi-ip ♣

$ sudo nano /etc/init.d/garagerelay

Андан кийин бул скриптти чаптаңыз:

#! /bin/bash

# /etc/init.d/garagerelay # "$ 1" тутуму тарабынан башталганда белгилүү функцияларды аткарыңыз) echo "Starting Relay" # 7 Turn on offlay off/usr/local/bin/gpio write 7 1 #Start Gpio/usr/local/bin/gpio mode 7 out;; токтотуу) echo "Stoping gpio";; *) echo "Useage: /etc/init.d/garagerelay {start | stop}" чыгуу 1;; esac чыгуу 0

Сактоо үчүн: CTRL-o, ENTER

Нанодон чыгуу үчүн CTRL-x

Файлды аткарылуучу кылыңыз:

$ sudo chmod +x /etc/init.d/garagerelay

Эми бул скриптти жүктөөдө иштетүү үчүн пиңизге айтыңыз:

$ sudo update -rc.d -f garagerelay баштоо 4

(Эскертүү: "LSB тегдери жок" деген эскертүүнү этибарга албай койсоңуз болот.)

Баштоо скриптинин иштеп жаткандыгын текшериңиз

$ sudo кайра жүктөө

Браузерди ачыңыз жана ачкычты чыкылдатыңыз. Реле басуу керек.

9 -кадам: Гаражга Raspberry Pi тиркеңиз

Гаражга Raspberry Pi тиркеңиз
Гаражга Raspberry Pi тиркеңиз

Raspberry Pi жылдырылганда, чуркаганыңызды унутпаңыз:

$ shutdown -h 0

Сиз гараждын кубатын өчүргүңүз келиши мүмкүн. Демек, эшиктин коңгуроосу сизди электрошок кылбайт:). Чыныгы себеп - зымдарды кыскарткан сайын, эшик өйдө -ылдый түшөт.

Эшиктин коңгуроосун дубалга бекитүүчү эшиктин коңгуроосунан дубалдын бурамаларын чечиңиз.

Эшиктин коңгуроосунун артындагы гараждан үйдүн ичине тешик жасаңыз. Техаста Raspberry Pi гаражда болбошу керек, гараждагы температуранын өзгөрүшү Raspberry Piнин иштөө шарттарына карама -каршы келет.

Реле зымдарын тешиктен өткөрүңүз (пальто илгичти колдонуңуз).

Эшик коңгуроосунун арт жагындагы эки бураманы бошотуңуз.

Релелик зымдардын эки учун сыйрып алыңыз: 1) реле тараптын болжол менен 1/8 дюйму, жана коңгуроо тарабында ½ дюймдай. Зымдын эшигинин коңгуроосун арткы бураманын тегерегине туура келгидей чоң кылып жарым укурукка бүгүңүз.

Эшиктин арт жагындагы ар бир бурамага бир релелик зымды туташтырып, бураманы бекемдеңиз. Байланыштар сүрөттө көрсөтүлгөндөй. Реле чынжырды изоляциялагандыктан, кайсы реле кайсы бурамага бекитилгени маанилүү эмес.

10-кадам: SECO-LARMге Raspberry Pi тиркеңиз

Raspberry Pi'ди SECO-LARMге тиркеңиз
Raspberry Pi'ди SECO-LARMге тиркеңиз
Raspberry Pi'ди SECO-LARMге тиркеңиз
Raspberry Pi'ди SECO-LARMге тиркеңиз

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

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

Бул сенсорду кошуу үчүн нускоочу баштапкы шилтеме. Бирок, бүткөн нерселердин бардыгын эске алганда, сенсорду орнотуу абдан жөнөкөйлөштүрүлүшү мүмкүн жана python колдонуунун ордуна index.phpге коддун бир нече саптарын кошуңуз.


Fatal error: Uncaught Error: Call to undefined function exec() in W:\www\langs\.php-gen-lang\v3-core\macros.php(127) : eval()'d code:513 Stack trace: #0 W:\www\langs\.php-gen-lang\v3-core\macros.php(127): eval() #1 W:\www\langs\.php-gen-lang\v3-core\index-global.php(231): Macros->macros_parse('<!DOCTYPE html>...') #2 W:\www\langs\howwhatproduce.com\ky.howwhatproduce.com\index.php(9): require_once('W:\\www\\langs\\.p...') #3 {main} thrown in W:\www\langs\.php-gen-lang\v3-core\macros.php(127) : eval()'d code on line 513