Eksperimen Dasar IoT: Mengontrol Relay Menggunakan Koneksi Wi-Fi (ESP-01)

IoT (Internet of Things) kini semakin semarak dengan keberadaan modul koneksi wifi yang programmable dengan harga yang sangat terjangkau. Adapun modul yang saya maksud adalah modul-modul berbasis ESP8266 seperti ESP-01, ESP-12, ESP-14, NodeMCU, dan Wemos. Sebagai informasi saja, modul ESP-01 saat ini dijual dengan kisaran harga 30 ribu saja. Dan board berbasis ESP8266 seperti NodeMCU dan Wemos dibandrol di kisaran harga 50 ribu. Sangat murah!

Wi-Fi Relay

Wi-Fi Relay adalah modul relay yang dapat dikendalikan secara wireless melalui jaringan Wi-Fi. Modul relay bisa diakses menggunakan koneksi socket TCP. Untuk mengontrol relay (on/off), client cukup mengirimkan command string yang dikenali oleh server modul Wi-Fi Relay ke alamat IP modul Wi-Fi Relay pada port yang telah ditentukan.

Pada eksperimen ini, saya menggunakan command string sebagai berikut:

  • RELAY1-ON : untuk mengaktifkan RELAY1
  • RELAY2-ON : untuk mengaktifkan RELAY2
  • RELAY3-ON : untuk mengaktifkan RELAY3
  • RELAY4-ON : untuk mengaktifkan RELAY4
  • RELAY1-OFF : untuk mematikan RELAY1
  • RELAY2-OFF : untuk mematikan RELAY2
  • RELAY3-OFF : untuk mematikan RELAY3
  • RELAY4-OFF : untuk mematikan RELAY4

Dan untuk mengakses board Wi-Fi Relay, pada pengujian nanti saya akan menggunakan program telnet, baik dari komputer (Linux dan Windows) maupun Android, dan interpreter Python. Untuk Windows, pengujian (mengakses Wi-Fi Relay) dilakukan menggunakan Hyperterminal dan Putty.

Bahan Eksperimen (Hardware)

Pada eksperimen ini saya menggunakan board KISFORTHUNER (berbasis ATmega328P) dan modul wifi ESP-01. Selain itu, saya menggunakan modul konverter USB-to-TTL untuk keperluan pemrograman ESP-01 dan debugging. Dan tentunya modul USBASP untuk memrogram ATmega328P pada board KISFORTHUNER.

kisesp01

Eksperimen KISFORTHUNER – ESP-01

Secara gampang-gampangan, modul ESP-01 saya rangkai pada protoboard yang tersedia pada board KISFORTHUNER seperti yang terlihat pada gambar di atas. Rangkaian gampang-gampangan ini membutuhkan beberapa komponen, yakni antara lain:

  • kapasitor keramik 100nF
  • kapasitor elektrolit 100uF (saya solder di bawah board KISFORTHUNER)
  • 2 x diode 1N4148
  • 2 x diode zener 3V3 / 3V6
  • resistor 2K2 untuk mengunci pin RST dan CH_PD pada posisi logika HIGH

Berikut ini adalah gambar skematik hubungan modul ESP-01 dengan board KISFORTHUNER.

kisforthuner_esp01

Skematik KISFORTHUNER – ESP-01

Modul ESP-01 membutuhkan tegangan 3,3V. Untuk menyiasatinya, saya menggunakan 2 buah diode 1N4148 yang dirangkai secara seri untuk menurunkan tegangan 5V menjadi kisaran 3,3V. Dari hasil pengukuran, tegangannya lumayan bagus. Dan dengan kemampuan diode 1N4148 menghantarkan arus kisaran 200mA, maka cukuplah untuk mengoperasikan ESP-01. Jika ingin lebih mantap, diode 1N4148 bisa diganti dengan diode silikon seperti 1N4007 yang mampu menghantarkan arus 1A.

3v3diode

Hasil pengukuran tegangan 5V setelah dikurangi 2 x 1N4148

Pemrograman (Software)

Pada eksperimen ini, saya menggunakan bahasa pemrograman FORTH untuk membuat aplikasi Wi-Fi Relay menggunakan ESP8266 (ESP-01). Saya menggunakan punyforth, yakni implementasi FORTH untuk ESP8266. punyforth juga memiliki versi untuk x86 (linux) dan ARM (Raspberry Pi). punyforth aktif dikembangkan dan tersedia di https://github.com/zeroflag/punyforth.

