豆腐とコンソメ

豆腐とコンソメ

幸せと、主にラズパイとpythonについて書きます。

ラズパイをアドホック接続で使用する

ラズパイを自宅で使う分には、今回のような設定はいらないと思う。
ラスパイでラジコンを作るにあたって、必要になりそうなのでアドホック接続の設定を行った。

アドホック接続とは

以下に一般的な接続方法とアドホック接続の絵を書いてみた。

図1 一般的な接続方法の図
f:id:konoemario:20170504211457p:plain:w300

アクセスポイントであるルーターを介して、ラズパイと接続している。
ラズパイをPCみたいな使い方をする分にはこちらで事足りる。

図2 アドホック接続
f:id:konoemario:20170504211458p:plain:w300

対して、アドホック接続は、PCとラズパイが直接通信を行う。
これは、アクセスポイントであるルーターが届かない範囲でラズパイを動かしたいときに使える。
ラジコンも外で動かしたいので、アドホック接続で設定を行うことにする。

PCとラズパイが通信できる距離がどんなもんなのかは、ラジコンを動かし始めたら測定してみる。

尚、ラズパイにsimカードを挿して通信することも可能みたいで、そうなれば距離の制約はなくなるんじゃないか!と夢が広がります。

以降は、実際にアドホック接続の設定を行った際の作業内容をメモする。
ssh経由で設定を行ってもいいんだけれども、接続確認でNICの再起動をすると、きっとsshの接続が切れたり、設定がうまくいかないと、ssh接続そのものができなくなる。

なので、キーボードやらHDMIケーブルやら用意して作業した方が無難。

IPを固定する

アドホック接続では、DHCPサーバーの役割を担っている、Wifiルーターを経由しないことになる。
つまり、IPアドレスは固定で振り出す必要がある。

ここでは、二度手間感があるけれども、IPアドレスの固定を行った後に、アドホックの設定を行った。

/etc/dhcpcd.conf

固定するIPをdhcpcd.confに記載する。
後述のinterfaceに記載してもいけるけれども、推奨はこっちとのこと。

interface wlan0
static ip_address=192.168.1.12/24
static routers=192.168.1.1
staitc domain_name_servers=192.168.1.1
~                                      

/etc/network/interfaces

iface wlan0 inet の部分を、dhcp→manualに変更する。

auto wlan0
allow-hotplug wlan0
iface wlan0 inet manual
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf


ここの定義の仕方で挙動がどう変わるのかが、しっくりきてない。
試した結果(ちょっと怪しい)を以下に残す。

  • dhcpIPアドレスDHCPサーバーから取得する。
    dhcpcd.confに固定IPを記述しても、interfaceの定義が優先されそう。

  • static:IPアドレスを固定する。
    ただ、staticにすると、interfaceにその定義を追加しなきゃいけないっぽい。

  • manual:dhcpcd.confを見にいってくれるみたい。
    でもdhcpcd.confでDHCPサーバから取ってこいって書くことってあるのかな。

ifdown、ifupコマンドで確認

前述の設定を行ったら、IPアドレスが固定されていること、今まで通りsshで接続できること、を確認する。

再起動するのもいいんだけれども、うまくいっていない場合、何がうまくいっていないかわからないことが多い。

ここでは、NICの有効化、無効化を行う、ifdown、ifupコマンドを使って確認を行った。

・インタフェースを一旦、無効化してから

pi@raspberrypi:~ $ifdown wlan0

・インタフェースを、再度有効化する

pi@raspberrypi:~ $ifup wlan0

このとき、interfaceの定義に問題があったりすると、エラーメッセージを表示してくれる。

その後、ifconfigコマンドで、wlan0に固定したIPアドレスが設定されていれば大丈夫。

アドホックの設定を行う

設定はシンプル。
interfacesに内容を少し変更する。

だけ。

/etc/network/interfaces

auto wlan0
allow-hotplug wlan0
iface wlan0 inet manual
#wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

#ad-hoc用の設定 有効にする場合コメント解除して、wpa-confをコメントアウト
#チャンネルの番号はなんでもよいみたい。うまくいかないときにかえてみる 
wireless-channel 1
wireless-mode ad-hoc
wireless-essid pi
wireless-key 1616116161
微妙にはまるところ
wireless-key

wireless-keyはアドホック接続の際に必要となるパスワードを適当に決めて書く。
ただ、なんでもいいというわけではなく、ルールがあるみたい。

10桁か26桁の16進数である必要がある?っぽいです。

askubuntu.com

これに則っていない場合、前述のifdown、ifupコマンドを実行してみると、以下のエラーが吐かれます。

 Error for wireless request "Set Encode" (8B2A) :
 SET failed on device wlan0 ; Invalid argument.

とはいえ、wireless-kyeの設定がエラーの場合でも、接続自体は問題なくできます。ログイン時にパスワードを求められなくなるだけです。

# misplaced option

設定をいろいろ試している最中でinterfacesを編集し終わって、ifdown、ifupを試したところ出力されたエラー。

