Kamis, 26 Januari 2017

Codingan python untuk camera Raspberry agar terkoneksi ke web server

Codingan python untuk camera Raspberry agar terkoneksi ke web server
bahan :
1. Siapkan camera raspberry pi (saya menggunakan camera v2 dan raspberry pi 3)
2. Siapkan Hardware arduino

Langkah yang saya buat hanya akan berjalan jika kita sudah update raspberry dan instal web server (lihat di postingan saya sebelumnya)

pertama kita instal mysqldb, agar python dapat terhubung ke database. Ikuti perintah ini :

sudo apt-get install python-mysqldb

Setelah itu kita hubungkan arduino ke raspberry dengan menggunakan kabel serial, lalu jalankan codingan python nya, copy paste script berikut kemudian simpan dengan format .py(lat1.py) :

import serial

import MySQLdb
from time import gmtime, strftime
from random import randint
from picamera import PiCamera
from time import sleep


camera = PiCamera()
camera.rotation = 180

db = MySQLdb.connect("localhost","root","123456","db_project")
cursor = db.cursor()

def mtrim(s):
    if s.endswith(" "): s = s[:-1]
    if s.startswith(" "): s = s[1:]
    return s


read_serial0=""
ser = serial.Serial('/dev/ttyACM1',9600)
#ser = serial.Serial('COM3',9600)

s = [0,1]
while True:
 read_serial=ser.readline()
 read_serial=mtrim(read_serial)
 c=read_serial.split("#")
 print (read_serial)
 print (str(len(c)))
 sleep(5)
 if len(c) >2:
     if read_serial!=read_serial0:
         
         read_serial0=read_serial
         idx=c[0]
         ruang=c[1]
         
         print ("idx=",idx)
         print ("ruang=",ruang)
         
         tgl=strftime("%Y-%m-%d", gmtime())
         jam=strftime("%H:%M:%S", gmtime())

         stgl=strftime("%Y%m%d", gmtime())
         sjam=strftime("%H%M%S", gmtime())

         img=   stgl+sjam+".jpg";

         ###########################################

         try:
             camera.start_preview()

             sleep(3)
             camera.capture('/var/www/html/project/ypathfile/'+img)
             sleep(1)
             camera.stop_preview()
         except:
             print("-")
         ###########################################
         sql='INSERT INTO `tb_history` (`tanggal`, `jam`, `ruang`, `ksj`, `image`, `note`) VALUES ("%s", "%s", "%s", "%s", "%s", "%s")' % (tgl, jam, ruang, idx, img,'-')
         try:
           cursor.execute(sql)
           db.commit()
         except:
           db.rollback()
          
     
         print("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++")


Setelah selesai di save lalu jalankan pythonnya, disini saya misalkan kita menyimpan lat1.py di /home/pi
Buka Terminal 
masuk direktori /home/pi dengan cara :
cd /home/pi 
/home/pi# python lat1.py

jika ada error seperti di bawah ini 

 File "SJ.py", line 23, in <module>
    ser = serial.Serial('/dev/ttyACM1',9600)
  File "/usr/lib/python2.7/dist-packages/serial/serialutil.py", line 261, in __init__
    self.open()
  File "/usr/lib/python2.7/dist-packages/serial/serialposix.py", line 278, in open
    raise SerialException("could not open port %s: %s" % (self._port, msg))
serial.serialutil.SerialException: could not open port /dev/ttyACM1: [Errno 2] No such file or directory: '/dev/ttyACM1'

perhatikan pada baris terakhir, disitu ada '/dev/ttyACM1', berarti kabel serial arduino tidak terbaca oleh python. Untuk mengatasinya kita kembali ke terminal & ketikkan perintah berikut :

ls /dev/tty*  (untuk mengetahui serial port yang terbaca oleh python)

/dev/tty    /dev/tty19 /dev/tty3   /dev/tty40 /dev/tty51  /dev/tty62
/dev/tty0   /dev/tty2 /dev/tty30  /dev/tty41 /dev/tty52  /dev/tty63
/dev/tty1   /dev/tty20 /dev/tty31  /dev/tty42 /dev/tty53  /dev/tty7
/dev/tty10  /dev/tty21 /dev/tty32  /dev/tty43 /dev/tty54  /dev/tty8
/dev/tty11  /dev/tty22 /dev/tty33  /dev/tty44 /dev/tty55  /dev/tty9
/dev/tty12  /dev/tty23 /dev/tty34  /dev/tty45 /dev/tty56  /dev/ttyACM0
/dev/tty13  /dev/tty24 /dev/tty35  /dev/tty46 /dev/tty57  /dev/ttyAMA0
/dev/tty14  /dev/tty25 /dev/tty36  /dev/tty47 /dev/tty58  /dev/ttyprintk
/dev/tty15  /dev/tty26 /dev/tty37  /dev/tty48 /dev/tty59
/dev/tty16  /dev/tty27 /dev/tty38  /dev/tty49 /dev/tty6
/dev/tty17  /dev/tty28 /dev/tty39  /dev/tty5   /dev/tty60
/dev/tty18  /dev/tty29 /dev/tty4   /dev/tty50 /dev/tty61

yang terbaca oleh python adalah /dev/ttyACM0, jadi pada script python kita harus menggantinya, 

ser = serial.Serial('/dev/ttyACM1',9600) ganti menjadi ser = serial.Serial('/dev/ttyACM0',9600)

selesai, lalu jalankan kembali pythonnya, maka python akan mulai mengambil gambar dan hasilnya akan langsung dikirim ke web server.
Hasil/gambarnya juga akan tersimpan secara otomatis di /var/www/html/project/ypathfile (lihat script python).

2 komentar:

  1. mau tanya, kenapa raspi dihubungkan dengan arduino?

    BalasHapus
    Balasan
    1. pada project yang saya buat ada fingerprint, fingerprint tsb disett terlebih dahulu di arduino, lalu dari arduino kirim data serial ke raspberry

      Hapus