fc2ブログ

ラズベリーパイで遊ぶ その4 気温・湿度・気圧センサーを繋ぐ ④

ソースコードの概要
BME280センサーからBMP280.pyにより取得した気温、湿度、気圧データをBlynkアプリへ出力及び16文字2行のLCDに
出力するPythonコードです。スマホにBlynkアプリをインストールしてLCD表示器をI2C接続してることを前提とします。
また、以下のlibraryを同じフォルダーに収めるかパスを通します。

各ライブラリーのダウンロード
ここに利用させて頂いたBMP280.pyはbme280_sample.pyに少し手を加えたコードで「ArduinoやESP、Raspberryで遊ぼう」
さんの記事から引用しました。ページを開いた一番下側のBMP280モジュール (bmp280.py)をコピーさせて頂きました。感謝!
BMP280.pyのコピー先URL

GitHubからI2C_LCD_driver.pyを取得します。
I2C_LCD_driver.pyのダウンロード先URL

GitHubからBlynkLib.pyを取得します。
BlynkLib.pyのダウンロード先URL

Blynk_BME280.py
import BlynkLib
import time
from BMP280 import get_BMP280_data, setup_BMP280
import threading
import smbus
import I2C_LCD_driver
from datetime import datetime

BLYNK_AUTH = 'lo*********************Xz' # BlynkアプリからTOKEN記号を取得
blynk = BlynkLib.Blynk(BLYNK_AUTH)
setup_BMP280()
mylcd = I2C_LCD_driver.lcd()

@blynk.VIRTUAL_WRITE(0)
def sensorDataSend():
time = datetime.now().strftime('%Y.%m.%d %I:%M') # 年月日と時刻を取得
t, p, h = get_BMP280_data() # BMP280.pyにより取得した気温、湿度、気圧データ
blynk.virtual_write(0,'気温%.1f ℃, 湿度%.1f %,気圧%.1f hPa' % (t, h, p)) # スマホBlynkアプリValue Displayへ出力
#print('気温 %.2f, 湿度 %.2f, 気圧 %.2f' % (t, h, p)) # print output to Shell
mylcd.lcd_display_string(time,1,0) # LCD1行目に年月日と時刻を出力
mylcd.lcd_display_string('T%.1f,H%.0f,P%.0f' % (t, h, p),2,0) # LCD2行目に気温、湿度、気圧を出力
t=threading.Timer(5, sensorDataSend) # 5秒毎にデータを送る
t.start()
return

t=threading.Timer(5, sensorDataSend)
t.start()

blynk.run()

Raspi Zero WHにセットの自作便利HATを介してI2C接続したBME280からのデータをLCDとスマホに配信しています。
スマホにはBlynkからネット経由にてデータが送られるのでインターネットが届く所なら何処でも受信できます。
今回はスマホへの単なるデータ表示のみですが、Blynkアプリの応用次第で受信したデータを元にスマホからラズパイを
コントロールするなど実用的な操作が簡単に行えます。
Blynk_280_1.jpg


皆様の参考になれば幸いです。

スポンサーサイト



テーマ : 電子工作
ジャンル : 趣味・実用

ラズベリーパイで遊ぶ その4 気温・湿度・気圧センサーを繋ぐ ③

16文字2行のLCDに測定値を表示する
モニターが無くても測定値が判るLCD表示器を付けてみました。

ラズベリーパイで遊ぶ その1 Blynk LCD Message Boardにて紹介しましたRaspi ZeroとLCD表示器のセットに
BME280を接続しました。LCDの上段には年月日と時刻を表示し、下段に温度、湿度、大気圧を表示させました。
Blynk_280_04.jpg

Blynkアプリを使ってスマホに測定値を表示する
外出先でも測定値が見れるようにBlynkアプリのValue Displayに測定値を表示させます。
下の画像が気温、湿度、大気圧を表示したスマホのスクリーンショットです。
Blynkアプリのパーツは2,000Energyまで無料で使えます。無料範囲内で出来るだけ多くのパーツが使えるように
Energy単価が小さいValue Displayを1個使って温度、湿度、大気圧を1行に表示するように工夫しました。
ここでは単に値の表示だけですが、Blynkアプリの使い方を工夫すれば便利なことが簡単に実現します。
ほんの一例ですが、温室やビニールハウスの室温や湿度を目安に換気窓の開閉や散水などが、Blynkアプリの
ON/OFFボタンパーツを追加し、ラズパイのGPIO端子にリーレーユニットを設けるとスマホから遠隔操作が行えます。
Blynk_280_7.png

