İçindekiler:
2025 Yazar: John Day | [email protected]. Son düzenleme: 2025-01-13 06:58
Hey çocuklar okul için bir proje için bir fikre ihtiyacım vardı. Ben de düşündüm ki, ahududu pi ile bir proje olmalı ve yerel. Birden aklıma harika bir fikir geldi ve bu fikre nasıl ulaştığımı sormayın ama bir bebek telsizi için yükseltme yapmayı düşündüm. Bu fikir hakkında bir saniye düşünün, çoğu bebek monitörü bebeğin odasını dinleme işlevine sahiptir.
Özellikler
- Ayarlanabilir renklerle küçük bir ışık gösterisi
- Size canlı görüntüler gösteren bir kamera
- Müzik çalmak için bir hoparlör
- Bebeğin hareketini algılayan sensörler
- Tüm bunlar bir web sitesinde gösteriliyor
Kısa bilgi
Bunu kısa bir versiyonda açıklayayım. Bu yüzden bir web sitesine ihtiyacımız var ve bu proje için Flask kullanıyorum, ayrıca bir veritabanına ihtiyacımız var ve mysql kullanıyorum, ayrıca donanımı çalıştıran bir betik ve bu python(3) ile ve son olarak bir sunucu kurulumuna ihtiyacımız var bu PI'de nginx olurdu.
Neye ihtiyacımız var
- Ahududu Pi 3
- Step motor 28BYJ
- Stepmotor sürücü çipi ULN2003 step modülü
- 3 dirençli 330Ohm ile bir rgb led
- Pi NoIR kamera V2
- Ultrasonik sensör HC-SR04
- ardiuno'dan mikro modül
- MAX98357A
- Bir hoparlör 8Ohm
- Ve bir ayı almayı unutma
Ahududu pi'yi kurun -------------------------------------------------- -------------------------------------------------- --------------------------
İlk önce Pi'yi kurmamız gerekiyor. Putty ile giriş yapmaya şimdiden başlayın, eğer Putty'niz yoksa bunu indirmenizi tavsiye ederim, sadece Pi'nin statik ip'ini ssh ile yazın ve onunla devam edin. Raspberry Pi'nizi kurmanız gerekiyorsa kötü bir haberim var, bunu bu projede anlatmıyorum.
Paketleri yükle
sudo uygun güncelleme
sudo apt kurulum -y python3-venv python3-pip python3-mysqldb mysql-sunucu uwsgi nginx uwsgi-plugin-python3
Sanal çevre
python3 -m pip kurulumu --upgrade pip kurulum araçları tekerleği sanalenv
mkdir {proje klasör adınız} && cd {proje klasör adınız} python3 -m venv --system-site-packages env source env/bin/activate python -m pip mysql-connector-python argon2-cffi Flask Flask-HTTPAuth Flask- MySQL mysql-bağlayıcı-python şifresi
Şimdi proje klasörünüzdeki git deposunu klonlamanız gerekiyor
github.com/NMCT-S2-Project-I/Project-I.git
Proje klasörünüze bakarsanız 5 klasör görmeniz gerekir.
- konf
- ortam
- sensör
- sql
- ağ
Veri tabanı
sudo systemctl durumu mysql
ss -lt | grep mysql sudo mysql
veritabanında tüm ayrıcalıklara sahip bir kullanıcı oluşturun ve veritabanınızı yapın
'parola' ile tanımlanan 'kullanıcı'@'localhost' kullanıcısını oluşturun;
veritabanınızı veritabanı adınızı oluşturun; veri tabanı adınız* üzerindeki tüm yetkileri hibe seçeneği ile 'user'@'localhost'a verin;
Sunucu için conf dosyaları
uwsgi-flask.ini'de 'module = …' öğesini 'module= web:app' olarak ve oluşturduğunuz virtualenv'inizin yolunu değiştirirsiniz. Diğer dosyalarda, dizininizin gerçek mutlak yollarına giden yolları değiştirmeniz gerekir.
Bunu anladıktan sonra dosyaları doğru yere ayarlayabilirsiniz.
sudo cp conf/project1-*.service /etc/systemd/system/
sudo systemctl arka plan programı-yeniden yükle sudo systemctl projeyi başlat1-* sudo systemctl durum projesi1-*
şimdi bunu kullanılabilir hale getirmeliyiz
sudo cp conf/nginx /etc/nginx/siteler kullanılabilir/proje1
sudo rm /etc/nginx/sites-etkin/varsayılan sudo ln -s /etc/nginx/sites-available/project1 /etc/nginx/sites-enabled/project1 sudo systemctl nginx.service yeniden başlat sudo nginx -t
Her şey yolunda gittiyse, bu komutla merhaba dünyanız olmalı
wget -qO - yerel ana bilgisayar
Tamamlandı ! Peki bu, sisteminizi çalıştırmanıza izin verecek kısım için…
Adım 1: Donanımı Pi'ye Bağlama
BCM'yi kullanma
ses MAX98357A
- BCK'den GPIO 18'e
- GPIO 21'e veri
- LRCK'den GPIO'ya 19
ışık
- GPIO 17'ye kırmızı
- GPIO 27'ye yeşil
- maviden GPIO 22'ye
motor modülü ULN2003
- pin 1'den GPIO 5'e
- pin 2'den GPIO 6'ya
- pin 3'ten GPIO 13'e
- pim 4'ten GPIO 26'ya
mikro
D0 - GPIO 21
ultrasonik sensör
- GPIO 16'ya tetikleme
- GPIO 20'ye yankı
Adım 2: Ana Programların Kodlanması
Burada ayrıntılara girmiyorum ama kodumu github'da kontrol edebilirsiniz.
Başlamak için html ve css, bir dizin, giriş, kayıt, ana ekran, müzik, addmusic, addbear, ışık, kamera, kamera ayarları, sensör, gösterge tablosu sayfası oluşturdum. Html dosyaları şablonlarda ve css dosyaları da static/css klasöründe olmalıdır. Css'i tamamen istediğiniz gibi özelleştirebilirsiniz.
Bu kısmı yaptıysanız, şişenizi ayarlamanız gerekir. Flask, merhaba dünyasının sadece bir örneğini kullanmak kolaydır
# ilk başta şişeyi içe aktar
şişeden içe aktarma * @app.route('/') def index(): render_template('index.html') döndür
Şimdi kodumda bu zaten doldurulmuş, yapmanız gereken tek şey veritabanı kullanıcısını ve şifresini sizden değiştirmek ve tabii ki github'da da bulabileceğiniz aynı veritabanını yapmak.
Adım 3: Veritabanını Oluşturma
Gerçek hayranlar için aynı veritabanını nasıl oluşturacağınızı anlatacağım.
Yani birinci adımda yapmadıysanız, önce veritabanını oluşturmamız gerekiyor.
Beargardian veritabanı oluşturmak;
Bunu yaptıktan sonra tabloları mysql tezgahında veya phpadmin'de yaratırsınız.
kullanıcı tablosu var
- Kullanıcı kimliği
- ilk adı
- Soyadı
- e-posta
- bebek ismi
- sha1 ile şifre
- kullanıcı klasörü
- oyun müziği (int)
- oyun ışığı (int)
- oynatma kaydı (int)
müzik masası var
- müzik kimliği
- şarkı
- yol
- kullanıcı klasörü
- durum
- Ses
kayıt tablosu var
- kayıt kimliği
- yol
- kullanıcı klasörü
- zaman
- gün
renk tablosu var
- renk kimliği
- kırmızı
- Yeşil
- Mavi
- parlaklık
- Kullanıcı kimliği
ayı masası var
- ayıKimliği (ondalık(8))
- kullanıcı kimliği varsayılanı boş
- ayı adı
sensör tablosu vardır
- sensör kimliği
- mesafe
- mikro
- ayı kimliği
- zaman
- gün
- uyku zamanı
Veritabanını başarıyla oluşturdunuz, şimdi donanıma geçelim.
Adım 4: Donanım Kodlaması
Biraz kod göstereceğim ve size neden böyle yaptığımı anlatacağım.
Başlangıç olarak iş parçacığı kullandım, bu projede mutlak bir zorunluluktur. İş parçacığı nedir, hmmm güzel soru! Python'da tehdit, aynı anda birden fazla program çalıştırmaktır. Yani örneğin rengi değiştirirseniz, kayıt da yapabilirsiniz. Merak etmeyin kullanımı kolaydır.
import _threaddef function_name(bir şey, bir şey_else): çalıştırılacak kod
_thread.start_new_thread(işlev_adı, tuple_with_the_functions_variables)
Programıma baktıysanız, logger.info('…') ifadesini gördünüz. Bu yazdırma işlevi ama çok daha iyi, çünkü Pi'de bir şeyler yazdıramazsınız, bu yüzden bir dosya hazırlayıp oraya yazdırırım. Bu kod ile log dosyasını ayarlayabilirsiniz.
logger = logging.getLogger(_name_)logger.setLevel(logging. INFO) # dosya işleyici oluştur = logging. FileHandler('logger.log') handler.setLevel(logging. INFO)
# bir günlük formatı oluştur
formatlayıcı = logging. Formatter('%(asctime)s - %(name)s - %(message)s') handler.setFormatter(formatter)
# işleyicileri kaydediciye ekleyin
logger.addHandler(işleyici)
logger.info('donanımı başlat\n------------------------------------------')
kodun kendisinde her şeyi açıklarım.