MH-Z19C

秋月でCO2センサーを購入しました。
https://akizukidenshi.com/catalog/g/gM-16142/

これを、ATOM Matrix に接続して使ってみたいと思います。
CO2濃度に応じてLEDの色を変更するようにして使う予定ですが、とりあえずは測定できるところまで。
動作環境は MicoPython(UIFlow) です。

こちら
https://kohacraft.com/archives/1068007971.html
を参考に、測定できるようになったものが下記

import machine

uart1 = machine.UART(1,tx=23,rx=33)
uart1.init(9600)

uart1.write(bytes([0xFF,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79]))
ret=uart1.readline()

ret[2]*256+ret[3]

1000位の値が表示されたので、ちゃんと動いているようです。

データをどこかに登録するようにもしたいし、測定値でLEDの表示も変わるようにしたいので、まだまだこれからですね。


(2023/1/17)
上のリスト、細かいところで色々間違っていたので修正したのと、
コピペ用に下記を追記しました。

import machine
import time
uart1 = machine.UART(1,tx=23,rx=33)
uart1.init(9600)

while True:
    ret = uart1.write(bytes([0xFF,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79]))
    time.sleep(0.1)
    ret = uart1.readline()
    print(ret[2]*256+ret[3])

    time.sleep(5)

RGB LED Unit その2

UIFLOW の新しいバージョンで動作確認したのでメモ

v1.9.2 を使用

import unit

rgb0 = unit.get(unit.RGB,unit.PORTA)

# 全体の明るさ
rgb0.setBrightness(10)

# LED を個別に点灯
rgb0.setColor(1, 0xff0000)
rgb0.setColor(2, 0x00ff00)
rgb0.setColor(3, 0x0000ff)

# すべてのLEDを同じ色で点灯
rgb0.setColorAll(0xff0000)

# 範囲指定して LED を点灯
rgb0.setColorFrom(1, 3, 0xff0000)



# LED の点灯状態を固定する
# この状態で setColor 等を実行しても点灯状態は変化しない
rgb0.setShowLock(True)

# 点灯状態の固定を解除
# True のときに行われた変更を反映する(Matrix)
rgb0.setShowLock(False)

# True のときに行われた変更を反映する(M5Stack)
rgb0.show()

.setShowLock() の動作が M5Stack と ATOM Matrix で異なっていた。
UIFLOW のバージョンは v1.9.2-en と v1.9.2 なので同じと思われる。

M5Stack の方は .setShowLock(True) の状態でも、.show() を実行するとそれまでの変更内容がLEDの点灯状態に反映されるが、Matrix では反映されない。
.setShowLock(False)を実行した際、Matrix はそれまでの変更が反映されるが、M5Stack は変化せず。その後 .show() を実行することで反映される。

使う場合には注意したい。忘れそうだけど。

RGB LED unit

RGB unit を使ってみたのでメモ

import unit

rgb0 = unit.get(unit.RGB,unit.PORTA)

# 全体の明るさ
rgb0.setBrightness(10)

# LED を個別に点灯
rgb0.setColor(1, 0xff0000)
rgb0.setColor(2, 0x00ff00)
rgb0.setColor(3, 0x0000ff)

# すべてのLEDを同じ色で点灯
rgb0.setColorAll(0xff0000)

# 範囲指定して LED を点灯
rgb0.setColorFrom(1, 3, 0xff0000)

.setShowLock(True) / .setShowLock(False)

は使えないっぽい

ATOM Matrix で Micropython

ATOM Mtrix を Micropython で色々やってみようと思います。

UIFlow 用のファームウェアなので M5Stack 用の UNIT とか簡単に使えます。

ENV unit で各センサー値を読み出す

import unit

env0 = unit.get(unit.ENV,unit.PORTA)

print(env0.pressure)

print(env0.temperature)

print(env0.humidity)

UIFlow でブロックを配置しPython 表示にしたものを参考に、これだけで表示できました。

