ちゃっくらぼ

IT業界の片隅でひっそりと生きる兼業主婦の覚書。

ラズパイでスマート鳩時計を作る (6.時間・天気表示画面を作る①)

久しぶりの更新となってしまいました。
ブログ書き始めて1年以上経つのに、鳩時計はなかなか形になりません。
でもまだあきらめてないので、ゆっくり進めていきたいと思います。

いつもは実家に帰っている連休ですが、今年はコロナ禍で自宅に引きこもり。
長男と私は外出が生きがいみたいな性分なので、なかなかストレスが溜まります。
(旦那と次男はおうち大好きですが…)

せめて、やりたいことをやってストレス発散しよう…
ということで、子供たちにはゲームを渡し、その隙に母はモノづくりでも。

Pythonで時間・天気表示画面を作る

さて、ラズパイが復旧したので、GUIのほうの用意をしたいと思います。
まずは開発用のPC上で、タッチディスプレイに表示させる画面を作ります。

スマート鳩時計は、長男の登校準備の補助が目的です。
なので、現在の時刻のほか、投稿と下校の時間の天気や気温を表示させたいと思います。 

調べたら、まさにやりたいものを作ってる方がいらっしゃいましたので、
今回は下記を参考にさせていただきます。
qiita.com

用意するもの

  • OpenWeatherMapのAPI KEY

天気予報を取得できる有名なAPI。無料なので、登録してAPI KEYを取得します。
openweathermap.org
f:id:chack133:20200502150914p:plain

  • お天気アイコン

天気に合わせて表示するアイコン。こちらからお借りしました。
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を入れたらちゃんと動きました。
f:id:chack133:20200502154151p:plain

課題

作ってから気が付いたのですが、OpenWetherMapではFreeアカウントでは3時間ごとの天気表示しかできないようで…
これだと、本当に欲しい時間の天気(登校と下校の時間の天気)がわかりません。
また、現在の気温も、3時間の平均が出てしまうので、実際の温度とかなり誤差があるようです。

APIの使用も含め、再検討したいと思います。

あと、時計をアナログ表示にしないと…

代替機買っちゃいました

久しぶりの更新です。
バタバタしてるうちにRaspberry Pi 4、技適対応版が発売されましたね!
スペックが格段に上がり、USBの口が代わり、HDMIがマイクロHDMIに代わり…
過去のバージョンアップと比較すると、変化が多く感じます。
どれだけスペックが上がったかわかりませんが、
個人的には今のところ3B+の性能で充分そうなので、
スペック向上より熱出ないほうが嬉しいのですが…*1

さて、こちらは電源が壊れたラズパイがなかなか復旧できずに今日に至ります。
回路設計しなくてもソフトだけでも進めちゃいたいので、代替機購入を検討していました。
海外で4が発売されたあたりから、どこでも3B+が品薄で、売り切れになっています。今日現在Amazonで売ってる3B+は、定価の3倍近い値段だったりしています…

そんな中で、滑り込みで購入することができました。
f:id:chack133:20191226233944j:plain

もう1台買って立ち上げることで、すごいなーと思ったのは、復旧が早いこと!
先日の故障は電源が原因だったので、SDの中身は無傷です。
なので、マイクロSDを代替え機に指したら、もう元通り。
長時間待たされてやっとできたPython3のインストールも、先日書いたハトが鳴くコードも、SDに全部残っているので再構築不要!なんてすばらしいんでしょう!
無線LANがアドレスフィルタリングしてるので、ルーターMACアドレスの登録はしないとVNC接続できませんでしたが…)

壊れたラズパイの電源直すほうも、やる気はあるんですよー
5Vも3.3Vも1.8Vも出せるDCDCコンバータとか、買ってみたんですよー
f:id:chack133:20191226234002j:plain

ハトのほうも、図面引く気はあるんですよー
f:id:chack133:20191226235012p:plain

来年中には、中身はともあれちゃんと「鳩時計」の形にしたいな。
そのためにも、まとまった時間が欲しいー!

*1:Raspberry Pi 4はヒートシンク必須だそうで…

ラズパイが壊れた話

前回までの記事で作った、音だけのハト時計を鳴らしていたおかげか、
朝に学校の準備が早く終わったらゲームをする習慣ができたおかげか*1
遅刻することなく長男が学校に行けるようになった今日この頃。

さあ次はGUIか!ハトの駆動か!ってところで、

ラ ズ パ イ が 壊 れ ま し た。

