Memprogram ESP8266 dengan Arduino Uno

Beberapa waktu yang lalu saya butuh memprogram modul ESP8266 namun entah mengapa selalu gagal. Setelah coba macem2, sepertinya USB-to-Serial adapter yang saya gunakan itu bermasalah. Saya sudah pesan adapter baru namun butuh waktu lama untuk sampai; dan saya gak sabaran xD Untungnya saya menemukan artikel berisi petunjuk menggunakan Arduino Uno atau Nano untuk memprogram modul ESP8266 dan kebetulan saya punya Arduino Uno dan Nano yang bisa dipakai. Inilah cara yang saya pakai.

Perhatian! Panduan berikut ini BUKAN berisi panduan menggunakan ESP8266 dari Arduino, melainkan panduan untuk memprogram.

Arduino Uno dan Nano itu memiliki USB port yang bisa dipakai untuk memprogram dan keduanya memiliki jalur serial TX dan RX. Ternyata andai Arduino dibuat dalam mode Reset dengan cara menghubungkan RESET ke GND, maka si Arduino akan bertingkah sebagai USB-to-Serial adapter!

Sebelum lanjut, menurut yang saya baca, port Arduino itu bekerja dengan 5V sedangkan ESP8266 itu bekerja dengan 3.3V dan tidak memiliki toleransi sampai 5V. Sehingga sinyal dari Arduino yang dikirim ke ESP8266 berpotensi untuk merusak modul ESP8266 tersebut. Kebetulan saya lupa menyadari hal ini namun untungnya modul ESP8266 saya masih bisa berfungsi dengan baik. Supaya aman kita perlu mengubah sinyal 5V dari Arduino menjadi 3.3V sehingga aman dikonsumsi oleh ESP8266. Salah satu caranya adalah dengan membuat voltage divider.

Voltage Divider

Dengan memakai kombinasi R1 = 1KΩ dan R2 = 2KΩ, kita bisa mendapatkan sinyal 3.3V yang berasal dari 5V.

Hal lain yang perlu diperhatikan adalah bagimana memberi pasokan listrik ke modul ESP8266. Menurut sebuah dokumen, ESP8266 dapat memakai arus listrik sampai 215mA sedangkan Arduino hanya dapat memasok sampai 200mA. Walau besar kemungkinan ESP8266 tidak akan memakai arus sebesar itu ketika diprogram, akan lebih baik jika kita menggunakan sumber listrik yang lain. Menurut eksperimen saya, bread board power supply biasa sudah cukup untuk memenuhi kebutuhan pasokan listrik untuk ESP8266.

Mari lanjut dengan menghubungkan Arduino dengan ESP8266. Buat hubungan sebagai berikut.

  • Arduino TX ke ESP8266 TX
  • Arduino RX ke voltage divider input
  • Voltage divider output ke ESP8266 RX
  • Arduino RESET ke GND
  • Hubungkan semua GND
    • Arduino GND
    • ESP8266 GND
    • Voltage divider GND
    • Breadboard power supply GND
  • Breadboard power supply 3.3V ke ESP8266 VCC
  • ESP8266 CH_PD ke 3.3V via resistor 10KΩ
  • Untuk mengaktifkan mode pemrograman, hubungkan ESP8266 GPIO0 ke GND via resistor 10KΩ

Kalau digambarkan, kira2 akan terbentuk hubungan seperti berikut.

Koneksi ESP8266 dengan Arduino

Setelah semua siap, sambungkan Arduino via USB dan nyalakan breadboard power supply dan modul ESP8266 sudah bisa diprogram. Jika menggunakan Arduino IDE, cukup pilih board ESP8266 dan port USB yg dipakai.

Berdasar pengalaman saya, walau konfigurasi di atas ini sudah bisa berfungsi, kadang2 saya masih menemui kegagalan ketika proses pemrograman berlangsung. Saya belum tahu apa sebabnya namun biasanya setelah saya matikan dan nyalakan lagi si breadboard power supply, proses pemrograman berikutnya bisa berjalan lancar.

Have you tried turning it off and on again?

Selamat mencoba!

Realtek USB WiFi dongle on Pine64 with Debian

I have had a Pine64 since a while ago and just a few days ago I finally tried to turn it on! xD I plan to use it as a main home router since it has a gigabit ethernet.. well scrap that, I think I found a better device for that. Anyway, I still want to use it but now as another kind of (wireless) router that will route and bridge all my tiny bitty wireless devices based on ESP8266. I intentionally wanted to have them separated from the main home network.

