Panduan · 15 mnt baca

Wi-Fi Raspberry Pi Pico W: Tutorial Web Server dengan MicroPython

Panduan Wi-Fi Raspberry Pi Pico W: UF2 yang benar, network.WLAN dan kode statusnya, web server LED, halaman sensor live, panggilan API dengan urequests, dan waktu NTP.

Memakai Wi-Fi di Raspberry Pi Pico W adalah salah satu cara termurah dan termudah untuk membuat perangkat kecil yang bisa kamu kendalikan dari ponsel. Pico W adalah versi Raspberry Pi Pico yang sudah kamu kenal, dengan tambahan Wi-Fi 2,4 GHz dan Bluetooth: dengan beberapa baris MicroPython, board ini bisa bergabung ke jaringan rumahmu, menyajikan halaman web sendiri, serta mengambil info cuaca dan waktu dari internet. Di panduan ini kamu akan menghubungkan Pico W ke Wi-Fi dari nol, membuat web server yang menyalakan LED dari ponselmu, lalu membuat halaman yang menampilkan data sensor secara live.

Di akhir panduan, kamu akan tahu cara memilih file UF2 yang benar, terhubung dengan network.WLAN dan membaca kode statusnya, mengambil data dari API dengan urequests, mengatur jam dengan NTP, dan mengerjakan hal yang sama di Arduino IDE. Kalau kamu baru mengenal Pico, membaca Apa Itu Raspberry Pi Pico? lebih dulu akan memudahkanmu, dan panduan dasar-dasar MicroPython membahas perintah-perintah dasarnya.

Raspberry Pi Pico WH: Pico W dengan Wi-Fi dan header yang sudah tersolder
Raspberry Pi Pico WH: chip nirkabel Infineon CYW43439 ada di bawah pelindung logam, dan antena PCB ada di ujung yang berseberangan dengan port USB. Huruf “H” di akhir nama berarti header-nya sudah tersolder.

Apa itu Raspberry Pi Pico W dan apa bedanya dengan Pico?

Pico W memakai prosesor RP2040 yang sama, ukuran yang sama, dan susunan 40 pin yang sama dengan Pico. Bedanya ada pada chip nirkabel Infineon CYW43439 yang ditambahkan ke board: chip ini menyediakan Wi-Fi 802.11n 2,4 GHz dan Bluetooth 5.2. Prosesor berkomunikasi dengan chip ini lewat jalur SPI di dalam board; yang kamu pakai hanyalah modul network di MicroPython. Raspberry Pi kemudian merilis Pico 2 W dengan prosesor RP2350; karena chip nirkabelnya sama, semua kode di artikel ini juga jalan di sana.

FiturPico WPico 2 WESP32 (WROOM-32)
ProsesorRP2040, dua inti Cortex-M0+, 133 MHzRP2350, dua inti Cortex-M33 (atau RISC-V), 150 MHzXtensa LX6, dua inti, 240 MHz
RAM264 KB520 KB520 KB
Memori flash2 MB4 MBBiasanya 4 MB
Wi-Fi2,4 GHz, 802.11n (CYW43439)2,4 GHz, 802.11n (CYW43439)2,4 GHz, 802.11 b/g/n (di dalam chip)
Bluetooth5.2 (Classic dan BLE)5.2 (Classic dan BLE)4.2 (Classic dan BLE)
Input analog3 kanal, 12-bit3 kanal, 12-bit18 kanal, 12-bit
File MicroPythonRPI_PICO_W (.uf2)RPI_PICO2_W (.uf2)ESP32_GENERIC (.bin)

Di atas kertas, ESP32 lebih cepat dan punya lebih banyak contoh di dunia Arduino. Kelebihan Pico W adalah dukungan MicroPython yang resmi dan matang, dokumentasi yang rapi, dan pin tanpa jebakan seperti “harus berada di level ini ketika boot”. Kalau kamu suka belajar dengan Python, Pico W adalah pilihan yang bagus; kalau kode Arduino dan library siap pakai lebih penting buatmu, ESP32 mungkin terasa lebih nyaman. Kalau kamu bingung memilih di antara keduanya, perbandingan Arduino vs ESP32 akan membantu.

Chip nirkabel Pico W dan perbedaan pinnya

Pin yang dikeluarkan di Pico W persis sama dengan di Pico: GP0–GP22 dan GP26–GP28 bebas dipakai, dan input analog tetap di GP26, GP27, dan GP28. Yang berubah adalah empat pin yang tetap berada di dalam board. Di Pico, pin-pin ini mengurus LED onboard, mode daya, dan deteksi USB; di Pico W, pin-pin ini dicadangkan untuk berkomunikasi dengan chip nirkabel, dan LED-nya sendiri tersambung langsung ke chip nirkabel. Kamu bisa melihat peta pin lengkap board ini di alat diagram pin.

Pin internalFungsi di PicoFungsi di Pico W
GP23Mode catu daya (SMPS)Pengaktif chip nirkabel (WL_ON)
GP24Deteksi tegangan USB (VBUS)Jalur data dan interrupt nirkabel (WL_D)
GP25LED onboardChip select nirkabel (WL_CS)
GP29Pengukuran tegangan VSYS (ADC3)Jalur clock nirkabel (WL_CLK) dan pengukuran VSYS
LED onboardGP25: Pin(25)WL_GPIO0 milik chip nirkabel: Pin("LED")
Jangan mencoba menyalakan LED onboard Pico W dengan Pin(25); pin itu sekarang menjadi jalur select chip nirkabel. Bentuk yang benar adalah Pin("LED", Pin.OUT), dan baris yang sama jalan di Pico, Pico W, dan Pico 2 W. Selain itu, jangan taruh logam, baterai, atau gulungan kabel di bawah atau tepat di samping area antena di ujung board; kalau antena terhalang, sinyalnya jadi jauh lebih lemah.

Langkah 1: Flash file UF2 yang benar untuk Pico W

Kesalahan paling umum adalah mem-flash file MicroPython untuk Pico biasa ke Pico W. Board-nya tetap jalan dan kamu melihat prompt di Shell Thonny, tetapi begitu kamu mengetik import network, muncul “ImportError: no module named 'network'”, karena build untuk Pico biasa tidak punya driver nirkabel. Setiap board punya file UF2 sendiri:

BoardFile UF2 MicroPythonDrive yang muncul dalam mode BOOTSEL
Raspberry Pi PicoRPI_PICO-….uf2RPI-RP2
Raspberry Pi Pico W / WHRPI_PICO_W-….uf2RPI-RP2
Raspberry Pi Pico 2RPI_PICO2-….uf2RP2350
Raspberry Pi Pico 2 WRPI_PICO2_W-….uf2RP2350
  1. Di halaman unduhan micropython.org, cari board RPI_PICO_W (RPI_PICO2_W untuk Pico 2 W) dan unduh file .uf2 stabil terbaru, yaitu yang tidak bertanda “preview”.
  2. Tahan tombol BOOTSEL di Pico W sambil mencolokkan kabel data USB ke komputermu, lalu lepaskan tombolnya.
  3. Drive bernama RPI-RP2 muncul di komputermu. Seret file yang sudah diunduh ke drive itu; begitu penyalinan selesai, drive-nya hilang sendiri dan board menyala ulang dengan MicroPython.
  4. Buka Thonny dan pilih MicroPython (Raspberry Pi Pico) dari menu interpreter di kanan bawah. Kalau mau, jendela “Install or update MicroPython” di Thonny bisa melakukan instalasi yang sama dengan sekali klik ketika kamu memilih varian Pico W / Pico WH.
  5. Ketik import network di Shell. Kalau tidak ada error, berarti firmware yang benar dengan dukungan nirkabel sudah terpasang.
Kalau kamu tidak yakin board dan versi mana yang kamu punya, ketik import os; print(os.uname()) di Shell. Kalau kolom machine bertuliskan “Raspberry Pi Pico W with RP2040”, berarti kamu sudah di jalur yang benar; kolom release menunjukkan versi MicroPython. Untuk memperbarui firmware, cukup ulangi langkah-langkah UF2; file yang kamu simpan di Pico biasanya tetap ada.

Langkah 2: Terhubung ke Wi-Fi dengan network.WLAN

Pico W punya dua antarmuka nirkabel: dalam mode WLAN.IF_STA (station), ia bergabung ke router rumahmu seperti ponsel, dan dalam mode WLAN.IF_AP (access point), ia membuat jaringan Wi-Fi sendiri. Kita mulai dari mode station. Tempel kode di bawah ke file baru di Thonny, isi nama jaringan dan kata sandimu, lalu simpan ke Pico sebagai wifi.py. Semua contoh berikutnya memakai file ini dengan import wifi, jadi kata sandimu hanya tersimpan di satu tempat. Kalau kamu memakai MicroPython versi lebih lama dari 1.24, tulis konstanta ini sebagai network.STA_IF dan network.AP_IF; nama lama ini juga tetap jalan di versi yang lebih baru.

Python
1# wifi.py: Pico W'ye bu adla kaydet / save it to the Pico W with this name
2import network
3import time
4
5SSID = "AgAdi"            # Wi-Fi adın / your Wi-Fi name
6PASSWORD = "Sifre123"     # Wi-Fi şifren / your Wi-Fi password
7HOSTNAME = "picow"        # http://picow.local adresi için / for http://picow.local
8
9STATUS = {
10    0: "Boşta / idle",
11    1: "Ağa katılıyor / joining",
12    2: "IP bekleniyor / waiting for IP",
13    3: "Bağlandı / connected",
14    -1: "Bağlantı başarısız / connection failed",
15    -2: "Ağ bulunamadı / network not found",
16    -3: "Şifre hatalı / wrong password",
17}
18
19
20def connect(timeout=20):
21    network.country("TR")             # ülke kodu / country code
22    network.hostname(HOSTNAME)        # ağdaki adı / name on the network
23    wlan = network.WLAN(network.WLAN.IF_STA)
24    wlan.active(True)
25    wlan.config(pm=network.WLAN.PM_NONE)   # güç tasarrufunu kapat / disable power saving
26    if not wlan.isconnected():
27        wlan.connect(SSID, PASSWORD)
28        for _ in range(timeout):
29            code = wlan.status()
30            print(code, STATUS.get(code, "?"))
31            if code < 0 or code == 3:
32                break
33            time.sleep(1)
34    if wlan.status() != 3:
35        raise RuntimeError("Wi-Fi: " + STATUS.get(wlan.status(), "?"))
36    print("IP:", wlan.ifconfig()[0])
37    return wlan
38
39
40if __name__ == "__main__":
41    connect()

Mari lihat baris-baris pentingnya. network.country("TR") memberi tahu chip nirkabel aturan kanal negara mana yang harus diikuti; ganti TR dengan kode negara dua hurufmu sendiri, misalnya ID untuk Indonesia, GB, atau US. Kalau dilewati, kamu mungkin kesulitan melihat jaringan di kanal 12 dan 13 yang dipakai sebagian router (firmware lama melakukan hal yang sama dengan rp2.country()). wlan.config(pm=network.WLAN.PM_NONE) mematikan mode hemat daya (contoh lama menulis pengaturan yang sama sebagai pm=0xa11140): secara default Pico W menghemat energi, yang bisa membuat web server lambat menjawab atau koneksinya putus setelah beberapa jam. Perulangan mencetak kode status setiap detik dan berhenti ketika mencapai 3 atau mendapat kode error negatif. Dengan begitu board tidak pernah menunggu selamanya, dan kamu bisa melihat di layar apa yang salah.

Apa arti kode wlan.status()?

Sebagian besar masalah koneksi bisa selesai dalam hitungan detik dengan melihat angka yang dikembalikan wlan.status(). MicroPython juga menyediakan konstanta siap pakai untuk angka-angka ini di modul network; keduanya ada di tabel di bawah:

KodeKonstantaArtiYang harus dilakukan
0STAT_IDLETidak ada koneksi, belum ada yang dimulaiPastikan wlan.active(True) dan wlan.connect() sudah dipanggil
1STAT_CONNECTINGSedang bergabung ke jaringanTunggu beberapa detik
2(tidak ada konstanta)Sudah bergabung, menunggu alamat IP dari routerKalau lama, cek pengaturan DHCP router
3STAT_GOT_IPTerhubung dengan alamat IPKamu sudah siap
-1STAT_CONNECT_FAILKoneksi gagalCek sinyal dan catu daya, lalu coba lagi
-2STAT_NO_AP_FOUNDJaringan tidak ditemukanCek nama jaringan, pita 2,4 GHz, dan jaraknya
-3STAT_WRONG_PASSWORDAutentikasi gagalKetik ulang kata sandi, perhatikan huruf besar dan kecil