Blynkアプリの設定
Blynkアプリの使い方は、ラズベリーパイで遊ぶ その1 Blynk LCD Message Boardを参考にして下さい。
ここでは、スマホに測定値を表示するValue Displayの設定について説明します。
①左画像:Widget Boxを開き、赤丸で示したValue Displayを選択します。
②中央画像:Value Display設定画面に赤丸で示したValueとV0を選択します。
③右画像:次のValue Display Settings画面で赤丸のV0を確認し、右下ボックスの矢印で5secに設定します。
 V0上側のタイトルはスマホのValue Displayに小さく表示されます。英文で気温、湿度、気圧を記入しましたが任意です。
Blynk_280_4.png Blynk_280_5.png Blynk_280_6.png



次回はソースコードを記します。

テーマ : 電子工作
ジャンル : 趣味・実用

ラズベリーパイで遊ぶ その4 気温・湿度・気圧センサーを繋ぐ ②

気温、湿度、気圧センサーについて
BME280には各種製品が販売されていますが、今回使用の製品は前回に画像にて紹介のAmazonで購入した製品です。
4ピンタイプのI2C接続専用BME280の拡大画像です。この製品の入力電圧はは3.3V~5Vに対応していますが、
私はラズパイ40ピン端子の1番ピン3.3V=VIN,、3番ピン=SDA、5番ピン=SCL、9番ピン=GNDへ接続して使いました。
Blynk_280_03.jpg

この製品の初期I2Cアドレスは0x76で、次に紹介するスイッチサイエンス社のサンプルソースにそのまま使えます。
I2Cアドレスが他の機器と競合する場合は、アドレス設定ジャンパーにて変更できます。
ここからサンプルソース掲載GitHubのURLを開きます。
注意:bme280_sample.pyは、python2用なのでPython3では95行目、103行目、117行目のprint文に()を付けます。
 95  print("pressure : %7.2f hPa" % (pressure/100))
103 print("temp : %-6.2f ℃" % (temperature))
117 print("hum : %6.2f %" % (var_h))

I2C接続が出来たらBME280のテスト
先ずは、BME280/Python27/bme280_sample.pyをダウンロードさせて頂き、センサー単体でのテストを行います。
bme280_sample.pyをThonny python IDEなどにコピーして実行するとShellに次のように測定データが表示されます。
キーボードのスペースキーを押す度に新しいデーターが表示されます。
bme280_sample.png


次回は測定データーをLCDに表示とBlynkアプリの設定です。

テーマ : 電子工作
ジャンル : 趣味・実用

ラズベリーパイで遊ぶ その4 気温・湿度・気圧センサーを繋ぐ ①

安価な気温・湿度・大気圧が測定できるBME280を使ってみた!
先に購入した湿度の測定できないBMP280は、気温がかなり高目に出るので補正して使ってたが湿度も測定できる
BME280を試してみました。この製品は温度の誤差が少なく安定しているようです。

単に測定値を見るのでは面白くないので、先に作ったLCDメーッセージボードを流用してセンサの値を見れるようにし、
更にBlynkを使ってスマホで測定値が見れるようにもしました。画像の右側がスマホに表示した測定値です。
スマホのBlynkアプリにON-OFFボタンを付けて、室温を測定して出先から部屋のエアコンの操作も可能です。
Blynk_280_1.jpg

pi Zeroを使い自作HATにBME280を差し込んで使います。今回使ったBME280は4ピンタイプなのでI2C接続専用です。
Amazonの安い中国製品にはリスクを覚悟してたが、3個入りを購入したら1個が不良品でした。
Blynk_280_0.jpg


次回はソフトウエアーについて記します。

テーマ : 木工
ジャンル : 趣味・実用

ラズベリーパイで遊ぶ その3 WAV音源ピアノ USBキーボード編 

ラズパイ4に接続したUSBキーボードを使いwav音源ピアノを弾く!

前回紹介のI2CKeyPadに替えてUSBキーボードを使った方法です。 こちらの方が外付け部品が要らずにキーボードの
テンキーを使って疑似ピアノが楽しめます。下はラズパイ4にアンプ付きスピーカーとUSBキーボードを繋いだテストの様子
USB_piano_1.jpg

ここで使えるUSBキーボードはフルサイズのテンキー付きの他、ショートサイズでNumlockキーを押すと一部のキーが
テンキーとして使えるタイプ、専用テンキーボードなどです。
USBキーボードのテンキーをラズパイの外部スイッチとして使う方法は、ラズパイの実験に応用すれば重宝すると思います。
このアイデアは、AnitesさんのRaspberry PiのUSBキーボードを応用にさせて頂きました。

USBキーボードを使う準備
Pythonプロジェクトには「evdev」が既に入ってるので、コマンドラインから「pip3 install evdev」を実行します。

使用するキーボードのDEVICE名を調べる方法。
ラズパイにキーボードをセットしてコマンドラインから「ls /dev/input/by-id/」を実行するとDEVICE名が表示されます。
ソースコードのDEVICE = "/dev/input/by-id/に続けて調べたDEVICE名を記入します。
keyboard_name.gif

