38
天天天天天天天天天天天天天天 Python 天天天天天天 Fablab 天天天天 2016/1/30 天天天天

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

Embed Size (px)

Citation preview

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

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

@ Fablab 北加賀屋2016/1/30八登浩紀

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

FabLab とは?• パーソナル・ファブリケーションに必要な機材を備えた、実験的な市民工房のネットワークです。• ファブラボ憲章にのっとり、” Do It With

Others(DIWO)”, ”Learn Make Share” を実践する場として機能しています。• 詳しくは、以下のページをご参照ください。

http://fablabkitakagaya.org/whatsfablab_page/

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

えんやとは?• ファブラボ北加賀屋の電子工作チームの名前です。• 現在は以下の 3 チームにゆるく分かれて活動しています

• Arduino

• RaspberryPi → 今日はこれ。• mbed

• えんやの facebook ページがありますので、ぜひご参加ください。https://www.facebook.com/groups/391695280989870/

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

ものづくりとプログラミング• なぜものづくりにプログラミングが必要なの?

• 情報の入力 ← センサー、インターネットなど• 情報の加工 ← プログラミング• 情報の出力 ←  LED 、サーボモーター、インターネットなど

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

Python とは?• スクリプト型の言語で、コンパイルなしで実行できる言語です。• 科学技術計算に強く、 CAD ソフトなどのスクリプトとしてもよく用いられます(例: Rhinoceros )• Raspberry Pi 上で動作する Raspbian という

OS(Linux) の標準言語です。

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

なぜ Python か?• ユーザーが多いです。

www.tiobe.com/index.php/content/paperinfo/tpci/index.html

• 機能としてコンパクトで習得がしやすいと言われています。• ライブラリが充実していて、機能拡張が容易です(例:文字列処理、ネット処理、数式処理など)• どんな OS 上でも使えます ( マルチプラットフォーム )

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

Python の言語仕様• ガベージコレクタによる自動メモリ管理• 手続き型、オブジェクト指向、関数型など、色々な書き方のコーディングができる ( マルチパラダイム )

• 変数の型は自動的に決定される(動的型付け)• 変数の型チェックが自動で行われる(強い型付け)

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

Raspberry Pi とは?• PC ライクなマイコンボード。• キーボード、マウス、モニターを繋いで普通の PCのように使えます。ネット接続も容易です。• GPIO 出力により電子回路に組み込めます。• OS は Linux(Raspbian), Windows IoT Core など。

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

Raspberry Pi のラインナップ• Raspberry Pi :初代ラズパイ• Raspberry Pi 2 : CPU4 コア + メモリ 1GB で 性能強化したラズパイ• Raspberry Pi Zero : 5 ドルの小さなラズパイ• スペックは以下を参照。

https://ja.wikipedia.org/wiki/Raspberry_Pi

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

今回の目標: Python とRaspberry Pi で天気予報ガジェットを作ろう!

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

天気予報ガジェットの仕組みInternet

天気予報情報の取得ラズパイ

天気予報情報の処理LED 点灯信号の出力

ブレッドボードLED

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

Python を勉強しよう

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

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

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

RaspberryPi にログインしてみよう• Mac

• 方法1: SSHターミナルから ssh で以下のサーバにアクセスssh [email protected]パスワード : raspberry

• 方法2: VNCFinder→ メニューバーの移動→サーバへ接続サーバアドレス: vnc://[email protected]:5901/パスワード: raspberry

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

Python の基本文法

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

四則演算• 2 .2 + 5.6

• 3−1• 3 .1 *4 .2

• 3 / 4• (3+4)*10/3

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

変数と型• x = 4

• y = “Python”

• z = True

• x = “Test” + 5

• y = “Test” + “Python”

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

文字列、入出力、コメント• len(“Python”)

• “Python” * 10

• print(“Python”) (3 . 系) print “Python” (2 .系)• temp = input(“Temperature is: “)

• # ここはコメントです

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

条件比較• 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

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

条件分岐とインデント• 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”)

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

リスト• 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)

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

辞書型• a = { ‘First’:”Python”, ‘Second’:”Raspberry

Pi” }a[‘First’]

• b = {‘First’:”Python”, “Second”:[1,2,3,4,5]}b[‘Second’][2]

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

ループ• for member in list:

print(member)

• for i in range(10): print(i)

• x = 0while x < 10: print(x) x = x + 1

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

関数• def sum(a, b):

return a + b

sum(10, 20)

• def multiple(a,b=10): return a*b

multiple(5)multiple(5,4)

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

モジュール、ライブラリ• import math

math.sqrt(5)

• from math import sqrtsqrt(5)

• from math import *sin(pi/2)

• import RPi.GPIO as GPIO

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

Python で L チカしてみよう• ブレッドボード

GND電源ライン

1 列が導通している

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

Python で L チカしてみよう

http://raspi.tv/2014/rpi-gpio-quick-reference-updated-for-raspberry-pi-bから引用

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

Python で L チカしてみよう#!/use/bin/python3# -*- coding: utf-8 -*-

# モジュールのロードimport timeimport 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()

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

天気予報ガジェットのプログラムを見ていこう

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

天気予報ガジェットの仕様• インターネットから一週間分の天気予報情報を取得します →  OpenWeatherMap 、 Web からの情報取得• 天気予報情報から、 6時、 12時、 18時の天気情報を取り出します →  JSON 、正規表現• 分からない部分は Web を検索すればだいたい見つかります!

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

天気予報ガジェットの仕様• 各時間の天気に応じて以下のように LED を光らせる→  RPi.GPIO晴れ:消灯曇り:暗く点灯雨、雪:明るく点灯

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

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

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

Web ページからの情報取得• URL を指定して、その URL にアクセスしたときに返ってくる情報(ブラウザに表示されるのと同じもの。)を取得できます。• 使用例:

import urllib.request

response = urllib.request.urlopen(url)

encoding = response.headers.get_content_charset()

line = response.read().decode(encoding)

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

JSON• 表示の仕様: http://openweathermap.org/forecast5

• Web で情報をやりとりするための形式です。• 決まった構造を取るので、ライブラリで簡単に Pythonの辞書型に変更して、情報を取得することができます。• 使用例:

decode = json.loads(line)dt_txt = decode[‘list'][0]['dt_txt']

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

正規表現• 文字列を処理するための手法です。• 文字列の中から、条件に合う部分を抽出できます。• 使用例:

import repattern = 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

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

お天気予報ガジェットのプログラム

• 実際のコードを見ながら説明します。

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

Python の学び方• Codeacademy (英語)

https://www.codecademy.com/

• ドットインストール(日本語)http://dotinstall.com/lessons/basic_python_v2

• Jessica McKellarhttp://pyvideo.org/video/1850/a-hands-on-introduction-to-python-for-beginning-p

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

ご静聴ありがとうございました。