ラズパイでスマート鳩時計を作る (6.時間・天気表示画面を作る①)
久しぶりの更新となってしまいました。
ブログ書き始めて1年以上経つのに、鳩時計はなかなか形になりません。
でもまだあきらめてないので、ゆっくり進めていきたいと思います。
いつもは実家に帰っている連休ですが、今年はコロナ禍で自宅に引きこもり。
長男と私は外出が生きがいみたいな性分なので、なかなかストレスが溜まります。
(旦那と次男はおうち大好きですが…)
せめて、やりたいことをやってストレス発散しよう…
ということで、子供たちにはゲームを渡し、その隙に母はモノづくりでも。
Pythonで時間・天気表示画面を作る
さて、ラズパイが復旧したので、GUIのほうの用意をしたいと思います。
まずは開発用のPC上で、タッチディスプレイに表示させる画面を作ります。
スマート鳩時計は、長男の登校準備の補助が目的です。
なので、現在の時刻のほか、投稿と下校の時間の天気や気温を表示させたいと思います。
調べたら、まさにやりたいものを作ってる方がいらっしゃいましたので、
今回は下記を参考にさせていただきます。
qiita.com
用意するもの
- OpenWeatherMapのAPI KEY
天気予報を取得できる有名なAPI。無料なので、登録してAPI KEYを取得します。
openweathermap.org
- お天気アイコン
天気に合わせて表示するアイコン。こちらからお借りしました。
magamit.com
OpenWeatherMapは、こちらの予報のほかに雪と霧の予報も出るので、
足りなかったアイコンは自作しました。
つくってみた
まずは、そのまま実行。上記サイトからいただいたコードを、KEYと郵便番号だけ変えてそのまま実行すると、以下のエラー。
>python tenki.py Traceback (most recent call last): File "tenki.py", line 4, in <module> import requests ModuleNotFoundError: No module named 'requests'
参考コードで使用している'requests'は、外部パッケージのようです。
こちらを参考にインストール実行。
https://pg-chain.com/python-requests-install
>pip install requests Collecting requests Downloading https://files.pythonhosted.org/packages/51/bd/23c926cd341ea6b7dd0b2a00aba99ae0f828be89d72b2190f27c11d4b7fb/requests-2.22.0-py2.py3-none-any.whl (57kB) |????????????????????????????????| 61kB 975kB/s Collecting urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 (from requests) Downloading https://files.pythonhosted.org/packages/b4/40/a9837291310ee1ccc242ceb6ebfd9eb21539649f193a7c8c86ba15b98539/urllib3-1.25.7-py2.py3-none-any.whl (125kB) |????????????????????????????????| 133kB 1.7MB/s Collecting certifi>=2017.4.17 (from requests) Downloading https://files.pythonhosted.org/packages/b9/63/df50cac98ea0d5b006c55a399c3bf1db9da7b5a24de7890bc9cfd5dd9e99/certifi-2019.11.28-py2.py3-none-any.whl (156kB) |????????????????????????????????| 163kB 3.3MB/s Collecting chardet<3.1.0,>=3.0.2 (from requests) Downloading https://files.pythonhosted.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl (133kB) |????????????????????????????????| 143kB 3.2MB/s Collecting idna<2.9,>=2.5 (from requests) Downloading https://files.pythonhosted.org/packages/14/2c/cd551d81dbe15200be1cf41cd03869a46fe7226e7450af7a6545bfc474c9/idna-2.8-py2.py3-none-any.whl (58kB) |????????????????????????????????| 61kB 1.9MB/s Installing collected packages: urllib3, certifi, chardet, idna, requests Successfully installed certifi-2019.11.28 chardet-3.0.4 idna-2.8 requests-2.22.0 urllib3-1.25.7 WARNING: You are using pip version 19.2.3, however version 19.3.1 is available. You should consider upgrading via the 'python -m pip install --upgrade pip' command. >
インストール後実行すると、今度は次のエラーです。
>python tenki.py Traceback (most recent call last): File "tenki.py", line 7, in <module> from PIL import Image, ImageTk ModuleNotFoundError: No module named 'PIL'
PILは、現在開発が停止しており、PILからフォークされたPillowを入れるようです。
こちらを取得します。
note.nkmk.me
>pip install Pillow Collecting Pillow Downloading https://files.pythonhosted.org/packages/a0/f5/943da9f188d1abdbd83f73dfba7ed8c1935161e8f9b4ef6fc9cea0b3e14b/Pillow-7.0.0-cp38-cp38-win32.whl (1.8MB) |????????????????????????????????| 1.8MB 1.1MB/s Installing collected packages: Pillow Successfully installed Pillow-7.0.0 WARNING: You are using pip version 19.2.3, however version 19.3.1 is available. You should consider upgrading via the 'python -m pip install --upgrade pip' command. >
Pillowを入れたらちゃんと動きました。
課題
作ってから気が付いたのですが、OpenWetherMapではFreeアカウントでは3時間ごとの天気表示しかできないようで…
これだと、本当に欲しい時間の天気(登校と下校の時間の天気)がわかりません。
また、現在の気温も、3時間の平均が出てしまうので、実際の温度とかなり誤差があるようです。
別APIの使用も含め、再検討したいと思います。
あと、時計をアナログ表示にしないと…
代替機買っちゃいました
久しぶりの更新です。
バタバタしてるうちにRaspberry Pi 4、技適対応版が発売されましたね!
スペックが格段に上がり、USBの口が代わり、HDMIがマイクロHDMIに代わり…
過去のバージョンアップと比較すると、変化が多く感じます。
どれだけスペックが上がったかわかりませんが、
個人的には今のところ3B+の性能で充分そうなので、
スペック向上より熱出ないほうが嬉しいのですが…*1
さて、こちらは電源が壊れたラズパイがなかなか復旧できずに今日に至ります。
回路設計しなくてもソフトだけでも進めちゃいたいので、代替機購入を検討していました。
海外で4が発売されたあたりから、どこでも3B+が品薄で、売り切れになっています。今日現在Amazonで売ってる3B+は、定価の3倍近い値段だったりしています…
そんな中で、滑り込みで購入することができました。
もう1台買って立ち上げることで、すごいなーと思ったのは、復旧が早いこと!
先日の故障は電源が原因だったので、SDの中身は無傷です。
なので、マイクロSDを代替え機に指したら、もう元通り。
長時間待たされてやっとできたPython3のインストールも、先日書いたハトが鳴くコードも、SDに全部残っているので再構築不要!なんてすばらしいんでしょう!
(無線LANがアドレスフィルタリングしてるので、ルーターにMACアドレスの登録はしないとVNC接続できませんでしたが…)
壊れたラズパイの電源直すほうも、やる気はあるんですよー
5Vも3.3Vも1.8Vも出せるDCDCコンバータとか、買ってみたんですよー
ハトのほうも、図面引く気はあるんですよー
来年中には、中身はともあれちゃんと「鳩時計」の形にしたいな。
そのためにも、まとまった時間が欲しいー!
*1:Raspberry Pi 4はヒートシンク必須だそうで…
ラズパイが壊れた話
前回までの記事で作った、音だけのハト時計を鳴らしていたおかげか、
朝に学校の準備が早く終わったらゲームをする習慣ができたおかげか*1、
遅刻することなく長男が学校に行けるようになった今日この頃。
さあ次はGUIか!ハトの駆動か!ってところで、
ラ ズ パ イ が 壊 れ ま し た。
症状はこんな感じ
・赤のLED(PWR)はつく
・緑のLED(ACT)はつかない
・ディスプレイが表示されない
・VNCが繋がらない
まずはSDカードがこわれたのかな?と思ってPCに接続して確認。
最初、修復するかどうかを聞かれたけど、修復後は中身を見ることができ、無事のご様子。
というか、そもそもSDカードが駄目になった場合は、
一瞬緑のLEDが付くらしいのに、うちのは一瞬もつかない。
同一症状と思われる人の知恵袋で、
「SDカードが読めてないなら本体の問題」「テスタで5Vと3.3Vが出てるか調べろ」
的なベストアンサーを見つけたので、調べてみることに。
うん、5V出てる。*2
なんだー 本体無事じゃーんと思いながら3.3V当てたら…
出 な い
いやいやいやいや、あれじゃね?
ACアダプタの電圧が低いとか、そういうので出てないだけじゃね?と思い、
棚の奥からRaspberry Pi modelAを引っ張りだして、
同じアダプタで3.3V作れてるか確認してみる…
出てる…orz
どうやら本体のレギュレータを飛ばしちゃった模様…*3
スイッチ付きのACアダプタだからと過信して、
パチパチ電源切ってたから過電流かな…
基盤の周りが密閉されてないタイプのケースだし、
ピンが横に飛び出してるから、ショートしたのかな…
最後に触ったのは、我が家の破壊神の次男だったもんなぁ…
レギュレータの交換は、私みたいな素人には手を出せなさそう。
修理方法の質問 3B+の3.3vとGNDをショートさせて起動しなくなった - Raspberry Pi Forums
レギュレータ取っ払って外部電源っていう手はありそう。
RaspberryPiを改造してみましょう。
もともと、サーボも繋ぐことだし、USB給電じゃなくて外部電源化しなきゃなーとは考えてたけど、
表面実装のレギュレータ取っ払う必要が出てくるなんて考えてなかったなー…
次はPythonで楽しくコーディングしようとわくわくしてたのに、回路っぽい作業になりそう…
ラズパイでスマート鳩時計を作る (5.決まった時間に鳩を鳴かせる)
紹介します。うちの鳩さん(仮)です。
ダイソーの園芸コーナーから来ました。
この子に鳩時計の鳩になって頂きます。
鳩さん(仮)着色
たまたまタミヤのアクリルカラー(白)が残ってたので、ぬりぬりします。
エアブラシもないし、筆も適当な筆しかないので、適当にぬります。
はい!鳩です!誰がなんと言おうと鳩です!!
最終的には、一般的な鳩時計のように、鳴き声に合わせて羽が動く
鳩さんにしたいのですが、一旦必要な機能を作り切るまでは、
この子に頑張ってもらいます。
ちゃっくさんは機構設計が苦手なので、
図面起こしてくれる方、むしろ木材で作って提供してくれる方、
大募集です。
(旦那の部屋の方向を眺めながらの投稿)
決まった時間に鳩を鳴かせる
さて、まずは最低限の機能ということで、
決まった時間に鳩を鳴かせる仕組みづくりです。
ぐぐってみましたがやっぱりcronですねぇ。
ということで、以下を参考にさせて頂いて、cron登録します。
qiita.com
make.bcde.jp
ログ出力するように設定しrestartしたのち、crontabに登録です。
$ crontab -e no crontab for pi - using an empty one Select an editor. To change later, run 'select-editor'. 1. /bin/ed 2. /bin/nano <---- easiest 3. /usr/bin/mcedit 4. /usr/bin/vim.basic 5. /usr/bin/vim.tiny Choose 1-5 [2]: 4
なんか、エディタを聞かれたので答えます。vi大好き。
すると、コメントだけ記載されたエディタ画面になりました。
ここに定時起動したいものと時間の情報を書くのね?
起動時間は
6:30、6:45、7:00、7:05、7:10、7:15、7:20、7:25、7:30
なので、全部足します。
これに、一旦テスト用として、現在時刻+1分(21:35)の行も
追加してみます。
1分待つと…
…意外と一発でちゃんと作動した!
ログも設定済みなので見てみます。
$ tail /var/log/cron.log May 18 21:34:01 raspberrypi crontab[1489]: (pi) REPLACE (pi) May 18 21:34:01 raspberrypi crontab[1489]: (pi) END EDIT (pi) May 18 21:34:03 raspberrypi crontab[1500]: (pi) LIST (pi) May 18 21:35:01 raspberrypi CRON[1514]: (pi) CMD ([1518] python3 /hato/hato.py ) May 18 21:35:08 raspberrypi CRON[1514]: (pi) END ([1518] python3 /hato/hato.py ) $
呼ばれてる呼ばれてる!
とりあえずここまでできれば、
朝の声掛けに役立てることができそうー
ラズパイでスマート鳩時計を作る (4.pythonインストール~鳩を鳴かせる)
今回はコンソールばっかりで絵面が地味なので、表紙絵には実家の鳩時計の画像を載せておく…
シチズン製。小さいころ、親戚か取引先の工場長の家にあった鳩時計が羨ましくて、誕生日プレゼントとして買ってもらったもの。
中学校の近くの時計屋さんに行って、買ってもらうのを車で待っていたのを覚えてるから、3歳の誕生日だったと思っていたのだけど、GWに母に聞いたら2歳の誕生日だったのだそう。
えっ、これって2歳の記憶なの…?
気を取り直して。今回はRaspberry pi +Pythonで、ハトを鳴かせてみます。
Pythonインストール
そういえば、Raspbianにpythonはプリインストールってどこかで読んだけど、
入ってるかな?と思って調べてみると…
oh…2.7…
Python2はもうすぐサポート終了と聞くため、最初からPython3で触り始めたいので、インストールします。
インストール手順はこちらを参考にさせて頂きました。
qiita.com
深夜に半分寝ながらやったらえらい時間がかかったけど、なんとかインストールされてPython3が使えるようになりました。
通例行事のHello worldをしておく。
音の再生
次は、音を再生する環境づくり。
qiita.com
こちらを参考にライブラリを取得。しかしここからがまたハマった…
pip3というのを使って音の再生に使用するライブラリをインストールするっぽいのですが、なんかよくわからないエラーが。
$ pip3 install pygame mutagen Traceback (most recent call last): File "/usr/bin/pip3", line 11, in <module> sys.exit(__main__._main()) AttributeError: module 'pip.__main__' has no attribute '_main'
pip3を強制再インストールをする方法があるらしいので、試してみたところ…
$ python3 -m pip install --upgrade --force-reinstall pip
なんかうまく行った模様。
さあ!これでライブラリのインストールができる!
$ pip3 install pygame Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple Requirement already satisfied: pygame in /usr/lib/python3/dist-packages (1.9.3)
pygameは普通にインストールできたけど…
$ pip3 install mutagen Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple Collecting mutagen Using cached https://www.piwheels.org/simple/mutagen/mutagen-1.42.0-py3-none-any.whl Installing collected packages: mutagen ERROR: Could not install packages due to an EnvironmentError: [Errno 13] 許可がありません: '/usr/local/lib/python3.5/dist-packages/mutagen-1.42.0.dist-info' Consider using the `--user` option or check the permissions.
mutagenは「許可がありません」のエラーに。
とりあえずsudoつけておけば大丈夫かな?と思ってやってみましたが、
$ sudo pip3 install mutagen Traceback (most recent call last): File "/usr/bin/pip3", line 11, in <module> sys.exit(__main__._main()) AttributeError: module 'pip.__main__' has no attribute '_main'
なんかまた元に戻っちゃった…
エラーメッセージによくよく見たら「Consider using the `--user` option」っても書いてあったので、
今度は最後に「--user」オプションを付けて実行。
$ pip3 install mutagen --user Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple Collecting mutagen Using cached https://www.piwheels.org/simple/mutagen/mutagen-1.42.0-py3-none-any.whl Installing collected packages: mutagen Successfully installed mutagen-1.42.0
インストールできたー!
鳩の音源
こちらの「鳩時計の音」を拝借します。
pocket-se.info
鳩を鳴かせる
前述のMP3を鳴らすサンプルコードを丸写し参考にさせて頂いて、
いざ、鳩召喚!
2020/05/08 動画埋め込み追加しました
vimeo.com
音源周りで躓くと思ったのに、USBスピーカー繋ぐだけでちゃんと鳴いたー!!
次は鳩の音を定時起動して、朝の準備の時に使えるようにします。
取り急ぎcronかな…
ラズパイでスマート鳩時計を作る (3.キーボード無しでWiFiの設定とVNC接続まで)
あー、さっそくはまった!
マウスはあるけど、USBのキーボードが無かったちゃっく家。
3.5インチの画面を見ながら開発するのは限界があるので、
SSHかVNCで接続したいもの。それにはまずネットワークを繋がねば。
最初、有線で繋いで、ルーターの管理画面から払い出されてるっぽいIPに片っ端からSSHで繋いでみたけど、繋がらず…
よくよく確認したら、それらのIPが繋がってたのは、無線で繋いでるスマホだけ。
有線で繋がってるもののIPはその画面では確認できないっぽい?ので、無線LANで繋ぐ方針に転向。
どうやらキーボードが無くても、OSをインストールしたmicroSDの中にファイルを置けば接続できるみたい。
しかし今度は、ルーターのアドレスフィルタリングではじかれて*1接続不可…
じゃあラズパイのMACアドレスの確認だ!と思って、ルーターのアクセスログを探してみたけど、はじいたMACアドレスはログには残らず…
何度もラズパイでipconfig打ちたい衝動に駆られたけど、そもそもキーボードが繋げないからこの作業をやってるんだってばー!
…しょうがないので、ルーターを一時的にアドレスフィルタリングOFFに。
ルーターのアクセスログからラズパイのMACアドレス確認して登録したら、再度ON。
どうにか無線LANに繋ぐ準備ができました。
ラズパイのほうも、ちっちゃいタッチスクリーンを見ながら、VNCを有効化して…
繋がったー!
わーいわーい!
大きい画面でmineclaft起動してみたり(しかしVNC側に画面が出なかった)
Scratchでネコチャン動かしたり、一通り見回って満足。
…ちゃうねん。
次こそハトっぽいことしなければ…
ラズパイでスマート鳩時計を作る(2.OSインストール)
OSインストール
何はともあれOSインストール。今回は、最終的にスマートスピーカーっぽくしたいので、無料でスマートスピーカーが作れるという、Google AIYをインストールします。
こちらを参考に進めます。
書き込み方法は、ダウンロードしたファイルをそのまま解凍なしで書き込める、
こちらの手順を参考にしました。
OSイメージを書き込んだSDをラズパイに挿入しまして
タッチディスプレイと接続してカバーを付けまして
ねじをしめてカバーは完成*1
電源さしたら、ちゃんと画面が出てくるー!!
…といいたいところですが、
実際は、書き込み後1回目の起動はうまく行きませんでした。
PCでSDカードを確認しようとしたところ、
修復しますか?のダイアログが出たので、それが要因だった模様。
修復してもう一度さしたらちゃんと起動した次第です。
ひと悶着はあったけど、こんなに手軽に起動するところまでいけるものなんだ…!
というのが一番の感想。
で、ここまで起動できてふと気づいたんですが、うちに有線のキーボードが無くて、
初期設定から先は進めず…
(外付けキーボードはあると思ってたのに、まさかのPS/2だった。
ラズパイはUSBでないと繋げない)
SSHの設定をすればセットアップできるかと思い、
SDカードに/boot/sshフォルダを作ったものの、うまくいかず。
もうちょっとちゃんと調べてみないと…