Membuat Sendiri Aplikasi Bel Sekolah/Kantor Dengan USB-1REL dan REBOL

Salah satu produk antarmuka USB yang banyak diminati adalah USB-1REL. Modul ini sangat praktis untuk mengontrol sebuah beban listrik AC maupun DC seperti bel/sirine, lampu, fan atau solenoid. USB-1REL tidak memerlukan catudaya eksternal, modul ini mengambil suplai tegangan dari port USB. Untuk memudahkan penggunaan modul, kami memberikan dukungan untuk berbagai sistem operasi antara lain: Windows, Linux dan Linux-ARM (Raspberry Pi), dan juga berbagai bahasa pemrograman. Modul ini banyak diaplikasikan sebagai Driver Tripod Turnstile dan Bel Sekolah/Kantor.

Baca juga: Mengontrol Tripod Turnstile Menggunakan USB-1REL

usb1rel-sirine-600

Pada kesempatan ini saya akan memberikan contoh program aplikasi bel sekolah/kantor sederhana menggunakan bahasa pemrograman REBOL3. Dan tentu saja, saya akan memberikan penjelasan singkat mengenai prinsip kerja dari program bel tersebut.

Sekedar introduksi – REBOL3 adalah bahasa pemrograman open-source yang dapat berjalan pada beberapa macam sistem operasi seperti: Windows, Linux, Linux-ARM dan juga Android. REBOL3 merupakan proyek pengembangan dari REBOL2. Proyek REBOL3 terhenti ditengah jalan dan akhirnya diputuskan oleh penciptanya (Carl Sassenrath) untuk melepas sourcecodenya kepada umum. Jadilah sekarang REBOL3 sebagai bahasa pemrograman opensource yang dikembangkan oleh komunitas pengguna bahasa REBOL.

Baca juga: REBOL – Melawan Kompleksisasi dan Gendutisasi Pemrograman Masa Kini

Baca juga: Tulisan dan contoh perogram REBOL3 pada sistem Raspberry Pi

Program Bel REBOL3

Membuat program REBOL untuk aplikasi bel sekolah/kantor dengan modul interface USB-1REL sangatlah mudah. Simak listing program REBOL BEL.R3 berikut ini.

REBOL [
  Filename: %bel.r3
  Description: "Contoh program bel sekolah/kantor"
  Hardware: "USB-1REL"
  Software: "REBOL3"
]

Senin-Kamis: [
  Masuk1    07:30
  Istirahat 12:00
  Masuk2    13:00
  Testing   15:25
  Pulang    16:00
  TESTING   22:46
]

Jumat: [
  Masuk1    07:30
  Istirahat 11:30
  Masuk2    13:00
  Pulang    16:00
]

durasi-bel: 00:00:05

forever [
  hari: now/weekday
  print ["Tanggal:" now/date " Pukul:" now/time]
  if all [hari >= 1 hari <= 4 ][
    foreach [jadwal jam] Senin-Kamis [
      if now/time - jam == 0:00 [ 
        print ["******* Pukul: " jam " -- " jadwal]
        print "******* Bunyikan bel."
        call "usb1rc USB1REL-080 R"
        wait durasi-bel
        print "******* Matikan bel."
        call "usb1rc USB1REL-080 r"
      ]
    ]
  ]

  if hari = 5 [
    foreach [jadwal jam] Jumat [
      if now/time - jam == 0:00 [ 
        print ["******* Pukul: " jam " -- " jadwal]
        print "******* Bunyikan bel."
        call "usb1rc USB1REL-080 R"
        wait durasi-bel
        print "******* Matikan bel."
        call "usb1rc USB1REL-080 r"
      ]
    ]
  ]
  wait 1
]

Penjelasan Singkat Program BEL.R3

Program di atas berfungsi untuk membunyikan bel sesuai jadwal yang telah ditentukan. Jadwal bel dibagi menjadi 2 yakni jadwal bel untuk hari Senin s/d Kamis dan jadwal bel untuk hari Jumat.

Untuk pendeklarasian jadwal, digunakan tipedata block!. Block adalah kumpulan data dan fungsi. Dalam bahasa pemrograman REBOL, data disebut nilai (value) dan fungsi disebut kata (word). Jadi block adalah kumpulan value dan word. Block merupakan tipedata REBOL yang hampir selalu digunakan dalam program.