So, also a while ago, I bought a USB wireless dongle because I didn’t buy the WiFi module from Pine64 guys. Apparently the dongle uses a Realtek chipset, RTL8188CUS. I plugged the device into my Pine64 and then.. nothing xD nothing showed up on the ifconfig -a device list. Ah, I used the Debian Base (Debian Base (3.10.102 BSP 2) to be precise) distribution for the Pine64 btw.

Google around, and I found a page on Debian Wiki that says I would need to have rtl8192cu module loaded. Sure enough, it’s not there. The search continued, this time with a more specific keyword. I then ended up on a GitHub page and looks like some is having a similar problem as mine. After trying here and there I finally made the device showed up! I haven’t configured it thogh.. but anyway.. here’s what I did.

  1. Apparently I had to upgrade the kernel of the Debian installed on the Pine64. It used to use Linux 3.10.65-7-pine64-longsleep. After the upgrade, it changed to 3.10.104-1-pine64-longsleep. What I had to do was just running the following command.

    $ sudo pine64_update_kernel.sh

    The script should come already with the distribution. It will download, verify, and install a new kernel. After it finished, you will be asked to restart the device.

  2. I tried to replug the USB dongle and nothing still showed up. I check the log using journalctl and found the following message.

    Nov 19 04:20:28 localhost.localdomain kernel: usb 2-1: new high-speed USB device number 3 using sunxi-ehci
    Nov 19 04:20:28 localhost.localdomain kernel: rtl8192cu: Chip version 0x10
    Nov 19 04:20:28 localhost.localdomain kernel: rtl8192cu: MAC address: 01:23:455:67:89:0a
    Nov 19 04:20:28 localhost.localdomain kernel: rtl8192cu: Board Type 0
    Nov 19 04:20:28 localhost.localdomain kernel: rtlwifi: rx_max_size 15360, rx_urb_num 8, in_ep 1
    Nov 19 04:20:28 localhost.localdomain kernel: rtl8192cu: Loading firmware rtlwifi/rtl8192cufw_TMSC.bin
    Nov 19 04:20:28 localhost.localdomain kernel: rtlwifi: Loading alternative firmware rtlwifi/rtl8192cufw.bin
    Nov 19 04:20:28 localhost.localdomain kernel: rtlwifi: Firmware rtlwifi/rtl8192cufw_TMSC.bin not available

    Looked like the kernel finally recognized the device but it could not continue to activate it because it did not have and could not load the suitable firmware.

    After I checked the GitHub page again, one comment there says I need to install a package named linux-firmware. So that’s what I did next.

    $ sudo apt-get install linux-firmware
  3. I then tried the dongle again.. now it seemed to be a success! If I typed ipconfig -a, I could see a new device albeit with a weird naming: wlx01234567890a.

So.. the setup can now continue. Hope this helps.

ESP8266 dan USB-to-Serial adapter abal-abal

Beberapa waktu lalu saya mencoba untuk mengupload aplikasi ke ESP8266, tepatnya ke modul ESP-01. Seperti yang umum disebut di tutorial2 lain, saya menggunakan USB-to-Serial adapter untuk menghubungkan ESP-01 tsb dengan komputer yang saya pakai. Proses upload awalnya berjalan lancar dan aplikasi yang saya pasang bisa berjalan dengan baik. Namun belakangan proses upload sering gagal dengan indikasi proses upload selalu nyangkut di sekitar 99%-100% dan/atau aplikasi tidak dapat bekerja.

Salah satu karakteristik yang saya temukan adalah proses upload gagal ketika ukuran aplikasi sudah melebihi kisaran tertentu (sekitar 25%). Jika ukuran aplikasi sudah melebihi 25%, maka bisa dipastikan proses akan gagal. Jika kurang dari itu, kemungkinan besar proses akar berhasil namun saya juga mengalami beberapa kasus kegagalan.

Kalau saya nyalakan mode pemrograman, yaitu dengan menghubungkan GPIO0 ke GND, lalu mereset si modul, dan memantau data yang dikirim ke serial port, biasanya saya mendapatkan pesan seperti berikut.

ets Jan 8 2013,rst cause:4, boot mode:(3,7)

Setelah ngubek2 internet sana sini, dan juga ngikutin petunjuk memasang modul dengan benar (baca: pakai resistor untuk pull-up/pull-down, pasang capacitor, dsb), tetep aja proses upload ngga pernah berhasil. Sampai akhirnya ada yang menyarankan untuk mengecek USB-to-Serial adapter yang digunakan. Ada yang mencoba mengganti dengan adapter lain dan proses upload langsung berjalan lancar.