単純に、interfacesファイル冒頭の説明文のコメントアウトを誤って消していた。viエディタで作業するときは、あるあるな気がするので、記載しておく。

PC側のIPも固定する

アドホック接続する際には、ラズパイ側だけではなく、片方の端末もIPを固定する必要がある。

理屈がいまいちよくわかっていないので、さくっとメモがてら記載。

Mac OS X の場合

「システム環境設定」-「ネットワーク」-「Wifiの詳細」-「TCP/IPタブ」で以下の設定を行った。

f:id:konoemario:20170506123812p:plain:w300

DHCPが降り出すIPとかぶらないようにする

固定したIPとDHCPが降り出すIPが重複してしまうと、よろしくないので、DHCP側の設定を行う。
具体的にどうよろしくないかは、あんまりよくわかってないんだ。

また、DHCP側の設定もDHCPの機能を担っている機器によってさまざまなので、ここにあるのは自身のメモになる。

f:id:konoemario:20170506125104p:plain:w300

DHCPの機能を担っているルーターにログイン後、DHCPが割り当てるIPの個数を9個にしただけ。

割り当て開始が、192.168.1.2なので、192.168.1.10までDHCPが振ってくれると思われる。

同一ページに「DHCP固定IPアドレス設定」ってあるけれども、きっとこれはとある端末がDHCPサーバーにIPを要求した場合、常に同じIPを返却してくれるという仕組みだと思う。

DHCPサーバーありきの仕組みなので、アドホック接続の場合利用できないはず。

アドホック接続を行う

PC側のIPの固定が終えると、wifiのネットワーク一覧にラズパイの「wireless-essid」に設定したESSIDが表示される。

f:id:konoemario:20170506125411p:plain:w300

こちらを選択すれば、パスワードの設定をしていれば、入力を求められた上で入力を行い、接続ができる状態になる。

あとはその状態で、ssh接続を行えば、いつもどおり使用ができる。

$ ssh pi@192.168.1.12

WiringPiでエラーになった場合のメモ

tohutokonsome.hatenablog.com

前回、ラズパイZeroの初期セットアップした結果、問題になった部分をメモ

WiringPiが使用できない

pythonで「import wiringpi」しているプログラムを実行すると、以下のエラーが出た。

pi@raspberrypi:~/myproduct $ sudo python servo.py 
Unable to determine hardware version. I see: Hardware   : BCM2835
,
 - expecting BCM2708 or BCM2709.
If this is a genuine Raspberry Pi then please report this
to projects@drogon.net. If this is not a Raspberry Pi then you
are on your own as wiringPi is designed to support the
Raspberry Pi ONLY.

どうも前回「sudo ape-get upgrade」を行った際に、ファームウェアが最新になったことが原因みたい。

※参考URL
https://www.domoticz.com/forum/viewtopic.php?t=16852
Raspberry Pi のファームウェアのアップデート | Raspberry Pi

ファームウェアをダウングレードする

rpi-updateをインストールする。

pi@raspberrypi:~/myproduct $ sudo apt-get install rpi-update
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  rpi-update
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 4408 B of archives.
After this operation, 45.1 kB of additional disk space will be used.
Get:1 http://archive.raspberrypi.org/debian/ jessie/main rpi-update all 20140705 [4408 B]
Fetched 4408 B in 0s (5263 B/s)                           
Selecting previously unselected package rpi-update.
(Reading database ... 38765 files and directories currently installed.)
Preparing to unpack .../rpi-update_20140705_all.deb ...
Unpacking rpi-update (20140705) ...
Setting up rpi-update (20140705) ...



参考URLそのままのバージョンを取得する。
再起動後、wiringpiが使用できた。

pi@raspberrypi:~/myproduct $ sudo rpi-update 52241088c1da59a359110d39c1875cda56496764
 *** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom
 *** Performing self-update
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 12762  100 12762    0     0  51628      0 --:--:-- --:--:-- --:--:-- 51878
 *** Relaunching after update
 *** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom
 *** We're running for the first time
 *** Backing up files (this will take a few minutes)
 *** Backing up firmware
 *** Backing up modules 4.9.24+
This update bumps to rpi-4.4.y linux tree
Be aware there could be compatibility issues with some drivers
Discussion here:
https://www.raspberrypi.org/forums/viewtopic.php?f=29&t=144087
##############################################################
 *** Downloading specific firmware revision (this will take a few minutes)
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   168    0   168    0     0    316      0 --:--:-- --:--:-- --:--:--   317
100 52.3M  100 52.3M    0     0   454k      0  0:01:57  0:01:57 --:--:--  293k
 *** Updating firmware
 *** Updating kernel modules
 *** depmod 4.4.50-v7+
 *** depmod 4.4.50+
 *** Updating VideoCore libraries
 *** Using HardFP libraries
 *** Updating SDK
 *** Running ldconfig
 *** Storing current firmware revision
 *** Deleting downloaded files
 *** Syncing changes to disk
 *** If no errors appeared, your firmware was successfully updated to 52241088c1da59a359110d39c1875cda56496764
 *** A reboot is needed to activate the new firmware

