Sunday, December 2, 2018

kirim data sensor secara wireless dengan module RF 433MHz

Pendahuluan

Jika kita mempunyai sebuah project dimana terdapat sebuah sensor misal sensor IR di posisi tertentu dan ingin mengambil datanya, maka kita akan menghubungkan sensor IR tersebut dengan kabel ke sebuah kontroller yang kita gunakan, katakanlah Arduino Uno.

Lalu  bagaimana jika kita menggunakan module RF 433MHz untuk mengirimkan data sensor IR tersebut ke Arduino Uno tanpa kabel alias wireless. bagaimana caranya ? baik langsung saja kita mulai step by step.

Module RF 433MHz

Merupakan modul RF yang murah dengan kemampuan yang saya pikir diluar harganya yang murah, kita bisa kirim data secara wireless dengan jangkauan yang cukup jauh. modul ini terdiri dari dua perangkat yaitu Receiver atau Penerima dan Transmiter atau Pemancar, pada bagian Transmiter terdapat 3 Pin yaitu VCC, GND dan Data, dan bagian Receiver terdapat 4 Pin, Vcc, GND, dan dua Pin Data. cukup sederhana bukan.

cara kerja dari module RF ini secara singkat yaitu mengirimkan data sesuai dengan data yang ada di bagian pemancar / transmiter. jika kita kirim data '1' maka di sisi receiver akan menerima data '1' dan sebaliknya. secara teknik module RF ini mengunakan modulasi ASK atau Amplitudo Shift Keying.

Skematik

kita mulai dengan skematik Sensor IR terhubung ke bagian pemancar. kita cukup hubungkan bagian sinyal sensor ke bagian Data Module RF 433MHz dan VCC dan GND pada pemancar dan sensor di berikan VCC dan GND. perhatikan gambar berikut ini :



sekarang kita gunakan Arduino Uno sebagai penerima data sensor secara wireless, kita hubungkan bagian penerima modul 433MHz ke Pin yang kita gunakan sebagai input. katakanlah Pin 12. seperti rangkaian dibawah ini :

dapat diperhatikan diatas sinyal di hubungkan ke PIN 12 sehingga nantinya kita akan memprogram Arduino untuk menerima INputan di PIn 1.

Source Code Arduino

untuk program Arduino Uno, kita gunakan PIN 12 sebagai Input dan disetting Pull Up, artinya jika input dari sensor impedansi Tinggi maka input akan HIGH secara singkat tanpa input default yang dibaca akan HIGH. 

program akan membaca Pin 12 dan jika LOW maka LED akan menyala, disini saya menggunakan Aktif High untuk LED dan sensor jika ada halangan akan mengirimkan logika LOW. artinya jika ada halangan maka LED akan menyala.

sebaliknya jika input HIGH atau tidak ada Halangan makan LED akan Off atau Padam. untuk lebih jelasnya dapat dilihat Source Code berikut ini :



void setup() {
  pinMode(12, INPUT_PULLUP);
  pinMode(13, OUTPUT);

}

void loop() {
  int sensorVal = digitalRead(12);

  if (sensorVal == HIGH) {
    digitalWrite(13, LOW);
  } else {
    digitalWrite(13, HIGH);
  }
}

teman-teman upload kode diatas di Arduino dan Test. jika ada pertanyaan bisa isi komentar dibawah ini. semoga bermanfaat dan Terima Kasih

Saturday, December 1, 2018

Robot Beroda dengan Control dari Bluetooth

Pendahuluan

kali ini saya berbagi pengalaman tentang membuat Robot Beroda yang dikendalikan via Bluetooth dari SmartPhone Android. jadi semacan RC Robot, namun remotenya menggunakan SmartPhone Android  cukup menarik bukan.. untuk mekanik Robot, saya menggunakan modul RObot Car yang siap dirakit, jadi fokus tutorial disini lebih Skematik Rangkaian dan Source Code  Arduinonya itu sendiri. mari ikuti tutorialnya :)

Project ini menggunakan Arduino, dimana terdapat modul Bluetooth HC05 yang terhubung ke Arduino melalui Pin Rx dan Tx dan berkomunikasi secara serial. atau bisa juga ke pin mana saja, karena di Arduino sudah terdapat software Serial. sehingga kita bisa menggunakan pin-pin tertentu selain pin Rx dan Tx untuk jadi pin serial. 

Robot Beroda dengan controller Arduino tersebut dikendalikan secara wireless melalui Bluetooh dari smartphone Android. untuk lebih jelasnya berikut skematik diagramnya :


bahan-bahan yang diperlukan untuk membuat RC Robot Beroda. yaitu : Baterai 9V, Arduino Uno, Modul Bluetooth HC 05, Driver Motor dan mekanik Robot Car yang sudah tersedia.

Cara Kerja

Robot Beroda akan bergerak sesuai dengan instruksi dari SmartPhone Android, untuk maju, belok kiri, belok kanan, mundur dan berhenti. Android mengirim perintah melalui Bluetooth dengan kode-kode tertentu. kode-kode tersebut diterima Arduino kemudian diterjemahkan menjadi perintah yang akan dieskusi apakah itu, gerak maju, belok kiri, belok kanan, mundur atau berhenti.

Program Android

Program Android disini digunakan sebagai pengirim kode-kode melalui Bluetooth. terdapat lima Tombol, yaitu maju, kanan, kiri, mundur dan stop, setiap tombol ketika ditekan akan mengirimkan kode tertentu. untuk kodenya yaitu, tombol maju mengirimkan kode '0', tombol kiri akan mengirimkan kode '1', tombol kanan jika ditekan akan mengirimkan kode '2', tombol kiri mengirimkan kode '3' dan terakhir tombol diam akan mengirimkan kode '4'. berikut Layout dari program Androidnya :


untuk program Androidnya tidak saya bahas disini, teman-teman cukup download file APK yang sudah saya sediakan pada link berikut : link program Android

Source Code Arduino

Arduino Uno bertugas untuk menerima input kode yang dikirim oleh SmartPhone Android, kemudian menerjemahkanya ke perintah-perintah tertentu. untuk menerima kode yang di kirimkan Android, Arduino cukup mendengarkan input Serial dari modul Bluetooth HC 05. karena kode yang dikirimkan oleh Android akan diteruskan oleh modul Bluetooth melalui komunikasi serial.

apabila menerima input dari komunikasi serial kode tertentu. kode tersebut langsung di-check, apakah 0, 1, 2, 3 atau 4 dan setiap kode akan menjalan function yang sudah dibuat yaitu function maju(), function kiri(), function kanan(), function mundur() dan function diam(). untuk lebih jelasnya bisa melihat source code berikut ini :



#include <SoftwareSerial.h>

int ma1 = 12;
int ma2 = 11;
int mb1 = 10;
int mb2 = 9;

char inbyte = 0;

SoftwareSerial bT (9, 8); //RX, TX

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  bT.begin(9600);
  pinMode(ma1, OUTPUT);
  pinMode(ma2, OUTPUT);
  pinMode(mb1, OUTPUT);
  pinMode(mb2, OUTPUT);

  digitalWrite(ma1, LOW);
  digitalWrite(ma2, LOW);
  digitalWrite(mb1, LOW);
  digitalWrite(mb2, LOW);

}

void loop() {
  // put your main code here, to run repeatedly:

  if (bT.available() > 0)
  {
    inbyte = bT.read();
    if (inbyte == '0'){
           maju();
    }
    else if (inbyte == '1'){     
          kiri();
    }
    else if (inbyte == '2'){     
          kanan();
    }
    else if (inbyte == '3'){     
          mundur();
    }
    else if (inbyte == '4'){
      diam();
    }
    
  }

}

