公開日:2019/08/24
title.png

7th Season


#7-2 デザートにラズベリーパイはいかが?

 ラズベリーパイって、食べたことは無いのですが、画像検索して写真を見てみたところ、おいしそうですね。アップルパイは全く食べる気になりませんが、ラズベリーパイは食べてみたいな♪
 今回は、Arduinoを使った電子工作(Arduino DIY)のデザートとして、ラズベリーパイを食してみます。

Raspberry Piとは?

 紛らわしくしてゴメンナサイm(1__)m。ここで話題にしたいのは、「食べ物」のことでは無いです。Raspberry Piと言うシリーズのシングルボードコンピュータがあり、そちらの導入が今回のテーマです。

 Raspberry Piと言うのは、CPUにARMを搭載したシングルボードコンピュータ、という位置づけだそうです。MMU(Memory Management Unit)が搭載されているので、UNIXが動きます。最上位、かつ最新のRaspberry Pi 4と言う機体には、ARM Cortex-A72 @1.5GHz(4コア)と言う、かっこいいCPUが載っています。
 基本の使い方としては、Raspbianと言う名前の、OS(Linux系)をインストールして使う様です。他にも、Windows 10 IoT Coreなど、いくつかのOSが載っているみたい。
 Raspberry PI Foundationの公式HPを以下にリンクしておきます。

  Raspberry Pi HP

 インストールの仕方とか、その他ドキュメントの類も参照できるので、上のページには今後もお世話になることが多いと思います。

 今回目を付けたのは、Raspberry Pi ZeroWという、フリスクサイズの基板にARM11 @1GHz(1コア)の載ったMCUボードです。CPUも古くて1コアだけど、Pi 4が$35〜$55なのに対して、Pi ZeroWは$10とお安いのが魅力。

Pi ZeroWの主な仕様

 Raspberry Pi HP等より、以下の様な仕様を読み取ることができます。

ar72_zerow.jpg

 コネクタ類は、USB micro-B×2、mini HDMI、カメラ端子、microSDカードスロットなので、有線LANは繋がりません。他のPi 3とかPi 4とかには、Ethernetケーブルがつながるコネクタが付いているので、I/Fコネクタにも違いがあります。

※Pi 4等の機体には、サウンド出力用のミニジャック端子を備えているものもあるのですが、Pi Zeroシリーズにはついていないので、HDMIのサウンド出力以外、音声を出力する手段もありません。

 802.11 b/g/nが使えるので、2.4GHz帯の無線LANでネットワークに接続できます。裏面には技適マークがついているので、総務省のお墨付きです。安心して電波飛ばしてください。

 ちなみに、表面にデンッと鎮座するSOCチップですが、ELPIDAのマークが……。他にそれらしき大きなLSIも見えないし、SDRAMオンチップのSOCなのでしょうか??ちなみに、小さい鏡面状のフリップチップは、802.11/BTチップと思われます(∵後でバリエーションをご紹介しますが、無線LAN機能を持たないPi Zeroには載っていないため)。

※アンテナらしいパタン(1/2波長で約6.25cm)が見当たらないなぁ〜と、思っていたら、上の写真表面上部に見えている三角形パタンがアンテナらしいです。

始めるのに必要な物

 いつものAmazonで探してみたところ、最安値で1,800円程度(ボードのみ)が見つかりました。他にも、使い始めるのに必要な、もろもろがセットになったスタータキットが3,000〜5,000円程度。
 もちろん、ボードのみ(1,800円)<スタータキット(3,000〜5,000円)って、ことですけど、そもそも、Raspberry Piを始めるのに、最低限何が必要なの?って、ことです。その最低限必要な物をバラバラに買い集めて行ったら、結局、「スタータキットの金額を超えてしまった」、と、なるなら、スタータキットを購入した方が安上がりです。

 色々と、「××をやらないなら、これは要らない」、「○○な場合はこれが要る」的な、トレードオフが登場します。それを言い出すとキリがないので、納得して揃えたい方は、色々なサイトで先輩方の報告を参考に、選定してみてください。
 ここでは、以下の様な使い方を目指し、その目標に向かって、「必要なもの」をまとめておきます。

 以下表にまとめます。

必要な物 説明 本ページの対応
Raspberry Pi
  ZeroW/ZeroWH
Raspberry Pi本体
 ・ネットワークに繋ぎたいので、無線LAN対応のPi ZeroWまたはPi ZeroWH。
 ・Pi ZeroWの場合は、ピンヘッダ(40ピン)を別途用意して、半田付けすること。
購入
microSDカード OSをインストールする
 ・Raspberry Pi HP(Help ⇒ GET STARTED WITH RASPBERRY PI ⇒ Setting up your Raspberry Pi ⇒ What you will need)によると、最低8Gバイト(at least 8GB)。
 ・Pi ZeroWには付属していない(けど、必須)。
 ・インストールパッケージのコピーのために、PCにマウントする必要があるので、カードリーダ等も必要となる。