M5StickC のサンプルスケッチではまる

Arduino IDE に M5StickC ライブラリ (Version 0.1.0) をインストールして、いくつかサンプルプログラムを動かしてみました。

“スケッチ例 -> M5StickC -> Basics ” にあるプログラムを動かしてみた後、
“スケッチ例 -> M5StickC -> Games ” の Dices  を実行してみたのですが、LCDに「SHAKE ME」と表示されるものの、本体を動かしても何も変化がありません。

加速度センサの値をみて次の処理に進むプログラムになっていて、センサの不具合も疑ったのですが、スケッチ例の MPU6886 は正しく動作しているようなので本体の不具合では無さそうです。

他のサンプルスケッチ等調べたところ、IMU が SH200Q か MPU6886 かで使用するクラスを変更する必要がありそうなことが分かりましたので、とりあえず スケッチ内のM5.IMU. を すべて M5.MPU6886. に書き換えて実行してみると、本体を動かすとサイコロが表示されるようになりました。

M5StickC には IMU が2種類存在するようなんですが、ライブラリで自動判別とかしてくれないのですね。

と、https://github.com/m5stack/M5StickC を見てみたら、次のバージョンではM5.IMU. に統合されるっぽいですね。最新のものを直接ダウンロードすれば問題なかったのかも。

 

 

M5StickC 買いました

obniz OS の記事を見て、そろそろM5Stackを買ってみても良いかなぁ、と思いスイッチサイエンスさんで検索したところM5StickCを見つけ、値段につられて買ってみました。

とはいうものの、スイッチサイエンスさんは品切れだったので購入したのは共立エレショップさんです。スイッチサイエンスさんではHATだけでも買おうかと2~3日悩んでいる間に次々と品切れに。とりあえず買っておくべきだったなぁ。

micro:bitよりも安く、小さいのに画面があってバッテリー内臓というのはすごいですね。ケースに入っているし持ち歩くならこっちの方が気楽です。

Raspberry Pi で fMSX を動かす

Raspberry Pi で MSXエミュレータである fMSX をビルドして動かしてみます。
このページ(I2Cで制御できる80円のPSG互換チップで遊ぼう)で紹介されている動画の内容をやってみたいな、というのが最終目的ですが、今回はビルドができてエミュレータが動作するところまで。

準備

Raspbian は 2018-11-13-raspbian-stretch-full.img を使用しました

https://fms.komkon.org/fMSX/ からファイルをダウンロード
今の最新は 5.4 なので、fMSX54.zip です。

ビルドする

適当にディレクトリを作成して fMSX54.zip をコピーした後

unzip fMSX54.zip
cd fMSX/Unix
make

ファイルが足りずに怒られたので必要なファイルを追加

sudo apt install xorg-dev
sudo apt install libpulse-dev

再度挑戦

make

できました。
fmsx という実行ファイルが作成されます。

動かす

ROMファイルと同じディレクトリに fmsx をコピーして実行
(fMSX54-Windows-bin.zip を解凍すると必要なファイルは揃いました)

./fmsx

とりあえず、これで fMSX を動かすことができました。

が、音が鳴りません。
LPC810 を接続してそこからだけ音が出れば良いのであればここまでですが、Raspbian上でも音を出したい場合は PulseAudio を追加します。

sudo apt install pulseaudio

これで、音も出るようになりました。

 

DesignSpark Pmod HAT と Pmod I2S

という事で、DesignSpark Pmod HAT と Pmod I2S を使用する時の注意点としては、下記の点でしょうか。

・Pmod HAT に Pmod I2S を直接取り付けると配線がおかしいので動かない
・/boot/config.txt に dtoverlay=hifiberry-dac を追加すれば音は出る

使うの面倒な気がしてきます。
が、何か根本的に間違っているんじゃないかと心配にもなっていたり。

 

※なお、接続先はこんな感じです。

