質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
シリアルポート

シリアルポートは一度に一ビットごと移行される物理的なインターフェイスです。一般的には、9ピンのd-subコネクタであるRS-232を指します。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

2391閲覧

raspberrypi4を使ってmh-z19を使いたいです

yuyuyumememe

総合スコア2

シリアルポート

シリアルポートは一度に一ビットごと移行される物理的なインターフェイスです。一般的には、9ピンのd-subコネクタであるRS-232を指します。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/09/09 14:03

編集2021/09/09 14:21

前提・実現したいこと

raspberrypi4でCO2濃度センサmh-z19を使ったpythonのプログラムを作っています。
ターミナルでsudo pip3 install mhz-19と打ちモジュールをインストールしました。
次に動作確認のために、sudo python3 -m mh_z19と打つと、通常なら{'co2': 494}などと出るはずがnullになってしまいます。
このサイトを参考にしました。
ラズパイでMH-Z19を使用して二酸化炭素濃度を取得する

発生している問題・エラーメッセージ

usage: __main__.py [-h] [--serial_device SERIAL_DEVICE] [--serial_console_untouched] [--version | --all | --abc_on | --abc_off] [--span_point_calibration span] [--zero_point_calibration] [--detection_range_10000] [--detection_range_5000] [--detection_range_2000] [--pwm] [--pwm_range range] [--pwm_gpio gpioBCM] __main__.py: error: unrecognized arguments: all

該当のソースコード

sudo python -m mh_z19 all

試したこと

ジャンプワイヤを新しいものに取り換えました。
電源を落とし、配線した状態でraspberrypiを起動しました。
シリアルポートを開放しました。

補足情報(FW/ツールのバージョンなど)

raspberry4をVNC Viewerで操作しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

AbeTakashi

2021/09/09 14:51 編集

__main__.py: error: unrecognized arguments: all ですから引数がおかしいと言われてると思うのですが、'all'という引数を渡しているのは本当に正しいのでしょうか? 以下修正 https://github.com/UedaTakeyuki/mh-z19 を見てみたら --all が正しいようです。
yuyuyumememe

2021/09/09 15:38 編集

回答ありがとうございます! 教えていただいた通りに sudo python -m mh_z19 --allでうちなおしてみたのですが 9としか返りません。sudo python3 -m mh_z19と打つとnullでした https://qiita.com/revsystem/items/76ab1e21d386c5977892 この記事によると9やnullが返るのはおかしいようなので、コマンドの問題ではなさそうです
AbeTakashi

2021/09/09 16:26

なるほど、物理的な問題のようですね。こちらの問題は'--all'にすることでコマンド自体は問題なかったということで自己解決にしていただくのが良さそうです。
thkana

2021/09/09 23:12

参照先 > RX⇒Txd TX⇒Rxd とするのは謎 とか言っちゃってるところを参考にするのはかなり勇気が要りますが、まぁ自分の知識でなくてまた聞きを書いているだけでしょうから大丈夫かしら。 シリアルの接続まわりが怪しいということなら、 ・センサを外し、Raspberry pi側でRxとTxを直結してシリアルのエコーバックができているか ・センサを繋いで、仕様書(例えば https://akizukidenshi.com/download/ds/winsen/MH-Z19C_20210518.pdf )を見ると、0x86を送ると応答が返るようですからなにか返っているか あたりから確認してみてはいかがでしょうか。Raspberry pi4もそのセンサも持っていないので(RP2BとZeroWはあるのだけれど、シリアル周りが違うとか)私の手元での実験はできませんが。
guest

回答2

0

自己解決

センサ自体の不良でした。
sudo python3 -m mh_z19 -allのコマンドで9やnullが返ってくるのは、信号を読み取れていないときの挙動のようです。新しいセンサで試したところちゃんと動きました。

投稿2021/10/29 10:13

yuyuyumememe

総合スコア2

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

私自身は当たったことがないのですが信号のレベルが足りていないセンサ個体があるようで、こちら のように プルアップ することで読めたという報告をいくつか頂いておりますので、僭越ながらご参考になるかと存じご紹介させていただきました次第です

シリアル経由で読めない場合でも、なぜか PWM では読めたという報告も大昔[^1]からいくつも伺っておりまして、プルアップがめんどくさい等の御事情がございます場合、まずは[こちら](https://github.com/UedaTakeyuki/mh-z19/wiki/PWM-support.)の PWM を使った読み取りを試してみていただくのもお勧め致します次第でございます、デュポンケーブルも3本で済むし生の GPIO を触るので設定ミスとかなにもないし、calibration とかしないのなら PWM って以外とイケてますよ分解能はちょっとおちるのですが

[^1]: https://qiita.com/UedaTakeyuki/items/c5226960a7328155635f の @kexroman さんのコメントが最初だったので、5年前からポツポツ伺っておりました

投稿2021/09/17 14:13

編集2021/09/19 13:15
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

thkana

2021/09/19 13:23

> 信号のレベルが足りていないセンサ個体がある この辺はもう少し具体的な状況を知りたいところですね。「当たり」が出ないと調べようもないですけれど。 > なぜか PWM では読めた ここは「なぜか」とつく話なのですか? ほぼ独立した機能かと思いますが。しかし、RaspberryPiではちょっと時間精度に不安がありますね。まぁ、時間あたり変動の大きな測定でもないのでたくさんのデータをとって平均してしまえばよいのかも。
退会済みユーザー

退会済みユーザー

2021/09/20 01:43 編集

MH-Z19 の内部についての無知ゆえ、Serial でも PWM でも信号レベルは同じになるものと勝手に思っておりました、実は内部でほぼ独立しているので信号レベルも違うという理解でよろしいでしょうか。勉強になりましたことを感謝いたします次第です
thkana

2021/09/20 01:48

いや、私もそのモジュールの内部を知っているわけではありません。が、「普通」ロジック出力はほぼ0~Vddをスイングするもので、信号のレベルが足りないという状況がそもそもかなり異常なことなので、なにかUARTモジュールに限定した症状ではないかと(全くの想像として)思えるのです。(そもそも本当に「レベルが低い」ということなのかどうかすらわかりません) もちろん、そのレベルが低い原因によっては、全ての出力に影響が及ぶ可能性もあります。 なんにせよ、ちゃんとした原因と対策を知りたいですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問