Contoh block:

   Daftar-Harga: [
      buku      2000
      pensil    1000
      penghapus 500 ]
   Temanku: [
      ari    08123456789   ari@gmail.com
      boni   08987654321   boni@yahoo.com
      catur  08781234567   catur@hotmail.com ]

Dengan tipedata block, kita dapat menggabungkan data hari dan jam aktivasi bel dengan sangat mudah. Berikut adalah potongan program untuk deklarasi jadwal bel untuk hari Senin-Kamis dan hari Jumat.

Jadwal Bel Hari Senin-Kamis

Senin-Kamis: [
  Masuk1    07:30
  Istirahat 12:00
  Masuk2    13:00
  Testing   15:25
  Pulang    16:00
  TESTING   22:46
]

Jadwal Bel Hari Jumat

Jumat: [
  Masuk1    07:30
  Istirahat 11:30
  Masuk2    13:00
  Pulang    16:00
]

Pada jadwal bel hari Senin-Kamis terdapat item jadwal Testing pada pukul 15:25 dan  TESTING pada pukul 22:46. Data ini untuk keperluan pengujian saja dan dapat dihapus.

Bagian program selanjutnya adalah deklarasi nilai durasi-bel dengan tipedata time!.

    durasi-bel 00:00:05

durasi-bel menyatakan durasi atau lamanya bel dibunyikan. Pada contoh program ini, durasi-bel diset dengan nilai 00:00:05 yang berarti 5 detik.

Bagian program selanjutnya adalah perulangan tanpa-batas menggunakan kata forever.

   forever [
      hari: now/weekday
      print ["Tanggal:" now/date " Pukul:" now/time]
      if all [hari >= 1 hari <= 4 ][
         foreach [jadwal jam] Senin-Kamis [
            if now/time - jam == 0:00 [ 
               print ["******* Pukul: " jam " -- " jadwal]
               print "******* Bunyikan bel."
               call "usb1rc USB1REL-080 R"
               wait durasi-bel
               print "******* Matikan bel."
               call "usb1rc USB1REL-080 r"
            ]
         ]
      ]

      if hari = 5 [
         foreach [jadwal jam] Jumat [
            if now/time - jam == 0:00 [ 
               print ["******* Pukul: " jam " -- " jadwal]
               print "******* Bunyikan bel."
               call "usb1rc USB1REL-077 R"
               wait durasi-bel
               print "******* Matikan bel."
               call "usb1rc USB1REL-077 r"
            ]
         ]
      ]
      wait 1
   ]

Bagian program ini berfungsi melakukan perbandingan antara waktu sekarang (now) dengan waktu pada jadwal bel. Jika waktu sekarang cocok dengan waktu yang ada di dalam jadwal, maka program akan memanggil aplikasi USB1RC.EXE untuk mengaktifkan relay pada modul USB-1REL.

Untuk mengambil data hari digunakan perintah:

   hari: now/weekday

Dengan perintah tersebut, maka hari akan bernilai antara 1-7 yang merupakan indeks dari hari Senin hingga Minggu.

Karena terdapat perbedaan jadwal bel untuk hari Senin-Kamis dan hari Jumat, maka perlu dilakukan penyeleksian hari. Caranya dengan menggunakan if sebagai berikut:

   if all [hari >= 1 hari <= 4] [
      ; jadwal bel hari Senin-Kamis
   ]

   if hari = 5 [
      ; jadwal bel hari Jumat
   ]

Untuk proses perbandingan waktu sekarang dengan waktu pada jadwal bel untuk hari Senin-Kamis, digunakan perulangan foreach sebagai berikut:

   foreach [jadwal jam] Senin-Kamis [
      if now/time - jam == 0:00 [
         ; aktifkan bel (relay USB-1REL)
         ;
      ]
   ]

Membunyikan bel berarti mengaktifkan relay modul USB-1REL selama durasi yang telah ditentukan. Programnya adalah sebagai berikut:

call "usb1rc USB1REL-077 R"
wait durasi-bel
call "usb1rc USB1REL-077 r"

Menjalankan Program

Untuk menjalankan program BEL.R3, buka command-prompt dan arahkan pada direktori tempat program R3 dan BEL.R3 berada. Kemudian jalankan perintah berikut:

r3 bel.r3

Adapun hasil pengujian program di atas dapat dilihat pada screenshot berikut ini

bel-r3