Adapter yang saya pakai bentuknya seperti gambar di bawah ini dan beli di AliExpress (atau eBay ya?). Mungkin saja chip yang dipakai (FTDI) adalah barang tiruan berhubung gosipnya FTDI itu relatif tidak murah walau terkenal.

Berhubung yang saya sedang kerjakan dengan modul ESP-01 ini ingin segera saya deploy (baca: pasang), maka akhirnya saya memutuskan untuk membeli model lain di AliExpress. Kali ini menggunakan chip CH340G yang juga terpasang di Arduino Nano clone yang saya miliki dan tidak bermasalah. Adapter yang saya beli kali ini bentuknya seperti gambar di bawah

Sekitar satu-dua hari setelah pemesanan (dan 2-3 minggu sebelum barang biasanya sampai), saya membaca tulisan di dzone.com mengenai memprogram ESP8266 dengan Arduino! Kalau dipikir2, Arduino Uno dan Nano itu kan pastinya berisi USB-to-Serial adapter juga. Ternyata ada caranya supaya kita bisa menggunakan adapter yang terdapat di Arduino Uno/Nano untuk sebagai adapter biasa, yang juga bisa dipakai untuk memprogram ESP8266! Silakan kunjungi tulisan tadi atau tunggu tulisan saja berikutnya 😛

Penyanggahan standar tentang tulisan terkait elektronika

Sudah hampir satu tahun saya mulai ngoprek2 hal yang sedikit berbeda. Masih berbau2 dunia teknologi namun tidak sepenuhnya di dunia perangkat lunak: Elektronika! Yang dimaksud dengan elektronika ini adalah hal2 yang terkait dengan resistor, transistor, microcontroller, pcb, arduino dan sekitarnya. Walau dulu saya pernah ikutan tim robot di Univesitas Indonesia, namun saat itu saya hanya mengerjakan bagian perangkat lunaknya saja.

Nah ceritanya saya pengen menuliskan pengalaman terkait ngoprek2 elektronika di blog ini. Namun berhubung saya tidak punya pendidikan dan pengalaman formal, maka saya ingin membuat pernyataan “penyanggahan standar” terkait tulisan saya yang berhubungan dengan elektronika.

* * *

Saya tidak memiliki latar belakang pendidikan dan pengalaman formal di bidang elektronika. Dalam kegiatan ngoprek elektronika, saya hanya mencomot informasi dari sana-sini yang tersebar di jagad Internet. Saya tidak menjamin keakuratan rancangan dan kalkulasi yang saya lakukan. Jika Anda melihat kesalahan yang saya lakukan atau punya saran, tolong kasih tau saya! 🙂

PERHATIAN! Ngoprek2 dengan elektronika bisa sangat berbahaya terutama jika sudah berurusan dengan arus/voltase tinggi termasuk listrik di rumah. Tolong gunakan akal sehat dan penuh kehati-hatian selama ngoprek. Saya tidak bertanggung jawab atas musibah/kecelakaan yang mungkin terjadi.

* * *

I don’t have a formal education nor experience in electronics. I only gather information here and there mainly from the Internet during my electronics experimentation. I don’t guarantee the accuracy of my design or calculation. If you spot errors or have suggestions, please let me know! 🙂

WARNING! Working with electronics can be extremely dangerous, especially when you are dealing with high voltage/current, including the electricity at house. Please use common sense and be careful when experimenting. I do not take responsibility for any accident that may happen.

Tagihan tahunan

Sekarang sudah bulan Maret dan ini artinya amplop hijau dari Gemeente alias pemerintah daerah dan amplop putih/biru dari Waternet akan datang! Amplop2 ini berisi Acceptgiro alias formulir pembayaran terkait bbrp hal xD Barhubung jumlahnya cukup signifikan, mari kita sekalian lihat dan catat apa aja sih yang ditagih.

Amplop pertama datang dari Gemeente. Dari sekian banyak hal yang bisa ditagih, yang sekarang relevan untuk saya adalah yang berikut ini. Oya angka2 ini bisa berubah tiap tahunnya dan yang saya pakai ini adalah untuk tahun 2015.

  • Onroerende-zaakbelastingen (OZB) alias pajak bangunan. Jumlahnya itu sekian persen (tepatnya 0,06228%) dari nilai properti yang (sepertinya) dihitung/ditentukan dari Gemeente. Jadi andai nilai rumah adalah 100 ribu euro, maka yang bakal ditagih adalah sekitar €63.

    Fun fact: di Amsterdam sini status tanah itu nyewa! Jadi kalau kita beli rumah, ya itu cuma tuk bangunannya aja. Si tanah tetep dimiliki oleh Gemeente (kayanya sih). Tiap daerah punya aturan sendiri termasuk yang status tanahnya adalah hak milik juga.

  • Afvalstoffenheffing yaitu uang kebersihan. Besarnya tergantung jumlah orang yang tinggal di sebuah alamat dan uniknya pilihannya cuma dua yaitu sendiri atau lebih dari satu orang xD Tuk tahun 2015 ini, si Gemeente bakal nagih €240 tuk satu orang dan €320 jika ada lebih dari satu orang.

  • Rioolheffing untuk saluran pembuangan. Besarnya dipukul rata sama semua yaitu sebesar €149.41.