WiringPiがpython nomodule named

こっちもはまった。

前回、このコマンドでwiringpiの設定を行った。 これが、よくなかった。

pi@raspberrypi:~ $sudo pip install wiringpi2



問題となるのは、「sudo」の部分。
何気なくルート権限でやろうぐらいの気持ちだったが、sudoで実行すると環境変数が引き継がれない。

コマンドのパスを調べる便利なコマンド「which」を使うと、わかりやすい。

・sudoを使用した場合

pi@raspberrypi:/usr/local/lib/python2.7/site-packages $ sudo which pip
/usr/bin/pip

sudoの環境変数で定義してあるPATHのpipが使われる。  

・sudoを使用しない場合

pi@raspberrypi:/usr/local/lib/python2.7/site-packages $ which pip
/home/pi/.pyenv/shims/pip

個別に定義したPATHのpipが使われる。


なので、sudo pip で wiringpiをインストールすると、以下のディレクトリにパッケージがインストールされることになる。

/usr/local/lib/python2.7/site-packages


sudoをつけないでpipを使えば、pyenv配下のバージョンごとのsite-packagesにインストールされる。

~/.pyenv/versions/3.5.1/lib/python3.5/site-packages $ 


とにかくsudo使わなきゃいいんじゃない?ってなるんだけれども、wiringpiをimportしているpythonプログラムを実行する場合、sudo権限で実行しなきゃいけないっていう部分で、これにはまった。

以下のような場合、実行しているpythonはどれだろうってなります。

sudo python xxxxx.py


簡単な解決策として以下を参考に、sudoersにenv_keepを追加しました。

qiita.com

以上。

ラズパイZeroでWringPiが使えるまでメモ

ラズパイZeroで無事ssh接続ができたので、pythonの設定を行っていきます。

tohutokonsome.hatenablog.com

ラズパイ3を購入したときに、同じことをやっているはずなんですが、全く記録に残してなかったので、新たな気持ちでメモをします。

とりあえずOSのパッケージ関連を最新化

こちらを参考にさせていただきました。
[Ubuntu] apt-get まとめ - Qiita
Raspberry PiでのPython 3.5環境構築 | MUDAなことをしよう。

sudo apt-get update

パッケージの「リスト」を最新化するコマンド。
最新のパッケージを落としてくるわけではなく、リストが新しくなる。

sudo apt-get upgrade -y

最新のパッケージをインストールする。

sudo apt-get dist-upgrade

upgradeは追加で更新が必要になったパッケージがあれば、更新を止めるのに対して、こちらはそのへんもがんがん更新してくれるっぽい。
今回は、upgradeとdist-upgrade両方やっているのだけれども、こっちだけでよかったりするのかしら。

Pythonの環境構築

OS周りのアップデートが終わったら、こっち。

pythonのバージョン確認

現在、インストールされているpythonのバージョンを確認する。

デフォルトで2.7.9がインストールされている。

pi@raspberrypi:~ $ python -V
Python 2.7.9

pytnon3もデフォルトでインストールされているという内容をみた気がするのだけでども 「Raspbian Jessie Lite」にはないのかも。

pi@raspberrypi:~ $ pytnon3 -V
-bash: pytnon3: command not found

pyenvを入手する

python3.5.1をインストールするのに最も手軽そうなのでpyenvを入手する。
pyenvはpythonのバージョンをインストールしたり、簡単に切り替えたりできる模様。
pyenvのプラグインっぽいものでvirtualenvというものもあって、こちらは同一バージョンのpython間でも切り替えができるというもの。
同一バージョンのpython3.5.1に対して、こっちは、このパッケージをいれて、こっちには入れないみたいな使い分けをするときに便利なのかな。
今回はとりあえずpyenvのみ導入。

gitをインストール

pyenvをインストールする前にpyenvのリソースがgithubにあるので、gitをインストール

pi@raspberrypi:~ $ sudo apt-get install git

pyenvのインストール

githubからpyenvリソースを取得してホームディレクトリに置きます。

pi@raspberrypi:~ $ git clone https://github.com/yyuu/pyenv.git ~/.pyenv

pyenv用の環境変数の設定をします。

pi@raspberrypi:~ $ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.profile
pi@raspberrypi:~ $ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.profile
pi@raspberrypi:~ $ echo 'eval "$(pyenv init -)"' >> ~/.profile

環境変数を反映させます。

pi@raspberrypi:~ $ source .profile

python3.5.1をインストール(1時間ぐらいかかるかも)

と、ここまできたらpyenvを使って目的のバージョンをインストールします。

pi@raspberrypi:~ $ pyenv install 3.5.1

インストールが終わったらバージョンが追加されているかを、pyenvのコマンドで確認。
以下のように追加されてればOK。

pi@raspberrypi:~ $ pyenv versions
* system (set by /home/pi/.pyenv/version)
  3.5.1

使用するバージョンを3.5.1にする。

pi@raspberrypi:~ $ pyenv global 3.5.1
pi@raspberrypi:~ $ pyenv versions
  system
* 3.5.1 (set by /home/pi/.pyenv/version)