void maju(){
digitalWrite(ma1, HIGH);
digitalWrite(ma2, LOW);
digitalWrite(mb1, HIGH);
digitalWrite(mb2, LOW);
}

void kiri(){
digitalWrite(ma1, HIGH);
digitalWrite(ma2, LOW);
digitalWrite(mb1, LOW);
digitalWrite(mb2, HIGH);
}

void kanan(){
digitalWrite(ma1, LOW);
digitalWrite(ma2, HIGH);
digitalWrite(mb1, HIGH);
digitalWrite(mb2, LOW);
}

void mundur(){
digitalWrite(ma1, LOW);
digitalWrite(ma2, HIGH);
digitalWrite(mb1, LOW);
digitalWrite(mb2, HIGH);
}

void diam(){
digitalWrite(ma1, LOW);
digitalWrite(ma2, LOW);
digitalWrite(mb1, LOW);
digitalWrite(mb2, LOW);
}

untuk gerak maju, kiri, kanan, mundur. teman-teman bisa kalibrasi dengan mengetes function terlebih dahulu, jalankan satu per satu function maju, kiri, kanan, mundur dan diam. jika ada kesalahan koreksi. lalu jika sudah benar semua baru tambahkan source diatas selain funtion maju, kiri, kanan, mundur dan diam.

setelah selesai upload dan test dengan program Android. saya sudah coba dan berkerja dengan baik. jika ada pertanyaan yang kurang jelas bisa tanyakan di kolom komentar. terima kasih semoga bisa bermanfaat.



Thursday, November 22, 2018

Membuat Joule Thief Sendiri

Pendahuluan

kalau dilihat dari namanya memang agak lucu, "Joule" sendiri merupakan satuan untuk energi dan kata "Thief" sendiri dari bahasa inggris yaitu pencuri, jadi kalau digabung kurang lebih Pencuri Energi. sebenarnya bukan Pencuri Energi, melainkan kita bisa menggunakan tegangan yang rendah misalnya pada baterai yang sudah hampir mati dengan tegangan dibawah 1 V untuk mendrive Lampu LED super Bright, Wah hebat bukan. mari kita lihat cara kerja dan rangkaiannya.

Cara Kerja 

joule thief

untuk mengetahui cara kerja Joule Thief ada baiknya kita memperhatikan skematik Joule Thief diatas. seperti yang ada pada gambar terdapat baterai, resistor, dua kumparan yang dililitan pada Toroida, Transistor NPN dan sebuah LED.

ketika pertama kali power Baterai ON, maka Arus akan melalui resistor kemudian melewati kumparan secondary dan menuju ke basis emitor, lalu apa yang terjadi, Transistor akan ON dan arus akan melalui kumparan primer menuju kolektor dan emiter. lampu LED masih belum menyala. karen arus melalui kumparan primer maka akan menginduksi kumparan secondary memberikan tegangan positif, sehingga arus basis akan semakin besar dan arus melalui kumparan primer juga semakin besar.

pada saat arus semakin besar melalui kumparan primer menuju kolektor dan emiter. supply arus menuju ke basis akan semakin berkurang karena arus short melalui kolektor emiter, akibatnya transistor akan cut off. ketika transistor cut off, medan magnet pada toroid akan collapse, yang mengakibatkan tegangan induksi yang cukup tinggi pada kumparan primer dengan arah terbalik sehingga dapat menyalakan lampu LED. ketika medan magnet kembali ke nol. proses akan berulang kembali dari awal.

Proses Pembuatan Joule Thief

bahan-bahan yang perlu disiapkan yaitu : baterai, resistor 1k ohm, transistor NPN, dua kabel untuk kumparan, dan Toroida.

pertama-tama lilitan dua kabel pada kumparan toroid sehingga kabel akan habis dililit ke toroid. anggap ada kabel merah dan kabel hijau. hubungkan kabel merah awal lilitan ke kabel hijau akhir lilitan bersama-sama hubungkan ke bagian positif baterai, kemudian kabel  hijau awal lilitan hubungkan ke dihubungkan ke resistor dan resistor ke basis transistor. kabel merah akhir lilitan dihubungkan ke kolektor transistor dan positif lampu LED, kemudian hubungkan emiter dan negatif LED ke Negatif Baterai. seperti gambar dibawah ini :

joule thief

sangat mudah bukan untuk membuat joule Thief. sehingga kita bisa menggunakan baterai yang sudah habis untuk membuat sumber cahaya dengan lampu LED. sekian tutorial tentang Joule Thief. semoga bermanfaat. terima kasih

Membuat Tulisan Berjalan dengan Border pada P10 di Arduino Uno

Pendahuluan

kali ini saya akan membuat tutorial pemrograman Arduino, yaitu membuat tulisan berjalan atau scrolling text yang memiliki border. tulisan ini dibuat dalam rangka ketika saya sendiri awalnya cukup kesulitan dalam membuat tulisan teks berjalan dengan border, dengan mengotak atik fungsi yang sudah ada pada lib DMD panel P10 yang dikeluarkan oleh freetronics. namun kenyataannya tidak perlu mengotak atik fungsi yang sudah ada, cukup dengan melakukan algoritma yang sederhana. 

1. Panel P10

Panel P10 merupakan dot matriks yang dapat digunakana secara praktrs. terdiri dari 32 kolom dan 16 baris. sudah terdapat kontroller didalamnya dan berkomunikasi dengan SPI ke Arduino Uno. berikut merupakan interface Arduino ke Panel P10:


2. Algorima Pemrograman

untuk algoritma pemrograman yaitu dengan mengambar border yaitu dengan fungsi drawBox. kemudian jika kita menggunakan fungsi drawMarquee dan stepMarquee, maka border akan hilang. sehingga perlu cara lain untuk membuat teks berjalan. yaitu cukup sederhana dengan menggunakan fungsi drawString untuk menulis array char ke panel p10. 

drawString kita buat dimulai dari koordinat terakhir yaitu X =  63, koordinat Y disesuaikan dengan font, pada kasus saya yang menggunakan system font 5 x7 menggunakan Y = 3 dan gambar border kembali dengan drawBox,  beri delay secukupnya (100ms) kemudian ulangi sebanyak jumlah lebar karakter kali, dengan koordinat X dikurangi satu setiap looping, nilai setiap lebar karakter bisa kita dapatkan dari fungsi charWidth dalam dmd. berikut source lengkapnya:



#include <SPI.h>        
#include <DMD.h>        
#include <TimerOne.h>   
#include "SystemFont5x7.h"
#include "Arial_black_16.h"

//Fire up the DMD library as dmd
#define DISPLAYS_ACROSS 2
#define DISPLAYS_DOWN 1
DMD dmd(DISPLAYS_ACROSS, DISPLAYS_DOWN);

void ScanDMD()
{ 
 dmd.scanDisplayBySPI();
}


void setup(void)
{  
  Timer1.initialize( 5000 );           
  Timer1.attachInterrupt( ScanDMD );     
  dmd.clearScreen( true );  
}


void loop(void)
{ 
  dmd.clearScreen( true );
 // dmd.selectFont(Arial_Black_16);
  dmd.selectFont(System5x7);

char teks[] = "Scrolling Text";
int lebarTeks = 0;
for (int i = 0; i < sizeof(teks)+1; i++) {
  lebarTeks += dmd.charWidth(teks[i]) + 1;
}
dmd.drawBox(  0,  0, (32*DISPLAYS_ACROSS)-1, (16*DISPLAYS_DOWN)-1, GRAPHICS_NORMAL );
for (int i = 0; i<lebarTeks; i++) {
  dmd.drawString (63-i, 3, teks, sizeof(teks), GRAPHICS_NORMAL);
  dmd.drawBox(  0,  0, (32*DISPLAYS_ACROSS)-1, (16*DISPLAYS_DOWN)-1, GRAPHICS_NORMAL );
  delay(100);
} 
  
}

