スキップしてメイン コンテンツに移動

Raspberry pi の設定など(その3:Node.js の問題と赤外線リモコンの設定)

  その2ではRaspberry piの基本設定と日本語入力設定、外部へのメール送信設定までを書きました。

で、その続きを書こうとしたらトラブル続出。

こっちのセットアップが終わって、次のセットアップしたら、こっちが動かなくなったとか色々。ソフトのバージョンの問題とCPUの世代の問題に、いい加減な半田付けのツケが回ってハードのトラブルもあって訳がわからん状態に。

デスクトップも使って設定したいし、動作が遅いのも嫌だからとRaspberry Zeroで動かす予定のセットアップをRaspberry 3で行っていたのもいけませんでした。ZeroはCPUの世代が古いのでサポートされないものがあって、Zeroに載せ替えたら動かなくなったり。

と言うことでまずはZeroに載せる予定ならば「Node.js」の問題から。

Zeroでは最新の Node.js がサポート外になりました。そのためNode.js絡みの問題が発生します。私の場合、NODE-RED のインストールが出来なくなりました。で、こちらは開発元(の有志なのかな?)が未公認のZeroでも動く最新版を公開しています。って何のこっちゃ?

社内的には未公認だけど、ユーザーから見りゃ半公認って感じですかね。

ここに元ネタがありますが、基本は以下のコマンドを入れれば良いだけ。

とりあえずは古いものを削除します。

$ which node  でnodeのインストール先を調べて、

$ sudo rm -rf /usr/bin/node

$ sudo rm -rf ~/.npm  ついでにこっちも

でインストールは

$ wget https://nodejs.org/dist/v10.17.0/node-v10.17.0-linux-armv6l.tar.xz

$ tar -xvf node-v10.17.0-linux-armv6l.tar.xz

