MH-Z19B CO2センサにケースを作りました

記事を公開するのを忘れていましたが、MH-Z19B CO2センサーにケースを作りました。

WeMOS WiFi&Bluetooth Batteryの上部にMH-Z19Bセンサを埋め込みました。

写真でも、実際に見ても見えませんが、右側面にタッチセンサを内部から貼ってあります。これにタッチするとOLEDディスプレイに写真のようにCO2ガスの濃度を15秒間表示します。表示の残り時間が下のバーグラフです。

ソフトウェアも更に変更と機能追加を行いました。これまで、Auto CalibrationはONで動作していましたが、これをOFFで動作(起動)するように変更しました。ただ、補正したいときに困るので、MQTTでコマンドを送ると、Auto CalibrationをONにすることができるようようにしてあります。Auto CalibrationがONになっている場合には、OLEDの右上に小さく「CAL」と表示するようにしてみました。

OLEDの下の穴は基板上のタクトスイッチを押すための穴です。奥がBOOT、手前がENです。

sshで公開鍵認証を設定

同じRasperry Piに繰り返しsshでアクセスするのに面倒なので、後悔カギ認証を設定します。

1.鍵の生成

~/.ssh ディレクトリで、ssh-keygenコマンドをただ実行すれば、対話的に作成できます。コマンドラインでオプションで指定してもいいのですが、覚えるのが面倒なので。

~/.ssh$ ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/home/USERNAME/.ssh/id_rsa): id_rsa_(ホスト名)
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in id_rsa_(ホスト名)
Your public key has been saved in id_rsa_(ホスト名).pub
The key fingerprint is:
SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx (ユーザー名@ローカルホスト名)
The key's randomart image is:
+---[RSA 3072]----+
|        =oo.. o +|
|       .+=o+ = o+|
|     . o.E* + o.+|
|      B o+O=.+  o|
|   . = =S+.+o.. +|
|    o o. o. .  o.|
|        .        |
|                 |
|                 |
+----[SHA256]-----+
~/.ssh$

2.接続先への転送

以下のようにssh-copy-idコマンドを使うと勝手にやってくれます。

~/.ssh$ ssh-copy-id -i id_rsa_(ホスト名).pub pi@(ホスト名).local

これで、

~/.ssh$ ssh pi@(ホスト名).local

で接続できます。全然簡単なのでした。

BluePillボードのいい感じの端子配置図

http://reblag.dk というサイトの http://reblag.dk/stm32 の中にいい感じのBluePillボードの端子図があったので、自分のメモ用に転載しておきます。ライセンスは CC BY-SA となっています。とても綺麗で見やすい。

上記は画像にして貼ってありますが、オリジナルのPDFファイルは下記。

回路図の方はあちこちに同じものが載ってるのだけど、見やすいものは これ(https://freeelectron.ro/bare-metal-stm32-led-blink/blue-pill-schematic/)かなぁ?URLは書いてあるのだけど、そこを探しても同じものは見つからない。
他に、PDFファイルへのリンクがあるページはこれ(https://github.com/ruiqimao/keyboard-pcb-guide/issues/17)かなぁ。

Seeeduino Xiaoを使ってみる

秋月で580円で売っていたSeeeduino Xiaoを動かしてみます。用途は特に決めていませんが、この小ささと価格ならインタフェースとして埋め込んでもいいと思って買ってみました。

まずは、Arduinoで使えるようにします。お決まりの「環境設定」⇒「追加のボードマネージャのURL」で、ボードマネージャに以下を追加します。

https://files.seeedstudio.com/arduino/package_seeeduino_boards_index.json

追加したら、「ツール」⇒「ボードマネージャ」で「Seeed SAMD Boards」を探して、「インストール」をクリックしてインストール。試しに使ったマシンのスペックがショボかったので、インストールに結構時間がかかりました。インストールが完了したら、ボードとして「Seeeduino XIAO」を選択します。ボードを選択したら、とりあえずサンプルスケッチとしてBlinkを選んでみます。ビルドも問題なく成功したので、シリアルポートにttyACM0を選んで書き込んでみました。

・・・が、書き込みは一瞬で完了。見た目は何も変わりません。もともと書き込まれているのが2秒周期のBlinkなので区別が付かないためです。そこでソースコードのdelay()の値を変えて再度書き込んだら無事に変化があり、ちゃんとコンパイルされたものが書き込まれていることが確認できました。とても小さくて安価ですし、Flashへの書き込みが爆速なのと、書き込み時にスイッチ操作などは要らないのでこれはいいかもしれません。I2CやSPI、UARTもあるので、最近のデバイスをちょっと動かしてみるには便利なんじゃないかと。

参考URL:
https://wiki.seeedstudio.com/Seeeduino-XIAO/

nslookup,digの使い方メモ

いつもnslookupやdigの使い方を調べてる気がするので、メモを作ります。

nslookup

nslookupのよくある使い方

$ nslookup [ドメイン名] -[DNSサーバ]ドメイン名とDNSサーバを指定して検索する
$ nslookup対話モードに入る(以下、対話モード)
> server DNSサーバDNSサーバを指定する
> ホスト名検索を行う

dig

digのよくある使い方

$ dig ドメイン名基本的な使い方
$ dig -x IPアドレスIPアドレスからの逆引き
$ dig ANY ドメイン名すべてのレコードを出力する
$ dig ドメイン名 +short
$ dig -x IPアドレス +short
IPアドレス、ホスト名のみを返す。シェルなどで使う。
例)
$ echo 'dig google.com +short'
172.217.161.78
$ dig @DNSサーバ ドメイン名使用するDNSサーバを指定する。
例) $ dig @8.8.8.8 example.com
$ dig ドメイン名 +norecDNSサーバで保持しているキャッシュのみで問い合わせを行う。
$ dig ドメイン名 +traceルートDNSから順に調べる

