「ラズパイマガジン 2016年10月号 (日経BPパソコンベストムック) 」を編集部よりいただきました、ありがとうございます。執筆を担当させていただいた「電子工作×ネット 15の定石」と「プログラミングでラズパイを楽しく動かそう」の連載第3回目(最終回)「写真付き日記をブログに自動投稿する」が掲載されています。目次は「日経Linux – 別冊 目次 – ラズパイマガジン 2016年10月号:ITpro」にあります。
今回の「電子工作×ネット 15の定石」という特集はネットワークプログラミングを扱っているので、内容は少し難しいものになっています。前半はLED、スイッチ、LEDドライバモジュールを使った例で、app_server.pyという独自のものか、Flaskを使っています。全部Flaskでも良かったのですが、Flaskだけだとブラックボックス部分が多くなるので、基本的な処理のコードも見てもらえるよう簡単に独自実装したものを用意しました。ただし、サーバープログラムの具体的な解説を入れると、まったくの初心者がついてこれなくなるので、「こう利用すれば動く」という初心者向けの説明をしてあります。
まずは動かしてみよう
とはいえ、定石1, 2, 3 の説明は分量も多く、理解が必要なことも多いので、ハードルが高いと感じる人もいるかもしれません。できるだけ、初心者でも動かせること、コードを見れば処理がわかること、を意識して執筆したのですが、文章だけだと限界があるかと思います。おそらく、まずは動かすところをやってみて、次に記事内で紹介されているコードを理解して一部を自分で変更して動かしてみて、さらに理解を深めたければ使っているモジュールのコードを読んで理解する、といった手順をとれば、理解が深まる気がします。
簡単なWebサーバーの独自実装のコードもついている
なお、まったくのラズパイ初心者だと最初からプログラム全部を理解するのは難しいので、ネットワーク処理の部分をできるだけ見えないようにしてあります。また、Flaskのような既存のフレームワークを使うとLED点灯までに説明が必要な項目がさらに増えてしまいます。そこで、初心者がネットワークプログラミングの部分をあまり意識しなくても済み、かつ、後で出てくるFlaskの機能を理解するのに役立つモジュールが必要になりました。そういうのは、独自に作った方が良さそうだったので、そうしてあります。
実際の自作アプリにはWebフレームワーク部分は定石5以降で紹介しているFlaskを使う人が多いでしょう。でも、Flaskほどの機能は必要ないけど、ある程度の機能をもったシンプルなWebサーバーを作りたい場面もあるでしょう。そういう場合は、定石1から4までで使っている app_server.py のコードを読んで理解するのが良いでしょう。記事内で紹介されていないコードを開いてみればわかりますが、多くても100行程度の少ない分量なので、何をやっているのか把握しやすいはずです。少なくともFlaskなどのコードを見るよりは楽です。
サンプルコードはMITライセンス
http.serverとFlaskの間には大きな機能の差があります。「Flaskレベルまでの機能は必要ないからサーバーを自作したいけど、http.serverを使ってゼロから自作するのは難しい」という「プログラミング初心者ではないけどネットワークプログラミング初心者」という読者は多いかと思います。これまでラズパイマガジンを購入していてwiringpiの使い方は理解しているから、ネットワークプログラミングの実際の基本実装を知りたいという場合に、package_partsディレクトリーにあるコードを眺めてみると面白いはずです。コードの内容を理解しても利用しにくいと意味がないので、MITライセンスとして使い勝手をよくしてあります。改変しての利用や、自作アプリへの組み込みもしやすいはずですから、どんどん使ってもらいたいです。
幅広い範囲の読者に役立つ
ということで、完全な初心者だけを対象というよりは、幅広い範囲の読者にとって役に立つ記事とコードの提供ができるように内容を決めました。定石1から3は基本的な話ではあるものの情報量が多すぎて消化しにくいかもしれませんが、対象者の幅は広いので、初見では難しいと思っても、落ち着いて読んでみれば、それほど難しいことはないと思います。
また、他の雑誌や書籍ではなかなか紹介されない役に立つ実装テクニックも含まれています。コマンド実行アプリとWebアプリを連携させる方法はいろいろありますが、定石3で紹介している「別プロセスで動くようにして連携させる」というのは、雑誌では、なかなか解説されない内容だったりするので、知らない人も多いかと思います。
Motion JPEG over HTTP の実装例
さらに、カメラを使ったWebアプリを考えている人向けには、Motion JPEG over HTTP の実装例である mjpeg_server.py が役に立つはずです。カメラで撮影した画像に加工処理を加えるだけでWebブラウザに画像加工をした動画を表示できます。動画処理用のAPIを使いこなすのは初心者レベルだと難しいのですが、今回の特集で紹介した定石9や応用3を理解すれば簡単にできるようになります。mjpeg_server.py の動作を理解するには、app_server.py が役に立ちます。基本的な処理は同じで、Motion JPEG over HTTPのところだけ特別な処理になっているからです。Webカメラアプリの自作をしてみたい人には役立つコードサンプルとなっていると考えています。
WordPress連携
特集1以外に「写真付き日記をブログに自動投稿する」という記事もあります。こちらは以前日経Linuxに寄稿したものをベースとしていて、最新のラズパイとRaspbianとで動作するようにしたものです。WordPressも最新版に対応しています。定石のRESTful APIについての解説を理解できれば、こちらの記事内容をあわせて、電子部品とWordPress連携というのもできるようになるはずです。
ということで、今月号もお買い得の内容です。ぜひ、読んでみてください!
ラズパイ関連商品には下記があります。
- Raspberry Pi3 Model B ボード&ケースセット (Element14版, Clear)-Physical Computing Lab
- USBアダプタ 5V/2.5A Raspberry Pi 3 Model B【2016年2月29日発売】用
- Raspberry Pi 3 MODEL B 【RS正規流通品】
- ベスト センサーモジュール キット 20種セット for Arduino / raspberry pi 3 モデル B raspberry pi 2 Model B 収納ケース付き(温度センサー/ホール効果センサー/赤外線トラッキングセンサー/タッチセンサー/マイク・サウンドセンサー/デジタル温度&湿度センサー/3色フルカラー SMD LEDモジュール/赤外線リモコン受信モジュール/赤外線送信モジュール/Bluetooth モジュールリレー モジュール/レーザーセンサー/遮光センサー/水銀チルトセンサー/リードスイッチ/火炎検知センサー/赤外線障害物検知センサー/土壌湿度検出モジュール/光センサー/可燃ガス&煙センサー)
- ラズパイマガジン 2016年6月号 日経BPパソコンベストムック
- これ1冊でできる! ラズベリー・パイ 超入門 改訂第3版
- Raspberry Pi Video Module Raspberry Pi Camera Board 775-7731
- Raspberry Piで学ぶ電子工作 専用 実験キット 基本部品セット スターターパック (電子部品関連)
- Raspberry Pi 公式 7インチ タッチスクリーン ディスプレイ Raspberry Pi 7″ Touch Screen LCD