音源のwavファイルのダウンロードについては前回I2CKeyPadの記事を参考にして下さい。
wavファイルはフォルダーwav_datに格納して以下のkeymap.py、usb_kb.piano.pyと同じディレクトリーに置きます。

キーコードマップ 注意:キーボードによってコードが少し異なる場合が有ります。
keymap.py

keys = {
69: "NL", # Num Lock
79: "1",
80: "2",
81: "3",
75: "4",
76: "5",
77: "6",
71: "7",
72: "8",
73: "9",
82: "0",
83: ".",
28: "ENTER",
78: "+",
74: "-",
14: "BS", # Back Space
55: "*",
98: "/",

# non num lock keys:
111: "_.", # Del
110: "_0", # Ins
107: "_1", # End
108: "_2", # Down
109: "_3", # PgDn
105: "_4", # Left
# notice the missing N5 - better to use num lock mode
106: "_6", # Right
102: "_7", # Home
103: "_8", # Up
104: "_9", # PgUp
}


ソースコード
usb_kb_piano.py

#coding: utf-8
import pygame
from evdev import InputDevice
from select import select
from keymap import keys

pygame.init()

DEVICE = "/dev/input/by-id/usb-_USB_Keyboard-event-kbd"
#使用するキーボードのDEVICE名を記入

dev = InputDevice(DEVICE)

while True:
# wait for keypad command
r, w, x = select([dev], [], [])

for event in dev.read():
if event.type==1 and event.value==1:
if event.code in keys:
#print("KEY CODE: ", event.code) # print前の#を外すと押したキーのコードが見れます。
if(event.code == 79):#1
key1 = pygame.mixer.Sound("wav_dat/piano1_1do.wav")
key1.play()
if(event.code == 80):#2
key2 = pygame.mixer.Sound("wav_dat/piano1_2re.wav")
key2.play()
if(event.code == 81):#3
key3 = pygame.mixer.Sound("wav_dat/piano1_3mi.wav")
key3.play()
if(event.code == 75):#4
key4 = pygame.mixer.Sound("wav_dat/piano1_4fa.wav")
key4.play()
if(event.code == 76):#5
key5 = pygame.mixer.Sound("wav_dat/piano1_5so.wav")
key5.play()
if(event.code == 77):#6
key6 = pygame.mixer.Sound("wav_dat/piano1_6ra.wav")
key6.play()
if(event.code == 71):#7
key7 = pygame.mixer.Sound("wav_dat/piano1_7si.wav")
key7.play()
if(event.code == 72):#8
key8 = pygame.mixer.Sound("wav_dat/piano1_8do.wav")
key8.play()



動画をご覧下さい。
曲が弾けないのでドレミだけですがご覧下さい。



皆様の参考になれば幸いです。

テーマ : 電子工作
ジャンル : 趣味・実用

ラズベリーパイで遊ぶ その2 WAV音源ピアノ I2CKeyPad編 

ラズパイ4にI2C接続したキーパッドを使いwav音源ピアノを弾く!

16keypad1.jpg

私は音痴で子供のころから楽器で遊んだことが無く音楽とは無縁でした。
ラズパイを始めてから電源+2本の線を繋ぐだけでGPIOが節約出来るI2C通信に興味を持ち、安価なI2C
エキスパンダーPCF8574を入手しました。
このエキスパンダーに4X4マトリックスキーボードを付けたので何かに応用したいと思い、ヒントを探してたら
ラズベリーパイORGの「今日は何を作りたいですか?」コーナーにGPIO music boxが目に
留まりました。ここでは、4個のボタンスイッチをGPIOに接続し、ボタンを押すとドラムの音を再生する簡単な
仕組みでしたが、I2Cを使えばGPIOの数に制限されずに簡単にボタンを増やすことが出来ます。
そこで、今回は16個まで使えるキーパッドを使って模擬ピアノを試しました。但し、ピアノ音源のwavソースが
ドレミファソラシドの8音階しか入手出来なかったのでほんのお遊び程度です。
キーパッドの使い方やソースコードはKI04.comのチュートリアルを参考にさせて頂きました。

必要な部品
ラズベリーパイ:Pi4を使ってテストしました。
I2CエキスパンダーPCF8574:通販で1個150円程度です。
このエキスパンダーはアドレスの設定をジャンパーピンを差し替えることで0x20から0x27を選べます。
余談ですが、エキスパンダーのアドレスを変えて直列接続(daisy chain)すればもっと多くのキーボードが使えます。
I2Cのアドレスを調べる方法は前回のLCDメッセージボードを参考にして下さい。
4X4マトリックスキーボード:通販で1個125円でした。

I2CエキスパンダーPCF8574と4X4マトリックスキーボードの接続図
PCF8574.jpg
wav音源の準備
先ずは、先に紹介しましたGPIO music boxのtutorialを一通りご覧下さい。音源の再生にpygameを使います。
私はフリー音楽素材魔王魂トップページのピアノ(wav)1-1ド~1-8ドをダウンロードして使わせて頂きました。
ダウンロードしたwavファイルはフォルダーwav_datに格納して次の16key_Piano.pyと同じディレクトリーに置きます。