REBOL3 bekerja pada platform Linux, Raspberry Pi dan Windows. Jadi dengan kode program yang sama (BEL.R3) dan versi command-line interface usb1rc yang sesuai platform, maka akan didapatkan hasil yang sama. Program REBOL3 ini tentunya lebih mudah dicerna dibandingkan dengan bila kita membuat penjadwalan eksekusi menggunakan CRON.

Gambar berikut adalah screenshot program BEL.R3 yang saya jalankan pada platform Linux.

usb1rel_bel_view

Untuk membuat jadwal bel, kita tinggal mengedit file BEL.R3 dan menyusun jadwal seperti format yang telah dicontohkan. Program di atas hanya mengenal 2 kelompok jadwal yakni jadwal untuk hari Senin-Kamis dan jadwal untuk hari Jumat. Tentu kita dapat memodifikasi program untuk jadwal dengan data per hari Senin-Minggu.

Program di atas hanyalah contoh sederhana dan dapat dikembangkan lebih lanjut sehingga menjadi program aplikasi yang bagus dan mudah digunakan.

Konsultasi Gratis Bahasa REBOL

Bagi Anda pengguna modul interface USB-1REL, saya memberikan konsultasi gratis pemrograman bahasa REBOL3 untuk pengembangan aplikasi Bel Sekolah/Kantor.

Download

File program REBOL3 (R3.EXE), USB1RC.EXE dan BEL.R3 dapat Anda download melalui link berikut ini:

http://www.usbinov.com/downloads/bel-usb1rel-rebol.rar

Instalasi Bel Listrik

Bagaimana cara menghubungkan bel listrik ke relay USB-1REL? Berikut adalah gambar instalasinya.

instalasibel

Ketika relay aktif, maka terminal C dan terminal NO akan terhubung (connected) sehingga bel akan terhubung ke jalur LINE dari PLN (bel berbunyi). Dan ketika relay tidak aktif, terminal C dan terminal NO akan terlepas (disconnected).

Program Programmable Timer PT1REL

Kami juga menyediakan PT1REL bagi Anda yang tidak ingin repot. PT1REL adalah software aplikasi penjadwalan aktivasi relay versi GUI untuk modul USB-1REL.

PT1REL

Harga software aplikasi PT1REL adalah Rp. 200.000,-. Harga ini berlaku untuk pembelian pertama. Untuk pembelian berikutnya, harga menjadi Rp. 100.000,-

Nah, semoga tulisan ini bisa memberi manfaat bagi kita semua.

Selamat berkarya!

Tagged with: , , , , ,
Ditulis dalam Driver Relay, Programmable Timer, REBOL, Software/Programming, Timer

WeMos D1 + LM35DZ – Eksperimen Monitoring Suhu Dengan Koneksi Wi-Fi

Dalam rangka mencoba fitur ADC yang ada pada modul ESP8266 (WeMos D1 / ESP-12E), maka saya melakukan eksperimen singkat dengan rangkaian yang sangat sederhana. Simak foto board WeMos D1 Mini dengan rangkaian sensor suhu LM35DZ berikut ini.

wemos-lm35

Rangkaian sensor suhu LM35DZ hanya terdiri dari kapasitor decouple 100nF dan filter lowpass menggunakan RC. Keluaran filter lowpass dihubungkan ke pin Analog board WeMos D1 Mini yang terletak pada pin nomor 2. Perlu diketahui bahwa board WeMos D1 Mini memiliki rangkaian pembagi tegangan seperti ditunjukkan oleh gambar berikut ini (lihat bagian kanan gambar).

wemosminisch

Dengan adanya rangkaian pembagi tegangan yang terdiri dari resistor 220K dan 100K, maka tegangan yang masuk ke pin ADC menjadi 0.3125 kali tegangan aslinya.

Kode Program

Karena ESP8266 sudah dilengkapi dengan SDK yang komplit – plit – plit, maka membaca ADC bukanlah hal istimewa (sulit), cukup dengan memanggil fungsi system_adc_read(). Pada PunyForth, fungsi ini sudah dimasukkan dalam ekstensi Forth dengan definisi kata “adc-read ( — n )”. Implementasinya dalam bahasa assembly seperti ini:

defprimitive "adc-read",8,adcread,REGULAR
   CCALL sdk_system_adc_read
   DPUSH a2
   NEXT

Untuk membaca suhu, saya membuat sebuah perintah dengan definisi kata sebagai berikut:

