Lampu Pohon Natal yang bisa diprogram

Ini sebenarnya proyek yang saya lakukan tahun 2016, tapi setelah saya posting foto pohon Natal tahun ini dan membaca komentar di Bu Inge, sepertinya proyek kecil ini menarik juga untuk dituliskan. Ini bisa digunakan untuk mengajar pemrograman dan hardware.

Saya akan berusaha memberikan petunjuk generik, supaya bisa dipakai di aneka LED strip dengan aneka microcontroller, dan aneka bahasa pemrograman

Hardware yang dibutuhkan:

  • RGB LED Strip (individually addressable)
  • Power supply (opsional, tergantung seberapa banyak LED-nya)
  • Board microcontroller

LED Strip

Ada beberapa jenis LED Strip, yang kita cari adalah yang RGB (jangan yang satu warna) dan harus bisa dikontrol per LED-nya (individually addressable).

LED Strip ketika masih digulung

Jenis yang paling murah adalah WS2812/WS2812B. Versi yang B memiliki proteksi jika salah polaritas (terbalik positif dan negatif), jadi untuk belajar saya sarankan memakai versi B. Harganya mulai dari 1.3 USD untuk 30 LED dalam strip sepanjang 1 meter. Ada juga versi yang anti air (rating IP67 jika ingin dipasang di luar rumah). Versi lain adalah APA102/APA109B, harganya lebih mahal tapi warnanya lebih bagus. Berbagai jenis LED ini bisa dibaca di artikel Hackaday ini.

Perlu diketahui bahwa LED ini ada juga yang dijual dalam bentuk PCB dengan bentuk tertentu, misalnya ada yang melingkar. Cara pemrogramannya sama apapun bentuknya. Ini bisa dipasang di puncak pohon Natal.

LED yang sama tapi disurun melingkar

Power Supply

Hal yang perlu diperhatikan ketika bermain dengan LED strip adalah: tiap LED memerlukan sampai sekitar 50-60mA jika menyala dengan kecerahan yang paling tinggi. Artinya untuk satu meter saja yang memakai 30 LED maka dibutuhkan 1.5-1.8A. Jika ingin menggunakan power dari USB, kebanyakan hanya bisa memberikan 2A.

Tentu saja kita bisa memprogram supaya dalam satu waktu kita tidak menggunakan kecerahan maksimum, dan tidak menyalakan semua LED. Untuk pohon Natal biasanya kita tidak menyalakan semua lampunya sekaligus.

Microcontroller

Saat ini ada banyak board microcontroller misalnya:

  • Arduino (diprogram dengan Wiring yaitu varian C++ yang disederhanakan), harga mulai dari 3 USD per board
  • ESP8266 (diprogram dengan C/MicroPython/Lua), harga mulai dari 3 USD per board
  • Micro:Bit (diprogram dengan MicroPython), harga mulai 17.5 USD

Microcontroller apapun bisa dipakai, yang penting adalah ada librarynya untuk memudakan development. Memprogram LED secara low level bisa dilakukan, tapi ini cukup rumit terutama WS2182 yang timingnya harus tepat.

RGB LED yang addressable ini sudah populer sejak 2013, sehingga sekarang sudah ada librarynya untuk semua board yang saya tahu. Library WS2812B dan sejenisnya biasanya bernama neopixel. Atau jika tidak yakin: cari saja WS281b dan nama boardnya di google (misalnya “Micro:Bit WS2812B”) dan kita akan ketemu nama librarynya.

Tiap library biasanya akan menjelaskan bagaimana menghubungkan dengan LED-nya. Hanya ada 3 kabel yang perlu dihubungkan: tegangan positif, ground, dan data. Ini contohnya dari halaman dokumentasi Micro: Bit.

Perhatikan: jika ada lebih dari 8 LED, gunakan sumber daya terpisah.

_images/neopixel-croc.png
Sumber: https://microbit-micropython.readthedocs.io/en/latest/neopixel.html

Program

Program paling sederhana untuk menyalakan LED seperti ini di micropython (ini sudah program lengkap, bukan pseudocode, menyalakan 2 LED warna merah dan ungu):

import machine, neopixel
NUMBER_OF_LEDS = 8
np = neopixel.NeoPixel(machine.Pin(4), NUMBER_OF_LEDS)
np[0] = (255, 0, 0) #warna merah (red = 255)
np[1] = (255, 0, 255) # warna ungu (merah + biru)
np.show()

