ものづくりブログ

ゼロからスタートして何かを作って世に出すまでのことを書くブログです.

Raspberry Piで無線LANの接続が切れたとき自動で再接続させる方法

 

こんにちは.

 

前回の記事で,部屋の使用状況をモニタリングするデバイスの評価結果をお知らせしました.

その中で,無線LANへの自動再接続の課題がありましたが,今回はその方法を解説します.

 

まずはwicd-cursesというアプリケーションをインストールします.

 

sudo apt-get update

sudo apt-get install wicd-curses

 

インストールが完了したら実行します.

 

sudo wicd-curses

 

すると以下の様な画面が表示されます.

 

f:id:daisukekmr:20150208173730p:plain

 

自動的に今接続可能な無線を拾ってリストアップしてくれるので,その中から接続したいSSIDを選んで右キーを押し,設定画面に入ります(以下).

 

f:id:daisukekmr:20150208174729p:plain

 

ここでAutomatically connect to this networkを選択し,Spaceキーでチェックを入れれば接続が切れても自動で再接続されるはずです.

あとはKEYのところにルータ側で設定しているKEYを入力し,F10を押せばOKです.

 

アクセスできる無線一覧の画面に戻るので,「Shift + q」を押してwicd-cursesを終了します. 

 

ラズパイを再起動して,無事指定した無線ネットワークに接続されていれば成功です.念のため,ルータ側を再起動したときにラズパイが自動で再接続するか確かめてみましょう.

 

今回は再接続のためにwicd-cursesを使用しましたが,普通にwifi設定にも便利に使えそうですね.

 

ただし,私が設定を行った時は,WEP接続ではうまく行かなかったので,WPAでの接続が出来る環境でしかつかえなさそうです.WEP接続の際は接続しようとすると下記のような文字列がしばらく表示され,接続に失敗しました.このあたりの情報あれば教えて下さい.

 


Validating authentication...

 

 

 

参考文献 

