2018年9月23日日曜日

Raspberry Pi zero で TM1638 を使う

電子工作で試作するときTM1638 という基板が便利です。
LED、SW、7seg を既存のマイコンに増設できる拡張基板みたいなものです。
しかし、操作には特殊なプロトコルが必要です。

Arduino も Raspberry Pi もTM1638を簡単に操作するライブラリが出ているので使ってみました。
Raspberry Pi版は日本語でまとまった資料が無いので、この記事でまとめておきます。


●やったこと

TM1638 + python で以下の操作をできるようになった。
  • 7segに数値表示
  • LEDの点灯(緑/赤)
    私のTM1638は$6くらいのちょっとお高いもので、緑表示もできます。
    安いものは赤のみです。
  • SW入力の検出


●やってないこと

TM1638の2個以上連結

●回路接続


TM1638 : rasPi zero
VCC : 3.3V
GND : GND
DataIO : GPIO19
clock : GPIO13
STB0 : GPIO6
STB1 : GPIO26

黄色がTM1638のピンです
回路引用元 
https://www.raspberrypi.org/documentation/hardware/raspberrypi/schematics/README.md
ライセンスは CC BY-SA 3.0 です。




●使うパッケージ

rpi-TM1638
https://github.com/thilaire/rpi-TM1638
pythonで操作するためのもののようです。
HP内容通りにインストールすれば簡単に動くはず...
...と思ったのですが。動かず。
だいぶ苦労しました。


●成功したインストール方法

全てターミナルでやりました
まず、ホームディレクトリに移動します。

rpi-TM1638のパッケージをGithubから持ってきます。
5分くらい時間かかりました。
$ git clone https://github.com/thilaire/rpi-TM1638.git

ホームにrpi-TM1638ディレクトリが生成されているので移動します
$ cd rpi-TM1638/
setup.pyを実行します。
sudoしておく必要があります。sudoしないとエラーが出ます。
1分くらい時間かかりました。
$ sudo python setup.py install
これでインストール完了。
サンプルコードを動かせる環境が整いました。



●失敗したインストール方法

rpi-TM1638の説明ではpip install が使えると書いてあるのでやってみましたがダメでした。
$ pip install rpi-TM1638
    Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
    Collecting rpi-TM1638
      Could not find a version that satisfies the requirement rpi-TM1638 (from versions: )
    No matching distribution found for rpi-TM1638
    このようなエラーが出る

pip upgrade したけど結果変わらず。
$ sudo pip install --upgrade pip
あきらめて、git clone ... で入手して成功しました。



●テスト実行

$ python test_TM.py
これでエラーは出ますが動きました。
7segに数値表示されます。
LED1が点灯します。
24行目でエラーが出ました。
24行目をコメントアウトして、正常作動しました。


●サンプルコード

test_TM.py を改造しました。
Ctrl-c で終了してください

# coding=utf-8
from time import sleep
from rpi_TM1638 import TMBoards

# GPIO設定
DIO = 19
CLK = 13
STB = 06, 26

# 宣言
TM = TMBoards(DIO, CLK, STB, 0)

TM.clearDisplay()

TM.leds[0] = True    # LED0を点灯
TM.sendData(3, 2, 0)    #LED2赤点灯

TM.segments[1] = '0'        # 左から2桁目に0を表示
TM.segments[3] = '25676'    #左から4桁目から25676を表示

#SWの押下状況を取得
while True:
    a=TM.getData(0)
    print("val> " + str(a))
    sleep(0.5)


●各操作 LED点灯

TM.leds[0] = True         #LED1(index:0)を点灯(緑)
TM.leds[1] = True         #LED2(index:1)を点灯(緑)
TM.sendData(3, 2, 0)    #LED2(index*2+1=3) を赤(2)に。緑(1)消灯(0)
赤点灯はlow level api でないと行えなかった。


●各操作 7seg表示

TM.segments[3] = '256.76'
4桁目([3]+1=4)から'256.76'を表示


●各操作 スイッチの取得

.switchesはエラーが出る。
以下に示す .getdataで取得できるが、4個のリストで帰ってくるので少し面倒
while True:
    a=TM.getData(0)
    print("val> " + str(a))
    sleep(0.5)
返値)
    SW1 pushed : val> [1, 0, 0, 0]
    SW2 pushed : val> [0, 1, 0, 0]
    SW5 pushed : val> [16, 0, 0, 0]
    SW1 and SW6 pushed : val> [1, 16, 0, 0]

●所感

パッケージ内容が色々ひどい(笑)
  • HPの説明通りには動かない。
  • gitの説明が雑
  • def updateSwitches()
    が # TODO: to be continued で終わってる
  • パッケージのソースに.switchesが見当たらないんですが・・・


●参考URL

   

0 件のコメント:

コメントを投稿