Untuk memrogram board KISFORTHUNER, saya menggunakan IDE Arduino. Karena board KISFORTHUNER menggunakan ATmega328P dengan kristal 16MHz, maka kita dapat memilih board Arduino UNO atau Duemilanove pada IDE Arduino untuk memrogram KISFHORTUNER.

Nah, berikut adalah listing program untuk modul ESP-01 dan board KISFORTHUNER.

Program Untuk Modul ESP-01 (Forth)

\ KISFORTHUNER + ESP-01
\ KONTROL 4-RELAY VIA WIFI
\ PUNYFORTH FOR ESP8266

: RELAY1-ON 82 _emit 49 _emit ;
: RELAY1-OFF 114 _emit 49 _emit ;
: RELAY2-ON 82 _emit 50 _emit ;
: RELAY2-OFF 114 _emit 50 _emit ;
: RELAY3-ON 82 _emit 51 _emit ;
: RELAY3-OFF 114 _emit 51 _emit ;
: RELAY4-ON 82 _emit 52 _emit ;
: RELAY4-OFF 114 _emit 52 _emit ;

str: "password" str: "linksys" wifi-connect
repl-start

Program ini berisi implementasi words:

  • RELAY1-ON, berfungsi mengirim karakter ‘R’ dan ‘1’ ke port serial
  • RELAY1-OFF, berfungsi mengirim karakter ‘r’ dan ‘1’ ke port serial
  • RELAY2-ON, berfungsi mengirim karakter ‘R’ dan ‘2’ ke port serial
  • RELAY2-OFF, berfungsi mengirim karakter ‘r’ dan ‘2’ ke port serial
  • RELAY3-ON, berfungsi mengirim karakter ‘R’ dan ‘3’ ke port serial
  • RELAY3-OFF, berfungsi mengirim karakter ‘r’ dan ‘3’ ke port serial
  • RELAY4-ON, berfungsi mengirim karakter ‘R’ dan ‘4’ ke port serial
  • RELAY4-OFF,berfungsi mengirim karakter ‘r’ dan ‘4’ ke port serial

Perintah str: “password” str: “linksys” wifi-connect berfungsi untuk menghubungkan modul ESP-01 ke wifi router linksys yang saya gunakan di rumah. Dan perintah repl-start akan mengaktifkan server yang dalam hal ini akan aktif pada port 1983. Jadi jika modul ESP-01 mendapatkan alamat IP 192.168.1.105 dari wifi router, maka kita bisa mengakses Wi-Fi Relay pada alamat IP 192.168.105, port 1983.

Program Untuk KISFORTHUNER (Arduino)

Seperti yang sudah saya sampaikan sebelumnya, program ini saya buat menggunakan IDE Arduino.

const int RELAY[4] = { 8, 7, 6, 5 };

void relayControl(int n, int c)
{
   digitalWrite(RELAY[n], c);
   digitalWrite(RELAY[n], c);
   digitalWrite(RELAY[n], c);
   digitalWrite(RELAY[n], c);
   digitalWrite(RELAY[n], c);
}

void setup()
{
   for (int i=0; i<4; i++)
      pinMode(RELAY[i], OUTPUT);
 
   Serial.begin(115200);
}

void loop()
{
   char ch;
 
   if (Serial.available())
   {
      ch = Serial.read();
      if (ch=='R')
      {
         while (!Serial.available());
         ch = Serial.read();
         if (ch>=49 && ch<=52)
            relayControl(ch-49, HIGH);
      }
      else if (ch=='r')
      {
         while (!Serial.available());
         ch = Serial.read();
         if (ch>=49 && ch<=52)
         relayControl(ch-49, LOW);
      }
   }
}

Board KISFORTHUNER (ATmega328P) akan menunggu apakah ada data yang dikirim melalui port serial. Jika ada, maka KISFORTHUNER akan menyeleksinya.

  • Jika data yang dikirim ‘R’ dan ‘1’, maka mikro akan mengaktifkan RELAY1
  • Jika data yang dikirim ‘R’ dan ‘2’, maka mikro akan mengaktifkan RELAY2
  • Jika data yang dikirim ‘R’ dan ‘3’, maka mikro akan mengaktifkan RELAY3
  • Jika data yang dikirim ‘R’ dan ‘4’, maka mikro akan mengaktifkan RELAY4
  • Jika data yang dikirim ‘r’ dan ‘1’, maka mikro akan mematikan RELAY1
  • Jika data yang dikirim ‘r’ dan ‘2’, maka mikro akan mematikan RELAY1
  • Jika data yang dikirim ‘r’ dan ‘3’, maka mikro akan mematikan RELAY1
  • Jika data yang dikirim ‘r’ dan ‘4’, maka mikro akan mematikan RELAY1