Kalau kamu mendapat kode -2, Pico W tidak bisa melihat jaringanmu. Menampilkan daftar jaringan di sekitarmu langsung membuka masalahnya: kalau jaringanmu tidak ada di daftar, berarti jaringan itu memancar di 5 GHz atau sinyalnya terlalu lemah. RSSI yang lebih baik dari -70 dBm (misalnya -55 dBm) sudah nyaman; di sekitar -80 dBm, koneksi mulai putus-putus.

Python
1import network
2
3wlan = network.WLAN(network.WLAN.IF_STA)
4wlan.active(True)
5for ssid, bssid, channel, rssi, security, hidden in wlan.scan():
6    print(ssid.decode(), "| kanal / channel:", channel, "| RSSI:", rssi, "dBm")
Pico W hanya bisa terhubung ke jaringan 2,4 GHz. Kalau router-mu memancarkan kedua pita dengan nama yang sama dan koneksinya gagal, atur hotspot pribadi ponselmu ke 2,4 GHz lalu coba ke sana; kalau berhasil, masalahnya ada di pengaturan router, bukan di kodemu. Jaringan di sekolah dan kantor yang meminta nama pengguna (WPA2-Enterprise) tidak didukung di Pico W. Untuk tips lain, daftar periksa di ESP32 tidak mau terhubung ke Wi-Fi juga berlaku untuk Pico W.

Langkah 3: Web server MicroPython sederhana (halaman nyala/mati LED)

Sekarang mari ubah Pico W menjadi web server kecil yang bisa kamu buka dari ponsel. Tidak perlu library tambahan; modul socket MicroPython sudah cukup. Simpan kode di bawah sebagai main.py dan jalankan. Ketik alamat yang tampil di Shell (misalnya http://192.168.1.42) di browser ponsel yang terhubung ke jaringan Wi-Fi yang sama; tombol ON dan OFF di halaman itu menyalakan dan mematikan LED di board.

MicroPython
1import socket
2from machine import Pin
3import wifi
4
5wlan = wifi.connect()
6led = Pin("LED", Pin.OUT)              # Pico W dahili LED / Pico W onboard LED
7led_on = False
8
9
10def page(on):
11    state = "AÇIK / ON" if on else "KAPALI / OFF"
12    return """<!DOCTYPE html>
13<html><head><meta charset="utf-8">
14<meta name="viewport" content="width=device-width, initial-scale=1">
15<title>Pico W LED</title></head>
16<body style="font-family:sans-serif;text-align:center">
17<h1>Pico W LED</h1>
18<p>Durum / State: <b>""" + state + """</b></p>
19<p><a href="/on"><button style="font-size:24px">AÇ / ON</button></a>
20<a href="/off"><button style="font-size:24px">KAPAT / OFF</button></a></p>
21</body></html>"""
22
23
24addr = socket.getaddrinfo("0.0.0.0", 80)[0][-1]
25server = socket.socket()
26server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)   # EADDRINUSE hatasını önler / prevents EADDRINUSE
27server.bind(addr)
28server.listen(2)
29print("Tarayıcıda aç / open in browser: http://" + wlan.ifconfig()[0])
30
31while True:
32    client, remote = server.accept()           # bir tarayıcı bekle / wait for a browser
33    try:
34        request = client.recv(1024)            # b"GET /on HTTP/1.1 ..."
35        parts = request.split(b" ")
36        path = parts[1] if len(parts) > 1 else b"/"
37        if path == b"/on":
38            led.on()
39            led_on = True
40        elif path == b"/off":
41            led.off()
42            led_on = False
43        if path in (b"/", b"/on", b"/off"):
44            client.sendall("HTTP/1.0 200 OK\r\nContent-Type: text/html; charset=utf-8\r\n\r\n")
45            client.sendall(page(led_on))
46        else:
47            client.sendall("HTTP/1.0 404 Not Found\r\n\r\n")   # ör. /favicon.ico / e.g. /favicon.ico
48    except OSError as e:
49        print("Bağlantı hatası / connection error:", e)
50    finally:
51        client.close()

Begini cara kerjanya. Dengan bind dan listen, Pico W mulai mendengarkan di port 80 (HTTP), dan accept() menunggu sampai ada browser yang terhubung. Baris pertama permintaan browser terlihat seperti “GET /on HTTP/1.1”; kode memecah baris itu di setiap spasi untuk menemukan path yang diminta (/on) lalu mengatur LED sesuai path itu. Setelah itu kode mengirim header HTTP (“HTTP/1.0 200 OK” dan tipe kontennya), satu baris kosong, dan terakhir halaman HTML, lalu menutup koneksi. Baris meta viewport membuat halaman tampil dengan skala yang pas di ponsel, dan charset=utf-8 membuat karakter khusus tampil dengan benar.

PathFungsinya
/Menampilkan halaman dan status LED sekarang
/onMenyalakan LED dan mengirim halaman lagi
/offMematikan LED dan mengirim halaman lagi
/favicon.ico dan lainnyaMengembalikan 404; browser meminta path ini sendiri untuk ikon tab
Ketika kamu menghentikan kode di Thonny lalu menjalankannya lagi, kamu mungkin mendapat “OSError: [Errno 98] EADDRINUSE”: socket sisa dari jalannya program sebelumnya masih memegang port 80. Baris SO_REUSEADDR di kode biasanya mencegah hal ini; kalau masih muncul, lakukan soft reset dengan Ctrl+D di Shell, atau cabut kabel USB board lalu colokkan lagi.

Menghubungkan relay atau LED eksternal sebagai gantinya

Setelah berhasil dengan LED onboard, mengendalikan perangkat sungguhan dari halaman yang sama cukup dengan mengubah satu baris: ganti Pin("LED", Pin.OUT) dengan, misalnya, Pin(16, Pin.OUT). Resistor yang tepat untuk LED eksternal bisa kamu hitung dengan kalkulator resistor LED; 220–330 Ω sudah cukup untuk pin 3,3 V. Kalau kamu memakai modul relay, beri daya dari pin VBUS 5 V dan hubungkan pin IN-nya ke GPIO. Banyak modul relay aktif dengan sinyal LOW; kalau begitu, tukar baris led.on() dan led.off(). Untuk detail pengkabelan relay, lihat Apa Itu Modul Relay?