ソースコード
16key_Piano.py
#!/usr/bin/env python
import smbus
import sys
import time
import pygame

pygame.init()
class MyKeyboard:

KeyPadTable= [['D','C','B','A'],
['#','9','6','3'],
['0','8','5','2'],
['*','7','4','1']]

RowID=[0,0,0,0,0,0,0,4,0,0,0,3,0,2,1,0]

CurrentKey=None

def __init__(self,I2CBus=1, I2CAddress=0x20): #使用するI2Cモジュールのアゾレスを記入。
self.I2CAddress = I2CAddress
self.I2CBus = I2CBus
#open smbus pcf8574
self.bus = smbus.SMBus(self.I2CBus)
#set pcf to input
self.bus.write_byte(self.I2CAddress,0xff)

def ReadRawKey(self):
#set P4 Low First
OutPin= 0x10
for Column in range(4):
#scan first row to see if we have something
self.bus.write_byte(self.I2CAddress,~OutPin)
#read the key now
key = self.RowID[self.bus.read_byte(self.I2CAddress) & 0x0f]
if key >0 :
return self.KeyPadTable[key-1][Column]
OutPin = OutPin * 2
return None

#ReadKey return current key once and debounce it
def ReadKey(self):
LastKey= self.CurrentKey;
while True:
NewKey= self.ReadRawKey()
if NewKey != LastKey:
time.sleep(0.01)
LastKey= NewKey
else:
break
#if LastValue is the same than CurrentValue
#just return None
if LastKey==self.CurrentKey:
return None
#ok put Lastvalue to be CurrentValue
self.CurrentKey=LastKey
return self.CurrentKey

if __name__ == "__main__":
mkb = MyKeyboard()
while True:
kdat = mkb.ReadKey()
if kdat != None:
#sys.stdout.write(kdat)
#print(kdat) # #を外すと入力したキーがShellで確認できます。
sys.stdout.flush()
if (kdat == '1'):#1
key1 = pygame.mixer.Sound("wav_dat/piano1_1do.wav")
key1.play()
if (kdat == '2'):#2
key2 = pygame.mixer.Sound("wav_dat/piano1_2re.wav")
key2.play()
if (kdat == '3'):#3
key3 = pygame.mixer.Sound("wav_dat/piano1_3mi.wav")
key3.play()
if (kdat == '4'):#A
key4 = pygame.mixer.Sound("wav_dat/piano1_4fa.wav")
key4.play()
if (kdat == '5'):#4
key5 = pygame.mixer.Sound("wav_dat/piano1_5so.wav")
key5.play()
if (kdat == '6'):#5
key6 = pygame.mixer.Sound("wav_dat/piano1_6ra.wav")
key6.play()
if (kdat == '7'):#6
key7 = pygame.mixer.Sound("wav_dat/piano1_7si.wav")
key7.play()
if (kdat == '8'):#B
key8 = pygame.mixer.Sound("wav_dat/piano1_8do.wav")
key8.play()
else:
time.sleep(0.001)

GPIO.cleanup()



動画をご覧下さい。
撮影のセットが悪く3脚とテーブルが接触してノイズが入ってしまった!。


次回はキーパッドに替え、ラズパイ4につないだUSBキーボードを使う方法を紹介します。

皆様の参考になれば幸いです。

テーマ : 電子工作
ジャンル : 趣味・実用

ラズベリーパイで遊ぶ その1 Blynk LCD Message Board 後編 

Blynk LCD Message Board 後編 (前編と併せてご覧下さい)

ソフトウエアの説明
下の画像はアクリル板を加工して作ったLCDメッセージボードで、ラズパイZeroとHAT基板を載せてます。
Blynk_LCD_1.jpg

スマホアプリBlynkの設定について
先ず、iPhone(App Store)又はAndroid(google Play)からスマホにBlynk-IoT for Arduino, ESP32をダウンロードして
インストールを行います。使用するパーツ(Widget)を沢山使うと有料になりますが、ここで扱う程度は無料です。

左上から順番に①・・・
①インストルール初期画面のアカウント作成を選択します。
②メールアドレスとパスワードを登録します。
③この画面の一番下Email allをクリックすると登録したEメールに「AUTH TOKEN」が送られてきます。
注意:この「AUTH TOKEN」が後で作成するソースコードに必要となります。
④プロジェクト名の入力とデバイス選択をRaspberry pi Zero Wが無いのでRaspberry pi 3Bを選びCreateボタンを押す。
Blynk_1.jpg Blynk_2.jpg Blink_2b.jpg Blynk_11.jpg
⑤プロジェクト画面が開いたら右上の丸✙のを選択するとwidget Boxが開きます。
⑥widget Boxの下の方にText inputを選択しするとText input Setting画面が開きます。
⑦Text input Setting画面ではPINを選択します。
⑧次にSelect pinのVitualとV0を選択してOKをクリックするとText input Settin画面に戻ります。
Blynk_4.jpg Blynk_5.jpg Blynk_6.jpg Blynk_7.jpg

