CircuitPython 10行プログラミング STEP7 (3) BMP280と7セグメントLEDの表示
XIAO RP2040マイコン・ボードとCircuitPythonを使って、I2CバスにつながるセンサBMP280を利用します。測定結果は7セグメントLEDに表示します。
●8桁7セグメントLED
使用する7セグメントLEDのコントローラはmax7219です。CircuitePythonのライブラリがあります。ダウンロードしたadafruit-circuitpython-bundle-7.x-mpy-20220119のlibフォルダの中にあるadafruit_max7219フォルダごとXIAO RP2040マイコン・ボードのlibフォルダにコピーします。
なお、実行時には下記のファイルも必要なので、libにコピーしておきます。
- adafruit_bus_deviceフォルダ
- adafruit_framebuf.mpyファイル
max7219は、ドット・マトリクスと、7セグメントLEDの両方に対応しています。
●接続
XIAO RP2040マイコン・ボード | 7セグメントLED(max7219) |
---|---|
GND | GND |
D10 MOSI | Din |
D8 SCK | CLK |
3.3V | Vcc |
D7 CS/RX | CS |
●表示プログラム
from adafruit_max7219 import bcddigits
from board import SCK, MOSI, D7
import busio
import digitalio
cs = digitalio.DigitalInOut(D7)
spi = busio.SPI(SCK, MOSI=MOSI)
display = bcddigits.BCDDigits(spi, cs, nDigits=8)
display.brightness(1)
display.clear_all()
display.show_str(0, "1012")
display.show_str(4, " 25.2")
display.show()
●気圧センサBMP280のおもなスペック
- 電源電圧;1.71~3.6V
- 温度測定範囲;-40~+85℃、分解能0.01℃
- 気圧測定範囲;300~1100hPa、確度±1hPa、分解能0.12hPa
- インターフェース;SPI(データ転送速度最大10MHz)、I2C(データ転送速度最大3.4MHz)
- I2Cアドレス;0x76、0x77どちらかを選択
●BMP280のライブラリをコピー
PCに保存したlibフォルダに入っているadafruit_bmp280.mpyをCIRCUITPYドライブのlibへコピーします。メモリに余裕があるので、前回使ったライブラリは消さずに残しています。
●気圧センサBMP280の接続
I2Cバスで接続します。I2Cバスをscanするプログラムを動かすと、0x77に見つけてきました。
XIAO RP2040マイコン・ボード | BMP280ボード |
---|---|
GND | GND |
3.3V | Vcc |
D5 SCL | SCL |
D4 SDA | SDA |
●BMP280の読み出しプログラム
examplesに入っていたBMP280のデータ読み出しプログラムです。
# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
# SPDX-License-Identifier: MIT
"""Simpletest Example that shows how to get temperature,
pressure, and altitude readings from a BMP280"""
import time
import board
# import digitalio # For use with SPI
import adafruit_bmp280
# Create sensor object, communicating over the board's default I2C bus
i2c = board.I2C() # uses board.SCL and board.SDA
bmp280 = adafruit_bmp280.Adafruit_BMP280_I2C(i2c)
# OR Create sensor object, communicating over the board's default SPI bus
# spi = board.SPI()
# bmp_cs = digitalio.DigitalInOut(board.D10)
# bmp280 = adafruit_bmp280.Adafruit_BMP280_SPI(spi, bmp_cs)
# change this to match the location's pressure (hPa) at sea level
bmp280.sea_level_pressure = 1013.25
while True:
print("\nTemperature: %0.1f C" % bmp280.temperature)
print("Pressure: %0.1f hPa" % bmp280.pressure)
print("Altitude = %0.2f meters" % bmp280.altitude)
time.sleep(2)
必要な部分を抜き出し、最初のLEDの表示プログラムと合体します。
●BMP280の気圧と温度を7セグメントLEDに表示
# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
# SPDX-License-Identifier: MITfrom adafruit_max7219 import bcddigits
from adafruit_max7219 import bcddigits
from board import SCK, MOSI, D7,SCL,SDA
import busio
import digitalio
import time
import adafruit_bmp280
cs = digitalio.DigitalInOut(D7)
spi = busio.SPI(SCK, MOSI=MOSI)
display = bcddigits.BCDDigits(spi, cs, nDigits=8)
i2c = busio.I2C(SCL,SDA) # uses board.SCL and board.SDA
bmp280 = adafruit_bmp280.Adafruit_BMP280_I2C(i2c)
display.brightness(1)
display.clear_all()
while 1:
display.show_str(0, str(int(bmp280.pressure)))
display.show_str(5, str(bmp280.temperature))
display.show()
time.sleep(2)
連載 CircuitPython 10行プログラミング Step8 release8.0.0 Alpha1
(4) I2Cで温度センサTMP117
(5) アナログ入力 ジョイスティック
連載 CircuitPython 10行プログラミング Step7 release7.2.0-alpha.1
(2) 気圧センサLPS22HB
連載 CircuitPython 10行プログラミング Step6 release7.0.0
(1) Nano RP2040 Connectの準備と動作確認
(2) Nano RP2040 Connectの搭載センサIMU LSM6DSOX
(3) Nano RP2040 ConnectにI2CでIMUセンサLSM9DS1
(5) Nano RP2040 Connectで確度0.1℃の温度計TMP117+ht16k33
連載 CircuitPython 10行プログラミング Step5
(1) Raspberry Pi Picoの準備と動作確認 (2) digitalio (3) Raspberry Pi Picoのmicrocontroller (4) アナログ入力 (5) PWM出力 (6) I2S出力 (7) I2C ① OLEDディスプレイ (8) I2C ② 温湿度センサ (9) I2C ③ 気圧センサ (10) Raspberry Pi PicoのSPI ① TFTディスプレイ
連載 CircuitPython 10行プログラミング Step4
(1) Adafruit Feather nRF52840 Senseの準備 (2) Lチカ (3) 搭載センサ (4) BLE①ペリフェラル (5) BLE②セントラル
連載 CircuitPython 10行プログラミング Step3
(1) Metro M4 Express AirLift (WiFi)の準備 (2) ロータリ・エンコーダ (3) eInk/ePaper (4) Wi-Fi その1 接続 (5) Wi-Fi その2 ソケット (6) Wi-Fi その3 電圧測定 (7) 気圧センサLPS25HB (8) サーミスタ
連載 CircuitPython 10行プログラミング Step2
(1) Grand Central M4 Expressの準備 (2) グラフィック・ディスプレイOLED (3) RTC DS3231 (4) モジュール/SDメモリ (5) 複合センサ BME680 (6) ロードセル+ADS1220 (7) サーボ・モータ① (8) サーボ・モータ② (9) I2S UDA1334A (10) D-Aコンバータ
連載 CircuitPython 10行プログラミング
(1) Trinket M0の準備 (2) ディジタルI/O (3) アナログ入出力 (4) I2C 温湿度センサSi7021 (5) SPI 熱電対+MAX31855 (6) UART 距離センサTFMini (7) 1-Wire 温度DS18B20 (8) ロータリ・エンコーダ (9) 7セグメントLED (10) FANコントロール (11) UART GPS (12) I2C Lチカ MCP23017