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.

Log of Debian/Ubuntu packages

I have a plan to do a little research about packages in Debian and/or Ubuntu repositories. For this, I think I need a preferably complete log of packages that coming in and out of the repositories.

A friend of mine pointed me the following two mailing list archives where Debian and Ubuntu seem to be logging the packages.

If somebody knows the other sources, or if the above sources are unsuitable for the purpose I am looking for, please let me know πŸ™‚

Ubuntu Repository: Total Packages and Sizes

Long time ago, I made a chart that shows Ubuntu Repositories’ size over several releases. At that time, there were only 6 releases and 1 release that was still being worked on. Fast forward almost 6 years later, now we have 18 Ubuntu releases, yay! How does that chart look like now?

Well, here we go! I just made some new charts!

Ubuntu Releases - Packages and SIzes

The full charts can be seen atΒ http://fajran.github.io/vis-ubuntu-pkg/

As you can see, the repositories are constantly growing. Ubuntu starts with about 8 GB of packages and now it has more than 50 GB. The number of packages is also growing from just over 12.5 thousands and now it almost three times larger.

How did I count the numbers? I took the package index files (a.k.a. Packages file) and counted the number of packages inside. I also summed the size of each packages to get the size of the repository. The files are from the at-release repository which means I excluded the -updates and -security repositories. The at-release repository is presumably frozen and therefore the size won’t change anymore, where the latest two repositories are for the updates, which by definition are always updated. Well.. except when the release is not supported anymore.

I put all of the codes I wrote and use in my GitHub repository https://github.com/fajran/vis-ubuntu-pkg. Feel free to check, modify, and update it. I release the whole thing as public domain!