1 MCLK —- 40ピンコネクタの12ピン (Pmod HAT JAの10ピン)
2 LRCLK —- 40ピンコネクタの35ピン (Pmod HAT JAの8ピン)
3 SCK —- GND  (Pmod HAT JAの11ピン)
4 SDIN —- 40ピンコネクタの40ピン (Pmod HAT JAの7ピン)
5 GND —- GND  (Pmod HAT JAの11ピン)
6 VCC —- 3.3V   (Pmod HAT JAの12ピン)

ピン配の変換基板でも作らないと、接続するだけでも大変ですね。

 

 

DesignSpark Pmod HAT を使ってみる(3)

DesignSpark Pmod HAT  と Pmod I2S を接続していろいろやってみても音が出ないので、Pmod HAT か Pmod I2S の不良を疑ってみました。

とりあえず、Pmod I2S と Raspberry Pi を Pmod HAT 無しで接続してみます。

BCK  —-  40ピンコネクタの12ピン
LRCKLRCLK)  —-  40ピンコネクタの35ピン
MCKSCK)  —-  無し
SDATADATA)  —-  40ピンコネクタの40ピン

となるそうなので、Pmod I2S のピンと Raspberry Pi のコネクタをジャンパワイヤーでつなぎます。Pmod I2S の SCKピンは GND につなぎました。

この状態で
/boot/config.txt

dtoverlay=hifiberry-dac
を追記して.wav ファイルを再生したところ、それっぽい音が出るようになりました。音が割れたようになり、ノイズっぽいのが気になりますが、全く音が出なかった状態に比べるとだいぶ前進しています。

と、ここで、あらためてPmod HAT の回路図を見てみると、Pmod HAT の JAコネクタと、Pmod I2S のピンの接続が、一致していないことが分かりました!

・Pmod HAT は 接続されている 40ピンコネクタのピンの番号
・Pmod I2S は 接続されるべき 40ピンコネクタのピンの番号
として並べてみると、下記のようになっていました。
Pmod HAT    Pmod I2S
35    —-    12
40    —-    35
38    —-    GND
12    —-    40
GND    —-    GND
3V    —-    3V

I2S信号である 12ピン、35ピン、40ピンの接続が見事にバラバラです。
これで音がでるはずがありません。専用のモジュールだからピン配は正しいはず、と思い込んでいたため、だいぶ時間を無駄にしてしまいました。

Pmod HAT と Pmod I2S の組み合わせで使用するには、ピンアサインの変換基板を作るか、ジャンパワイヤーでピンを入れ替えて接続する必要があるということになりますので、Pmod HAT を使う利点がなくなってしまいますね。

ノイズっぽい状態は未だ原因分からないし、とりあえず、ラズパイコンテスト用には Pmod I2S は使用しないことにしようと思います。

DesignSpark Pmod HAT を使ってみる(2)

接続するところは分かったので、Pmod I2S を使用して音を出してみようと思います。

DesignSpark Pmod HAT を Raspberry Pi に取り付け、Pmod I2S を Pmod HAT の JA コネクタの下段に取り付けます。ハードウェア的な接続はこれで終わりのはず。

Raspberry Pi で I2S を使う方法を検索してみると、
/boot/config.txt
に、
dtoverlay=
でドライバを使うよう設定すれば、オーディオデバイスとして使えそうなことが分かります。

Pmod I2S で使用している CS4344 というデバイスの使用例が見つからないのが気になりましたが、I2S は 音声信号を送るので違うデバイス用のドライバでも何かしらの音は出るだろう、と
dtoverlay=rpi-dac

dtoverlay=hifiberry-dac
と追記してみたのですが、何も音が出ません。

オシロスコープで Pmod I2S のコネクタを1ピンずつ見てみると、それっぽい信号は出ています。(1ピンずつ、ってのは失敗でした)
とりあえずモジュールの不具合を疑ってみましたが、見た目には問題なさそうなので、指定できるドライバを順番に変更してみたりもしましたが、結局、この日に音が出ることはありませんでした。