⑨この画面下側のCHARACTER LIMIT枠に50から100位を入力し、一番上左端の←をクリックします。
⑩プロジェクトと画面に表示されたText inputボックスを見易い位置に移動と幅の調整をします。
⑪次はWidget Boxを開き、着信をスマホに通知するパーツNotificationを追加します。
⑫NotificationをText input Boxの下辺りに配置します。Notificationは、メッセージが届いた後、本体拡張基板に
追加したタクトスイッチを押すと、スマホの画面に確認のメッセージが表示され、メッセージが届いたことを通知します。
通知はOKをタップすると消えます。
Blynk_8.jpg Blynk_9.jpg Blynk_12.jpg Blynk_13.jpg

Blynkライブラリーのダウンロード
BlynkLib.pyのダウンロード先URL

カタカナを表示のの準備
もんごんたさんのホームページ「LCD1602Aや2004AをI2C接続で使いこなす」
ハード編
ソフト編を参考にカタカナの表示に必要なソースコードHD44780.pyを使わせて頂きました。感謝!
必要なソースファイルは次のGitHubからClone出来ます。 GitHub mongonta0716/hd44780
LCDモジュールの設定やラズパイの設定もハード編、ソフト編で詳しく説明されているので参考にして下さい。

lcdsample.confのI2Cアドレス等の設定
[lcd]
i2c_address = 0x27 #使用するI2Cモジュールのアドレスを記入します。
width = 16      #表示文字数
lines = 2       #行数
backlight = On #バックライトは常にON

#ここで文字シフトを選べますが、1行目も同じようにシフトするので(0=シフトしない)に設定
# shiftmode
# 1: leftshift
# 2: rightshift
# 3: alternately
shiftmode =

# Turn it off if you don't use Japanese Kana characters.
kanamode = On   #カナモードは常時On

Blynk_LCD_Messageのソースコード
同じディレクトリーにBlynk_LCD_Message.py、BlynkLib.py、HD44780.py、conf/lcdsample.confを入れます。
Blynk_LCD_Message.py
#!/usr/bin/python3
# -*- coding:utf-8 -*-
from datetime import datetime
import HD44780 as LCD
from gpiozero import Buzzer, Button
import BlynkLib
from time import time, sleep, strftime
import smbus

lcd = LCD.HD44780('lcdsample.conf')
lcd.init()

buzzer = Buzzer(26)
sw1 = Button(21)

#Blynkから割り当てられたTOKEN 記号を入力
BLYNK_AUTH = '4E*********************Zm'

# Initialize Blynk
blynk = BlynkLib.Blynk(BLYNK_AUTH)

def sw1Pressed():
buzzer.beep(0.1, 0.1 ,2)
print('SW1 is pressed')
blynk.notify('Confirm receipt! OK.')

sw1.when_pressed=sw1Pressed

# Register Virtual Pins
@blynk.VIRTUAL_WRITE(0)
def my_write_handler(value):
global counter
global BlynkText
buzzer.beep(0.1, 0.1, 3)
BlynkText = format(value[0])
print('Blynk Text: {}'.format(BlynkText))
counter = 1

def millis():
return time() * 1000

def my_user_task():
global counter
global BlynkText
time = datetime.now().strftime('%Y.%m.%d %I:%M')
print('Counter = {}'.format(counter))
if counter == 0:
buzzer.beep(0.1, 0.1, 2)
lcd.message(time,1)
lcd.message('Blynk Ready',2)
counter = 3
elif counter < 4:
if len(BlynkText) > 0:
lcd.message(time, 1)
lcd.message(' ', 2)
lcd.message(BlynkText,2)
else:
counter = 3
else:
if counter == 4:
counter = 0
lcd.message(time, 1)
lcd.message(' ',2 )
lcd.message(BlynkText, 2)
counter = counter +1

counter = 0
BlynkText = ''
currentMillis = 0
previousMillis = 0
interval = 5000

try:
while True:
blynk.run()
currentMillis = millis()
if currentMillis - previousMillis > interval:
my_user_task()
previousMillis = currentMillis

except KeyboardInterrupt:
sys.exit(0)



使い方
①左側画像のようにスマホBlynkアプリのText Input Boxにメッセージを入力して送信します。
 メッセージに使える文字はHD44780.pyに定義したアルファベットの大文字、小文字、英数記号、カタカナ
 のみですが、カタカナ入力は全角で入力しても半角カタカナに変換して表示されるのでとても便利です。
 間違えてひらがなや漢字を入力しても、定義された文字以外はパスして表示せずにエラーが出ません。
 16文字を超える文字はオーバフローして表示しません。
