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

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…

Jam digital kecil. Tinggal hubungkan ke baterai. Bisa didesain casing sesuai kreativitas.

Jam Digital Kecil

Sudah beberapa bulan yang lalu saya iseng order jam digital dari dx.com, tapi baru saya coba minggu lalu. Saya tertarik karena bentuknya yang kecil dan telanjang alias tidak pakai casing/box. Jadi bisa kita modifikasi sendiri sesuai kreativitas. Oh iya, walau pun bentuknya kecil, jam ini punya beberapa fitur seperti penampilan tanggal, suhu sekitar dan baterai RTC untuk penghitungan waktu, sehingga walau pun sumber daya mati, jam ini tetap menghitung waktu secara internal.

Jadi ingat sudah beberapa kali membuat jam digital dengan Arduino dan Embedded Arduino. Sayangnya sekarang sedang malas ngoprek elektronika, hehehe… Berikut foto-foto iseng jam digital tersebut:

Jadi kepikiran untuk bikin pin yang ada jamnya. Atau dijahit di tas saja? Tapi kalau di bandara bisa dikira bom waktu ya? Hehehe… Anda punya ide lain?

Masih Bersemangat Ngoprek

Ketika terjadi hiruk pikuk saat launching Arduino Due saya hanya bisa berdecak kagum. Maklum, teknologi & fitur yang diusungnya jauh lebih powerful dibanding board Arduino sebelumnya. Arduino Due termasuk sesuatu yang baru yang sedikit keluar dari jalur Arduino sebelumnya karena Due menggunakan prosesor dengan arsitektur ARM sedangkan sebelumnya menggunakan AVR.

Dengan digunakannya arsitektur ARM, maka Arduino Due jadi head-to-head dengan Raspberry Pi yang telah lebih dulu mengguncang dunia sebagai PC paling murah sedunia. Walau pun sebenarnya keduanya jelas memiliki target pengguna yang berbeda, dimana Arduino bermain di dunia microcontroller sedangkan Raspberry Pi bermain di microcomputer. Pada kenyataannya keduanya bisa digunakan untuk controller dan computer dengan trik khusus.

Menurut saya langkah Arduino Due ini sudah baik walau pun keluar dari pakem Arduino sebelumnya karena transisi AVR ke ARM ini difasilitasi dengan baik oleh tim Arduino (salut!!!). Karena bisa jadi dunia microcontroller memang membutuhkan tenaga dan kemampuan yang lebih besar dari yang telah ada sekarang ini. Contohnya adalah saat Google mengeluarkan ADK, Sparkfun dengan IOIO, atau Arduino dengan ADK. Semuanya menjadikan MCU (microcontroller unit) lebih mudah diakses dengan piranti lain, khususnya piranti dengan sistem operasi Android.

Tidak dipungkiri kalau itu semua membutuhkan tenaga yang besar yang lebih dari pada yang bisa didapat dari MCU model AVR. Dan ARM adalah salah satu solusi termurah. Bisa saja kita menggunakan prosesor x86 dari Intel atau AMD, tetapi itu seperti membasmi nyamuk dengan bom.

Di tengah semakin cepatnya perkembangan teknologi saat ini, dengan segenap kerendahan hati, saya sedang merayap mempelajari MCU dengan basis arsitektur AVR. Dimulai dengan keluarga ATtiny yang sederhana sampai ke ATmega yang menengah. Sedangkan board Raspberry Pi masih tergeletak tak terurus menunggu dioprek.

Terus terang saya merasa seakan sedang mengejar ketertinggalan saya. Dan saya agak menyesal karena saat kuliah elektro dulu sering bolos dan tidak memperhatikan atau mempelajari materi kuliah dengan sungguh-sungguh. Di lain pihak, jaman saya kuliah memang masih serba sulit, baik dari segi kurangnya literatur, kurangnya komunitas elektronika, terbatasnya koneksi internet/komunikasi, dan yang pasti karena kurangnya dana untuk membiayai eksperimen.

Syukurlah saat ini semua kendala itu sudah lenyap. Dan saya bersyukur masih bisa menikmati belajar itu semua dengan semangat yang masih menyala. Kendala saya saat ini hanyalah waktu, usia dan menurunnya kemampuan (*hiks*). Namun itu semua tetap tidak mengalahkan semangat saya.

Ini curhatku, mana curhatmu?