KomponenPin komponenPin Pico W (nomor pin fisik)
LED eksternalAnoda (+), lewat resistor 220 ΩGP14 (19)
LED eksternalKatoda (−)GND (18)
DHT22VCC / DATA / GND3V3(OUT) (36) / GP15 (20) / GND (38)
Modul relayVCCVBUS, 5 V dari USB (40)
Modul relayINGP16 (21)
Modul relayGNDGND (23)
Kalau kamu memakai relay untuk menyalakan lampu bertegangan listrik PLN, pasang semua kabel dalam keadaan listrik mati, jangan biarkan ada konduktor yang terbuka, dan masukkan rangkaiannya ke dalam kotak tertutup; tegangan listrik PLN bisa mematikan. Kalau ragu, coba dulu dengan LED strip 12 V. Sebagian modul relay 5 V tidak bisa beralih dengan andal dengan sinyal 3,3 V; kalau relay tidak berbunyi klik, tambahkan transistor atau pilih modul yang kompatibel dengan 3,3 V.

Langkah 4: Menampilkan data sensor secara live di halaman web

Halaman LED tadi dimuat ulang sepenuhnya setiap kali kamu menekan tombol. Untuk halaman yang menampilkan hasil pengukuran, jauh lebih enak kalau nilainya diperbarui tanpa memuat ulang. Untuk itu kita pakai dua path: / mengirim halamannya sendiri dan /data hanya mengirim hasil pengukuran dalam format JSON. Potongan kecil JavaScript di halaman membaca /data setiap dua detik dan memperbarui angkanya. Contoh ini menampilkan sensor suhu internal, yang tidak butuh komponen tambahan, dan kekuatan sinyal Wi-Fi (RSSI); server-nya juga dibuat dengan modul asyncio MicroPython, jadi Pico W tetap mengukur sambil menunggu permintaan.

MicroPython
1import asyncio
2import json
3import time
4from machine import ADC, Pin
5import wifi
6
7wlan = wifi.connect()
8sensor = ADC(4)                        # dahili sıcaklık sensörü / internal temperature sensor
9led = Pin("LED", Pin.OUT)
10start = time.time()
11readings = {"temp": 0, "rssi": 0, "uptime": 0}
12
13HTML = """<!DOCTYPE html>
14<html><head><meta charset="utf-8">
15<meta name="viewport" content="width=device-width, initial-scale=1">
16<title>Pico W</title></head>
17<body style="font-family:sans-serif;text-align:center">
18<h1>Pico W</h1>
19<p>Sıcaklık / Temperature: <b id="t">-</b> °C</p>
20<p>Wi-Fi sinyali / signal: <b id="r">-</b> dBm</p>
21<p>Çalışma süresi / uptime: <b id="u">-</b> s</p>
22<script>
23async function update() {
24  try {
25    const d = await (await fetch("/data")).json();
26    document.getElementById("t").textContent = d.temp;
27    document.getElementById("r").textContent = d.rssi;
28    document.getElementById("u").textContent = d.uptime;
29  } catch (e) {}
30}
31update();
32setInterval(update, 2000);
33</script>
34</body></html>"""
35
36
37def read_temp():
38    volts = sensor.read_u16() * 3.3 / 65535
39    return round(27 - (volts - 0.706) / 0.001721, 1)
40
41
42async def measure():
43    while True:
44        readings["temp"] = read_temp()
45        readings["rssi"] = wlan.status("rssi")      # yalnız STA modunda / STA mode only
46        readings["uptime"] = time.time() - start
47        led.toggle()                                # kalp atışı / heartbeat
48        await asyncio.sleep(2)
49
50
51async def handle(reader, writer):
52    try:
53        line = await reader.readline()              # b"GET /data HTTP/1.1"
54        while True:                                 # başlıkları atla / skip the headers
55            header = await reader.readline()
56            if header in (b"\r\n", b""):
57                break
58        parts = line.split(b" ")
59        path = parts[1] if len(parts) > 1 else b"/"
60        if path == b"/":
61            writer.write(b"HTTP/1.0 200 OK\r\nContent-Type: text/html; charset=utf-8\r\n\r\n")
62            writer.write(HTML.encode())
63        elif path == b"/data":
64            writer.write(b"HTTP/1.0 200 OK\r\nContent-Type: application/json\r\n\r\n")
65            writer.write(json.dumps(readings).encode())
66        else:
67            writer.write(b"HTTP/1.0 404 Not Found\r\n\r\n")
68        await writer.drain()
69    except OSError as e:
70        print("Bağlantı hatası / connection error:", e)
71    finally:
72        writer.close()
73        await writer.wait_closed()
74
75
76async def main():
77    await asyncio.start_server(handle, "0.0.0.0", 80)
78    print("Tarayıcıda aç / open in browser: http://" + wlan.ifconfig()[0])
79    await measure()
80
81
82asyncio.run(main())

asyncio.start_server() menjalankan fungsi handle sebagai task terpisah untuk setiap koneksi browser baru, sementara task measure() mengambil pembacaan setiap dua detik di latar belakang dan membuat LED onboard berkedip. LED yang berkedip itu juga memberi tahu bahwa board tidak macet. Catatan: kalau kamu menulis dengan asyncio, ubah teks menjadi bytes dengan .encode() sebelum dikirim, kalau tidak, halaman dengan karakter khusus akan memunculkan error. Sensor suhu internal mengukur suhu chip itu sendiri, jadi pembacaannya berisik (noisy) dan selisih beberapa derajat dari suhu ruangan; rumus 27 − (V − 0.706) / 0.001721 di kode berasal dari datasheet RP2040. Untuk suhu ruangan yang sebenarnya, pakai sensor eksternal.

Modul sensor suhu dan kelembapan DHT22 (AM2302)
Modul DHT22 punya tiga pin: VCC, DATA, dan GND. Urutan pin bisa berbeda tergantung pembuatnya, jadi baca label di board-nya; modul ini bisa langsung jalan dari 3,3 V Pico W.

Untuk suhu dan kelembapan yang sebenarnya, hubungkan DHT22 (pin DATA ke GP15). Driver sensor DHT sudah tertanam di firmware Pico W, jadi tidak ada yang perlu di-upload lagi. Di fungsi measure() pada kode sensor, ganti baris readings["temp"] = read_temp() dengan pemanggilan read_sensor() di bawah, lalu tambahkan satu baris lagi di HTML untuk kelembapan. DHT22 sebaiknya tidak dibaca lebih sering dari setiap dua detik, persis tempo perulangan ini. Untuk info lebih lanjut tentang sensornya, lihat Sensor Suhu dan Kelembapan DHT11.

