ESP32

Beberapa tahun lalu saya menulis mengenai ESP8266, sebuah microchip Wifi yang sangat populer dari China. Karena ESP8266 yang sangat terkenal, mereka mengundang hacker-hacker dari berbagai negara untuk bekerja di perusahaan mereka untuk produk berikutnya: ESP32.

ESP32 merupakan versi lebih baik dari ESP8266, hampir dari semua segi:

  • CPU lebih cepat, dual core
  • Selain mendukung WIFI juga mendukung Bluetooth Low Energy (BLE)
  • RAM lebih besar
  • I/O lebih banyak, mendukung CAN bus
  • Memiliki sensor temperatur dan Hal effect sensor internal

Sebenarnya ESP32 ini sudah diluncurkan agak lama, tapi dulu masih banyak masalah sehingga masih kurang cocok buat pemula. Ketika dilaunch:

  • Bug silikon yang baru diperbaiki di hardware versi berikutnya
  • Arduino IDE belum mendukung ESP32
  • Porting Python dan Lua belum sempurna

Tapi sekarang statusnya sudah berubah:

  • Hardware yang baru jumlah bugnya sudah sedikit
  • Arduino sudah mendukung ESp32
  • MicroPython dan Lua sudah disupport dengan baik

Sebagai informasi: ESP32 memiliki interpreter BASIC built ini di dalam silikonnya, jadi andaikan belum menginstall compiler atau interpreter apapun, kita sudah bisa mengetes beberapa hal dengan menggunakan BASIC. Seperti BASIC di BIOS jaman IBM PC XT dulu, programnya tidak bisa disimpan.

Dari segi harga, saat ini sebagian board ESP32 sudah di bawah 5 USD (harga sudah termasuk ongkos kirim). Sementara harga ESP8266 paling murah saat ini bisa kurang dari 2 USD. Dari segi harga, untuk proyek yang tidak butuh fitur ESP32, memakai ESP8266 masih lebih baik.

Saya sendiri masih lebih suka langsung memakai esp-idf (ESP IOT Development Framework) dibanding memakai teknologi lain. Saya juga belum banyak membuat program dengan ESP32. Saat ini program besar yang saya publish hanya emulator Pokemon Go Plus yang memakai fitur BLE.

Ketika harganya masih mahal (awalnya sampai 20an USD), memakai ESP32 masih terasa kurang pas karena harganya lebih mahal dibandingkan solusi lain misalnya Orang Pi Zero hanya sekitar 10 USD (dan bisa beli banyak), Raspberry Pi Zero lebih murah lagi tapi hanya boleh satu item setiap kali membeli. Setelah harganya cukup rendah (bahkan sudah bersaing dengan ESP8266) sepertinya sudah saatnya memakai ESP32 di lebih banyak project.

Mendinginkan Raspberry Pi

Ini merupakan catatan lama ketika memakai Raspberry Pi untuk pemrosesan yang memakai CPU secara ekstensif. Ketika suhu mencapai 80-85 derajat celcius, maka akan muncul simbol termometer setengah di layar:

Over Temperature (80-85C)
Temperatur tinggi

Simbol ini akan dioverlay di atas tampilan apapun yang muncul di layar. Contohnya seperti ini.

Suhu tepatnya bisa dilihat dengan perintah:

vcgencmd measure_temp

Hasilnya langsung berupa temperatur dalam derajat Celcius. Ini temperatur normal di ruangan saya ketika Pi bekerja ringan.

$ vcgencmd measure_temp
temp=41.7'C

Munculnya simbol temperatur tinggi ini biasanya akan segera diikuti simbol berikutnya berupa termometer yang merah yang menandakan bahwa CPU sudah lebih dari 85 derajat dan akan dithrottle (performancenya dikurangi):

Over Temperature (85C+)
Overheat

Setelah program tidak bisa diakali lagi, hal berikutnya yang dicoba adalah hardware: pertama saya tambahkan heatsink dan hasilnya suhu berkurang 2-3 derajat saja, tapi kemudian panasnya terus naik. Akhirnya saya memutuskan untuk membeli casing yang memiliki fan.

Fan dalam posisi tidak dicolok (untuk menyalakan perlu dicolok ke pin VCC dan GND)

