iMac(2015)をどうしようか問題

そういえば、うちにあるiMacがほとんど使われないまま机の上に鎮座しているという事実に気がついてしまった。

購入当時は、iOSのプログラミングを勉強しようと思って、10万円程度で購入しました。

CPUは催促では無かったですが、当時はそこそこのもの。第4世代のCorei5だったと思う。

一時はメインPCとして使用していましたが、結局メモリが8GBしかないことに不満があり、ノートPC(Windows、SSD、メモリ16GB)を購入して以来はほとんど使用していないままテーブルの上に存在していました。

SSDに慣れてしまったら、HDDには戻れません。

しかも結構ディスプレイが大きいのよ。

で、iMacを退かしたら、広いスペースができました。

これは・・・

ディスプレイもう一個買っちゃう?

今のメインPC、メモリ32GBだからディスプレイ余裕で一個追加できるよぉ。

なんなら4枚まで追加できるよぉ。

とりあえず、今のディスプレイと同じ大きさのディスプレイを購入しました。

12000円。

そして、最終的にiMacをどうするか問題に行き着く。

iOSのプログラミングって、そんなにやる機会って無いよね。

売るとしたら、どれくらいするんだろう?

2~3万ぐらい出るかな?

調べてみます。

【ラズパイ】【温湿度計】温湿度計AM2320を使用する。

さて、GLCDもある程度やり尽くしたので、新しいデバイスを使用することにしました。

温湿度計AM2320です。

設置。

配線はこんな感じ。

このデバイスはI2Cバスを使用して温湿度を取得することができます。

I2Cバスってなんぞや?ということなんですが、SDL/SDAの2ピンを使ってデータを送受信できるみたいです。

具体的には、SDLにクロック信号と組み合わせてSDAにデータを送信して・・・

って難しいことを考えなくても、ラズパイにはI2Cに対応したモジュール・ライブラリがあるんです。

ちょっと設定を弄るんですけどね。

こちらのサイトを参考にさせて頂きました。

https://qiita.com/twinoze/items/c960eea23c57e342ea4b

先人の知恵を借りるのは大事。

sudo raspi-config

でコンフィグメニューが出るので、

これでI2Cが有効になります。

i2cdetect -y 1

5cと表示できれば認識しているとのことです。

が、100%認識できるかというと、大体50%ぐらいの確立で認識できないケースがありました。

バスリピータを使えば回避できるとのことですが、こう何度も発注を繰り返すと送料が高く付いてしまうので、プログラム側で回避することにしました。

このようにサンプルコードを作成しました。

import time
import smbus

i2c = smbus.SMBus(1)
address = 0x5c

loop = True
block = []
while loop:
    try:
        i2c.write_i2c_block_data(address, 0x00,[])
        i2c.write_i2c_block_data(address, 0x03,[0x00, 0x04])

        time.sleep(0.05)

        block = i2c.read_i2c_block_data(address, 0, 6)
        loop = False
    except IOError:
        pass

hum = block[2] << 8 | block[3]
temp = block[4] << 8 | block[5]

print('hum : ' + format( hum/10) + ' %Rh')
print('temp: ' + format(temp/10) + ' digC')

smbusというライブラリを使えば、I2Cバスへのアクセスが簡単になります。

タイミングチャートとか意識する必要なく、全部ライブラリでやってくれます。

やるべきことは、

  • 初期化
  • ファンクションコード0x03にスタートアドレスとレジスタ数を書き込み
  • データを読み取り

これだけ。

これはデータシートにある、

この部分に合致しています。

そして、I2Cにアクセスできない場合がある問題はtry/catch処理で回避させました。

エラーが発生したら、アクセスが成功するまで再試行を繰り返します。

これで100%アクセスに成功できます。

さて、次回はこれをライブラリ化させてGLCDに表示させましょうか。