MicroPython
1import dht
2from machine import Pin
3
4dht_sensor = dht.DHT22(Pin(15))        # DATA ucu GP15'te / DATA pin on GP15
5
6
7def read_sensor():
8    try:
9        dht_sensor.measure()            # ölçümü başlat / trigger a reading
10        readings["temp"] = dht_sensor.temperature()   # °C
11        readings["hum"] = dht_sensor.humidity()       # % bağıl nem / % relative humidity
12    except OSError as e:
13        print("DHT22 okunamadı / read failed:", e)

Langkah 5: Memanggil API dengan urequests (mengambil data dari internet)

Pico W bisa menjadi client sekaligus server: ia bisa mengirim permintaan ke layanan online dan membaca balasannya. Modul requests sudah tertanam di firmware Pico W; nama urequests yang kamu lihat di contoh lama mengarah ke modul yang sama, jadi kedua penulisan itu jalan. Contoh di bawah mengambil suhu, kelembapan, dan kecepatan angin terkini untuk Istanbul dari layanan cuaca gratis Open-Meteo, yang tidak butuh API key. Cukup ganti LAT dan LON untuk kotamu sendiri, misalnya -6.21 dan 106.85 untuk Jakarta, atau 51.51 dan -0.13 untuk London.

Python
1import requests
2import wifi
3
4wifi.connect()
5
6# İstanbul; kendi konumunu yaz / Istanbul; put your own location
7LAT, LON = 41.01, 28.98
8URL = ("https://api.open-meteo.com/v1/forecast?latitude={}&longitude={}"
9       "&current=temperature_2m,relative_humidity_2m,wind_speed_10m").format(LAT, LON)
10
11response = requests.get(URL)
12try:
13    if response.status_code == 200:
14        current = response.json()["current"]
15        print("Sıcaklık / temperature:", current["temperature_2m"], "°C")
16        print("Nem / humidity:", current["relative_humidity_2m"], "%")
17        print("Rüzgâr / wind:", current["wind_speed_10m"], "km/h")
18    else:
19        print("HTTP hatası / HTTP error:", response.status_code)
20finally:
21    response.close()                   # soketi ve belleği serbest bırak / free the socket and memory

Ada tiga hal yang perlu diperhatikan di kode ini. Pertama, panggil response.close() setelah setiap respons; respons yang tidak ditutup menghabiskan socket dan memori, dan setelah beberapa permintaan kamu akan kena “OSError: [Errno 12] ENOMEM”. Kedua, response.json() memuat seluruh balasan ke memori; Pico W hanya punya total RAM 264 KB, jadi untuk API yang mengembalikan JSON besar, pakai URL yang hanya meminta kolom yang kamu butuhkan (seperti parameter current di sini). Ketiga, koneksi HTTPS butuh memori tambahan untuk enkripsi; kalau kamu mengirim permintaan secara rutin dalam perulangan, menambahkan gc.collect() di antaranya mengurangi fragmentasi memori. Dengan cara yang sama kamu bisa mengirim pesan Telegram, menulis data ke spreadsheet, atau mengambil kurs mata uang; pengaturan bot Telegram-nya sama dengan di bot Telegram ESP32.

Langkah 6: Waktu akurat dari internet dengan NTP

Pico W punya jam real-time (RTC) di dalamnya, tetapi tanpa baterai cadangan: setiap kali board dinyalakan, jamnya kembali ke 1 Januari 2021. Selama terhubung ke Wi-Fi, mengambil waktu yang benar dari server NTP di internet itu mudah: fungsi settime() dari modul bawaan ntptime mengatur jam internal ke UTC. Kode menambahkan selisih tetap untuk mendapatkan waktu lokal; contoh ini memakai 3 jam (10.800 detik) untuk Turki, jadi atur UTC_OFFSET ke zona waktumu sendiri, misalnya 7 * 3600 untuk WIB (Jakarta), 0 untuk London di musim dingin, atau -5 * 3600 untuk New York.

Python
1import time
2import ntptime
3import wifi
4
5wifi.connect()
6ntptime.host = "pool.ntp.org"          # varsayılan sunucu / default server
7UTC_OFFSET = 3 * 3600                  # Türkiye UTC+3; kendi saat dilimini yaz / set your own time zone
8
9for attempt in range(5):
10    try:
11        ntptime.settime()              # dahili saati UTC'ye ayarlar / sets the internal clock to UTC
12        print("Saat ayarlandı / time set")
13        break
14    except OSError as e:
15        print("NTP hatası / NTP error:", e)
16        time.sleep(2)
17
18DAYS = ("Pzt/Mon", "Sal/Tue", "Çar/Wed", "Per/Thu", "Cum/Fri", "Cmt/Sat", "Paz/Sun")
19
20while True:
21    y, mo, d, h, mi, s, wd, yd = time.localtime(time.time() + UTC_OFFSET)
22    print("%02d.%02d.%d %s %02d:%02d:%02d" % (d, mo, y, DAYS[wd], h, mi, s))
23    time.sleep(1)

Secara default ntptime memakai server pool.ntp.org dan menunggu jawaban selama satu detik; kalau tidak ada jawaban, muncul “OSError: [Errno 110] ETIMEDOUT”, karena itulah kode mencoba sampai lima kali. Jam internal bisa bergeser beberapa detik seiring waktu, jadi di proyek yang berjalan lama, panggil settime() lagi sekali sehari. Di negara yang memakai waktu musim panas, selisihnya berubah dua kali setahun; kamu perlu menanganinya di kode dengan pengecekan tanggal (Indonesia tidak memakai waktu musim panas). Kalau ingin menampilkan waktu di layar, gabungkan kode ini dengan contoh MicroPython di artikel layar OLED atau LCD I2C; versi ESP32-nya ada di jam NTP ESP32.

Membuat jaringan sendiri (mode AP) dan alamat picow.local

Di tempat tanpa router, misalnya di stan pameran sains atau di kebun, Pico W bisa memancarkan jaringan Wi-Fi sendiri. Dalam mode access point, kamu menghubungkan ponsel langsung ke jaringan “PicoW-BlueGrays” lalu membuka halamannya di http://192.168.4.1. Kode web server jalan tanpa perubahan; cukup tulis baris di bawah sebagai pengganti wlan = wifi.connect() lalu tambahkan wlan = ap. Kata sandinya minimal 8 karakter. Baris RSSI di contoh sensor hanya jalan di mode station, jadi hapus baris itu di mode AP. Dalam mode ini Pico W tidak punya akses internet, jadi contoh NTP dan API tidak akan jalan.