f:id:chack133:20190529001205j:plain
症状はこんな感じ
・赤のLED(PWR)はつく
・緑のLED(ACT)はつかない
・ディスプレイが表示されない
VNCが繋がらない

まずはSDカードがこわれたのかな?と思ってPCに接続して確認。
最初、修復するかどうかを聞かれたけど、修復後は中身を見ることができ、無事のご様子。

というか、そもそもSDカードが駄目になった場合は、
一瞬緑のLEDが付くらしいのに、うちのは一瞬もつかない。

同一症状と思われる人の知恵袋で、
「SDカードが読めてないなら本体の問題」「テスタで5Vと3.3Vが出てるか調べろ」
的なベストアンサーを見つけたので、調べてみることに。

f:id:chack133:20190529001613j:plain
うん、5V出てる。*2

なんだー 本体無事じゃーんと思いながら3.3V当てたら…
f:id:chack133:20190529001746j:plain

出 な い

いやいやいやいや、あれじゃね?
ACアダプタの電圧が低いとか、そういうので出てないだけじゃね?と思い、
棚の奥からRaspberry Pi modelAを引っ張りだして、
同じアダプタで3.3V作れてるか確認してみる…
f:id:chack133:20190529001542j:plain

出てる…orz

どうやら本体のレギュレータを飛ばしちゃった模様…*3
スイッチ付きのACアダプタだからと過信して、
パチパチ電源切ってたから過電流かな…
基盤の周りが密閉されてないタイプのケースだし、
ピンが横に飛び出してるから、ショートしたのかな…
最後に触ったのは、我が家の破壊神の次男だったもんなぁ…

レギュレータの交換は、私みたいな素人には手を出せなさそう。
修理方法の質問 3B+の3.3vとGNDをショートさせて起動しなくなった - Raspberry Pi Forums

レギュレータ取っ払って外部電源っていう手はありそう。
RaspberryPiを改造してみましょう。

もともと、サーボも繋ぐことだし、USB給電じゃなくて外部電源化しなきゃなーとは考えてたけど、
表面実装のレギュレータ取っ払う必要が出てくるなんて考えてなかったなー…
次はPythonで楽しくコーディングしようとわくわくしてたのに、回路っぽい作業になりそう…

*1:多分これのおかげ

*2:テスタの写真は、片手でテスタ当てながら一人で頑張って撮影したのでお見苦しいかと思いますがご容赦

*3:あとからいろいろ読んだら5VはUSBからもらってる電圧、レギュレータの先が3.3Vと1.8Vだった。じゃあ5Vは出るよね

ラズパイでスマート鳩時計を作る (5.決まった時間に鳩を鳴かせる)

f:id:chack133:20190518220306j:plain
紹介します。うちの鳩さん(仮)です。
ダイソーの園芸コーナーから来ました。
この子に鳩時計の鳩になって頂きます。

鳩さん(仮)着色

たまたまタミヤのアクリルカラー(白)が残ってたので、ぬりぬりします。
エアブラシもないし、筆も適当な筆しかないので、適当にぬります。
f:id:chack133:20190518220311j:plain
はい!鳩です!誰がなんと言おうと鳩です!!
最終的には、一般的な鳩時計のように、鳴き声に合わせて羽が動く
鳩さんにしたいのですが、一旦必要な機能を作り切るまでは、
この子に頑張ってもらいます。

ちゃっくさんは機構設計が苦手なので、
図面起こしてくれる方、むしろ木材で作って提供してくれる方、
大募集です。
(旦那の部屋の方向を眺めながらの投稿)

決まった時間に鳩を鳴かせる

さて、まずは最低限の機能ということで、
決まった時間に鳩を鳴かせる仕組みづくりです。
ぐぐってみましたがやっぱり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
なので、全部足します。
f:id:chack133:20190518215908p:plain


これに、一旦テスト用として、現在時刻+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インストール~鳩を鳴かせる)

f:id:chack133:20190512003525p:plain

今回はコンソールばっかりで絵面が地味なので、表紙絵には実家の鳩時計の画像を載せておく…
シチズン製。小さいころ、親戚か取引先の工場長の家にあった鳩時計が羨ましくて、誕生日プレゼントとして買ってもらったもの。
中学校の近くの時計屋さんに行って、買ってもらうのを車で待っていたのを覚えてるから、3歳の誕生日だったと思っていたのだけど、GWに母に聞いたら2歳の誕生日だったのだそう。
えっ、これって2歳の記憶なの…?

気を取り直して。今回はRaspberry piPythonで、ハトを鳴かせてみます。