Dan ternyata berhasil, suhu bisa berkurang cukup drastis, yang tadinya sekitar 85 derajat celcius menjadi sekitar 70 derajat celcius. Tapi ada masalah yang tadinya tidak ada: bunyi fan-nya cukup mengganggu. dalam kasus tertentu Pi ini akan ada di posisi tersembunyi jadi tidak apa-apa, tapi jika kita berniat menaruh Pi di tempat sunyi ini bisa jadi masalah.

Saya tidak punya solusi khusus agar fan menjadi sunyi, jadi sepertinya kita harus memilih antara mendapatkan kecepatan yang lebih rendah karena throttling atau mendapatkan kecepatan tinggi tapi tidak senyap. Solusi yang saya coba hanya yang sederhana saja. Jika putus asa ada juga banyak solusi lain yang lebih kompleks di internet, misalnya memakai liquid cooling.

Demikian catatan singkat ini, semoga bisa membantu mereka yang memiliki masalah Raspberry Pi yang suhunya terlalu tinggi.

USB Jig untuk Samsung

Saat ini saya punya satu tablet Android Samsung Tab A SM-P355. Device ini jarang sekali terpakai kecuali untuk pentesting. Kenapa perlu tablet khusus untuk pentesting? intinya untuk menghemat waktu. Beberapa app yang saya testing butuh layar besar dan tidak cukup menggunakan HP biasa.

Kenapa tidak menggunakan emulator? beberapa aplikasi memiliki proteksi sehingga tidak jalan di emulator, sebagian aplikasi membutuhkan verifikasi SMS, sehingga harus diakali di emulator. Masalah akal-akalan ini butuh waktu, dan kadang aplikasi tetap error dan tidak jelas apakah karena akal-akalan yang dilakukan atau memang aplikasinya yang error. Kadang setelah dijelaskan panjang lebar ke developernya, jawabannya: coba dulu di hardware beneran. Setelah dicoba di hardware beneran ternyata memang aplikasinya error. Jadi untuk menghemat waktu, saya punya device khusus testing.

Beberapa waktu yang lalu saya ingin mencoba ROM alternatif untuk device ini, dengan harapan bisa lebih terpakai. Sebenarnya sudah puluhan kali saya memakai sofware Odin untuk flashing firmware Samsung dan tidak pernah gagal, dan percobaan pertama flashing juga berhasil. Entah kenapa ketika mencoba flashing kali kedua, tiba-tiba tabletnya bricked. Tidak mau menyala, ketika dicharge juga tidak ada indikator charging.

Saya pernah membaca tentang USB jig, sebenarnya ini hanya dongle USB dengan sebuah resistor kecil. Jika Samsung mendeteksi benda ini maka akan masuk ke mode di mana kita bisa memflash ulang tablet kita. Teorinya membuat USB jig ini gampang karena hanya butuh konektor USB dan resistor, tapi sayangnya mencari konektor USB yang pin 4 (pin ID)-nya bisa diakses tidak gampang. Saya membongkar beberapa kabel USB, tapi yang diekspose hanya D+/D-/Vcc/GND, konektor ID-nya tidak terkoneksi ke mana-mana.

Akhirnya setelah mengorbankan beberapa kabel USB, saya mencari USB Jig ini dari AliExpress. Ternyata benda ini sangat murah, 0.26 USD. Tadinya saya berpikir untuk menyolder manual dari ujung konektor USB (saya sudah pernah menyolder benda yang lebih kecil dari ini, misalnya ketika reverse engineering pokemon go plus), tapi daripada repot, saya pesan saja benda ini. Sekitar 11 hari kemudian benda ini sampai.

Saya langsung colokkan benda ini, dan berhasil nyala. Berikutnya saya mencari firmware yang sesuai dari updato. Samsung merupakan satu perusahaan yang cukup aneh yang tidak menyediakan firmware download secara resmi di situsnya. Untungnya ada updato yang memberikan firmware secara gratis.

Sekarang tabletnya sudah bisa menyala lagi setelah diflash dengan firmware defaultnya. Tapi sekarang saya masih belum semangat lagi untuk ngoprek benda ini, karena sudah terlanjur mengoprek berbagai benda lain. Setidaknya dengan USB Jig ini tabletnya bisa dipakai lagi, dan ketika ngoprek berikutnya saya tidak akan khawatir bricked.