WringPiをインストール

PythonでラズパイのGPIOを制御するためのモジュール。
pipはpythonのパッケージ管理システム。これを使ってwringpi2をインストール

pi@raspberrypi:~ $sudo pip install wiringpi2


(2017/5/1 追記) sudoはいらない。微妙にはまった。

pi@raspberrypi:~ $pip install wiringpi2



終わったら、wringpiがインストールされたかをpipのコマンドで確認する。
wringpiとwringpi2があればOK。

pi@raspberrypi:~/myproduct $ pip freeze
wiringpi==2.32.1
wiringpi2==2.32.3

FTPの設定も行っておく

以下を参考にしました。
yamaryu0508.hatenablog.com

以上。

RaspBerry Pi Zeroの初期設定メモ

ラズパイZero買ってきた

こちらのラジコンをつくる上で、軽量化が避けて通れなそうなので、ラズパイZeroを秋葉原で買ってきました。  
tohutokonsome.hatenablog.com

5ドルで購入することができる、というラズパイZeroですが、発売されたばかりのせいか、単品売りしているお店は見当たらず、諸々のセット価格で3000円程度かかりました。

今現在(2017年3月末)のお店事情なので、もう単品の取り扱いは開始しているかもしれません。

この辺のネットショップで買ってみたい気もします。
Raspberry Pi Zero 取扱開始のお知らせ - Raspberry Pi Shop by KSY

とはいえ、無線LANBlueToothを内蔵したラズパイZero(W)もそろそろ出回るみたいです。
なのでそっちが出たら、Zeroを買っちゃおうかと思います。

セット内容

以下が、お店で買った際のセット内容です。

f:id:konoemario:20170429183859j:plain:w300

  • ラズパイZero本体
  • 電源
  • microSD(4GB)
  • マイクロUSBケーブル
  • ミニHDMI変換アダプタ
  • ピンヘッダー(写真だとすでに本体に装着済みです)

写真にはないけれども、SSHで接続するためにも、wifiドングルは必須!

ピンヘッダーの装着

ラズパイZeroですが、GPIO見ての通りピンヘッダーが本体とばらばらになっていました。
なので、これをはんだづけしてくっつける必要があります。

f:id:konoemario:20170429182543j:plain:w300

※作業後に気づいたのだけれども、はんだつげしなくてもいけたかもしれない。
GPIO Hammer Headerで検索すると、ピンヘッダーをとんかちで叩いてくっつける方法が紹介されています。
動画では、とんかちで叩く際に、ラズパイZero本体を固定する機器があるので、はんだづけしなくてもよい、ピンヘッダーセットなのか、固定さえできればピンヘッダーはなんでもいいのか、とかその辺がわかってないです。

www.youtube.com

はんだづけをした

ステッピングモーターを動かしてみた際にモータードライバのはんだづけをした経験があるので、余裕だぜ!と思ったのですが、大苦戦しました。

tohutokonsome.hatenablog.com

以前、はんだづけをする際にブレッドボードに固定してやってみて、これって危ないのかな、なんて思ってたのですが、はんだづけするのは、そこまで間違っていないみたいでした。

はんだづけ完了後の状態ですが、ものすごい下手くそです。
現時点で動作確認してないので、GPIOがそれぞれ無事なのかがかなり不安です。 f:id:konoemario:20170429185338j:plain:w300

※参考動画
www.youtube.com

microSDにOSを書き込み

ラズパイ3のときは、NOOBSを使って、GUI版の「RASPBIAN JESSIE WITH PIXEL」をインストールしました。

f:id:konoemario:20170429190738p:plain:w300

今回は、CUI版の一番最軽量の「RASPBIAN JESSIE LITE」を使います。 microSDが4GBで、imgファイルは1.3GBでした。

Download Raspbian for Raspberry Pi

ラズパイ3のときは、Windows環境でカードリーダーでmicroUSBを認識した後にimgファイルをドロップして完了!みたいな操作をした記憶があるのですが、今回はMac環境でイメージファイルを作成しました。

Terminalを起動して、コマンドでimgを書き込むとそれっぽい満足感を得られるのですが、一歩間違えるとOSやらなんやら消しかねないぞ!自信ないならこれをつかっとけ!という公式アドバイスに従って「Etcher」といツールを使用しました。

etcher.io

ラズパイZeroを起動

このへんは、ラズパイ3のときにすごく感動したのですが、二度目ともなると、大したこともないです。
HDMIをモニターに挿すことでコンソール画面が起動します。

が、sshの設定にものすごく時間が買ったので、ラズパイZero(W)購入の際に苦労しないようにメモをしておきます。

SSHで繋がるように設定する。

「ラズパイ ssh」で検索すると参考記事がたくさんでてくるので、簡単そうだったのですが

  • キーボードとwifiドングルを同時に挿せない
  • ラズパイ3にもwifiドングルが必須だという勘違い

の二重苦によってかなり苦労しました。

ifconfigでネットワークの状態を確認する

ifconfigでネットワークインタフェースの状態を確認する。