手持ちの32GバイトSDHCカード(Class 10)が空いていたので、これを使う。
USB OTGケーブル キーボードとマウスの接続用
 ・普通のPC⇔携帯機器のデータ通信用USBケーブルだと、OTG対応ではないので使えない。
 ・OTG対応のケーブルが必要。
購入
 ・OTG対応のケーブルは手元になく、本体と一緒にポチっておいた。
mini HDMIケーブル Raspberry Piを液晶ディスプレイに接続する
 ・Raspberry Pi側は、普通のHDMIより小さいコネクタ。
 ・液晶ディスプレイと接続するのに、変換アダプタなり、ケーブルなりが必要。
昔、グラボか何かについてきたmini HDMIアダプタとケーブルがあったので、これを使う。
ACアダプタと
  USBケーブル
Raspberry Piに電源を供給する
 ・Raspberry Pi HP(Top ⇒ FAQ(一番下の方) ⇒ Power)によると、Pi ZeroWの消費電流値は、TYP 150mAで、推奨するACアダプタの電流容量は1.2A。
 ・一昔前の、USB出力ACアダプタは、普通1Aも出力できないものが多いので、定格を確かめて使うこと。
 ・電源供給用の端子は、USB micro-Bタイプなので、これに合うケーブル。
定格5V/1.3AのACアダプタが手元にあったので、これを使う。
液晶ディスプレイ※ HDMI入力の付いたPC用のディスプレイ等
 ・アナログサウンド出力用のミニジャックが付いていないので、HDMIオーディオに対応したディスプレイじゃないと、音が鳴らせない。
PCと兼用(切り替えて使う)。
 ・スピーカが付いていないタイプなので、サウンド出力については、確認できない、使わない。
キーボード※ USB接続のPC用等 PC用で余っていたものを使う。
マウス※ USB接続のPC用等 PC用で余っていたものを使う。
USBハブ※ PC用等
 ・USB端子は1つしかないので、キーボードとマウスを同時に接続するために必要。
PC用で余っていたものを使う。

※読み進むとわかりますが、液晶ディスプレイ、キーボード、マウス、USBハブについては、ネットワーク+VNC環境が立ち上がったら使いませんので、セットアップ時に一時的に使用できればOKです。

 その他、ケースとかヒートシンクとか、色々と欲しくなるかも知れませんが、使い始めてから必要に応じて買い揃えても良い様に思います。
 「あれ?何か変なことが起こってる?」とかなった時、基板の様子を確かめたりするのに、ケースなんかあると邪魔だし、異常に気付くのが遅れる恐れもあるので、ケース無し(ヒートシンクも無し)で使用することにしました。手持ちに六角スペーサが余っていたので、これを使って、脚はつけておくことにします。四隅の穴のサイズはM2でした。

売り場(通販サイト)を探す

 前節で検討した様に、Amazonでサクッと検索してみたところ、本体のみ1,800円前後、スタータキットで3,000〜5,000円くらいの商品が見つかりました。手元にあったPC用の余った機器を流用すると、大抵のパーツはそろっていることがわかり(前節)、スタータキットを購入しても色々と不必要な機器を購入することになって無駄なので、キットの購入ではなく、バラバラに必要な物だけを購入する戦略に決めました。

※前節の必要な物リストをご覧になった上で、手元に流用可能な機器がほとんどない場合には、スタータキットを購入するのも良い案です。

 Amazon以外にも、いくつか探したところ、「スイッチサイエンス」というショップで、ボードのみ1,296円という商品を見つけました。と、言うより、Raspberry Pi HPから、「Products ⇒ Raspberry Pi ZeroW ⇒ Buy now」と、辿ると、このショップに誘導されます。
 ちなみに、今回選択したRaspberry Pi Zeroと言う機体には、現在確認しているだけで、3つのオプションが存在します。以下表に簡単な特徴とスイッチサイエンスでの価格をまとめておきます(価格は購入当時、2019/Aug)。

バリエーション 説明 購入当時の価格
Raspberry Pi Zero LAN接続機能が無い 648円
Raspberry Pi ZeroW 無線LANとBluetoothを搭載 1,296円
Raspberry Pi ZeroWH 同上、ピンヘッダ(40ピン)が半田付けされている 1,814円

 スイッチサイエンスの売り場では、Pi ZeroとPi ZeroWの価格が、ずいぶんと安く設定されていることに注意!

とのことで、Pi Zero/Pi ZeroWの価格は、「会員限定、生涯累積で1台/1人」という制限付きです。制限はあれども、この価格は魅力的o(1^−^)o。
 「会員」と言っても、会員登録は無料です。普通に通販ショップを利用する時に申告する、住所や電話番号などの個人情報を登録するだけで、会員登録は終了します。……要は、「1台/1人」のチェック用に、「個人情報を登録してね」と言うことですね。
 Pi ZeroWHの方は、数量制限が無いので、1台目が気に入って2台目の購入時には、こちらのお値段になります。

