質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Raspbian

Raspbianは、DebianベースのRaspberry Pi用ディストリビューション。ハードウェア浮動小数点演算を有効にすることが可能で、Webブラウズなどの速度を向上できます。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

919閲覧

Raspberry Pi 4 でセンサーの値をLEDへ連続表示させたい

atupom

総合スコア6

Raspbian

Raspbianは、DebianベースのRaspberry Pi用ディストリビューション。ハードウェア浮動小数点演算を有効にすることが可能で、Webブラウズなどの速度を向上できます。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/11/27 02:11

前提・実現したいこと

ラズベリーパイ初心者です。初めて投稿させて頂きます。
ラズパイマガジン2019年6月号の付録ボードとアマゾンで購入した付録専用キットを組み立て、Raspberry Pi 4のGPIOピンへ直接接続し、マガジンサイトから得たコード(oled_weather.py)を用いて、
温湿度気圧センサー(BME280)の値をOLEDグラフィックディスプレイ(SSD1306、128*64、0.96inch)に1秒おきに取得、表示させたい。

発生している問題・エラーメッセージ

プログラム実行中に、5回目あたりから表示が消えたり、 少しずつ表示開始位置が右へずれて反転した後、消えます。 表示フォントサイズを14から13にすると開始位置のずれは起きませんが、 やはり5回前後で表示が消え真っ黒になります。 エラーメッセージは出ません。

該当のソースコード(oled_weather.py)

Python

1 2import Adafruit_GPIO.SPI as SPI 3import Adafruit_SSD1306 4import pigpio 5import time 6import bme280 7 8from PIL import Image 9from PIL import ImageDraw 10from PIL import ImageFont 11 12BME280_ADDR = 0x76 13I2C_CH = 1 14 15RST = 23 16DC = 4 17SPI_CH = 0 18SPI_CS = 1 19 20font_path = "/usr/share/fonts/truetype/fonts-japanese-gothic.ttf" 21font_size = 14 22 23pi = pigpio.pi() 24 25sensor = bme280.bme280( pi, I2C_CH, BME280_ADDR ) 26sensor.setup() 27 28disp = Adafruit_SSD1306.SSD1306_128_64( rst=RST, dc=DC, spi=SPI.SpiDev( SPI_CH, SPI_CS, max_speed_hz=8000000)) 29 30disp.begin() 31disp.clear() 32disp.display() 33 34width = disp.width 35height = disp.height 36image = Image.new( '1', ( width, height ) ) 37 38jpfont = ImageFont.truetype(font_path, font_size, encoding='unic') 39 40draw = ImageDraw.Draw( image ) 41 42while True: 43 draw.rectangle( ( 0, 0, width, height ), outline=0, fill=0) 44 45 ( temp, humi, press ) = sensor.get_value() 46 47 draw.text( ( 2, 0 ), "温度:" + str( round( temp, 2 ) ) + "度", font=jpfont, fill=255 ) 48 draw.text( ( 2, 20 ), "湿度:" + str( round( humi, 2 ) ) + "%", font=jpfont, fill=255 ) 49 draw.text( ( 2, 40 ), "気圧:" + str( round( press, 2 ) ) + "hPa", font=jpfont, fill=255 ) 50 51 disp.image(image) 52 disp.display() 53 54 time.sleep(1) 55

試したこと

Thonny python IDEにて、センサーの値を取得するだけのプログラムを実行すると、
外付けモニターのShell上において、
温度、湿度、気圧の値が正しく1秒おきに無限に取得できます。

補足情報(FW/ツールのバージョンなど)

環境は以下の通りです。

お手数おかけしますが、よろしくお願いいたします。

Python 3.7.3

pi@raspberrypi:~ $ lscpu
Architecture: armv7l
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 1
Core(s) per socket: 4
Socket(s): 1
Vendor ID: ARM
Model: 3
Model name: Cortex-A72
Stepping: r0p3
CPU max MHz: 1500.0000
CPU min MHz: 600.0000
BogoMIPS: 108.00
Flags: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32

pi@raspberrypi:~ $ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 10 (buster)
Release: 10
Codename: buster

pi@raspberrypi:~ $ ls
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
2019-11-13-181758_1920x1080_scrot.png
2019-11-13-181814_1920x1080_scrot.png
2019-11-13-181817_1920x1080_scrot.png
2019-11-13-181818_1920x1080_scrot.png
2019-11-13-181819_1920x1080_scrot.png
2019-11-13-181826_1920x1080_scrot.png
2019-11-13-181834_1920x1080_scrot.png
2019.6
3.py
4inch.py
Adafruit_Python_ILI9340
Adafruit_Python_ILI9341
Adafruit_Python_SSD1306
Desktop
Documents
Downloads
LCD1602.py
MagPi
Music
Pictures
Public
SwiftyGPIO.swift
Templates
Videos
pycache
accel.py
accel1.py
bcm2835-1.60
bcm2835-1.60.tar.gz
bluebacks
bme280.py
bmx055.py
bmx055HP.py
hello.swift
ili9340spi_rpi
image.png
inch.py
init_board.py
kazue.py
key.py
lcd_i2c.py
length.py
lis3dh.py
main.swift
motion.py
motor_foward.py
motor_pwm.py
motor_reverse.py
motor_stop.py
mu_code
oled_image.py
oled_text.py
oled_weather.py
over.py
raspi1-sample.zip
source.zip
sw_led.py
sw_read.py
swift-5.1.1-armv6-RPi01234-RaspbianBuster.tgz
taijuu.py
test.swift
usr
weather.py
ラズ.py

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

さいしょに:
RaspberryPi 3B を持っていながら Python は触ったことがない為、9年前に買ったまま放置しているポケットリファレンス Python(v2.6対応)Python ドキュメント(v3.7.5) を漁った中での回答となります。


コード内の while true: 部分が while ループで説明されるように条件式が true となっており、シェルで中断するまで永久ループしているのが現状です。

標準モジュールである datetimeモジュール も活用して、ループ内の処理を1秒後まで何もしないように切り分けてcontinue する。といった方法で 1秒おきの取得、表示 ができそうに思います。

冒頭の通り、具体的なコードを示すことはできませんが、参考になればと思います。

投稿2019/11/27 08:15

AkitoshiManabe

総合スコア5432

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

atupom

2019/12/03 00:00

AkitoshiManabe様 参考になりました。個人的にはグラフィックディスプレイとの相性に問題があるのかなと感じております。ご丁寧にどうもありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問