Mengamati Utilisasi CPU & Memory CHIP

Tempo hari kita sudah berhasil memanfaatkan C.H.I.P sebagai radio internet (baca: C.H.I.P Radio Internet Autostart dan Memanfaatkan C.H.I.P Sebagai Radio Internet). Dan saya cukup senang bahwa kenyataannya CHIP ini bisa jadi alarm radio juga (baca: C.H.I.P Untuk Alarm Radio Internet). Tapi saya penasaran dengan berapa utilisasi CPU dan memory CHIP ketika digunakan sebagai radio internet.

Sebagai informasi singkat, CHIP memiliki 1 CPU ARMv7 yang memiliki clock 1 GHz dan RAM 512 MB. Sementara internal storage-nya 4 GB. CHIP sudah dipersenjatai koneksi Wi-Fi dan Bluetooth 4.0. CHIP memiliki 1 micro USB OTG dan 1 USB 2.0 ukuran standard. Kalau melihat bagian bawah board, maka akan ditemukan 1 port JST yang bisa disambungkan ke baterai. Asyiknya adalah USB OTG bisa digunakan juga untuk men-charge baterai.

Sedangkan untuk urusan penampilan bisa menggunakan monitor composite via jack TRRS. Jika diinginkan untuk penyambungan ke monitor VGA atau HDMI, maka CHIP menyediakan VGA/HDMI adapter yang bisa dibeli terpisah. Untuk informasi lebih lanjut silakan merujuk ke website resmi C.H.I.P.

Karena saya tidak memiliki adapter VGA/HDMI, maka urusan pemantauan utilisasi CPU dan memori bisa dilakukan via ssh dengan menggunakan aplikasi htop. Namun solusi ini tidaklah praktis karena harus menggunakan laptop untuk melihatnya.

Jadi saya pun menyambungkan LCD 16×2 I2C yang praktis sehingga urusan penampilan tidaklah merepotkan. Untuk koneksi bisa membaca artikel saya sebelumnya (baca: C.H.I.P Dengan LCD 16×2). Untuk library LCD 16×2 saya ambil dari artikel HOW TO SETUP AN I2C LCD ON THE RASPBERRY PI. Ambil library I2C_LCD_driver.py di situ.

Lalu saya pun menuliskan code yang memanfaatkan library ini untuk menampilkan utilisasi CPU, utilisasi memory, suhu CPU dan jam. Berikut adalah code-nya:

import I2C_LCD_driver
import time
import datetime
import psutil

formatDate1 = ' %a %d/%m/%Y'
formatDate2 = '%H:%M:%S {:5}\'C'
format1 = 'CPU {:3}% MEM {:2}%'

lcd = I2C_LCD_driver.lcd()

cat = lambda file: open(file, 'r').read().strip()