Pengujian Menggunakan telnet

Setelah modul ESP-01 dan board KISFORTHUNER diprogram, maka langkah selanjutnya adalah melakukan pengujian. Pengujian menggunakan program telnet pada komputer yang juga terhubung ke jaringan yang sama dengan ESP-01.

Setelah melakukan beberapa kali perintah ping, saya menemukan bahwa modul ESP-01 berada pada alamat 192.168.1.100.

Nah, perhatikan screenshot berikut ini.

telnet

Mengakses Wi-Fi Relay (ESP-01) Menggunakan Telnet

Setelah terjalin komunikasi antara telnet dengan ESP-01, maka kita bisa mengirim perintah-perintah (command string) yang dikenali oleh ESP-01, antara lain: RELAY1-ON, RELAY2-ON, dst.

Ketika modul ESP-01 menerima perintah RELAY1-ON, maka fungsi (word) RELAY1-ON akan mengirim karakter ‘R’ dan ‘1’ ke mikrokontroler. Mikrokontroler (KISFORTHUNER) menerima karakter ‘R’ dan ‘1’ dan mengaktifkan RELAY1.

Hasil pengujian menggunakan program telnet ini sangat memuaskan. Relay-relay pada board KISFORTHUNER berhasil dikontrol dari komputer dengan menggunakan program komunikasi telnet. Yang artinya, kita pasti bisa mengontrol relay menggunakan program apapun dengan menggunakan pemrograman socket.

Saya juga mencoba mengakses dari komputer Windows menggunakan program Hyperterminal. Berikut adalah screenshot-nya.

wifirelay01

Pengujian Menggunakan Python

Python merupakan interpreter yang memiliki library (module) yang sangat lengkap, termasuk didalamnya adalah module socket. Berikut adalah screenshot pemrograman socket menggunakan Python untuk mengontrol Wi-Fi Relay pada eksperimen ini.

python

Dengan program yang singkat, relay-relay pada board KISFORTHUNER pun dapat kita kontrol dengan sangat mudah. Menarik, bukan?

Hasil pengujian dengan Python ini membuktikan bahwa Wi-Fi Relay dapat diakses dengan mudah. Kita bisa menggunakan Python, REBOL, PHP, Javascript, BASIC, C, Pascal dan lain sebagainya.

Pengujian Menggunakan Telnet Android

Selanjutnya, saya mencoba melakukan koneksi ke ESP-01 melalui tablet Android menggunakan aplikasi bernama Telnet. Berikut adalah screenshot-nya.

telnetdroid

Mengakses Wi-Fi Relay (ESP-01) Menggunakan Android

Video Demo

Sebagai pengujian terakhir, saya menggunakan program Putty pada Windows untuk berinteraksi dengan Wi-Fi Relay (ESP-01). Silakan simak video berikut ini.

Kesimpulan

Dari hasil pengujian yang telah dilakukan, dapat disimpulkan bahwa:

  • tegangan 3,3V dapat diperoleh dengan menurunkan tegangan 5V menggunakan rangkaian diode seri 1N4148 seri
  • ESP-01 berkomunikasi dengan baik dengan ATmega328P menggunakan rangkaian di atas (Skematik KISFORTHUNER – ESP-01)
  • program TCP Server dari punyforth bekerja dengan baik
  • Wi-Fi Relay dapat diakses menggunakan program telnet, baik menggunakan komputer maupun Android
  • pemrograman socket menggunakan Python sangatlah mudah

Nah, demikianlah laporan eksperimen yang dapat saya sampaikan. Semoga bermanfaat.

Selamat berkarya.

Tagged with: , , ,
Ditulis dalam Driver Relay, ESP-01, ESP8266, IoT (Internet of Things)

Bagaimana Cara Memrogram LCD Menggunakan Raspberry Pi dan REBOL

raspi_lcd_rebol

LCD 2 x 16-karakter merupakan komponen tampilan yang populer dan relatif mudah digunakan, baik secara rangkaian (hardware) maupun secara pemrograman (software). Pada tulisan kali ini saya akan memberikan catatan eksperimen tentang bagaimana memrogram LCD menggunakan bahasa REBOL.