perlu di ingat library yang digunakan yaitu DMD dan Timerone. dan tempatkan pada folder library di folder Arduino.jika teman teman merasa kesulitan dalam mendapatkan file pendukung library diatas, kamu bisa dapatkan pada link berikut:

http://imamfisika.blogspot.com/2016/12/file-pendukung-pelatihan-smkn-29.html

berikut video hasilnya :


semoga bisa bermanfaat, jika ada pertanyaan bisa tinggalkan komentar dibawah ini. Terima Kasih.

Thursday, November 15, 2018

Menjalankan Crhomium otomatis saat boot

Pendahuluan

Terkadang kita perlu untuk menjalankan aplikasi Chromium saat pertama kali Raspberry Pi boot up, atau pertama kali hidup. ini biasanya digunakan apabila kita mempunyai program web based dan ingin running secara full screen saat pertama kali Raspberry Pi hidup, sehingga user tidak perlu menjalankan program secara manual. lalu bagaimana cara konfigurasi yang diperlukan pada Raspberry Pi. caranya cukup mudah.

yang diperlukan yaitu dengan mengedit sebuah file bernama .bashrc yang terletak pada /home/pi. perlu diingat bahwa file ini merupakan file tersembunyi sehingga untuk melihatnya kita perlu perintah ls dengan opion -a. untuk lebih jelasnya bisa memperhatikan tutorial berikut ini :

Mengedit bashrc

file .bashrc terletak pada directory /home/pi/. dengan terdapat tanda titik (.) didepannya menandakan bahwa file tersebut merupakan file hidden sehingga kita perlu melihatnya dengan command ls -a untuk masuk ke dalam directory /home/pi kita cukup dengan mengetikan perintah dibawah ini :


cd ~

cd adalah perintah change directory kemudian tanda "~" merupakan shortcut yang menandakan directory /home/pi. setelah mengetikan perintah cd -a kemudian kita akan masuk ke directory /home/pi. untuk membuktikan bahwa kita berada pada directory tersebut dapat dilakukan perintah sebagai berikut :

pwd

perintah pwd merupakan perintah untuk mengetahui bahwa dalam terminal kita berada di directory mana. setelah mengetikan perintah pwd maka akan keluar tulisan /home/pi yang membuktikan bahwa kita berada di directory /home/pi. kemudian kita tuliskan perintah untuk melihat semua file atau folder yang terdapat pada directory tersebut termasuk hidden file atau folder sekalipun. berikut perintahnya

ls -a

ls -a merupakan perintah untuk melihat isi sebuah directory dengan option -a artinya semua file atau folder yang di hidden atau tersembunyi juga dapat dilihat. setelah mengetikan perintah ls -a maka akan muncul output list file yang terdapat pada directory /home/pi. jika kamu menggunakan OS Raspbian Strecth maka akan menjumpai list file atau folder sebagai berikut :

Raspberry Pi Tutorial


maka kita akan melihat sebuat file dengan nama .bashrc seperti pada gambar diatas yang diberi kotak warna merah. selanjutnya kita perlu mengedit file berikut, untuk mengedit file tersebut kita perlu permission sudoers sehingga dapat dilakukan dengan perintah sebagai berikut :

sudo nano .bashrc

kemudian letakan perintah untuk membuka aplikasi chromium secara terminal, letakan perintah tersebut di paling bawah. perintah untuk membuka chromium secara terminal yaitu :


chromium-browser --kiosk --app=http://localhost/aplikasi_satu

--kiosk merupakan parameter bahwa tampilannya akan full screen jika kamu ingin tampilannya tidak full screen maka dapat menghilangkan parameter --kiosk pada perintah diatas. setelah menambahkan perintah diatas. simpan dengan shortcut CRTL + O dan pastikan namanya .bashrc lalu tekan enter. keluar dengan shotcut CTRL + X.

--app= merupakan parameter untuk mengisikan alamat dari URL aplikasi web based yang akan dibuka, contoh pada perintah diatas yaitu http://localhost/aplikasi_satu. jika menggunakan web server lokal pastikan web server lokal running saat boot up. disini saya menggunakan web server lokal nginx.

Setelah mengedit file .bashrc  pastikan bahwa Raspberry Pi dapat automasi login ke GUI Desktop, jika login ke terminal Chromium tidak akan tampil.  untuk mengkonfigurasi Raspberry Pi login ke GUI Desktop dapat dikonfigurasi dengan perintah sudo raspi-config. kemudian pilih Boot Options kemudian pilih Desktop/CLI kemudian pilih Desktop Autologin.

Restart Raspberry Pi, dengan perintah sudo rebootRaspbery Pi akan melakukan boot ulang. setelah masuk ke login Pi mode Desktop maka tidak akan lama waktu berselang, akan muncul tampilan aplikasi web based kita terbuka secara full screen atau tidak dengan browser Chromium.

Wednesday, November 7, 2018

Menggunakan Shift Register 74HC595

Pendahuluan

IC Shift Register 74HC595 merupakan IC dengan input serial dan output paralel 8 bit dengan menambahkan 8 bit Storage Register Type D. secara garis besar IC ini berisi kan serial in, kemudian  8 bit Shift Register yang disambungkan dengan 8 bit Storage Register. karena terdapat dua register yaitu shift dan storage maka pemberian clock pun menjadi terpisah antara clock untuk shift register dan clock untuk storage register. untuk lebih jelasnya bisa melihat blok diagaram IC 74HC595 dibawah ini :



Input dan Output

INPUT

input IC 74HC595 terdiri dari Output Enable (OE) merupakan buffer keluaran dari IC yang terhubung ke storage register, jika input ini diberikan logika High maka ouput akan menjadi High Impedance, jika diberi logika Low maka akan meneruskan output dari storage register.

SRCLK merupakan clock untuk shift register, yaitu clock yang berguna meneruskan serial in ke keluaran shift register, jika diberika logika high maka input dari shift register akan dikeluarkan,.

SRCLR merupakan input untuk mereset keluaran menjadi Low. reset keluaran akan aktif atau keluaran akan direset menjadi Low dari Q0 sampai Q7 dengan memberikan logika Low pada input SRCLR.

RCKK merupakan clock untuk storage register, yaitu clock yang berguna untuk meneruskan data dari keluaran shift register sebagai input dari storage register menuju ke keluaran storage register.

OUTPUT

untuk output terdiri dari keluaran buffer tri state yang terhubung dari keluaran storage register. output ini berjumlah 8 pin yaitu dari Q0 sampai Q7. dan terdapat pula Q7 aksen, yaitu keluaran dari shift register ke-8, yang bisa dihubungkan ke input IC 74HC595 kembali sebagai inputan. sehingga dapat dicascade dengan jumlah IC lebih dari satu buah.


ALGORITMA

Untuk menggunakan IC 74HC595 ini, agar dapat mengkonversi serial to paralel, maka alur proses atau algoritmanya yaitu :

pertama-tama set SRCLR atau reset mejadi HIGH sehingga reset menjadi tidak aktif, kemudian set OE atau output enable menjadi Low sehingga output enable aktif.

agar data tidak dikeluarkan baik di shift register maupun di storage register, maka perlu diberikan sinyal LOW pada input CLK shift register (SRCLK) mapaun clock storage register (RCLK).

