Isi kandungan:
- Langkah 1: Logik Perisian: Senibina Sistem
- Langkah 2: Langkah 1: Pendawaian Perkakasan
- Langkah 3: Langkah 2: Arduino
- Langkah 4: Langkah 3: NodeJS
- Langkah 5: Langkah 4: Antara Muka Web
- Langkah 6: Hasilnya
Video: Projek Arduino: Kawal Elektronik Melalui Internet Menggunakan Pangkalan Data & Laman Web Nodejs + SQL .: 6 Langkah
2024 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2024-01-30 11:10
Projek Oleh: Mahmed.tech
Tarikh Dibuat: 14 Julai 2017
Tahap Kesukaran: Permulaan dengan beberapa pengetahuan pengaturcaraan.
Keperluan Perkakasan:
- Arduino Uno, Nano, Mega (saya rasa kebanyakan MCU dengan sambungan bersiri akan berfungsi)
- Perintang penghad LED & Arus tunggal. Gunakan kalkulator ini jika anda tidak pasti: Ohms Law Calculator
- Potensiometer 10K.
Keperluan Perisian:
- Arduino IDE
- Node. JS (ini adalah perisian di komputer, sangat mudah dipasang)
- Pelayan MySQL (cara termudah yang saya dapati adalah menggunakan web hosting yang murah. Anda juga boleh mendapatkan nama domain percuma)
Bahasa pengaturcaraan & skrip yang digunakan:
Arduino (Diubah C / C ++), JavaScript (Nodejs), PHP, HTML & CSS
Pengenalan Projek ini secara ringkas: Mengendalikan mikrokontroler Arduino dari antara muka web. Oleh itu, kendalikan sebarang alat elektrik dari mana sahaja dengan internet. Saya ingin meningkatkan pemahaman saya mengenai pengaturcaraan dan pembangunan web dan cara apa yang lebih baik untuk melakukannya daripada melakukan projek yang mudah tetapi berkesan. Perkakasan disimpan minimum sehingga saya dapat lebih fokus pada perisian. Oleh itu, saya pergi dengan pemasangan LED sederhana, periuk. Pot akan menghantar data dan led akan menerima (kecerahan PWM). Menggunakan NodeJS data bersiri dibaca (nilai potensiometer) dan ditulis (kecerahan dipimpin). Bahagian yang sukar dalam projek ini adalah mendapatkan data input dari lokasi terpencil (pelayan web)
Langkah 1: Logik Perisian: Senibina Sistem
Data Potensiometer:
Ini bermula dari Arduino, nilai pot baca adalah cetakan bersiri. Namun, kali ini kita akan menggunakan Node. JS untuk membaca nilainya. NodeJS akan membuka komunikasi bersiri ke port yang sama dengan Arduino yang disambungkan dan membaca nilai pot dicetak. NodeJS kemudian akan memuat naik data ke pangkalan data SQL jauh, ini akan berlaku setiap kali nilai pot baru dicetak. Halaman web akan menyambung ke selang set pangkalan data SQL dan mengambil nilai potensiometer. Ini kemudian akan dipaparkan di laman web.
Data yang diketuai:
Untuk dipimpin, kecerahan PWM akan ditetapkan oleh pengguna di laman web yang jauh, jadi perjalanannya bermula di hujung spektrum yang bertentangan. Data input disimpan ke pangkalan data SQL, setiap selang set pangkalan data diperiksa untuk perubahan dalam PWM yang dipimpin, ini dilakukan oleh NodeJS. Sekiranya nilainya berbeza dengan nilai sebelumnya, maka nilai baru akan dihantar ke Arduino melalui bas bersiri. Arduino mengubah nilai output PWM dari led untuk mengubah kecerahannya.
Kalkulator undang-undang Ohms menggunakan formula V = IR dan P = IV = I²R = V² / R Untuk projek ini, saya akan menggunakan led biru. Ini penting kerana apabila frekuensi cahaya meningkat, penurunan voltan juga meningkat. Oleh kerana cahaya biru mempunyai frekuensi yang lebih tinggi dibandingkan dengan sesuatu seperti lampu merah. Ini bermaksud voltan hadapan yang lebih tinggi. Bergantung pada bentuk, jenis, dan ukuran julat kerja akan berbeza-beza. Untuk persediaan saya, saya menggunakan perintang 220 Ω secara bersiri, negatif ke tanah dan positif ke pin PWM pada Arduino. Periuk disambungkan ke pin analog. Dengan 5VCC satu hujung GND yang lain dan pin tengah disambungkan ke pin analog (A0 dalam kes saya).
Langkah 2: Langkah 1: Pendawaian Perkakasan
Ini sangat mudah: Sambungkan perintang had semasa anda secara bersiri dengan LED, pastikan anda dipimpin dengan betul. Satu mata akan pergi ke GND sementara hujung yang lain akan menuju ke pin Arduino. Untuk persediaan saya, saya menggunakan pin 12 untuk led dan A7 untuk Pot. Saya tidak mempunyai skema kerana litarnya sangat mudah. Walau bagaimanapun, saya menjumpai ini dalam talian (gambar)
Langkah 3: Langkah 2: Arduino
Pertama, plumbum dan periuk diperiksa sama ada berfungsi seperti yang diharapkan. Ini diturunkan oleh program sederhana di mana nilai pot mengawal led. Saya menggunakan fungsi kekangan untuk mengubah julat periuk 0 hingga 1023 hingga 0 hingga 255, tetapi sederhana / 4 berfungsi juga. Nilai periuk dihaluskan dengan mengambil rata-rata rata-rata dari 10 bacaan berturut-turut, ini adalah untuk menghilangkan lonjakan. (Walau bagaimanapun, kelancaran ini menyebabkan masalah dengan NodeJS jadi ini dikeluarkan semasa projek - lebih lanjut mengenai itu)
Kod Arduino
Baca / Tulis SerialLangkah seterusnya adalah mengambil input pengguna melalui tetingkap monitor bersiri yang disediakan oleh ide Arduino untuk mengatur kecerahan. Untuk melakukan ini, serial.parseInt () digunakan yang mengambil nilai integer dan mengabaikan rentetan. Juga, pemeriksaan ralat ditambahkan pada kod. Julat nilai PWM yang sah adalah 0 - 255, apabila pengguna memasukkan> 255 maka ia memberikan nilai 255 dan jika pengguna memasukkan nilai atau <+/- 5 saya telah melakukan ini untuk menjadikan bacaan lebih stabil sejak turun naik. Mengapa ini adalah masalah besar yang berkaitan dengan pengemaskinian SQL, lebih banyak lagi kemudian.
Langkah 4: Langkah 3: NodeJS
Saya tidak akan menunjukkan kepada anda cara mendapatkan atau menyediakan dan pelayan SQL. Terdapat banyak tutorial di luar sana.
Terdapat 3 aspek utama untuk program NodeJS:
Baca Data Bersiri
Tulis Data Bersiri
Kemas kini Pangkalan Data SQL
Untuk membuat sambungan bersiri dalam NodeJS, modul yang disebut serialport mesti dimuat turun yang boleh dilakukan menggunakan perintah npm. Buka CMD pada folder di mana program NodeJS akan disimpan, pasang dengan menaip: npm install serialport Juga modul SQL harus dipasang untuk dapat menyambung ke pangkalan data sql: npm pasang mysql NodeJS - Port Serial Langkah pertama saya dengan NodeJS program ini adalah untuk membaca data yang dicetak dan mengirim kecerahan pwm ke Arduino. Ini dilakukan dengan membuka sambungan bersambung pada braudrate dan port yang sama. Setelah sambungan terjalin, saya membaca mesej masuk dan mencetaknya ke tetingkap konsol. Masalah timbul ketika saya cuba menulis nilai pwm untuk mengawal kecerahan.
Ia terus melemparkan kesalahan: Port Not Open, penyelesaian awal saya adalah memanggil fungsi tulis ketika ada data masuk. Walau bagaimanapun, ini adalah cara yang tidak baik dan saya tidak berpuas hati dengan penyelesaiannya, walaupun ia berjaya, ia hanya akan dihantar apabila nilai pot berubah. Contoh kod untuk modul bersiri tidak berfungsi sama ada menyebabkan kesalahan yang sama. Saya kemudian mengetahui bahawa program ini berusaha untuk menjalankan fungsi menulis tanpa membuka port, yang mengakibatkan kesalahan itu. Saya menemui masalah ini dengan menggunakan fungsi setInterval ()
NodeJS - MySQLPustaka MySQL digunakan (npm pasang MySQL) untuk menyambung ke pangkalan data SQL kerana pelayan di lokasi terpencil alamat IP pelayan digunakan dan bukan localhost.
var con menyimpan maklumat sambungan dalam format JSON, setelah sambungan berjaya dibuat, pangkalan data dapat ditanyakan. 2 fungsi dibuat satu untuk mengemas kini jadual yang lain memilih dengan parameter mengambil pertanyaan SQL. Jadual kemas kini dipanggil apabila nilai periuk baru diterima dan pertanyaan pemeriksaan kecerahan akan berjalan secara berkala.
Pautan NodeJSCode
Langkah 5: Langkah 4: Antara Muka Web
Antara Muka Web
Laman web utama ditulis dalam PHP kerana saya sudah mempunyai beberapa pengalaman dari Pangkalan Data CO323 dan modul Web di universiti. Jadual & borang html digunakan untuk memaparkan data sql.
Kod Akses PHP SQL: Pautan Tatal ke bahagian antara muka web.
HTML & CSS * Kod Halaman Web Javascript: Pautan Tatal ke bawah
Laman Web Akhir
Disyorkan:
Stesen Cuaca: ESP8266 Dengan Tidur Dalam, SQL, Membuat Grafik oleh Flask & Plotly: 3 Langkah
Stesen Cuaca: ESP8266 Dengan Tidur Dalam, SQL, Membuat Grafik oleh Flask & Plotly: Adakah itu menyenangkan untuk mengetahui suhu, kelembapan, atau intensiti cahaya di balkoni anda? Saya tahu saya akan. Oleh itu, saya membuat stesen cuaca sederhana untuk mengumpulkan data tersebut. Bahagian berikut adalah langkah yang saya ambil untuk membuatnya. Mari mulakan