Blog Archive

Arduino Indonesia. Gambar tema oleh Storman. Diberdayakan oleh Blogger.

Supported by Electronics 3 in 1

1. Jasa pencetakan PCB single layer dengan harga paling murah.

(Metode Pembuatan dengan Transfer Toner)
>PCB design sendiri (siap cetak) : Rp.150,-/Cm2
>PCB design dari kami : Rp.250,-/Cm2

(Metode Sablon Full Masking dan Silk Screen minimal pemesanan 100 Pcs)
>PCB design sendiri (siap cetak) : Rp.200,-/Cm2
>PCB design dari kami : Rp.250,-/Cm2

2. Jasa perancangan, perakitan, dan pembuatan trainer pembelajaran elektronika untuk SMK dan Mahasiswa.

3. Jasa perancangan, perakitan, dan pembuatan berbagai macam kontroller, sensor, aktuator, dan tranduser.
>Design Rangkaian / Sistem Elektronika
>Design Rangkaian / Sistem Instrumentasi
>Design Rangkaian / Sistem Kendali
>Kerjasama Riset (data atau peralatan)
>Kerjasama Produksi Produk-Produk KIT Elektronika
>Produksi Instrumentasi Elektronika

4. Jasa Pembuatan Proyek, Tugas Akhir, Tugas Laboratorium, PKM, Karya Ilmiah, SKRIPSI, dll

Like My Facebook

Popular Posts

Selasa, 16 Desember 2025

MicroPython - Sensor Cahaya Lingkungan BH1750 dengan ESP32/ESP8266

BH1750 adalah sensor cahaya lingkungan (ambient light sensor) beresolusi 16-bit. Pada artikel ini, Anda akan mempelajari cara menggunakan sensor cahaya BH1750 dengan papan ESP32 dan ESP8266 yang diprogram menggunakan firmware MicroPython. Pembahasan mencakup cara menghubungkan sensor ke papan ESP, menginstal library yang diperlukan, serta membaca dan memperoleh data intensitas cahaya lingkungan dalam satuan Lux (satuan standar untuk tingkat iluminasi).

Pengenalan Sensor Cahaya Lingkungan BH1750

BH1750 adalah sensor cahaya lingkungan (ambient light sensor) beresolusi 16-bit yang berkomunikasi menggunakan protokol I2C. Sensor ini menghasilkan data pengukuran intensitas cahaya dalam satuan lux (satuan turunan SI untuk iluminasi). BH1750 mampu mengukur tingkat cahaya mulai dari 1 lux hingga maksimum 65.535 lux.

 

Sensor ini tersedia dalam berbagai bentuk modul atau breakout board. Beberapa contoh tampilan modul BH1750 dapat dilihat pada gambar di bawah ini. Meskipun bentuk fisiknya berbeda, kedua gambar tersebut merepresentasikan sensor BH1750 yang sama.



Fitur Sensor BH1750

Berikut adalah daftar fitur utama dari sensor BH1750. Untuk informasi yang lebih lengkap dan detail teknis, silakan merujuk ke datasheet resmi sensor BH1750.

- Menggunakan antarmuka komunikasi I2C

- Respons spektral mendekati karakteristik penglihatan mata manusia

- Dilengkapi konverter iluminasi ke data digital

- Rentang pengukuran intensitas cahaya: 1 – 65.535 lux

- Konsumsi arus rendah berkat mode power-down

- Dilengkapi fungsi penolakan noise cahaya 50 Hz / 60 Hz

- Mendukung pemilihan dua alamat slave I2C yang berbeda

- Variasi hasil pengukuran relatif kecil (±20%)

- Pengaruh cahaya inframerah sangat minim

- Mendukung mode pengukuran kontinu

- Mendukung mode pengukuran sekali (one-time measurement)

Mode Pengukuran

Sensor ini mendukung dua jenis mode pengukuran, yaitu mode pengukuran kontinu dan mode pengukuran sekali (one-time measurement). Setiap mode pengukuran tersebut menyediakan tiga pilihan resolusi pengukuran yang berbeda.



Pada mode pengukuran kontinu, sensor akan melakukan pengukuran intensitas cahaya lingkungan secara terus-menerus. Sementara itu, pada mode pengukuran sekali (one-time measurement), sensor hanya melakukan satu kali pengukuran intensitas cahaya, kemudian secara otomatis masuk ke mode hemat daya (power-down).

Aplikasi