masukan data serial logika HIGH atau LOW ke input Serial in (SER). kemudian berikan HIGH pada clock shift register (SRCLK) sehingga sinyal pada serial in dikeluarkan ke output shift register. untuk memasukan data kembali set SRCLK menjadi HIGH kemudian baru masukan data kembali ke Serial in (SER). sinyal yang pertama kali masuk ke serial in akan menjadi output terakhir, yaitu Q7 dan sinyal yang terakhir di inputkan ke serial in akan menjadi output yang pertama yaitu Q0. hal ini disebabkan karena data pertama masuk terus akan digeser seiring dengan adanya input baru yang masuk ke serial in.

data yang sudah dikeluarkan oleh shift register masih ditahan oleh storage register. agar data tersebut bisa dikeluarkan menuju output Q0 sampai dengan Q7 maka clock storage register (RCLK) perlu diberikan sinyal HIGH dan Output Enable diberikan sinyal LOW. maka ouput akan menuju ke Q0 sampai Q7.

Penggunaan Aplikasi Shift Register

Mengapa kita perlu repot-repot menggunakan shift register ini. alasannya cukup sederhana, agar kita bisa menghemat ouput keluaran PORT sebuah kontroller misalkan mikrokontroller AVR, Arduino atau Raspberry PI, kita bisa mengeluarkan data ke 16 bit ouput paralel dengan dua shift register 74HC595 ini yang di cascade kan (disambung secara seri) dengan hanya membutuhkan input 4 pin yaitu serial in (SER), clock shift register(SRCLK), clock storage register (RCLK) dan reset (SRCLR). 

pada aplikasinya yang membutuhkan banyak output, biasanya digunakan pada Led Matriks, Display Seven Segment, Aplikasi yang menggerakan banyak lampu Led, dan lain sebagainya. semoga tulisan sedikit ini bisa memberikan pemahaman. terima kasih.

Sunday, October 28, 2018

Drive Motor Servo dari GUI HTML pada Raspberry Pi

Pendahuluan

Untuk membuat aplikasi GUI di Raspberry Pi banyak macamnya, salah satunya bisa menggunakan Python, membuat GUI dengan Python menurut saya sendiri agak merepotkan pertama karena harus mempelajari hal yang baru, kedua tampilannya yang sedikit lebih kaku. agak berbeda jika kita membuat GUI dengan HTML scriptnya lebih mudah, tampilannya bisa dipermanis dengan CSS dan Javascript. Artikel ini dibuat sebagai tutorial membuat aplikasi GUI dari HTML untuk mentrigger script Python sebagai script yang dijalankan secara background dan mengembalikan nilai balik ke HTML.

Disini saya akan membuat Aplikasi dimana terdapat dua tombol untuk menggerakan motor Servo dan tampilan bar progress yang memperlihatkan nilai sebuah sensor. ya tentu saja untuk urusan GUI kita buat dengan menggunakan HTML dan Bootstrap agar tampilannya eyecatching. dan script Python bertugas sebagai pelaksana untuk mengerakan motor Servo dan mengambil nilai sebuah sensor.

perlu diketahui bahwa sebelum memulai, diperlukan web server nginx dan CGI dengan program uwsg, dimana terdapat pada artikel sebelumnya pada link http://www.plankton123.info/2018/10/install-web-server-nginx-baca-engine-x.html. web server dan CGI diperlukan agar script Python bisa berjalan dari Web Browser.

GUI HTML

Kita akan membuat GUI sederhana dengan HTML, membuat GUI dengan HTML sangatlah mudah, karena HTML merupakan script pemrograman berbasis Tag, sebagai contoh jika kita membuat tombol mempunyai tag button maka contohnya yaitu <button> Gerak Servo </button> 
untuk mempelajari GUI HTML bisa dipelajari terpisah dari artikel ini. baik langsung saja saya membuat GUI HTML sebagai berikut :


<!DOCTYPE html>
<html>
<head>
 <title>GUI HTML</title>
</head>
<body>

 <div style="margin-top: 100px; margin-left: 100px;">
  <button id="servoKanan">Servo >></button>  
 </div>

 
</body>
</html>


simpanlah script HTML diatas difolder baru pada folder web dengan nama index.html, jika di Raspberry Pi milik saya dengan web server nginx, maka folder webnya berada di /var/www/html/ kemudian buat folder baru yaitu guihtml. dan simpan file index.html tersebut di folder /var/www/html/guihtml/.

kemudian setting konfigurasi nginx agar supaya folder baru guihtml dapat dibuka, yaitu dengan mengedit file /etc/nginx/sites-available/defaut  dengan menambahkan location baru  dengan perintah

 location /guihtml {
     try_files $uri $uri/ =404;
 }

dan reset service nginx dengan perintah diterminal sudo service nginx restart dan buka di browser http://ip-raspberry-pi/guihtml dikomputer lain yang satu jaringan dengan raspberry Pi anda. sehingga ketika dibuka akan tampil seperti berikut ini :


Menggunakan Javascript

project ini tidak terlepas dari bantuan javascript, javascript disini menggunakan framework jquery dan ajax. jquery dibutuhkan oleh ajax dalam melakukan tugasnya yaitu merequest sebuah halaman web, mengirimkan data, dan mendapatkan nilai balik dari sebuah halaman yang direquest. dalam hal ini halaman yang direquest merupakan script Python untuk melakukan sesuatu, misalnya menggerakan motor Servo atau mengambil nilai sebuah sensor dan mengirimkan nilai balik ke ajax tersebut.

karena menggunakan jquery maka jquery bisa kamu dapatkan pada link  https://jquery.com/download/  , letakan jquery didalam folder baru yang sudah dibuat tadi (folder guihtml). kemudian tambahkan baris kode diatas tag </body> file index.html dengan baris kode berikut ini :


<script type="text/javascript" src="http://172.20.10.14/guihtml/jquery-3.3.1.min.js"></script>
<script type="text/javascript">
  
$('#servoKanan').click(function() {
  $.ajax({
   type:'get',
   url:'http://172.20.10.14/cgi-bin/servo.py?pulsa=4.5',
   success:function(data){
          alert (data);
       } 
   });
});
</script> 



kode diatas merupakan perintah untuk mendengarkan event klik button dengan id=servoKanan kemudian akan menjalankan ajax untuk melakukan request ke sebuah halaman script Python dengan nama servo.py dengan mengirimkan variable GET bernama pulsa bernilai '4.5'  kemudian nilai balikan dari hasil servo.py dikembalikan dalam bentuk parameter funtion (data) dan ditunjukan berupa alert javascript. jika terdapat alamat IP address diatas bisa diganti dengan alamat IP Address Raspberry Pi Anda sendiri, untuk mengetahui IP Address Raspberry Pi dapat melakukan ifconfig di terminal. berikut adalah kode lengkap untuk file index.html


<!DOCTYPE html>
<html>
<head>
 <title>GUI HTML</title>
</head>
<body>

 <div style="margin-top: 100px; margin-left: 100px;">
  <button id="servoKanan">Servo >></button>  
 </div>

 

 <script type="text/javascript" src="http://172.20.10.14/guihtml/jquery-3.3.1.min.js"></script>
 <script type="text/javascript">
  
  $('#servoKanan').click(function() {
    $.ajax({
         type:'get',
         url:'http://172.20.10.14/cgi-bin/servo.py?pulsa=4.5',
         success:function(data){
         alert (data);
         } 
      });
  });
 </script>

 
</body>
</html>


Servo.py (Script Python)