Pada eksperimen ini saya menggunakan modul prototipe LCD dengan konfigurasi pin header konektor sebagai berikut:

Pin Nama Pin
1 GND
2 VCC
3 LCD-RS
4 LCD-E
5 DATA-4
6 DATA-5
7 DATA-6
8 DATA-7

Untuk mengontrol LCD yang kita butuhkan adalah sumber tegangan untuk LCD (VCC-GND) dan 6 buah pin GPIO yang difungsikan sebagai OUTPUT. Kita dapat menggunakan GPIO yang mana saja. Namun akan lebih baik jika kita menggunakan GPIO tanpa fitur tambahan seperti I2C, SPI atau UART, jadi GPIO yang murni untuk digital-input atau digital-output. Untuk Raspi B+, kita bisa gunakan GPIO dengan nomor pin header 29 hingga 40 yang meliputi antara lain GPIO05, GPIO06, GP12, GPIO13 dan seterusnya.

Pada eksperimen ini saya menggunakan pin-pin GPIO berikut ini:

Pin LCD Pin Raspberry Pi
LCD-RS GPIO-20
LCD-E GPIO-21
DATA-4 GPIO-26
DATA-5 GPIO-19
DATA-6 GPIO-13
DATA-7 GPIO-6
VCC VCC
GND GND

Keenam pin GPIO tersebut harus diaktifkan dan difungsikan sebagai OUTPUT. Berikut adalah penggalan program yang bertugas mengaktifkan dan mengeset fungsi GPIO-GPIO untuk LCD tersebut.

;Konfigurasi GPIO untuk LCD
;LCD-GPIO [RS,  E, D4, D5, D6, D7]
LCD-GPIO: [20  21  26  19  13   6]
LCD-RS: LCD-GPIO/1
LCD-E: LCD-GPIO/2
LCD-D4: LCD-GPIO/3
LCD-D5: LCD-GPIO/4
LCD-D6: LCD-GPIO/5
LCD-D7: LCD-GPIO/6

init-gpio: func [
   gpios [block!]
][
   foreach n gpios [
      either exists? to file! ajoin [%/sys/class/gpio/gpio n] [
         write to file! ajoin [%/sys/class/gpio/gpio n "/direction"] "out^/"
      ][
         write %/sys/class/gpio/export ajoin [n newline]
         write to file! ajoin [%/sys/class/gpio/gpio n "/direction"] "out^/"
      ]
   ]
]

Anda dapat menggunakan GPIO yang lain sesuai dengan kebutuhan aplikasi. Namun jika Anda perhatikan pada layout pin Raspberry Pi, maka pemilihan GPIO di atas, selain dipilih GPIO yang tidak memiliki fungsi/fitur tambahan, maka keenam pin GPIO itu terletak pada satu area pin (bagian bawah) sehingga diharapkan akan lebih rapi dan lebih mudah pemasangannya.

Pemrograman LCD Menggunakan REBOL

LCD perlu diinisialisasi terlebih dahulu sebelum dapat digunakan. Inisialisasi meliputi pemilihan mode pemrograman antara lain mode 8-bit dan mode-4 bit, pengesetan properti kursor dan penghapusan layar LCD (clear-screen).

Btw, pemrograman mode 8-bit tentu lebih mudah dibandingkan dengan mode 4-bit karena kita bisa langsung menuliskan data 8-bit dalam satu kali proses. Namun demikian, demi menghemat penggunaan pin GPIO, maka kita harus menggunakan mode 4-bit sehingga kita bisa menghemat 4 pin GPIO untuk keperluan yang lain.

Pada mode 4-bit, kita harus mengirimkan data yang berukuran 8-bit dalam 2 kali proses dengan pembagian 4-bit (nibble). Adapun urutan pengirimannya adalah high-nibble (bit4-bit7) dan kemudian low-nibble (bit0-bit3).

Untuk mengatur konfigurasi LCD, data ditulis ke Control-Register. Untuk menulis ke Control-Register, maka pin LCD-RS (Register Selector) harus diberi logika “0”. Dan untuk menampilkan karakter ke LCD, data ditulis ke Data-Register. Untuk menulis ke Data-Register, maka pin LCD-RS harus diberi logika “1”.

