pertemuan kegemaran saya setiap bulan di Sydney adalah pertemuan IoT Sydney. Ia adalah pertemuan yang hebat (anda harus datang!). Pada akhir setiap pertemuan, terdapat cabutan hadiah rawak bagi mereka yang rsvped. Saya fikir ia adalah masa bahawa ini telah dilakukan dalam gaya IoT yang benar, jadi saya menyusun LCD Arduino cepat yang ditubuhkan yang menarik dalam maklumat RSVP Event Meetup.com dan kemudian secara rawak memilih ahli bertuah. Fikir ia mungkin kejutan dan lebih mudah daripada menarik nama keluar dari topi!
Ia juga jatuh dengan kemas dengan siri artikel Internet of Things semasa yang saya tulis di sini di SitePoint. Saya meneroka banyak kemungkinan IoT di luar sana dengan pelbagai peranti. Minggu lalu, saya melihat menggunakan data IoT dalam enjin permainan Unity dan sebelum itu, saya melihat bagaimana untuk menarik data dari tulang rahang.
mari kita mulakan!
lakaran arduino anda
kod JavaScript kami
<span>var express = require('express'), </span> app <span>= express(), </span> server <span>= require('http').<span>Server</span>(app), </span> port <span>= 5000, </span> five <span>= require('johnny-five'), </span> request <span>= require('request'), </span> _ <span>= require('underscore'), </span> board <span>= new five<span>.Board</span>(), </span> lcd<span>; </span> board<span>.on('ready', function() { </span> lcd <span>= new five<span>.LCD</span>({ </span> <span>pins: [12, 11, 5, 4, 3, 2], </span> <span>rows: 2, </span> <span>cols: 16 </span> <span>}); </span> <span>this.repl.inject({ </span> <span>lcd: lcd </span> <span>}); </span><span>}); </span> app<span>.get('/chooseMember/:event_id', function(req<span>, resp</span>) { </span> <span>request({ </span> <span>url: 'https://api.meetup.com/2/rsvps?key=474cc9332345ea7d7e135f50653c&event_id='+req.params.event_id, </span> <span>json: true </span> <span>}, function(error<span>, response, body</span>) { </span> <span>var members = _.pluck(body.results, 'member'), </span> randomMember <span>= members[_.random(members.length - 1)]; </span> resp<span>.json(randomMember); </span> <span>console.log(randomMember.name); </span> lcd<span>.clear().print(randomMember.name); </span> <span>}); </span><span>}); </span> server<span>.listen(port, function() { </span> <span>console.log('Listening on ' + port); </span><span>});</span>
Jika anda cukup dipertikaikan ke dalam node.js, kebanyakan kod itu akan masuk akal kepada anda. Saya akan menerangkan setiap bit hanya untuk memastikan semua orang berada di halaman yang sama dan memberikan bimbingan di sepanjang jalan pada apa sahaja yang perlu kita sediakan.
Untuk memulakan, kami menyediakan pembolehubah pelayan ekspres kami sebagai persediaan untuk menjalankan pelayan localhost pada port 5000:
<span>var express = require('express'), </span> app <span>= express(), </span> server <span>= require('http').<span>Server</span>(app), </span> port <span>= 5000,</span>
Kami kemudian mendapat perkara yang agak penting untuk dimasukkan, Johnny-Five. Ini adalah perpustakaan NPM yang memberi kita akses kepada fungsi yang kita perlukan untuk mengawal arduino kita melalui node.js.
five <span>= require('johnny-five'),</span>
Selepas itu, kami termasuk modul permintaan. Kami akan menggunakan ini untuk membuat permintaan HTTP dari pelayan Node.js kami ke API Meetup.
request <span>= require('request'),</span>
Untuk menjaga perkara yang sangat bersih dan mudah, kami akan menggunakan garis bawah untuk melalui array data.
_ <span>= require('underscore'),</span>
Dua pembolehubah terakhir adalah pembolehubah papan dan LCD yang akan kami gunakan untuk menyimpan objek Arduino yang dibuat oleh Johnny-Five.
board <span>= new five<span>.Board</span>(), </span> lcd<span>;</span>
Kami mulakan dengan menunggu papan Arduino kami bersedia untuk mengakses, Johnny-Five menghantar acara "siap" apabila lembaga kami bersedia untuk pergi.
board<span>.on('ready', function() {</span>
Setelah papan kami bersedia untuk pergi, kami membiarkan Johnny-Five tahu apa jenis LCD yang kami telah dihubungkan. Kami menentukan pin dari atas ke bawah dalam array:
Kami juga menentukan berapa banyak baris dan lajur LCD kami. Dalam kes saya ia adalah 2 × 16 LCD. Semua ini kelihatan seperti:
lcd <span>= new five<span>.LCD</span>({ </span> <span>pins: [12, 11, 5, 4, 3, 2], </span> <span>rows: 2, </span> <span>cols: 16 </span><span>});</span>
maka kami mempunyai kod yang pilihan (tetapi berguna untuk disertakan) yang akan membolehkan kami mengakses fungsi LCD dari baris arahan kami kerana ia sedang berjalan (saya akan menunjukkan ini dalam tindakan kemudian dalam artikel):
<span>this.repl.inject({ </span> <span>lcd: lcd </span><span>});</span>
Kemudian, kami mempunyai satu dan hanya mendapatkan permintaan yang telah kami sediakan. Dalam permintaan ini, kami menjangkakan ID acara dalam URL. Sebagai contoh: http: // localhost: 5000/choosemember/221960710. ID Acara adalah yang anda akan dapati di bar alamat apabila anda melawat halaman acara:
Permintaan GET kami mencari ID ini kelihatan seperti:
app<span>.get('/chooseMember/:event_id', function(req<span>, resp</span>) {</span>
maka kita sampai ke sedikit kod kompleks! Permintaan HTTP sebenar kami ke API Meetup. Kami mengakses ini melalui fungsi permintaan. Kami lulus dalam dua perkara di sini, pilihan HTTP kami untuk permintaan dan fungsi panggil balik kami.
Pilihan untuk panggilan HTTP kami mengandungi URL kami dan Boolean untuk membiarkan permintaan mengetahui kami menjangkakan objek JSON kembali. Ini kelihatan seperti:
<span>request({ </span> <span>url: 'https://api.meetup.com/2/rsvps?key=089cc9874628ealkjh27dkb50653s&event_id='+req.params.event_id, </span> <span>json: true </span><span>}</span>
pemerhati yang berminat akan perasan kami lulus dalam ID acara kami dari rentetan URL ke dalam url permintaan menggunakan req.params.event_id. Walau bagaimanapun terdapat satu lagi watak di sana yang saya tidak jelaskan. Untuk mengakses API Meetup, anda memerlukan kunci API. Anda boleh menemui salah satu daripada ini di https://secure.meetup.com/meetup_api/key/:
Akhirnya, kami mempunyai fungsi panggil balik kami yang menggunakan data JSON yang dikembalikan. Saya telah menyimpannya dengan mudah dan tanpa pengendalian kesilapan, namun jika ini adalah penciptaan tahap pengeluaran yang serius - tambahkan cek untuk pembolehubah ralat.
output JSON yang panggil balik akan kembali dalam pembolehubah badan kita kelihatan seperti begitu:
<span>var express = require('express'), </span> app <span>= express(), </span> server <span>= require('http').<span>Server</span>(app), </span> port <span>= 5000, </span> five <span>= require('johnny-five'), </span> request <span>= require('request'), </span> _ <span>= require('underscore'), </span> board <span>= new five<span>.Board</span>(), </span> lcd<span>; </span> board<span>.on('ready', function() { </span> lcd <span>= new five<span>.LCD</span>({ </span> <span>pins: [12, 11, 5, 4, 3, 2], </span> <span>rows: 2, </span> <span>cols: 16 </span> <span>}); </span> <span>this.repl.inject({ </span> <span>lcd: lcd </span> <span>}); </span><span>}); </span> app<span>.get('/chooseMember/:event_id', function(req<span>, resp</span>) { </span> <span>request({ </span> <span>url: 'https://api.meetup.com/2/rsvps?key=474cc9332345ea7d7e135f50653c&event_id='+req.params.event_id, </span> <span>json: true </span> <span>}, function(error<span>, response, body</span>) { </span> <span>var members = _.pluck(body.results, 'member'), </span> randomMember <span>= members[_.random(members.length - 1)]; </span> resp<span>.json(randomMember); </span> <span>console.log(randomMember.name); </span> lcd<span>.clear().print(randomMember.name); </span> <span>}); </span><span>}); </span> server<span>.listen(port, function() { </span> <span>console.log('Listening on ' + port); </span><span>});</span>
Kami menyaring banyak perkara itu dengan menggunakan fungsi _.pluck () dalam garis bawah. Ini akan membantu kami memberi tumpuan kepada sedikit API kami - ahli -ahli yang rsvped. Fungsi _.pluck () melalui array hasil dan hanya mengambil maklumat ahli dari setiap satu.
<span>var express = require('express'), </span> app <span>= express(), </span> server <span>= require('http').<span>Server</span>(app), </span> port <span>= 5000,</span>
Kemudian, kami menggunakan fungsi underscore _.members () untuk secara rawak memilih ahli dari array yang dihasilkan.
five <span>= require('johnny-five'),</span>
kami mengembalikan data itu melalui pelayan Express kami sebagai respons JSON untuk permintaan GET dan log nama di konsol kami supaya kami dapat melihat siapa yang dipilih:
request <span>= require('request'),</span>
Kemudian kami menggunakan objek LCD Johnny-Five yang kami buat sebelum ini untuk mencetak nama ahli ke LCD kami. Kami mulakan dengan menggunakan lcd.clear () untuk membersihkan LCD apa -apa yang sedang di atasnya dan kemudian gunakan lcd.print () untuk mencetak watak nama.
_ <span>= require('underscore'),</span>
Anda akan melihat apabila anda menjalankan ini bahawa beberapa nama panjang akan dipotong, bukannya membungkus ke baris lain. Jika anda ingin membungkus perkara ke baris kedua, cuba memisahkan Randommember.Name anda menjadi dua rentetan 16 aksara, cetak rentetan pertama dan kemudian gunakan LCD.Cursor (1, 0); untuk bergerak ke baris kedua sebelum mencetak yang kedua. Dalam kes saya, ia tidak diperlukan kerana semua yang kita perlukan adalah untuk dapat memberitahu namanya yang ditarik - beberapa watak yang hilang biasanya tidak akan menyebabkan masalah di sini.
Kami mempunyai kod Node.js kami siap. Sekarang, sambungkan Arduino anda dan pastikan anda mendapat lakaran standardFirmata yang dimuat naik di atasnya:
Kami juga perlu memastikan kami mempunyai semua kebergantungan yang disusun. Fail pakej.json saya kelihatan seperti:
board <span>= new five<span>.Board</span>(), </span> lcd<span>;</span>
Jangan ragu untuk menyesuaikan diri dengan projek anda sendiri, perkara utama yang anda mahukan adalah kebergantungan tersebut.
Kemudian sebaik sahaja anda mempunyai fail pakej.json yang disusun, buka konsol anda dan pergi ke lokasi kod anda. Jalankan arahan yang indah ini:
board<span>.on('ready', function() {</span>
diikuti oleh yang satu ini:
lcd <span>= new five<span>.LCD</span>({ </span> <span>pins: [12, 11, 5, 4, 3, 2], </span> <span>rows: 2, </span> <span>cols: 16 </span><span>});</span>
Dengan berjalannya, anda kini boleh pergi ke http: // localhost: 5000/choosemember/221960710 (Gantikan ID acara anda sendiri) dan anda akan mempunyai RSVP rawak muncul sebagai hasilnya:
Jika anda menjalankannya lagi, RSVP baru akan muncul. Sekiranya semuanya berjalan lancar, nama -nama ini sepatutnya muncul di LCD Arduino anda!
kami memasukkan sedikit kod yang mengatakan this.repl.Inject dalam pelayan Node.js kami lebih awal. Apa ini membolehkan anda menjalankan arahan dari dalam terminal sementara pelayan Node.js anda sedang berjalan untuk menetapkan apa yang dipaparkan pada skrin LCD:
Jika kita menaip dalam lcd.print () kita boleh mendapatkan beberapa sihir yang berlaku:
baik ... mesej kami hampir sesuai sekurang -kurangnya!
Kami telah berjaya mendapat ahli yang dipilih secara rawak dari kumpulan acara yang terdapat di LCD kami! Idea yang sama ini boleh digunakan untuk sebilangan API lain di luar sana, hanya menyesuaikan panggilan permintaan dan bagaimana anda mengendalikan data. Tinggalkan mesej yang menyeramkan pada LCD untuk rakan serumah, simpan tab pada skor playoff NBA terkini atau apa sahaja yang menarik minat anda!
membuat sesuatu yang menyeronokkan berdasarkan kod ini? Tinggalkan nota dalam komen dan kongsi di sekitar, saya suka melihatnya!
Menghubungkan LCD Arduino anda ke Internet memerlukan modul Wi-Fi seperti ESP8266. Modul ini membolehkan Arduino anda menyambung ke rangkaian Wi-Fi dan membuat permintaan data mudah menggunakan HTTP. Anda perlu menyambungkan ESP8266 ke papan Arduino anda menggunakan antara muka SPI. Setelah disambungkan, anda boleh menggunakan perpustakaan ESP8266Wifi untuk menguruskan sambungan Wi-Fi dan perpustakaan ESP8266HTTPCLIENT untuk membuat permintaan HTTP. (Antara Muka Pengaturcaraan Aplikasi) adalah satu set peraturan yang membolehkan aplikasi perisian yang berbeza untuk berkomunikasi antara satu sama lain. Dalam konteks Arduino LCD, API digunakan untuk mengambil data dari Internet. Data ini boleh menjadi apa -apa dari kemas kini cuaca, harga saham, atau data tersuai anda sendiri. API mengambil data ini dan menghantarnya ke papan Arduino anda, yang kemudiannya memaparkannya pada LCD. API di LCD Arduino anda melibatkan beberapa langkah. Pertama, anda perlu menyambungkan Arduino anda ke Internet menggunakan modul Wi-Fi. Kemudian, anda perlu membuat permintaan ke API menggunakan protokol HTTP. API akan bertindak balas dengan data yang diminta, yang kemudiannya anda boleh menghuraikan dan memaparkan pada LCD anda. Perpustakaan LiquidCrystal boleh digunakan untuk menguruskan paparan LCD.
Atas ialah kandungan terperinci Memaparkan API Web di LCD Arduino menggunakan Node.js. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!