趣味の電子工作などの記録。時にLinuxへ行ったり、ガジェットに浮気したりするので、なかなかまとまらない。2コンテンツへスキップともの技術メモ趣味の電子工作などの記録。時にLinuxへ行ったり、ガジェットに浮気したりするので、なかなかまとまらない。2019年10月17日UM232HモジュールPythonでFTDIのチップをUSB経由で制御するpyftdiというモジュールを見かけました。ドキュメントをみると、UARTだけではなく、GPIO、SPI(master)、I2C(master)、JTAG(master)としても動作しそうな感じです。そこで、随分昔から積みボードになっていたUM232Hというモジュールで動かそうとしたところ、PWRのLEDすら点灯しません。dmesgを見ても、なんのログもでていません。Piに変えても状況は同じです。これは使い物にならん、と捨てようかと思っていたところ・・・・、資料が見つかりました。(もっと早く見つけろよ^^;)これをパラパラっと眺めていたところ、という感じで、TXD/RXD、RTS/CTSの他に何やら配線が・・・しかも、電源っぽいのが・・・必要そうです。ttyUSB0という感じで、無事に検出してくれました。無事にLEDも点灯しています。台風19号BME280+ESP32でAmbientに上げているデータによると、21:24頃の965.6hPaが気圧の底のようです。970hPaを切ったあたりからの風はものすごかった・・・。その後、急速に気圧は回復してきていますが、雨の被害が大きくなってきているようで心配です。風は収まってきたかと思ったのですが、吹返しの風が吹き始めてきました。約二日間の気圧変化の推移。2019年10月8日CO2センサをポチってみた最近、眠気とCO2の濃度に関係があるというのを読んでCO2センサを物色しています。前までは少し大きめのセンサでそこそこ値段も張っていたのですが、最近はCCS811というMEMSタイプのセンサがでてきているようで、価格もこなれてきました。そこで、CCS811について(いつもの)Aliexpressで物色して、ポチってみました。CCS811を搭載した基板は何種類かあるようなのですが、SI7021という湿度センサとBMP280(温湿度+気圧センサのBME280の湿度なしバージョン)を一緒に載せたもの、HD1080という温湿度センサを一緒に搭載したものがあるようです。CCS811単品のものが一番安いです。CO2(の他にTVOCもCCS811は測定できます)だけではなく、温湿度・気圧も測れれば・・・と思ったのですが、意外に気になるのは温度は自己発熱の影響を受けることです。Modeでは0.034mW@Vdd=1.8Vなのですが、1秒に1回測定するモードでは46mW、10秒に1回では7mW、60秒に1回では1.2mWの電力を消費します(Vdd=1.8V時)。ENV_DATAレジスタというのがあり、温度・湿度を設定すると、それに応じて測定値を補正する機能があるようです。(スイッチサイエンスなどのサイトでは、オプションでNTCサーミスタでの温度補正ができるように書いてあるところがありますが、製品変更通知CN25-2017でサポートされない旨、記載されています)したがって、一緒に搭載されている温湿度センサーは、CCS811の補正用ということだと思われます。補正用の温湿度センサーがない場合には、デフォルト値の25°C50%を前提にして動作するものと思われます。データシート上の書き方としては「外部の温湿度センサが利用できる場合には補正に利用できる」という表現になっていますので、今回はCCS811が単独で載っているものをポチってみました。2019年9月29日BluePillボードへの書き込みアダプタ少し前に試してみたSTM32F103C8にArduinoのスケッチを書き込む話ですが、USBだけ使いたいというケースがでてきたため、ヘッダピンを半田付けせずに書き込みができるような治具を作ってみました。端子との接続はインサーキットテスタ用のテストピンを3Dプリンタで作ったホルダーに挿入して、基板にはんだ付けしたものを使っています。ピンの内部にバネが入っていて、端子が伸縮するので接触性は良好です。実際に使う際には下の写真のようにランドに押し付けて接触させておいて、USBシリアル基板にUSBケーブルを接続します。押し付けたままにしておく必要があるのですが、基板を大きくせず(=端子を半田付けせず)に書き込みができるようになりました。value型のデータベースとしてよく使われているらしいredisをちょっとだけ触ってみた。dockerで動かしてみる。雷センサーAS3935ずいぶん前に秋月で買った雷センサーAS3935を使って、しばらく前に雷センサーロガーを作りました。仕様としては、CPUにはPIC16F18857を使用、時計ICにRTC8564NBを使用したRTCモジュールに、液晶にI2C接続の液晶モジュールを使用、記録は24LC256のE2PROMに保存するというものになっています。電源は単三電池が3本ですので、持ち歩くにはやや大きいものになっています。電池の持ちとしては約3ヶ月程度くらいと思います。制作後、最初は作業卓の近くの窓際に置いていたのですが、PCや3Dプリンタなどのノイズをかなり拾うようで、妨害イベントがかなり検知されました。弱い雷もあるにはあったのですが、鉄筋コンクリート造りでは肝心の落雷を検知せずに、ノイズが偽の落雷イベントとなっていると思われるものが少なくありませんでした。そこで、途中から部屋のもう一つの窓際に置いたところ、PCや3Dプリンタなどのノイズの影響は受けなく鳴りました。この窓も窓の外は2〜3mほど離れて隣の棟が建っており、電波状況としては良くなく、AMラジオも内蔵バーアンテナでは受信できません。(ちなみに、AS3935は雷が発する500kHz近傍のノイズを電波として受信して動作している)今年は近所で雷が鳴るということもあまり多くなく、以降の動作確認が難しかったのですが、昨日は関東地方でかなり雷が鳴ったようで、自宅近くでもそこそこ雷が鳴りました。鉄筋コンクリート造の屋内設置で、窓際とはいえ窓の外も鉄筋コンクリート造の建物が建っているという条件はかなり厳しいようで、かなり反応はするものの、検知できる条件は雷の音がすでに聞こえる状況くらいでした。屋外設置する方法を考えたいところですね。NTP時計にBME280を追加して気圧・温度・湿度を表示するようにしてみました。(台風15号が直撃するらしい、というのがきっかけです^^;)ついでに、表示した値は1分間に1回、MQTTで自宅内のMQTTブローカに向けてsubscribeするのと、Ambientに送信するようにしました。併せて、昔作ったLPS331APを使用した電池タイプの気圧計に3Dプリンタでケースを作ってみました。青いほうがESP32+BME280、黒いほうがPIC1823+LPS331APです。LPS331APに比べて、BME280の方が1.5〜2hPaほど高めの値が出るようです。BME280の方が圧倒的に値が安定していて安定性では比較になりません。気温については、置いている場所がルータや無線LANのアクセスポイント、スイッチングハブ、ポータブル温冷庫などが置いてるところの上なので、結構温度は高めに出ています。(温度は湿度にはもちろん影響していますが、気圧には影響はなさそうです)Ambientに気圧をアップロードしてみた結果は以下のような感じです。上の画像が送信し始めてしばらくの様子です。台風15号は小型なので、影響が出てくるのが遅いようです。このグラフでもBME280は値が安定していることがわかるかと思います。接近し始めるとどんどん下がっていっています。【追伸】夕方頃にはこんな感じになりました。低かったのは、朝4時38分の977.53hPaのようです。ちなみに、天気図はこんな感じ。台風15号は小型で強い台風だったので、気圧が急激に下がり、急激に回復したようです。Mint19を入れ直して使っています。eMMCのLinux側からは事故等でWindows10を触ってしまわないように、ブートオプションでSATAを禁止してあります。セキュリティアップデートをかけるために増設したSSD(240GB)に移してあるWindowsを起動したまま放置していたら、更新して〇〇になっていたので、更新して再起動を選択したら・・・1903のインストールを始めやがりました。これが悪夢の始まりでした。1903のインストール完了(かな?)の後の再起動をしたら、Windowsのブートローダがいません。Windowsが起動できるはずもありません。しかたがないので、そのまま持参せずにおでかけ(何のためのノートPCなんだか・・・)しました。帰宅後に、修復を試み始めたのですが、ブートローダの修復にはWindowsのインストールメディアが必要なことがわかりました。1903のインストールイメージを持ってきたら・・・・4.8GBあって、1層のDVDメディアでは容量不足で書き込めません。BD-Rメディアにも書き込めません。0xA001B」というエラーで作成ができません。このコードだけ表示するエラー、何が原因かさっぱりわからないので、ものすごく頭にきます。ネット上にたくさんある、WindowsのHowTo的なページも1903でのメディア作成の方法については肝心な部分が暈してあるものが多く、実際のところはトラブルが多いのではないかという気がします。悪戦苦闘して、なんとか起動メディアが作成できたのですが、どうも、USBメモリのパーティションテーブルがMBRになっているとダメで、GUIDパーティションテーブルでUSBメモリが初期化されていて、しかもWindows上で領域のフォーマットがされていないとダメな感じがします。(ひょっとしたら、NTFSも条件かもしれない)しかし、これで起動してもインストール済みのWindows10のアップデートかクリーンインストールかを選択する画面しか出力されず、ブートローダのインストールはできませんでした。結局、eMMC側のLinuxMint19でSATAを禁止するのをやめました。記述してあった、「GRUB_CMDLINE_LINUX_DEFAULT」の起動時オプションの「libata.force=disable」を削除しました。エントリーにWindows10を追加させました。上でWindowsが起動できるようになりました。実際には更新は完了しておらず、なんどかまた再起動した後に、無事に1903になりました。結局のところ、grubを検出すると、Windows10の更新プログラムはブートローダをインストールせず(というか消去して)、grubに任せるような挙動になっているのかもしれません。自分はLinuxとWindowsで環境をキッチリ分けたいので、以前のやり方が気に入っていたのですが、今後はダメなのかもしれません。ちなみに、壁紙が以前より明るくなっているのですが、自分は嫌いです。NTP時計ESP32モジュールと昔買って余っていたグラフィック液晶でNTPで時刻取得する時計を作ってみました。部屋には電波時計があるのですが、鉄筋コンクリートの構造だと全然時刻合わせができませんでした。今だと電波時計よりも無線LAN+NTPの方が便利かもしれません。ファームウェアはPlatformIOで作ってみました。https://tomono.tokyo/wordpress/wp-content/uploads/2019/08/clock.mp4今のところは画面は上半分しか使っていませんが、I2Cの端子は空けてあるので、下半分はBME280モジュールを追加して温湿度+気圧を表示するか、ネットワークの状態を監視して状況を表示するか、そのあたりで考えています。アナログっぽい表示にするかもしれません。それにしても昔の液晶モジュールなので、インタフェースがパラレルで配線本数が多くて大変です。あと、GPIO34以降は入力専用であることに気づかず、表示が出なくてハマりました。ケースはこれから適当に現物合わせで設計して3Dプリンタで出力しようかと思います。LinuxMintこちらの記事でESP32(など)の開発にとても魅力的な文言が並んでいたので、PlatformIOを試してみました。Codeも試してみたいと思っていたところでもあります。環境はもちろんいつものLinuxMint19、64bit版です。こちらの手順に沿ってすすめます。Codeの.debパッケージをダウンロードしてパッケージシンストーラでインストールします。起動したら、左のメニューの中のExtensionsをクリックします。IDEが出てくるので、そのInstallボタンをクリックします。Now」をクリックして再起動します。あっという間にインストールが完了しました。10分もかかってないと思います。Project」をクリックしてESP32のプロジェクトをインポートしてみます。IDEはチェックせず、Arduinoで保存したESP32のNTPのサンプル(SSID/パスワードは記入済)をインポートしてみます。Projectでインポートしたプロジェクトを開いてみます。インポートしたソースが表示されるので、これをクリックすると、ソースコードが開きました。クリックしてインストールします。書き換えることが推奨されるので、クリックして表示されるWebページに従って書き換えます。ファイルを削除というものです。下の方の水色のバー(ステータスバーのようなもの)に色々メニューが入っているようです。シェルやシリアルモニタもあります。b」で速度を変更できますので、115200に変更しました。IOアイコン(マウスオンで少し静止するとアイコン名が表示される)をクリックすると、PlatformIOのタスクが表示されるので、Buildをクリックするとコンパイルが実行されます。Uploadをクリックすると、ファームが書き込まれて実行されました。書き込み後、シリアルモニタに戻るのですが、設定が元に戻ってしまうようです。こちらに従って書き換えると、初期値を変更できそうです。115200を最後に書き足すだけで大丈夫でした。確かに簡単に導入できて、便利そうです。