: suhu ( -- )
    adc-read 96 * 330 /mod
    print: "Suhu = " . cr
    drop ;

Perintah (kata) suhu memanggil fungsi adc-read dan kemudian melakukan kalkulasi untuk mengkonversi nilai ADC menjadi suhu dalam satuan derajad Celcius. Rumus konversi tidak saya kalkulasi dengan komprehensif, yang terpenting data suhu yang ditampilkan tidak melenceng dari nilai sesungguhnya (hasil pengukuran analog).

Nah, tanpa banyak kata lagi, berikut saya berikan kode program eksperimen monitoring suhu selengkapnya.

\ WIFI-LM35DZ
\ EKSPERIMEN ESP8266 - MEMBACA SENSOR SUHU LM35DZ
\ Chandra MDE
\ http://blog.teknikelektrolinks.com

: suhu ( -- )
    adc-read 96 * 330 /mod
    print: "Suhu = " . cr
    drop ;
5000 ms
2 2 2 0 gpio-write gpio-mode
9600 0 uart-set-bps
str: "password" str: "linksys" wifi-connect
repl-start
variable: cntr
0 cntr !
0 task: task-led
0 task: task-timer
: timer-led
    activate
    begin
       1 cntr +!
       10 ms
       pause
    again
    deactivate ;
: imalive
    activate
    begin
       cntr @
       10 <= if 2 1 gpio-write then
       cntr @
       10 > if 2 0 gpio-write then
       cntr @
       20 > if 0 cntr ! then
       pause
    again
    deactivate ;
task-timer timer-led
task-led imalive

Dengan program di atas, maka modul ESP8266 (WeMos) akan secara otomatis terhubung ke jaringan Wi-Fi yang ada. Setelah proses booting dan membangun koneksitas dengan Wi-Fi Router berhasil, maka LED pada board WeMos akan berkedip-kedip. Ini menandakan bahwa sistem siap menerima perintah.

Seperti telah saya sampaikan sebelumnya, perintah yang saya sediakan hanya 1 saja, yakni: suhu. Ketika sebuah client yang terhubung ke sistem mengirimkan perintah suhu, maka sistem akan membalas dengan mengirimkan data suhu dalam bentuk string: “Suhu = xx“. Server penyedia data suhu ini dapat diakses melalui alamat IP dengan port 2017.

Testing – Ngetes Itu Penting

Untuk menguji sistem server data suhu pada eksperimen ini, saya menggunakan aplikasi Android TCP Telnet Terminal. Screenshot-nya dapat dilihat pada gambar berikut ini.

wifi-lm35

Bagaimana? Seru, bukan?

Eksperimen berikutnya yang akan saya sampaikan laporannya adalah WIFI-KEYPAD, yakni sistem keypad/tombol masukan dengan koneksi Wi-Fi. Sistem ini merupakan bagian dari unit masukan pada sistem antrian dengan koneksitas Wi-Fi.

Setelah WIFI-KEYPAD, selanjutnya saya ingin bereksperimen dengan modul sensor suhu dan kelembaban DHT11/DHT22 dan juga modul display LCD 16×2 dengan komunikasi I2C.

Semoga bermanfaat dan selamat berkarya.

Tagged with: , , , ,
Ditulis dalam ESP-12, ESP8266, IoT (Internet of Things)

WIFI-4REL, Modul USB/Serial & Wi-Fi Relay 4-Channel

Setelah sebelumnya bereksperimen dengan ESP-01 dan KISFORTHUNER (baca di sini), kali ini saya ingin melaporkan hasil eksperimen saya membuat prototype modul USB/Serial & Wi-Fi Relay 4-Channel. Laporan hasil eksperimen ini tak lebih hanya sebagai proof-of-concept sebelum dilakukan pengujian yang lebih komprehensif dan penyempurnaan sistem (hardware dan software).

USB/Serial & Wi-Fi Relay

USB/Serial & Wi-Fi Relay adalah sebuah driver relay yang dapat dikontrol melalui koneksi USB (dengan komunikasi serial) DAN melalui koneksi Wi-Fi.