②メッセージが届いたら確認ボタンを押すと、右画像のようにスマホ側へメッセージが届いたことを知らせます。
korekara1.png Confirm1.png

 スマホから届いたメッセージがLCDの2行目にに表示されると同時にブザーが鳴って着信を知らせます。
 1行目の年月日と時刻は常時表示としました。
Blynk_LCD_4.jpg

皆様の参考になれば幸いです。

テーマ : 電子工作
ジャンル : 趣味・実用

Raspberry pi 用便利HATの紹介 その2

ラズパイ用HAT基板 その2
先に作ったラズパイZero用のHAT基板を差し替えて共用してたが、ラズパイ4専用として少し大きいHAT基板に
4チャンネル I2C ロジック レベル変換双方向モジュールを組み込んで組み立てました。

回路図
RaspiHAT_2.gif

完成したHAT基板
圧電ブザーの右横が 5個290円(送料込み)で購入したロジックレベル変換双方向モジュールです。
このモジュールは4チャンネルですが、ここでは2チャンネルのみ使用。コネクターは3.3V系と5V系を夫々に設けました。
これで、5V系のI2C 機器を安心して使えるようになりました。使用したHAT基板は秋月電子にて150円で購入しました。
Raspi4_HAT-2.jpg


皆様の参考になれば幸いです。

テーマ : 電子工作
ジャンル : 趣味・実用

ラズベリーパイで遊ぶ その1 Blynk LCD Message Board 前編 

Blynkのメッセージ表示にI2C 16X2LCDを使う
先に紹介しました。Blynkを使った8X8X8 LEDドットマトリックスメッセージボードを安価なI2C16X2 LCD表示器に
置き換えてみました。

Blynkを使ってスマホからメッセージを送るとラズパイに接続した16文字2行のLCD表示器にメッセージが届きます。 
1行目には年月日と時刻を表示し、2行目に英数記号とカタカナのメッセージを表示します。
スマホから間違って英数記号やカタカナ以外の文字を送ってもエラーとならず、その部分のみ表示しません。
Blynk_LCD_3.jpg

使用部品は、1602 LCD表示器+I2C変換モジュール(セット物と別売が有り、何れも数百円程度にて入手)
私があまり気にしないので5V駆動のLCDを使いましたが、気になる方は3.3V駆動のLCDを使うかI2Cラインに
双方向ロジックレベル変換モジュールを挿入してください。
Blynk_LCD_2.jpg

上の画像では、先に作った便利HATを使ってますが、下のFritzing接続図では必要部分のみ結線しています。
Raspi_lcd_Blynk.gif

I2Cインターフェースを使うための準備
Rasbianのdesktopがインストールされている場合は、設定⇒Raspberry piの設定⇒インターフェースを開き、
I2Cを有効にチェックした後に再起動するとI2Cが使えます。
raspberryPi_1.gif

もし、動かない場合はコマンドラインから”sudo raspi-config”と入力すれば下図のraspi_config画面が開きます。
5番目のInterfacing Options選択します。
I2C_config1.gif

P5 I2Cを選択します。
I2C_config2.gif

yes(はい)を選択します。
I2C_config3a.gif

OK(了解)を選択してfinish(終了)します。
I2C_config4a.gif

LCDのI2C変換モジュールのアドレスを調べる方法
LCDの各Vcc,GND,SDA,SCLを接続後起動、コマンドラインからi2cdetect -y 1と入力すると下図のようにアドレスが
表示されます。この場合は27即ち0x27だと解ります。
I2C_add.gif


次回、後編ではソフトウェアについて説明します。

皆様の参考になれば幸いです。

テーマ : 電子工作
ジャンル : 趣味・実用

Raspberry pi 用便利HATの紹介

先月、初めてラズパイしZeroを購入してPythonの勉強を始め、最近Raspi4を入手しました。
各種センサーやI2Cモジュールを繋いで遊んでますが、有れば便利なHAT(拡張基板)を作りました。
ここに使ったHAT基板は秋月電子にて1枚100円で購入出来ます。基板左側の4pinコネクターはI2C用です。
Raspi4_HAT_1A.jpg

回路図
LED8個、タクトスイッチ3個、圧電ブザー1個、I2C用コネクター1個の簡単な回路です。
自作が苦手な方は、スイッチサイエンスにて販売のMaker pHAT(1252円)を購入して下さい。
LEDをスクロールさせたり出来るサンプルコードが提供されていて、初めて使う方にも有効だと思います。
RaspiHAT_1.gif

HAT側面の様子
ケースに入れると本体基板の40Pinプラグまで届かないので、ラズパイ用スタッキングコネクターで下駄をはかせてます。
このスタッキングコネクターは秋月電子にて1個150円でした。
右上の黒い棒状の突起物はI2Cの電源電圧5Vと3.3V切り替え用のジャンパーピンです。
Raspi4_HAT_1B.jpg