Contoh hal lain yang bisa ditagih tapi gak relevan tuk saya itu pajak anjing. Jadi tiap orang yang memelihara anjing bakal harus bayar sekian euro.

Selain si Gemeente, Waternet yang ngurusin segala hal yang terkait dengan air juga punya tagihan tahunan. Ada dua/tiga hal yang ditagih oleh Waternet:

  • Watersysteemheffing atau pajak air. Besar tagihannya akan disesuaikan dengan properti/tanah yang kita punya. Tuk pemilik bangunan, sama seperti pajak bangunan di atas, besarnya akan dihitung berdasar nilai bangunan sebanyak 0,017089%.

  • Zuiveringsheffing atau Verontreinigingsheffing tergantung kondisi koneksi bangunan dengan saluran pembuangan. Komponen tagihan ini dipakai untuk pemurnian air yang “tercemar” oleh penghuni bangunan xD Besarnya dihitung berdasar jumlah pencemar, alias jumlah orang. Kalau cuma satu orang, akan dikenai tagihan sebesar 1 unit dan kalau ada dua atau lebih, tagihan akan datang untuk 3 unit pencemar. Tahun 2015 ini, ongkosnya adalah €53,76 per unit.

Kalau angka-angka di atas dijumlah semua, akan bikin puyeng jika mesti dibayar sekaligus. Untung aja si Gemeente (sayangnya si Waternet ngga demikian) menyediakan bbrp metode pembayaran. Dibayar sekaligus, dalam 2 kali pembayaran, atau 8 kali namun dengan tagihan otomatis. Sepertinya juga tiap bulan mesti menyisihkan sekian euro supaya gak terkaget2 setiap bulan Maret/April xD

Kalau ada yang salah2 atas penjabaran di atas, tolong kasih tau ya 😀

Memasang Go di Ubuntu

Ceritanya saya sedang menulis ulang sebuah proyek kecil yang sudah lama tidak saya sentuh. Mengapa saya tulis ulang? nanti saja saya ceritakan secara terpisah 😀 Proyek tersebut saya tulis ulang dalam bahasa Go. Nah bagaimana cara memasang perkakas bahasa Go di Ubuntu?

Cara paling enak dan cepat tentunya memasang yang ada di repositori Ubuntu. Cari paket bernama golang lalu pasang! Namun bagi para petualang yang butuh Go versi terbaru, yang ada di repositori Ubuntu mungkin tidak cukup.

Sekitar dua tahun yang lalu, ada yang memelihara paket Go dengan versi paling mutakhir di repositori PPA. Namun karena ada beberapa kendala, usaha ini akhirnya dihentikan. Tapi untungnya beliau ini masih menyediakan alat bantu untuk mengubah paket binari Go resmi menjadi paket Debian yang bisa dipasang di Ubuntu.

Berikut ini cara memakainya.

  1. Unduh aplikasi untuk mengunduh dan mengubah paket binari Go menjadi paket Debian. Aplikasi ini terdiri dari dua versi, satu untuk arsitektur i386 dan satu lagi untuk arsitektur amd64.

    Sebagai contoh, saya akan memakai versi i386

    $ wget https://godeb.s3.amazonaws.com/godeb-386.tar.gz
  2. Ekstrak berkas yang tadi diunduh. Setelah diekstrak, akan ada berkas bernama godeb.

    $ tar xzf godeb-386.tar.gz
  3. Cek daftar versi Go yang tersedia

    $ ./godeb list
    1.4beta1
    1.3.3
    1.3.2
    1.3.1
    1.3
    .. dst ..

    Akan tampil daftar versi Go yang tersedia di tempat unduh resminya.

  4. Lalu jalankan perintah seperti di bawah ini untuk mengunduh dan mengubah paket binari Go menjadi paket Debian.

    $ ./godeb download 1.3.3
    processing https://storage.googleapis.com/golang/go1.3.3.linux-386.tar.gz
    package go_1.3.3-godeb1_i386.deb ready
  5. Pasang paket Debian yang baru saja terbentuk

    $ sudo dpkg -i go_1.3.3-godeb1_i386.deb
    [sudo] password for iang: 
    Selecting previously unselected package go.
    (Reading database ... 37654 files and directories currently installed.)
    Unpacking go (from go_1.3.3-godeb1_i386.deb) ...
    Setting up go (1.3.3-godeb1) ...
  6. Go versi pilihan Anda sudah siap untuk beraksi

    $ go version
    go version go1.3.3 linux/386