Dan terakhir kita akan membuat script Python dengan nama servo.py untuk menggerakan motor servo. seperti yang sudah pernah kalian ketahui bahwa motor servo digerakan dengan mengirimkan keluaran sinyal PWM (Pulse Width Modulation), oleh karena itu kita akan membuat keluaran sinyal PWM dengan duty cycle berupa data yang dikirimkan dari javascript menggunakan methode GET. berikut script Python yang sudah saya buat :

#!/usr/bin/env python

import RPi.GPIO as GPIO
import time
import cgi

form = cgi.FieldStorage()

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)

GPIO.setup(18, GPIO.OUT)

pwm = GPIO.PWM(18, 50)
pulsa = form.getvalue('pulsa')
pwm.start(float(pulsa)) time.sleep(1) pwm.stop() GPIO.cleanup() print "Content-type: text/html\n\n" print form.getvalue('pulsa')

script Python diatas pertama-tama membuat keluaran sinyal PWM dengan frekuensi 50 Hz, duty cycle berupa data yang dikirimkan melalui GET dengan nama pulsa  di Pin 18 BCM GPIO Raspberry Pi. kemudian mengembalikan nilai data variable pulsa yang dikirimkan melalui GET sebelumnya.

sejak PWM yang dikeluarkan yaitu 50Hz, maka periodenya yaitu 20ms, karena servo bergerak sepanjang 0 - 180 derajat dengan lebar pulsa minimal 0.5ms sampai 2.5ms, maka perhitungan duty cyclenya yaitu :

 0.5ms = 0.5/20 x 100% = 2.5%

1.5ms = 1.5/20 x 100% = 7.5%

2.5ms = 2.5/20 x 100% = 12.5%

sehingga untuk duty cycle yang digunakan yaitu dari 2.5 sampai 12.5

script Python diatas disimpan di folder CGI, pada kasus saya sendiri, saya simpan pada /usr/lib/cgi-bin/servo.py

agar www-data (akses halaman web untuk pada linux) dapat menjalankankan GPIO maka, perlu kita setting permission agar www-data dapat mengakses GPIO. untuk melakukan itu yaitu dapat melakukan perintah

$ sudo usermod -a -G gpio www-data
$ sudo groups www-data

kemudian restart Raspberry Pi. lanjut untuk testing.

Testing

setelah semuanya sudah selesai kita bisa mencoba testing. sebelumnya letakan Servo pin data ke GPIO nomor 18 BCM. kemudian buka web browser dikomputer lain yang satu jaringan dengan Raspberry Pi dan ketikan di Address Bar http://ip-address-Raspberry-Pi/guihtml/ dalam kasus saya buka http://172.20.10.14/guihtml/ kemudian tekan button servo >> maka seharusnya motor servo gerak dengan duty cycle PWM 4.5 % dan pada halaman browser akan ada alert variable GET seperti berikut :





Simple Input Output GPIO

Pendahuluan

Pada project embeded system hal yang paling dasar adalah bagaimana menggunakan input-output pada pin-pin controller yang digunakan. dalam kasus Raspberry Pi yang digunakan sebagai controller maka GPIO (General Purpose Input Output) merupakan pin-pin output atau gerbang interface ke dunia luar. karena dalam Raspberry Pi salah satu bahasa pemrograman yang didukung adalah Python. maka dalam artikel ini kita batasi dengan menggunakan bahasa pemrograman Python.


Hal dasar yang perlu diketahui tentang level logic yaitu pada saat Raspberry Pi mengeluarkan data High atau logika '1' maka secara fisika mengeluarkan tegangan 3.3 Volt dan saat Raspberry Pi mengeluarkan data Low atau logika '0' maka secara real mengeluarkan tegangan 0 Volt. maka didapat disimpulkan bahwa Raspberry Pi memiliki level tegangan 3.3 Volt

Akses GPIO dari Python

Untuk mengakses GPIO dari Python maka salah satu hal yang diperlukan yaitu menginstall package bernama RPi.GPIO. RPi.GPIO merupakan package Python yang berisi class untuk mengontrol GPIO pada Raspberry Pi. menurut dokumentasi Python penggunaan package ini tidak cocok untuk aplikasi yang memerlukan waktu yang sangat presisi, mengingat kita tidak bisa memprediksi kapan Python akan melakukan garbage collecting. juga karena jalan di OS under Linux dimana priority process ditentukan oleh CPU itu sendiri. untuk menginstall package RPi.GPIO dapat dilakukan dengan perintah dibawah ini :

sudo pip install RPi.GPIO
setelah terinstall tanpa error, package RPi.GPIO siap digunakan pada script Python. untuk menggunakannya langkah-langkahnya yaitu : pertama kita perlu mengimport package RPi.GPIO dengan perintah import RPi.GPIO as gpio, kemudian ada dua mode yang memetakan pin-pin di GPIO, pertama yaitu mode BOARD dimana mode ini menamakan pin sesuai dengan angka yang tercetak pada GPIO Raspberry PI. dan yang kedua mode BCM mode ini menamakan pin sesuai dengan standar "Broadcom SOC Channel". untuk mengetahui nomor pin dapat digunakan perintah pinout pada terminal sehingga akan tampil seperti gambar berikut ini :


dapat dilihat pada gambar diatas, untuk mode BOARD menggunakan nomor yang didalam tanda kurung berwarna putih, sedangkan pada mode BCM menggunakan nomor setelah tulisan GPIO berwarna hijau. contoh, pada mode BOARD pin nomor 12 akan sama dengan mode BCM pin nomor 18. untuk mengatur mode dengan perintah gpio.setmode(gpio.BOARD) jika digunakan sebagai mode BOARD dan perintah gpio.setmode(gpio.BCM) jika digunakan sebagai mode BCM.

MODE OUTPUT

Setelah menentukan mode, kemudian menentukan mode input atau output pada pin tertentu. jika digunakan sebagai output maka perintahnya yaitu gpio.setup(pin_number, gpio.OUT) contoh gpio.setup(12, gpio.OUT). untuk mengeluarkan data HIGH dapat digunakan perintah gpio.output(pin_number, gpio.HIGH) contoh gpio.output(12, gpio.HIGH).

Sedangkan untuk mengeluarkan data low dengan perintah gpio.output(pin_number, gpio.LOW) contoh gpio.output(12, gpio.lOW). contoh berikut ini merupakan script untuk membuat blink led jika terhubung ke pin 12 mode BOARD.


import RPi.GPIO as gpio 
import time 

gpio.setmode(gpio.BOARD) 
gpio.setup(12, gpio.OUT) 

gpio.output(12, gpio.LOW) 
time.sleep(1) 
gpio.output(12, gpio.HIGH) 

gpio.cleanup()
untuk rangkaian LED ke pin GPIO perlu tambahan resistor untuk mengatur arus sebesar 15mA melalui LED. untuk mengetahui besaran berapa nilai resitor tersebut dapat digunakan hukum Ohm yaitu R = V / I, jika tegangan level logika HIGH adalah 3.3 V serta tegangan jatuh pada LED adalah 2.1 V dan I = 15mA maka nilai Resitor yang harus dipasaang yaitu 3.3 - 2.1/ 0.015 = 80 ohm.


MODE INPUT

untuk menset pin menjadi mode input, maka pada fungsi setup di gpio mempunyai tiga parameter yaitu pin number, gpio.IN dan pull_up_down=gpio.PUD_DOWN atau pull_up_down=gpio.PUD_UP. contoh gpio.setup(11, gpio.IN, pull_up_down=gpio.PUD_DOWN)

