Internet of Things adalah semua kemarahan pada masa kini. Dalam bidang pengkomputeran fizikal, kita mempunyai banyak idea yang boleh dipraktikkan, dan mudah untuk memanjakan pengaturcaraan dunia yang kita jalani! Dengan Raspberry Pi dan Breadboard, apa yang akan datang?
Artikel ini akan meneroka cara menggunakan node.js untuk mengakses pin GPIO PI raspberry. Dengan pin GPIO, anda boleh memprogram perkakasan secara langsung. API JavaScript menjadikan proses ini lancar. API ini adalah abstraksi teknik biasa dan boleh diakses dari mana -mana sahaja. Interpreter Node.js berjalan dalam satu proses, yang membuka cara baru untuk menulis kod yang boleh diuji. Bahagian yang paling menarik untuk saya ialah anda boleh menulis ujian unit, memukul titik putus dan semak kod seperti anda akan mana -mana program JavaScript lain, yang semuanya boleh dilakukan di komputer anda.
mari kita mulakan.
mata utama
Pin input/output biasa (GPIO) Raspberry Pi boleh diakses menggunakan Node.js, yang membolehkan perkakasan diprogramkan secara langsung. Pin ini seperti suis, menerima input atau menghantar output ke dunia fizikal, dan API JavaScript menjadikan proses ini lancar.
GPIO bermaksud input/output umum. Mereka adalah pin di sebelah sisi Raspberry Pi, soket output video kuning. Inilah yang kelihatan seperti mereka.
Jika anda ingin mengetahui lebih lanjut mengenai pin GPIO, carta dalam talian ini menyediakan semua yang anda perlu tahu mengenai setiap pin untuk digunakan. Terdapat banyak input/output dan pin tanah. Pin ini adalah asas pengkomputeran fizikal. Bergantung pada matlamat anda, anda boleh menggunakan seberapa banyak pin yang anda mahukan.
Simulasi FS!
Saya tahu apa yang anda fikirkan, apa sebenarnya FS, dan mengapa saya perlu mengambil berat tentangnya? Dalam sistem operasi seperti Unix, fail peranti adalah pemandu yang kelihatan seperti fail. Ringkasnya, pemacu peranti adalah fail! Tebak apa? API GPIO adalah pembungkus untuk membaca atau menulis fail peranti. API sistem fail mungkin konsep yang sudah anda kenal. Jika anda tidak pernah menggunakan fail dalam node.js, saya cadangkan anda menyemak modul dan sistem fail FS di Node.js. FS adalah singkatan untuk "sistem fail", yang membolehkan anda membaca atau menulis ke fail biasa. Tidak ada yang mewah di sini, semua yang kita lakukan adalah contohnya WriteFile (), membiarkan GPIO mengendalikan selebihnya. Caranya adalah untuk mengetahui fail mana yang hendak ditulis untuk ditulis.
Terdapat pakej NPM yang mudah dipanggil Mock-FS, yang dapat membantu kami dengan ujian unit. Menggunakan perpustakaan ini, anda boleh mensimulasikan sebarang fail pada mana -mana sistem fail dalam memori. Perkara yang paling penting ialah kita hanya memproses fail, dan itu sahaja yang perlu kita lakukan. Dalam sistem seperti Unix, GPIO berkelakuan sama seperti fail biasa lain. Ini memberi kita kebebasan untuk memilih cara menangani penyelesaian ini.
teras perpustakaan mock-FS adalah fungsi mock ({}). Ia menerima parameter yang merupakan objek JavaScript. Dalam parameter ini, anda boleh membuat sebarang fail yang anda mahukan. Keindahan di sini adalah bahawa semuanya berjalan dalam ingatan, jadi anda boleh melakukan ujian unit sebanyak yang anda inginkan. Jurubahasa berjalan dalam satu proses, yang bermaksud bahawa modul FS dapat ditimpa oleh runtime. JavaScript adalah bahasa yang dinamik, jadi kita boleh mensimulasikan sebarang modul yang terdapat dalam proses semasa.
Apabila anda telah menulis ujian unit yang baik pada GPIO, antara muka GPIO lebih masuk akal. Apa yang saya suka ialah anda boleh mendapatkan liputan ujian automatik dan penyelesaian yang bersih. Ujian unit meningkatkan kebolehbacaan kod kerana ia jelas menunjukkan kepada anda apa API untuk.
jadi mari kita lakukan.
ujian unit semua kandungan
mari kita buka pin dengan "keluar" dan uji:
it('opens a pin with out', function (done) { mock({ '/sys/class/gpio/gpio23/direction': '' }); gpio.open(16, 'out', function () { const direction = fs.readFileSync('/sys/class/gpio/gpio23/direction').toString(); should(direction).equal('out'); done(); }); });
Pelaksanaan ujian ini harus memetakan pin fizikal 16 hingga pin BCM 23 dalam GPIO. Nombor BCM adalah nombor pin Broadcom yang dilihat kernel dalam pemacu peranti. Pemacu peranti GPIO menggariskan lokasi fail peranti. Seperti yang ditunjukkan, untuk menghidupkan pin, tulis rentetan "keluar" ke /arah. Ini memberitahu GPIO yang kita mahu menulis pin ini. Setelah selesai, periksa sama ada fail mengandungi kandungan yang diperlukan. Mock berasal dari Perpustakaan Mock-FS, yang merupakan sistem fail standard di Node.js. Kernel menunjukkan di mana laluannya - 3.18.x dan kemudiannya terletak di/SYS/CLASS/GPIO.
untuk menulis ke pin di papan dan mengujinya, anda boleh melakukan perkara berikut:
it('writes to a pin with a high value', function (done) { mock({ '/sys/class/gpio/gpio23/value': '0' }); gpio.write(16, 5, function () { const value = fs.readFileSync('/sys/class/gpio/gpio23/value').toString(); should(value).equal('1'); done(); }); });
Terdapat persamaan antara gpio.open () dan gpio.write (). Gunakan operasi tulis, yang menulis ke fail /nilai. Untuk pemeriksaan integriti, saya menulis nilai yang sangat tinggi 5, tetapi kami hanya mengharapkan hasil ujian menjadi 1. GPIO hanya menerima nilai tinggi atau rendah, seperti binari.
Saya mendapat butiran pelaksanaan dari PI-GPIO. Perpustakaan ini memberikan anda gambaran yang baik bagi setiap kedudukan pin. Anda juga boleh mencari fail peranti pada kernel. Sama ada cara, matlamat saya adalah untuk memberi anda pemahaman yang baik tentang asas -asas supaya anda dapat mendapatkan gambaran yang jelas.
mari kita gila, bagaimana anda memukul titik putus dalam ujian unit? Saya menggunakan WebStorm untuk melakukan ini, dan sekali lagi, gunakan cara untuk membuat anda berasa selesa:
Untuk kesederhanaan, saya menulis ke pin tunggal. Selebihnya GPIO diringkaskan dengan cara yang sama. Buka pin dan beritahu apa yang anda mahu lakukan dengannya. Baca atau tulis pin, apa sahaja yang perlu anda lakukan. API peringkat rendah adalah fail peranti, jadi anda boleh memilih cara memprogram setiap pin.
Demo berkelip
Untuk memperkayakan setiap ujian unit, mari kita lihat beberapa pembolehubah biasa:
var sysFsPath = '/sys/class/gpio/gpio'; var pinMapping = { '16': 23 };
function open(pinNumber, direction, callback) { const path = sysFsPath + pinMapping[pinNumber] + '/direction'; fs.writeFile(path, direction, (callback || noOp)); } function write(pinNumber, value, callback) { const path = sysFsPath + pinMapping[pinNumber] + '/value'; value = !!value ? '1' : '0'; fs.writeFile(path, value, 'utf8', callback); } function noOp() {}
Akhir sekali, demonstrasi scintillator yang sah menggunakan API yang ditunjukkan di atas:
gpio.open(16, 'out', function () { var on = 0; var blinker = setInterval(function () { gpio.write(16, on, function () { on = (on + 1) % 2; console.log('ON = ' + on); }); }, 1000); setTimeout(function () { clearInterval(blinker); }, 12000); });
untuk menjalankan kod sampel, ketik:
sudo npm start
Saya harap dari demo ini, GPIO kelihatan lebih intuitif. Ia mengharapkan untuk menggunakan arah untuk menghidupkan pin. Anda kemudian menulis pin dan biarkan GPIO mengendalikan seluruh butiran.
Kesimpulan
Kaedah yang didorong oleh ujian sangat sesuai untuk Internet Perkara. Di Internet Perkara, imaginasi anda adalah had. Raspberry Pi boleh digunakan di mana -mana di dunia -dalam pengkomputeran fizikal, anda tidak mahu menghantar perkakasan di seluruh dunia untuk debug kod. Menggunakan pendekatan yang didorong oleh ujian, anda boleh mendapatkan maklum balas dengan segera dan memastikan penyelesaian berfungsi. Anda boleh meningkatkan produktiviti dan mengetatkan gelung maklum balas.
Apa yang saya suka tentang API GPIO ialah ia dapat dipermudahkan ke dalam pembungkus di sekitar modul FS. Ini memberi anda kebebasan lengkap untuk menulis kod yang bersih dan boleh diuji.
Demo sampel yang tersisa telah dimuat naik ke GitHub.
Soalan Lazim menggunakan Node.js dan GPIO pin pada raspberry pi
Apakah node.js dan bagaimana menggunakannya dengan pin GPIO Raspberry Pi? Node.js adalah persekitaran runtime JavaScript yang membolehkan anda menjalankan kod JavaScript pada Raspberry Pi. Anda boleh menggunakannya untuk mengawal dan berinteraksi dengan pin GPIO (Input Tujuan Umum/Output) yang digunakan untuk menyambungkan komponen perkakasan luaran ke Raspberry Pi.
menggunakan pin Node.js dan GPIO pada Pi Raspberry memerlukan perkakasan khas? Anda memerlukan papan Raspberry Pi, dan mungkin beberapa komponen luaran seperti LED, sensor, atau relay, bergantung kepada projek anda. Untuk memulakan, anda juga harus mempunyai papan roti dan beberapa jumper untuk menyambungkan komponen ini ke pin GPIO.
bagaimana memasang node.js pada raspberry pi? Anda boleh menggunakan Pengurus Pakej APT atau memuat turun dan memasangnya dari laman web Node.js untuk memasang Node.js pada Raspberry Pi. Pastikan anda menggunakan versi Node.js yang bersesuaian dengan ARM untuk model Raspberry Pi khusus anda.
Apakah pin GPIO dan bagaimana anda mengenal pasti mereka di papan Raspberry Pi? Pin GPIO adalah pin pada Raspberry Pi yang boleh digunakan untuk input digital atau output. Mereka ditandai dengan nombor dan boleh dikenalpasti menggunakan rajah pin GPIO khusus untuk model Raspberry Pi anda.
Bagaimana untuk mengakses pin GPIO dalam node.js? Anda boleh mengakses pin GPIO dalam node.js menggunakan perpustakaan seperti RPI-GPIO, ONOFF, atau PIGPIO. Perpustakaan ini menyediakan API untuk mengawal dan berinteraksi dengan pin GPIO dalam kod JavaScript.
Dalam projek Node.js saya, adakah mungkin untuk menggunakan pin GPIO untuk kedua -dua input dan output? Ya, anda boleh mengkonfigurasi pin GPIO sebagai input dan output dalam projek Node.js anda. Anda boleh membaca bilangan sensor yang disambungkan ke pin input dan kawalan LED, motor atau peranti lain yang disambungkan ke pin output.
Adakah mungkin menggunakan pin GPIO dalam node.js untuk PWM (modulasi lebar nadi) untuk mengawal tugas seperti kecerahan atau kelajuan? Ya, anda boleh PWM menggunakan beberapa pin GPIO di Raspberry Pi untuk mengawal kecerahan, kelajuan motor, dan banyak lagi. Perpustakaan seperti Pigpio menyediakan sokongan untuk PWM dan serasi dengan Node.js.
Atas ialah kandungan terperinci Bermula dengan pin Raspberry Pi GPIO di Node.js. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!