・ifconfgのコマンド
ネットワークコマンド使い方:ifconfig 〜(IP)ネットワーク環境の確認/設定を行う - @IT

ネットワークインタフェース(以降、NIC)は、コンピューターがネットワークに接続するために必要なもの。

無線LANを利用する場合も、それに対応したNICが必要になる。

最近のPCでは、有線のNICはもちろんのこと、無線のNICも内蔵している。
ラズパイ3も無線のNICは内蔵しているのだよ!)

まず、ラズパイZeroを起動して、ローカライゼーションの設定を行った後、ifconfigを打ってみる。

pi@raspberrypi:~ $ ifconfig

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:256 errors:0 dropped:0 overruns:0 frame:0
          TX packets:256 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1
          RX bytes:20736 (20.2 KiB)  TX bytes:20736 (20.2 KiB)

usb0      Link encap:Ethernet  HWaddr 消した
          inet6 addr: 消した Scope:Link
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)


※MACアドレスっぽいものや、なんとなくまずそうなものは消してます。  

以下二つのみが存在していることが確認できる。

  • lo

  • usb0

loは必ず存在しているみたい。

 loは「ローカルループバック」と呼ばれる特別な仮想インターフェイスだ。ホスト自身を示しており、OSのプロトコルスタックが必ず提供することになっている。従って、まったくNICを設置していない場合でも、このloだけは存在する。そうした初期状態であっても、仮想的にネットワークのテストなどに使えるように用意されているのだ。また、対応するIPアドレスは必ず127.0.0.1が割り当てられる。当然、このIPアドレスを用いて外部と通信することはできない。

以下より抜粋
ネットワークコマンド使い方:ifconfig 〜(IP)ネットワーク環境の確認/設定を行う - @IT

usb0は今の段階ではよくわからないので飛ばす。
usbテザリングで使えるみたい。
kassyjp.ninja-web.net

wifiドングルをラズパイZeroに挿す

使えるUSBポートはひとつしかないので、wifiドングルとキーボードの両方を同時の使用することができません。

なので、キーボードを外すことになってしまいます。

仕方がないので、以下のようなシェルスクリプトを書いて実行した後に キーボードを外して、wifiドングルを挿しました。

gistc58c215674b0c2e8e11f1c27a6c6d2b0

それぞれの結果を抜粋するとこんな感じでした。

lsusb
Bus 001 Device 005: ID 0411:01ee BUFFALO INC. (formerly MelCo., Inc.) WLI-UC-GNM2 Wireless LAN Adapter [Ralink RT3070]

(確認点)
・wifiドングルが認識されていること。  
lfconfig
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:256 errors:0 dropped:0 overruns:0 frame:0
          TX packets:256 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1
          RX bytes:20736 (20.2 KiB)  TX bytes:20736 (20.2 KiB)

usb0      Link encap:Ethernet  HWaddr 消した
          inet6 addr: 消した Scope:Link
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

wlan0     Link encap:Ethernet  HWaddr 消した
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)


(確認点)
・wifiドングルを挿すことで新たなインタフェースが増えていること
   (大抵はwlan〜みたい)
iwconfig

突然でてきた「iwconfig」 ifconfigがNIC全体に対して、iwconfigは無線LANの専門みたい。
無線LANのESSIDとかの設定が確認できる。

Linuxコマンド集 - 【 iwconfig 】 無線LANインタフェースの参照・設定:ITpro

wlan0     IEEE 802.11bgn  ESSID:off/any
          Mode:Managed  Access Point: Not-Associated   Tx-Power=20 dBm
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Power Management:off

(確認点)
・見れることぐらい
    ESSIDやパスの設定をしてないので、繋がっていない状態
iwslist

これは、無線LANのアクセスポイントを探すことができるコマンド。

ネットワーク管理の基本Tips:端末からアクセスポイントの情報を調べるには? iwlistコマンド - @IT

                    ESSID:"これもなんとなく消したESSID1"
                    ESSID:"これもなんとなく消したESSID2"
                    ESSID:"これもなんとなく消したESSID3"
                    ESSID:"これもなんとなく消したESSID4"

(確認点)
・自宅のwifiルーターのESSIDが検出できていること
 

このへんまで問題なければ、次の設定へ進む。

無線LANの設定を行う

一旦、wifiドングルを外して、キーボードに差し替えて以下ファイルを編集する。

  • interface
  • wpa_supplicant.conf
/etc/network/interfaceの設定

wifiドングル(NIC名:wlan0)用の設定を追加する必要がある。 記載ルールはDebianの資料にあるけれども理解しにくい。
第5章 ネットワークの設定

また、IPをDHCP経由ではなく固定する場合の書き方は後で調べる。

# interfaces(5) file used by ifup(8) and ifdown(8)

# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'

# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d

auto lo
iface lo inet loopback
iface eth0 inet manual

#ここから追加 wlan0用の設定

#ラズパイ起動時に自動でwlan0を起動
auto wlan0
#ホットプラグ(USBを電源いれっぱで抜き差し)を検知して起動
allow-hotplug wlan0
#dhcpでIPの設定を行う。固定にする場合はstatic?dhcpcd.confに書くの?
iface wlan0 inet dhcp