Untuk pohon Natal, intinya adalah: kita membuat infinite loop dan dalam loop kita menyalakan/mematikan lampu sesuai pola-pola tertentu (sekedar mengisi elemen array) lalu memanggil “show” untuk menampilkan isi arraynya. Beberapa contoh pola:

  • Berkedip (semua on, lalu semua off)
  • berkedip berselingan (misalnya semua LED ganjil on, semua genap off, lalu sebaliknya)
  • mengalir: hanya beberapa LED yang menyala, bergerak dari posisi pertama sampai terakhir
  • fade in/fade out

Dan masih banyak lagi pola-pola yang bisa dibuat. Jika tidak ingin pola statik juga bisa (menggunakan bilangan acak). Jika ingin memprogram yang lebih lanjut juga bisa, misalnya:

  • Lampu dikendalikan via WIFI (butuh microcontroller yang memakai WIFI, misalnya: ESP8266/ESP32)
  • Lampu menyala berdasarkan sensor tertentu (misalnya sensor suara, sensor kedekatan/proximity)
Mengontrol LED dengan ponsel

Penutup

Proyek ini menurut saya sangat sederhana, cukup menyenangkan. Bisa digunakan untuk mengajari loop dan juga array. Versi lebih kecil juga bisa dipakai dengan jumlah LED yang lebih sedikit. Tentunya ini tidak harus jadi hiasan pohon Natal, bisa juga jadi hiasan rumah atau bahkan di mobil.

Selamat Natal dari kami di Chiang Mai.

PocketChip, PocketGo, dan Pinebook Pro

Posting ini sekedar catatan beberapa benda yang baru saya dapatkan supaya tidak lupa di masa depan. Kebetulan semuanya berawalan huruf P. Hanya Pinebook Pro yang merupakan benda yang benar-benar baru karena hasil preorder, sedangkan yang lain sudah ada lama di pasaran.

PocketChip

PocketChip adalah komputer saku berbasis Single Board Computer CHIP (dulu pernah saya bahas tiga tahun yang lalu). Benda ini memiliki layar, keyboard dan batere, jadi bisa dibawa ke mana-mana. Keyboardnya fungsional tapi kurang nyaman untuk mengetik banyak teks.

PocketChip ini sudah tidak diproduksi lagi tapi baru saya beli baru-baru ini. Saya sudah ingin membeli waktu benda ini diproduksi, tapi masih ragu kegunaannya, tapi kemudian benda ini hanya bisa dipesan ke negara tertentu, dan setelah itu tiba-tiba perusahaan pembuatnya (NextThing Co) bubar. Setelah NextThing Co bubar, sisa benda ini jadi banyak dijual di ebay dan Aliexpress.

Dibandingkan laptop, benda ini cukup ringan dan kecil. Kelebihan benda ini adalah: memiliki GPIO dan bisa menjadi USB Host. Satu hal praktis yang bisa saya lakukan adalah mengakses adb dan fastboot untuk Android. Hal ini adalah sesuatu yang tidak bisa dilakukan dengan mudah menggunakan benda selain laptop/komputer.

Benda ini bisa dihubungkan juga ke iOS dan akan cocok sekali dipakai untuk menjalankan exploit checkra.in jika nanti dirilis untuk Linux. Sayangnya saat ini tidak ada lagi yang memaintain distribusi Linux terbaru. Jadi sering kali saya harus mengcompile sendiri versi software terbaru.

PocketGo

Benda ini adalah game console pocket yang saya beli beberapa bulan lalu. Game console ini bukan produk perusahaan besar dengan tujuan utama untuk menjalankan berbagai emulator. Sebenarnya saya tidak kekurangan game console sekarang ini punya: Gameboy, Game Boy Color, Game Boy Advance, Nintendo DS, Nintendo DSi XL, Nintendo 3DS, dan Nintendo Switch. Saya tertarik dengan PocketGo ini karena ukurannya kecil, ringan, benar-benar bisa masuk kantong.

Selain PocketGo, masih banyak console sejenis ini dari China. Pocket Go menggunakan prosesor ARM ( Allwinner F1C500) dan menggunakan operasi Linux, jadi bisa mudah ditambah program sendiri. Banyak device serupa menggunakan prosessor MIPS.Saya sudah membongkar benda ini sekali untuk mengganti warna tombolnya menjadi lebih cerah.

Pinebook Pro

