Upload
hiroki-yato
View
807
Download
0
Embed Size (px)
Citation preview
天気予報ガジェットを作りながら、 Python を勉強しよう
@ Fablab 北加賀屋2016/1/30八登浩紀
FabLab とは?• パーソナル・ファブリケーションに必要な機材を備えた、実験的な市民工房のネットワークです。• ファブラボ憲章にのっとり、” Do It With
Others(DIWO)”, ”Learn Make Share” を実践する場として機能しています。• 詳しくは、以下のページをご参照ください。
http://fablabkitakagaya.org/whatsfablab_page/
えんやとは?• ファブラボ北加賀屋の電子工作チームの名前です。• 現在は以下の 3 チームにゆるく分かれて活動しています
• Arduino
• RaspberryPi → 今日はこれ。• mbed
• えんやの facebook ページがありますので、ぜひご参加ください。https://www.facebook.com/groups/391695280989870/
ものづくりとプログラミング• なぜものづくりにプログラミングが必要なの?
• 情報の入力 ← センサー、インターネットなど• 情報の加工 ← プログラミング• 情報の出力 ← LED 、サーボモーター、インターネットなど
Python とは?• スクリプト型の言語で、コンパイルなしで実行できる言語です。• 科学技術計算に強く、 CAD ソフトなどのスクリプトとしてもよく用いられます(例: Rhinoceros )• Raspberry Pi 上で動作する Raspbian という
OS(Linux) の標準言語です。
なぜ Python か?• ユーザーが多いです。
www.tiobe.com/index.php/content/paperinfo/tpci/index.html
• 機能としてコンパクトで習得がしやすいと言われています。• ライブラリが充実していて、機能拡張が容易です(例:文字列処理、ネット処理、数式処理など)• どんな OS 上でも使えます ( マルチプラットフォーム )
Python の言語仕様• ガベージコレクタによる自動メモリ管理• 手続き型、オブジェクト指向、関数型など、色々な書き方のコーディングができる ( マルチパラダイム )
• 変数の型は自動的に決定される(動的型付け)• 変数の型チェックが自動で行われる(強い型付け)
Raspberry Pi とは?• PC ライクなマイコンボード。• キーボード、マウス、モニターを繋いで普通の PCのように使えます。ネット接続も容易です。• GPIO 出力により電子回路に組み込めます。• OS は Linux(Raspbian), Windows IoT Core など。
Raspberry Pi のラインナップ• Raspberry Pi :初代ラズパイ• Raspberry Pi 2 : CPU4 コア + メモリ 1GB で 性能強化したラズパイ• Raspberry Pi Zero : 5 ドルの小さなラズパイ• スペックは以下を参照。
https://ja.wikipedia.org/wiki/Raspberry_Pi
今回の目標: Python とRaspberry Pi で天気予報ガジェットを作ろう!
天気予報ガジェットの仕組みInternet
天気予報情報の取得ラズパイ
天気予報情報の処理LED 点灯信号の出力
ブレッドボードLED
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
RaspberryPi にログインしてみよう• Mac
• 方法1: SSHターミナルから ssh で以下のサーバにアクセスssh [email protected]パスワード : raspberry
• 方法2: VNCFinder→ メニューバーの移動→サーバへ接続サーバアドレス: vnc://[email protected]:5901/パスワード: raspberry
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 and y > 2, x > 3 or z < 2
条件分岐とインデント• 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”)
リスト• 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)
辞書型• a = { ‘First’:”Python”, ‘Second’:”Raspberry
Pi” }a[‘First’]
• b = {‘First’:”Python”, “Second”:[1,2,3,4,5]}b[‘Second’][2]
ループ• for member in list:
print(member)
• for i in range(10): print(i)
• x = 0while 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 sqrtsqrt(5)
• from math import *sin(pi/2)
• import RPi.GPIO as GPIO
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 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()
天気予報ガジェットのプログラムを見ていこう
天気予報ガジェットの仕様• インターネットから一週間分の天気予報情報を取得します → OpenWeatherMap 、 Web からの情報取得• 天気予報情報から、 6時、 12時、 18時の天気情報を取り出します → JSON 、正規表現• 分からない部分は Web を検索すればだいたい見つかります!
天気予報ガジェットの仕様• 各時間の天気に応じて以下のように LED を光らせる→ RPi.GPIO晴れ:消灯曇り:暗く点灯雨、雪:明るく点灯
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
Web ページからの情報取得• URL を指定して、その URL にアクセスしたときに返ってくる情報(ブラウザに表示されるのと同じもの。)を取得できます。• 使用例:
import urllib.request
response = urllib.request.urlopen(url)
encoding = response.headers.get_content_charset()
line = response.read().decode(encoding)
JSON• 表示の仕様: http://openweathermap.org/forecast5
• Web で情報をやりとりするための形式です。• 決まった構造を取るので、ライブラリで簡単に Pythonの辞書型に変更して、情報を取得することができます。• 使用例:
decode = json.loads(line)dt_txt = decode[‘list'][0]['dt_txt']
正規表現• 文字列を処理するための手法です。• 文字列の中から、条件に合う部分を抽出できます。• 使用例:
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
お天気予報ガジェットのプログラム
• 実際のコードを見ながら説明します。
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
ご静聴ありがとうございました。