Table of Contents

BMP180 dual-purpose sensor

esp32-bmp180.jpg

This dual-purpose sensor is used to measure temperature and barometric pressure. It operates as an I2C slave device.

The actual sensor is tiny but a board is available from China with the I2C connections and power on a standard 0.1 inch header which makes it easily accessible.

Micropython

Setup

sudo apt-get install picocom
sudo pip3 install mpfshell

Detect

picocom -b 115200 /dev/ttyUSB0
from machine import Pin, I2C
i2c = I2C(scl=Pin(22), sda=Pin(21), freq=100000)
i2c.scan()
[119]

Install

wget https://raw.githubusercontent.com/micropython-IMU/micropython-bmp180/master/bmp180.py
mpfshell --nocolor -no ttyUSB0 -c put bmp180.py
Connected to esp32
mpfshell --nocolor -no ttyUSB0 -c ls
Connected to esp32

Remote files in '/':

       bmp180.py
       boot.py

Run

picocom -b 115200 /dev/ttyUSB0
from machine import Pin, I2C
i2c = I2C(scl=Pin(22), sda=Pin(21), freq=100000)
from bmp180 import BMP180
bmp180 = BMP180(i2c)
print (bmp180.temperature)
26.95987

Demo (test.py)

'''
No license.
'''

from machine import Pin, I2C
from bmp180 import BMP180

class Test():
    '''
    No comment
    '''

    def __init__(self):
        self.bus = I2C(scl=Pin(22), sda=Pin(21), freq=100000)
        self.bmp180 = BMP180(self.bus)

    def print_temp(self):
        print (self.bmp180.temperature)

Upload

mpfshell --nocolor -no ttyUSB0 -c put test.py

Run

picocom -b 115200 /dev/ttyUSB0
picocom v3.1

port is        : /dev/ttyUSB0
flowcontrol    : none
baudrate is    : 115200
parity is      : none
databits are   : 8
stopbits are   : 1
escape is      : C-a
local echo is  : no
noinit is      : no
noreset is     : no
hangup is      : no
nolock is      : no
send_cmd is    : sz -vv
receive_cmd is : rz -vv -E
imap is        :
omap is        :
emap is        : crcrlf,delbs,
logfile is     : none
initstring     : none
exit_after is  : not set
exit is        : no

Type [C-a] [C-h] to see available commands
Terminal ready
>>> import machine
>>> machine.reset()
ets Jun  8 2016 00:22:57

rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0018,len:4
load:0x3fff001c,len:5008
ho 0 tail 12 room 4
load:0x40078000,len:10600
ho 0 tail 12 room 4
load:0x40080400,len:5684
entry 0x400806bc
I (548) cpu_start: Pro cpu up.
I (548) cpu_start: Application information:
I (548) cpu_start: Compile time:     Aug 16 2020 00:54:20
I (551) cpu_start: ELF file SHA256:  0000000000000000...
I (557) cpu_start: ESP-IDF:          v3.3.2
I (562) cpu_start: Starting app cpu, entry point is 0x40082f30
I (552) cpu_start: App cpu up.
I (572) heap_init: Initializing. RAM available for dynamic allocation:
I (579) heap_init: At 3FFAFF10 len 000000F0 (0 KiB): DRAM
I (585) heap_init: At 3FFB6388 len 00001C78 (7 KiB): DRAM
I (591) heap_init: At 3FFB9A20 len 00004108 (16 KiB): DRAM
I (598) heap_init: At 3FFBDB5C len 00000004 (0 KiB): DRAM
I (604) heap_init: At 3FFCA9E8 len 00015618 (85 KiB): DRAM
I (610) heap_init: At 3FFE0440 len 00003AE0 (14 KiB): D/IRAM
I (616) heap_init: At 3FFE4350 len 0001BCB0 (111 KiB): D/IRAM
I (623) heap_init: At 4009DE28 len 000021D8 (8 KiB): IRAM
I (629) cpu_start: Pro cpu start user code
I (312) cpu_start: Starting scheduler on PRO CPU.
I (0) cpu_start: Starting scheduler on APP CPU.
MicroPython v1.12-665-g60f5b941e on 2020-08-16; ESP32 module with ESP32
Type "help()" for more information.
>>> from test import Test
>>> x = Test()
>>> x.print_temp()
27.09271

Resources

ESP32 quick reference

BMP180 Micropython