#wifiのSSID等の設定は、こっちに書く
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
/etc/wpa_supplicant/wpa_supplicant.confの設定

以下のコマンドで、wpa_supplicant.confの設定を行う。

sudo sh -c "sudo wpa_passphrase SSIDの名前 パスワード >>  /etc/wpa_supplicant/wpa_supplicant.conf"

そこからルーターの設定に応じて、kye_mgmt以降の設定を行います。
このへんは既にwifiで接続していたラズパイ3の設定をそのまま書くことにしました。

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=JP

network={
        ssid="rs500m-d6afa0-1"
        #psk="暗号化前のpass"
        psk=暗号化後のpass
        #以下を追加
        key_mgmt=WPA-PSK
        proto=WPA2
        pairwise=CCMP
        group=CCMP
        priority=2
}

ここまで来たら、設定が完了です。
なんとなく再起動して、設定前に実行したシェルスクリプトを実行して、wifiドングルを挿します。

ifconfigの実行結果のinet addr のあたりにIPアドレスが振られていれば成功です。

wlan0     Link encap:Ethernet  HWaddr 消した
          inet addr:192.168.1.6  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: 消した Scope:Link
          inet6 addr: 消した Scope:Global
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:8645 errors:0 dropped:12 overruns:0 frame:0
          TX packets:3175 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:870992 (850.5 KiB)  TX bytes:503769 (491.9 KiB)

思ったこと

USBハブを購入したほうがよい。

※設定完了後、買いました。

GPIO制御のWringPiを使うまで

以下を追記しました。

tohutokonsome.hatenablog.com

RaspBerryPiでラジコンをつくる(5)

時間が空いてしまいましたが、前回からの続きです。
タイトルをラジコンをつくるにかえました。

RaspBerryPiでラジコンをつくるシリーズ
RaspBerryPiでモーターを動かす(1) - 豆腐とコンソメ
RaspBerryPiでモーターを動かす(2) - 豆腐とコンソメ
RaspBerryPiでモーターを動かす(3):圧倒的力不足 - 豆腐とコンソメ
RaspBerryPiでモーターを動かす(4) - 豆腐とコンソメ

レゴを使う

前回、ラジコンの材料になるかもという安易な気持ちでレゴブロックを購入しました。

f:id:konoemario:20170404214456j:plain:w300

しかし、組み立ててあらためてわかったのですが、

  • モーターをつける必要がある
  • ラズパイとの接続の仕方がわからない

ということに気づいてしまいました。

f:id:konoemario:20170404214459j:plain:w300

ということで、

モーターで動くレゴを買ってみます

再度、レゴを買う

ということで買っちゃいました。
f:id:konoemario:20170422222454j:plain:w300

あれ、もうこれラジコンそのものでは、目標達成しちゃった?
とか大いなる疑問が湧いてきたのは事実なのですが、耳を塞ぎます。

完成図
ラジコンめっちゃ楽しい。
f:id:konoemario:20170422222602j:plain:w300

方針を決める

今回購入したレゴのラジコンは見ての通りキャタピラカーになります。
ということは以前、購入したキャタピラカーと似たようなものです。

※以前購入したタミヤの楽しい工作シリーズ
f:id:konoemario:20170423114557j:plain:w300

とはいえ値段がかなり違います。
奥さんに白い目で見られながらも組み立て作業を行いました。

こうして書いてみると、

なぜタミヤキャタピラーではだめだったのか

もはや自分でもわからないです。

レゴ (LEGO) テクニック RCトラックレーサー 42065

レゴ (LEGO) テクニック RCトラックレーサー 42065


タミヤ 楽しい工作シリーズ No.108 タンク工作基本セット (70108)

タミヤ 楽しい工作シリーズ No.108 タンク工作基本セット (70108)

昔からレゴが好きだったんだよ!レゴランドも出来たし、レゴ流行ってるからね!と誤魔化しながら突き進みます。

さてレゴのキャタピラカーですが、さきほどタミヤのキャタピラカーと同じといいました。

とはいえ決定的に異なる点があります。

それは、レゴのキャタピラカーは曲がるというところです。

これを実現している仕組みですが、以下に絵をかいてみました。
f:id:konoemario:20170423120349p:plain:w300

モーターが二つあり、

  • モーターAとモーターBが同時に回ると、前(もしくは後ろ)に進みます。

  • モーターAだけ回ると左に曲がります。
    (正確には左を向くと言う方がいいのかしら)

  • モーターBだけ回ると右に曲がります。
    (正確には右を〜)

素人考えですが、戦車のようなキャタピラカーはこのような仕組みになっているかと思います。

ただ、通常の車は「ステアリング」という仕組みを採用しているみたいで、ちょっと作りが異なります。
これは、前輪のタイヤを右へ、左へと向くことでスムーズに曲がることができるみたいです。

f:id:konoemario:20170423121409p:plain:w300

今回はせっかくなので、キャタピラタイプではなく、ステアリングを実装したラジコンを作っていきたいと思います。