Lenovo Thinkpad X230

Minggu lalu karena kombinasi beberapa hal, saya memutuskan ingin membeli Thinkpad bekas dan ngoprek FreeBSD di laptop itu. Laptopnya dipesan hari Minggu dan sampai hari Rabu siang lalu. Saat ini laptop ini sudah berhasil: diganti SSD-nya, ditambah RAM-nya, diinstall Coreboot (software open source pengganti BIOS), dan sudah diinstall FreeBSD 12 dengan segala setting yang membuat semuanya berjalan normal.

Kalau dipikir-pikir sebenarnya nggak ada alasan yang kuat untuk harus beli laptop dan install FreeBSD, cuma seneng aja ngoprek di hardware langsung. Sekitar 10 tahun yang lalu saya pernah ngoprek FreeBSD, di Virtual Machine. Porting kernel ARM untuk NAS yang dulu saya miliki. Dibandingkan virtual machine, ngoprek langsung di hardware punya tantangan sendiri.

Sebenarnya yang saya pesan dari Shopee adalah Thinkpad X220, tapi ternyata malah dikirim X230 (yang lebih baik), jadi ya saya terima aja. Spesifikasinya: Core i5-3320M 2.6 Ghz, RAM 4 G, HDD 300 GB. Laptopnya memiliki lisensi Windows 7. Ketika sampai, saya test bahwa semua hardware berjalan normal (kecuali suara, entah kenapa tidak ada suara di Windows 7, sepertinya masalah driver). Secara umum kondisi laptop cukup baik, yang agak mengganggu hanya ada cacat di layar, ada noda agak terang tapi relatif kecil. Saya punya SSD lama 60 GB yang tidak saya pakai, jadi saya ganti saja dengan SSD supaya lebih cepat sebelum saya install FreeBSD (60 GB sudah lebih dari cukup buat sistem yang lengkap).

Instalasi FreeBSD bisa saya lakukan cepat sekali, dan setelah mengikuti beberapa tutorial di Internet untuk mengubah berbagai konfigurasinya, semua bisa berjalan normal. Ini mengingatkan saya jaman dulu memakai laptop Linux, harus banyak konfigurasi berbagai hal supaya berbagai fitur bisa jalan. Saat ini kalau saya memakai Linux, semua fitur sudah jalan tanpa perlu dioprek. Berbagai fitur yang langsung dicoba adalah: WIFI, Sound, Power management (termasuk juga berbagai shortcut untuk meredupkan layar, close lid untuk hibernate, dsb).

Hal berikutnya yang ingin saya lakukan adalah menginstall Coreboot (dulu namany LinuxBIOS). Coreboot adalah proyek open source pengganti BIOS. Salah satu turunan proyek ini adalah Libreboot yang lebih strict dari coreboot, sama sekali tidak memakai “blob” proprietary.

Untuk menginstall coreboot pada X230 kita perlu membongkar dulu laptopnya dan memakai SPI Flash Programmer. Beberapa jenis Thinkpad yang lebih lama tidak butuh programmer ini, tapi versi X230 dan beberapa versi yang lebih baru sudah diproteksi sedemikian rupa sehingga tidak bisa dilakukan dengan software saja. Langkah yang diperlukan adalah mengekstrak BIOSnya, mengambil beberapa komponennya, mengganti sisanya dengan coreboot dan menuliskan kembali hasilnya ke chip tersebut. Langkah ini cuma diperlukan sekali saja, karena setelah itu BIOS akan bisa diflash langsung dari OS Linux/FreeBSD.

Membaca SPI Flash biasanya saya lakukan dari Raspberry PI (seperti ketika hacking Pokemon Go), tapi tidak berhasil ketika saya coba membaca BIOS Thinkpad ini. Kemungkinan besar masalahnya adalah kabelnya terlalu panjang. Karena kabel dari klip SPI-nya memang panjang sekali, saya mencoba mencari cara lain, dan teringat bahwa saya pernah membeli SPI Flasher berbasia CH341 yang belum pernah saya pakai. Ternyata dengan SPI Flasher ini BIOS-nya langsung terbaca.