お気に入りのアクリルケースに載せて使います。
HAT基板は差し込んでるだけで固定していません。スペーサーはスイッチを押した時に基板がたわむのを防ぐために
取り付けています。
Raspi4_HAT_2.jpg

アクリルケースの手前側から見た様子
HAT基板にも40pinヘッダーを取り付けてあるので、ブレッドボードにリボンケーブルを繋いで実験する時もコネクターの
取り外しが簡単で利便性が有ります。
Raspi4_HAT_3.jpg

アクリルケースの後ろ側から見た様子
特にI2C用の専用コネクターを取り付けたのでLCDや各種センサーのテストにはとても便利です。
Raspi4_HAT_4.jpg


皆様の参考になれば幸いです。

テーマ : 電子工作
ジャンル : 趣味・実用

Raspberry pi4が届いた!

予約していたラズパイ4が27日朝に届きました。
先に紹介しましたLEDマトリックスディスプレイにラズパイZeroを使ったのが切っ掛けでラズパイに嵌り、技適マークが
付いた製品の販売を予約していました。
Raspi4_1.jpg

基板表側は先に販売されていた技適マークの無い製品と同じです。
Raspi4_2.jpg

基板裏側には、申し訳程度の大きさで技適マークが印刷されていました。
Raspi4_3.jpg

先に準備していたファン付きアクリルケースに入れて早速動かせてみました。
このケースはAMAZONにて購入、3Aの専用電源とセット(送料込み1999円)ですが、評判が良くて現在は在庫なし。
Raspi4_4.jpg

ラズパイ4を使ってみての感想ですが、先に使ったZeroの処理能力が低かっただけにビックリするほど早く、
WebやYouTubeの閲覧もストレスなく出来る小さな!小さな!PCとしても使えそうです。
先ずは、覚え始めたPythonの練習を兼ねて遊んでみたいと思います。
Raspi4_5.jpg

皆様の参考になれば幸いです。

テーマ : 電子工作
ジャンル : 趣味・実用

LEDマトリックスモジュールで遊ぶ その4(最終回) Raspberry pi 編

その4 Raspberry pi Zero WとBlynkを使ったメッセージボードの紹介
Cytron社のRaspberry pi Zeroを使ったtutorialページを参考にさせて頂きました。
2019年11月24日

Raspberry pi Zero WのOSインストール方法は、インターネット上にたくさん紹介されているのでここでは省略します。
私自身初めてのPaspberry piと初めてのPythonですが、購入から3週間で工作を含めて完成出来ました。
ここでは、LEDマトリックスモジュールで遊ぶ その3と重複する部分は省略しています。その3と併せてご覧下さい

今度のメッセージボードの特長は通常時計が表示され、メッセージ信号が入るとBeep音を発し、メッセージを
スクロール表示します。tutorialではマトリックスボードが1枚(8X8X4)ですが、見易くするために2枚連結しました。
RasPi_Blynk_Message_Board1.jpg

回路図
tutorialではMaker pHAT(拡張基板)を使っていますが、ここでは秋月電子の1枚100円の拡張基板に必要な部品を
組み込んで使いました。 メッセージ着信時に送信側スマホへ確認を通知するためのスイッチを追加しました。
Raspberry1-1.gif

背面1 今回も前回同様にアクリル板をCNC加工して作りました。左側の黒い部品は圧電ブザーですが、
手持ち部品を使ったのでケースの外に設置しました。
RasPi_Blynk_Message_Board2.jpg

背面2 カバーを外すとRaspberry pi Zeroと拡張基板が見えます。
RasPi_Blynk_Message_Board3-A.jpg

RaspberryPi Zero Wと拡張基板の様子
赤く見えるのが追加したタッチスイッチです。回路図ではpushスイッチですが、配線を引き出すのが一手間なので
アクリルカバーの外から操作が出来るタッチスイッチを拡張基板に取り付けて使いました。
RasPi_Blynk_Message_Board4-A.jpg

スマートフォン側 Blynk APPの変更箇所について
Blynkの設定方法は、その3とほぼ同じです。その3 前編と併せてご覧下さい。
①デバイスの選択をRaspberry pi Zero Wが無いのでRaspberry pi 3Bを選びます。
②次はtutorialに無い通知機能を追加します。Widget Boxを開き、Notificationを追加します。
③追加したNotificationをText Inputの下辺りに配置します。
④LEDボードにメッセージが届いた後、本体拡張基板に追加したタッチスイッチに触れると、スマホの画面に確認の
 メッセージが表示され、メッセージが届いたことを通知します。通知はOKをタップすると消えます。
Blynk_11.jpg Blynk_12.jpg Blynk_13.jpg  Blynk_14.jpg