Sensor BH1750 merupakan sensor cahaya lingkungan sehingga dapat diaplikasikan pada berbagai jenis proyek. Beberapa contoh penerapannya antara lain:

- Mendeteksi kondisi siang atau malam

- Mengatur atau menyalakan/mematikan tingkat kecerahan LED berdasarkan intensitas cahaya lingkungan

- Menyesuaikan kecerahan LCD atau layar secara otomatis

- Mendeteksi apakah sebuah LED sedang menyala

- Dan berbagai aplikasi berbasis pengukuran cahaya lainnya

Konfigurasi Pin (Pinout) BH1750



Berikut adalah konfigurasi pin (pinout) dari sensor BH1750:


Pin ADD digunakan untuk menentukan alamat I2C pada sensor. Jika tegangan pada pin tersebut lebih kecil dari 0,7 × VCC (pin dibiarkan tidak terhubung/floating atau dihubungkan ke GND), maka alamat I2C yang digunakan adalah 0x23. Sebaliknya, jika tegangan pada pin ADD lebih besar dari 0,7 × VCC (pin dihubungkan ke VCC), maka alamat I2C sensor akan menjadi 0x5C.

Ringkasannya sebagai berikut:

- Pin ADD dibiarkan floating atau dihubungkan ke GND → alamat I2C: 0x23

- Pin ADD dihubungkan ke VCC → alamat I2C: 0x5C

Pengkabelan BH1750 ke ESP32 atau ESP8266

Sensor cahaya lingkungan BH1750 mendukung antarmuka komunikasi I2C. Sensor ini dapat dihubungkan ke papan ESP32 atau ESP8266 menggunakan pin I2C bawaan (default) pada masing-masing papan.


Dengan tidak menghubungkan pin ADD, sensor akan menggunakan alamat I2C 0x23. Jika pin ADD dihubungkan ke 3,3 V, maka alamat I2C yang digunakan akan berubah menjadi 0x5C.

Anda juga dapat menggunakan diagram skematik berikut sebagai referensi pengkabelan.

Skematik – ESP32 dengan BH1750


Skematik – ESP8266 NodeMCU dengan BH1750

Library MicroPython untuk BH1750

Untuk membaca data dari sensor BH1750, kita akan menggunakan library eksternal karena library ini tidak termasuk dalam library standar MicroPython secara default.

Buka tautan berikut dan salin kode library ke Thonny IDE:

- Kode library bh1750.py

Ikuti langkah-langkah berikut untuk mengunggah library ke papan ESP32 atau ESP8266:

1. Salin kode library ke file baru. Kode library bh1750.py dapat ditemukan pada tautan di atas.

 

# forked from: https://github.com/PinkInk/upylib/tree/master/bh1750

"""

Micropython BH1750 ambient light sensor driver.

"""


from utime import sleep_ms



class BH1750():

    """Micropython BH1750 ambient light sensor driver."""


    PWR_OFF = 0x00

    PWR_ON = 0x01

    RESET = 0x07


    # modes

    CONT_LOWRES = 0x13

    CONT_HIRES_1 = 0x10

    CONT_HIRES_2 = 0x11

    ONCE_HIRES_1 = 0x20

    ONCE_HIRES_2 = 0x21

    ONCE_LOWRES = 0x23


    # default addr=0x23 if addr pin floating or pulled to ground

    # addr=0x5c if addr pin pulled high

    def __init__(self, bus, addr=0x23):

        self.bus = bus

        self.addr = addr

        self.off()

        self.reset()


    def off(self):

        """Turn sensor off."""

        self.set_mode(self.PWR_OFF)


    def on(self):

        """Turn sensor on."""

        self.set_mode(self.PWR_ON)


    def reset(self):

        """Reset sensor, turn on first if required."""

        self.on()

        self.set_mode(self.RESET)


    def set_mode(self, mode):

        """Set sensor mode."""

        self.mode = mode

        self.bus.writeto(self.addr, bytes([self.mode]))


    def luminance(self, mode):

        """Sample luminance (in lux), using specified sensor mode."""

        # continuous modes

        if mode & 0x10 and mode != self.mode:

            self.set_mode(mode)

        # one shot modes

        if mode & 0x20:

            self.set_mode(mode)

        # earlier measurements return previous reading

        sleep_ms(24 if mode in (0x13, 0x23) else 180)

        data = self.bus.readfrom(self.addr, 2)

        factor = 2.0 if mode in (0x11, 0x21) else 1.0

        return (data[0]<<8 | data[1]) / (1.2 * factor)

 