Python
1import network
2
3ap = network.WLAN(network.WLAN.IF_AP)
4ap.config(ssid="PicoW-BlueGrays", password="bluegrays123")   # şifre en az 8 karakter / at least 8 characters
5ap.active(True)
6while not ap.active():
7    pass
8print("Ağ hazır / network ready:", ap.ifconfig()[0])          # genellikle 192.168.4.1 / usually 192.168.4.1

Kalau membaca alamat IP dari Shell setiap kali terasa merepotkan, kamu bisa memakai nama. Versi MicroPython terbaru mendukung mDNS di Pico W: berkat baris network.hostname("picow") di wifi.py, board juga bisa diakses di http://picow.local. Alamat ini biasanya jalan di Windows, macOS, Linux, dan iPhone; sebagian ponsel Android tidak bisa membuka alamat .local, jadi pakai alamat IP di sana. Kalau ingin alamat IP-nya tidak pernah berubah, cara paling andal adalah memberi IP tetap untuk alamat MAC Pico W di pengaturan router-mu (reservasi DHCP).

Catatan Pico 2 W: apa yang berubah?

Pico 2 W punya ukuran dan susunan pin yang sama dengan Pico W dan memakai chip nirkabel CYW43439 yang sama, sementara prosesornya adalah RP2350 yang lebih cepat. Dari sisi software, satu-satunya perbedaan adalah firmware: unduh file RPI_PICO2_W dari micropython.org, dan ketika kamu mencolokkannya dengan BOOTSEL, drive-nya muncul sebagai RP2350. Semua kode MicroPython di artikel ini jalan tanpa perubahan. Dengan RAM 520 KB, permintaan HTTPS, balasan JSON besar, dan halaman HTML panjang jauh lebih lega di Pico 2 W. Di Arduino IDE, pilih Raspberry Pi Pico 2W sebagai board. Satu catatan: versi awal RP2350 punya erratum chip yang sudah diketahui (E9) yang memengaruhi resistor pull-down internal; untuk tombol, menyambungkan ke GND dan memakai PULL_UP adalah pilihan yang paling bebas masalah. Untuk fitur lanjutan seperti dua inti dan PIO, lihat PIO dan dua inti Pico.

Alternatif: memprogram Pico W di Arduino IDE (arduino-pico)

Kalau C++ dan library Arduino terasa lebih akrab, kamu bisa memprogram Pico W dari Arduino IDE dengan core arduino-pico buatan Earle Philhower. Core ini sudah membawa library WiFi dan WebServer yang kompatibel dengan versi ESP32, jadi kode web server yang ditulis untuk ESP32 bisa jalan di Pico W dengan sedikit perubahan.

  1. Di Arduino IDE, buka File > Preferences dan tambahkan https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json ke kolom “Additional boards manager URLs”.
  2. Cari pico di Boards Manager lalu instal paket Raspberry Pi Pico/RP2040/RP2350 dari Earle F. Philhower.
  3. Pilih Raspberry Pi Pico W dari Tools > Board (Raspberry Pi Pico 2W untuk Pico 2 W).
  4. Untuk upload pertama, colokkan board sambil menahan BOOTSEL; Arduino IDE akan menemukannya sebagai drive UF2. Untuk upload berikutnya, cukup pilih port serial yang muncul di Tools > Port.
  5. Setelah upload, buka Serial Monitor di 115200 baud dan baca alamat IP-nya.
C++ (Arduino IDE)
1#include <WiFi.h>
2#include <WebServer.h>
3#include <LEAmDNS.h>
4
5const char* ssid = "AgAdi";          // Wi-Fi adın / your Wi-Fi name
6const char* password = "Sifre123";   // Wi-Fi şifren / your Wi-Fi password
7
8WebServer server(80);
9bool ledOn = false;
10
11void sendPage() {
12  String html = "<!DOCTYPE html><html><head><meta charset='utf-8'>"
13                "<meta name='viewport' content='width=device-width, initial-scale=1'>"
14                "<title>Pico W</title></head>"
15                "<body style='font-family:sans-serif;text-align:center'><h1>Pico W LED</h1>";
16  html += "<p>Durum / State: <b>";
17  html += ledOn ? "AÇIK / ON" : "KAPALI / OFF";
18  html += "</b></p><p><a href='/on'><button>AÇ / ON</button></a> ";
19  html += "<a href='/off'><button>KAPAT / OFF</button></a></p>";
20  html += "<p>Sıcaklık / Temp: ";
21  html += String(analogReadTemp(), 1);   // dahili sensör / internal sensor
22  html += " °C</p></body></html>";
23  server.send(200, "text/html", html);
24}
25
26void setup() {
27  Serial.begin(115200);
28  pinMode(LED_BUILTIN, OUTPUT);          // Pico W'de kablosuz yongadaki LED / the LED on the wireless chip
29  WiFi.mode(WIFI_STA);
30  WiFi.begin(ssid, password);
31  while (WiFi.status() != WL_CONNECTED) {
32    delay(500);
33    Serial.print(".");
34  }
35  Serial.println();
36  Serial.print("IP: ");
37  Serial.println(WiFi.localIP());        // bu adresi telefonda aç / open this address on your phone
38
39  MDNS.begin("picow");                   // http://picow.local
40  server.on("/", sendPage);
41  server.on("/on", []() { ledOn = true;  digitalWrite(LED_BUILTIN, HIGH); sendPage(); });
42  server.on("/off", []() { ledOn = false; digitalWrite(LED_BUILTIN, LOW);  sendPage(); });
43  server.onNotFound([]() { server.send(404, "text/plain", "404"); });
44  server.begin();
45}
46
47void loop() {
48  server.handleClient();
49  MDNS.update();
50}

Sketch ini melakukan hal yang sama dengan halaman LED MicroPython dan menambahkan pembacaan suhu internal dengan analogReadTemp(). Di Pico W, LED_BUILTIN otomatis mengendalikan LED di chip nirkabel, dan baris MDNS.begin("picow") membuat halamannya juga bisa diakses di http://picow.local. Driver Wi-Fi menambah sekitar 220 KB ke program hasil kompilasi, jadi build pertama mungkin agak lama. Ketika memilih antara MicroPython dan Arduino, ingat ini: dengan MicroPython kamu menyimpan kode lalu langsung mencobanya; dengan Arduino kamu menunggu kompilasi, tetapi mendapat kode yang lebih cepat dan dukungan library yang luas.