Klip SPI Flash ini sangat berguna

Waktu membongkar laptopnya, saya lihat bahwa RAM-nya adala 1 x 4 GB DDR3, dan masih ada satu slot kosong. Saya teringat masih punya DDR3 lama dari laptop dulu, dan ternyata masih bisa dipakai. Sekarang total RAM-nya laptop ini adalah 6 GB. Ada peringatan di halaman Coreboot bahwa RAM bisa tidak terdeteksi. Tapi ternyata booting bisa berjalan dengan baik, dan bisa masuk ke FreeBSD.

Sekarang ada masalah baru: batere tidak terdeteksi oleh sistem operasi sehingga tidak diketahui kapasitasnya. Sebelum memakai coreboot, saya sudah cek bahwa baterenya masih bisa dipakai sekitar 3 jam, yang biasanya lebih dari cukup karena saya memakai laptop ini terutama ketika mengantar Jonathan Tae Kwondo, dengan waktu ganti baju dsb, akan selesai sekitar 2 jam.

Status batere adalah hal yang sangat penting untuk sebuah laptop, jadi saya baca-baca apa masalahnya. Ternyata ada banyak yang mengalami, dan solusinya adalah dengan compile kernel development terbaru. Setelah saya cek, ternyata patchnya sangat kecil, jadi saya patch saja kernel saat ini. Kompilasi kernel FreeBSD sangat mudah. Kompilasi pertama kali agak lama karena butuh ‘buildworld’ yang akan mengcompile semua requirement untuk kompilasi kernel dan semua tool standar sistem, setelah itu kita hanya perlu ‘make buildkernel’ dan ‘make installkernel’.

Saya mengecek di AliExpress dan Shopee Thailand, ternyata masih banyak yang menjual berbagai parts dan aksesori untuk Thinkpad. Komponen pengganti standar seperti Batere, Layar LCD, Keyboard masih banyak dijual. Bahkan karet penyangga “kaki” laptop yang sering lepas juga masih bisa dicari di AliExpress. Card tambahan untuk 3G/4G/GPS juga masih dijual, walaupun saat ini saya belum tertarik untuk memakainya.

Dari sisi software, banyak software Linux bisa berjalan di FreeBSD, bahkan Wine juga tersedia untuk menjalankan aplikasi Windows. Kebetulan saya butuh Wine karena gagal mengkompilasi ucblogo untuk FreeBSD dan butuh solusi cepat. Saya memakai ucblogo karena Jonathan selesai membaca komik Secret Coders, yang mengajarkan pemrograman dengan bahasa LOGO dan implementasi yang dipakai adalah ucblogo. Saya perlu memahami beberapa hal dasar yang tidak obvious (seperti mengedit/menyimpan file) agar Jonathan bisa membuat karya yang disimpan.

Beberapa hal yang tidak bisa dilakukan saat ini adalah: menonton Netflix karena masalah DRM (meski Chromium bisa diinstall tapi tidak bisa meload plugin Netflix). Untuk developer: Docker juga tidak ada di FreeBSD. VirtualBox seharusnya bisa berjalan, tapi saat ini hang ketika saya jalankan. Tapi berbagai kelemahan ini saat init tidak mengganggu bagi saya karena saya bisa menonton Netflix di HP atau komputer lain, dan saya tidak harus memakai docker (kalaupun sangat butuh, bisa SSH ke server lain).

Seiring bertambahnya usia, kebanyakan orang akan makin malas ngoprek hal-hal seperti ini, tapi bagi saya hal-hal seperti ini sangat menyenangkan. Saya jadi teringat dulu waktu saya ngoprek Linux di laptop di dekade lalu. Saya juga senang ternyata masih ingat dengan berbagai hal di FreeBSD walaupun jarang menyentuh OS ini. Tulisan iseng ini diketik dan diposting dari Thinkpad X230.


Catatan Oprekan Liburan

Pulang ke Indonesia kali ini cukup lama dari tanggal 12 Desember 2018 dan baru masuk kerja besok, tanggal 7 Januari. Sebenarnya nggak banyak yang dioprek selama liburan ini, tapi ini sekedar jadi catatan, plus ada beberapa barang yang baru sampai ketika kami sedang di Depok yang siap dioprek bulan ini.