Sekitar 2.5 tahun lalu, saya memiliki Pinebook, laptop seharga 99 USD. Masalah utama laptop tersebut adalah keyboardnya: layoutnya tidak standar dan tombol sering tidak responsif terutama tombol spasinya. Selain itu laptopnya terasa murahan dan specnya juga kurang bagus. Sekarang team yang sama telah membuat laptop baru: Pinebook Pro.

Laptop ini memiliki memori yang lebih besar (4GB, pinebook hanya 2 GB) dan penyimpanan yang lebih besar (mulai dari 64 GB, tapi karena saya preorder, saya mendapatkan yang 128 GB, sedangkan pinebook hanya 16 GB eMMC). Layarnya Pinebookpro matte, tidak glossy seperti pinebook.

Sayangnya meskipun spesifikasinya sudah jauh lebih baik, tapi saat ini di mode GUI, terutama ketika mengetik di browser, lagnya masih cukup terasa. Menurut saya ini hanya masalah software dan seharusnya akan lebih baik.

Out of the box, benda ini sudah langsung bisa membuka youtube dan menjalankan video HD dengan mulus. Speaker cukup keras, tapi kurang enak didengar. Saya masih gagal mengakses layanan yang memakai DRM WideVine (Netflix, Spotify, dll), padahal saya sudah mendownload plugin versi terbaru.

Waktu saya terima, saya sempat kecewa karena keyboardnya sering tidak responsif, tapi ternyata ini hanya masalah firmware saja. Saat ini versi layout keyboard hanya versi ISO, dan ini mengesalkan karena tombol shift jadi kecil karena adanya tombol ekstra di antara shift dan Z. Nantinya akan ada versi ANSI yang seharusnya lebih enak.