extra parameter atau parameter ketiga pada fungsi setup ini memberikan tambahan informasi bahwa perlu diaktifkan resistor pull up atau resistor pull down. jika diberikan pull_up_down= gpio.PUD_DOWN maka resistor pull down akan aktif sehingga dalam posisi ambang atau tidak ada masukan logika pin akan bernilai LOW.

jika diberikan pull_up_down=gpio.PUD_UP maka resistor pull up akan aktif, dan dalam posisi ambang atau tanpa masukan logika tegangan pin akan bernilai HIGH. untuk membaca nilai input dapat digunakan perintah gpio.INPUT(pin number) contoh gpio.INPUT(11). berikut ini adalah contoh penggunaan mode input pada GPIO.

import RPi.GPIO as gpio 
import time 

gpio.setmode(gpio.BOARD) 
gpio.setup(12, gpio.OUT) 
gpio.setup(11, gpio.IN, pull_up_down=gpio.PUD_DOWN) 

try:
   while True :
      if gpio.input(11) == gpio.HIGH :
         gpio.output(12, gpio.LOW)
      else :
         gpio.output(12, gpio.HIGH)

except KeyboardInterrupt:
  gpio.cleanup()

OUTPUT PWM (Pulse Width Modulation)

PWM atau pulse width modulation adalah teknik mengatur lebar pulsa atau duty cycle pada frekuensi yang tetap. sebagai contoh jika terdapat sebuah sinyal kotak-kotak dengan frekuensi 50 Hz yang berarti nilai periodenya yaitu 1 /50 = 0.02 sekon atau 20mS.  dengan mengatur lebar pulsa maka lebar HIGH-nya dapat berubah-rubah begitu juga lebar LOW-nya berubah-rubah, yang mana jika dijumlahkan nilainya harus tetap yaitu 20mS. 

modulasi lebar pulsa bisa digunakan untuk mengatur terang redup nyala lampu LED, mengatuh kecepatan motor DC, menentukan derajat perputaran motor servo dan lain sebagainya. 

setiap Pin I/O pada GPIO Raspberry Pi secara software dapat dijadikan output PWM dengan menggunakan package RPi.GPIO. untuk menggunakan sebagai PWM, pin perlu di setup sebagai output kemudian ditentukan nilai frekuensinya dan mengatur duty cycle awalan dalam satuan %, kemudian dapat mengubah duty cycle pada proses berikutnya  berikut adalah contoh script output PWM dengan duty cylce 5.5 % untuk awalan :


import RPi.GPIO as GPIO
import time

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)

GPIO.setup(18, GPIO.OUT)

pwm = GPIO.PWM(18, 50)

pwm.start(5.5)
time.sleep(1)

pwm.ChangeDutyCycle(7.5)
time.sleep(1)


pwm.stop()
GPIO.cleanup()

dapat dilihat pada script di atas dimana mode yang digunakan BCM pin 18 sama dengan pin 12 mode BOARD, kemudian pin 18 dijadikan output, dan dibuat objek pwm dengan pin 18 sebagai output pwm dan frekuensi 50 Hz yaitu pada perintah pwm = GPIO.PWM(18, 50). dengan frekuensi 50 Hz maka periodenya yaitu 1/ 50 = 20ms/

kemudian dilanjutkan dengan menset duty cycle awal sebesar 5.5 % selama 1 detik dengan perintah pwm.start (5.5) time.sleep(1). duty cycle 5.5 % artinya memiliki Ton yaitu sebesar 5.5/100 * 20ms = 1.1 ms dan Toff sebesar 20ms - 1.1ms = 18.9ms. dilanjutkan dengan merubahnya ke nilai 7.5 % selama 1 detik dengan perintah pwm.ChangeDutyCycle(7.5) time.sleep(1). duty cycle 7.5 % artinya memliliki Ton = 7.5/100 * 20ms = 1.5ms dan Toff = 20ms - 1.5ms = 18.5ms

selanjutnya pwm berhenti dan mengembali pin-pin GPIO secara default. dengan perintah pwm.stop() GPIO.cleanup(). semoga artikel ini dapat bermanfaat bagi teman-teman. selamat bereksperimen :) .

Saturday, October 27, 2018

Argument pada Python (Studi Kasus Pengaturan motor Servo)

Pendahuluan

pada artikel sebelumnya sudah ada  pembahasan mengenai script Python untuk menggerakan motor Servo. namun penggunaannya sebatas berputar pada sudut derajat yang sudah ada di script tersebut. kemudian pertanyaannya bagaimana menggunakan script Python untuk memutarkan motor servo sekian derajat dengan info derajat dikirim dari argument saat script Python tersebut dijalankan. misalkan saat menjalankan script Python seperti dibawah ini :

sudo python servo.py 100
dimana angka 100 merupakan argument yang akan dikirimkan ke dalam script Python untuk diolah menjadi besaran lebar pulsa PWM untuk menggerakan motor servo. dengan ini kita cukup membuat satu script Python kemudian kita bisa memutar motor servo tersebut berapa deraja dengan menganti besaran argument pada saat menjalankan script Python tersebut.

Argument pada Python

Secara sederhana argument adalah nilai yang diberikan kepada sebuah fungsi, saat kita memanggil fungsi tersebut. kemudian nilai argument tersebut akan diberikan ke parameter fungsi tersebut. secara sederhana argument merupakan sebuah nilai misal 5, "hello" dan parameter sebuah simbol misal x, y dan lain sebagainya. contoh misal terdapat fungsi luas_segita dengan parameter alas dan tinggi maka dapat ditulis luasSegita(a, t) a dan t merupakan parameter untuk fungsi luasSegitiga, kemudian fungsi luasSegitiga dipanggil di fungsi utama seperti berikut luasSegitiga(4, 5) angka atau nilai 4 dan 5 merupakan nilai yang diberikan ke a dan t.

untuk menggunakan argument pada saat menjalankan script Python pertama-tama kita perlu meng-impor modul sys. kedua argument tersebut berbentuk list atau array, dimana setiap nilai akan di-assign-kan kedalam index yang berbeda contoh sys.argv[0], sys.argv[1].... berikut kita akan membuat script Python sederhana untuk menguji sebuah argument. berikut script sederhananya :

import sys

nilai1 = sys.argv[0]
niai2 = sys.argb[1]

print (nilai1 = , nilai1)
print (nilai2 = , nilai2)

simpan script diatas dengan nama testArg.py dan jalankan script dengan perintah python testArg.py 1 2 , perlu diingat bahwa semua nilai yang dilewatkan dari argument ini bertype data string, jika teman-teman ingin menggunakannya sebagai numerik atau int maka dapat mengunakan fungsi int() untuk mengubah string menjadi int output dari script diatas yaitu :

('nilai1 = ', 'tesArg.py')
('nilai2 = ', '1')


dapat dilihat bahwa nilai argument index 0 yaitu nama script dan nilai argument index 1 yaitu angka 1. dari sini kita belajar bahwa nilai pertama dari argument yang kita kirimkan akan menuju ke parameter sys.argv dengan index 1 ataua sys.argv[1] dan seterusnya.

Script Motor Servo

kita akan membuat script motor servo dimana nilai argument digunakan sebagai lebar pulsa untuk pengaturan derajat gerak motor servo. contoh: pyhton servo.py 100, maka angka 100 akan digunakan sebagai nilai lebat pulsa PWM. berikut adalah script Python untuk mengerakan motor servo :


import time
import wiringpi
import sys
wiringpi.wiringPiSetupGpio()
wiringpi.pinMode(18, wiringpi.GPIO.PWM_OUTPUT)
wiringpi.pwmSetMode(wiringpi.GPIO.PWM_MODE_MS)
wiringpi.pwmSetClock(192)
wiringpi.pwmSetRange(2000)
pulsa = sys.argv[1]
wiringpi.pwmWrite(18, int(pulsa))

