【WebIOPi】スマホでサーボモーターを制御！④

#スマホでサーボモータを制御！

今回は、スマホでサーボモータを制御するシリーズの第4回目です。

Raspberry Piを用いて簡単にIoTを作成できるライブラリ、WebIOPiを使用し、スマホからサーボモーターを制御します。

今回は、WebIOPiを使用してサーバーを起動します。WebIOPiでのサーバー起動は、非常に簡単に行えます！

これまでの記事は以下を参考にしてください。
[1. WebIOPiのインストール](https://qiita.com/happanosumide/items/2b151e2250953de3a258)
[2. HTML/CSSファイルの作成](https://qiita.com/happanosumide/items/7d8bf4b2d537188d9929)
[3. JavaScriptファイルの作成](https://qiita.com/happanosumide/items/cee747e27926f482b0df)
[4. Pythonスクリプトの作成](https://qiita.com/happanosumide/items/2add7dacbdd7ba5c16e7)


#スクリプトの登録
これまで作成した`HTML`ファイルと`Python`ファイルをWebIOPiに登録します。

Raspberry Piのターミナルで以下のコマンドを打ちます。

```bash 
sudo nano /etc/webiopi/config
```

すると、`nano`というテキストエディタで`config`ファイルが立ち上がります。

その`[SCRIPTS]`と`[HTTP]`部分を編集します。

```/etc/webiopi/config
...

[SCRIPTS]
# Load custom scripts syntax :
# name = sourcefile
#   each sourcefile may have setup, loop and destroy functions and macros
# myscript = /home/pi/myweb/examples/scripts/macros/script.py
myscript = /home/pi/myproject/pyfile.py     # <----ここに、自分のPythonファイルのパスを記述

#------------------------------------------------------------------------#

[HTTP]
# HTTP Server configuration
enabled = true
port = 8000

# File containing sha256(base64("user:password"))
# Use webiopi-passwd command to generate it
passwd-file = /etc/webiopi/passwd

# Change login prompt message
prompt = "WebIOPi"

# Use doc-root to change default HTML and resource files location
doc-root = /home/pi/myweb/examples/scripts/macros     # <----ここに自分のHTMLファイルのパスを記述
# Use welcome-file to change the default "Welcome" file
welcome-file = controller.html               # <----ここに自分のHTMLファイル名を記述

#------------------------------------------------------------------------#
...
```

注意点として、doc-rootには`HTMLファイル名`を記述しないことです。

a.htmlというファイルが`/home/pi/a/a.html`にあれば、

```
doc-root = /home/pi/a
welcom-file = a.html
```
とします。

終了したらテキストエディタを閉じます。`nano`の場合は、`ctrl+O`→`ctrl+X`です。


#サーバー起動

いよいよサーバーの起動です。
Raspberry Piのターミナルで以下のコマンドを実行します。

```bash
sudo pigpiod    # すでに実行されていればメッセージが表示される。

sudo systemctl start webiopi    # webiopiの起動
```

以下のコマンドを打つと、webiopiがactiveであることが確認できます。

```bash
sudo systemctl status webiopi
```


終了は、以下のコマンドで行います。

```bash
sudo systemctl stop webiopi
```


# アクセス

`sudo systemctl start webiopi`を行ったのち、Webブラウザで`Raspberry PiのIPアドレス:8000`へアクセスすると、作成したWebページが表示されていると思います。

また、スライダを動かすと、サーボモーターが動作すると思います。


# デバッグ
WebIOPiをデバッグ実行する場合は、以下のコマンドを打ちます。

```bash
sudo webiopi -c /etc/webiopi/config -d
```

終了は、`ctrl+c`→`ctrl+z`で終了します。

いきなり`ctrl+z`で終了したり、正しく終了していない場合、

```bash
OSError: [Errno 98] Address already in use
```

というエラーが表示されます。

その際は、プロセスをkillする必要があります。

```bash
ps ax | grep webiopi
```
でプロセスを確認します。

```
pi@raspberrypi:~ $ ps ax | grep webiopi
 2462 pts/0    T      0:00 sudo webiopi -c /etc/webiopi/config -d
 2463 pts/0    T      0:00 /bin/sh /usr/bin/webiopi -c /etc/webiopi/config -d
 2464 pts/0    Tl     0:02 python3 -m webiopi -c /etc/webiopi/config -d
```

この場合、`sudo webiopi -c /etc/webiopi/config -d`というプロセス(2462)を強制killします。
強制killは、-9をつけます。

```bash
sudo kill -9 2462
```

そして再度`sudo webiopi -c /etc/webiopi/config`を実行します。

#最後に

サーバーを立てるのは、面倒な作業ですが、WebIOPiを利用すると非常に簡単に立てることができます。

今回は、サーボモーターについてでしたが、IoTを作成する上で、他の機器にも応用することができると思います。

WebIOPiを利用して、オリジナルのIoT機器を作成してみてください！