Pythonインストール

そういえば、Raspbianにpythonはプリインストールってどこかで読んだけど、
入ってるかな?と思って調べてみると…
f:id:chack133:20190323004323p:plain
oh…2.7…

Python2はもうすぐサポート終了と聞くため、最初からPython3で触り始めたいので、インストールします。
インストール手順はこちらを参考にさせて頂きました。
qiita.com

深夜に半分寝ながらやったらえらい時間がかかったけど、なんとかインストールされてPython3が使えるようになりました。
通例行事のHello worldをしておく。
f:id:chack133:20190512001726p:plain

音の再生

次は、音を再生する環境づくり。
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

なんかうまく行った模様。
f:id:chack133:20190512002338p:plain

さあ!これでライブラリのインストールができる!

$ 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インチの画面を見ながら開発するのは限界があるので、

SSHVNCで接続したいもの。それにはまずネットワークを繋がねば。

 

最初、有線で繋いで、ルーターの管理画面から払い出されてるっぽいIPに片っ端からSSHで繋いでみたけど、繋がらず…

よくよく確認したら、それらのIPが繋がってたのは、無線で繋いでるスマホだけ。

 有線で繋がってるもののIPはその画面では確認できないっぽい?ので、無線LANで繋ぐ方針に転向。

どうやらキーボードが無くても、OSをインストールしたmicroSDの中にファイルを置けば接続できるみたい。

qiita.com

 

しかし今度は、ルーターのアドレスフィルタリングではじかれて*1接続不可… 

じゃあラズパイのMACアドレスの確認だ!と思って、ルーターアクセスログ探してみたけど、はじいたMACアドレスはログには残らず…

何度もラズパイでipconfig打ちたい衝動に駆られたけど、そもそもキーボードが繋げないからこの作業をやってるんだってばー!

 

…しょうがないので、ルーターを一時的にアドレスフィルタリングOFFに。

ルーターアクセスログからラズパイのMACアドレス確認して登録したら、再度ON。

どうにか無線LANに繋ぐ準備ができました。

 

ラズパイのほうも、ちっちゃいタッチスクリーンを見ながら、VNCを有効化して…

qiita.com

 

繋がったー!

f:id:chack133:20190322224046p:plain

わーいわーい!

 

大きい画面でmineclaft起動してみたり(しかしVNC側に画面が出なかった)

Scratchでネコチャン動かしたり、一通り見回って満足。

 

…ちゃうねん。

次こそハトっぽいことしなければ…

*1:おうちのルーターは(一応)MACアドレスでフィルタリングしてる

ラズパイでスマート鳩時計を作る(2.OSインストール)

OSインストール

何はともあれOSインストール。今回は、最終的にスマートスピーカーっぽくしたいので、無料でスマートスピーカーが作れるという、Google AIYをインストールします。

 

こちらを参考に進めます。

deviceplus.jp

 

書き込み方法は、ダウンロードしたファイルをそのまま解凍なしで書き込める、
こちらの手順を参考にしました。

raspberry-pi.ksyic.com

 

OSイメージを書き込んだSDをラズパイに挿入しまして

f:id:chack133:20190321004853j:plain

挿入

タッチディスプレイと接続してカバーを付けまして

f:id:chack133:20190321004904j:plain

組み立て

ねじをしめてカバーは完成*1

f:id:chack133:20190321004935j:plain

完成

電源さしたら、ちゃんと画面が出てくるー!!

f:id:chack133:20190321004939j:plain

起動

 

 

…といいたいところですが、

実際は、書き込み後1回目の起動はうまく行きませんでした。

f:id:chack133:20190321005333j:plain

no signalになる

PCでSDカードを確認しようとしたところ、
修復しますか?のダイアログが出たので、それが要因だった模様。
修復してもう一度さしたらちゃんと起動した次第です。

 

ひと悶着はあったけど、こんなに手軽に起動するところまでいけるものなんだ…!

というのが一番の感想。

で、ここまで起動できてふと気づいたんですが、うちに有線のキーボードが無くて、
初期設定から先は進めず…
(外付けキーボードはあると思ってたのに、まさかのPS/2だった。
ラズパイはUSBでないと繋げない)

SSHの設定をすればセットアップできるかと思い、
SDカードに/boot/sshフォルダを作ったものの、うまくいかず。

もうちょっとちゃんと調べてみないと…

*1:amazonレビューの先駆者様の説明に助けてもらいました。

www.amazon.co.jp