Grove - 4-Digit Display
この文書は AI によって翻訳されています。内容に不正確な点や改善すべき点がございましたら、文書下部のコメント欄または以下の Issue ページにてご報告ください。
https://github.com/Seeed-Studio/wiki-documents/issues
Grove - 4-Digit Display モジュールは、12ピンのモジュールです。このモジュールでは、TM1637を使用して制御ピンの数を2本に削減しています。つまり、ArduinoまたはSeeeduinoのデジタルピン2本だけで、内容と輝度の両方を制御できます。英数字の表示が必要なプロジェクトにおいて、このモジュールは良い選択肢となるでしょう。
バージョン
製品バージョン | 変更点 | リリース日 |
---|---|---|
Grove - 4-Digit Display V1.0 | 初版 | 2012年5月 |
特徴
- 4桁の赤色英数字ディスプレイ
- Grove互換インターフェース (3.3V/5V)
- 8段階の輝度調整可能
Groveモジュールの詳細については、[Grove System](https://wiki.seeedstudio.com/ja/Grove_System/) を参照してください。
仕様
項目 | 最小 | 標準 | 最大 | 単位 |
---|---|---|---|---|
電圧 | 3.3 | 5.0 | 5.5 | VDC |
電流 | 0.2 | 27 | 80 | mA |
寸法 | 42x24x14 | mm | ||
正味重量 | 7±1 | g |
応用例
- 時刻表示
- ストップウォッチ
- センサー入力の表示
対応プラットフォーム
Arduino | Raspberry Pi |
---|---|
上記で対応プラットフォームとして挙げられているものは、モジュールのソフトウェアまたは理論的な互換性を示しています。ほとんどの場合、Arduinoプラットフォーム向けのソフトウェアライブラリやコード例のみを提供しています。すべての可能なMCUプラットフォーム向けにソフトウェアライブラリやデモコードを提供することはできません。そのため、ユーザー自身でソフトウェアライブラリを作成する必要があります。
はじめに
Arduinoを初めて使用する場合は、開始前に[Arduinoの使い方](https://wiki.seeedstudio.com/ja/Getting_Started_with_Arduino/)をご覧になることを強くお勧めします。
Arduinoで遊ぶ
ハードウェア
- ステップ 1. 以下のものを準備してください:
Seeeduino V4.2 | Base Shield | Grove-4-Digit Display |
---|---|---|
今すぐ購入 | 今すぐ購入 | 今すぐ購入 |
- ステップ 2. Grove-4-Digit DisplayをGrove-Base ShieldのD2ポートに接続します。
- ステップ 3. Grove-Base ShieldをSeeeduinoに差し込みます。
- ステップ 4. USBケーブルを使用してSeeeduinoをPCに接続します。
Grove Base Shieldがない場合でも、以下のようにGrove-4-Digit DisplayをSeeeduinoに直接接続することができます。また、他のGroveデジタルポートに接続することも可能です。
Seeeduino | Grove-4-Digit Display |
---|---|
5V | 赤 |
GND | 黒 |
D3 | 白 (DIO) |
D2 | 黄 (CLK) |
Grove-4-Digit DisplayにはGND、VCC、DIO、CLKの4つのピンがあります。DIOとCLKは任意のデジタルピンに接続できます。これはI2Cプロトコルではありません。
ソフトウェア
- ステップ 1. Grove-4-Digit DisplayライブラリとTimerOneライブラリをダウンロードします。
- ステップ 2. Arduinoライブラリのインストール方法を参照して、ライブラリをインストールします。
- ステップ 3. 以下の手順に従ってArduino IDEにコードを選択してアップロードします。コードのアップロード方法がわからない場合は、コードのアップロード方法をご確認ください。以下の3つの例があります:
- 時計表示
- 数字の流れ
- ストップウォッチ
- ステップ 4. Grove-4-Digit Displayが点灯するのが確認できます。
Codecraftで遊ぶ
ハードウェア
ステップ 1. Grove-4-Digit DisplayをBase ShieldのD2ポートに接続します。
ステップ 2. Base ShieldをSeeeduino/Arduinoに差し込みます。
ステップ 3. USBケーブルを使用してSeeeduino/ArduinoをPCに接続します。
ソフトウェア
ステップ 1. Codecraftを開き、Arduinoサポートを追加し、メインプロシージャを作業エリアにドラッグします。
Codecraftを初めて使用する場合は、[Arduinoを使用したCodecraftガイド](https://wiki.seeedstudio.com/ja/Guide_for_Codecraft_using_Arduino/)もご覧ください。
ステップ 2. 以下の画像のようにブロックをドラッグするか、このページの最後からダウンロードできるcdcファイルを開きます。
プログラムをArduino/Seeeduinoにアップロードします。
コードのアップロードが完了すると、0から9までの数字が流れるのが確認できます。
Raspberry Piで遊ぶ (Grove Base Hat for Raspberry Piを使用)
ハードウェア
- ステップ 1. このプロジェクトで使用するもの:
Raspberry Pi | Grove Base Hat for RasPi | Grove - 4 Digit Display |
---|---|---|
今すぐ購入 | 今すぐ購入 | 今すぐ購入 |
- ステップ 2. Grove Base HatをRaspberry Piに差し込みます。
- ステップ 3. 4-Digit DisplayをBase Hatのポート12に接続します。
- ステップ 4. USBケーブルを使用してRaspberry PiをPCに接続します。
ステップ3では、4-Digit Displayを**任意のGPIOポート**に接続することも可能ですが、その場合は対応するポート番号でコマンドを変更する必要があります。
ソフトウェア
- ステップ 1. ソフトウェアの設定に従って開発環境を構成します。
- ステップ 2. grove.pyライブラリをクローンしてソースファイルをダウンロードします。
cd ~
git clone https://github.com/Seeed-Studio/grove.py
- ステップ 3. 以下のコマンドを実行してコードを実行します。
cd grove.py/grove
python grove_4_digit_display.py 12 13
以下は grove_4_digit_display.py
コードです。
import sys
import time
from grove.gpio import GPIO
charmap = {
'0': 0x3f,
'1': 0x06,
'2': 0x5b,
'3': 0x4f,
'4': 0x66,
'5': 0x6d,
'6': 0x7d,
'7': 0x07,
'8': 0x7f,
'9': 0x6f,
'A': 0x77,
'B': 0x7f,
'b': 0x7C,
'C': 0x39,
'c': 0x58,
'D': 0x3f,
'd': 0x5E,
'E': 0x79,
'F': 0x71,
'G': 0x7d,
'H': 0x76,
'h': 0x74,
'I': 0x06,
'J': 0x1f,
'K': 0x76,
'L': 0x38,
'l': 0x06,
'n': 0x54,
'O': 0x3f,
'o': 0x5c,
'P': 0x73,
'r': 0x50,
'S': 0x6d,
'U': 0x3e,
'V': 0x3e,
'Y': 0x66,
'Z': 0x5b,
'-': 0x40,
'_': 0x08,
' ': 0x00
}
ADDR_AUTO = 0x40
ADDR_FIXED = 0x44
STARTADDR = 0xC0
BRIGHT_DARKEST = 0
BRIGHT_DEFAULT = 2
BRIGHT_HIGHEST = 7
class Grove4DigitDisplay(object):
colon_index = 1
def __init__(self, clk, dio, brightness=BRIGHT_DEFAULT):
self.brightness = brightness
self.clk = GPIO(clk, direction=GPIO.OUT)
self.dio = GPIO(dio, direction=GPIO.OUT)
self.data = [0] * 4
self.show_colon = False
def clear(self):
self.show_colon = False
self.data = [0] * 4
self._show()
def show(self, data):
if type(data) is str:
for i, c in enumerate(data):
if c in charmap:
self.data[i] = charmap[c]
else:
self.data[i] = 0
if i == self.colon_index and self.show_colon:
self.data[i] |= 0x80
if i == 3:
break
elif type(data) is int:
self.data = [0, 0, 0, charmap['0']]
if data < 0:
negative = True
data = -data
else:
negative = False
index = 3
while data != 0:
self.data[index] = charmap[str(data % 10)]
index -= 1
if index < 0:
break
data = int(data / 10)
if negative:
if index >= 0:
self.data[index] = charmap['-']
else:
self.data = charmap['_'] + [charmap['9']] * 3
else:
raise ValueError('Not support {}'.format(type(data)))
self._show()
def _show(self):
with self:
self._transfer(ADDR_AUTO)
with self:
self._transfer(STARTADDR)
for i in range(4):
self._transfer(self.data[i])
with self:
self._transfer(0x88 + self.brightness)
def update(self, index, value):
if index < 0 or index > 4:
return
if value in charmap:
self.data[index] = charmap[value]
else:
self.data[index] = 0
if index == self.colon_index and self.show_colon:
self.data[index] |= 0x80
with self:
self._transfer(ADDR_FIXED)
with self:
self._transfer(STARTADDR | index)
self._transfer(self.data[index])
with self:
self._transfer(0x88 + self.brightness)
def set_brightness(self, brightness):
if brightness > 7:
brightness = 7
self.brightness = brightness
self._show()
def set_colon(self, enable):
self.show_colon = enable
if self.show_colon:
self.data[self.colon_index] |= 0x80
else:
self.data[self.colon_index] &= 0x7F
self._show()
def _transfer(self, data):
for _ in range(8):
self.clk.write(0)
if data & 0x01:
self.dio.write(1)
else:
self.dio.write(0)
data >>= 1
time.sleep(0.000001)
self.clk.write(1)
time.sleep(0.000001)
self.clk.write(0)
self.dio.write(1)
self.clk.write(1)
self.dio.dir(GPIO.IN)
while self.dio.read():
time.sleep(0.001)
if self.dio.read():
self.dio.dir(GPIO.OUT)
self.dio.write(0)
self.dio.dir(GPIO.IN)
self.dio.dir(GPIO.OUT)
def _start(self):
self.clk.write(1)
self.dio.write(1)
self.dio.write(0)
self.clk.write(0)
def _stop(self):
self.clk.write(0)
self.dio.write(0)
self.clk.write(1)
self.dio.write(1)
def __enter__(self):
self._start()
def __exit__(self, exc_type, exc_val, exc_tb):
self._stop()
Grove = Grove4DigitDisplay
def main():
if len(sys.argv) < 3:
print('Usage: {} clk dio'.format(sys.argv[0]))
sys.exit(1)
display = Grove4DigitDisplay(int(sys.argv[1]), int(sys.argv[2]))
count = 0
while True:
t = time.strftime("%H%M", time.localtime(time.time()))
display.show(t)
display.set_colon(count & 1)
count += 1
time.sleep(1)
if __name__ == '__main__':
main()
すべてが正常に動作すれば、4桁のディスプレイに現在時刻が表示されます。
このプログラムを終了するには、++ctrl+c++ を押してください。
Raspberry Pi での操作 (GrovePi_Plus を使用)
ハードウェア
- ステップ 1. 以下のものを準備してください:
Raspberry Pi | GrovePi_Plus | Grove-4-Digit Display |
---|---|---|
今すぐ購入 | 今すぐ購入 | 今すぐ購入 |
- ステップ 2. GrovePi_Plus を Raspberry Pi に接続します。
- ステップ 3. Grove-4-Digit Display を GrovePi_Plus の D5 ポートに接続します。
- ステップ 4. USB ケーブルを使用して Raspberry Pi を PC に接続します。
ソフトウェア
- ステップ 1. Setting Software に従って開発環境を構成します。
- ステップ 2. GitHub リポジトリをクローンします。
cd ~
git clone https://github.com/DexterInd/GrovePi.git
- ステップ 3. 以下のコマンドを実行して音量を監視します。
cd ~/GrovePi/Software/Python
python grove_4_digit_display.py
以下は grove_4_digit_display.py のコードです。
# 注意: コロン付きの4桁赤色7セグメントディスプレイ、8段階の輝度レベル、ただし小数点はなし
import time
import grovepi
# Grove 4 Digit Display をデジタルポート D5 に接続
# CLK,DIO,VCC,GND
display = 5
grovepi.pinMode(display,"OUTPUT")
# アナログセンサーを A0 に接続して監視する場合
sensor = 0
grovepi.pinMode(sensor,"INPUT")
time.sleep(.5)
# 4桁ディスプレイのメソッド
# grovepi.fourDigit_init(pin)
# grovepi.fourDigit_number(pin,value,leading_zero)
# grovepi.fourDigit_brightness(pin,brightness)
# grovepi.fourDigit_digit(pin,segment,value)
# grovepi.fourDigit_segment(pin,segment,leds)
# grovepi.fourDigit_score(pin,left,right)
# grovepi.fourDigit_monitor(pin,analog,duration)
# grovepi.fourDigit_on(pin)
# grovepi.fourDigit_off(pin)
while True:
try:
print ("テスト 1) 初期化")
grovepi.fourDigit_init(display)
time.sleep(.5)
print ("テスト 2) 輝度設定")
for i in range(0,8):
grovepi.fourDigit_brightness(display,i)
time.sleep(.2)
time.sleep(.3)
# 最低輝度レベルに設定
grovepi.fourDigit_brightness(display,0)
time.sleep(.5)
print ("テスト 3) 先頭ゼロなしで数字を設定")
leading_zero = 0
grovepi.fourDigit_number(display,1,leading_zero)
time.sleep(.5)
grovepi.fourDigit_number(display,12,leading_zero)
time.sleep(.5)
grovepi.fourDigit_number(display,123,leading_zero)
time.sleep(.5)
grovepi.fourDigit_number(display,1234,leading_zero)
time.sleep(.5)
print ("テスト 4) 先頭ゼロありで数字を設定")
leading_zero = 1
grovepi.fourDigit_number(display,5,leading_zero)
time.sleep(.5)
grovepi.fourDigit_number(display,56,leading_zero)
time.sleep(.5)
grovepi.fourDigit_number(display,567,leading_zero)
time.sleep(.5)
grovepi.fourDigit_number(display,5678,leading_zero)
time.sleep(.5)
print ("テスト 5) 個別の桁を設定")
grovepi.fourDigit_digit(display,0,2)
grovepi.fourDigit_digit(display,1,6)
grovepi.fourDigit_digit(display,2,9)
grovepi.fourDigit_digit(display,3,15) # 15 = F
time.sleep(.5)
print ("テスト 6) 個別のセグメントを設定")
grovepi.fourDigit_segment(display,0,118) # 118 = H
grovepi.fourDigit_segment(display,1,121) # 121 = E
grovepi.fourDigit_segment(display,2,118) # 118 = H
grovepi.fourDigit_segment(display,3,121) # 121 = E
time.sleep(.5)
grovepi.fourDigit_segment(display,0,57) # 57 = C
grovepi.fourDigit_segment(display,1,63) # 63 = O
grovepi.fourDigit_segment(display,2,63) # 63 = O
grovepi.fourDigit_segment(display,3,56) # 56 = L
time.sleep(.5)
print ("テスト 7) スコアを設定")
grovepi.fourDigit_score(display,0,0)
time.sleep(.2)
grovepi.fourDigit_score(display,1,0)
time.sleep(.2)
grovepi.fourDigit_score(display,1,1)
time.sleep(.2)
grovepi.fourDigit_score(display,1,2)
time.sleep(.2)
grovepi.fourDigit_score(display,1,3)
time.sleep(.2)
grovepi.fourDigit_score(display,1,4)
time.sleep(.2)
grovepi.fourDigit_score(display,1,5)
time.sleep(.5)
print ("テスト 8) 時間を設定")
grovepi.fourDigit_score(display,12,59)
time.sleep(.5)
print ("テスト 9) アナログピンを監視")
seconds = 10
grovepi.fourDigit_monitor(display,sensor,seconds)
time.sleep(.5)
print ("テスト 10) 全てオンにする")
grovepi.fourDigit_on(display)
time.sleep(.5)
print ("テスト 11) 全てオフにする")
grovepi.fourDigit_off(display)
time.sleep(.5)
except KeyboardInterrupt:
grovepi.fourDigit_off(display)
break
except IOError:
print ("エラー")
- ステップ 4. 以下のように Grove-4-Digit Display が表示されます。
pi@raspberrypi:~/GrovePi/Software/Python $ python grove_4_digit_display.py
テスト 1) 初期化
テスト 2) 輝度設定
テスト 3) 先頭ゼロなしで数字を設定
テスト 4) 先頭ゼロありで数字を設定
テスト 5) 個別の桁を設定
テスト 6) 個別のセグメントを設定
テスト 7) スコアを設定
テスト 8) 時間を設定
テスト 9) アナログピンを監視
テスト 10) 全てオンにする
テスト 11) 全てオフにする
TI LaunchPadで遊ぶ
数字を表示する (4-Digital-Display)
この例では、Grove-4-Digital Display を使用していくつかのデジタル数字を表示する方法を示します。
/*
* TM1637.cpp
* 4桁ディスプレイ用ライブラリ
*/
#include "TM1637.h"
#define CLK 39 // TM1637のピン定義。他のポートに変更可能
#define DIO 38
TM1637 tm1637(CLK,DIO);
void setup()
{
tm1637.init();
tm1637.set(BRIGHT_TYPICAL);//BRIGHT_TYPICAL = 2,BRIGHT_DARKEST = 0,BRIGHTEST = 7;
}
void loop()
{
int8_t NumTab[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};//0~9,A,b,C,d,E,F
int8_t ListDisp[4];
unsigned char i = 0;
unsigned char count = 0;
delay(150);
while(1)
{
i = count;
count ++;
if(count == sizeof(NumTab)) count = 0;
for(unsigned char BitSelect = 0;BitSelect < 4;BitSelect ++)
{
ListDisp[BitSelect] = NumTab[i];
i ++;
if(i == sizeof(NumTab)) i = 0;
}
tm1637.display(0,ListDisp[0]);
tm1637.display(1,ListDisp[1]);
tm1637.display(2,ListDisp[2]);
tm1637.display(3,ListDisp[3]);
delay(300);
}
}
回路図オンラインビューア
リソース
- [Eagle&PDF] Grove-4-Digit Display V1.0 回路図
- [Library] 4-Digit Display ライブラリ
- [Library] TimerOne ライブラリ
- [Library] Four-Digit Display Suli ライブラリ
- [Library] CodeCraft コード
- [Datasheet] TM1637 データシート
- [More Reading] 木製レーザーガン
OVERWATCHにインスパイアされて、最近とてもクールな木製レーザーガンのおもちゃを作りました!
木製レーザーガンとガンターゲットは、Seeeduino LotusというArduinoボードをベースにしています。レーザーガンのレーザーエミッターは、レーザーパルスを発射してガンターゲットを「アクティベート」するように制御されています。そして、ガンターゲットにはレーザーパルスを検出するための3つの光センサーがあります。とてもシンプルに見えますよね?このプロジェクトに興味があるなら、自分やお子さんのためにぜひ作ってみてください!クリスマスプレゼントとして1日かけてDIYする価値があります。
プロジェクト
MSP430とGroveモジュールを使ったアラームクロック: MSP430F5529 LaunchPadとSeeedStudio Groveモジュールを使用して、自分だけのアラームクロックを作成しましょう。
時計 - Grove 4桁ディスプレイとPhotonを使用: GroveとTM1637をベースにした、4つのコンポーネントで作る最初の時計
技術サポートと製品ディスカッション
弊社製品をお選びいただきありがとうございます!製品をスムーズにご利用いただけるよう、さまざまなサポートを提供しています。お客様の好みやニーズに合わせた複数のコミュニケーションチャネルをご用意しています。