sudo cp -R node-v10.17.0-linux-armv6l/* /usr/local/

rm -rf node-v10.17.0-linux-armv6l node-v10.17.0-linux-armv6l.tar.xz

最初のURLはそのうちにバージョンが進めばまた変わる(サポートしてくれるなら)ので、ちゃんとトレースしておくべきなんでしょうけど、まあその時はその時。というよりZeroのCPUのバージョンアップを期待していたりして。(笑)

しかしたったこれだけの事にかなり労力を使ってしまいました。

多分他の作業に先立って行えば楽なのではないかと・・・ 私はトラブってから対応したのですけど。


で、Node.js が片付いたので、赤外線リモコンに移りましょう。

こっちのハードウェアの話などは昔の情報のままで良いので割愛。

で、設定の方は少し変わります。

英語ですがこのサイトが詳しくて分かりやすかったです。

私も苦手な英語ですが、私以上に苦手な方もいる様なのでとりあえず手順に沿って必要な箇所だけ書き出させて頂きます。

まずは lirc のインストール。原文では古いapt-getになってますがここではaptにしておきます。

sudo apt install lirc

インストールはこれだけ。次に設定ですが、

$ sudo nano /boot/config.txt  別にnano でなくても好きなエディタで編集してください。

で、以下の部分コメント行のコメント(#)を外します。

#dtoverlay=gpio-ir,gpio_pin=17

#dtoverlay=gpio-ir-tx,gpio_pin=18

なお、17と18は原文では逆に設定し直していますが実際に送受信に使うピン番号(BCMの番号)を指定してください。

私は22と23にしています。物理ピン番号では15、16番、GPIO番号だと3と4になりますね。

ちなみに私の場合17と18はサーボモーター用に使っています。問題がない限り先に製作したサーバーで使用した番号を使って、混乱を避ける様にしています。

次がlircのオプション指定。

$ sudo nano /etc/lirc/lirc_options.conf

で次の部分を修正します。

#driver         = devinput

#device         = auto

driver          = default

device          = /dev/lirc0

上の2行をコメントアウトして、下の2行を追加します。

$ sudo reboot  で再起動すればlircが利用可能になります。

$ sudo systemctl status lircd

コマンドでステータスが見れる様になります。

で、とりあえず赤外線リモコンのコードを読み込んでみます。

$ sudo mode2 -m -d /dev/lirc0

でここで以下の様なエラーに見舞われた方(参考にしているサイトの方も私もエラーが出ました)はとりあえず /boot/config.txt を編集して以下の行をコメントアウトしてください。

#dtoverlay=gpio-ir-tx,gpio_pin=18

要するにとりあえず出力側は無視して使おうと言う事です。
修正後に再度リブートし、さらに一度lircdを停止します。
sudo systemctl stop lircd
これでもう一度リモコンを読み込んでみましょう。

$ sudo mode2 -m -d /dev/lirc0

画面にバラバラと数字の羅列が出てきていたら読み込み成功です。
停止は ctl + c で強制的の止めてください。

で私の場合ここでも上手く読めませんでした。
原因はGPIOの設定。どこかで間違って設定したのか・・・
GPIO 3が出力になっていました。上の例だとGPIO 0に相当しますね。
悩んだ挙句 $ gpio mode 3 in ってこれだけで解決。

どこで気がついたかと言うと、受信素子にオシロスコープを繋いで波形を見ていて気がつきました。
素子単体で測定するとちゃんと信号が出ている。しかしGPIOに接続すると信号が出ない。信号線はプルアップされているはずなのに、なぜかほぼゼロ。ん? 何で? って $ gpio readall で眺めていて気がつきました。
自分でもアホだなーと思います。でも在宅勤務のおかげで客先デモ用のオシロスコープが家にあって助かりました。普段は邪魔だ!と言っていましたけど。
以下の様に表示されればOKです。
この中で重要なのは赤字の部分。後で説明します。

$  sudo mode2 -m -d /dev/lirc0
Using driver default on device /dev/lirc0
Trying device: /dev/lirc0
Using device: /dev/lirc0
Running as regular user pi
 16777215

     3208     1537      443      360      465     1129
      443      361      441     1152      444      358
      444     1153      465      335      444     1160
      459      343      466     1131      466      335
         
         
         ・
     467     1130      451      324      493      343
      467     1130      466      336      466      335
      466      336      466     1130      466      336
      467      336      466     1126      465   139479-pulse^C


さてちゃんと信号が取れるのを確認したら次のステップ。
$ sudo irrecord -d /dev/lirc0 --disable-namespace
のコマンドで赤外線を読んで行きますが、ここが分かりにくかったです。
最初にごちゃごちゃと説明が出てきてとりあえずボタンを押せと言われます。ボタンを押すたびにドット(.)が表示されるのですが一体何?

実はこの時はリモコンの色々なボタンを準不動で押しまくってください。
実際の機器が動かない様に送受光部分を塞いでおく方がいいですね。
ともかく同じリモコンの色々なボタンを押す事で、リモコンのパルスの出力精度と受信精度のばらつきを測定している様です。
コマンドを叩くと以下の様にごちゃごちゃとメッセージが表示されます。
赤字が入力。で、単なるリターンの入力は赤字で「rt」としておきました。
TV用のリモコンを登録している様子です。

$ sudo irrecord -d /dev/lirc0 --disable-namespace
Running as regular user pi
Using driver default on device /dev/lirc0

irrecord -  application for recording IR-codes for usage with lirc
Copyright (C) 1998,1999 Christoph Bartelmus(lirc@bartelmus.de)

This program will record the signals from your remote control
and create a config file for lircd.

A proper config file for lircd is maybe the most vital part of this
package, so you should invest some time to create a working config
file. Although I put a good deal of effort in this program it is often
not possible to automatically recognize all features of a remote
control. Often short-comings of the receiver hardware make it nearly
impossible. If you have problems to create a config file READ THE
DOCUMENTATION at https://sf.net/p/lirc-remotes/wiki

If there already is a remote control of the same brand available at
http://sf.net/p/lirc-remotes you might want to try using such a
remote as a template. The config files already contains all
parameters of the protocol used by remotes of a certain brand and
knowing these parameters makes the job of this program much
easier. There are also template files for the most common protocols
available. Templates can be downloaded using irdb-get(1). You use a
template file by providing the path of the file as a command line
parameter.

Please take the time to finish the file as described in
https://sourceforge.net/p/lirc-remotes/wiki/Checklist/ an send it
to  <lirc@bartelmus.de> so it can be made available to others.

Press RETURN to continue. rt

Checking for ambient light  creating too much disturbances.
Please don't press any buttons, just wait a few seconds...

No significant noise (received 0 bytes)

Enter name of remote (only ascii, no spaces) :TV
Using TV.lircd.conf as output filename

Now start pressing buttons on your remote control.

It is very important that you press many different buttons randomly
and hold them down for approximately one second. Each button should
generate at least one dot but never more than ten dots of output.
Don't stop pressing buttons until two lines of dots (2x80) have
been generated.

Press RETURN now to start recording.
(注:ここでリモコンの色々なボタンを押すと以下の様にドットが表示される)
................................................................................
Got gap (74399 us)}

Please keep on pressing buttons like described above.
(注:ここでもリモコンの色々なボタンを押す。前回は反応しなかったボタンも反応する様になってくる。)

...............................................................................

Please enter the name for the next button (press <ENTER> to finish recording)
on

Now hold down button "on".
(注:入力した文字に対応するボタンを押す。)

Please enter the name for the next button (press <ENTER> to finish recording)
bs

(注:以下同様にボタンの名前と対応するボタンを押すのとのセット)

Now hold down button "bs".

Please enter the name for the next button (press <ENTER> to finish recording)
ch1

Now hold down button "ch1".

Please enter the name for the next button (press <ENTER> to finish recording)
ch2

Now hold down button "ch2".


Please enter the name for the next button (press <ENTER> to finish recording)
rt
Checking for toggle bit mask.
Please press an arbitrary button repeatedly as fast as possible.
Make sure you keep pressing the SAME button and that you DON'T HOLD
the button down!.
If you can't see any dots appear, wait a bit between button presses.

Press RETURN to continue. rt
Timeout (10 sec), giving up


、で ls をかけると以下の様なテンポラリファイルが出来上がっています。

-rw------- 1 pi pi 1540 10月  1 08:25 irrecord-tmp-mP051A

中身を cat してやるとこんな感じです。

# Please take the time to finish this file as described in
# https://sourceforge.net/p/lirc-remotes/wiki/Checklist/
# and make it available to others by sending it to
# <lirc@bartelmus.de>
#
# This config file was automatically generated
# using lirc-0.10.1(default) on Fri Oct  1 08:22:49 2021
# Command line used: -d /dev/lirc0 --disable-namespace
# Kernel version (uname -r): 5.10.60-v7+
#
# Remote name (as of config file): TV
# Brand of remote device, the thing you hold in your hand:
# Remote device model nr:
# Remote device info url:
# Does remote device has a bundled capture device e. g., a
#     usb dongle? :
# For bundled USB devices: usb vendor id, product id
#     and device string (use dmesg or lsusb):
# Type of device controlled
#     (TV, VCR, Audio, DVD, Satellite, Cable, HTPC, ...) :
# Device(s) controlled by this remote:

begin remote

  name  TV
  bits           48
  flags SPACE_ENC
  eps            30
  aeps          100

  header       3505  1691
  one           484  1256
  zero          484   384
  ptrail        484
  gap          74399
  toggle_bit_mask 0x0

      begin codes
          on                       0x40040100BCBD
          bs                       0x400401400E4F
          gd                       0x400401402E6F
          ch1                      0x400401900293
          ch2                      0x400401908213
          ch4                      0x40040190C253
          ch5                      0x4004019022B3
          ch6                      0x40040190A233
      end codes

end remote


しかし私の場合、そのままでは上手く動作しませんでした。
別途 $ sudo mode2 -m -d /dev/lirc0 のコマンドをリダイレクトして適当なテキストファイルに書き出した生データを編集してやる必要がありました。
sudo mode2 -m -d /dev/lirc0 > 「適当なファイル名」

 begin codesとend codesの代わりにbegin raw_codesと end raw_codesで挟んで
各ボタンに対応する先ほど赤字で示した生データ部分を書き込みます。
以下の様な感じです。

      begin raw_codes

      name    on

     3208     1537      443      360      465     1129
      443      361      441     1152      444      358
      444     1153      465      335      444     1160
      459      343      466     1131      466      335

         
         
         ・
      467     1130      451      324      493      343
      467     1130      466      336      466      335
      466      336      466     1130      466      336
      467      336      466     1126      465

      end raw_codes

end remote


最後にこのファイルを /etc/lirc/lircd.conf.d/適当なファイル名.conf にコピーしてやります。

後もう一つ、同じフォルダに devinput.lircd.conf というファイルがあるのでこの最後の拡張子を適当なものに変更しておきます。

ここのフォルダにある .conf というファイルは全て読み込まれる様です。

で、上記の例だと最初にあるName である TV と各生データの名前、on を組み合わせて送信に使用します。


$ irsend SEND_ONCE TV on


という感じですね。


おっと、受信時にエラーを起こして/boot/config.txt を編集した方は元に戻してリブートするのをお忘れなく。

また編集していなかった方は lircd の再起動をお忘れなく。

いっそリブートしたほうが早いかな?


追記:

忘れかけておりましたが、私は時々時間指定でコマンドを発行します。

通常は Crontab で設定すれば良いのでしょうが、私の場合 Crontab で毎日の日の出・日の入り時刻をチェックし、その日の入り時刻をベースにしたコマンドを実行したりしています。

そのために必要なコマンドが「at」コマンドですが、Rspberry pi では標準ではインストールされておりません。

なので、

$ sudo apt install at

でインストールしています。

普通の方にはあまり縁のない話とは思いますが、備忘録として。

先ほどもatコマンド叩いて「あれ? 動かない」ってなったもので。


続きはまた。

コメント

このブログの人気の投稿

iPhone を日常使う上での注意(ちょっとした不具合を解消するには)リセットの仕方

先日は バックアップの重要性 について書きましたが、今日は日常の注意を書いて見たいと思います。 まずは充電の方法から。 皆さん、充電時にはどんなことに注意していますか? 充電は、できるだけバッテリーを使い切るぐらいまで行わず、できれば80〜90%で終了させましょう・・・・なんてやっていませんか? 以前にも 充電について 書きましたが、基本的には「気にする事は無い!」です。 好きな時に充電をし、好きな時に終えれば良いです。 上記の注意は「ニッケル系」のバッテリー、つまり市販の単三型などの充電式バッテリーについての注意です。昔はニッケルカドミウム、今ではニッケル水素のバッテリーですね。 これは、時々リフレッシュさせる必要があります(昔の人工衛星も年に2回ほどリフレッシュ運用というものを行っていました)。 しかし、現在携帯電話に使用しているリチウムイオン系のバッテリーでは其の様な事は必要ありません。 と言うより、ニッケル系の様なリフレッシュ運用はかえってバッテリーの寿命を縮める(充放電回数を無意味に増やす)だけです。 バッテリー一般の注意である、充電中に熱を持たない様に注意する(寝る時に布団や枕に覆われた状態で充電するなど)こと、電子機器一般の注意である日向や暖房機の前に放置しない、などを守れば十分です。 何故かは良く分かりませんが、昔の iOS では充電時のマークが、稲妻マーク(充電中)とプラグマーク(充電器に接続されているが充電はされていない:充電は終了している)に分かれていました。 今は同じ稲妻マークだけですが、ひょっとしたらプラグマークになるとあわてて充電器から外そうとする人がいるのを懸念しての仕様変更かもしれません。 基本的に「充電器に接続されている」「Wi-Fi に接続されている」「スリープ状態にある」という三つの条件を満たしていれば、1日に一回「iCloud による自動バックアップ」が実行されます。 一番条件の揃いやすいのは就寝時ですよね? つまり少なくとも寝る前に充電を開始して、朝まで放置しましょうというのがアップルの考え方。その間にバックアップしておきますよという事ですね。 さてその寝る前にあなたは何かしていますか? 私はほぼ毎日、寝る前には動作しているアプリを全て終了させています。 「 何のため? 」それは

スマホの充電

今までも時々 充電に関する話 を書いておりますが、仕事の関係でちょっと調べ物をしていて、そのまま横道に逸れて(内緒ね)人工衛星のバッテリー設計の話をちょこっと摘んできました。 その中で、「放電深度」の話があって、ちょっと面白いので簡単に紹介しようと思います。 新品のリチウムイオンバッテリーがあるとしてその容量を分かりやすく1000mA/h とします。 100%充電されていたとして、そのバッテリーから1000mAの電気を取り出した時が100%、 500mAだけ取り出した時は 50% 、そして300mAしか取り出さなければ 30% を「放電深度」と言います。 よく言われるのは「 80% から 20% まで使って、また 80% まで充電するのが最も良い」と言うものですが、これは 前のブログ で間違っているよと言いました。 80% から 20% ならば 0.6 回利用した計算だよと。 で、最終的に何回充電出来るかは決まっていると書いたのですが、これが間違っていました。 これが放電深度100%では最も回数が少なく、放電深度を50%に(つまり 100% から 50% の間で充放電を繰り返す)と回数的には3倍以上の回数、つまり寿命が3倍以上になるとの 報告 などがあります。 さらに 30% に抑えるとさらに伸びます。 色々調べるとそれが当たり前の様です。 静止衛星の場合でも1日に一回充放電を繰り返すわけですが、周回の人口衛星だと1日に数回地球を回るので、充電期間(昼間上空を通過する時)と放電期間(夜間上空を通過する時)が1日に数回あるわけです。 そんな中で設計時の放電深度は25%程度で設計されている様です。 つまり、放電期間を終了して充電開始時に 75% 以上あって、充電期間を終了する時には100% まで充電されている。 もちろんその間地球観測の観測機械がフル稼働(特に光学観測の場合は昼間が観測時間帯です)してますから、もろに充電しながら使っている状態です。 スマホで「バッテリーが 75%に減ったら、即充電器に繋いで充電しながら使う」って言ったら「バカか! バッテリーがダメになるぞ」って脅されますよね。 でも人工衛星ではそれが常識みたい。 むしろバッテリーを少しでも長持ちさせるためにはその様にすべきの様です。 確か

Apple ID の変更方法

2017/06/10 :追記 Apple ID の変更方法が変更されました。 以下の最新情報をご確認下さい。 アップルIDの変更 Apple ID をキャリアのメールアドレスなどで作成し、その後にキャリアのメールアドレスを変更してしまい、困っている方が多い様です。 皆さん Apple ID に利用しているメールアドレスを変更すれば、iPhone に使用している Apple ID のメールアドレスも自動的に変更されるものと、勘違いしている様に思います。 また、Apple ID はキャリアのものと勘違いしているのか、キャリアを変更したのだから、Apple ID もそのまま、次のキャリアメールのアドレスになると思っている方も、おられるようです。 Apple ID はあくまでもAppleが発行するIDです。 キャリアとは無関係で、キャリアにそのIDに関する情報が渡ることもありませんし、キャリアの情報がAppleに渡ることもありません。 IDに使用するメールアドレスを変更したいのであれば、自分でAppleのウェブサイトで手続きする必要があります。 https://appleid.apple.com/ja_JP にアクセスすると、「Apple ID を管理」というボタンがあります。 そこで、現在の(あるいは勝手に変更してしまう以前の)メールアドレスでログインし、手続きをします。 ここで、新しく利用したいメールアドレスを追加すると、本人確認のメールがそのメールに届くので、メールに記載されているURLにアクセスすると、承認されます。 メールアドレスが承認されると、そのメールアドレスをIDに登録し直せます。 最終的にIDのメールアドレス変更直前に、iPhone(該当 iOS 機器やMac 全て)の iCloud と iTunes & App Store から一度ログアウトしてください。 その際に、iPhone にデータを残す必要はありません。 新しいメールアドレスの ID でログインすればまた同期されてデータが戻ります。 残してしまうと、再同期の際に間違ってマージしてしまい、データが二重登録される可能性があります。 もっとも再同期の際に間違えて、iPhone の(何もない)データで、iCloud を上書きすると、全てのデ

「iCloud では全てがバックアップ出来ない」という大誤解

iOS デバイスのバックアップについて ということで以下にアップルの公式サイトがあります。 https://support.apple.com/ja-jp/HT204136 ここには 【iTunes バックアップでは、デバイスのほぼすべてのデータと設定情報がバックアップされます。】 と 【iCloud バックアップでは、デバイスに保存されているほぼすべてのデータと設定情報がバックアップされます。】 と書かれてます。 「 デバイスのほぼすべてのデータ」と「 デバイス に保存されている ほぼすべてのデータ」の違いはなんだろうってツッコミは置いておいて、その後ろにはバックアップの対象外となる物が並んでます。 iTunes では「 iTunes から同期したコンテンツ (読み込んだ MP3 や CD、ビデオ、ブック、写真など)」が同期の対象外。 iCloud では「ほかのクラウドサービス (Gmail、Exchange メールなど) で保管されているデータ」が対象外。 その他には、 「iTunes Store および App Store から入手したコンテンツ、または iBooks に直接ダウンロードした PDF (このコンテンツは iTunes で「購入した項目を転送」を使ってバックアップできます。)」 とか 「iCloud ミュージックライブラリおよび App Store のコンテンツ (すでに購入済みのコンテンツは、iTunes Store、App Store、または iBooks Store で取り扱い継続中であれば、タップして再ダウンロードできます。)」 とあって、微妙な表現の違いはありますが、まぁ実用上は同じと考えて良さそうですよね。

データを失いたくなければ。

iPhone を安全に使うという意識が薄い方が多いようなので、私なりの考え方などを書いてみたいと思います。 先ずは iPhone に限らずスマートフォンを含む小型の電子機器に使用されているメモリーですが、 SD メモリーカードなども含めそんなに丈夫なものとは思ってません。 一寸した拍子にデータを失なう事は珍しくないでしょう。 ましてや落下の衝撃とか、水没で壊したらひとたまりもありません。 SD メモリーカードならば取出せますので、何とかデータを取り出せる可能性はありますが、 100% では有りません。 良く「 iPhone には大事な子供の写真が」等と言いながら、その大事なデータを iPhone にしか保存していない人は多いですね。 幸運にもデータを失くなう事なく2年経って機種変更しようとして始めて「データは引継げますか?」って、機械なんですから一生同じ本体を使うつもりだったの? って聞きたくなります。 連絡先とか、カレンダーとかも同じ事。 機種変したらとか、壊れたらとかは考え無いのですかね? データは大事だからこそ、その保護は真面目に考えないといけないのではないでしょうか? 仕事柄データの損失事故は結構経験しています。 その毎にバックアップの必要性とありがたみを実感します。 スーパコンピューターに使用されている、高性能なデータ保護機能を備えたハードディスクでさえデータが飛んだ経験をしています。 ましてやせいぜい10万円やそこらの価格の記憶装置の信頼性なんてたかが知れていると思いませんか? ですから大事なデータは2ヶ所以上の場所に保管する事が必要です。 その手法として基本となるのが、バックアップと同期です。 この2つの異いを理解していない人も多いですね。 さて、先ずは バックアップ の話から。 iPhone のバックアップはちょっと特殊です。 iPhone の中味をひと塊としてしか扱えません。 写真だけ取り出すとかは出来ない 仕組みです。 これは私の想像でしかありませんが、著作権の保護を考えての処置かなと思っています。 音楽等を勝手に取り出して違法コピー出来ない仕組みになってますね。 で、バックアップはパソコン無しでも出来る iCloud でのバックアップとパソコンの iTunes を使用する2つの方