[Raspberry Piで簡単IoT] サーバ構築編~ポート転送~

概要

Raspberry Pi 4でrestAPIを受け付けるサーバを構築します。

ローカルネットワーク内でのサーバー構築が終わって色々と動作ができるようになると、「やっぱり家の外からでも何かを動かしたい」となることも多いと思います。そんなときに必要となるのが「ポート転送」の設定です。

サーバ構築はこちらを参照

[Raspberry Piで簡単IoT] サーバ構築編~tornadoの雛形~

ポート転送の設定もとても簡単です。まだ設定していない人は、ちょちょっと設定してしまって、家の外からでも色々な家電やiot機器操作を出来るようにしてしまいましょう(エアコン付けたり電気消したり・・)

ポート転送の大まかな手順

[Raspberry Piの設定]

①raspberry piのipアドレスを固定する。

②raspberry piのmacアドレスを調べる。

[ルーターの設定] (ソフトバンク光を例に説明します)

③IPアドレスの固定割当を設定する。

④ポート転送を設定する。

⑤グローバルアドレスを調べる。

[テスト]

⑥Postmanからグローバルアドレスにpostしてテストする。

流れはこんな感じです!順番に説明していきます。

手順の詳細

①raspberry piのipアドレスを固定する。

$sudo nano /etc/dhcpcd.conf

下までスクロールしていって、

interface wlan0
static ip_address=192.168.3.**/24
static routers=192.168.3.*
static domain_name_servers=192.168.3.*

の4行を付け加えます。**には任意の数値。*はルータのアドレスを入れてください。(こちらはwifiを想定しています。有線の場合は、wlan0をeth0に読み替えてください。)

終わったら、

ctrl + x

で、保存しますか?と聞かれるので y と答えて、保存ファイル聞かれるのでenterと答えて完了です。終わったら、

$sudo reboot

で再起動しましょう。

②raspberry piのmacアドレスを調べる。

$ifconfig | grep 'ether'

で調べるとmacアドレスが表示できます。2つ出てくるので、wifiの場合は下にdてくる方のアドレスをメモしてください。

普通に、ifconfigで調べても大丈夫です。

③IPアドレスの固定割当を設定する。

③-⑤の手順についてはこちらを見ながらやると良いです

https://www.softbank.jp/support/faq/view/19680

ルータ設定のページに飛びます。
触った記憶がなければ、初期値は以下です。
ユーザー名 : user パスワード : user

手順に沿って、raspberry piのIPアドレスとMACアドレスを入力します(①で設定したipアドレス、②で調べたmacアドレスです。)

④ポート転送を設定する。

手順に沿って、プロトコルと、WAN側/LAN側両方のポート番号を設定します。

プロトコルは用いるプロトコルを選びます。(TCP/UDPにしとけば無難です)

WANとはWide Area Networkの略です。つまりWAN側ポート番号とは、外側から通信を受けるときのポート番号です。任意の番号(4桁)を設定してください。

LANとはLocal Area Networkの略です。つまりLAN側ポート番号とは、内側(宅内)に通信を転送するときのポート番号です。RaspberryPiで構築したサーバで設定したポート番号と合わせてください。
サーバ構築時のポート設定はこちらを参考にしてください。

[Raspberry Piで簡単IoT] サーバ構築編~tornadoの雛形~

⑤グローバルアドレスを調べる。

ポート転送設定ページの設定/接続情報から確認ができます。
または、以下のページからも確認ができます。

https://www.cman.jp/network/support/ip.html

⑥Postmanからグローバルアドレスにpostしてテストする。

最後は、グローバルアドレスにhttpリクエストを送ってテストしましょう。
簡単にhttpリクエストを試せるのは、chromeアプリにもなっているpostmanだと思います。

https://www.postman.com

最後に

こんな感じでポート転送の設定ができます。これで、家の外からでも遠隔でRaspberry Piを操作できるようになります。つまり、Raspberrry Piを通じて宅内の電気や家電なども操作できるようになりますので、色々と遊べるようになるかと思います。グローバルアドレスやポート番号は流出すると危険なのでそこは気を付けてくださいね。

その他のリンクはこちら★

Ganny村長のIoT関連の備忘録

[Raspberry Piで簡単IoT] サーバ構築編~tornadoの雛形~

概要

Raspberry Pi 4でrestAPIを受け付けるサーバを構築します。

サーバ構築方法は色々とありますが、一番手っ取り早く作れるのは、Tornadoというwebフレームワークを用いる方法だと思います。Tornadoは、Pythonで書かれたWebフレームワークで、非同期通信ライブラリです。(あまり深く考えず、とりあえず使ってみましょう!)

備忘録も兼ねて、tornadoを用いたソースコードと確認方法の雛形を残しておきます。

ソースコード

雛形はこんな感じです。とてもシンプルですね。これを雛形にして、rest通信を受けた時に行いたい処理を記載していくだけです。書き終わったら、一先ずserver.pyという名前で保存しましょう。名前は何でも良いですが。

※Raspberry pi 4以外でも使えます。
※python2 , python3の両方に対応するように書いています。

#!/bin/env python (python3を使う場合は3にしてください)
# coding: utf-8

import os
import tornado.ioloop
import tornado.web
import tornado.httpserver
import traceback

try:
    import asyncio
    #Python 3
except ImportError:
    asyncio = None
    #python 2
    
class MainHandler(tornado.web.RequestHandler):
    def get(self):
        #ここにgetを受けた時に実行したい処理を書く

    def post(self):
        #ここにpostを受けた時に実行したい処理を書く
        
    def ***(self):
    	#ここに***を受けた時に実行したい処理を書く

application = tornado.web.Application([
    (r"/", MainHandler),
])

if __name__ == "__main__":
    
    if asyncio is not None:
        asyncio.set_event_loop(asyncio.new_event_loop())
    application.listen(8080) #ここは任意のポート番号を記載
    tornado.ioloop.IOLoop.current().start()

テスト方法

まずは事前準備としてtornadoをインストールする必要があります。ターミナル画面から下記コマンドを実行してください。一度実行すれば、その後は必要ありません。

$sudo pip install tornado
or
$sudo pip3 install tornado

これだけです。そして、

$python server.py
or
$python3 server.py

という感じで、プログラムを実行します。

この状態で、httpリクエストを送ってみましょう。
簡単にhttpリクエストを試せるのは、chromeアプリにもなっているpostmanだと思います。(  https://www.postman.com/  )

raspberry piのipアドレスは、

$ifconfig

で調べてくださいね。ローカルネットワークの外からたたきたい時は、ルータのポート転送の設定をする必要があります。そちらについてはこちら。

[Raspberry Piで簡単IoT] サーバ構築編~ポート転送~

以上、とても簡単なhttpサーバの構築方法でした。