Mündəricat:
- Addım 1: Proqram Məntiqi: Sistem Memarlığı
- Addım 2: Adım 1: Avadanlıq Kabelləri
- Addım 3: Adım 2: Arduino
- Addım 4: Adım 3: NodeJS
- Addım 5: Adım 4: Veb İnterfeysi
- Addım 6: Nəticə
Video: Arduino Layihəsi: Nodejs + SQL Veritabanı və Veb Saytı istifadə edərək İnternet üzərindən Elektronikaya Nəzarət Edin .: 6 Addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:47
Layihə: Mahmed.tech
Tarix: 14 İyul 2017
Çətinlik Səviyyə: Bəzi proqramlaşdırma biliklərinə sahibdir.
Avadanlıq Tələbi:
- Arduino Uno, Nano, Mega (serial bağlantısı olan MCU -nun çoxunun işləyəcəyini düşünürəm)
- Tək LED və cərəyan məhdudlaşdıran rezistor. Əmin deyilsinizsə bu kalkulyatordan istifadə edin: Ohms Qanun Kalkulyatoru
- 10K potensiometr.
Proqram Tələbləri:
- Arduino IDE
- Node. JS (bu kompüterdə quraşdırılmış bir proqramdır)
- MySQL Server (tapdığım ən asan yol ucuz veb hostingdən istifadə etməkdir. Pulsuz domen adları da əldə edə bilərsiniz)
İstifadə olunan proqramlaşdırma və skript dili:
Arduino (Dəyişdirilmiş C/C ++), JavaScript (Nodejs), PHP, HTML və CSS
Giriş Bu layihə qısaca: Arduino mikro nəzarətçisini veb interfeysindən idarə etmək. Buna görə hər hansı bir elektrik cihazını İnternetdən istənilən yerdən idarə edin. Proqramlaşdırma və veb inkişafı haqqında anlayışımı genişləndirmək istədim və bunu etmək üçün sadə, lakin təsirli bir layihə etməkdən daha yaxşı yolu. Proqram təminatına daha çox diqqət yetirmək üçün aparat minimum səviyyədə saxlanılır. Buna görə sadə bir LED, qazan qurğusu ilə getdim. Qazan məlumat göndərəcək və led alacaq (PWM parlaqlığı). NodeJS -dən istifadə edərək serial məlumatları oxundu (potensiometr dəyəri) və yazıldı (led parlaqlığı). Bu layihənin çətin hissəsi uzaq bir yerdən (veb server) giriş məlumatlarının alınması idi.
Addım 1: Proqram Məntiqi: Sistem Memarlığı
Potensialiometr məlumatları:
Bu Arduinodan başlayır, oxumaq pot dəyəri seriyalı çapdır. Ancaq bu dəfə dəyəri oxumaq üçün Node. JS -dən istifadə edəcəyik. NodeJS, Arduinonun bağlandığı eyni porta seriyalı ünsiyyət açacaq və çap edilmiş pot dəyərini oxuyacaq. NodeJS sonra məlumatları uzaq bir SQL verilənlər bazasına yükləyəcək, bu hər dəfə yeni bir qazan dəyəri çap edildikdə baş verəcək. Bir veb səhifəsi SQL verilənlər bazası aralığına qoşulacaq və potensiometr dəyərini alacaq. Daha sonra bu veb səhifədə göstəriləcək.
Led Məlumatları:
Led üçün PWM parlaqlığı istifadəçi tərəfindən uzaq bir veb səhifədə təyin ediləcək, buna görə də səyahət spektrin əks ucundan başlayır. Giriş məlumatları bir SQL verilənlər bazasında saxlanılır, hər müəyyən bir müddətdə verilənlər bazası PWM -də dəyişiklik üçün yoxlanılır, bu NodeJS tərəfindən aparılır. Dəyər əvvəlki dəyərdən fərqli olarsa, yeni dəyər Arduino -ya serial avtobus vasitəsilə göndəriləcək. Arduino, parlaqlığını dəyişdirmək üçün LED -in çıxış PWM dəyərini dəyişir.
Ohms qanun kalkulyatoru V = IR və P = IV = I²R = V²/R düsturundan istifadə edir. Bu layihə üçün mavi bir LED istifadə edəcəyəm. Bu vacibdir, çünki işıq tezliyi artdıqca gərginlik düşməsi də artır. Mavi işıq, qırmızı led kimi bir şeylə müqayisədə daha yüksək bir tezliyə sahib olduğu üçün. Bu daha yüksək irəli gərginlik deməkdir. Marka, növ və ölçüdən asılı olaraq iş diapazonu dəyişir. Quraşdırma üçün, Arduino üzərindəki yerə mənfi və PWM pininə müsbət olan 220 düymlük bir rezistor istifadə etdim. Qazan analoq pinlə bağlı idi. 5VCC ilə bir ucu GND digər ucu və bir analog pinlə əlaqəli orta pin (mənim vəziyyətimdə A0).
Addım 2: Adım 1: Avadanlıq Kabelləri
Bu çox sadədir: Cari məhdudlaşdırıcı rezistorunuzu LED -lə ardıcıl olaraq bağlayın ki, rəhbərliyiniz düzgündür. Bir nöqtə GND -yə, digər ucu Arduino pininə gedəcək. Quraşdırma üçün led üçün pin 12 və Pot üçün A7 istifadə etdim. Çox sadə bir dövrədən bəri sxemim yoxdur. Ancaq bunu İnternetdə tapdım (şəkil)
Addım 3: Adım 2: Arduino
Əvvəlcə led və qazanın gözlənildiyi kimi işlədikləri yoxlanıldı. Bu, pot dəyərinin ledə nəzarət etdiyi sadə bir proqramla əlaqədardır. 0 ilə 1023 aralığını 0 ilə 255 arasında dəyişmək üçün məhdudlaşdırma funksiyasından istifadə etdim, amma sadə /4 də işləyir. Pot dəyəri, ardıcıl 10 oxunuşdan ortalaması alınaraq hamarlandı, bu sıçrayışları aradan qaldırmaq üçündür. (Ancaq bu hamarlaşdırma NodeJS ilə bağlı problemlərə səbəb oldu, buna görə də layihədə sonradan silindi - bu barədə daha çox)
Kod Arduino
Növbəti addım, parlaqlığı təyin etmək üçün Arduino ide tərəfindən təmin edilən serial monitor pəncərələri vasitəsilə istifadəçi girişi etməkdir. Bunu etmək üçün serial.parseInt () istifadə olunur, bu tam ədəd alır və simli görməzdən gəlir. Ayrıca, bir səhv yoxlama kodu əlavə olunur. Bir PWM dəyərinin etibarlı aralığı 0 - 255 -dir, bir istifadəçi> 255 -ə daxil olduqda 255 -ni təyin edir və əgər istifadəçi dəyəri daxil edərsə və ya <+/- 5 oxuduğumda dalğalanma olduğundan daha sabit olsun deyə etdim.. Niyə bu SQL yeniləməsi ilə əlaqəli böyük bir problemdir, daha sonra bu barədə.
Addım 4: Adım 3: NodeJS
Sizə SQL serverini necə əldə etməyi və ya qurmağı göstərməyəcəyəm. Orada çoxlu dərsliklər var.
NodeJS proqramının 3 əsas cəhəti var:
Serial məlumatlarını oxuyun
Serial məlumatları yazın
SQL verilənlər bazasını yeniləyin
NodeJS -də serial əlaqə qurmaq üçün npm əmri ilə edilə bilən serialport adlı bir modul yüklənməlidir. NodeJS proqramının saxlanılacağı qovluqda CMD açın, yazaraq qurun: npm serial serialport Həmçinin sql verilənlər bazasına qoşulmaq üçün SQL modulu quraşdırılmalıdır: npm mysql qurun NodeJS - Serial Port NodeJS ilə ilk addımım Proqram, çap edilmiş məlumatları oxumaq və Arduinoya pwm parlaqlığını göndərmək idi. Bu, eyni braudrate və portda serial bağlantısı açaraq edildi. Bağlantı qurulduqdan sonra gələn mesajları oxudum və konsol pəncərəsinə çap etdim. Parlaqlığı idarə etmək üçün pwm dəyərini yazmağa çalışdığım zaman problem yarandı.
Səhvlər atmağa davam etdi: Liman Açılmadı, ilk həllim gələn məlumatlar olduqda yazma funksiyasını çağırmaq idi. Ancaq bu pis bir düzəliş idi və həllindən olduqca məmnun olmadım, işləsə də, yalnız qazan dəyəri dəyişdirildikdə göndərərdi. Serial modul üçün nümunə kodu eyni xətanı atmaqla işləməyəcək. Daha sonra proqramın portu açmadan yazma funksiyasını yerinə yetirməyə çalışdığını öyrəndim və bu səhvlə nəticələndi. Bu problemi setInterval () funksiyasından istifadə edərək tapdım
NodeJS - MySQL MySQL kitabxanası SQL verilənlər bazasına qoşulmaq üçün istifadə edildi (npm MySQL yükləyin) server uzaq bir yerdə serverdən localhost yerinə serverin IP ünvanını istifadə etdi.
var con, əlaqə məlumatlarını JSON formatında saxlayır, əlaqə uğurla qurulduqdan sonra verilənlər bazasına sorğu göndərilə bilər. Cədvəlin yenilənməsi üçün, SQL sorğusunda parametrlərin seçilməsi ilə digər 2 funksiya yaradılmışdır. Yeniləmə cədvəli yeni bir qazan dəyəri alındıqda çağırılır və parlaqlıq yoxlama sorğusu vaxtaşırı işləyəcək.
NodeJSCode bağlantısı
Addım 5: Adım 4: Veb İnterfeysi
Veb İnterfeysi
Əsas veb səhifəsi PHP -də yazılmışdır, çünki CO323 verilənlər bazamdan və universitetdəki veb modulundan bəzi təcrübələrim var idi. Html cədvəli və formu sql məlumatlarını göstərmək üçün istifadə edilmişdir.
PHP SQL Giriş Kodu: Bağlantı Veb interfeysi bölməsinə keçin.
HTML və CSS * Javascript Web Sayfası Kodu: Bağlantı Aşağıya doğru sürüşdürün
Son Veb səhifə
Tövsiyə:
Hava İstasyonu: ESP8266 ilə Dərin Yuxu, SQL, Şüşə Qrafiki və Plotly: 3 addım
Hava İstasyonu: ESP8266 Dərin Yuxu, SQL, Şüşə və Plotly ilə Qrafik: Balkonunuzdakı temperaturu, rütubəti və ya işığın intensivliyini bilmək əyləncəli olarmı? Biləcəyimi bilirəm. Belə məlumatları toplamaq üçün sadə bir hava stansiyası hazırladım. Aşağıdakı bölmələr, birini qurmaq üçün atdığım addımlardır. Başlayaq