あれ、レゴのキャタピラカーはどうなるの?

という疑問は一旦置いて、次回に続きます。

tohutokonsome.hatenablog.com

RaspBerryPiでステッピングモーターを動かす

tohutokonsome.hatenablog.com

ラジコンカーをつくるためにモーターを漁っていたら、「ステッピングモーター」に触れる機会があったので書いておきます!

動かすのに、かなり苦戦しました。

誤っている箇所があればご指摘いただけると嬉しいです!

ステッピングモーターとは

通常のモータは電流を流すと、ぷしゃあああと何回転もするの対して
ステッピングモータは、とりあえず30度回転しよっかみたいみたいな感じで
回転する角度を制御できるみたいです。

使用した製品

以下の製品を使用しました。

ステッピングモーター
バイポーラ ステッピングモーター MDP−35A 48ステップ: パーツ一般 秋月電子通商 電子部品 ネット通販

モータードライバ
DRV8835使用ステッピング&DCモータドライバモジュール: 組立キット 秋月電子通商 電子部品 ネット通販

これらは、ラズパイマガジン2017年2月&4月号の電子工作入門部品セットに含まれています。


モータードライバのはんだごて

ブレッドボードに接続する際には、端子とモータードライバをはんだごてする必要があります。

モータードライバはものすごく小さい!
f:id:konoemario:20170416014034j:plain

とりあえず部品を固定しないとどうにもならないので、ブレッドボードに挿して固定することにしました。
おそらく推奨されないやり方だと思われますが、突き進みます。

f:id:konoemario:20170416131614j:plain

はんだごてをするための「はんだ」も写っているのですが 部品に比べかなり大きいです。
電子工作用のもうすこし細いやつを購入すればよかったかも。

また、端子は14本あったのですが、モータードライバは6本が2つ必要だったので手で折っちゃいました。
この辺のことは常識なのか、どこにも説明が書いてないので不安になります。



はんだごて途中経過

f:id:konoemario:20170416014650j:plain

びっくりするぐらい下手くそですね。
念のため買っておいた、はんだ吸い取り線が大活躍しました。



汚いながらも、なんとか最後まで完了しました。

f:id:konoemario:20170416014907j:plain

配線をしてみる

伝える気があるのかないのかわからない絵ですが、こんな感じです。

f:id:konoemario:20170416021142j:plain

ラズパイから、モーター用の電源5V、モータドライバー用の電源3.3Vを供給しています。

モーターのデータシートをみると、駆動電圧12Vとなっており、モータドライバの方もMAX12Vと記載があるので、今回は少なめです。

絵の中のラズパイから伸びている、青、白、黄、赤の線ですが、こちらがプログラムで制御する部分になります。

ステッピングモーターは、DCモーターとは異なり、線が4本あります。

細かい仕組みはさっぱりですが、この線に決まった順序で電圧をかけていくことで、モーターが回転します。

f:id:konoemario:20170416134103j:plain

ここまでを簡単に整理すると、 以下の通りとなります。

  • AIN1→AOUT1(青の線へ出力)
  • AIN2→AOUT2(白の線へ出力)
  • BIN1→BOUT1(黄の線へ出力)
  • BIN2→BOUT2(赤の線へ出力)

ですので、今度はラズパイ側から、AIN1〜BIN2へ信号をおくるために配線を行っていきます。

まず前提のとなるラズパイ側ピンの役割は以下の通りとなります。

f:id:konoemario:20170416140214j:plain

※下段部分の絵は、公式の絵になります。 www.raspberrypi.org

黄色のGPIOの部分がプログラムから制御できる部分になります。

今回は、AIN1〜BIN2の制御は以下のピンを使うことにしました。

  •  7番のピン-AIN1
  • 11番のピン-AIN2
  • 13番のピン-BIN1
  • 15番のピン-BIN2

ちなみに、1番のピンはモータードライバの電源、2番のピンはモーダー電源として利用しました。
6番もGND(マイナス側)として利用しています。

※GNDってなんだってなるのですが、ラズパイをただの乾電池として捉えると、理解しやすいかもです。
電流はプラスからマイナスに向かって電流が流れます。
なので、乾電池もプラス極とマイナス極をつないで初めて電流が流れます。

GPIOや電源の部分は全てプラスになります。
GND(マイナス)まで回路をつなぐことで、電流が流れ始めます。

全部つなげてみるとこんな感じになりました。

f:id:konoemario:20170416143227j:plain

Pythonで実行してみる

コードは、以下の通りとなります。
冗長なコードかもしれませんが許してください。 

一点混乱するところとして、PINの番号とGPIOの番号が一致していません。

  • GPIO4 -7番のピン
  • GPIO17-11番のピン
  • GPIO27-13番のピン
  • GPIO22-15番のピン

物理的なピンの番号と、内部の役割に応じた番号で違っているみたいです。
公式サイトにそれらしき関係が載っていました。
Raspberry Pi GPIO Pinout

ステッピングモーターを動かす

反省点

備忘録がてら反省点を。

