Raspberry Pi 3 garaj eshiklarini ochuvchi: 15 qadam (rasmlar bilan)
Raspberry Pi 3 garaj eshiklarini ochuvchi: 15 qadam (rasmlar bilan)
Anonim
Raspberry Pi 3 garaj eshiklarini ochuvchi
Raspberry Pi 3 garaj eshiklarini ochuvchi

Men buni 2014 yilda yaratdim. O'shandan beri ko'p narsa o'zgardi. 2021 yilda men bu erda Smart Garage Door Opener -ni yangiladim.

Garaj eshigini ochish, yopish va kuzatish uchun Raspberry Pi va smartfondan foydalaning. Eshikning ochilishi va yopilishi oilaning mobil telefonlariga o'rnatilgan o'z-o'zidan imzolangan sertifikatlar yordamida ta'minlanadi. Agar garaj eshigi ochilmasa ochiq bo'lsa, uyali telefonga SMS yuboring.

Garaj eshigi 2014 yil oxiridan beri uzluksiz ishlatilmoqda. Yillar davomida men o'zgarishlarni yangilab turishga harakat qildim. Ko'rsatmalarga kiritilgan o'zgarishlarni tavsiflovchi ilova mavjud.

Ushbu loyihaning maqsadlari:

  • Menga birinchi ko'rsatma bering - men buni joylashtirishni rejalashtirmagan edim, lekin menga ko'plab so'rovlar keldi
  • Standart masofadan boshqarish pulti bilan garaj eshigini oching
  • Garaj eshigini devorga o'rnatilgan eshik qo'ng'irog'i bilan oching
  • Smartfon yordamida garaj eshigini oching
  • Garaj eshigining holatini mobil telefon yoki noutbuk orqali masofadan turib kuzatib boring (u ochiqmi yoki yopiqmi?)
  • Agar eshik yopiq bo'lishi kerak bo'lsa, telefonimga SMS yuboring
  • Garaj eshigini xavfsiz saqlang (masalan, elektr quvvati yo'qolganda, eshik ochilmasligi kerak)
  • Boshqa hech kimga eshikni ochishiga yo'l qo'ymang (ikki tomonlama SSL sertifikati)
  • Simli ulanish o'rniga WiFi -dan foydalaning
  • Raspberry Pi 3 dan foydalaning

Bu Garage Door Opener dasturining asosi kvartarian tomonidan Instructable: Raspberry Pi Garage Door Opener -dan olingan. Dastlab men B+ Raspberry Pi modelini ishlatardim, keyin Raspberry Pi 2 model B ga o'tdim va endi u Raspberry Pi 3 dan foydalanadi.

Men Raspberry Pi bilan muloqot qilish uchun MacBook -dan foydalanardim, lekin har qanday kompyuterdan foydalanish mumkin.

Ushbu qurilmani yaratish uchun hech qanday jiddiy sabab yo'q, lekin bu qiziqarli edi. Birini sotib olish iqtisodiy jihatdan samaraliroq. Shunga o'xshash qurilmani taxminan 130 dollarga sotib olish mumkin.

  • Yuk ko'tarish ustasi 828LM
  • Chemberlen MyQ - 129 dollar
  • GoGo Gate 179 dollar
  • Hunarmand 100 dollar

Eslatmalar:

  • Belgilar bilan o'ralgan matn, masalan, almashtirish-bu, haqiqiy qiymat bilan almashtirilishi kerak
  • Arduino tagiga chizilgan ko'k matn - havola. Bunday holda, bu garaj eshigi ochgichining arduino versiyasiga havola.
  • Men ishlatilgan har bir manbaga kredit berishga harakat qildim. Har qanday kamchiliklar uchun uzr so'rayman. Ushbu hujjatning aksariyati boshqalarning ishiga asoslangan.
  • $ MacBook -dagi terminal oynasida bajarilgan va odatda Raspberry Pi -da bajariladigan buyruqni bildiradi

1 -qadam: qismlarni yig'ish

Ehtiyot qismlar va asboblarni sotib oling yoki yig'ing (narxlar AQSh dollarida).

  • Raspberry Pi 3 Model B Newark Element14 $ 35
  • Amazondan 5.2V 2.5A USB quvvat adapteri $ 9.99
  • Micro USB -dan USB -kabelga 6 fut Amazondan $ 7.99
  • Amazon -dan ish $ 6.99
  • SanDisk Ultra 16 GB microSDHC Class 10 adapterli (SDSQUAN-016G-G4A) Amazondan $ 8.99
  • SunFounder 2 kanalli 5V Arduino UNO 2560 1280 ARM PIC AVR STM32 Raspberry Pi uchun 5V o'rni qalqoni moduli - $ 6.79
  • 3x Ayol-Ayol jumper simlari. Fry's -da 4,95 dollarga sotib olindi.
  • Dinamik DNS 30 $ uchun yiliga $ 40 (dyn.com)
  • 1-guruh 18 kub. in. Old Work Heavy Wall Switch va Outlet Box, $ 3.12
  • Ultra Pro bitta cho'tka oq devor plitasi, $ 7.88
  • SECO-LARM SM 226L, Garaj eshiklari sensori, narxi juda farq qiladi, Amazonda $ 9.99, bepul etkazib berish.
  • 50 fut qattiq termostat simlari, Home Depot yoki Lowe's, ~ 20 dollar

Mening jami: ~ $ 172.00

Menda quyidagi qismlar, asboblar va xizmatlar bor edi:

  • CAT5 chekilgan kabeli
  • Kichik o'lchagichli sim, uzunligi 6 fut
  • Filipp boshli tornavida
  • Igna pense
  • Quti kesgichlar
  • Zargarlar o'z vintlarini bo'shatish uchun tekis tornavida
  • MacBook (kompyuterdan foydalanish mumkin)
  • AT&T GigaPower (har qanday Internet -provayderdan foydalanish mumkin)

2 -qadam: Raspberry Pi -ni monitor yoki klaviaturasiz o'rnating

Raspberry Pi -ni monitor yoki klaviaturasiz sozlash
Raspberry Pi -ni monitor yoki klaviaturasiz sozlash

Barcha Raspberry Pi loyihalari qandaydir sozlashni talab qiladi. Men bir xil ko'rsatmalar to'plamidan foydalanishni yaxshi ko'raman va kerak bo'lganda bu ko'rsatmalarni yangilash uchun bitta joyim bor.

Raspberry Pi -ni quyidagi ko'rsatmalar yordamida o'rnating:

Raspberry Pi -ni monitor yoki klaviaturasiz sozlash

Yuqorida aytib o'tilganlar ilovadagi ixtiyoriy qadamlarni o'z ichiga oladi. Bosqichni bajarganingizga ishonch hosil qiling:

Veb-serverlarga mijozlar sertifikatlarini qo'shing

Raspberry Pi -ni o'chiring

$ sudo o'chirish -h 0

O'chirish tugagach, olib tashlang

  • chekilgan kabel
  • USB ketma -ket kabel

Bularga endi kerak bo'lmaydi. Raspberry Pi -da buyruqlarni bajarish uchun Wi -Fi, ssh va Mac Book -dagi terminal oynasidan foydalaning.

Quvvatni o'chiring va quvvatni qayta ulang va malina pi qayta yoqilishi kerak.

3 -qadam: Wiring Pi, Apache va PHP -ni o'rnating

Wiring Pi -ni o'rnating

Mac Book -da terminal oynasini oching. Raspberry Pi -ga kiring, keyin Wiring Pi -ni yuklab oling, kompilyatsiya qiling va o'rnating. Ushbu dastur GPIO pinlarini boshqarishga imkon beradi. Bu erda asta-sekin ko'rsatma:

wiringpi.com/download-and-install/

Bu erda ko'rsatmalarning qisqartirilgan versiyasi:

$ ssh pi@♣ malina-pi-ip ♣

parol: ♣ parol ♣ $ sudo apt-get install git-core $ git clone git: //git.drogon.net/wiringPi $ cd wiringPi $ git pull $./build

O'rnatishni tekshirish uchun gpio buyrug'ini bajaring:

$ gpio -v

gpio versiyasi: 2.29 Mualliflik huquqi (c) 2012-2015 Gordon Xenderson Bu mutlaqo KAFOLATSIZ bepul dasturiy ta'minot. Tafsilotlar uchun: gpio kafolati Raspberry Pi tafsilotlari: Turi: Model 2, Tuzatish: 1.1, Xotira: 1024MB, Ishlab chiqaruvchi: Sony [OV] Qurilma daraxti yoqilgan. Bu Raspberry Pi foydalanuvchi darajasidagi GPIO-ga kirishni qo'llab-quvvatlaydi. -> Qo'shimcha ma'lumot uchun man-sahifaga qarang $ gpio readall+-----+-----+---------+------+---+--- Pi 2 ---+---+------+---------+-----+-----+| BCM | wPi | Ism | Rejim | V | Jismoniy | V | Rejim | Ism | 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 | Chiqish | 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 | Ism | Rejim | V | Jismoniy | V | Rejim | Ism | wPi | BCM | +-----+-----+---------+------+---+--- Pi 2 ---+---+--- ---+---------+-----+-----+

Yuqoridagi buyruqlar sizga wiringPi yaxshi ishlayotganiga ishonch hosil qilishi kerak.

Apache va PHP -ni o'rnating

Quyidagi buyruqlarni bajaring:

$ CD..

$ sudo apt-get update $ sudo apt-get install apache2 php5 libapache2-mod-php5

Veb -server ishlayotganini tekshirish uchun brauzerni oching va URL maydoniga kiriting:

(Malina-pi-ip)

Apache -ning standart veb -sayti "Bu ishlaydi!" Deb javob beradi.

4 -qadam: veb -sayt

Mac Book -da terminal oynasini oching. Raspberry Pi -ga kiring, keyin default.html faylini olib tashlang, veb -sayt katalogidagi ruxsatlarni o'zgartiring va index.php deb nomlangan faylni tahrirlang.

$ ssh pi@♣ malina-pi-ip ♣

parol: ♣ parol ♣ $ sudo rm /var/www/index.html $ sudo chown pi: root/var/www $ sudo nano /var/www/index.php

Va quyidagi kodni kiriting:

Garaj ochuvchi

Uy avtomatizatsiyasi

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

";} boshqa {echo"

"; } ?>

Garaj eshiklarini ochuvchi Garaj eshiklarini ochish bo'yicha qo'llanma yopiq 1 ochiq 0
<? php if ($ trigger == 0) {echo "<td colspan = \" 4 / "} boshqa {echo"

var13 ->

Faylni yozish uchun CTRL-o va ENTER, muharrirdan chiqish uchun esa CTRL-x.

Fayl uchun ruxsatnomalarni o'zgartiring

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

5 -qadam: veb -sayt tasviri

Veb -sayt tasviri
Veb -sayt tasviri
Veb -sayt tasviri
Veb -sayt tasviri

Internetdan yuqori aniqlikdagi masofaviy garaj eshigini oching. Mac bo'yoq cho'tkasi yordamida rasmni xohlaganingizcha o'zgartiring. Yuqoridagi rasmda yuqori aniqlikdagi Genie Garage Opener ishlatilgan, malina pi logotipi qo'shilgan va svetodiod olib tashlangan.

Bir rasm-fon (remote-background.jpg), ikkinchisi-faol tasvir (remote-press.jpg).

Reja shundan iboratki, tugmachani bosganingizda, chiroqni miltillatish o'rniga, malina miltillaydi. Men saytni soddalashtirdim.

Rasmlarni malina pi ga nusxalash:

$ scp *-j.webp

parol: ♣ parol ♣

Veb -saytda bitta tugma mavjud. Tasdiqlash uchun brauzerni oching va "raspberry-pi-ip" kiriting. Apache -ning standart veb -sayti o'rniga "Bu ishlaydi!" Yozuvi o'rniga tugma paydo bo'lishi kerak. Uni bosing.

6 -qadam: Veb -serverni masofadan boshqarish

Garaj eshiklari ochilishiga uzoqdan kirishni osonlashtirish uchun men dinamik DNS nomidan foydalanaman. Chunki men IP -manzillarni eslashni yoqtirmayman.

Bu xususiyat yordamida men brauzerning URL maydoniga "host-hostname", "getmyip.com "ni kiritaman. E'tibor bering: uy yo'riqnomaidagi IP ogohlantirmasdan o'zgarishi mumkin, lekin bu kamdan -kam hollarda bo'ladi. Men DynDNS -dan foydalanishni tanladim. Siz yo'riqchining umumiy IP -manzilini bilishingiz kerak.

U-oyna yo'riqnoma IP-manzili: uverse-public-ip

Xost nomlari va DynDNS Pro hisob ma'lumotlarini ko'rishingiz mumkin. Ishni boshlash uchun bir nechta maslahatlar:

  • Dinamik DNS xost nomini yarating (30dan 1):

    • (Dinamik-xost nomi)
    • Yangilash kaliti: dinamik-ip-yangilovchi-kalit
  • Xost nomi har doim to'g'ri IP -manzil ko'rsatilishini ta'minlash uchun yangilanish mijozini o'rnating.

    • MacBook -ga yuklab oling va o'rnating
    • AT&T U-oyat IP-lari kamdan-kam hollarda o'zgaradi, shuning uchun yuqoridagi yangilanuvchi har doim o'zgarishi mumkin
    • Ko'rsatmalarga amal qiling:

      • Hisob qo'shish
      • Foydalanuvchi nomi va parolni kiriting: ♣ dinamik-ip-foydalanuvchi nomi ♣ ♣ dinamik-ip-parol ♣
      • Xost nomini tanlang
      • Tanlangan xostlarni sozlash -ni bosing
      • Uy egasi faol bo'lishi kerak
    • Qurilmangizga Internetdan kirishga ruxsat berish uchun tarmoqni sozlang. Siz buni qanday qilish haqida umumiy ko'rsatmalar uchun Dyn Wizard -dan foydalanishingiz, PortForward.com kabi manbalardan foydalanishingiz yoki yordam uchun qurilma ishlab chiqaruvchisiga murojaat qilishingiz mumkin.

      • AT&T U-oyati
      • 2-Wire 3801HGV uchun portni yo'naltirish-bu menda mavjud bo'lgan AT&T U-Verse yo'riqnoma. AT&T U-oyat 5268ac yo'riqnoma orqali qanday qilib oldinga yo'naltirishni Qo'shimchadagi Yangilanishlarga qarang.
      • Brauzerni oching va malina-pi-ip-ga o'ting
      • Parol: parol ♣
      • Sozlamalar
      • Xavfsizlik devori

        • Raspberry-pi-hostname-ni tanlang
        • Serverlar

          • Veb -server port 80
          • HTTPS server - 443 port
        • Qo'shish
      • Saqlash

Bu bajarilgandan so'ng, veb -server Internetdan ishlaydi. Tasdiqlash uchun "dinamik-xost nomi" ni kiriting va siz garaj eshigini ochish tugmachasini ko'rasiz.

7 -qadam: Raspberry Pi -ga simni ulang

Raspberry Pi uchun simni ulang
Raspberry Pi uchun simni ulang

Taqdim etilgan kod uchun (4 va 6 -qadam), men GPIO pin 7 dan foydalandim. Tasodifan, GPIO 7 simli pin 7 bilan bir xil bo'ladi. PHP kodida Pi pin raqamlari ishlatiladi va GPIO pin raqamlari emas. Siz xohlaganingizdan foydalanishingiz mumkin, lekin kodni o'zgartirganingizga ishonch hosil qiling.

Men o'ralgan simni ishlatishga harakat qildim, lekin o'rni simni yaxshi ushlab turmaydi. Qattiq sim yaxshiroq.

Birinchi urinishimda men uchta ulash kabelini (ayoldan erkakgacha) yaratdim.

  • Uchta ayol va ayol o'tish kabelidan foydalaning
  • Taxminan 1 dyuymgacha uchta qattiq simni kesib oling.

    Qattiq simning har ikki uchida 1/4 dyuymli chiziq

  • Bir qattiq simni bitta ayol o'tish kabeliga joylashtiring.

Bog'lanish kabellarini yaratishning eng yaxshi usuli (ayol-erkak):

  • Faqat qattiq simdan foydalaning
  • Uchta 4 dyuymli qattiq simni kesib oling
  • Qattiq simning har ikki uchida 1/4 dyuymli chiziq
  • Ayol ulanish pimlarini ishlating

    • Qattiq simning bir chetiga bitta urg'ochi pinni suring va burang

      Ayol pinasi bo'shashmasligi kerak, agar kerak bo'lsa lehim

    • Ayol ulanish pimi yoki elektr plyonkasi bilan qopqoq pinining ustidan siljishni kamaytiring

Diagrammada ko'rsatilgandek, o'rni pi ga ulang:

  • Kabelning ayol uchini Raspberry Pi piniga ulang.
  • O'rnimizni qattiq simini joylashtiring.

8 -qadam: Ishga tushirish xizmatini yarating

Ko'pgina o'rni, shu jumladan sotib olingan, quyidagicha ishlaydi:

  • Signal yoqilganda, elektron o'chadi.
  • Signal o'chirilgan bo'lsa, kontaktlarning zanglashiga olib keladi.

Agar Raspberry Pi kuchini yo'qotsa, o'rni o'chirishni saqlaydigan xavfsizlik mexanizmiga ega.

Muammo Rapberry Pi va o'rni quvvatni qayta tiklaganida paydo bo'lishi mumkin, lekin Raspberry Pi yuklanishni tugatmasdan oldin signalni yoqish uchun o'chirib qo'yish kerak. Siz ertalab garajingiz ochiq va bir nechta yangi do'stlaringiz bilan uyg'onishingiz mumkin!

Shu bilan birga, GPIO pin rejimi ushbu buyruq orqali o'rnatilmaguncha, o'rni ishga tushmaydi: gpio 7 rejimi o'chiriladi. Bundan tashqari, agar GPIO rejimini o'rnatishdan oldin GPIO PIN -kodi ON (gpio yozish 7 1) bo'lsa, o'rni ishga tushirilgandan so'ng o'chadi.

Bu ishga tushirish paytida ishga tushirish va yangi do'stlarni uyg'otmaslik uchun quyidagi ishga tushirish skriptidan foydalaning.

$ ssh pi@♣ malina-pi-ip ♣

$ sudo nano /etc/init.d/garagerelay

Keyin ushbu skriptni joylashtiring:

#! /bin/bash

# /etc/init.d/garagerelay # Boshlang'ichda "$ 1" tizim qutisi so'rasa, ma'lum funktsiyalarni bajaring) echo "Start Relay" # 7 -ni yoqing, bu esa/usr/local/bin/gpio yozishni o'chiradi 7 1 #Start Gpio/usr/local/bin/gpio mode 7 out;; to'xtatish) echo "To'xtatish gpio";; *) echo "Foydalanish: /etc/init.d/garagerelay {boshlash | to'xtatish}" chiqish 1;; esac chiqish 0

Saqlash uchun: CTRL-o, ENTER

Nanodan chiqish uchun CTRL-x

Faylni bajariladigan qilib yarating:

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

Endi pi -ga bu skriptni yuklashda ishga tushirishni ayting:

$ sudo update -rc.d -f garagerelay boshlang 4

(Eslatma: "yo'qolgan LSB teglari" ogohlantirishini e'tiborsiz qoldirishingiz mumkin.)

Ishga tushirish skriptining ishlayotganligiga ishonch hosil qiling

$ sudo qayta ishga tushirish

Brauzerni oching va ochgichni bosing. O'rnimizni bosish kerak.

9 -qadam: Raspberry Pi -ni garajga ulang

Raspberry Pi -ni garajga ulang
Raspberry Pi -ni garajga ulang

Raspberry Pi -ni ko'chirishda ishonch hosil qiling:

$ o'chirish -h 0

Siz garajda quvvatni o'chirishni xohlashingiz mumkin. Shunday qilib, eshik qo'ng'irog'i ochgichi sizni elektr toki bilan urmaydi:). Haqiqiy sabab - har safar simlarni qisqartirganda, eshik yuqoriga va pastga tushadi.

Qo'ng'iroqni devorga mahkamlaydigan eshik qo'ng'irog'i turidagi ochgichdan devor vintlarini echib oling.

Eshik jiringlagichi orqasidagi garajdan uyning ichki qismiga teshik oching. Texasda, Raspberry Pi garajda bo'lmasligi kerak, garajdagi harorat o'zgarishi Raspberry Pi -ning ishlash ko'rsatkichlaridan farq qiladi.

O'rnimizni simlarini teshikdan o'tkazing (palto ilgichidan foydalaning).

Eshik jiringlagichining orqa tomonidagi ikkala vintni bo'shating.

O'rnimizni simlarining ikkala uchini ajratib oling: 1) o'rni tomonining 1/8 dyuymli va eshik qo'ng'irog'ining taxminan ½ dyuymli. Telning eshik qo'ng'irog'ini orqa vintni o'rab oladigan darajada katta halqa qilib eging.

Eshik qo'ng'irog'ining orqa tarafidagi har bir vintga bitta o'rni simini ulang va vintni mahkamlang. Ulanishlar rasmda ko'rsatilgandek. O'rnimizni kontaktni izolyatsiya qilgani uchun, yo'nalish qaysi o'rni qaysi vintga ulanganligi muhim emas.

10-qadam: Raspberry Pi-ni SECO-LARM-ga ulang

Raspberry Pi-ni SECO-LARM-ga ulang
Raspberry Pi-ni SECO-LARM-ga ulang
Raspberry Pi-ni SECO-LARM-ga ulang
Raspberry Pi-ni SECO-LARM-ga ulang

Kodni tugatishimdan oldin, men va oilam ta'tilda edilar va men brauzerimni ochdim. Mening brauzerimning oxirgi ko'rinishi garaj eshigining ochilishi edi - sahifa yangilandi va garaj eshigi ochildi. Bir necha kundan keyin qo'shnim qo'ng'iroq qilib, garaj eshigi ochiq bo'lishi kerakligini so'radi? Yaxshiyamki, men uni 500 mil uzoqlikdan yopib qo'yishim mumkin edi.

Bu snafu meni bunday bo'lmasligi uchun kodni o'zgartirishga majbur qildi va veb -saytga sensor va garaj eshigining holatini qo'shdi.

Bu sensorni qo'shish uchun ko'rsatma bo'lgan asl nusxaga havola. Ammo, tugallangan hamma narsani hisobga olgan holda, sensorni o'rnatish ancha soddalashtirilishi mumkin va pythonni ishlatish o'rniga index.php -ga bir necha satr kod qo'shing.


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\uz.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