while True:
  namafile = "/sys/class/hwmon/hwmon0/temp1_input"
  temp = cat(namafile)
  temp = float(temp)/1000

  lcd.display_string(format1.format(int(psutil.cpu_percent()), int(psutil.virtual_memor$
  lcd.display_string(datetime.datetime.now().strftime(formatDate2).format(temp), 2)
  time.sleep(1)

Hasilnya cukup mengasyikkan. Pemantauan bisa independen, tidak tergantung laptop. Dan rupanya CHIP sudah cukup powerfull dan stabil jika digunakan sebagai radio internet. Lihat saja hasil pemantauannya yang saya upload di instagram.

Iklan

Menjalankan Browser Chrome/Chromium Model Kiosk

Selama ini kami memang selalu mengandalkan teknologi berbasis web dalam mengembangkan sistem. Termasuk membuat pernak-perniknya seperti antrian pendaftaran, antrian poli, anjungan pendaftaran mandiri, display informasi, dll.

Nah, tulisan ini akan menjelaskan bagaimana membuat sebuah PC atau Raspberry Pi yang digunakan sebagai display antrian yang secara otomatis akan menjalankan browser fullscreen dan otomatis dieksekusi saat booting.

Tampilan antrian akan nampak fullscreen (memenuhi display) tanpa address bar. Jadi seperti kiosk atau ATM. Seperti sebuah aplikasi desktop khusus, padahal hanya menggunakan browser chrome/chromium.

Caranya simple banget kok. Pertama kita buat sebuah file di folder ~/.config/autostart/. Tentu saja ini adalah folder user aktif. Karena PC/Raspberry Pi akan dijadikan kiosk, maka user default sebaiknya punya akses langsung ke desktop tanpa perlu proses login.

Di sini contohnya kita buat file kiosk.desktop. Caranya:

nano ~/.config/autostart/kiosk.desktop

Tuliskan isinya seperti berikut ini:

[Desktop Entry]
Type=Application
Name=Kiosk Antrian
Exec=chromium-browser --start-fullscreen --app=http://alamat/?querystring
X-GNOME-Autostart-Enabled=true

Isikan parameter --app sesuai kebutuhan. Kalau diperlukan parameter bisa menggunakan cara query string layaknya di browser. Contohnya jika ingin otomatis ke gmail bisa diisikan: --app=https://gmail.com.

Parameter --start-fullscreen membuat chromium berjalan fullscreen tanpa address bar.

Coba reboot PC atau Raspi. Apakah berhasil dijalankan?

Sudah gitu aja caranya. Mudah kan?

C.H.I.P Untuk Alarm Radio Internet

Baiklah, tempo hari sudah berhasil membuat radio internet dengan CHIP (baca: C.H.I.P Radio Internet Autostart dan Memanfaatkan C.H.I.P Sebagai Radio Internet). Tapi rupanya radio internet tersebut nyala terus sepanjang malam. Malah mengganggu tidur saya, hahaha…

Jadi saya pun membuat jadwal kapan radio internet ini nyala dan kapan akan mati. Caranya gampang kok. Kalau Anda tertarik membuatnya juga, silakan melanjutkan membaca artikel ini.

1. Menyalakan Radio Internet

Tempo hari di artikel sebelumnya sudah kita buat script /etc/startvlc.sh. Jangan lupa mematikan pemanggilan script ini dari /etc/rc.local supaya tidak autostart. Karena kita akan memanggilnya berdasarkan jam tertentu, bukan saat CHIP dinyalakan.

Kunci dari penyalaannya adalah dengan memanggil script ini dari crontab. Anda bisa menentukan kapan script akan dipanggil sehingga radio internet akan menyala. Tapi ada yang perlu kita tambahkan sedikit. Mari kita edit script tersebut:

Read More »

C.H.I.P Dengan LCD 16×2

Saat masih mentok ngoprek TouchRadio, saya pun melirik C.H.I.P yang teronggok manis di meja. Tempo hari CHIP ini saya konfigurasi sebagai Radio Internet. Saat saya nyalakan ternyata radio internet-nya berjalan dengan baik. Lalu saya ingin ngoprek CHIP ini lebih lanjut. Misalnya dengan menambahkan LCD 16×2 yang kebetulan saya masih punya stock 1 buah. Jadi saya pun menyambungkannya.

Asyiknya adalah karena header CHIP sudah ada tulisannya. Jadi gampang tahu pin mana yang dituju. Berbeda dengan Raspberry Pi yang header-nya tidak ada tulisannya. Jadi harus menghitung untuk mendapatkan pin yang benar.

Oh iya, saya menggunakan LCD 16×2 dengan backpack I2C sehingga lebih praktis. Cukup menggunakan 2 pin untuk komunikasi dengan CHIP. Berikut adalah koneksinya:

LCD i2c CHIP
VCC 5V
GND GND
SDA TWI1 SDA
SCL TWI1 SCK

Tuh kan gampang nyambungnya? Selanjutnya adalah code-nya. Silakan merefer ke: CHIP I2C LCD Project. Atau langsung download contoh source code-nya: lcd_i2c.py. Setelah itu bisa kita sesuaikan dengan kemauan kita, mau dipakai untuk menampilkan apa.

Tinggal nambahin tombol utk ganti channel.

A post shared by Emanuel Setio Dewo (@setiodewo) on

Sepertinya bener-bener bisa dijadikan radio internet yang keren. Kita bisa menambahkan beberapa tombol. Misalnya tombol mode yang bisa mengganti mode tampilan: mode radio (menampilkan channel dan volume), mode monitoring (suhu, kelembaban, tanggal dan jam), mode system (menampilkan IP, suhu CPU dan utilitas CPU), dan banyak lagi.  Tombol kedua bisa digunakan untuk mengganti-ganti channel radio. Sedangkan untuk volume bisa menggunakan PAM8403 yang sudah build in potensiometer volume. Kebetulan ada stock-nya, hehehe…

Pasti bisa keren ya? Apalagi kalau diberi casing yang keren.

Kehabisan Memori Arduino Uno

Jadi ceritanya saya mau meneruskan ngoprek TouchRadio seperti yang sudah saya tuliskan sebelumnya di “Mendesain User Interface Radio FM Touchscreen.” Dan ternyata saya kehabisan memory utk program. Saya baru sadar kalau Arduino Uno memiliki memory untuk kode yang sangat kecil, cuma 32 Kb. Ups… saya jadi teringat pernah mengalami coding untuk ATMega8 dan ATTiny85/84 yang juga punya memory sangat kecil. Dan berakhir mentok juga. Memory yang kecil memang sangat membatasi kreativitas, hehehe…

Solusi paling keren ya pakai Arduino Mega yang punya memory 256 Kb. Tapi konsekuensinya ya jadi membesar board-nya. Atau menggunakan Wemos D1 Mini yang punya 4 Mb dan punya clock jauh lebih cepat. Tapi Wemos D1 Mini kekurangan pin untuk display TFT 2.8″ Touchscreen. Kecuali jika menggunakan OLED I2C yang hemat pin. Dan sebenarnya saya punya stock-nya. Tapi berarti tidak touchscreen, hiks…

Sejatinya saya memang suka pakai Wemos D1 Mini yang lebih banyak memory, lebih cepat, dan sudah punya modul WiFi. Lebih bisa dikembangkan lebih jauh, seperti pengendalian dari network, dll. Dan tentu saja karena ukurannya sangat kecil dan lebih hemat energi. Tapi ya itu tadi, kekurangan pin untuk menggunakan display TFT Touchscreen.

Di lain pihak, saya memang mengakui kalau saya tidak menyadari sejak awal coding kalau Uno ini terbatas memory-nya. Jadi saya codingnya ngasal. Maksudnya ngasal ini adalah karena saya menggunakan banyak variabel dan konstanta. Dan saya banyak menggunakan perhitungan saat menggambar sesuatu. Ambil contoh:

#define MAX_HEIGHT 240
#define MAX_WIDTH 320
#define RADIUS 20

void tombol_on(boolean pressed) {
  tft.drawCircle(MAX_WIDTH/2, MAX_HEIGHT/2, RADIUS, BLACK);
}

Mestinya kan tidak perlu dijadikan konstanta max_height, max_width, radius, offset, dan lain-lain. Dan saat menggambarkan tidak perlu melakukan operasi matematis seperti max_width/2, dll. Karena angka-angka ini sudah diketahui, absolute, atau tidak relatif. Mungkin relatif itu diperlukan jika ada animasi atau pergerakan. Tapi ini kan tidak. Jadi saya rada boros dalam coding. Gubrak…

Seharusnya bisa lebih praktis lagi. Harus dioptimasi code-nya. Tapi saya sudah terlanjur menulis panjang lebar dan malas meng-optimasinya. Hahaha…

Ah besok lagi saja optimasinya. Toh versi minimalnya sudah berhasil jalan dengan baik, hehehe…

Mendesain User Interface Radio FM Touchscreen

{Posting ini adalah lanjutan dari “TouchRadio Berhasil!”, “TouchRadio Gagal?”, “Ngoprek TouchRadio Yuk?”}

Masih ingat proyek TouchRadio tempo hari kan? Tulisan ini adalah lanjutan dari tulisan-tulisan tersebut. Kali ini fokusnya adalah di user interface. Karena saya menggunakan LCD TFT 2.8″ Touchscreen, maka saya bisa mendesain tampilan (user interface) yang lebih atraktif. Dan lagi tidak perlu menambahkan tombol-tombol fisik karena kita bisa menggunakan fitur touchscreen-nya.

Saya pun dengan leluasa bisa merombak tampilannya. Kalau tadinya sederhana saja, serba kotak, maka kali ini saya buat lebih menarik dan sebebas-bebasnya. Namun menjadi sedikit kepenuhan karena kemudian saya menambahkan modul RTC DS3231 sehingga saya bisa menampilkan tanggal dan jam. Dan tentu saja harus ada fitur untuk mencocokkan tanggal dan jam.

Namun saat ini saya sudah merasa cukup puas dengan desain user interface-nya.

Selanjutnya yang bisa dikerjakan adalah:

  1. Memindahkan semua komponen ke PCB. Sepertinya cukup pakai perfboard saja. Rasanya males bikin PCB custom, kan cuma dibikin 1 unit saja, kecuali kalau mau diproduksi masal, hehehe… Sedangkan kalau pakai breadboard tidak handal, rawan terganggu koneksinya kalau dipindah-pindah.
  2. Menambahkan fitur alarm. Saat ini sedang googling bagaimana memanfaatkan fitur Alarm1 dan Alarm2 di DS3231. Bakal seru kalau pagi-pagi dibangunin lagu-lagu dari radio.
  3. Mengubah tampilan Off menjadi lebih elegan. Rencananya sih semua tampilan radio dan jam hilang. Cuma tersisa tampilan Tanggal dan Jam yang besar memenuhi layar, tentu saja plus tombol besar untuk On.
  4. Pengen bisa menambahkan relay untuk mematikan modul PAM8403 dan Si4703 saat Off. Jadi lebih hemat daya sekaligus bisa lebih hening. Mungkin ini jadi sedikit lebih ribet secara pin Arduino Uno sudah terpakai semua. Oh iya, masih tersisa D1. Sedangkan D0 sudah terpakai untuk reset-nya Si4703. Sepertinya masih bisa menambahkan relay. Cuma mungkin relay-nya yang elektronik saja ya? Kalau yang mekanik mungkin jadi boros tempat.
  5. Mendesain box radio. Ini yang rada sulit secara keterbatasan peralatan dan material untuk membuat box/case yang keren. Tempo hari sempat membuat box dengan kotak generik tapi hasilnya kurang rapi. Mungkin untuk demo bisa menggunakan kardus ya? (Baca: Simple CardBoard Radio). Idealnya sih bikin box pakai printer 3D ya? Ahhh indahnya kalau punya printer 3D.

Ah pengen segera weekend untuk bisa ngoprek lagi. Tunggu update selanjutnya yaaa… Sampai jumpa.

NB: Kalau ada pertanyaan atau masukan silakan dituliskan di bagian komentar di bawah. Saya akan jawab jika sempat (dan niat).

TouchRadio Berhasil!

{ Ini adalah sambungan dari tulisan “TouchRadio Gagal?” dan “Ngoprek TouchRadio Yuk?” }

Dua hari ini saya ngoprek TouchRadio yang hampir gagal itu. Saya tidak boleh menyerah. Mosok begitu saja menyerah? Justru kesulitan ini menjadi tantangan bagi saya. Hehehe…

Saya pun mencoba berbagai alternatif, mulai dari mengganti komponen hingga library coding. Bahkan hampir beralih menggunakan Raspberry Pi dengan display LCD 16×2. Tapi kalau cuma menggunakan LCD 16×2 maka tujuan saya gagal karena tidak touchscreen. Dan lagi kalau menggunakan Raspberry Pi biayanya jadi terlalu mahal dan kesannya overkill, seperti membunuh nyamuk dengan bom.

Jadi pagi ini pun saya kembali ke tujuan semula, yaitu menggunakan Arduino Uno dan TFT Touchscreen. Hanya saja kali ini saya mengganti modul radio dengan Si4703. Saya merasa ada yang salah dengan modul TEA5767 karena saya mencoba 3 modul TEA5767 hasilnya tidak akur dengan TFT. Lagian penerimaannya tidak sensitif. Jadi saya mengganti dengan Si4703.

Dan ternyata feeling saya benar. Si4703 bisa bekerja sama dengan TFT Touchscreen dengan baik setelah dilakukan sedikit tweaking, yaitu dengan mengganti pin reset TFT ke pin Reset Arduino dan pin reset Si4703 ke D0 Arduino. Semua berjalan dengan sempurna. Jadi saya bisa fokus mengerjakan software-nya.

TouchRadio #ArduinoUNO #Arduino #Si4703 #TFT #TouchScreen

A post shared by Emanuel Setio Dewo (@setiodewo) on

Saya menggunakan library Si4703 standard yang tersedia di program Arduino. Memperbaiki sedikit ketidaksesuaian dan mengganti pin reset ke D0 (aslinya di D2, tapi pin D2 dipakai oleh TFT).

Saat ini saya sudah cukup senang dengan hasilnya. Coba lihat video di instagram di atas ya. Nampaknya cukup handal. Masih ada 1 PR, yaitu menyambungkan ke modul RTC. Ah besok lagi deh. Sekarang sudah kelaparan. Rupanya belum makan dari tadi. Dan untuk merayakan keberhasilan ini, saya pun memesan pizza, hahaha…