※購入当時のレート(108〜109円/$)と、海外での価格帯(およそ$14)に、輸入にかかるコストを上乗せすると、Pi ZeroWHの価格も、そんなに高くないと思われます。また、Amazonで検索ヒットした価格ともほぼ一致していました。

 "W"の付かないPi Zeroも、ワンコイン+αと安いけど、ネットワークに繋げないので、今回は却下です。ただし、Arduinoの様に、「電子工作用MCUボード」として捉えると、"W"の付かないPi Zeroで十分なわけで、そう考えると、648円という、Arduino UNOと変わらない価格なのは魅力ですね(ただし数量限定価格)。

 後は、Pi ZeroWにするか、Pi ZeroWHにするかの二択です。両者の差分は、調べた限り、ピンヘッダが有るか/無いかだけの様子。
 「安いの好き」、と、言うことで、Pi ZeroWを選択しました(1^^;)。

 ただし、「電子工作に使うこと」が目的ですので、信号線を接続するのにピンヘッダは必須です!ですので、自分で手持ちのピンヘッダを半田付けして使います。
 Pi ZeroWは、「半田付けされていない」だけではなくて、そもそもピンヘッダ自体が付属していないので、注意してください。自分で用意する必要があります。もし、ピンヘッダをお持ちで無い方が、別途ピンヘッダを購入すると、簡単にPi ZeroWHの価格に追いついてしまうので、大人しく最初から、Pi ZeroWHを購入するのが吉です。半田付けがあまり得意ではない方も同様です。

 さて、さっきスイッチサイエンスの売り場でポチっておいたので、本体が届くまでの間に、出来ることをしておきましょう。

ARM11 SOCのスペックを確認

 Raspberry Pi HP(Help ⇒ Documentation ⇒ Hardware ⇒ Raspberry Pi)より、Pi Zeroに搭載されたSOC(BCM2835)のデータシートを閲覧することができます。ただし、電気的特性らしきものは見当たらず、搭載されたペリフェラル(周辺I/Oユニット)の仕様書っぽい物が置いてあります。
 電子工作的に気になるユニットは、GPIO/UART/SPI/I2C/PWM/……辺りでした。

 Arduino(ATmega328)と比べると、AD変換器が見当たらないくらい。あと、RTCらしきものが見当たりません。立派なOSを動かすのだから、時計(RTC)くらい持っておいた方が良かったのでは??EEPROMっぽい不揮発メモリも見当たらないけど、まあ、SDカードをHDD代わりに使うことが前提のシステムなので、不揮発にしたいデータはSDカードに書き込んでしまえば良いことです。これも特に問題は無いでしょう。

 問題は、I/Oユニットの仕様書が読めたところで、「それが何なの?」ってなってしまうことです。

 「全てのMCUリソースは僕の物」⇒Arduinoに対して、「全リソースはOSが管理」⇒Windows(等)と、考えると、Raspberry PiにはRaspbian(Linux)という立派なOSが走っているのだから、Windows寄りなわけです。すると、勝手に、OSに無断でI/Oユニットのレジスタを変更して使うなんて、もっての外だし、例えば割り込みを有効にしたところで、割り込みが起きるとOSのハンドラに飛んでしまって、こっちに制御が渡らない。
 つまるところ、所謂「デイバイスドライバ」ソフトウェアでも組まない限り、上のドキュメントは役に立たない可能性が高いです。OSによってお作法の異なるデバイスドライバを自分で組むなんて、ごめんこうむりたいし、必要なのは、こういうドキュメントじゃない、んだよなぁ……。

 I/Oユニットの類は、既にデバイスドライバがインストールされているはずなので、その叩き方を知りたいのです。中々、お目当てのドキュメントに辿り着けません。まだ、探し方が温いのかも知れませんが……。もう少し探してみます。

  「全てのMCUリソースは僕の物」⇒Arduino

と、言う世界で自由にやって来たのだけれど、Raspberry Pi+Raspbianの環境は、窮屈だなぁ。

 その辺りの使い勝手は心配だけど、逆に言うと、ちゃんとしたOSが載っていて、ファイル関係とかネット関係とかの環境は整っているし、何より、CPUも速い、メモリも潤沢。利点が欠点に勝ってくれたら、導入した価値があった、と言うことになります。暫く使ってみるしか、検証手段がありません。