[1]nWorld「Raspberry Pi無線LAN自動再接続」(http://firtel.blogspot.jp/2014/08/raspberrypi-wifi-autoreconnect.html)

Pythonの学習に役立つサイト

こんにちは.

前回の記事で,Pythonの実行方法と基本の構文までは学びました.あとはどのような機能があるか具体例を学びながらひたすら書いていくしかないのですが,その時に役立つサイトをいくつか紹介したいと思います.



1. Python-izm 基礎編

基礎編 | Python-izm


私が一番使っているサイトです.この中の基礎編をひと通り自分で書いてみるだけで,少しPythonが分かった気分になります.
文字列の説明から始まり,インポートの話までほぼ引っかかることなく学習を進められると思いますが,いくつかハマったところとか気になったところがあったので羅列しておきます.

  • 序盤で説明なくifやforが出てきます.これらは途中できちんと説明されますので,序盤に出てくる際はスルーしてしまって問題無いです.
  • if文の説明のところで,print unicode("文字列")という表記が出てくるのですが,このままではエラーを吐きます.print unicode("文字列", 'utf-8')と表記することで解決しました.
  • defで関数を作成するケースがたくさん出てくるのですが,この説明は応用編で出てきます.このブログの前回の記事でも少し出てきましたが,よく使う処理を分離して記述しておいて,使うときに呼び出す機能,というイメージです.

これを最後まで学べばなんとなく基本の機能や構文については身につくと思います.



2. Python-izm 応用編

応用編 | Python-izm


上記のサイトの応用編です.ここは基礎編より少しむずかしいので,ところどころ理解しづらいところがあるかもしれません.いくつかハマったときに役立ちそうなサイトを見つけましたので,紹介します.

  • クラスについて:

http://www.acroquest.co.jp/webworkshop/java_course/J_lecture09.html

スーパークラス(親クラス)とは - IT用語辞典 e-Words

環境変数(environment variables)とは - IT用語辞典 e-Words

フォルダやファイルを「再帰的に削除」するって、どういう意味ですか?... - Yahoo!知恵袋


また,このサイトはWindows向けに書かれているので,ディレクトリなどがWindowsのものになっています.Macで開発されている方は下記のケースで注意が必要です.

  • パッケージ化のところで,ディレクトリをC:/ではなく/Users/ユーザ名/などに読み替える必要があります.もし難しければ一旦ここは読み飛ばしても大丈夫だと思います.
  • 設定ファイルのところでunicodeが出てきますが,ここもエラーが出ます.対処法は上述のものと同じです.


その他の注意点もまとめておきます.

  • zipファイルのところで,サンプルで3個ファイルを作成してそれらを圧縮しますが,ある程度中身のあるファイルを作成しておかないと圧縮率の差がわかりません.
  • ファイルの読み書きの項目の中で,文字コード指定のところはうまくいきませんでした.ここは後で調べて解決でき次第記事にします.
  • メール送信の項目は最近のメールはセキュリティが厳しいのでこれだけで実行するのは難しそうです.この方法は別途調べて記事にしようと思います.
  • HTML,XML,およびJSONの解析はこのサンプル通りで動きますが,詳細にどのような処理を行っているかはわかりづらいので,これらは別途記事を書こうと思います.



3. 公式のDocuments

根本的なことを調べたいときに一番良いのは公式の文書を読むことです.基礎なので一般的に書いているせいで非常に難しいですが,このあたりを理解したほうが応用が聞くので後々楽になるはずです.

3.10.0b2 Documentation

Our Documentation | Python.org


これくらいで基本的なことはある程度網羅されていると思いますので,今後は具体的にやりたいことを実現するために学んでいきたいと思います.



参考文献
本文中に記載

Pythonの実行方法と基本構文

こんにちは.



以前の記事MacPythonの開発環境を構築しました.
今回はそれを少し使ってみようと思います.



1. プログラムの実行

まずはプログラムの実行方法を見てみます[1].お好きなテキストエディタで以下のように入力し,ファイル名を「test01.py」として適当なフォルダに保存してください.

print "Hello World"

ターミナルで今ファイルを保存したフォルダに移動してください.私の場合は/Users/ユーザ名/Develop/PythonPracticeに保存したので,以下のようになります.

cd /Users/ユーザ名/Develop/PythonPractice
※ユーザ名の箇所は,ご自分のユーザ名に合わせてください.

移動できたら下記のコマンドを実行します.

python test01.py

以下のように表示されたら成功です.

Hello World

次に,別の方法でPythonを実行してみます.
以下のコマンドを実行します.

Python

するとPythonコマンド入力待ち受け状態になるので,そこに以下のように入力します.

print "Hello world test"

以下のように表示されたら成功です.

Hello world test

このように,Pythonではいちいちソースファイルを作らなくとも対話形式で簡単な動作テストくらいであればターミナル上だけで実施が可能です.

対話モードから抜けるときは,exit()と打ち込んでEnterを押すか,control+Dを入力します[2].



2. 基本構文を理解する

次にもう少し複雑なプログラムを書いて,基本構文を理解しましょう.
以下のURLからファイルをDLし,「test02.py」という名前で先ほどと同じフォルダに保存してみましょう.

https://bitbucket.org/Daisukekmr/pythonpractice/downloads/test02.py

保存できたらそのフォルダに移動し,またさっきと同じように実行してみます.

cd Users/ユーザ名/Develop/PythonPractice
python test02.py

以下のように表示されたら成功です.

モジュールのロード
Hello world
関数:testを呼び出しました

それではtest02.pyをテキストエディタで開いて,部分ごとに内容を見て行きます.

# -*- coding: utf-8 -*-

print u"モジュールのロード"

def test():
    print u"関数:testを呼び出しました"

if __name__ == "__main__":

     print "Hello world"
#   print "はろーわーるど"
     test()

1行目はエンコードの宣言を行っています.今回は半角アルファベットのみでなく日本語(2バイト文字)が含まれているので,この宣言を行わないとエラーに成ってしまいます.

# -*- coding: utf-8 -*-

次に3行目(2行目は空行なので)ですが,printのあとにuが入っています.これは1行目で宣言したエンコードを使うという意味です.

print u"モジュールのロード"

5行目は関数を定義しています.関数とは,よく使う機能をモジュールとして作っておき,あとから呼び出すという使い方をします.C言語などでは関数は{}でくくるのですが,Pythonでは{}は使わず,中身を1段右にずらすことで表現します.このため,6行目は1段ずれて表記されています.

def test():
    print u"関数:testを呼び出しました"

8行目はちょっとむずかしいので追々理解していけば良いと思いますが,他のモジュールから呼び出された時に実行されないという意味です.ここは飛ばしてしまいましょう.

if __name__ == "__main__":

10行目は先程も出てきたprintですね.11行目のprintですが,実行結果では表示されませんでした.これは#によってコメントアウトされていたためです.

     print "Hello world"
#   print "はろーわーるど"

12行目は先ほど定義した関数を呼び出しています.test()という関数の中身は「関数:testを呼び出しました」と表示するというものでしたので,実行結果ではそのように表示されています.

     test()

これがPythonの基本構文です.ここまでわかってしまえばあとはある程度進めると思いますので,次回は勉強に役立つサイトの紹介です.



参考文献
[1]Python-izm (http://www.python-izm.com/contents/introduction/execution.shtml)
[2]PyCon JP 2012 Pythonプログラミングハンズオン(初級者向け)「動かしてみよう」(http://pyconjp2012-python-for-beginners.readthedocs.org/en/latest/start_python.html)