File:Physical keyboard layouts comparison ANSI ISO.png
ANSI Vs ISO layout (sumber: https://commons.wikimedia.org/wiki/File:Physical_keyboard_layouts_comparison_ANSI_ISO.png )

Satu kelebihan pinebook adalah adanya privacy switch: kita bisa mematikan secara fisik microphone, wifi dan camera. Sebenarnya beberapa tahun lalu banyak laptop (misalnya Thinkpad) yang memiliki tombol fisik untuk mematikan WIFI, jadi ini bukan hal baru. Webcam bisa ditutup dengan mudah menggunakan stiker. Hal yang sulit dilakukan di laptop lain adalah mematikan mikrofon.

Penutup

Semua benda di atas yang saya bahas menurut saya sifatnya: nice to have, tapi tidak “must have”. PocketChip sangat menarik dan berguna untuk saya, tapi saya berharap ada yang membuat benda serupa, dengan harga yang tidak terlalu mahal dan memakai prosessor yang lebih baik (msalnya Raspberry Pi).

PocketGo benar-benar hanya benda iseng, tapi sejauh ini cukup menghibur. Kualitas dan fitur berbagai emulator yang ada lebih baik dari yang ada di Nintendo DS/DSi/3DS.

Pinebook akan menarik bagi orang yang suka ngoprek dan belajar mengenai prosessor ARM, atau orang yang sangt memperhatikan privasi. Dari segi performance, benda ini masih bisa dengan mudah dikalahkan oleh laptop thinkpad dari beberapa tahun yang lalu yang harganya serupa dengan pinebook.

Merakit dan Mengupgrade PC

Kebanyakan teman seangkatan saya sudah jarang yang merakit PC. Bahkan kalau dipikir-pikir yang memakai PC (di rumah, bukan di kantor) juga semakin sedikit, kebanyakan hanya punya laptop saja. Saya sendiri sampai saat ini merasa lebih nyaman bekerja di PC yang cepat dengan layar besar dan keyboard mekanis.

Sekarang saya memesan berbagai komponen PC dari jib.co.th atau kadang beli offline jika kebetulan barang yang hendak dibeli tersedia di toko JIB di Airport Plaza. Jika membeli online prosesnya sangat mudah dan cepat. Setelah selesai membayar, barang akan segera dipack, dan saya akan dikirimi URL video pengepakannya. Sayangnya karena jauh dari Bangkok, jadi tetap butuh 2 hari sampai barangnya diterima di Chiang Mai.

Sebenarnya saya mulai malas membongkar PC, memasang komponen baru, mengetes, setting BIOS, memindahkan sistem operasi dsb, tapi saya lebih malas lagi dengan berbagai alternatifnya. Beberapa alternatifnya adalah:

  • membawa semua ke toko, memberi instruksi dan menunggu sampai semua selesai, pulang ke rumah (capek, tetap harus memasang ulang kabel), perlu memberi tahu password ke teknisi (atau membantu mengisi password setiap kali dibutuhkan)
  • membeli komputer baru yang lebih baik (tetap harus memindahkan data/program ke komputer baru)
  • mendatangkan teknisi: saya nggak akan sabar memberi tahu apa yang harus dilakukan, memberi tahu password, dsb

Jadi meskipun saya kurang suka, merakit dan mengupgrade PC tetap saya lakukan sendiri. Contoh beberapa hal yang menyebalkan ketika merakit PC:

  • memasang CPU cooler
  • memasang kabel untuk power/reset/LED HDD/Power, ribet karena kecil
  • mengatur kabel. padahal saya sudah memakai PSU dengan kabel modular
  • memasang backplate. Tapi sekarang tidak lagi, karena sebel sering menyakiti tangan, saya putuskan untuk tidak memasang benda ini. Memang berisiko menambah debu yang masuk, tapi saya lebih memilih membersihkan debu daripada memasang benda ini
Backplate, nggak pernah saya pasang lagi

Sekarang mau cerita konfigurasi desktop saat ini:

  • Casing Chaser MK I (saya beli tahun 2013)
  • Storage M2.NVME 1 TB untuk Windows
  • CPU Intel Core i5 9400F 2.9 GHz (terpikir membeli Core i9, tapi perbedaan performancenya kurang signifikan untuk use case saya)
  • Banyak harddisk
  • Ram DDR4 32 GB

Alasannya cukup panjang, tapi sekarang saya memakai Desktop Windows dan sebuah server Linux. Keduanya saya pakai bekerja. Meskipun rasanya agak ekstrim bekerja dengan dua komputer, tapi menurut saya ini workflow paling enak. Desktop dipakai untuk pekerjaan interaktif, dan Linux dipakai untuk berbagai server (samba, mongo, mysql, http, dsb) dan untuk kompilasi yang memakan waktu lama (compile kernel, compile ROM Android).

Spesifikasi server sekarang:

  • Casing nggak jelas beli second hand
  • SSD 1 TB untuk Linux
  • CPU: AMD Ryzen 5 2600X Six-Core Processor
  • RAM DDR4 16 GB
  • Banyak harddisk

Pemilihan berbagai komponen saya dasarkan pada pengukuran: dengan melihat task manager (windows) dan top (Linux). Dengan memperhatikan tool, umumnya kita bisa melihat apakah kita butuh lebih banyak memori (free memori selalu rendah atau pemakaian swap tinggi), butuh CPU yang lebih baik (CPU usage selalu tinggi), atau butuh SSD/NVME (nilai “wa” di top tinggi, atau akses disk tinggi di task manager).

Untuk CPU saya mendasarkan pemilihan pada benchmark dari http://cpubenchmark.net/ . Pertimbangan lain adalah harga, saya tidak mau menghabiskan uang 2X lipat jika performance yang didapatkan hanya bertambah sedikit (lebih baik menunggu sampai harga turun).

Perlu diperhatikan juga program spesifik yang kita pakai, contohnya IDA Pro butuh waktu lama untuk mendecompile fungi kompleks, tapi proses dekompilasi ini tidak multi thread, dan juga tidak memakai 100% CPU. Jadi memakai CPU yang 2x lebih cepat sama sekali tidak membantu mempercepat proses dekompilasi.

Sekedar tips, jika ingin merakit PC dan ingin melakukannya jangka panjang, maka:

  • belilah casing yang bagus, akan tahan lama
  • belilah PSU yang bagus dan modular, walau kabel tetap berantakan tapi sedikit lebih baik
  • belilah keyboard yang bagus (kalau suka mekanis, beli yang mekanis) karena akan tahan lama

Demikian cerita singkat ngalor-ngidul mengenai merakit dan mengupdate PC. Berikutnya saya perlu menambah storage di Thinkpad X230 saya.

MAIX GO: AIOT Board

Di jaman Artificial Intelligence (AI) dan Internert of Things (IOT), ada beberapa perusahaan yang berusaha menggabungkan keduanya menjadi AIOT (Artificial Intelligence of Things). Salah satunya adalah Sipeed dari China. Perusahaan ini mengembangkan teknologinya berdasarkan instruction set RISC-V (baca: Risk Five) yang sifatnya terbuka. Jika saat ini Intel dan ARM masih menguasai dunia, di masa depan ada kemungkinan RISC-V yang akan jaya.

Sipeed sudah membuat cukup banyak produk, baik chip SOC dengan neural accelerator maupun board-board pendukungnya. Salah satu produk mereka adalah MAIX GO. MAIX GO ini memakai SOC Kendryte K210 dengan instruction set RISC-V 64 Bit dan memiliki accelerator untuk Fast Fourier Transform dan CNN (Convolutional Neural Network). Dengan adanya accelerator tersebut, SOC ini sangat cocok untuk memproses gambar dan suara. Menurut dokumentasinya, jika ukuran model kita kecil (<5.9 Mb fixed point 8-16 bit) maka pemrosesan image real time bisa dilakukan (~30 fps).

Saya memesan board MAIX GO ini ketika ada kampanye Indiegogo bulan November tahun lalu. Paket yang saya ambil seharga 45 USD dengan ongkir 5 USD ke Thailand dengan isi sebagai berikut:

  • 1 x MAIX GO (termasuk batere)
  • 1 x M12 OV2640 Camera
  • 1 x 2.8 inch QVGA LCD
  • 1 x MAIX GO simple case
  • 1 x MAIX R6+1 Microphone Array
  • 1 x MAIX Binocular Camera

Bendanya sebenarnya sudah saya terima sejak akhir Januari dan sudah langsung saya susun, tapi karena beberapa kesulitan awal, baru saya teruskan lagi ngopreknya sekarang. Isi paket utama MAIX GO lengkap: termasuk juga batere (biasanya sulit mengirimkan ini) dan juga obeng kecil serta kabel USB ke USB-C.

Sekarang benda ini sudah tersedia umum dan bisa dibeli di seeed studio atau Aliexpress (tapi lebih mahal). Harga MAIX GO tanpa Microphone Array dan Binocular Camera adalah 40.9 USD. Microphone Array bisa dibeli terpisah seharga 11.9 USD dan Binocular Camera bisa dibeli seharga 13.9 USD. Jadi harga total paket yang sama dengan yang saya pilih waktu crowdfunding adalah: 66.7 USD (belum termasuk ongkir).

Masalah pertama dengan hardware ini adalah pada interface serialnya. Benda ini dikenali sebagai serial port, tapi koneksinya tidak stabil (kadang bisa kadang nggak). Ternyata setelah membaca dan mengikuti diskusi telegram, masalahnya adalah pada chip STM32 yang dipakai sebagai interface serial, dan bagian ini perlu diupdate.

The problem is that OS X doesn’t let non-kernel drivers capture HID devices except through the HID APIs (for security reasons – helping prevent keyloggers etc). The CMSIS-DAP python server supplied by mbed libusb which implements it’s own HID layer and accesses the underlying USB stack at a lower level than HID – which Windows and Linux allow, but OS X does not.
The solution is update the firmware of cmsis-dap for maixgo to openec, and then OSX could recognize it.
You need a stlink, and use https://github.com/pavelrevak/pystlink/blob/master/README.md to flash the openec firmware. The openec firmware download URL is: https://github.com/rgwan/open-ec/releases, download and program the firmware flash-zero.bin, re-connect the USB cable of maix-go, and OSX will show new serial port. Use homebrew, install lsusb, and use lsusb command to check whether it work

Diskusi telegram

Masalah pertama untuk mengupdate: saya perlu membongkar lagi board yang sudah saya susun susah payah mengikuti instruksi Instruksi di youtube. Perlu mengikuti Youtube karena tidak ada instruksinya di dalam paket yang disertakan ataupun di websitenya. Tidak mudah juga menebak bagaimana menyusunnya karena tidak jelas juga orientasi LCD-nya harus dicolok ke arah mana (tidak ada labelnya).

Masalah berikutnya: saya harus mencari ST-LINK yang saya miliki. Karena sedang ada kesibukan lain, saya mengurungkan niat dan hampir melupakan board ini. Kemarin teman saya ada yang menanyakan apakah saya sudah mencoba board ini dan baru ingat lagi untuk mencoba. Akhirnya saya mulai membongkar lagi board ini malam ini.

Saya tidak tahu apakah board baru sudah memakai firmware yang baru atau masih harus diupdate manual. Jika masih perlu update manual, maka jangan lupa beli hardware ST-LINK-nya juga. Harga ST-LINK cukup murah dan terpakai juga untuk development STM8 dan STM32, jadi saran saya sih beli saja satu. Sebagai catatan: harga ST-LINK di Aliexpress lebih murah.

Setelah dibongkar ternyata posisi lubang pin untuk memprogram ulang STM32 sulit dijangkau. Tadinya mau saya solder pin header sementara lalu dilepas lagi, tapi ternyata spacing pin headernya juga tidak standar (standar di sini maksud saya seperti Arduino/Raspberry Pi). Tepatnya lagi: beberapa pin header di board ini standar 2.54mm, sebagian lagi tidak. Akhirnya saya memakai kabel dupont yang sudah ada headernya dan ditahan dengan tangan.

Kemudian ada masalah lain: sistem power board ini semuanya terhubung. Jika board ini dimatikan dan saya colok ST-LINK ke pin programming standard (3.3V, GND, DIO dan CLK) maka board ini akan berusaha menyala dan tidak berhasil karena dayanya tidak cukup. Jadi untuk memprogramnya benda ini perlu sambil diberi power via USB juga.

Setelah beberapa kali mencoba akhirnya berhasil juga mengupdate STM32-nya. Untungnya ini hanya perlu dilakukan sekali, jadi saya pastikan booting masih bisa dilakukan, dan setelah itu saya susun lagi boardnya.

Setelah berhasil mengupdate, saya berusaha memflash chip utama dengan Flasher versi Windows. Hasilnya: gagal. Padahal software Windows ini disarankan dan dilink dari website utamanya.

Akhirnya flashing berhasil dilakukan dengan skrip Python kflash.py. Saya mencoba Maixpy versi terbaru. Ini merupakan firmware Python untuk MAIX yang menurut saya sangat mudah digunakan.

Setelah sampai di prompt Python, semua berjalan cukup lancar. Saya mencoba-coba berbagai skrip contoh yang ada di:

https://github.com/sipeed/MaixPy_scripts

dan hampir semuanya berjalan lancar. Jangan lupa untuk deteksi wajah, ada data yang perlu diflash terpisah (sesuai komentar skripnya). Kualitas kamera yang diberikan biasa saja.

Board MAIX Go ini memiliki ESP8285 untuk koneksi WIFI, tapi saya baru mencoba scan access point. Saya belum mencoba seberapa bagus streaming kamera ke WIFI. Perlu dicatat bahwa tidak semua board seri MAIX memiliki WIFI (misalnya MAIX Bit tidak memiliki chip WIFI).

Selain dengan Python, benda ini juga bisa diprogram dengan menggunakan C/C++ tapi inipun belum saya coba. Sejauh ini Python sudah cukup untuk banyak eksperimen. Pemrograman C/C++ bisa dilakukan dari command line ataupun menggunakan IDE Arduino (ada dokumentasi Maixduino di website sipeed tapi isinya masih sangat minim).

Sayangnya dua benda ekstra yaitu Microphone Array dan Binocular Camera belum sempat saya test. Melepas ulang modul kamera dari boardnya cukup sulit (ada beberapa baut yang perlu dilepas) sedangkan hanya ada 1 konektor kamera. Konektor mic array ada di dalam board dan sulit dihubungkan juga. Selain itu saat ini saya belum kepikiran proyek khusus yang memakai benda tersebut.

Ada satu lagi komplain mengenai benda ini yaitu mengenai speakernya. Ada bunyi statik yang selalu ada setiap waktu, dan kadang lebih parah ketika dicolok ke USB. Ternyata ini katanya normal dan jika tidak ingin suara ini, kita harus melepas kabelnya dengan solder. Ini satu-satunya bagian yang memakai kabel dan tidak memakai pin header.

Penutup

Di atas kertas kemampuan K210 sangat bagus, bahkan untuk hal-hal di luar AI dan harganya juga murah. Ada versi board dengan SOC yang sama (K210) MAIX Bit dengan kamera dan LCD hanya 20.9 USD (atau boardnya saja 12.9 USD). Tapi ada banyak hal juga yang agak menghambat chip ini:

  • Instruction set RISC-V belum terlalu dikenal, supportnya belum matang seperti ARM/Intel
  • Chip ini bersaing dengan berbagai SOC ARM yang sekarang juga mulai menyertakan accelerator untuk AI (walau harganya tak semurah K210)
  • Guide berbahasa inggris masih jarang (kebanyakan berbahasa mandarin)

Saat ini menurut saya MAIX masih belum cukup matang untuk Anda yang ingin “langsung jalan”. Namun demikian group Sipeed sangat aktif, github mereka juga masih sangat aktif, jadi sepertinya masa depan benda ini (dan produk sejenis dari Sipeed) cukup cerah.

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.