OSをインストールする

 もし、本体を通販で発注した場合で、本体到着後に使用予定のmicroSDカードが手元にある場合、あらかじめOS(Raspbian)をインストールすることが可能です。
 手持ちのmicroSDカードが無くて、本体と一緒に購入する場合は無理なので、到着後に先へ進んでください。

 「フリスクサイズのシングルボードコンピュータに色々なOSをインストールして遊ぶ」みたいなことはターゲットに無くて、電子工作に使いたいだけなので、普通に、Raspberry Pi HPがお勧めしてくれるOSをインストールして使いたいと思います。
 Raspberry Pi HPより「Help ⇒ GET STARTED WITH RASPBERRY PI ⇒ Setting up your Raspberry Pi ⇒ Set up your SD card」へ進むと、NOOBS(New Out Of the Box Software)というインストールセットがお勧めされているので、まずは、NOOBSのzipファイルをダウンロード(〜2.1Gバイト)します。

※Raspberry Pi HPのガイドに、「The Raspbian operating system via NOOBS」と、あるので、NOOBSを使ってインストールされるのが、RaspbianというOSみたいです。……こういうの、英語だし、初心者を惑わす表現ですよね?普通に「Raspbianインストールセット」とかではダメだったのでしょうか??

 microSDカードをフォーマットします。
 カードリーダなどを使って、PC(Windows)にmicroSDカードをマウントし、Windowsでフォーマットします。フォーマットタイプはFAT32を選びます。Quickフォーマットで良いようです。

 ダウンロードしたNOOBSのzipファイルを解凍します。
 解凍したディレクトリ内の全ファイルを選択して、フォーマットしたmicroSDカードにコピーしたら、終了です。あとは、本体が到着後の作業となります。

 この時点でSDカードにコピーされたのは、2Gバイト超のファイル達でした。まだ、Linuxっぽいディレクトリ構造は全く見えないため、どうやら、Raspberry Piの初回起動時に、データを解凍しながらインストール作業が行われるものと予想されます。
 なので、正確には、以下でした。

届いたよ✨

 届きました〜。ポチってから、Raspberry Pi HPのセットアップ手順は熟読しておいたし、早速、セットアップ開始です。

 この時点で、一旦RaspbianをShutdownして、microSDカードをWindowsにマウントしてみると、最初にコピーしたNOOBSのファイルが見えていて、ディスクサイズがかなり小さくなっていました。どうやら、NOOBSファイルの入ったパーティションを絞って、空いた領域にRaspbian用のパーティションを切り直し、インストールした様です。
 NOOBSのファイルはそのまま残しておきます。ブートに必要なファイルが入っているかもしれないし、後でリカバリが必要になった時、そのままリカバリステップに進むことができるので。

Raspbianの色々確認と、カスタマイズ

 「Raspbian(Linux)の環境を立ち上げる」ことは、目的ではなく、「Raspberry Piで電子工作する」ための、手段でしかありません。よって、あれやこれやと色々なソフトウェアをインストールして、環境を整える、と言う作業は、ここでは実施しません。

 これから、この世界でDIYを進めるにあたって、必要な環境だけを、その都度整えていきたいと思います。

 まず、shellウインドウを開いてみます。Raspbianデスクトップの左上、以下図矢印で示したアイコンをクリックします。

ar72_lxtm.jpg

  実験サンプル:【 】内はshellウインドウでのコマンド入力
  【whoami】
  pi

 ユーザ名は「pi」みたいです。あと、シェルはbashみたいですね。筆者はcsh使いなので、tcshを探して、インストールしたいと思います。インストールは、「ラズベリーアイコン ⇒ 設定 ⇒ Add/Remove Software」から、GUIでインストールすることができます。たぶん、ネットワークにつながっている必要があります。もう少し下で、ネットワーク接続後にインストールします。

 続けましょう。

  【uname -a】
  Linux raspberrypi 4.19.57+ #1244 Thu Jul 4 18:42:50 BST 2019 armv6l GNU/Linux

 今回インストールしたLinuxのバージョン等です。「Raspbian」とか言う名前は、どこにも出てこないのね……。

  【date】
  Wed Jul 10 xx:xx:xx JST 2019

 あ、結果を表示しても、イミフでしたね。【date】を実行した時の実際の日付に対して、20日程度前の日付で、時間は全くでたらめでした。NOOBS(インストールパッケージ)の最終更新日時でしょうか?
 Pi ZeroWの基板上には、RTC(実時間時計)の気配(※)がありませんので、時計がでたらめなのは、納得です。

※RTCが搭載されている場合には、ボタン電池/スーパコンデンサ/32.768kHz発振子など、RTCの構成に必要な部品が何かしら、搭載されているはずですが、それが見当たりませんでした。

ネットワーク

 そういえば、まだ、ネットワークに繋いでいませんでした。Raspbianデスクトップの画面右上にある、以下のアイコンをクリックすると、その時点で接続可能なアクセスポイント(AP)が表示されます。適切なAPに接続してください。