はんだごてが適当すぎた

最初、モーターが全然動きませんでした。
テスターを使ってステッピングモータのそれぞれの線に電流が流れているのかを確認した結果
白の線に電流が流れていないことが判明。
対応するモータドライバ部分のはんだをやり直した結果、電流が流れるようになった。

データシート、秋月電子通商のマニュアルをちゃんと読むべき

http://akizukidenshi.com/download/ds/sanyos/MDP-35A_a.pdf http://akizukidenshi.com/download/ds/akizuki/AE-DRV8835-Ss.pdf

作業の進め方は、ラズパイマガジン2月号のステッピングモーターの内容で進めていました。
ラズパイマガジンには、読者限定サイトが用意され、配線図や、Pythonコード収録されています。

しかし、配線図、コードを、そっくりそのまま実行したところ、モーターがまったく動きませんでした。

前述のはんだごてがダメだった部分もあり、調査にいろいろと時間がかかったのですが
最終的にデータシート、秋月電子通商のマニュアルをよく見ることで解決しました。

LEDを正しく光らせる

電子工作まとめ
tohutokonsome.hatenablog.com

今回は、LEDを安全に点灯させてみる。

LEDの仕様を確認する

LEDを点灯するにあたっては、仕様がちゃんと存在していて、「データシート」と呼ばれるものに記載されている。

この「データシート」という名称は、モーターなどの製品でも存在していて 電子部品の仕様書みたいな存在ではないかと思われる。

使用するLEDのデータシートはこちら。
http://akizukidenshi.com/download/OSPW5111A-YZ.pdf

ファイルは、電子部品をオンラインでも購入することのできる秋月電子通商で検索するとあったりする。

データシートの必要箇所を抜粋する。

f:id:konoemario:20170413212051p:plain

まず、もっとも大事なのは絶対最大定格(Abosolute Maximum Rating)という値でこれを超えると電子機器がぶっ壊れるから守ってねという値。

表の内容から察するに30mAが限界ということがわかる。
一般的に最大の半分程度の電流を流すみたい。

なので、今回は20mAの電流を流してみたいと思う。

使用する電源は乾電池4本。
1本の電圧が1.5Vなので、6Vの電圧となる。

オームの法則より、6Vの電圧を使用して20mAの電流を流したい場合、抵抗をいれることで流れる電流をコントロールすることができる。

必要な抵抗 (Ω) = 6V /  20mA = 300Ω

上記の式より、300Ωの抵抗が必要ということがわかる。

ではさっそく、300Ωの抵抗を用意しよう、というとそうではないのでややこしい。

というのも、LEDライトにも抵抗は存在しているのである。

なので、LEDライト抵抗値を調べ、そこからたりない分の抵抗を足す必要がある。

300Ω  = (LEDの抵抗) + たりない分の抵抗

LEDの抵抗は一定ではない

LEDの抵抗を調べてみると、抵抗がどれくらいかは書いていないことがわかる。

厄介なことに、LEDや豆電球の抵抗値は固定ではなく、与える電圧によって変化をしてしまう性質をもっている。

自分がわかりやすかったのは、豆電球の例で、電圧を与えることで、豆電球のフィラメントと呼ばれる部分が熱をもって その結果、電流が流れにくくなる(豆電球の抵抗が高くなる)ということが起きるらしい。

LEDも細かいことはわからないけれども、そういった性質をもっている。

LEDの抵抗がわからないと、どれだけ抵抗足せばいいかわかんない、となってしまうのだが、データシートに乗っている以下の部分にヒントがある。

f:id:konoemario:20170413212053p:plain

Electrical -Optical Characteristicsは直訳で「電気的諸特性」とよくわからない日本語だが 書いてある内容は、20mAを流したときの電圧が記載されている。

MinとMaxは文字通り、最少と最大で、Typは標準値という意味。

なので、このデータシートからLEDの抵抗値を読み取ることができる。

これもオームの法則より

LEDの抵抗 =    3.4V / 20mA = 170Ω

※電圧は標準値(3.4V)を採用する。
※固定の抵抗値ではなく、20mAを流す場合の抵抗。

以上から、たりない分の抵抗は

たりない分の抵抗 =  300Ω  - 170 Ω = 130Ω

ということがわかる。

ちなみに、こんなまわりくどい計算ではなく

必要な抵抗 = (電源の電圧 - LEDに必要な電圧) / LEDに流す電流

(6V - 3.4V) / 20mA = 130Ω

という考え方でも同じ値を求めることができる。
こちらの方がシンプル。

点灯してみる

残念ながら手元に130Ωの抵抗器はなく、100Ωの抵抗器しかなかった。
100Ωで問題ないかを計算してみる。

(6V - 3.4V) / 流れる電流の想定 = 100Ω

上記を解くと、流れる電流は26mA

ちょっと怖いけれども、30mAは超えないのでやってみる。

f:id:konoemario:20170413213053j:plain:w300

想定より3mAほど大きい電流が流れ焦りましたが、無事点灯することができました。

次回はRaspBerryPiと接続したいと思います。