LinuxでUARTターミナルプログラムを使う

LinuxのUARTのターミナルプログラムといえば、minicomかscreenだと思います。しかし、どちらもいまいち欠点があります。minicomはエスケープシーケンスがターミナルと一致してないのか、画面が崩れます。screenの方はウインドウのスクロールバーが使えなくなります。

CuteComを使ってみる

で、なにかないか試してみたのがcutecomです。

インストールはsynapticからでもaptからでもいいと思います。インストールが成功すると、メニューのシステムツールの中にCuteComが出てきます。実行すると、通信パラメータの設定もGUIでできます。

・・・が、結論から言うと、ダメでした・・・。1行分の入力をしてから送信なので、補完機能のあるシェルが相手だとかえって効率が落ちるのでした。

gtktermを使ってみる

インストールはaptでgtktermをインストールすればOK。インストールすると、メニューの「アクセサリ」の中に「Serial port terminal」というのが出てくるので、これで起動できる。補完機能のあるシェルでも問題なく利用できそう。これを使っていくことにします。

TinyYOLO2でのオブジェクト検出

MaixPy M1 Dockでのデバッグ環境が一応整ったので、こちらの記事にあるオブジェクト検出にトライしてみます。

リンク先にあるmaixpy_20class.zip をダウンロードしてきて、kflash_guiで20class.kmodelを0x500000を指定してダウンロードします。

ダウンロードを開始すると次のような感じになります。

ダウンロード完了後、MaixPy IDEを起動して、20class.pyを開いて動かすとオブジェクト検出ができました。

MAiX M1 Dockで試してみる

IDE上に画面が表示されなかったM1nですが、M1 Dockでも動くようなのでこちらを試してみます。

ファームウェアのアップデート

手持ちのM1 Dockはファームのバージョンが古いので、更新する必要があります。ファームはhttps://dl.sipeed.com/MAIX/MaixPy/release/master/から最新と思われる「maixpy_v0.5.1_124_ga3f708c」をダウンロードしてきました。

アップデートを行う環境は、python3の仮想環境を作ってその中に構築して、バージョンアップを行います。

~$ mkdir python3
~$ cd python3/
~/python3$ sudo apt install python3-venv
~/python3$ python3 -m venv maixpy
~/python3$ cd maixpy/
~/python3/maixpy$ source bin/activate 
(maixpy) ~/python3/maixpy$ pip3 install --upgrade pip
(maixpy) ~/python3/maixpy$ pip3 install pyserial
(maixpy) ~/python3/maixpy$ sudo apt install git
(maixpy) ~/python3/maixpy$ git clone https://github.com/sipeed/kflash.py.git kflash
(maixpy) ~/python3/maixpy$ cd kflash/
(maixpy) ~/python3/maixpy/kflash$ python3 ./kflash.py -p /dev/ttyUSB0 -b115200 maixpy_v0.5.1_124_ga3f708c.bin 
[INFO] COM Port Selected Manually:  /dev/ttyUSB0 
[INFO] Default baudrate is 115200 , later it may be changed to the value you set. 
[INFO] Trying to Enter the ISP Mode... 
._
[INFO] Automatically detected goE/kd233 

[INFO] Greeting Message Detected, Start Downloading ISP 
Downloading ISP: |===================================================================================================================| 100.0% 10kiB/s
[INFO] Booting From 0x80000000 
[INFO] Wait For 0.1 second for ISP to Boot 
[INFO] Boot to Flashmode Successfully 
[INFO] Selected Flash:  On-Board 
[INFO] Initialization flash Successfully 
Programming BIN: |===================================================================================================================| 100.0% 10kiB/s
[INFO] Rebooting... 
(maixpy) ~/python3/maixpy/kflash$ 

バージョンアップ完了後、MaixPy IDEを起動してサンプルを動かすと、無事に動作しました。

なお、モデルは、

$ wget https://github.com/sipeed/MaixPy/releases/download/v0.3.2/face_model_at_0x300000.kfpkg

でダウンロードしてきましたが、ここでは使いませんでした。

kflash GUI版

kflashはGUI版があるようです。
https://github.com/sipeed/kflash_gui

以下のようにしてきてダウンロードして起動します。

