トップ ソフト 雑記 日記 リンク

2020年9月12日土曜日

ArduinoのSPIが上手く動かなかった話(解決?済)

結論:SPIの信号線を完全に分離しろ。

以前、Arduinoで二酸化炭素計を作ったのですが、最近どうも動きが怪しい。 PCに繋いだ状態で、シリアルモニタを有効にしていないと動かず、スタンドアロンでは動作しない状態でした。 シリアルモニタで状況を見ると動いて、状況を見ないと動かない・・・。まるで開発環境では動くのに、本番環境では動かないという良くあるアレです。
しかし、本当にこれでは困るので、なんとかしてスタンドアロンの状態で動作状況を確認したい。ということで、以前から購入していたものの使っていなかったLCDを追加して、状況表示をすることにしました。
使用するLCDは、PCD8544。Nokiaの携帯電話5110で使われていたディスプレイのため、5110という型番で呼ばれることも多いようです。
同じ液晶を使用している方のブログを参照してみると、液晶はだいたい同じなのですが、液晶が実装されている基板が異なるようで、ピンの番号や順番に違いがあるようです。このあたりは、手元にある部品のシルク印刷と照らし合わせながら合わせていきます。

そして実装。

これが、なぜか動いたり動かなかったりする。
正確には、最初は動くんだけど、すぐに動かなくなってしまう。
この症状には見覚えがあります。Arduinoのメモリが不足して処理が途中で転けているパターンです。
イーサネット&SDカードシールド、温度湿度気圧計、二酸化炭素計を搭載して既にライブラリでメモリがカツカツのところに、LCDのライブラリまで入ってきて、メモリが70%以上を消費しています。
LCDだけで動かすと問題が無いので、これはメモリ不足で間違いないと予測して、DHCP処理を外したり、ローカル変数で必要なメモリ量が動的になり後から必要になるメモリ量が読めない部分をグローバル変数にしてみたり、色々やってみたのですが、一向に解決しませんでした。

違う原因ではないかと、色々検索していたところ、別の機材とイーサネット&SDカードシールドの組み合わせで上手く動かないという現象と解決方法でした。
Arduinoのイーサネット&SDカードシールドと、PCD8544はSPI(Serial Peripheral Interface)という仕組みでArduino本体と通信をしています。
これは信号線とタイミング用のクロック線を共有し、相手先選択の線を利用して、通信相手を決定するというものです。

シリアル・ペリフェラル・インタフェース - Wikipediaより SPI three slavesen:User:Cburnett / CC BY-SA
  • MOSI(Master Out Slave In)
  • MISO(Master In Slave Out)
  • SCK(Serial Clock)
  • SS(SlaveSelect)
MOSI、MISO、SCKの3本を共有し、SSを機器別に1本ずつ用意してやれば、機械が一台増えるごとにSSを1本追加するだけでピンの数が節約できるというものです。
実際、イーサネット&SDカードシールドは、3本を共有し、残り2本のSSでSDカードとイーサネットの通信を切り替えているそうです。
ここで、PCD8544も同様に3本を共有し、PCD8544用のSSを1本追加して実装していたのですが、上手く動かないと書いていたブログでは、完全に信号線を分離したことで解決したと書かれていたので、こちらも分離してみることにしました。

あっさり稼働。
どうも、イーサネット&SDカードシールドのSPIに癖があるようです。
ということで、使用ピン数もだいぶギリギリの中、なんとか一台のArduinoの中に組み込むことができました。

ただ、シリアルモニタを開けないと動作しない点については、まだ何も解決していないのですが・・・。

2020年6月11日木曜日

謎の上から目線なjp講評

 mstdn.jpがいよいよ終わってしまうのかというところで、劇的な逆転でしたね。多くの日本人がjpをきっかけにFediverseへ飛び出したということもあり、いつも騒ぎになりやすいところではありますが、何かしら思い入れがある場所なのだと思います。

 きぼうソフト、DSNOについては、次の運営者にバトンを渡すということで、とてもよく頑張ってくれたと思います。自らの身を削って支えるという姿勢は、日本的な姿として一方では大変美しく目に映りますが、先行きの不安感という空気に対しての会社ごっこのような収支表では、とてもそれを払拭できたとは思えませんでした。新しい運営者による管理指標などの不安に対して、言葉で丁寧に対応している姿勢を見ていると、こんな解決方法もあったのではないかなと感じました。

 分散SNSにおいて、よそのサーバーに移動できるということは、安心できるところにひとは集まりやすくなるものです。サーバの管理者というのは、そのサーバの一番目のユーザーでもあります。自分が安心できる場所作りたい、そして同じ場所を提供したいという気持ちで公開しているのではないでしょうか。例え引き継いだとしても、それは変わらないでしょう。

 管理者以外のユーザーは、そこが安心できる場所かどうか、管理者を見ているのです。先代の管理者が方針に迷っている時にそのことを投稿したところ、フラフラするなという怒りを表す人がいたのを見ました。そのため極力人間味を出さない方針になってしまったのかなとも思え、このあたりはとても難しいバランスだったのだと思います。

 管理者が利用者に媚びろとか、イエスマンを集めろと言いたいわけではありません。ただ普段の行動から、そのサーバーの空気感というものを作っていけるのではないかなと思いました。漏れ伝わってくるjpの運営に対するギスギスしたものが、どうにも悲しく感じていました。

 つぎにまた新しい遊び場を用意してくれることがあれば、そのあたりも少し考えてもらえたらいいなと思いました。あとまだ3週間ほどありますが、ひとまずお疲れ様でした。