Ide proyek Raspberry Pi Pico W

  • Termometer Wi-Fi: pantau suhu dan kelembapan yang diukur DHT11 atau DHT22 dari ponselmu.
  • Lampu yang dikendalikan dari ponsel: tambahkan modul relay ke halaman LED di artikel ini, lalu nyalakan dan matikan lampu mejamu.
  • Pemantau kelembapan tanaman: tampilkan pembacaan sensor kelembapan tanah di halaman, dan beri peringatan ketika tanahnya mengering.
  • Peringatan gerakan: ketika sensor PIR mendeteksi seseorang, kirim pesan Telegram ke ponselmu dengan urequests.
  • Jam internet: tampilkan waktu NTP lengkap dengan tanggal dan nama hari di layar OLED.
  • Otomasi rumah: instal library umqtt.simple dengan mip lalu kirim pembacaanmu ke Home Assistant lewat MQTT; idenya dijelaskan di MQTT ESP32.
  • Dashboard real-time: untuk halaman yang diperbarui lebih cepat, adaptasikan ide dari artikel web server async ESP32 berbasis WebSocket ke Pico W.

Kesalahan umum dan solusinya

Gejala atau errorPenyebabSolusi
“ImportError: no module named 'network'”Firmware Pico biasa ter-flash ke Pico WFlash file UF2 RPI_PICO_W (RPI_PICO2_W untuk Pico 2 W)
wlan.status() tetap di -2Jaringan tidak terlihat: 5 GHz, nama jaringan salah, atau sinyal lemahNyalakan pita 2,4 GHz, cari jaringannya dengan wlan.scan(), dekatkan board ke router
wlan.status() mengembalikan -3Kata sandi salahKetik ulang kata sandi, perhatikan huruf besar-kecil dan spasi
“OSError: [Errno 98] EADDRINUSE”Socket server sebelumnya masih memegang port 80Pakai SO_REUSEADDR, restart dengan Ctrl+D
Halaman tidak mau terbuka di ponselPonsel memakai data seluler, terhubung ke jaringan tamu, atau router mengaktifkan isolasi klienHubungkan ponsel ke Wi-Fi yang sama dan ketik alamatnya dengan http, bukan https
OSError: -2 (urequests)Nama host tidak bisa di-resolve: tidak ada Wi-Fi atau ada masalah DNSPanggil wifi.connect() lebih dulu dan cek URL-nya
“OSError: [Errno 12] ENOMEM”Memori habisPakai response.close() dan gc.collect(), minta balasan yang lebih kecil
Koneksi putus setelah berjam-jamMode hemat daya atau router menyala ulangPakai pm=network.WLAN.PM_NONE, cek wlan.isconnected() di perulangan, lalu sambungkan ulang
Tidak jalan ketika dicabut dari komputerKode tidak disimpan sebagai main.py, atau wifi.py tidak ada di PicoSimpan kedua file ke Pico
Server di artikel ini tidak memakai kata sandi dan tidak memakai HTTPS; siapa pun di jaringan yang sama bisa membuka halamannya. Itu tidak masalah untuk bereksperimen di jaringan rumah, tetapi jangan membuka Pico W langsung ke internet dengan port forwarding di router-mu. Kalau butuh akses jarak jauh, layanan perantara seperti MQTT atau Telegram jauh lebih aman. Dan ketika membagikan kodemu, jangan lupa menghapus kata sandi Wi-Fi dari wifi.py.

Seperti yang sudah kamu lihat, menghubungkan Raspberry Pi Pico W ke Wi-Fi, menyajikan halaman web, dan mengambil data dari internet hanya butuh beberapa file: wifi.py mengurus koneksi dan main.py menjalankan proyeknya. Untuk memperkuat dasar Pico-mu, aplikasi BlueGrays punya proyek Raspberry Pi Pico untuk LED berkedip, lampu lalu lintas, PWM, dan LED RGB, dan di sisi ESP32 ada proyek koneksi Wi-Fi, web server asinkron, jam NTP, dan API cuaca, masing-masing dengan skema rangkaian dan kode langkah demi langkah.

Pertanyaan umum

Apakah Raspberry Pi Pico W mendukung Wi-Fi 5 GHz?

Tidak. Chip CYW43439 di Pico W dan Pico 2 W hanya bekerja di pita 2,4 GHz dan tidak bisa melihat jaringan 5 GHz. Pastikan pita 2,4 GHz di router-mu menyala; kalau kedua pita memakai satu nama yang sama dan kamu mengalami masalah, memberi nama tersendiri untuk pita 2,4 GHz akan membantu.

Bagaimana cara menginstal MicroPython di Pico W?

Unduh file .uf2 untuk board RPI_PICO_W dari micropython.org. Tahan tombol BOOTSEL sambil mencolokkan Pico W ke komputermu, lalu seret file itu ke drive RPI-RP2 yang muncul. Board akan menyala ulang dan siap dipakai dengan Thonny; jendela “Install or update MicroPython” di Thonny juga melakukan hal yang sama.

Bagaimana cara mengetahui alamat IP Pico W?

Setelah terhubung, wlan.ifconfig()[0] memberimu alamat IP-nya, dan file wifi.py di artikel ini mencetaknya ke Shell. Kalau board tidak terhubung ke komputer, cek daftar perangkat terhubung di pengaturan router-mu, atau coba http://picow.local di perangkat yang mendukung mDNS.

Kenapa LED onboard Pico W tidak menyala dengan Pin(25)?

Di Pico W, LED onboard tersambung ke chip nirkabel, bukan ke prosesor, dan GP25 dipakai sebagai jalur select chip itu. Pakai Pin("LED", Pin.OUT) di MicroPython atau LED_BUILTIN di Arduino IDE, dan LED akan menyala dengan benar. Bentuk ini juga jalan di Pico biasa, jadi kamu bisa selalu memakainya.

Bisakah web server Pico W diakses dari internet?

Secara teknis bisa, dengan port forwarding di router-mu, tetapi tidak disarankan karena server MicroPython sederhana tidak punya enkripsi maupun autentikasi. Untuk kendali jarak jauh, perantara seperti MQTT, bot Telegram, atau layanan IoT cloud jauh lebih aman.

Pico W atau ESP32: mana yang lebih baik untuk proyek Wi-Fi?