ar72_wlan.jpg

 改めて、【date】を実行してみました。今度は、ちゃんと現在の日時が表示されました。どうやら、自動的にNTPサーバへ日時を問い合わせに行く設定になっているようです。ネットワークへの接続設定を有効にしたことで、NTP問い合わせが成功して、正しい日時が表示されたのですね。
 どこのNTPサーバに問い合わせに行っているのだろう??ネットワーク距離の近い、国内のサーバへ飛ばしたいなぁ……。これも、後で調べて、設定を変更したいと思います(オプションです、各自で対応願います)。

  【hostname】
  raspberrypi

 こういう名前になっているのですね。今、LANにはRaspberry Piが1台しかつながっていないので、このままの名前で使用します。……本ページのもう少し後で、ここの名前を変更する設定ウインドウが見つかります。

  【ip address】
  1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 ……
  link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  inet 127.0.0.1/8 scope host lo
     valid_lft forever preferred_lft forever
  inet6 ::1/128 scope host
     valid_lft forever preferred_lft forever
  2: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 ……
  link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
  inet 192.168.0.102/24 brd 192.168.0.255 scope global noprefixroute wlan0
     valid_lft forever preferred_lft forever

 無線LANのIPアドレスと、MACアドレスを確認できました。IPアドレスは、無線LANルータからDHCPで取得したアドレス(192.168.0.102)になっていました。今後、ネットワーク関係のアプリケーションを試すにあたって、IPアドレスを固定しておいた方が絶対に楽なので、固定IPアドレスを設定しておきましょう。
 固定IPを設定するには、/etc/dhcpcd.confというファイルを編集すれば良い様です。このファイルの中に、以下の様な行がありました。

  # Example static IP configuration:
  #interface eth0
  #static ip_address=192.168.0.10/24
  #static ip6_address=fd51:42f8:caae:d92e::ff/64
  #static routers=192.168.0.1
  #static domain_name_servers=192.168.0.1 8.8.8.8 fd51:42f8:caae:d92e::1

 頭に「#」マークがついているので、全てコメントになっています。「# Example」と、なっているので、これに倣って、固定IPを設定しましょう。

  【sudo vi /etc/dhcpcd.conf】 …… 以下の5行を追加する。
  # static IP configuration:
  interface wlan0
  static ip_address=192.168.0.12/24
  static routers=192.168.0.1
  static domain_name_servers=192.168.0.1
    【ZZ】 …… セーブして終了

  【sudo reboot】 …… 再起動

 再起動したら、設定したIPアドレスになっているはずです(上の例では、192.168.0.12)。LAN内で、重複しないアドレスを設定する必要があります。IPv4しか使っていないので、IPv6の設定はスキップしてあります。
 うっかり、【sudo】をつけずに、/etc/dhcpcd.confを編集してしまったのですが、普通に変更(セーブ)できてしまいました。あらあら、そんなバカな……(1^^;)。

  【ls -l /etc/dhcpcd.conf】
  -rw-rw-r-- 1 root netdev 1822 Aug3 13:10 /etc/dhcpcd.conf

 piがグループnetdevに属しているようです。結果的には、【vi /etc/dhcpcd.conf】の頭に付けた【sudo】は、無くてもOKでした。この手のシステム設定ファイルは、一般ユーザが書き換えできないようになっているので、普通は【sudo】をつけて実行します。なお、piが属するグループは、【groups】で確認できます。

※ただ、筆者はルータ側のDHCPを設定して、Pi ZeroWのMACアドレスに対し、固定IPアドレスをリースする様にして使います(1^^;)。上の方法は、ルータで設定できない方へのガイド用です。何にせよ、固定IPアドレスで使えるようにセットアップしておきましょう。

ソフトウェアのインストール

 ネットワークにもつながりましたので、忘れない内にtcshをインストールしておきます。「ラズベリーアイコン ⇒ 設定 ⇒ Add/Remove Software」を開き、検索フィールドに「tcsh」と入力して検索してください(下図)。

ar72_tcsh.png

 tcshの項目にチェックして、OKボタンを押すと、資格を問うウインドウが開くので、ユーザrootと、rootのパスワードを入力すると、インストールすることができます。この時、既にtcshの項目にチェックマークがついている場合には、インストール済みであることを示しています。

Raspberry Piの設定

 最後に、「ラズベリーアイコン ⇒ 設定 ⇒ Raspberry Piの設定」を開き、GUIで設定可能な値を確認しておきます。

 何らかの設定値を変更すると、再起動を促されます。一旦再起動して、設定を有効化しておきましょう。