Setelah register tujuan ditentukan dengan mengeset/mereset LCD-RS, maka data bisa ditulis ke pin-pin data DATA-4, DATA-5, DATA-6 dan DATA-7 dengan urutan seperti yang telah dijelaskan sebelumnya. Dan untuk memasukkan data ke register yang dituju, maka digunakanlah pin LCD-E. LCD-E digunakan untuk meng-update atau memasukkan data ke register. Perubahan kondisi logika dari logika “1” ke logika “0” pada pin LCD-E akan menyebabkan data pada pin-pin data ditulis/masuk ke register yang dituju.

Penasaran bagaimana programnya? Berikut adalah penggalan program untuk menulis data ke LCD dan inisialisasi LCD.

write-lcd: func [
   d [binary!]
   /DATA
][
   either DATA [set-gpio LCD-RS "1"] [set-gpio LCD-RS "0"]
   set-gpio LCD-D4 "0"
   set-gpio LCD-D5 "0"
   set-gpio LCD-D6 "0"
   set-gpio LCD-D7 "0"
   all [equal? #{10} d and #{10} set-gpio LCD-D4 "1"]
   all [equal? #{20} d and #{20} set-gpio LCD-D5 "1"]
   all [equal? #{40} d and #{40} set-gpio LCD-D6 "1"]
   all [equal? #{80} d and #{80} set-gpio LCD-D7 "1"]
   set-gpio LCD-E "1"
   set-gpio LCD-E "0"  ;tulis 4-bit high-nibble

   set-gpio LCD-D4 "0"
   set-gpio LCD-D5 "0"
   set-gpio LCD-D6 "0"
   set-gpio LCD-D7 "0"
   all [equal? #{01} d and #{01} set-gpio LCD-D4 "1"]
   all [equal? #{02} d and #{02} set-gpio LCD-D5 "1"]
   all [equal? #{04} d and #{04} set-gpio LCD-D6 "1"]
   all [equal? #{08} d and #{08} set-gpio LCD-D7 "1"]
   set-gpio LCD-E "1"
   set-gpio LCD-E "0"   ;tulis 4-bit low-nibble
]

init-lcd: func [ 
][
  write-lcd #{33}
  write-lcd #{32}
  write-lcd #{28}
  write-lcd #{0C}  
  write-lcd #{06}
  write-lcd #{01}  
]

Nah, begitulah cerita singkat tentang proses pemrograman LCD yang disertai penggalan program dalam bahasa  REBOL.

Untuk program selengkapnya, saya mohon maaf hanya menampilkan screenshot-nya sahaja karena listingnya cukup panjang. Anda dapat menghubungi saya melalui email atau SMS jika berminat dengan file-file program REBOL pada eksperimen ini. Nah, berikut adalah beberapa screenshot program REBOL untuk menampilkan tulisan pada LCD 2 x 16 karakter.

rebol3_lcd_1

rebol_lcd_2

Menjalankan Program LCD REBOL

Untuk menjalankan program LCD REBOL, kita bisa menggunakan perintah berikut ini:

$ sudo ./r3 rpilcd.r

Dan selain foto pada awal tulisan, berikut ini adalah foto lain hasil pengujian yang saya lakukan.

raspi_lcd_raspi

raspi_lcd_suhu

Dengan adanya LCD meskipun cuma berukuran 2 x 16 karakter, kita bisa menampilkan informasi-informasi penting seperti suhu CPU, sisa memori, hasil pembacaan sensor suhu, sensor kelembaban dan lain sebagainya.

Nah, sekian dulu Catatan Eksperimen Raspberry Pi untuk kali ini. Nantikan catatan eksperimen selanjutnya.

Informasi Modul LCD Raspberry Pi

Modul LCD 2 x 16 karakter untuk Raspberry Pi sedang saya siapkan. Informasi harga dan cara pemesanan akan saya sampaikan setelah modul siap. Modul akan dilengkapi dengan program Command-Line Interface (CLI) untuk memudahkan menampilkan tulisan pada LCD melalui Shell. Dengan program CLI, kita akan dapat menampilkan tulisan pada LCD menggunakan program apapun seperti Python, PHP dan BASH.

Selamat berkarya.

Tagged with: , , ,
Ditulis dalam Raspberry Pi, Uncategorized

Bagaimana Cara Membaca Tombol Menggunakan Raspberry Pi dan REBOL

Pada postingan sebelumnya saya memberikan contoh bagaimana cara mengontrol lampu LED menggunakan Raspberry Pi. Dan sesuai janji saya di akhir postingan tersebut, saya akan memberikan contoh bagaimana cara membaca masukan menggunakan Raspberry Pi. Pada contoh ini saya akan menggunakan sebuah Push-Button sebagai tombol untuk mengaktifkan rangkaian flip-flop. Jadi flip-flop akan bekerja jika dan selama tombol ditekan dan flip-flop akan berhenti bekerja jika dan selama tombol tidak ditekan (dilepas). Tipe masukan (dalam hal ini tombol) adalah aktif-tinggi. Jika ditekan, pin akan bertegangan 3V3 (berlogika tinggi) dan jika tidak ditekan, pin akan bertegangan 0V (berlogika rendah).

raspi_led_tombol

LED1 dan LED2 masih tetap dikontrol oleh pin GPIO-5 dan GPIO-6, sedangkan tombol PB1 dihubungkan ke pin GPIO-26.

Membaca Status Masukan GPIO (SHELL)

Untuk membaca status masukan GPIO, kita bisa menggunakan perintah cat. Berikut adalah langkah-langkahnya:

  1. Buka terminal
  2. Aktifkan akses root
    $ sudo -i
  3. Konfigurasi GPIO-26 sebagai INPUT
    $ echo "26" > /sys/class/gpio/export
    $ echo "in" > /sys/class/gpio/gpio26/direction
  4. Tanpa ditekan tombolnya, baca masukan GPIO-26
    $ cat /sys/class/gpio/gpio26/value
  5. Tombol ditekan dan baca masukan GPIO-26
    $ cat /sys/class/gpio/gpio26/value

Hasil eksperimen perintah-perintah tersebut dapat dilihat pada screenshot berikut ini.

raspi_gpio_in_shell

Nampak pada screenshot di atas bahwa perintah cat /sys/class/gpio/gpio26/valuemenghasilkan nilai 0 ketika tombol tidak ditekan dan menghasilkan nilai 1 ketika tombol ditekan.

Flip-Flop Terkendali Tombol (REBOL)

Untuk membuat rangkaian flip-flop terkendali tombol, berikut adalah listing program REBOL-nya.

Listing Program flipflop.r3

REBOL [
	filename: %flipflop.r3
	title: "Flip-Flop Terkendali Tombol"
	programmer: "Chandra MDE"
	website: http://raspi.teknikelektrolinks.com
]

DPB1: %/sys/class/gpio/gpio26/direction
VPB1: %/sys/class/gpio/gpio26/value
DLED1: %/sys/class/gpio/gpio5/direction
DLED2: %/sys/class/gpio/gpio6/direction
VLED1: %/sys/class/gpio/gpio5/value
VLED2: %/sys/class/gpio/gpio6/value

;inisialisasi GPIO-5 dan GPIO-6 = OUTPUT, GPIO-26 = INPUT
init-gpio: func [
][
	write %/sys/class/gpio/export "5"
	write DLED1 "out"
	write VLED1 "0"
	
	write %/sys/class/gpio/export "6"
	write DLED2 "out"
	write VLED2 "0"
	
	write %/sys/class/gpio/export "26"
	write DPB1 "in"
]

;lampu kedip alias flipflop
flip-flop: func [
][
	write VLED1 "1" ;on
	wait .1  ;100ms - cepat
	write VLED1 "0" ;off
	write VLED2 "1" ;on
	wait .1
	write VLED2 "0" ;off
]

n: 0
i: []

init-gpio
print "Tekan TOMBOL untuk mengaktifkan flip-flop..."
forever [
	i: read VPB1
	if i == #{310A} [ ;jika tombol ditekan
		n: n + 1
		print ["Perulangan ke-" n]
		flip-flop
                ;selesai jika sudah blinking 15 kali
		if n == 15 [print "Selesai." quit]
	]
]

Menjalankan flipflop.r3

Untuk menjalankan program flipflop.r3, gunakan perintah:

$ sudo ./r3 flipflop.r3

Dan berikut ini adalah hasil eksekusi program flipflop.r3:

raspi_flipflop_tombol

Nah, cukup sekian Catatan Eksperimen Raspberry Pi kali ini, semoga ada guna dan manfaatnya.

Jika Anda berminat dengan file aplikasi REBOL3 dan file program flipflop.r3, silakan menuliskan komentar di bawah postingan ini dengan menyertakan nama dan alamat emailnya. File-file akan saya kirimkan ke alamat email Anda masing-masing.

Selamat berkarya.

Tagged with: , , , ,
Ditulis dalam Raspberry Pi, Uncategorized

Bagaimana Cara Mengontrol Lampu LED Menggunakan Raspberry Pi dan REBOL

Mengontrol lampu LED menggunakan GPIO Raspberry Pi sangatlah mudah. GPIO dapat diakses seperti layaknya mengakses file. Dan memanglah setahu saya segala sesuatu yang namanya IO pada sistem operasi linux dapat diakses secara file. Pada postingan kali ini saya akan berikan contoh bagaimana cara mengontrol lampu LED menggunakan Raspberry Pi dan REBOL.

Mengakses GPIO Raspi Dengan Shell

GPIO Raspberry Pi dapat kita akses secara langsung melalui shell menggunakan perintah-perintah Shell seperti echo (write) dan cat (read). Sebelum dapat mengakses GPIO, maka perlu dilakukan export terlebih dahulu. Export akan menciptakan folder baru untuk pin yang di-export dan sekaligus menciptakan file-file fungsi kontrol untuk mengontrol fungsi pin yang di-export. Fungsi kontrol tersebut antara lain:

  • active_low
  • direction
  • edge
  • power
  • subsystem
  • uevent
  • value

File-file fungsi kontrol tersebut dapat dibaca oleh non-root (user) akan tetapi untuk menuliskan data hanya dapat dilakukan oleh root sebagai pemilik. Oleh karenanya diperlukan sudo.

Berikut adalah contoh menyalakan lampu LED pada GPIO-5 (pin-29) menggunakan shell.

  1. Buka terminal
  2. Rangkai LED seperti foto di atas (LED aktif LOW)
  3. Aktifkan akses root dengan perintah:
    $ sudo -i
  4. Konfigurasi GPIO-5 sebagai OUTPUT dan LED=OFF dengan perintah:
    $ echo "5" > /sys/class/gpio/export
    $ echo "out" > /sys/class/gpio/gpio5/direction
    $ echo "1" > /sys/class/gpio/gpio5/value
  5. Menyalakan LED dengan mengeset GPIO-5 = LOW (“0″)
    $ echo "0" > /sys/class/gpio/gpio5/value
  6. Mematikan LED dengan mengeset GPIO-5 = HIGH (“1″)
    $ echo "0" > /sys/class/gpio/gpio5/value
  7. Kembalikan GPIO-5 ke kondisi semula setelah digunakan
    $ echo "5" > /sys/class/gpio/unexport
  8. Dan kita kembalikan kembali ke akses user
    $ exit

Guampang, bukan? Nah, sekarang kita akan melakukan hal yang sama dengan REBOL3.

Mengakses GPIO Raspi Dengan REBOL3

  1. Masih dengan rangkaian LED yang sama, kita buka terminal
  2. Jalankan REBOL3 dengan perintah:
    $ sudo ./r3
  3. Konfigurasi GPIO-5 sebagai output dan LED=OFF dengan perintah:
    >> write %/sys/class/gpio/export "5"
    >> write %/sys/class/gpio/gpio5/direction "out"
    >> write %/sys/class/gpio/gpio5/value "1"
  4. Menyalakan LED dengan mengeset GPIO-5 = LOW (“0″)
    >> write %/sys/class/gpio/gpio5/value "0"
  5. Mematikan LED dengan mengeset GPIO-5 = HIGH (“1″)
    >> write %/sys/class/gpio/gpio5/value "1"
  6. Membuat Blinking LED dengan perulangan 10 kali – delay 500ms
    >> gpio5: %/sys/class/gpio/gpio5/value
    >> loop 10 [write gpio5 "0" wait .5 write gpio5 "1" wait .5]
  7. LED pada GPIO-5 pun berkedip sebanyak 10 kali dengan durasi-on/off 500 milidetik.

raspi_gpio_rebol

Contoh Program Flip-Flop

Setelah sukses mengontrol sebuah lampu LED pada GPIO-5 (pin-29), sekarang kita akan mengontrol dua lampu LED dengan membuat aplikasi Flip-Flop. LED1 terhubung ke GPIO-5 dan LED2 terhubung ke GPIO-6. Berikut adalah kode program REBOL-nya.

Listing Program flipflop56.r3

REBOL [
  filename: %flipflop56.r3
  title: "Flip-Flop LED Raspi GPIO-5 dan GPIO-6"
  programmer: "Chandra MDE"
  blog: "Raspberry Pi Notes"
  website: http://raspi.teknikelektrolinks.com
]

jumlah-loop: 1000 ; default = seribu kedip
		  ; jumlah-kedip bisa diatur menggunakan parameter
		  ; contoh: ./r3 flipflop56.r3 10 ===> 10 kali

all [system/script/args jumlah-loop: to integer! system/script/args]

DLED1: %/sys/class/gpio/gpio5/direction
DLED2: %/sys/class/gpio/gpio6/direction
VLED1: %/sys/class/gpio/gpio5/value
VLED2: %/sys/class/gpio/gpio6/value

;inisialisasi GPIO-5 dan GPIO-6 sebagai OUTPUT
init-gpio: func [
][
	write %/sys/class/gpio/export "5"
	write DLED1 "out"
	write VLED1 "1"
	write %/sys/class/gpio/export "6"
	write DLED2 "out"
	write VLED2 "1"
]

;lampu kedip alias flipflop
flip-flop: func [
][
	write VLED1 "0" ;on
	wait .5
	write VLED1 "1" ;off
	write VLED2 "0" ;on
	wait .5
	write VLED2 "1" ;off
]

init-gpio
for n 1 jumlah-loop 1 [
        print ["Perulangan ke-" n]
	flip-flop
]
quit

Menjalankan Program Flip-Flop

Setelah kode program flipflop56.r3 selesai diketik, kita dapat langsung mencobanya dengan menjalankan perintah pada shell sebagai berikut:

$ sudo ./r3 flipflop56.r3

Pemanggilan tanpa argument (parameter) akan menyebabkan program menjalankan proses flip-flop sebanyak 1000 kali, yakni nilai default dari jumlah-loop. Untuk menjalankan proses flip-flop sebanyak 10 kali, gunakan perintah sebagai berikut:

$ sudo ./r3 flipflop56.r3 10

Screenshot Flip-Flop RASPI-REBOL

raspi_rebol_flipflop

Video Pengujian Flip-Flop REBOL

Anda dapat menyaksikan video pengujian program dan rangkaian di atas pada situs youtube melalui link berikut ini:

https://youtu.be/X_hM9Dj7Ao0

Sangat menarik, bukan? Pada postingan yang akan datang saya akan memberikan contoh bagaimana membaca masukan (input) dari GPIO Raspberry Pi menggunakan Shell dan REBOL. File aplikasi REBOL3 (r3) dan kode program flipflop56.r3 dapat Anda miliki secara GRATIS dengan MEMBERIKAN KOMENTAR di bawah postingan ini.

Silakan memberikan komentar beserta nama dan alamat email Anda dan saya akan mengirim file-file tersebut langsung ke email Anda.

Sekian Catatan Eksperimen Raspberry Pi kali ini. Semoga bermanfaat.

Selamat berkarya!

Tagged with: , , ,
Ditulis dalam Raspberry Pi, Uncategorized
Blog Stats
  • 1,304,663 hits

Bergabunglah dengan 2.496 pengikut lainnya

NEO STARDUINO
USB Relay USB-2REL
USB Relay USB-4REL
Water Level Control WLC-02
Serial Relay SER-4REL
NEO STARDUINO SMS ALARM

Alarm SMS Berbasis NEO STARDUINO

1 PC – 6 Unit USB-2REL

Testing 6 USB-2REL Pada 1 Komputer

Standard Pengujian USB-2REL

Pengujian USB-2REL Sebelum Dikirim

LPT-4REL on Knoppix 7.0.5

Testing LPT-4REL on Knoppix Linux

T101 Inkubator Telur

T101 Inkubator Penetas Telur

KONTROL PERALATAN LISTRIK VIA PORT LPT KOMPUTER

Demo Kontrol Kontaktor via Port LPT

STARDUINO meets ANDROID

Demo Kontrol Bluetooth Relay Android

STARDUINO SMS RELAY

Kontrol Relay Via SMS Dengan Starduino

STARDUINO WEB RELAY

Demo Kontrol Relay Via Web/Internet

JustBASIC USB-2REL Control

Demo Kontrol USB-2REL + JustBASIC

STARDUINO + GPS + LCD

Demo Starduino GPS Dengan LCD

USB-2REL EXTREME TEST

Demo Kontrol On/Off Lampu USB-2REL

THERMOSTAT T101 IN ACTION

Demo Thermostat T101 Pada SV=37.5°C

WATER LEVEL CONTROL WLC-02

Demo Kontrol Level Air Tandon WLC-02

HUMIDITY CONTROLLER H103

Demo Kontrol Kelembaban H103 (DHT11)