The Eyes with CHIP

The Eyes was inspired from an Arduino Project by Paco SG. This is a similar program with CHIP and CHIPOLED Shield. I made the eyes can be controlled with buttons.

The inspiration comes from: Paco SG > Arduino Projects.

Here is my own version of code:

#!/usr/bin/python

import os
import sys
import CHIP_IO.GPIO as GPIO
import time
import threading

from luma.core.interface.serial import i2c
from luma.core.render import canvas
from luma.oled.device import ssd1306

serial = i2c(port=1, address=0x3C)
device = ssd1306(serial, rotate=0)

_kanan = "XIO-P7"
_kiri  = "XIO-P4"
_atas  = "XIO-P5"
_bawah = "XIO-P6"
_mati  = "XIO-P3"

GPIO.setup(_kanan, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(_kiri,  GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(_atas,  GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(_bawah, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(_mati,  GPIO.IN, pull_up_down=GPIO.PUD_UP)

maxtinggi = device.height/2
xtengah = device.width/2
ytengah = device.height/2
delta = 5
pos = 0
besar = True

def kedip():
    with canvas(device) as draw:
      draw.rectangle((0, 30, 60, 34), outline="black", fill="white")
      draw.rectangle((62, 30, 127, 34), outline="black", fill="white")
    time.sleep(0.001)

def kedipin() :
    global pos
    threading.Timer(5, kedipin).start()
    kedip()
    lihat(pos)

def lihat(pos) :
    with canvas(device) as draw:
      tinggi = device.height/2
      lebar = device.width/2
      if pos <= 0 :
        draw.ellipse((xtengah-maxlebar-(pos*delta), ytengah-maxtinggi-(pos*delta), xtengah+(pos*delta), yteng$
        draw.ellipse((xtengah+(pos*delta), ytengah-maxtinggi, xtengah+maxlebar+(pos*delta), ytengah+maxtinggi$
      else :
        draw.ellipse((xtengah-maxlebar+(pos*delta), ytengah-maxtinggi, xtengah+(pos*delta), ytengah+maxtinggi$
        draw.ellipse((xtengah+(pos*delta), ytengah-maxtinggi+(pos*delta), xtengah+maxlebar-(pos*delta), yteng$

      if not besar :
        draw.polygon([(0, 0), (xtengah+(pos*delta), ytengah), (device.width, 0)], outline="black", fill="blac$
      #draw.ellipse((0, 0, lebar, tinggi+tinggi), outline="black", fill="white")
      #draw.ellipse((lebar, 0, lebar*2, tinggi+tinggi), outline="black", fill="white")

lihat(0)
kedipin()

while True:
  if GPIO.input(_kiri) == 0 :
    pos -= 1
    if pos < -3 : pos = 0 lihat(pos) if GPIO.input(_kanan) == 0 : pos += 1 if pos > 3 :
      pos = 0
    lihat(pos)

  if GPIO.input(_bawah) == 0 :
    kedip()
    lihat(pos)

  if GPIO.input(_atas) == 0 :
    besar = not besar
    lihat(pos)

  time.sleep(0.05)

device.clear()
GPIO.cleanup()

This code also available on github: Github / The Eyes with CHIP

CHIP OLED Radio Internet (versi 3) | Vlog

Ini masih membahas CHIP OLED Shield untuk C.H.I.P. Kali ini adalah contoh aplikasinya. Dan lagi-lagi saya membuat Radio. Bahkan ini berarti versi ke-3 untuk radio internet CHIP (baca: C.H.I.P Radio Internet versi 2). Ini karena saya menggunakan CHIP yang sama saat saya ngoprek radio internet sebelumnya.

Hanya saja, kali ini saya melakukan beberapa perbaikan, yaitu:

  1. Yang pertama sangat jelas, saya menggunakan CHIPOLED Shield. Yang berarti saya menggunakan display OLED mungil namun sangat jelas tampilannya dan hemat dayanya.
  2. Karena menggunakan CHIPOLED Shield, maka saya leluasa membuat kontrol untuk radio karena shield ini sudah dibekali dengan 5 buah tombol.
  3. Berbeda dengan sebelumnya yang menggunakan library vlc, untuk engine streaming kali ini saya menggunakan mpd/mpc. Terus terang saya mencontek cara yang digunakan oleh piradio.

Berikut adalah video-nya:

Baca selebihnya »

Membuat Tombol Shutdown di C.H.I.P

Selama ini saya menggunakan C.H.I.P secara headless yang artinya tanpa monitor, tanpa keyboard, tanpa mouse. Lalu bagaimana cara aksesnya? Bagaimana cara memprogramnya?

Untuk melakukan itu semua dibutuhkan bantuan komputer lain. Saya biasanya menggunakan laptop MacBook Air atau menggunakan Raspberry Pi dengan memanfaatkan ssh atau screen (serial).

Yang jadi masalah adalah CHIP ini sejatinya sebuah komputer juga. Dia memiliki sistem operasi yang lengkap dan kompleks juga. Untuk mematikannya tidak boleh asal cabut power atau menahan tombol reset sampai mati. Karena kalau begitu caranya, maka file system bisa corrupt. Atau bahkan merusak storage internalnya. Ini tentu berbeda dengan Arduino yang kalau mematikannya langsung dengan memutuskan power supply-nya.

Selama ini rada repot mematikan CHIP karena saya harus akses secara remote dulu (via ssh atau serial) baru kemudian menjalankan perintah shutdown. Nah hari ini saya belajar bahasa pemrograman Python dan akses GPIO. Jadi sekalian saja membuat tombol Shutdown. Caranya gampang banget. Tidak pake lama.

Pertama, buatlah tombol yang terhubung ke XIO-P7 dan GND. Jadi kalau tombol ini ditekan, maka XIO-P7 akan tersambung ke ground.

Kemudian buatlah script python test_shutdown.py. Isinya adalah sebagai berikut:

#!/usr/bin/python

import CHIP_IO.GPIO as GPIO
import subprocess

GPIO.setup("XIO-P7", GPIO.IN)


while True:
  if GPIO.input("XIO-P7") == 0:
    print "Shutting down..."
    subprocess.call(["sudo","shutdown","-h","now"])

Untuk menjalankannya harus pakai sudo karena akses ke GPIO dan perintah shutdown harus dilakukan oleh superuser.

sudo python test_shutdown.py

Oh iya, jangan lupa tambahkan bit execute supaya script bisa dijalankan tanpa mengetikkan python:

chmod +x test_shutdown.py
sudo ./test_shutdown.py

Coba tekan tombol tersebut. Apakah CHIP akan shutdown?