VNC

 VNCを有効化すると、Windowsから、VNCビュアソフトウェアを使って、Raspbianのデスクトップを操作できるようになります。VNCが通れば、液晶ディスプレイを占有しなくても、PCからVNC接続して操作できますし、キーボードとマウスも繋いでおく必要が無くなるので、省スペースに貢献します。しかも、Pi ZeroWの貴重なUSBポートが空きます。
 VNCで接続するためには、Windows側にVNCビュアソフトウェアのインストールが必要です。
 家庭内LAN内で、他のPC(Windows)に接続するため、UltraVNCと言うソフトウェアをインストールして使っているのですが、このソフトウェアでRaspbianのVNCに接続しようとしたところ、「No supported authentication methods!」と表示されて、接続できません。
 調べてみると、Windowsでは、RealVNCというソフトウェアが対応しているらしいので、検索したところ、RealVNCビュアのインストーラ(別ウインドウが開いて検索します)が見つかったので、これをインストールしました(サーバソフトウェアは不要なので、ビュアのみインストール)。

 ただでさえ、モッサリしているPi ZeroWですが、VNCを通すことで、モッサリ感増量です。しかしこれで、液晶ディスプレイに接続する必要も、キーボードとマウスを接続する必要もなく、Windowsから接続したVNC上で、Raspbianのデスクトップを操作できます。ついでにVNCを使うと、Raspbian⇔Windows間でファイルの転送も出来るようになって、一石二鳥です。
 Pi ZeroWに電源ケーブルだけ繋いでしまえば、後はネットワーク経由で作業ができてしまいます。

 Raspbianのカスタマイズは、この辺で止めておきますね。繰り返しになりますが、Raspbianの環境を整備するのは手段であって、目的ではないので。目的を果たすのに必要最小限のカスタマイズで十分ですから。

ピンヘッダの半田付け

 めでたく、Raspberry Piの開発環境が整備できましたので、いよいよ、電子工作の第一歩を踏み出したいのですが、その為には、最後の難関が。そう、ピンヘッダの半田付けが残っています。
 Pi ZeroWHを購入した方は不要ですので、本節は読み飛ばしてください。

 Arduino UNOには、ピンソケットが付いていて、従って、ブレッドボード上の回路と接続する時に、オス−オスタイプのジャンパ線で接続することができます。両端が対称なので、どちら向きにも接続できて便利です。Pi ZeroWは、ピンヘッダが付いて来なくて、ある意味、好きにすれば良いので、UNOみたいにピンソケットをつけようかと、一瞬血迷った末、やはり、デフォルトのオスを半田付けすることにしました。
 ∵Raspberry Piには、Arduinoで言う所の「シールド」に相当する、「HAT」と言うタイプの拡張ボードが存在するのだけど、シリーズ通して共通な、40ピンヘッダを前提としているので、ここで独自性を発揮すると、きっと将来後悔すると思いました。他の機体(Raspberry Pi)と合わせて、ピンヘッダを半田付けすることとします。

※ピンヘッダがむき出しになっていると、ちょっと金属(導体)が接触しただけでショートする恐れがあるので、本来は、Arduino UNOの様に、ピンソケットで引き出すのが正解だと思えます。部屋の壁についているコンセントが、「オス」で金属がむき出しになっていたら嫌でしょう?

 その代わり、ブレッドボードとの接続には、メス−オスタイプのジャンパ線が必要となります。手元に、先日購入したデュポンワイヤ(メス−オス、メス−メス、オス−オスと、全種類揃えて購入した)が余っているので、これを使えば問題ないだろうという判断をしました。

 下図の様に、40ピンのシングルタイプピンヘッダを、真ん中で2つに割って、2列の40ピンヘッダとしてPi ZeroWに半田付けします。

ar72_pinh.jpg

 最初から2列タイプで買ってくるピンヘッダと違って、シングルタイプを2列半田付けするので、2列のピン間隔が空き過ぎても、狭すぎてもダメ。半田付けする時に角度がずれると、そういう事が起きるので、そこは注意しました。
 それ以外は、ただひたすら、40ピン分の半田付けが面倒だっただけです。でも、20〜30分くらいの作業だったかな?「あるある」なのですが、ピンヘッダを半田付けしたら、シルクの1ピンマークが見えなくなってしまいました。ピンヘッダにジャンパ線を繋ぐたびに、「1ピンどれだっけ?」と、なりそうな気がして、憂鬱です(1^^;)。

 ともあれ、ようやく完成形です(以下図)。

ar72_final.jpg

 操作はVNC経由で行います。
 よって、OTGアダプタとmini HDMIアダプタは、挿しておくけど、実際にキーボードや液晶ディスプレイは繋ぎません。挿しておかないと、ちっちゃくて迷子になりそうだし、キーボードやディスプレイを繋ぎたいシチュエーションになった場合の、ショートカット用です。
 これで、電源ケーブルだけ繋げば、Pi ZeroWで開発可能な状態となりました。

Lチカしてみる

 お約束のLチカをやってみて、終了検定とします。

 色々と事前調査した結果、gpioというユーティリティコマンドがある様なので、使えるかどうか試してみます。先ほどのshellウインドウを開きます。