Perhatikan kata “DAN” yang saya tulis tebal. Kata “DAN” di situ memiliki arti bahwasanya relay dapat dikontrol melalui port USB (dengan komunikasi serial) dan melalui Wi-Fi secara bersamaan. Jadi kita bisa mengontrol relay dari komputer/laptop atau Raspberry Pi melalui port USB dengan komunikasi serial dengan baudrate 9600 dan pada saat yang bersamaan, kita juga bisa mengontrol relay dari komputer/laptop atau HP/Tablet Android melalui koneksi Wi-Fi.

Bahan Eksperimen

  • Board WEMOS
  • Board Relay 4-Channel
  • Kabel jumper
  • Kabel data USB

Berikut ini adalah foto dari rangkaian sistem USB/Serial & Wi-Fi Relay 4-Channel.

wemos4r

wifi4rel_lampu

Command (Perintah)

Sistem USB/Serial & Wi-Fi Relay 4-Channel ini saya program untuk dapat mengenali perintah-perintah sebagai berikut:

  • R1, untuk mengaktifkan Relay-1
  • R2, untuk mengaktifkan Relay-2
  • R3, untuk mengaktifkan Relay-3
  • R4, untuk mengaktifkan Relay-4
  • RA, untuk mengaktifkan semua relay
  • r1, untuk mematikan Relay-1
  • r2, untuk mematikan Relay-2
  • r3, untuk mematikan Relay-3
  • r4, untuk mematikan Relay-4
  • rA, untuk mematikan semua relay

Perintah-perintah tersebut dapat dikirim melalui port serial (USB) maupun melalui koneksi Wi-Fi.

Software

Untuk memrogram ESP-12 pada board WEMOS D1, saya menggunakan bahasa pemrograman FORTH. Kode programnya adalah sebagai berikut:

: R1 ( -- ) 5 0 gpio-write ;
: r1 ( -- ) 5 1 gpio-write ;
: R2 ( -- ) 4 0 gpio-write ;
: r2 ( -- ) 4 1 gpio-write ;
: R3 ( -- ) 13 0 gpio-write ;
: r3 ( -- ) 13 1 gpio-write ;
: R4 ( -- ) 14 0 gpio-write ;
: r4 ( -- ) 14 1 gpio-write ;
: RA ( -- ) R1 R2 R3 R4 ;
: rA ( -- ) r1 r2 r3 r4 ;
9600 0 uart-set-bps
14 1 13 1 4 1 5 1 gpio-write gpio-write gpio-write gpio-write
5 2 4 2 13 2 14 2 gpio-mode gpio-mode gpio-mode gpio-mode
str: "password" str: "linksys" wifi-connect
5000 ms
repl-start

Relay-1 dikontrol oleh pin D1 (GPIO5). Relay-2 dikontrol oleh pin D2 (GPIO4). Relay-3 dikontrol oleh pin D7 (GPIO13). Dan Relay-4 dikontrol oleh pin D5 (GPIO14). Driver relay aktif-low.

Pengujian

Pengujian saya lakukan menggunakan program TeraTerm untuk mengontrol relay melalui port USB/Serial dan program putty untuk mengontrol relay melalui jaringan Wi-Fi. Dari hasil pengujian dapat disimpulkan bahwa sistem bekerja dengan baik.

Update 1 April 2017

Saya terus melakukan perbaikan dan pengembangan terhadap sistem Wi-Fi Relay ini berdasarkan hasil pengujian-pengujian yang terus saya lakukan. Walhasil, sistem bekerja dengan baik dan stabil. Berikut adalah video pengujian kontrol WIFI-4REL (Wi-Fi Relay 4-Channel) menggunakan Tablet Android.

Saya juga membuat sebuah program mini: WIFI4RC, yakni program Command-Line Interface untuk mengontrol WIFI-4REL melalui console. Program saya buat menggunakan PowerBASIC. Berikut adalah screenshotnya.

wifi4rc

Nah, demikianlah laporan singkat mengenai hasil eksperimen saya membuat prototype USB/Serial & Wi-Fi Relay 4-Channel. Terus-terang, saya sangat puas dengan hasil pengujian yang menunjukkan bahwa sistem bekerja dengan baik dan stabil, baik secara hardware maupun software.

Jika Anda berminat, silakan menghubungi melalui SMS/WA ke 081231784018.

Selamat berkarya.

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

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
Kategori

Bergabunglah dengan 2.501 pengikut lainnya

Hot Links




Display Counter 3-Digit Dengan Koneksi Wi-Fi
Display Nomor Antrian WiFi Android
Mengontrol Relay Via USB/Serial dan Wi-Fi
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)