ソースコードについて
tutorialのソースコード(Python)に少し手を加えましたので変更部分を#にて記します。
以下のプログラム実行には、blynk-library-pythonとLuma.LED_Matrixをインストールしておく必要が有ります。
ここで使ったLEDマトリックスボードは、LumaライブラリーがサポートするFT16タイプです。表示方法が異なる
IC STATIONは使えません。ライブラリーを修正すれば可能だと思いますが試していません。

#Blynk_LED_MatrixMessageBoard.py
from gpiozero import Buzzer, Button
import BlynkLib
from time import time, sleep, strftime
from datetime import datetime
import sys

#lumaledライブラリーでは、LEDマトリックスボードを”FT16”タイプをサポート、IC STATIONは使えません。

from luma.core.interface.serial import spi, noop
from luma.core.render import canvas
from luma.core.virtual import viewport
from luma.led_matrix.device import max7219
from luma.core.legacy import text, show_message
from luma.core.legacy.font import proportional, CP437_FONT, LCD_FONT

buzzer = Buzzer(26) #GPIO26にBUZZERを接続
sw1 = Button(21) #GPIO21にメッセージ確認用SWを接続
BLYNK_AUTH = 'Blynkから割り当てられたTOKEN 記号を入力'

# Initialize Blynk
blynk = BlynkLib.Blynk(BLYNK_AUTH)

#以下の5行を追加したWidget Notificationの記述を追加しました。
def sw1Pressed():
buzzer.beep(0.1, 0.1 ,1)
print('SW1 is pressed')
blynk.notify('Confirm receipt! OK.') #()内に通知文章を記述します。

sw1.when_pressed=sw1Pressed

# Register Virtual Pins
@blynk.VIRTUAL_WRITE(0)
def my_write_handler(value):
global counter
global BlynkText
buzzer.beep(0.1, 0.1, 1)
#(0.1, 0.1, 1)()内の数値は左からbeep音の長さと間隔で右端が回数です。
BlynkText = format(value[0])
print('Blynk Text: {}'.format(BlynkText))
counter = 1

serial = spi(port=0, device=0, gpio=noop())
#マトリックスボードを追加したのでwidthを32から64に変更
device = max7219(serial, width=64, height=8, block_orientation=-90)
#widthを32から64に変更
device.contrast(5) #LEDの輝度が設定出来ます。
virtual = viewport(device, width=64, height=8) #widthを32から64に変更

def millis():
return time() * 1000

def my_user_task():
global counter
global BlynkText
print('Counter = {}'.format(counter))
if counter == 0:
buzzer.beep(0.1, 0.1, 2)
show_message(device, 'Blynk Ready', fill="white", font=proportional(LCD_FONT), scroll_delay=0.05)
counter = 3
elif counter < 4:
if len(BlynkText) > 0:
show_message(device, BlynkText, fill="white", font=proportional(LCD_FONT), scroll_delay=0.04)
#scroll_delay=0.08を0.04に変更
else:
counter = 3
else:
if counter == 6: #counter == 10を6に変更。(時計表示とメッセージ表示の比率を自分好みに変更)
counter = 0
with canvas(virtual) as draw:
#時計を表示するtext(draw, (1, 1)を(16, 1)に変更してボード中央(16ドット目から)に表示としました。
text(draw, (16, 1), datetime.now().strftime('%I:%M'), fill="white", font=proportional(CP437_FONT))

counter = counter + 1

counter = 0
BlynkText = ''
currentMillis = 0
previousMillis = 0
interval = 5000

try:
while True:
blynk.run()

currentMillis = millis()
if currentMillis - previousMillis > interval:
my_user_task()
previousMillis = currentMillis

except KeyboardInterrupt:
sys.exit(0)


動画をご覧下さい。


皆様の参考になれば幸いです。

テーマ : 電子工作
ジャンル : 趣味・実用

LEDマトリックスモジュールで遊ぶ その4

RaspberryPi Zero Wを使ったLEDメッセージボードの紹介。
初めてRaspberry Piを使いましたが、今までのマイコンと違い小さなPCと言う感覚です。
Pythonも初めてなのでゼロからのスタートですが、購入から3週間で完成すことが出来ました。
前回同様にスマホのBlynkアプリを使ってローカルネットワークの外からメッセージを送ります。
今回もCytron社のtutorialページを参考にマトリックスモジュールを増すなど自分なりの工夫をしました。

今回は先ず動画のみ紹介します。



次回は詳細記事を掲載します。

皆様の参考になれば幸いです。

テーマ : 電子工作
ジャンル : 趣味・実用

プロフィール

CNC_Paradise

Author:CNC_Paradise
木工・彫刻・機械工作・電子工作が
大好きで自作のCNCを使って工作を
楽しんでます。

最新記事
最新コメント
月別アーカイブ
カテゴリ
何でも工作室
検索フォーム
RSSリンクの表示
リンク
QRコード
QR