(maixpy) ~/python3/maixpy$ git clone  --recursive https://github.com/sipeed/kflash_gui.git
Cloning into 'kflash_gui'...
Submodule 'kflash_py' (https://github.com/sipeed/kflash.py.git) registered for path 'kflash_py'
(maixpy) ~/python3/maixpy$ cd kflash_gui/
(maixpy) ~/python3/maixpy/kflash_gui$ pip3 install -r requirements.txt
(maixpy) ~/python3/maixpy/kflash_gui$ python3 kflash_gui.py 
icon path:/home/xxxxxxxx/python3/maixpy/kflash_gui/kflash_gui_data/assets/logo.png
config file path: /home/xxxxxxxx/.config/kflash_gui/kflash_gui.conf
data path:/home/xxxxxxxx/python3/maixpy/kflash_gui/kflash_gui_data
2
The latest is v1.6.5, now:V1.6.5

MAiX M1nを試してみる

秋月で買って積みボードになっていたMAiX M1n nanoを試してみます。秋月に新商品として出ているのを見て、こちらの動画を見て買ってみたものの、そのまま積みボードになっていました。

MaixPy IDEのインストール

こちらのページを見てMaixPy IDEをインストールしますが、まず、readme.txtをみると、

1. Firmware MUST >= 0.4.0_44 !!!!!
   Firmware MUST >= 0.4.0_44 !!!!!
   Firmware MUST >= 0.4.0_44 !!!!!

    Download firmware from here:  
        ------------------------------------------------------------------------------------------------------------
            http://dl.sipeed.com/MAIX/MaixPy/release/
            http://dl.sipeed.com/MAIX/MaixPy/release/master ( auto build from master branch (development commits, may not stable) )
        ------------------------------------------------------------------------------------------------------------

ということで、ファームウェアバージョンは0.4.0_44以上じゃないとダメということです。たぶん、MicroPythonのバージョンだと思うのですが、確認するとv0.5.0でした。なので、そのまま進めます。
で、IDEの方をダウンロードしようとしたところ、いきなりダウンロードで引っかかってしまいました。理由はいまいちわかりませんが、wgetで引っ張ってきたらダウンロードできました。

$ wget http://dl.cdn.sipeed.com/maixpy-ide-linux-x86_64-0.2.5.run
--2020-10-11 23:29:08--  http://dl.cdn.sipeed.com/maixpy-ide-linux-x86_64-0.2.5.run
dl.cdn.sipeed.com (dl.cdn.sipeed.com) をDNSに問いあわせています... 47.89.66.145
dl.cdn.sipeed.com (dl.cdn.sipeed.com)|47.89.66.145|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 85063710 (81M) [application/x-executable]
`maixpy-ide-linux-x86_64-0.2.5.run' に保存中

maixpy-ide-linux-x86_64-0.2.5.run     100%[=======================================================================>]  81.12M  8.30MB/s    in 12s     

2020-10-11 23:29:25 (6.58 MB/s) - `maixpy-ide-linux-x86_64-0.2.5.run' へ保存完了 [85063710/85063710]

$ sha256sum maixpy-ide-linux-x86_64-0.2.5.run 
2641082c56105a7c33b2abc319b3b76fc022601e234b4f6379edd90c62a6a5c2  maixpy-ide-linux-x86_64-0.2.5.run
$ chmod +x maixpy-ide-linux-x86_64-0.2.5.run
$ ./maixpy-ide-linux-x86_64-0.2.5.run 

チェックサムもreadme.txtと一致して問題ないようなので、実行属性をつけてインストーラを実行します。実行すると、MaixPy IDE 設定ウィザードが起動します。(日本語で表示されました)

インストール先ディレクトリの指定、使用許諾への合意、インストールの順に進みます。インストールはすぐに終了します。

メニューに追加されたMaixPy IDEを起動すると、サンプルプログラムを読み込んだ状態になります。

左下にある緑色のチェーンのアイコンをクリックすると、MaixPyと接続するためのシリアルポートを聞いてきますので、ttyUSB0などを適切に指定します。しばらくすると、下の方にファームウェアバージョンなどが表示されて、チェーンのアイコンが赤くなります(クリックすると切断できます)。で、その下の再生ボタンをクリックすると、コードを実行するようで、FPS表示が出ます。

一方で、切断した状態で、「ツール」→「ターミナルを開く」→「新ターミナル」でポートとしてシリアルポートを選択すると、シリアルコンソールが開きます。で、ターミナル側の再生ボタンを押すと、RPELでコードを実行するようです。

冒頭の動画では、シリアルコンソールの右上部分にカメラ画像が表示されるのですが、残念ながら表示されませんでした。ぐぐってみると、PC側のUSBコントローラによって出たり出なかったりがあるようです。USB2.0のオンボードホストでは動作はするけど画像は出ない。USB3.0のHUBの先だとそもそも全く認識しませんでした。

おまけ

いろいろ調べている中で興味深いな、と思ったのが、K210のベンダーであるCanaanについての記事がいろいろあるこちらのページです。