Untuk sebagian besar proyek MicroPython—seperti membuat LED berkedip, membaca data sensor, atau mengendalikan layar berukuran kecil—Raspberry Pi Pico (RP2040, M0+, 125 MHz), BlackPill STM32F411 (M4, 100 MHz), ESP8266, dan ESP32 akan memberikan pengalaman yang relatif serupa. Perbedaannya mulai terasa ketika aplikasi melakukan komputasi yang lebih kompleks atau membutuhkan kemampuan pemrosesan numerik yang tinggi.
STM32F411 memiliki Floating Point Unit (FPU) berbasis perangkat keras, dan MicroPython dapat memanfaatkannya secara langsung. Akibatnya, loop yang menjalankan fungsi-fungsi matematika seperti math.sin() dan math.sqrt() dapat dieksekusi lebih cepat pada STM32F411 dibandingkan Raspberry Pi Pico. Untuk aplikasi seperti Digital Signal Processing (DSP), sensor fusion, atau algoritma yang melibatkan banyak perhitungan bilangan pecahan (floating-point), keunggulan ini memberikan peningkatan performa yang nyata.
Di sisi lain, ESP32 juga memiliki unit FPU sehingga mampu memberikan kinerja yang baik untuk operasi floating-point, meskipun performanya bergantung pada varian chip yang digunakan (misalnya ESP32, ESP32-S2, ESP32-S3, atau ESP32-C3) serta implementasi MicroPython yang dijalankan. Untuk sebagian besar aplikasi IoT yang memerlukan pemrosesan data sensor, filter digital, atau perhitungan matematis tingkat menengah, ESP32 menawarkan keseimbangan yang sangat baik antara performa komputasi, konektivitas Wi-Fi/Bluetooth, dan biaya.
Sebaliknya, ESP8266 tidak dilengkapi dengan FPU perangkat keras. Semua operasi floating-point dilakukan melalui perangkat lunak (software emulation), sehingga perhitungan matematika yang intensif akan berjalan lebih lambat dibandingkan STM32F411 maupun ESP32. ESP8266 lebih cocok digunakan untuk aplikasi IoT sederhana, seperti pembacaan sensor, komunikasi jaringan, dan pengendalian perangkat, daripada aplikasi yang membutuhkan komputasi numerik secara intensif.
import math, time
def benchmark():
sin = math.sin
sqlrt = math.sqrt
for i in range(100000):
x = sin(i * 0.001) + sqrt(i + 1)
start = time.ticks_ms()
benchmark()
elapsed = time.ticks_diff(time.ticks_ms(), start)
print(f"Elapsed: {elapsed} ms")
# STM32F411: ~3403 ms
# RP2040: ~6900 ms
# ESP8266 (NodeMCU): ~13851 ms
# ESP32 WROOM: ~3476 msDengan menambahkan decorator @micropython.native, performa komputasi STM32F411 sedikit meningkat:
import math, time
@micropython.native
def benchmark():
sin = math.sin
sqlrt = math.sqrt
for i in range(100000):
x = sin(i * 0.001) + sqrt(i + 1)
start = time.ticks_ms()
benchmark()
elapsed = time.ticks_diff(time.ticks_ms(), start)
print(f"Elapsed: {elapsed} ms")
# STM32F411: ~2838 msDengan menambahkan decorator @micropython.native dan menaikkan frekuensi clock menjadi 240 MHz (default: 160 MHz), performa komputasi ESP32 sedikit meningkat:
import math, time, machine
machine.freq(240000000)
@micropython.native
def benchmark():
sin = math.sin
sqlrt = math.sqrt
for i in range(100000):
x = sin(i * 0.001) + sqrt(i + 1)
start = time.ticks_ms()
benchmark()
elapsed = time.ticks_diff(time.ticks_ms(), start)
print(f"Elapsed: {elapsed} ms")
# ESP32 WROOM: ~2462 msDengan menambahkan decorator @micropython.native dan melakukan overclock menjadi 250 MHz (default: 125 MHz), performa komputasi RP2040 sedikit meningkat:
import math, time, machine
machine.freq(250000000)
@micropython.native
def benchmark():
sin = math.sin
sqlrt = math.sqrt
for i in range(100000):
x = sin(i * 0.001) + sqrt(i + 1)
start = time.ticks_ms()
benchmark()
elapsed = time.ticks_diff(time.ticks_ms(), start)
print(f"Elapsed: {elapsed} ms")
# RP2040 (decorator): ~3310 ms
# RP2040 (overclocked): ~3747 ms
# RP2040 (decorator + overclocked): ~3310 msFirmware MicroPython pada ESP32 tidak langsung mengontrol perangkat keras secara mandiri. Di balik layar, terdapat sistem operasi FreeRTOS. MicroPython pada STM32 dan Pico berjalan langsung di atas silikon tanpa lapisan OS pihak ketiga yang kompleks.
@micropython.native mengubah bytecode menjadi instruksi mesin langsung (hardware spesific). Dampaknya, ukuran fungsi yang diberi decorator akan bengkak 2x hingga 4x lebih besar di memori (Flash/RAM). Decorator ini hanya mempercepat eksekusi interpreter Python (loop, variabel lookup, aritmatika dasar).