P.S.寄付窓口は結局無いままなんでしょうか。前に送ったメールに全く反応がなかったので、いきなりアマギフを送りつけるのもちょっと躊躇いがあります。

さらに追記:jp管理者による空気作りが、jpを踏み台にして別のサーバーへ進出していくために、あえて作られているのだとしたら、この記事は完全に的外れな恥ずかしい文章となります。

2020年4月12日日曜日

マイキーID作成・登録準備ソフトがインストールできない(解決済)

結論:作業用ディレクトリを指定するTMP・TEMP環境変数を元に戻せ

マイナンバーカード、使ってますか?
ていうか使うところがe-taxしかない。

いや、せっかく国が用意してくれた認証基盤ですし、使えるところが増えてくれば便利にはなると思うのですが、利用者が少ないものを使えるようにする予算はないということで、全て不況が悪いのです。

さて、マイナンバーカードがポイントカードになるというマイナポイントというサービスができました。
これを使うためには登録が必要とのことで、わたしも準備をしてみたのですが、インストーラーが途中で止まってしまって進まなくなります。

ここで止まる。

全くエラーなどは出ず、プログレスバーが100%まで進んだところから反応がなくなります。
タスクマネージャーを見ても暴走しているわけでは無く、全く負荷は掛かっていない。
キャンセルボタンを押しても反応しない。
タスクマネージャーから強制終了する必要があります。

InstallShieldを使っているので、どこかにログは出ていないか探してみたり、コマンドラインからログを出力するオプションを指定してみたり、圧縮されているexeファイルを分解して中のインストーラーを取り出して調べてみたりしたのですが原因が分からず、問い合わせ窓口に投げてみました。

まあ、Windowsを更新しろとか、ウイルスチェックを外せとか一般的な回答だったのですが、うちは素のWindows10環境だったので充分テストされている環境だろうと、一応言うとおりにしてみたものの全く効果はありませんでした。

ダメだったよーと返事を返しつつ、こっちでも他に調べてみた結果などを付けて「ただの素人では無い、分かっている人間」感を出してみたのですが、メールが行って返ってくるのに1ヶ月掛かり、3ヶ月(計6通)で解決に辿り着きました。

解決方法は最初に書いたとおり、どうやらインストーラーが展開する作業用ディレクトリと、実際に実行されるディレクトリが違うようで、これはインストーラースクリプトの不具合だよなぁと。
システムドライブが小さい、SSDを劣化させたくない、など色々な理由で作業用ディレクトリを変更している玄人はいると思います。今まであまりインストーラーで転けるという現象に出会ったことが無かったので、思わぬところでつまずいた感がありました。

この記事が誰かのお役に立てば、という思いで残しておきます。


2020年1月10日金曜日

zabbixの設定画面で、大量のグラフ項目を表示する

わたしは普段システムの監視にzabbixを使っているのですが、ずっと不満点がありました。

ディスカバリで生成される大量のグラフ項目のせいで、目的のグラフが見つけられないという問題です。


zabbixの管理画面では、アイテムやトリガーなどは絞り込み検索ができるのですが、グラフだけは絞り込みができず、表示される最大件数の1000件を超えてしまうことがありました。

この1000件制限を緩和したく調べてみたところ、データベースのconfigテーブルのsearch_limitカラムに記録されていました。


パフォーマンス的な理由で制限が掛けられているのだと思いますが、わたしのところでは増やしても問題は感じませんでした。

これWebUIから変更できないんですよね。
アカウントの設定画面にあった「ページあたりの表示行数」を増やしても、1ページの表示件数が増えるだけで1000件制限は変わらず最大ページ番号が縮むだけでした。

広告