karena pinMode pwm perlu menggunakan permison sudo, maka untuk menjalankan script Python diatas dapat dijalankan dengan sudo python servo.py 100,  pada script diatas angka 100 merupakan argument pertama yang kemudian di masukan ke dalam variable pulsa dan karena masih bertype data string perlu dirubah ke int dengan perintah int(pulsa). 

angka 100 tersebut dapat dirubah nilainya dari 50 sampai 250 sesuai dengan lebar pulsa minimal dan maksimal pada motor servo. dengan begini kita hanya perlu membuat satu script Python untuk mengatur gerakan putar motor servo berapa derajat-pun kita mau dengan melewatkannya pada argument.  sekian artikel kali ini semoga dapat bermanfaat terima kasih :) .




Install Web Server nginx (baca engine x) dan uwsgi di Raspberry Pi

Pendahuluan

Kali ini saya akan menjabarkan bagaimana menginstall web server nginx (baca Engine X) pada Raspberry Pi. nginx merupakan web server yang ringan dan cepat dari webserver lainnya misal Apache. mengingat Raspberry Pi mempunyai resource terbatas, maka jika kita perlu membuat aplikasi web pada Raspberry Pi, nginx merupakan pilihan yang tepat sebagai webserver karena merupakan webserver yang paling ringan dan cepat. baik kita mulai step by step. 

Update Package

perlu di ingat bahwa Raspberry Pi perlu terkoneksi ke internet. untuk mengkoneksikan ke internet, kamu bisa memberikan akses internet melalui thetering WiFi, LAN atau USB thetering. sebelum mulai menginstall nginx pada Raspberry Pi. ada baiknya kita update package terlebih dahulu dengan perintah dibawah ini :

sudo apt-get update

Install Nginx

Perlu diketahui bahwa nginx merupakan "Asynchronous” server yang mana artinya nginx dapat menjalankan beberapa action dalam waktu yang sama. tanpa menunggu berakhirnya suatu proses untuk menjalankan proses selanjutnya. tidak seperti Apache yang jika ada multiple proses dalam waktu yang sama maka akan mejalankan sebuah proses baru. dengan itu maka nginx akan lebih cepat dan mengkonsumsi memori yang lebih sedikit. kita akan menginstall nginx melalui terminal. dalam kondisi Raspberry Pi terhubung ke internet. jalankan perintah dibawah ini :

sudo apt-get install nginx

Konfigurasi Nginx dan CGI

setelah proses penginstallan nginx selesai, sebelum service nginx dijalankan, kita perlu mengkonfigurasi nginx. pengaturan ini berguna untuk memberitahukan folder mana saja yang digunakan sebagai folder Web, atau kita perlu mengenalkan index.php sehingga dapat dijalankan otomatis. untuk itu kita perlu mengedit file konfigurasi yatu terletak di "/etc/nginx/sites-available/default", untuk mengeditnya kita bisa menggunakan program nano seperti dibawah ini :

sudo nano /etc/nginx/sites-available/default
perlu diketahui bahwa letak folder web berada di folder "/var/www/html" maka secara default akan menampilkan pengaturan sebagai berikut :

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri  =404;
        }

untuk menambahkan lokasi baru misalkan kita ingin membuat folder di "/var/www/html/newfolder" dan mengharapkan dapat dibuka dengan alamat http://ip-address/newfolder/" maka perlu menambahkan location baru seperti dibawah ini :

      location /newfolder {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri  =404;
        }

secara default nginx tidak tersedia fasilitas CGI, apabila kita memerlukan CGI agar kode Pyhton dapat dijalankan melalui web browser maka, nginx perlu dikonfigurasi dan memerlukan program tambahan, saya disini menggunakan uwsgi. untuk mengkonfigurasi CGI dapat ditambahkan baris berikut masih di file "/etc/nginx/sites-available/default" :


 location /cgi-bin {
                include uwsgi_params;
                uwsgi_modifier1 9;
                uwsgi_pass 127.0.0.1:9000;
        }

        location /doc/ {
                alias /usr/share/doc;
                autoindex on;
                allow 127.0.0.1;
                allow ::1;
                deny all;
        }

ketika selesai kita bisa restart service nginx dengan perintah sudo service nginx restart  dan lanjutkan dengan menginstall uwsgi dengan perintah sudo apt-get install uwsgi setelah itu kita perlu membuat file dengan nama uwsgi_config.ini dapat dilakukan dengan perintah  nano uwsgi_config.ini dan isi file tersebut seperti dibawah ini :

[uwsgi]
plugins = cgi
threads = 20
socket = 127.0.0.1:9000
chdir = /usr/lib/cgi-bin/
cgi=/cgi-bin=/usr/lib/cgi-bin/
cgi-helper =.py=python

kemudian save dengan shortcut ctrl + x dan pilih Yes (kamu bisa menyimpannya dimana saja, kasus pada saya menyimpan file uwsgi_config.ini di directory /home/pi). kita akan menyiapkan sebuah script Python sederhana dengan nama hello.py dan akan disimpan pada folder /usr/lib/cgi-bin/ jika folder tersebut belum ada kamu dapat membuatnya. isi dari script Python adalah sebagai berikut :

#!/usr/bin/env python
print "Content-type: text/html\n\n"
print "Hello Wolrd"

kemudian beri permission 777 padanya dengan perintah sudo chmod 777 /usr/lib/cgi-bin/hello.py, kemudian kita akan mejalankan uwsgi dengan config yang sudah kita buat dengan perintah  sudo -u www-data uwsgi ./uwsgi_config.ini& (sebelumnya pindah dulu ke directory dimana file uwsgi_config.ini berada ) maka program uwsgi akan berjalan pastikan tidak ada error.

untuk mengujinya apakah program Python dapat dijalankan pada web browser, buka web browser pada komputer lain yang satu jaringan dengan Raspberry Pi. kemudian isikan pada bagian address bar yaitu : http://ip-raspberry-pi/cgi-bin/hello.py jika sebuahnya sudah benar maka akan tampil tampilan seperti berikut ini :



Thursday, August 30, 2018

Speaker Wireless dengan Raspberry Pi dari iPhone

Pendahuluan

Banyak Speaker Wireless ditawarkan di Toko-toko online dengan bermacam-macam merk, jika Kamu Berencana ingin mempunyai Speaker Wireless dan belum bisa membelinya, maka tutorial kali ini akan sangat sesuai untuk Kamu, kita akan membuat Speaker wireless dengan bantuan Raspberry Pi, namun pada tutorial ini terbatas pada mengirimkan audio secara wireless melalui WiFi dari Smart Phone iPhone, saya menggunakan iPhone 5. untuk gambar blok diagramnya bisa lihat dibawah ini :





kita akan mulai dari mengkonfigurasi Raspberry Pi sehingga dapat digunakan sebagai audio mirroring di iPhone. yang perlu di konfigurasi hanya di Raspberry Pi saja. di iPhone hanya tinggal menggunakannya saja. OS yang saya gunakan di Raspberry Pi yaitu versi Raspbian Stretch. kita akan mulai langkah demi langkah :

Update repository

untuk menyakinkan bahwa list repository kita adalah yang paling update. sehingga ketika nantinya kita menginstall mendapatkan aplikasi yang paling update. untuk melakukannya cukup mudah, buka terminal kemudian ketikan perintah seperti dibawah ini :

sudo apt-get update

Install Dependencies