Liburan kali ini saya berusaha meminimasi bawaan, tapi tetap ingin bisa ngoprek hardware. Kali ini saya coba membawa Pi Zero W yang sudah diberi case USB, sehingga bisa langsung dicolok ke komputer untuk powernya. Saya juga sudah setup agar Pi Zero W-nya mengemulasikan USB Ethernet, jadi bisa langsung diakses dari komputer/laptop.

Ini saya pakai untuk iseng-iseng membaca data dari beberapa kartu NFC yang saya temui. Saat ini tidak ada temuan baru yang menarik.

Waktu libur saya sempat ngoprek dan nemu bug. Sementara ini saya nggak kasih tau dulu bugnya apa, tapi sayangnya tidak ada bounty dari perusahaan tersebut. Tapi ada teman saya di situ yang mengurusin security dan pinter bikin cake, jadi ditodong aja, hasilnya Cheese Cake ini.

Dari sejak beberapa tahun lalu saya teringat sebuah game lama, tapi lupa judulnya, dan bahkan lupa di platform mana (NES atau Sega Mega Drive, dulu punya 2 console ini). Yang saya ingat cuma satu: tokohnya membawa anjing dalam petualangannya, anjingnya bisa dibuat agar terbang mengelilingi tokohnya, terus terbang menerjang musuhnya. Karena sulit mencari deskripsi ini (dan adik-adik saya juga lupa), jadi saya putuskan untuk mencoba memainkan semua game NES dan kalau tidak ketemu, akan mencoba semua game Sega Mega Drive.

Saya menggunakan 3DS untuk mencoba-coba game-game NES-nya, jadi bisa dilakukan di mana saja. Saya juga membawa 3DS dalam liburan ini dan untungnya sampai huruf C sudah ketemu judul yang saya cari: Conquest of the Crystal Palace. Walau sudah menemukan ini, saya masih akan meneruskan mencoba semua game NES.

Ini adegan yang saya ingat

Sesampainya di Chiang Mai, sudah ada beberapa paket menunggu.

Nggak semua isi paket dibahas di posting kali ini

Yang pertama adalah decoder ring hadiah dari Flare-On. Jonathan sedang suka bermain-main sebagai detektif/spy dan senang memainkan ini.

Ini hadiah dari menyelesaikan flare-on 2018

Paket lainnya adlaah Foldscope, mikroskop origami kertas. Ceritanya mikroskop ini dibuat dengan biaya 1 USD (tentunya dijual dengan harga lebih dari harga pembuatan), tapi untuk bisa mendapatkannya tidak bisa beli satuan. Harga termurah adalah 35 USD (dapat 20 Foldscope) belum termasuk ongkos kirim.

Jonathan memakai Foldscope

Beberapa waktu yang lalu kernel Linux mensupport satu arsitektur CPU baru: C-SKY dari China. Ini mungkin akan menjadi arsitektur baru terakhir yang akan ditambakan ke Linux karena sekarang semua memakai arsitektur populer atau RISC-V yang terbuka. Karena penasaran saya membeli satu development board untuk CPU ini dan baru sampai ketika saya sudah di Depok. Saat inielum sempat dicoba lebih lanjut.

Booting CSKY
Ini boardnya

Demikian catatan oprekan kali ini. Semoga tahun ini akan bisa menulis lebih banyak oprekan lain.

Aksesori elektronik kecil

Sudah lama saya tidak menuliskan tentang oprekan elektronik. Salah satu alasannya adalah karena tahun ini saya berusaha mengurangi pembelian berbagai benda dari AliExpress. Tahun lalu saya membeli terlalu banyak benda yang akhirnya kurang sempat dioprek.

Capture HDMI kualitas rendah

Ketika mengerjakan salah satu proyek Raspberry Pi, saya perlu berada di depan komputer karena menyangkut akses GPU untuk menampilkan video secara langsung dari kamera ke layar (pernah saya tuliskan di sini). Ada beberapa alternatif cara menangkap output HDMI, tapi harganya masih relatif mahal. Alternatif saat ini: PCI  card USB 3 capture card, dan device independen. Dari berbagai review yang saling bertentangan saya masih ragu harus membeli hardware yang mana, sedangkan harga hardwarenya tidak murah (puluhan hingga ratusan USD).