ar72_lxtm.jpg

  実験サンプル:【 】内はshellウインドウでのコマンド入力
  【gpio readall】
  +-----+-----+---------+------+---+-Pi ZeroW-+---+------+---------+-----+-----+
  | BCM | wPi |  Name | Mode | V | Physical | V | Mode | Name  | wPi | BCM |
  +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
  |   |   |  3.3v |   |  | 1 || 2 |  |   | 5v   |   |   |
  |  2 |  8 |  SDA.1 | ALT0 | 1 | 3 || 4 |  |   | 5v   |   |   |
  |  3 |  9 |  SCL.1 | ALT0 | 1 | 5 || 6 |  |   | 0v   |   |   |
  |  4 |  7 | GPIO. 7 |  IN | 0 | 7 || 8 | 1 | ALT5 | TxD  | 15 | 14 |
  |   |   |   0v |   |  | 9 || 10 | 1 | ALT5 | RxD  | 16 | 15 |
  | 17 |  0 | GPIO. 0 | OUT | 0 | 11 || 12 | 0 | IN | GPIO. 1 | 1 | 18 |
  | 27 |  2 | GPIO. 2 |  IN | 0 | 13 || 14 |  |   | 0v   |   |   |
  | 22 |  3 | GPIO. 3 |  IN | 0 | 15 || 16 | 0 | IN | GPIO. 4 | 4 | 23 |
  |   |   |  3.3v |   |  | 17 || 18 | 0 | IN | GPIO. 5 | 5 | 24 |
  | 10 | 12 |  MOSI | ALT0 | 0 | 19 || 20 |  |   | 0v   |   |   |
  |  9 | 13 |  MISO | ALT0 | 0 | 21 || 22 | 0 | IN | GPIO. 6 | 6 | 25 |
  | 11 | 14 |  SCLK | ALT0 | 0 | 23 || 24 | 1 | OUT | CE0  | 10 | 8 |
  |   |   |   0v |   |  | 25 || 26 | 1 | OUT | CE1  | 11 | 7 |
  |  0 | 30 |  SDA.0 |  IN | 1 | 27 || 28 | 1 | IN | SCL.0 | 31 | 1 |
  |  5 | 21 | GPIO.21 |  IN | 1 | 29 || 30 |  |   | 0v   |   |   |
  |  6 | 22 | GPIO.22 |  IN | 1 | 31 || 32 | 0 | ALT0 | GPIO.26 | 26 | 12 |
  | 13 | 23 | GPIO.23 |  IN | 0 | 33 || 34 |  |   | 0v   |   |   |
  | 19 | 24 | GPIO.24 |  IN | 0 | 35 || 36 | 0 | IN | GPIO.27 | 27 | 16 |
  | 26 | 25 | GPIO.25 |  IN | 0 | 37 || 38 | 0 | IN | GPIO.28 | 28 | 20 |
  |   |   |   0v |   |  | 39 || 40 | 0 | IN | GPIO.29 | 29 | 21 |
  +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
  | BCM | wPi |  Name | Mode | V | Physical | V | Mode | Name  | wPi | BCM |
  +-----+-----+---------+------+---+-Pi ZeroW-+---+------+---------+-----+-----+


 上の様な表が表示されたら、gpioがインストールされています。手元の環境では個別にインストールしていないので、現在のNOOBSでは、デフォルトでインストールされているようです。昔は、自分でインストールしなくてはならなかったようなので、もし、gpioがインストールされていなかった場合は、「ラズベリーアイコン ⇒ 設定 ⇒ Add/Remove Software」から、「wiringPi」を検索して、インストールしてください。先ほどインストールしたtcshと同じです。

 gpioコマンドは、wiringPiというC言語のライブラリをインストールした時に、一緒にインストールされるユーティリティコマンドです。本HP(Arduino DIY)では、wiringPiライブラリと、gpioコマンドが使えることを前提に議論を進めます。

 Raspberry Piの物理ピン#32のI/Oポートを使って、LEDを光らせますので、近くのGNDピンとの間に、適切な電流制限抵抗と、LEDを接続してください(参考、下図)。

ar2_lschem.png

 ArduinoでLチカした時に作成した図の使い回しですみません。PDxのところが、Pi ZeroWの#32ピンになります。先ほどの【gpio readall】で表示された表より、#32ピンの両脇がGND端子(#30および#34)だとわかりますので、ここからデュポンワイヤで配線を引き出して、上図の様な回路を作成してください。
 抵抗には、2kΩを使いました。Pi ZeroWのI/O出力は3.3Vですので、LEDのVf≒1.35V程度と仮定すると、If=(Vdd−Vf)/R≒1mA程度の負荷となり、問題ないはずです。

  【gpio -1 mode 32 output】 …… #32ピンを出力モードに設定

  【gpio -1 write 32 1】 …… #32ピンにHIGHを出力。LEDが点灯する。

  【gpio -1 write 32 0】 …… #32ピンにLOWを出力。LEDが消灯する。

 このコマンドgpioは、問題が無ければ、何もメッセージを返さないので、無言で終了します。最初の【gpio write】で、#32ピンに1(HIGH)を出力しますので、この時点でLEDが光ります。2回目の【gpio write】で、#32ピンに0(LOW)を出力するので、LEDが消灯します。

 以下、実験中の様子です。