2. Buka menu File > Save as…



3. Pilih opsi Save to “MicroPython device

 


4. Beri nama file bh1750.py dan tekan tombol OK



Selesai! Library kini telah berhasil diunggah ke papan Anda. Untuk memastikan library telah terunggah dengan benar, buka kembali File > Save as… dan pilih MicroPython device. File Anda seharusnya tercantum di sana.

 


Setelah library berhasil diunggah, Anda dapat menggunakan semua fungsi yang tersedia dengan mengimpor library ini ke dalam kode program Anda.

ESP32/ESP8266 – BH1750 Pengukuran Luminansi (Lux) – Kode

Setelah library berhasil diunggah, buat file baru dan tempelkan kode berikut. Kode ini akan membaca luminansi dalam satuan lux dan menampilkan hasil pembacaan di Shell setiap dua detik.

 

from machine import Pin, SoftI2C

from bh1750 import BH1750

import time


# Initialize I2C communication (ESP32)

i2c = SoftI2C(scl=Pin(22), sda=Pin(21), freq=400000)



# Initialize I2C communication (ESP8266)

#i2c = SoftI2C(scl=Pin(5), sda=Pin(4), freq=400000)


# Create BH1750 object

light_sensor = BH1750(bus=i2c, addr=0x23)


try:

    # Read lux every 2 seconds

    while True:

        lux = light_sensor.luminance(BH1750.CONT_HIRES_1)

        print("Luminance: {:.2f} lux".format(lux))

        time.sleep(2)


except Exception as e:

    # Handle any exceptions during sensor reading

    print("An error occurred:", e)

 

Cara Kerja Kode

Kita perlu mengimpor kelas Pin dan SoftI2C dari modul machine.

 

from machine import Pin, SoftI2C

from bh1750 import BH1750

import time

 

Dalam kasus ini, library menggunakan SoftI2C, bukan I2C biasa. Di MicroPython, SoftI2C merujuk pada I2C berbasis perangkat lunak, sedangkan I2C merujuk pada I2C berbasis perangkat keras.

 

I2C berbasis perangkat keras memanfaatkan modul khusus yang dioptimalkan untuk komunikasi I2C. Sebaliknya, I2C berbasis perangkat lunak menggunakan pin GPIO yang dikendalikan oleh perangkat lunak untuk meniru komunikasi I2C.

 

Kita melakukan inisialisasi komunikasi I2C pada pin GPIO 21 dan 22 untuk ESP32, atau GPIO 4 dan 5 untuk ESP8266. Pastikan untuk menghapus komentar pada baris pin sesuai papan yang Anda gunakan.

 

# Initialize I2C communication (ESP32)

#i2c = SoftI2C(scl=Pin(22), sda=Pin(21), freq=400000)


# Initialize I2C communication (ESP8266)

i2c = SoftI2C(scl=Pin(5), sda=Pin(4), freq=400000)

 

Selanjutnya, buat instance BH1750 dengan nama light_sensor pada bus I2C yang telah didefinisikan sebelumnya. Pada contoh ini, kita menggunakan alamat I2C 0x23. Jika alamat I2C Anda berbeda, ubah sesuai pada baris kode berikut.

 

light_sensor = BH1750(bus=i2c, addr=0x23)

 

Untuk mendapatkan nilai luminansi, kita hanya perlu menggunakan metode luminance() pada objek BH1750 dan mengirimkan mode pengukuran sebagai argumennya.

 

lux = light_sensor.luminance(BH1750.CONT_HIRES_1)

 

Library ini menyediakan daftar mode pengukuran yang dapat digunakan. Lihat tabel di bawah ini untuk referensi.



Terakhir, kita menampilkan hasil pembacaan di Shell:

 

print("Luminance: {:.2f} lux".format(lux))

 

Menguji Kode

Jalankan kode sebelumnya pada papan ESP32 atau ESP8266 Anda.



Anda akan mendapatkan nilai luminansi baru dalam satuan lux setiap dua detik.



Tutup sensor atau arahkan cahaya ke sensor untuk melihat nilai pembacaan berubah.




 

 

 

 

 

 

 

 

 

 


Siap Untuk Membuat Proyek Impianmu Menjadi Kenyataan?

Klik di sini untuk chat langsung via WhatsApp dan dapatkan dukungan langsung dari tim ahli kami! 

 

0 on: "MicroPython - Sensor Cahaya Lingkungan BH1750 dengan ESP32/ESP8266"