Keduanya menawarkan Wi-Fi 2,4 GHz dan Bluetooth. Kalau kamu ingin bekerja dengan MicroPython, dokumentasi yang rapi, dan pin tanpa kejutan, pilih Pico W; kalau kamu ingin kecepatan lebih, banyak input analog, dan dukungan library Arduino yang luas, ESP32 lebih cocok. Untuk proyek web server, sensor, dan API yang sederhana, keduanya sama-sama bisa diandalkan.

Lihat semua proyek
Kedip LED Bawaan Raspberry Pi Pico (Pico dan Pico W)
#147Pemula

Kedip LED Bawaan Raspberry Pi Pico (Pico dan Pico W)

Proyek pembuka seri Raspberry Pi Pico! Kita mengedipkan LED hijau bawaan untuk memastikan board bekerja; percobaan "Hello World" klasik. TANPA komponen eksternal, hanya Pico dan kabel USB. Kodenya ditulis dalam MicroPython (bahasa resmi dari Raspberry Pi Foundation). Pelajari kelas machine.Pin, mode Pin.OUT, metode led.on()/off(), dan time.sleep() di Thonny IDE, dan ikuti setiap perubahan di output Serial (REPL). Juga pas untuk menguji firmware MicroPython.

5.0(1)
10
Raspberry Pi Pico: Mengendalikan LED Eksternal (Breadboard)
#148Pemula

Raspberry Pi Pico: Mengendalikan LED Eksternal (Breadboard)

Langkah berikutnya setelah LED bawaan Pico: menyambungkan LED eksternal ke breadboard dan mengendalikannya lewat pin GP14. Di proyek ini, kamu belajar memakai pin GPIO serbaguna Pico mana pun sebagai output, polaritas LED (kaki panjang = anoda/+, kaki pendek = katoda/–), dan kenapa resistor pembatas arus (220Ω) diperlukan. Tanpa resistor, arus berlebih mengalir melalui LED dan LED bisa terbakar. Rangkaiannya sangat sederhana: Pico GP14 → resistor 220Ω → LED → GND.

4.5(2)
7
Simulator Lampu Lalu Lintas Raspberry Pi Pico (3 LED Berurutan)
#150Pemula

Simulator Lampu Lalu Lintas Raspberry Pi Pico (3 LED Berurutan)

Kita menyimulasikan lampu lalu lintas sungguhan dengan LED merah, kuning, dan hijau; proyek 3 LED pertama di seri Pico! Hijau 4 detik "jalan", kuning 1,5 detik "siap", merah 3 detik "berhenti", dan merah+kuning 1 detik "bersiap" (pola Eropa). Pelajari pendefinisian fungsi (def all_off()), logika state machine, dan sinkronisasi beberapa GPIO. 3 LED di GP11 (Hijau), GP12 (Kuning), GP13 (Merah), masing-masing dengan resistor 220Ω, berdampingan di board.

4.0(1)
12
LED Fade PWM Raspberry Pi Pico (Efek Bernapas)
#160Pemula

LED Fade PWM Raspberry Pi Pico (Efek Bernapas)

LED tidak lagi sekadar berkedip, ia bernapas! Dengan PWM (Pulse Width Modulation) Pico, kecerahan LED naik lalu turun perlahan, seperti lampu MacBook yang tidur. Pelajari kelas machine.PWM, duty_u16() (kecerahan 16-bit 0–65535), frekuensi PWM (freq(1000): 1000 siklus per detik, tanpa kedipan terlihat), loop range() bertahap, dan output mirip analog dari pin digital. PWM juga dipakai untuk warna RGB, motor, servo, dan buzzer.

0.0(0)
4
Web Server Asinkron ESP32 (dengan Tampilan IP di LCD)
#129Mahir

Web Server Asinkron ESP32 (dengan Tampilan IP di LCD)

Di proyek ini, kita mengubah ESP32 menjadi web server asinkron yang bisa kamu kendalikan dari ponsel atau komputer di jaringan Wi-Fi yang sama. Berkat library ESPAsyncWebServer, server bisa memproses beberapa permintaan bersamaan (berbeda dengan WebServer.h klasik, yang memblokir pada satu permintaan). Kamu bisa membuka alamat IP ESP32 di browser dan mengklik tombol ON/OFF (rute /on dan /off) untuk menyalakan dan mematikan LED yang tersambung ke GPIO 5.

4.8(16)
26
Koneksi Wi-Fi STA ESP32 (dengan Layar LCD)
#127Mahir

Koneksi Wi-Fi STA ESP32 (dengan Layar LCD)

Di proyek ini, kita menyambungkan ESP32 ke jaringan Wi-Fi rumah dalam mode Station (STA) dengan cara yang aman dan tahan gangguan. Kita menyimpan SSID dan kata sandi di file secrets.h terpisah agar tidak bocor ke Git, menyiapkan mekanisme sambung ulang otomatis, dan menampilkan tingkat sinyal RSSI dan alamat IP di layar LCD I2C. LED bawaan bekerja sebagai indikator status. Ini adalah pengelola koneksi kelas produksi.

4.4(21)
34
Jam Real-Time dari Internet lewat NTP ESP32
#128Mahir
Premium

Jam Real-Time dari Internet lewat NTP ESP32

ESP32 tersambung ke Wi-Fi dan mengambil waktu nyata dengan presisi milidetik dari server NTP (Network Time Protocol). Berkat fungsi configTzTime(), zona waktu Turki (TRT, UTC+3) otomatis diterapkan, dan pergantian DST di negara yang memakai waktu musim panas otomatis diatur dengan string POSIX TZ. Waktunya ditampilkan di Serial Monitor sekaligus di LCD I2C opsional. configTzTime() memulai layanan SNTP; sinkronisasi ulang berkala terjadi selama koneksi tersedia.

4.5(13)
21
HTTPClient + API Cuaca ESP32 (dengan Layar LCD)
#133Mahir
Premium

HTTPClient + API Cuaca ESP32 (dengan Layar LCD)

Di proyek ini, kita memakai ESP32 untuk melakukan panggilan REST API ke API cuaca (wttr.in) lewat internet dengan HTTPClient.h. Kita mengurai respons JSON yang diterima dengan ArduinoJson v7 dan menampilkan kota, suhu, kelembapan, cuaca, dan informasi angin di layar LCD I2C dalam bahasa Turki dan Inggris. wttr.in gratis dan tidak butuh kunci API; kamu cukup memasukkan nama kota apa pun untuk mengambil kondisi cuaca terkini kota itu. Data diperbarui otomatis setiap 30 menit.

4.7(13)
20