Aplikasi godeb ini sebenarnya juga menyediakan opsi install yang akan menjalankan tahap 4 dan 5 di atas sekaligus. Saya pribadi agak kurang suka dengan opsi tersebut karena tiba-tiba akan meminta password untuk sudo tanpa memberi tahu untuk apa. Sebenarnya menjalankan berkas binari acak seperti di atas juga tidak baik, tapi kalau kita tahu pasti sumbernya adalah sumber yang aman dan bisa dipercaya, mudah-mudahan kode yang dijalankan juga aman.

Akhir kata, saya ucapkan selamat mencoba! 😀

JSON formatter bookmarklet

At work I need to read JSON document pretty often and making it pretty will help me pretty much. Last time I showed how to prettify a JSON document using Python script. But since I am working mostly in a browser, having to switch from browser to terminal is a bit cumbersome. There are a lot of online JSON formatter out there but I think it’s too much if I need to make a remote request just to do the formatting. Also the JSON document I need to format can be a sensitive document so it’s also not a good idea to use an online service.

Then I realized browser nowadays has in-browser JSON formatter function: JSON.stringify. I just need to find a way to make using it a bit easier. So I made the following bookmarklet.

Prettify JSON

Drag the link above to bookmark bar in your browser. If you need to format a JSON document, you can click it, then paste the JSON document (make sure it’s valid), and finally click the button there. Voila!

Sertifikat SSL gratis dari Cloudflare

Setelah setahun, sertifikat SSL gratisan yang saya dapat dari StartSSL akhirnya kadaluarsa. Kalau mau lanjut, tentu saja saya harus pengajukan pembaruan dan memperbarui sertifikat yang sekarang dipakai. Proses ngurus sesuatu di StartSSL itu aga2.. er… ribet :/ jadi males xD

Namun.. berhubung sekarang Cloudflare menyediakan sertifikat SSL gratisan, saya memutuskan tuk pindah saja haha 😀 Kebetulan domain ini emang sudah ditangani oleh Cloudflare jadi mestinya saya cukup mengatur agar segala lalul intas melewati server Cloudflare dulu. Gak masalah lah ini 😀

cloudflare

Tapi sebelum itu, saya jg harus mengaktifkan dukungan SSL di Cloudflare. Dari empat opsi penggunaan SSL yang ada, saya memilih Full SSL supaya koneksi dari Cloudflare ke server tempat saya naro blog ini juga tetap menggunakan HTTPS. Pakai sertifikat yang mana? tentu saja pakai yg sudah kadaluarsa itu hihi 😀

ssl

Memakai sertifikat SSL gratisan dari Cloudflare ini bukan ngga ada resikonya. Salah satunya adalah browser pengunjung udah mesti punya SNI (Server Name Indication, bukan Standar Negara Indonesia :P). Walau udah banyak browser yang mendukung SNI, tapi si Cloudflare bilang cuma sekitar 52% pengunjung dari Indonesia yang memakai browser ber-SNI (eh?).

Selain itu, Cloudflare memasukkan lebih dari satu domain agar terdaftar dalam sertifikat yang sama. Jadi semacam bbrp orang berbagi KTP yang sama walau di KTP tersebut tertulis setiap nama orang yang ikutan berbagi.

ssl

Keuntungannya? Dapet wildcard certificate! Sub domain jadi bisa dipasangi HTTPS juga tanpa sertifikat tambahan!

Reverse Proxy from HTTP to HTTPS with Apache

The other day, I had problem accessing an HTTPS site from a Python script. Since I had no time to spend figuring out why (it was for a personal project anyway), I decided to make a reverse proxy using Apache. However, unlike the commonly setup reverse proxy, this one is to make an HTTPS site available as HTTP site.

This is what I needed to put in my Apache config.

<VirtualHost 127.0.0.1:12345>
    ...
    SSLProxyEngine On
    ProxyPass / https://that.secure.site/
    ProxyPassReverse / https://that.secure.site/
    ....
</VirtualHost>

I also had to enable mod_proxy and mod_ssl which can be done easily (on Debian based system) by running the following command

# a2enmod proxy ssl

Then reload or restart Apache

# service apache2 reload

The most important bit in the config above is SSLProxyEngine On. Without this the proxy would not work!