ar72_led.jpg

 期待通りに動きましたか?動かなかった場合には、接続か、回路が間違っていますので、冷静にデバッグしてみてください。

 gpioコマンドの使い方については、以下で表示されるドキュメントをご覧ください。

  【man gpio】
  GPIO(1)  Command-Line access to Raspberry Pi's GPIO  GPIO(1)
  NAME
    gpio - Command-line access to Raspberry Pi's GPIO
  SYNOPSIS
    gpio -v
    :
    :

※UNIX系のコマンドは、manが整備されているので、助かります。「あのコマンドの仕様、どうだったっけ?」って、なっても、色々なドキュメントを探し回ることなく、manコマンドで引き出せるので。

 もう一歩進めて、スクリプトを使って、LEDを蛍の様に光らせてみます。
 筆者はawk使いなので、awkを使います。と、何やら、デフォルトのawkには、mawkなる得体のしれないものがリンクされています。調べてみると、gawkより、小さくて速いのだそうな。「速い」のは魅力だけど、gawkがインストールされていないのは困ります。過去に作って使い続けているスクリプトの中には、"gawk"を使って実行しているものも少なくありません。必ずしも「gawk特有の機能を使っている」訳ではありませんが、スクリプトから"gawk -f 〜"などとして使っているものが、ことごとくエラーになるのは気分が悪い。
 よって、gawkもインストールしておきます。上でtcshについてインストール方法を解説しましたので、もう省略します。

※gawkをインストールしたところ、【man awk】と、デフォルトのawk(=/usr/bin/awk)が、gawkに切り替わっていました。よって、以後、本HP(Arduino DIY)で、「awk」と言ったら、gawkになりますので、ご承知おきください。

  【vi blink.awk】 …… エディタを開いて、以下のコード(blink.awk)を入力してください。
  #! /usr/bin/awk -f
  BEGIN {
    system ("gpio -1 mode 32 pwm");
    pwm_siz=100;
    for (idx2=0; idx2<10; idx2++)
      for (idx=0; idx<pwm_siz; idx++)
      {
        val=int ((sin (idx*2*3.14/pwm_siz) + 1)*1024/2 + 0.5);
        val=(val<0)? 0: (val>1024)? 1024: val;
        cmd=sprintf ("gpio -1 pwm 32 %d",val);
        system (cmd);
      }
    system ("gpio -1 pwm 32 0");
  }

    【ZZ】 …… セーブしてエディタviを抜けます

  【chmod ugo+x blink.awk】 …… 作成したスクリプトに実行属性を与えます。

  【./blink.awk】 …… 作成したスクリプトを実行します。

 10回明滅すると、終了するようになっています。

Raspberry Piをシャットダウンする

 フルスペックのOSが載っていますので、実験を終了する時は、「ラズベリーアイコン ⇒ Shutdown」から、正しくShutdownして、本体ボード上のアクティブLEDが消灯したのを確認してから、電源を落としましょう。

※GUIだとモッサリ遅いので、shellウインドウが開いているなら、【sudo shutdown now】の方が早いかもしれません。

今回のお買い物

 今回のお買い物は、スイッチサイエンスと言うネットショップで、以下の通りでした。

 このお店は、土日が休業のお店なので、日曜の昼頃にポチっておいたところ、翌月曜の16時には、「発送完了」のメールが届きました。運送業者からも配送予定メールが届き、「火曜日に、ポスト投函予定」とのこと。
 どうやら、玄関先まで届けるタイプと違い、ポストに投函して終了と言う、「メール便」の類の様です。配送料が150円とお安かったのも、そのお陰ですかね?
 休業日に発注したことを考えると、実質、発注から1営業日で届いてしまいました。待つ時間も楽しいものですが、待ち時間が短いのも、また、幸せです。

 荷姿は、予想に反して、立派な厚紙でできた箱(B5サイズより一回り大きくて、厚さ2cmほど)に入っていました。「メール便」だったので、てっきり、エアクッション入りの封筒か何かだと予想していたのですが……。購入した商品は、いずれも小さなものでしたので、配送料150円で届けていただけたのはうれしいです。


 ここ最近、Arduinoの処理速度の限界にぶつかることが多くて、ちょっと興ざめでした。「こんなことにも使える」と、アイディアがあっても、実際に実装してみると、遅くて使い物にならない……。そんな時に出会ったのがRaspberry Piだったのですが、RTOSと異なり、Linuxであると言う限界……。また違った方向に限界が見えているのが気になってはいます。吉と出るか凶と出るか?


btn_arduino.png

btn_prev.png btn_next.png

home