Dalam melakukan debugging pada Arduino, kita tentu sering menambahkan "scripts": { 6 kemudian melihat hasilnya pada serial monitor. Namun, bagaimana caranya agar semua data yang ada pada serial monitor bisa ditampilkan pada sebuah website? Beruntungnya sebuah projek serialport.io mampu menjawab permasalahan ini, yaitu hanya dengan menggunakan javascript kita dapat mengakuisisi data serial pada Arduino. Gambar di atas merupakan contoh website yang akan kita buat pada tutorial ini. Show
Apa yang saya gunakan?
IndexSebelum kita memulai, pastikan di komputer kita telah terpasang NodeJS karena untuk menggunakan package SerialPort kita harus memasang NodeJS terlebih dahulu. Cara Install Node.js dan NPM di Ubuntu 18.04 - Niagahoster BlogAnda menggunakan Linux Ubuntu dan ingin menginstall Node.js dan NPM? Tenang saja karena caranya cukup mudah. Setidaknya…www.niagahoster.co.id
{ Setelah dijalankan, maka akan muncul hasil seperti di atas. Hasil tersebut tidak mutlak jadi pasti akan berbeda beda setiap PC. Bila kita perhatikan, kini di dalam folder yang telah dibuat terdapat sebuah file bernama package.json. Isi file tersebut tidak jauh berbeda dengan apa yang muncul setelah menjalankan perintah "scripts": { 7Instalasi packagePastikan pada folder tersebut sudah terdapat file package.json sebelum melakukan instalasi. Untuk memulai instalasi, jalankan perintah berikut pada terminal npm i --save express express-http-to-https serialport Perintah di atas akan mengunduh package yang dibutuhkan melalui internet jadi pastikan komputer telah terkoneksi ke jaringan internet. Setelah selesai, maka akan muncul folder baru bernama node_modules yang berisikan package yang kita butuhkan serta pada file package.json ada tambahan keterangan bagian dependencies. Pada gambar tersebut, di bagian dependencies kita bisa lihat package apa saja yang telah terpasang dan versi dari masing masing package. Disini kita telah berhasil melakukan instalasi node package. Berikutnya buka file package.json, pada baris "scripts": { 9 ubah menjadi berikut:"scripts": { Simpan perubahan file tersebut. Selanjutnya, kita siapkan data serial yang akan dikirim melalui Arduino. Berhubung disini kita hanya membuat prototipe, jadi kita cukup membuat data random untuk memastikan apakah data tersebut dapat diterima.
#include<time.h>void setup() {
Membuat server sederhana Dikarenakan kita akan membuat website untuk menerima data serial, kita membutuhkan server. Nantinya kita akan membuat REST API sederhana untuk mengambil data serial tersebut. Disini kita menggunakan expressJS yang sebelumnya sudah kita install.
const express = require('express')
Kita telah membuat server sederhana menggunakan ExpressJS. Berikut adalah penjelasan dari tiap baris program sebelumnya:
app.use(express.static(__dirname)) Berfungsi untuk menentukan dimana file server.js dijalankan. Ini akan kita gunakan untuk memudahkan kita melacak lokasi file HTML. app.get('/', (req, res) => res.send('Hello World!')) Kita menentukan respon yang diberikan server ketika mengakses url #include<time.h>void setup() {1 atau #include<time.h>void setup() {6 app.listen(port, () => console.log(`Listening on port ${port}!`)) Menjalankan server pada port yang telah ditentukan. Pembacaan data serial dengan SerialPort.ioSelanjutnya kita lakukan pembacaan data serial menggunakan package yang sudah kita install sebelumnya.
const express = require('express'), Ketika kita hendak menggunakan library serialport kita langsung menambahkan parameter nama port yang terdeteksi dan baudrate yang digunakan. Nama port yang terdeteksi serta baudrate disesuaikan dengan yang ada pada Arduino IDE Selanjutnya mari kita tambahkan program untuk membaca data serial pada baris sebelum #include<time.h>void setup() {7 var stream Program di atas merupakan gabungan dari library serialport dan expressJS. Pertama kita membuat variabel bernama #include<time.h>void setup() {8 kemudian kita membuat route baru menggunakan #include<time.h>void setup() {9 yaitu dimana ketika mengakses const express = require('express')0 program di dalamnya akan dijalankan. const express = require('express')1 digunakan untuk meminimalisir terjadinya error ketika pengambilan data serial. const express = require('express')2 merupakan fungsi untuk mengakuisisi data serial dari Arduino yang mana data yang diterima akan disimpan pada variabel data. npm i --save express express-http-to-https serialport 0Proses di atas berfungsi untuk melakukan parsing data serial yang berupa byte. Sebab untuk bisa diolah pada website maka data tersebut perlu diubah ke format yang dapat dibaca oleh website, salah satunya JSON (JavaScript Object Notation) Mengenal Format JSON - CodePolitan.comJSON - singkatan untuk JavaScript Object Notation - adalah sebuah format untuk berbagi data. Seperti dapat kita lihat…www.codepolitan.com const express = require('express')3 ini merupakan sebuah fungsi wajib setiap kali membuat route pada ExpressJS, const express = require('express')4 merupakan response yang diberikan oleh server. Biasanya berupa status, apakah 404 Not found atau 200 Ok atau bisa juga berupa HTML, teks maupun JSON. Dikarenakan data yang dikirim adalah JSON maka kita gunakan const express = require('express')5
Bila kita perhatikan di atas, data yang tersimpan masih berupa byte. Sekarang kita ubah data tersebut agar lebih mudah terbaca dengan mengubah program berikut: npm i --save express express-http-to-https serialport 1Kita telah berhasil mengakuisisi data serial dan menampilkannya pada website! Membuat halaman index.html Wokay, kini kita tinggal menampilkan semua data yang ada pada website. Disini kita hanya memainkan HTML/CSS dan sedikit javascript untuk mengakuisisi data.
npm i --save express express-http-to-https serialport 2
app.get('/', (req, res) => res.send('Hello World!')) Menjadi: npm i --save express express-http-to-https serialport 4
Bila kita perhatikan, data di atas merupakan data yang kita atur secara default menggunakan HTML. Lalu kanvas sebelah kanan akan kita isi dengan grafik yang akan dijelaskan di bagian berikutnya. Untuk mendapatkan data serial, kita perlu menambahkan javascript pada file index.html yaitu menambahkan baris berikut: npm i --save express express-http-to-https serialport 5TokenisasiDisini kita sudah berhasil mengambil data serial, namun sebelumnya data yang ditampilkan tidaklah sempurna dan terpotong-potong. Bagaimana cara mengatasinya? Dikarenakan kita hanya membutuhkan angka saja, maka kita hilangkan semua keterangan yang ada. Sehingga bila kita lihat lagi program di Arduino kita menjadi seperti berikut: npm i --save express express-http-to-https serialport 6Masalah kedua muncul, bagaimana kita membedakan mana data pertama, kedua, dan ketiga dari data tersebut? Disini kita mengenal sebuah metode bernama tokenizing atau tokenisasi. Singkatnya, metode tokenisasi membagi teks berdasarkan tanda tertentu. Contoh: npm i --save express express-http-to-https serialport 7Apabila kita melakukan tokenisasi berdasarkan tanda ‘?’, maka kita dapat membagi teks tersebut menjadi:
TokenisasiDari Wikipedia bahasa Indonesia, ensiklopedia bebas Loncat ke navigasi Loncat ke pencarian Artikel ini perlu…id.wikipedia.org Maka kita perlu mengubah format data serial yang dikirim dari Arduino menjadi berikut: npm i --save express express-http-to-https serialport 8Kemudian kita tambah program tokenizing pada server.js dengan mengubah baris berikut: npm i --save express express-http-to-https serialport 9
Pada bagian ini kita akan memvisualisasikan dari data yang didapatkan dalam bentuk grafik menggunakan chartJS.
"scripts": { 0
"scripts": { 1
Mari kita pahami maksud dari program sebelumnya: "scripts": { 2Disini kita melakukan DOM (Document Object Manipulation) dengan mengambil tag HTML dengan ID const express = require('express')9. app.use(express.static(__dirname)) 0 maksudnya adalah karena kita akan menggambar grafik 2 dimensi di app.use(express.static(__dirname)) 1 maka method ini kita perlukan."scripts": { 3Kita membuat objek dari class app.use(express.static(__dirname)) 2 yang di dalamnya terdapat parameter yang kita isi dengan variabel app.use(express.static(__dirname)) 3 yang sudah kita buat sebelumnya. Disini kita akan menggunakan tag HTML dengan ID const express = require('express')9 untuk mengambar grafik. Pada parameter kedua berisikan objek yang terdapat key dan value, berikut adalah penjelasannya:
Selanjutnya, kita akan memasukkan data yang telah kita terima dan menggambarkannya pada grafik. Tambahkan program javascript berikut setelah fungsi app.get('/', (req, res) => res.send('Hello World!')) 9 pada file index.html:"scripts": { 4
"scripts": { 5
Kini kita telah berhasil membaca data serial dan menampilkannya di website, metode yang digunakan disini hanya untuk pelajaran semata. Memang protokol HTTP dengan metode GET & POST tidak cocok untuk digunakan mengakuisisi data dengan interval ≤ 1 detik. Alternatif yang lebih baik menggunakan websocket atau MQTT. Namun, untuk saat ini penulis masih memelajari kedua protokol tersebut. |