software yang akan digunakan sebagai mirroring audio ini yaitu ShairPort Sync. ini bukan berbentuk package yang siap di-install, namun masih berupa source code, kita sendiri yang meng-compile dan build-nya, sebelum itu kita perlu install dependencies yang diperlukan oleh ShairPort Sync. berikut perintah untuk install dependencies di terminal.

sudo apt-get install autoconf automake avahi-daemon build-essential git libasound2-dev libavahi-client-dev libconfig-dev libdaemon-dev libpopt-dev libssl-dev libtool xmltoman

Clone Source Code ShairPort Sync

kita akan mengambil source code ShairPort Sync dengan cara clone menggunakan git. Program ShairPort Sync inilah yang akan digunakan sebagai mirroring audio dari iPhone ke Raspberry Pi. untuk meng-clone git source code ShairPort Sync dapat dilakukan perintah dibawah ini pada terminal


git clone https://github.com/mikebrady/shairport-sync.git


Compile dan Build

setelah source code kita dapatkan, maka kita akan mencompile dan mem-buildnya, sebelum itu, kita akan menkonfigurasinya secara perintah. pertama-tama masuk ke directory shairport-sync, kemudian konfigurasi source codenya. berikut perintahnya :

cd shairport-sync


autoreconf -i -f


./configure --with-alsa --with-avahi --with-ssl=openssl --with-systemd --with-metadata

kita bisa lihat bahwa nantinya ShairPort Sync ini akan dibangun dengan bantuan alsa (Advanced Linux Sound Architecture), dengan systemd yaitu program yang mengijinkan kita untuk menjalankan suatu service saat pertama kali booting, kemudian dengan openssl artinya data  yang dikirim di enkripsi agar lebih aman, dan lain-lain.
setelah berhasil mengkonfigurasi tanpa error, langkah selanjutnya yaitu mengcompile dan build source code ShairPort Sync. ini merupakan momen yang penting untuk membuat executable ShairPort Sync, untuk itu sebelum melakukannya alangkah baiknya untuk memperhatikan lagi langkah-langkah diatas. untuk compile dan build ketik perintah berikut ini pada terminal :

make
 
sudo make install

setelah berhasil tanpa error. maka sekarang program ShairPort Sync sudah terinstall pada Raspberry Pi kita. selamat :). kita hampir selesai, ada dua langkah lagi yaitu mengaktifkan service ShairPort Sync agar otomatis jalan saat pertama kali booting, dan menjalankan service ShairPort Sync untuk yang pertama kalinya. berikut perintahnya :

sudo systemctl enable shairport-sync
 
sudo service shairport-sync start

setelah perintah diatas dijalankan tanpa error. sekarang harusnya iPhone sudah mampu mirroring audio ke Raspberry Pi. untuk melakukan mirroring aktifkan personal hotspot pada iPhone kemudian koneksinya WiFi Raspberry Pi terkoneksi ke iPhone, atau iPhone dan Raspberry Pi terhubung secara WiFi ke router yang sama. 

setelah iPhone dan Raspberry Pi satu jaringan secara WiFi. sekarang aktifkan mirroring ke Raspberry Pi dengan cara geser ujung layar bawah ke atas, maka akan keluar control center, kemudian geser kekanan untuk masuk ke pengaturan music. di paling bawah akan ada dropdown. pilih dropdown tersebut dan kamu akan menjumpai Tulisan Raspberry Pi. pilih itu. sampai tanda centang berada di samping tulisan Raspberry Pi. kemudian test dengan mendengar youtube, musik atau melihat video, kamu seharusnya sudah bisa mendengarkan audio iPhone secara wireless pada Speaker kesayangan kamu. selamat menikmati :)



Tuesday, August 28, 2018

Fetching Data dari Web Server ke Rasberry Pi

Pendahuluan

Dalam project IoT Fetching atau mengambil data dari  server ke Raspberry Pi perlu dilakukan untuk memperbarui data atau untuk mengetahui apakah Raspberry Pi terkoneksi ke Server. 

untuk melakukan fetching atau pengambilan data, hal pertama yang dilakukan Raspbery Pi adalah hal yang sama ketika pengiriman data yaitu melakukan HTTP Request. bedanya saat pengiriman data respon dari web server diperlukan untuk mengetahui data terkirim atau tidak, biasanya didapat dari kode respon http (200 terkirim, 404 server tidak temukan dan lain lain), sedangkan untuk fetching atau pengambilan data, respon dari webserver adalah data yang ingin di ambil oleh Raspberry Pi itu sendiri.

kali ini, kita akan menggunakan script Python untuk mengambil data dari web server di Raspberry Pi. untuk mempermudah pemograman kita akan menggunakan module Requests di Python.

Mempersiapkan Script PHP di Server

kita akan membuat script php sederhana untuk memeriksa key yang dikirimkan agar lebih secure, dan memberikan respon data berformat Json. karena ini script php sederhana maka, tidak diperlukan sebuah framework php, kita gunakan pure native php.

pertama-tama kita periksa data key  yang dikirim dengan method GET, apabila data key benar baru dilanjutkan ke proses selanjutnya yaitu membuat respon data berformat Json. berikut script PHP-nya:

<?php
if ($_SERVER['REQUEST_METHOD'] == "GET") {

if ($_GET["key"] == 'asdqwe123') {
 $data = array('speedMotorA' => 4 ,
  'speedMotorB' => 5);

 header('Content-type: application/json');
 echo json_encode($data);
}

}

else {
 return;
}

?>

jika script php diatas, kita akses dengan browser (chrome atau firefox) dengan mengetikan alamat : http://alamat_url_anda.com/api.php?key=asdqwe123 akan ada respon berformat JSON seperti gambar dibawah ini (pada gambar menggunakan browser firefox) :


ketika ouputnya sudah seperti diatas, maka script PHP kamu sudah berkerja dengan semestinya. kemudian langkah selanjutnya yaitu membuat script dengan python untuk melakukan http request ke url server kemudian memparse atau mejabarkan dalam bentuk array respon berformat json diatas. 

Install modul Requests untuk Python

agar script python nantinya bisa melakukan http request ada beberapa package yang akan digunakan salah satunya yaitu requests package ini memungkinkan script python untuk melakukan http request sekaligus bisa mendapatkan responnya yang berformat json diatas. sekarang install package requests dengan perintah dibawah ini :

sudo apt-get update


pip install requests

setelah berhasil terinstall, kita buat script python untuk melakukan request http ke url server dan memparse respon datanya yang berformat json menjadi bentuk array. berikut script untuk python.

import requests
import json

url = "http://alamatserver.com/api.php?key=asdqwe123"

r = requests.get(url)
data= json.dumps(r.json())
data1 = json.loads(data)
print data1['speedMotorA']
print data1['speedMotorB']

ketik kode python diatas dan simpan dengan nama ambilData.py. perlu diperhatikan jangan memberi nama dengan requests.py karena akan membuat baris program import requests tidak akan berkerja dan mengeluarkan error. setelah script ditulis, kamu bisa jalankan dengan perintah dibawah ini di terminal :

python ambilData.py

program python akan melakukan request http dan mengambil data respon dalam format json yang diberikan oleh script php di server, kemudian memparsenya ke bentuk array. untuk melihat datanya diatas sudah diprint dalam bentuk per variable. berikut ini output dari script python saat selesai dijalankan.



ketika output script python kamu sudah seperti diatas. artinya script python kamu sudah bisa mengambil respon dari script PHP di server. kamu bisa mencobanya dengan memasukan variabel speedMotorA dan speedMotorB dengan angka yang berbeda. sehingga ketika script python dijalankan kembali akan menampilkan angka yang kamu masukan pada speedMotorA dan speedMotorB di script PHP.