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

Senin, 15 Desember 2025

Tutorial MicroPython ESP32/ESP8266 - Membaca Sensor Cahaya Ambient BH1750

BH1750 adalah sensor cahaya ambient beresolusi 16-bit yang digunakan untuk mengukur tingkat intensitas cahaya lingkungan. Pada tutorial ini, Anda akan mempelajari cara menggunakan sensor cahaya BH1750 dengan board ESP32 dan ESP8266 yang diprogram menggunakan firmware MicroPython. Pembahasan meliputi cara menghubungkan sensor ke board ESP, menginstal library yang diperlukan, serta membaca dan memperoleh data intensitas cahaya dalam satuan Lux (satuan standar untuk pengukuran iluminansi).

Pengenalan Sensor Cahaya Ambient BH1750

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

 

Sensor ini tersedia dalam berbagai bentuk modul (breakout board). Perhatikan gambar di bawah ini, di mana kedua gambar tersebut sama-sama menunjukkan sensor BH1750.

 


Fitur Sensor BH1750

Berikut adalah daftar fitur yang dimiliki oleh sensor BH1750. Untuk informasi lebih lengkap, silakan merujuk ke datasheet resmi sensor BH1750.

- Menggunakan antarmuka komunikasi I2C

- Respons spektral mendekati karakteristik penglihatan mata manusia

- Dilengkapi konverter iluminansi ke data digital

- Rentang pengukuran: 1 – 65.535 lux

- Konsumsi arus rendah dengan fitur mode power-down

- Dilengkapi fungsi penolakan noise cahaya pada frekuensi 50 Hz dan 60 Hz

- Mendukung pemilihan dua alamat slave I2C yang berbeda

- Memiliki variasi hasil pengukuran yang relatif kecil (±20%)

- Pengaruh radiasi inframerah sangat minimal

- Mendukung mode pengukuran kontinu (continuous measurement mode)

- Mendukung mode pengukuran sekali (one-time measurement mode)

Mode Pengukuran

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



Pada mode pengukuran kontinu, sensor akan melakukan pengukuran intensitas cahaya lingkungan secara terus-menerus. Sementara itu, pada mode pengukuran sekali, sensor hanya melakukan satu kali pengukuran intensitas cahaya, kemudian secara otomatis masuk ke mode power-down untuk menghemat konsumsi daya.

Aplikasi


Sensor BH1750 adalah sensor cahaya ambient sehingga dapat digunakan pada berbagai jenis proyek. Beberapa contoh penerapannya antara lain:

- Mendeteksi kondisi siang atau malam

- Menyesuaikan atau mengaktifkan/menonaktifkan tingkat kecerahan LED berdasarkan intensitas cahaya lingkungan

- Mengatur kecerahan layar LCD atau display secara otomatis

- Mendeteksi apakah sebuah LED dalam kondisi menyala

- Dan berbagai aplikasi lainnya

Konfigurasi Pin (Pinout) BH1750



Berikut adalah konfigurasi pin (pinout) dari sensor BH1750:

 


Pin ADD digunakan untuk mengatur alamat I2C sensor. Jika tegangan pada pin ini kurang dari 0,7 × VCC (pin dibiarkan mengambang atau dihubungkan ke GND), alamat I2C sensor adalah 0x23. Sedangkan jika tegangan lebih besar dari 0,7 × VCC (pin dihubungkan ke VCC), alamat sensor menjadi 0x5C. Ringkasnya:

- Pin ADD mengambang atau terhubung ke GND → alamat I2C: 0x23

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

Menghubungkan BH1750 ke ESP32 atau ESP8266

Sensor cahaya ambient BH1750 menggunakan antarmuka I2C. Anda dapat menghubungkan sensor BH1750 ke ESP32 atau ESP8266 menggunakan pin I2C bawaan pada board:

Dengan membiarkan pin ADD tidak terhubung, kita memilih alamat I2C 0x23. Jika ingin menggunakan alamat 0x5C, hubungkan pin ADD ke 3,3V.

Anda juga dapat menggunakan diagram skematik berikut sebagai referensi:

Skematik – ESP32 dengan Sensor BH1750


Skematik – ESP8266 NodeMCU dengan Sensor BH1750


Library MicroPython untuk BH1750

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

Buka tautan berikut dan salin kode library ke Thonny IDE:

- Kode library bh1750.py

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

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

 

# 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. Pilih menu File > Save As…



3. Pilih opsi penyimpanan “MicroPython device”:



4. Beri nama file bh1750.py, kemudian klik tombol OK:

 


Selesai. Library telah berhasil diunggah ke board Anda. Untuk memastikan proses unggah berjalan dengan benar, buka menu File > Save As…, lalu pilih MicroPython device. File bh1750.py seharusnya sudah muncul dalam daftar tersebut.



Setelah library berhasil diunggah ke board, Anda dapat menggunakan seluruh fungsinya di dalam program dengan melakukan proses import library.

ESP32/ESP8266 – Pembacaan Intensitas Cahaya (Lux) Menggunakan BH1750

Setelah library terpasang, buat file baru dan salin kode berikut. Program ini berfungsi untuk membaca nilai intensitas cahaya dalam satuan lux dan menampilkan hasil pembacaan ke 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 Program

Kita perlu mengimpor kelas Pin dan SoftI2C dari modul machine.

 

from machine import Pin, SoftI2C

from bh1750 import BH1750

import time

 

Pada kasus ini, library menggunakan SoftI2C dan bukan I2C. Dalam MicroPython, SoftI2C merujuk pada komunikasi I2C berbasis perangkat lunak, sedangkan I2C merujuk pada komunikasi I2C berbasis perangkat keras.

 

I2C berbasis perangkat keras memanfaatkan modul hardware khusus yang telah dioptimalkan untuk komunikasi I2C. Sementara itu, SoftI2C menggunakan pin GPIO yang dikonfigurasi melalui perangkat lunak untuk meniru fungsi komunikasi I2C.

 

Komunikasi I2C diinisialisasi pada pin GPIO 21 dan GPIO 22 untuk ESP32, atau GPIO 4 dan GPIO 5 untuk ESP8266. Pastikan Anda membuka komentar (uncomment) pada konfigurasi pin yang sesuai dengan board yang digunakan.


# 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 sebuah instance BH1750 dengan nama light_sensor pada bus I2C yang telah didefinisikan sebelumnya. Pada contoh ini digunakan alamat I2C 0x23. Jika sensor Anda menggunakan alamat yang berbeda, silakan sesuaikan nilai alamat tersebut pada baris kode berikut.

 

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

 

Untuk memperoleh nilai intensitas cahaya, cukup gunakan metode luminance() pada objek BH1750 dengan memberikan mode pengukuran sebagai parameter.

 

lux = light_sensor.luminance(BH1750.CONT_HIRES_1)

 

Library ini menyediakan beberapa pilihan mode pengukuran yang dapat digunakan. Silakan lihat tabel di bawah ini.


 

Terakhir, hasil pembacaan ditampilkan pada Shell:

 

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

Pengujian Program

Jalankan kode sebelumnya pada board ESP32 atau ESP8266 Anda.



Anda akan mendapatkan nilai intensitas cahaya dalam satuan lux yang diperbarui setiap dua detik.



Tutup sensor atau arahkan sumber cahaya ke sensor untuk melihat perubahan nilai hasil pengukuran.




 

 

 

 

 

 

  

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: "Tutorial MicroPython ESP32/ESP8266 - Membaca Sensor Cahaya Ambient BH1750 "