Tag

, , , ,

Huh… gara-gara kurang teliti, dua minggu lebih kebingungan nyari errornya. Pelajaran penting hari ini, jangan remehkan satu titik pun dalam dunia programming. FATAL!

Project ini masih ngejiplak kerjaannya orang lain. Goalnya adalah memberikan notifikasi dalam bentuk led yang berkedip ketika ada email yang belum terbaca pada server Gmail. Eksperimen ini tentu mengharuskan kita memiliki koneksi internet. Kali ini kita belum menggunakan ethernet shield, jadi masih memanfaatkan board Arduino saja. Lebih murah. Lalu dengan cara apa kita mengambil data dari internet? Kita akan memanfaatkan program Python untuk membaca RSS feed dari server Gmail.

Sehingga kita harus membuat dua program :

  • Program Python : untuk membaca RSS feed dan mengirimkannya ke Arduino
  • Sketch Arduino : untuk menampilkan notifikasi bila ada data yang diterima dari program Phyton

Rangkaiannya sederhana saja, untuk aktuatornya kita manfaatkan LED pada pin 13 yang ada pada board Arduino. Selanjutnya kita membutuhkan pushbutton untuk melakukan reset pembacaan email (komponen ini optional, jika tidak ada, maka abaikan saja). Gampang kan!

Oke, sekarang buatlah program Python. Untuk pengguna Linux, buka Applications >> Accessories >> Text Editor. Adapun scriptnya adalah sebagai berikut :

# Notifikasi Gmail dengan Arduino
# Insan Sains - Januari 2011

import httplib
import getpass
import base64
import re
import time
import serial

INTERVAL = 5   # check setiap INTERVAL menit

serv = 'mail.google.com'
path = '/mail/feed/atom'

# Tanyakan username dan password untuk autentifikasi
auth = base64.encodestring('%s:%s'%(raw_input('Username: '),getpass.getpass()))

# Dapatkan RSS feednya
def getfeed():
  print 'Checking...'
  conn = httplib.HTTPSConnection(serv)
  conn.putrequest('GET', path)
  conn.putheader('Authorization', 'Basic %s'%auth)
  conn.endheaders()
  return conn.getresponse().read()

# Dapatkan jumlah email yang belum terbaca
def count(data):
 matches = re.findall('([0-9]+)', data)
 if len(matches) == 0:
     print 'Error in parsing feed, check user name and password are correct'
     return 0
 return int(matches[0])

# Kirimkan data 
def writeSer(data):
 try:
     # Cara termudah untuk mengetahui port USB yang digunakan adalah
     # dengan melihat menu Tools >> Serial Port pada Software Arduino
     ser = serial.Serial('/dev/ttyACM0', 9600)
     ser.write(data)
 except serial.SerialException:
     print 'Error writing to serial device'
 finally:
     print data

# Lakukan pengecekan waktu interval
last_check = time.time() - INTERVAL*60

# PROGRAM UTAMA
while True:
    if time.time() - last_check < INTERVAL*60:         
          continue     
    last_check = time.time()     
    msgs = count(getfeed())     
    print msgs,'mails'     
    if msgs > 0 : writeSer(str(msgs))

Setelah selesai, save file di atas dan beri ekstensi .py, misalnya : mailduino.py (pada directory /home/insansains)

Sekarang beralih ke software Arduino dan ketikkan sketch berikut :

/*------------------------------------------------------------------
G M A I L   N O T I F I E R
Dibuat oleh   : Insan Sains
Tgl buat      : 05 Januari 2011 / 17:00 WIT
Terakhir modif: 22 Januari 2011 / 22:33 WIB
Deskripsi     : Program notifikasi bila ada pesan baru ke inbox
                Gmail. Notifikasi akan terus aktif sampai :
                - tombol ditekan, atau
                - semua email sudah dibaca
Bahasa        : English -> for the script
                Indonesia -> untuk keterangan-keterangan
------------------------------------------------------------------*/

// Deklarasi konstanta dan variable
#define signPin 13
#define buttonPin 4

boolean needBlink = false; // variable utk mengaktifkan notifikasi
int interval = 333;        // variable utk menentukan lama kedipan

// Bagian inisialiasi awal
void setup() {
  Serial.begin(9600);         // tentukan baud rate
  pinMode(signPin, OUTPUT);   // pin indikator sebagai OUTPUT
  pinMode(buttonPin, INPUT);  // pin tombol sebagai INPUT reset
}

// Program Utama
void loop() {

  // Jika ada data serial masuk berarti 
  // ada perintah aktifkan notifikasi
  // 48 adalah ASCII angka 0
  if((Serial.available() > 0) && (Serial.read() > 48)) 
    needBlink = true;

  // Jika tombol ditekan maka reset blinking LED
  if(digitalRead(buttonPin) == HIGH) 
    needBlink = false;

  if(needBlink) {
    digitalWrite(signPin, HIGH);
    delay(interval);
    digitalWrite(signPin, LOW);
    delay(interval);
  }
  else
  digitalWrite(signPin, LOW);
}

Save dengan nama file : gmail_notifier. Kemudian upload ke board Arduino.

Terakhir untuk menjalankannya buka terminal : Applications >> Accessories >> Terminal

Ketikkan : phyton /home/insansains/mailduino.py

Tadaaaaa… Jika ada email belum terbaca, maka LED Arduino akan berkedip. Selamat mencoba!