Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
天気予報ガジェットを作りな
がら、Pythonを勉強しよう
@Fablab北加賀屋
2016/1/30
八登浩紀
FabLabとは?
• パーソナル・ファブリケーションに必要な機材を備
えた、実験的な市民工房のネットワークです。
• ファブラボ憲章にのっとり、”Do It With
Others(DIWO)”, ”Learn Make Share”を実践す...
えんやとは?
• ファブラボ北加賀屋の電子工作チームの名前です。
• 現在は以下の3チームにゆるく分かれて活動しています
• Arduino
• RaspberryPi → 今日はこれ。
• mbed
• えんやのfacebookページがありま...
ものづくりとプログラミング
• なぜものづくりにプログラミングが必要なの?
• 情報の入力
← センサー、インターネットなど
• 情報の加工
← プログラミング
• 情報の出力
← LED、サーボモーター、インターネットなど
Pythonとは?
• スクリプト型の言語で、コンパイルなしで実行でき
る言語です。
• 科学技術計算に強く、CADソフトなどのスクリプ
トとしてもよく用いられます(例:Rhinoceros)
• Raspberry Pi上で動作するRaspb...
なぜPythonか?
• ユーザーが多いです。
www.tiobe.com/index.php/content/paperinfo/tpci/index.html
• 機能としてコンパクトで習得がしやすいと言われて
います。
• ライブラリが充...
Pythonの言語仕様
• ガベージコレクタによる自動メモリ管理
• 手続き型、オブジェクト指向、関数型など、色々な
書き方のコーディングができる(マルチパラダイム)
• 変数の型は自動的に決定される(動的型付け)
• 変数の型チェックが自動で...
Raspberry Piとは?
• PCライクなマイコンボード。
• キーボード、マウス、モニターを繋いで普通のPC
のように使えます。ネット接続も容易です。
• GPIO出力により電子回路に組み込めます。
• OSはLinux(Raspbia...
Raspberry Piのラインナップ
• Raspberry Pi:初代ラズパイ
• Raspberry Pi 2:CPU4コア+メモリ1GBで
性能強化したラズパイ
• Raspberry Pi Zero:5ドルの小さなラズパイ
• スペッ...
今回の目標:Pythonと
Raspberry Piで天気予報ガジ
ェットを作ろう!
天気予報ガジェットの仕組み
Internet
天気予報情報の取得
ラズパイ
天気予報情報の処理
LED点灯信号の出力
ブレッドボードLED
Pythonを勉強しよう
RaspberryPiに
ログインしてみよう
• Windows
• 方法1:SSH
1. TeraTermをインストール
2. TeraTermで以下のサーバにsshで接続
192.168.0.99
ユーザー名: pi, パスワード: ras...
RaspberryPiに
ログインしてみよう
• Mac
• 方法1:SSH
ターミナルからsshで以下のサーバにアクセス
ssh pi@192.168.0.99
パスワード: raspberry
• 方法2:VNC
Finder→メニューバー...
Pythonの基本文法
四則演算
• 2.2+5.6
• 3−1
• 3.1*4.2
• 3/4
• (3+4)*10/3
変数と型
• x = 4
• y = “Python”
• z = True
• x = “Test” + 5
• y = “Test” + “Python”
文字列、入出力、コメント
• len(“Python”)
• “Python” * 10
• print(“Python”)(3.系) print “Python”(2.系)
• temp = input(“Temperature is: “)...
条件比較
• 2 == 2, 3 != 10
• “Python” == “Ruby”
• 3 >= 10, 3 < 10
• not x == 2
• “P” in “Python”, “1” not in “Python”
• x > 3 ...
条件分岐とインデント
• if x >= 20:
print(“large”)
elif x > 5:
print(“medium”)
else:
print(“small”)
• if “Python” in “PythonPython”:
...
リスト
• list = [ 10, 20, 30, “Python”, “RasPi” ]
list[1], list[-1]
len(list)
list[2:4], list[-4:-2], list[1:]
• list.append(...
辞書型
• a = { ‘First’:”Python”, ‘Second’:”Raspberry Pi” }
a[‘First’]
• b = {‘First’:”Python”, “Second”:[1,2,3,4,5]}
b[‘Secon...
ループ
• for member in list:
print(member)
• for i in range(10):
print(i)
• x = 0
while x < 10:
print(x)
x = x + 1
関数
• def sum(a, b):
return a + b
sum(10, 20)
• def multiple(a,b=10):
return a*b
multiple(5)
multiple(5,4)
モジュール、ライブラリ
• import math
math.sqrt(5)
• from math import sqrt
sqrt(5)
• from math import *
sin(pi/2)
• import RPi.GPIO as...
PythonでLチカしてみよう
• ブレッドボード
GND
電源ライン
1列が
導通している
PythonでLチカしてみよう
http://raspi.tv/2014/rpi-gpio-quick-reference-updated-for-raspberry-pi-bから引用
PythonでLチカしてみよう
#!/use/bin/python3
# -*- coding: utf-8 -*-
# モジュールのロード
import time
import RPi.GPIO as GPIO
# GPIOの設定
GPIO....
天気予報ガジェットの
プログラムを見ていこう
天気予報ガジェットの仕様
• インターネットから一週間分の天気予報情報を取得
します → OpenWeatherMap、Webからの情報
取得
• 天気予報情報から、6時、12時、18時の天気情報を
取り出します → JSON、正規表現
• 分...
天気予報ガジェットの仕様
• 各時間の天気に応じて以下のようにLEDを光らせる
→ RPi.GPIO
晴れ:消灯
曇り:暗く点灯
雨、雪:明るく点灯
OpenWeatherMap
• http://openweathermap.org/
• APIで世界の各都市の天気を取得できる
• 現在の天気と、5日間・3時間ごとの天気を取得可能
• フリーなら、1分60回、1日50,000回まで取得可能...
Webページからの情報取得
• URLを指定して、そのURLにアクセスしたときに返ってく
る情報(ブラウザに表示されるのと同じもの。)を取得で
きます。
• 使用例:
import urllib.request
response = urlli...
JSON
• 表示の仕様:http://openweathermap.org/forecast5
• Webで情報をやりとりするための形式です。
• 決まった構造を取るので、ライブラリで簡単にPythonの
辞書型に変更して、情報を取得すること...
正規表現
• 文字列を処理するための手法です。
• 文字列の中から、条件に合う部分を抽出できます。
• 使用例:
import re
pattern = re.compile(r'd+')
dt_txt=“2014-07-23 09:00:00...
お天気予報ガジェットのプロ
グラム
• 実際のコードを見ながら説明します。
Pythonの学び方
• Codeacademy(英語)
https://www.codecademy.com/
• ドットインストール(日本語)
http://dotinstall.com/lessons/basic_python_v2
• ...
ご静聴ありがとうござい
ました。
Upcoming SlideShare
Loading in …5
×

天気予報ガジェットを作りな がら、Pythonを勉強しよう

1,496 views

Published on

天気予報ガジェットの制作を通じてPythonを勉強するための資料です。RaspberryPi上で、インターネットから天気予報情報を取得し、それにしたがってLEDを点灯させるPythonコードを解説しています。

Published in: Technology
  • Be the first to comment

天気予報ガジェットを作りな がら、Pythonを勉強しよう

  1. 1. 天気予報ガジェットを作りな がら、Pythonを勉強しよう @Fablab北加賀屋 2016/1/30 八登浩紀
  2. 2. FabLabとは? • パーソナル・ファブリケーションに必要な機材を備 えた、実験的な市民工房のネットワークです。 • ファブラボ憲章にのっとり、”Do It With Others(DIWO)”, ”Learn Make Share”を実践する場 として機能しています。 • 詳しくは、以下のページをご参照ください。 http://fablabkitakagaya.org/whatsfablab_page/
  3. 3. えんやとは? • ファブラボ北加賀屋の電子工作チームの名前です。 • 現在は以下の3チームにゆるく分かれて活動しています • Arduino • RaspberryPi → 今日はこれ。 • mbed • えんやのfacebookページがありますので、ぜひご参加ください。 https://www.facebook.com/groups/391695280989870/
  4. 4. ものづくりとプログラミング • なぜものづくりにプログラミングが必要なの? • 情報の入力 ← センサー、インターネットなど • 情報の加工 ← プログラミング • 情報の出力 ← LED、サーボモーター、インターネットなど
  5. 5. Pythonとは? • スクリプト型の言語で、コンパイルなしで実行でき る言語です。 • 科学技術計算に強く、CADソフトなどのスクリプ トとしてもよく用いられます(例:Rhinoceros) • Raspberry Pi上で動作するRaspbianという OS(Linux)の標準言語です。
  6. 6. なぜPythonか? • ユーザーが多いです。 www.tiobe.com/index.php/content/paperinfo/tpci/index.html • 機能としてコンパクトで習得がしやすいと言われて います。 • ライブラリが充実していて、機能拡張が容易です (例:文字列処理、ネット処理、数式処理など) • どんなOS上でも使えます(マルチプラットフォーム )
  7. 7. Pythonの言語仕様 • ガベージコレクタによる自動メモリ管理 • 手続き型、オブジェクト指向、関数型など、色々な 書き方のコーディングができる(マルチパラダイム) • 変数の型は自動的に決定される(動的型付け) • 変数の型チェックが自動で行われる(強い型付け)
  8. 8. Raspberry Piとは? • PCライクなマイコンボード。 • キーボード、マウス、モニターを繋いで普通のPC のように使えます。ネット接続も容易です。 • GPIO出力により電子回路に組み込めます。 • OSはLinux(Raspbian), Windows IoT Coreなど。
  9. 9. Raspberry Piのラインナップ • Raspberry Pi:初代ラズパイ • Raspberry Pi 2:CPU4コア+メモリ1GBで 性能強化したラズパイ • Raspberry Pi Zero:5ドルの小さなラズパイ • スペックは以下を参照。 https://ja.wikipedia.org/wiki/Raspberry_Pi
  10. 10. 今回の目標:Pythonと Raspberry Piで天気予報ガジ ェットを作ろう!
  11. 11. 天気予報ガジェットの仕組み Internet 天気予報情報の取得 ラズパイ 天気予報情報の処理 LED点灯信号の出力 ブレッドボードLED
  12. 12. Pythonを勉強しよう
  13. 13. RaspberryPiに ログインしてみよう • Windows • 方法1:SSH 1. TeraTermをインストール 2. TeraTermで以下のサーバにsshで接続 192.168.0.99 ユーザー名: pi, パスワード: raspberry • 方法2:VNC 1. UltraVNCをインストール 2. VNCで以下のサーバに接続 192.168.0.99:5901 パスワード:raspberry
  14. 14. RaspberryPiに ログインしてみよう • Mac • 方法1:SSH ターミナルからsshで以下のサーバにアクセス ssh pi@192.168.0.99 パスワード: raspberry • 方法2:VNC Finder→メニューバーの移動→サーバへ接続 サーバアドレス:vnc://pi@192.168.0.99:5901/ パスワード:raspberry
  15. 15. Pythonの基本文法
  16. 16. 四則演算 • 2.2+5.6 • 3−1 • 3.1*4.2 • 3/4 • (3+4)*10/3
  17. 17. 変数と型 • x = 4 • y = “Python” • z = True • x = “Test” + 5 • y = “Test” + “Python”
  18. 18. 文字列、入出力、コメント • len(“Python”) • “Python” * 10 • print(“Python”)(3.系) print “Python”(2.系) • temp = input(“Temperature is: “) • # ここはコメントです
  19. 19. 条件比較 • 2 == 2, 3 != 10 • “Python” == “Ruby” • 3 >= 10, 3 < 10 • not x == 2 • “P” in “Python”, “1” not in “Python” • x > 3 and y > 2, x > 3 or z < 2
  20. 20. 条件分岐とインデント • if x >= 20: print(“large”) elif x > 5: print(“medium”) else: print(“small”) • if “Python” in “PythonPython”: print(“true”) • if x > 10 and y > 5: print(“Large”)
  21. 21. リスト • list = [ 10, 20, 30, “Python”, “RasPi” ] list[1], list[-1] len(list) list[2:4], list[-4:-2], list[1:] • list.append(100) • list.remove(“Python”) • list.reverse() • numbers = [ 5, 3, 10, 2] numbers.sort() max(numbers), min(numbers)
  22. 22. 辞書型 • a = { ‘First’:”Python”, ‘Second’:”Raspberry Pi” } a[‘First’] • b = {‘First’:”Python”, “Second”:[1,2,3,4,5]} b[‘Second’][2]
  23. 23. ループ • for member in list: print(member) • for i in range(10): print(i) • x = 0 while x < 10: print(x) x = x + 1
  24. 24. 関数 • def sum(a, b): return a + b sum(10, 20) • def multiple(a,b=10): return a*b multiple(5) multiple(5,4)
  25. 25. モジュール、ライブラリ • import math math.sqrt(5) • from math import sqrt sqrt(5) • from math import * sin(pi/2) • import RPi.GPIO as GPIO
  26. 26. PythonでLチカしてみよう • ブレッドボード GND 電源ライン 1列が 導通している
  27. 27. PythonでLチカしてみよう http://raspi.tv/2014/rpi-gpio-quick-reference-updated-for-raspberry-pi-bから引用
  28. 28. PythonでLチカしてみよう #!/use/bin/python3 # -*- coding: utf-8 -*- # モジュールのロード import time import RPi.GPIO as GPIO # GPIOの設定 GPIO.setmode(GPIO.BCM) # 出力LEDのGPIOピン番号 GPIO_LED = 17 # GPIOのピン番号を出力に設定 GPIO.setup(GPIO_LED, GPIO.OUT) try: while(1): GPIO.output(GPIO_LED, GPIO.HIGH) time.sleep(1) GPIO.output(GPIO_LED, GPIO.LOW) time.sleep(1) except KeyboardInterrupt: pass # GPIOの終了処理 GPIO.cleanup()
  29. 29. 天気予報ガジェットの プログラムを見ていこう
  30. 30. 天気予報ガジェットの仕様 • インターネットから一週間分の天気予報情報を取得 します → OpenWeatherMap、Webからの情報 取得 • 天気予報情報から、6時、12時、18時の天気情報を 取り出します → JSON、正規表現 • 分からない部分はWebを検索すればだいたい見つか ります!
  31. 31. 天気予報ガジェットの仕様 • 各時間の天気に応じて以下のようにLEDを光らせる → RPi.GPIO 晴れ:消灯 曇り:暗く点灯 雨、雪:明るく点灯
  32. 32. OpenWeatherMap • http://openweathermap.org/ • APIで世界の各都市の天気を取得できる • 現在の天気と、5日間・3時間ごとの天気を取得可能 • フリーなら、1分60回、1日50,000回まで取得可能 • 以下のURLにアクセスすると、5日分の天気予報情報が返ってく る http://api.openweathermap.org/data/2.5/forecast?q=Osaka- shi,jp&mode=json&appid=4d8be64e277f433755b3db1a42248b0e
  33. 33. Webページからの情報取得 • URLを指定して、そのURLにアクセスしたときに返ってく る情報(ブラウザに表示されるのと同じもの。)を取得で きます。 • 使用例: import urllib.request response = urllib.request.urlopen(url) encoding = response.headers.get_content_charset() line = response.read().decode(encoding)
  34. 34. JSON • 表示の仕様:http://openweathermap.org/forecast5 • Webで情報をやりとりするための形式です。 • 決まった構造を取るので、ライブラリで簡単にPythonの 辞書型に変更して、情報を取得することができます。 • 使用例: decode = json.loads(line) dt_txt = decode[‘list'][0]['dt_txt']
  35. 35. 正規表現 • 文字列を処理するための手法です。 • 文字列の中から、条件に合う部分を抽出できます。 • 使用例: import re pattern = re.compile(r'd+') dt_txt=“2014-07-23 09:00:00” strlist = pattern.findall(dt_txt) strlist[0]:”2014”, strlist[1]:”07”, … • http://www.geocities.jp/m_hiroi/light/python04.html
  36. 36. お天気予報ガジェットのプロ グラム • 実際のコードを見ながら説明します。
  37. 37. Pythonの学び方 • Codeacademy(英語) https://www.codecademy.com/ • ドットインストール(日本語) http://dotinstall.com/lessons/basic_python_v2 • Jessica McKellar http://pyvideo.org/video/1850/a-hands-on- introduction-to-python-for-beginning-p
  38. 38. ご静聴ありがとうござい ました。

×