SlideShare a Scribd company logo
RASPBERRY PI講習会
PART3: IOT WITH RASPBERRY PI
2018年冬 小野輝也
前回の復習QUIZ
Q1 シェルの主な役割は何?
Q2 CUIによるコマンド操作は{1.クソ 2.神}である。
Q3 aptって何?
Q4 Linuxシステムの管理者ユーザは何?
PYTHONの復習
def get_average(mylist, size):
“""関数呼び出し時に mylist = score, size = 4の代入が行われる"""
sum = 0
for i in mylist:
sum += i # a += 1 は a = a + 1を意味する
return sum / size
score = [70, 82, 88, 90]
average = get_average(score, 4)
print("average:{}".format(average))
今回の目標
webサーバーを立てる!
ブラウザからLEDを点灯!
いまバズってるIoTというやつです。
サーバ・クライアント構成
サーバ側のコンピュータとクライアント側の
コンピュータに分けてそれぞれの役目を
切り離す。
リクエストを好きなタイミングで送り
レスポンスをもらう。
例)ブラウザ
クライアント
サーバ
リクエストに対してレスポンスを返す。
リクエストをじーーっと待つ。
webサーバ、FTPサーバ、DNSサーバなど
今、どこにいる?
サーバ・クライアント構成でプログラムを書くときは、
自分が今どちら側を作っているのか意識しよう。
webサーバ
 HTTPプロトコルに基づいてデータのやり
取りをするサーバのこと
HTTPプロトコル
hypertext transfer protocol
ハイパーなテキストをトランスファーするた
めのプロトコル。
通信プロトコル
通信を行うために必要な取り決め
ケーブルのコネクタの形状は?
データの先頭10バイトは何を表す? などなど
SSHとHTTPでは実現したいことが異なるため異なるプロトコルが用いられる
ハイパーテキスト
ただの文字だけでなく、図、表、などを表現で
き、リンクによって別のテキストを参照できる
ようになっているテキストファイルのこと
HTML
hypertext markup language 
ハイパーなテキストの代表格。
webフレームワーク
webアプリケーションを作る際に大抵必要となる機能をあ
らかじめまとめたもの。
どんなファイルをどこに配置するかが定められており、そ
の決まりに沿ってプログラムを書く
ライブラリ
よく使う機能(時刻やデータベース操作)をまとめたもの。
どう使うかは君次第。
BOTTLEのインストール
Pythonのwebフレークワークであるbottleを使おう。
http://bottlepy.org/docs/dev/tutorial.html
$ sudo pip3.6 install bottle
pipはpythonの公式パッケージマネージャ
初めてのサーバ
ホームディレクトリにserverディレクトリを作成し、その中にserver.pyを作成しよう。
# 必要なモジュールの読み込み
from bottle import Bottle, run, post, request, redirect
# Bottleオブジェクト(インスタンス)の作成
app = Bottle()
@app.route('/')
def handle():
return "hello, bottle"
run(app, host="your_ip_addr", port=8080)
初めてのサーバ
PCでもスマホでもいいのでwebブラウザを立ち上げて、URL入力バー
に
http://192.168.111.XX:8080/
これを入力しよう。
表示されましたか?
SERVER.PYで遊ぼう
@app.route(‘/‘)
def handle():
return "hello, bottle”
@に続くapp.routeをデコレータ関数と言います。
‘/‘の部分は何を表しているかわかりますか?
ここを変更するとどうなるでしょう?
関数名を変更してみると?
@app.route()を増やしてみると・・・?
SERVER.PYで遊ぼう
@app.route(‘/‘)
def handle():
return "hello, bottle”
returnはどこに何を返しているのだろうか?
試しにreturn “<h1>hello, bottle</h1>”としてみよう。
HTTP
HTTPは常にリクエスト、レスポンスのキャッチボール。
ブラウザ「ください」 =>リクエスト        サーバ
ブラウザ       <=レスポンス(htmlファイル)サーバ「どう
ぞ」
リクエストの中で、「何を」「どうして欲しいのか」を伝える。「何を」
に相当するものがURLで「どうして欲しいのか」に相当するのがHTTPメ
ソッド。
GETメソッド
URLにデータを含めてサーバにリクエストを送る。
ggるのは主にGETメソッドを用いている。
POSTメソッド
指定されたURLにリクエストとともに、
データをサーバへ送信する。
QUIZ
Q1、先ほどhello, bottleを表示させるのに使ったメソッドはなんで
しょう?
Q2、webのフォームデータを送信するときに使うメソッドはなんで
しょう?
HTML再入門
<hoge>で始まり</hoge>で終わる。<>で囲まれている部分をタグと
いう。タグの種類によって役割が決まる
<h1>
<table>
<form>
<input>
<script>
などなど
GETでリクエスト送る
GETではクエリパラメータというものを使って、リクエストデータに情報
を加えることができる。
<form action="/robo" method="GET">
<input name=“get_foo” value="roboaki" type="hidden" />
<input value="send" type=“submit" />
</form>
GETで受ける
@app.route('/robo')
def recvget():
return "{}".format(request.query.get_foo)
POSTでリクエスト送る
<form action="/architect" method="POST">
<input name=“post_foo” type="text" />
<input value="osunayo!?zettaiosunayo!?"
type=“submit" />
</form>
POSTで受ける
@app.route('/architect', method='POST')
def recvpost():
return "{}".format(request.forms.get(‘post_foo’))
PYTHONでGPIOピン操作
この前シェルスクリプトでGPIOピン操作をしましたね?
これをpythonのスクリプトでもやってみましょう。
$ sudo pip3.6 install wiringpi
使い方簡単です。
import wiringpi
wiringpi.wiringPiSetupGpio()
# For GPIO pin numbering
wiringpi.pinMode(6, 1)
# Set pin 6 to 1 ( OUTPUT )
wiringpi.digitalWrite(6, 1)
# Write 1 ( HIGH ) to pin 6
wiringpi.digitalRead(6)
# Read pin 6
LCHIKA.SH再来
この前のlchika.shとまったく同じことをしよう。
import time
time.sleep(5)
でpythonを5秒間待機させることができる。
今日のお題
ブラウザのボタンを押してLEDを光らせよ!
自由に作ろう
ONボタン、OFFボタンを両方作る?
それともONとOFFの相互切り替えをする?
LEDのON,OFF情報はPOSTで送る?GETで送る?
どのURLにデータを送る?
変数のスコープ
>>> a = 10
>>> def hoge():
... a += 1
... print(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in hoge
UnboundLocalError: local variable 'a' referenced before assignment
GLOBAL変数を使う
>>> a = 10
>>> def hoge():
... global a
... a += 1
... print(a)
私が作ったSERVER.PY
https://github.com/teru01/Lchika-Server
GitHubというサービスを使っています。
お疲れ様でした。
$ sudo poweroff

More Related Content

Similar to ラズパイ講習会(第3回)

Python で munin plugin を書いてみる
Python で munin plugin を書いてみるPython で munin plugin を書いてみる
Python で munin plugin を書いてみるftnk
 
Introduction of Python
Introduction of PythonIntroduction of Python
Introduction of Python
Tomoya Nakayama
 
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Yoshifumi Kawai
 
20120405 setsunaセミナー
20120405 setsunaセミナー20120405 setsunaセミナー
20120405 setsunaセミナー
Takahiro Iwase
 
PHPの今とこれから2008
PHPの今とこれから2008PHPの今とこれから2008
PHPの今とこれから2008
Rui Hirokawa
 
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
Fixstars Corporation
 
LUT-Network ~本物のリアルタイムコンピューティングを目指して~
LUT-Network ~本物のリアルタイムコンピューティングを目指して~LUT-Network ~本物のリアルタイムコンピューティングを目指して~
LUT-Network ~本物のリアルタイムコンピューティングを目指して~
ryuz88
 
オンラインゲームソリューション@トレジャーデータ
オンラインゲームソリューション@トレジャーデータオンラインゲームソリューション@トレジャーデータ
オンラインゲームソリューション@トレジャーデータTakahiro Inoue
 
機械学習 (AI/ML) 勉強会 #1 基本編
機械学習 (AI/ML) 勉強会 #1 基本編機械学習 (AI/ML) 勉強会 #1 基本編
機械学習 (AI/ML) 勉強会 #1 基本編
Fujio Kojima
 
プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜
京大 マイコンクラブ
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門伸男 伊藤
 
高負荷に耐えうるWebApplication Serverの作り方
高負荷に耐えうるWebApplication Serverの作り方高負荷に耐えうるWebApplication Serverの作り方
高負荷に耐えうるWebApplication Serverの作り方
GMO-Z.com Vietnam Lab Center
 
高負荷に耐えうるWeb application serverの作り方
高負荷に耐えうるWeb application serverの作り方高負荷に耐えうるWeb application serverの作り方
高負荷に耐えうるWeb application serverの作り方
yuta-ishiyama
 
Windows8のクライアントHyper-V入門(.NETラボ勉強会 2013/6/22 日本マイクロソフト)
Windows8のクライアントHyper-V入門(.NETラボ勉強会 2013/6/22 日本マイクロソフト)Windows8のクライアントHyper-V入門(.NETラボ勉強会 2013/6/22 日本マイクロソフト)
Windows8のクライアントHyper-V入門(.NETラボ勉強会 2013/6/22 日本マイクロソフト)
Tomokazu Kizawa
 
私のチームのリーダブルコード
私のチームのリーダブルコード私のチームのリーダブルコード
私のチームのリーダブルコード
Keisuke Tameyasu
 
Amebaにおけるレコメンデーションシステムの紹介
Amebaにおけるレコメンデーションシステムの紹介Amebaにおけるレコメンデーションシステムの紹介
Amebaにおけるレコメンデーションシステムの紹介
cyberagent
 
po-1. プログラミング入門
po-1. プログラミング入門po-1. プログラミング入門
po-1. プログラミング入門
kunihikokaneko1
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門Norishige Fukushima
 
DIGITSによるディープラーニング画像分類
DIGITSによるディープラーニング画像分類DIGITSによるディープラーニング画像分類
DIGITSによるディープラーニング画像分類
NVIDIA Japan
 
Gura プログラミング言語の紹介
Gura プログラミング言語の紹介Gura プログラミング言語の紹介
Gura プログラミング言語の紹介
Yutaka Saito
 

Similar to ラズパイ講習会(第3回) (20)

Python で munin plugin を書いてみる
Python で munin plugin を書いてみるPython で munin plugin を書いてみる
Python で munin plugin を書いてみる
 
Introduction of Python
Introduction of PythonIntroduction of Python
Introduction of Python
 
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
 
20120405 setsunaセミナー
20120405 setsunaセミナー20120405 setsunaセミナー
20120405 setsunaセミナー
 
PHPの今とこれから2008
PHPの今とこれから2008PHPの今とこれから2008
PHPの今とこれから2008
 
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
 
LUT-Network ~本物のリアルタイムコンピューティングを目指して~
LUT-Network ~本物のリアルタイムコンピューティングを目指して~LUT-Network ~本物のリアルタイムコンピューティングを目指して~
LUT-Network ~本物のリアルタイムコンピューティングを目指して~
 
オンラインゲームソリューション@トレジャーデータ
オンラインゲームソリューション@トレジャーデータオンラインゲームソリューション@トレジャーデータ
オンラインゲームソリューション@トレジャーデータ
 
機械学習 (AI/ML) 勉強会 #1 基本編
機械学習 (AI/ML) 勉強会 #1 基本編機械学習 (AI/ML) 勉強会 #1 基本編
機械学習 (AI/ML) 勉強会 #1 基本編
 
プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門
 
高負荷に耐えうるWebApplication Serverの作り方
高負荷に耐えうるWebApplication Serverの作り方高負荷に耐えうるWebApplication Serverの作り方
高負荷に耐えうるWebApplication Serverの作り方
 
高負荷に耐えうるWeb application serverの作り方
高負荷に耐えうるWeb application serverの作り方高負荷に耐えうるWeb application serverの作り方
高負荷に耐えうるWeb application serverの作り方
 
Windows8のクライアントHyper-V入門(.NETラボ勉強会 2013/6/22 日本マイクロソフト)
Windows8のクライアントHyper-V入門(.NETラボ勉強会 2013/6/22 日本マイクロソフト)Windows8のクライアントHyper-V入門(.NETラボ勉強会 2013/6/22 日本マイクロソフト)
Windows8のクライアントHyper-V入門(.NETラボ勉強会 2013/6/22 日本マイクロソフト)
 
私のチームのリーダブルコード
私のチームのリーダブルコード私のチームのリーダブルコード
私のチームのリーダブルコード
 
Amebaにおけるレコメンデーションシステムの紹介
Amebaにおけるレコメンデーションシステムの紹介Amebaにおけるレコメンデーションシステムの紹介
Amebaにおけるレコメンデーションシステムの紹介
 
po-1. プログラミング入門
po-1. プログラミング入門po-1. プログラミング入門
po-1. プログラミング入門
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
 
DIGITSによるディープラーニング画像分類
DIGITSによるディープラーニング画像分類DIGITSによるディープラーニング画像分類
DIGITSによるディープラーニング画像分類
 
Gura プログラミング言語の紹介
Gura プログラミング言語の紹介Gura プログラミング言語の紹介
Gura プログラミング言語の紹介
 

More from teruyaono1

Klab expert camp 成果発表
Klab expert camp 成果発表Klab expert camp 成果発表
Klab expert camp 成果発表
teruyaono1
 
Docker講習会資料
Docker講習会資料Docker講習会資料
Docker講習会資料
teruyaono1
 
Serverlessに触れてみる
Serverlessに触れてみるServerlessに触れてみる
Serverlessに触れてみる
teruyaono1
 
Mikrotikルーターが仮想通貨採掘マルウェアに感染していました
Mikrotikルーターが仮想通貨採掘マルウェアに感染していましたMikrotikルーターが仮想通貨採掘マルウェアに感染していました
Mikrotikルーターが仮想通貨採掘マルウェアに感染していました
teruyaono1
 
rpi_handson_3
rpi_handson_3rpi_handson_3
rpi_handson_3
teruyaono1
 
rpi_handson_2.5
rpi_handson_2.5rpi_handson_2.5
rpi_handson_2.5
teruyaono1
 
rpi_handson_2
rpi_handson_2rpi_handson_2
rpi_handson_2
teruyaono1
 
rpi_handson_1
rpi_handson_1rpi_handson_1
rpi_handson_1
teruyaono1
 

More from teruyaono1 (8)

Klab expert camp 成果発表
Klab expert camp 成果発表Klab expert camp 成果発表
Klab expert camp 成果発表
 
Docker講習会資料
Docker講習会資料Docker講習会資料
Docker講習会資料
 
Serverlessに触れてみる
Serverlessに触れてみるServerlessに触れてみる
Serverlessに触れてみる
 
Mikrotikルーターが仮想通貨採掘マルウェアに感染していました
Mikrotikルーターが仮想通貨採掘マルウェアに感染していましたMikrotikルーターが仮想通貨採掘マルウェアに感染していました
Mikrotikルーターが仮想通貨採掘マルウェアに感染していました
 
rpi_handson_3
rpi_handson_3rpi_handson_3
rpi_handson_3
 
rpi_handson_2.5
rpi_handson_2.5rpi_handson_2.5
rpi_handson_2.5
 
rpi_handson_2
rpi_handson_2rpi_handson_2
rpi_handson_2
 
rpi_handson_1
rpi_handson_1rpi_handson_1
rpi_handson_1
 

Recently uploaded

LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
chiefujita1
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
Toru Tamaki
 
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援しますキンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
Takayuki Nakayama
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
Matsushita Laboratory
 
Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
harmonylab
 
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
t m
 
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
0207sukipio
 

Recently uploaded (8)

LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
 
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援しますキンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
 
Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
 
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
 
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
 

ラズパイ講習会(第3回)