Dalam kasus kali ini, saya tidak benar-benar butuh capture kualitas tinggi, saya hanya ingin memastikan bahwa di layar tampil sesuatu yang seperti harapan saya. Jadi saya mengambil pendekatan paling murah: saya membeli HDMI2AV (kurang dari 7 USD). Signal HDMI diubah menjadi AV (dan resolusinya diresize), lalu saya tangkap signal AV ini dengan USB capture card yang sudah saya miliki (dulu harganya 4.5 USD).

LCD 1602 Acrylic case

Sudah beberapa kali mencetak case dengan printer 3D, tapi hasilnya kurang memuaskan. Saya melihat ada case Acrylic murah untuk LCD 16 karakter x 2 baris  jadi saya coba beli.  Harga benda ini bervariasi dari satu toko ke yang lain, antara 0.99 USD-2 USD.

Tampilannya cukup cantik, mudah disusun dan cukup stabil (tidak mudah jatuh). Case ini juga cukup bagus karena dirancang untuk LCD 1602 yang diberi kontroller I2C (ada lubang di samping untuk 4 kabel Vcc/Gnd/SDA/SCL). Kita juga bisa meletakkan Wemos D1 di belakangnya jika ingin membuat display  dari internet (misalnya nilai mata uang atau bitcoin).

Konektor PSU

Sebenarnya dari dulu sudah ada banyak tutorial untuk mengubah PSU menjadi bench power supply, tapi biasanya langkahnya merepotkan, perlu memotong kabel, membuat konektor khusus dst.

Belum lama ini saya menemukan bahwa ada board konektor PSU yang relatif murah (5 USD). Board ini sangat mudah dipakai, hanya perlu colok langsung, dan sudah ada switch on/off-nya. Selain bisa digunakan untuk bench power supply, kita bisa menggunakan board ini untuk mengetes apakah sebuah PSU masih bagus atau tidak.

Demikian tulisan singkat saat ini. Semoga lain kali tulisan oprekannya lebih menarik.

GPU Raspberry Pi

Salah satu kelebihan Raspberry Pi (RPI) dibandingkan Single Board Computer (SBC) lain adalah: harganya relatif murah dan memiliki GPU yang terdokumentasi resmi dan bisa dimanfaatkan dengan berbagai API low level. Beberapa SBC lain ada yang harganya lebih murah (misalnya Orange Pi) tapi dokumentasinya kurang, dan beberapa yang lain lebih powerful (misalnya NVidia Jetson) dengan dokumentasi yang cukup baik dari produsen (tapi masih kurang dari komunitas) tapi harganya 10x lipat dari RPi 3.

GPU Raspberry Pi cukup powerful, dan bisa melakukan beberapa hal menarik misalnya: tunelling dari kamera (dengan konektor CSI) langsung ke layar, colorspace conversion, video/image encoding and decoding,  resizing, dan overlay. Kita juga bisa meminta agar data dari kamera langsung dijadikan texture untuk OpenGL ES.

Secara praktis tunnelling artinya satu komponen ke komponen lain bisa bekerja langsung tanpa buffer. Contoh nyatanya begini: kita bisa membuat aplikasi yang kelihatan smooth karena data dari kamera tampil langsung di layar dengan kecepatan tinggi (30 fps) tanpa memakai CPU sama sekali. Sementara di latar belakang kita bisa mengambil gambar, memproses (misalnya face detection) dan menampilkan hasilnya.

Proses ini membypass windowing system, jadi bisa jalan bahkan tanpa X Window (mode teks sekalipun).

Video dari kamera bisa ditampilkan di mode teks

Fitur texture OpenGL ES artinya kita bisa menampilkan gambar kamera atau video (dari file atau jaringan) langsung di permukaan  misalnya kubus atau teko. Selain itu kita bisa menggunakan pixel shader untuk memproses data tanpa memakai CPU, contohnya membuat filter kamera secara real time, atau bahkan melakukan preprocessing untuk algoritma machine learning. Data yang sudah diproses bisa dibaca dan diproses lebih lanjut di CPU dengan glReadPixels. Lanjutkan membaca “GPU Raspberry Pi”