おむつの交換時期をLINEで通知するソリューション

# できたもの
おむつにさす

![IMG_20171019_211139_977.jpg](https://qiita-image-store.s3.amazonaws.com/0/130874/ddceea86-edc8-c9c9-d1d3-7a478b44ef75.jpeg)

おむつがしゃべる！

![omuscreen_small.png](https://qiita-image-store.s3.amazonaws.com/0/130874/aad81a31-c9dd-470a-f6c3-ecdc3d9f1710.png)


# 用意したもの
- Raspberry Pi 3 Model B
- A/D コンバータ：MCP3208-CI/P
- 土壌湿度センサー：SEN0114
- ブレッドボード、ジャンパーコード
- おむつ：メリーズSサイズ（テープ）

# 手順
## LINE Notifer のアクセストークン取得
- LINE ID でログイン
    - https://notify-bot.line.me/my/
- アクセストークンの発行(開発者向け)
    - トークンを発行する
    - 発行されたトークンをコピー
        - TOKEN：XxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXx
- LINE（スマホ）で適当なグループを作成して、LINE Notifer アカウントを招待

## RaspberryPi
導入からWifi接続までの初期セットアップは[以前書いた](https://qiita.com/saitotak/items/e2006423a40bb89cb653) ので回路設計から。

### ブレッドボード
AD変換をかまして、土壌湿度センサーとつなぎます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/130874/83311af6-c1e6-efd3-b1b6-cd3c33831269.png)

### Python 下準備
初 Python なのでいろいろ足りなかった。

``` bash:console
$ sudo -E apt install python-pip
$ sudo -E pip install requests
```

### ソース
``` omutunotifer.py
# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
from time import sleep
import requests

print "*** start ***";

# MCP3208からSPI通信で12ビットのデジタル値を取得。0から7の8チャンネル使用可
def readadc(adcnum, clockpin, mosipin, misopin, cspin):
    if adcnum > 7 or adcnum < 0:
        return -1
    GPIO.output(cspin, GPIO.HIGH)
    GPIO.output(clockpin, GPIO.LOW)
    GPIO.output(cspin, GPIO.LOW)

    commandout = adcnum
    commandout |= 0x18  # スタートビット＋シングルエンドビット
    commandout <<= 3    # LSBから8ビット目を送信するようにする
    for i in range(5):
        # LSBから数えて8ビット目から4ビット目までを送信
        if commandout & 0x80:
            GPIO.output(mosipin, GPIO.HIGH)
        else:
            GPIO.output(mosipin, GPIO.LOW)
        commandout <<= 1
        GPIO.output(clockpin, GPIO.HIGH)
        GPIO.output(clockpin, GPIO.LOW)
    adcout = 0
    # 13ビット読む（ヌルビット＋12ビットデータ）
    for i in range(13):
        GPIO.output(clockpin, GPIO.HIGH)
        GPIO.output(clockpin, GPIO.LOW)
        adcout <<= 1
        if i>0 and GPIO.input(misopin)==GPIO.HIGH:
            adcout |= 0x1
    GPIO.output(cspin, GPIO.HIGH)
    return adcout

GPIO.setmode(GPIO.BCM)
# ピンの名前を変数として定義
SPICLK = 11
SPIMOSI = 10
SPIMISO = 9
SPICS = 8
# SPI通信用の入出力を定義
GPIO.setup(SPICLK, GPIO.OUT)
GPIO.setup(SPIMOSI, GPIO.OUT)
GPIO.setup(SPIMISO, GPIO.IN)
GPIO.setup(SPICS, GPIO.OUT)

try:
    # line initialize
    url = "https://notify-api.line.me/api/notify"
    requestsession = requests.session()
    headers = { "Authorization" : "Bearer XxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXx" }
    while True:
        inputVal0 = readadc(0, SPICLK, SPIMOSI, SPIMISO, SPICS)
        if (inputVal0 > 2000 ):
            sendmessage = "はやく替えて"
        elif (inputVal0 > 1000):
            sendmessage = "すごくぬれてる"
        elif (inputVal0 > 500 ):
            sendmessage = "しっち出た"
        else:
            # sendmessage = "だいじょーぶ"
        if ( inputVal0 > 500):
            # line send
            payload = { "message" : sendmessage }
            responce =  requestsession.post( url, data=payload,headers=headers )
            print responce.text.encode( "utf-8" );
        sleep(3)
        
except KeyboardInterrupt:
    print "*** bye! ***";
    pass

GPIO.cleanup()
```

<!--
## DataDogインストール
メトリクスを取得したかったので。DataDogのアカウント作成、
Installing From Source の手順にほぼ従ってインストール。

``` bash:console
$ sudo apt-get install sysstat
$ sudo DD_API_KEY=XXXXXXXXXXXXXXXXXXXXX sh -c "$(curl -L https://raw.githubusercontent.com/DataDog/dd-agent/master/packaging/datadog-agent/source/setup_agent.sh)"
```

Python ライブラリをインストール
``` bash:console
$ sudo pip install datadog
```
-->

### 雑感
楽しかったです。センサ、AD変換、回路 が一通りわかるとアイデア次第でいろいろなことが実現できそうです。
ほんとはLEDピカピカさせておむつ交換したらリセットとか、Datadog に送ってメトリクス収取してグラフで健康管理とかやりたかったんですが、~~飽きました~~力尽きました。


# 参考書籍
基礎が身に付きました、AD変換周りはこちらのサンプルコードから持ってきました。
[
![image.png](https://qiita-image-store.s3.amazonaws.com/0/130874/136dabef-d676-62be-426d-c168474bc80b.png)
Raspberry Piで学ぶ電子工作 超小型コンピュータで電子回路を制御する (ブルーバックス)](https://www.amazon.co.jp/dp/4062578913?tag=qiitak-22)

# 参考にしました
[Raspberry piにもDatadog Agentをインストールしてみる(前編) - Etizolam](http://jhotta.github.io/blog/2014/04/11/datadog-on-raspberry-pi-1/)
[Raspberry Pi 2 向け A/D 変換 : Node.js で土壌湿度センサーを制御してみた ｜ Developers.IO](http://dev.classmethod.jp/server-side/node-js-server-side/raspberry-pi-2-ad-convert-nodejs/)
[Raspberry Pi 3からLINE Notifyでメッセージを送る](http://itemy.net/?p=1369)
[Pythonでのget,post通信メモ - Qiita](http://qiita.com/Thiru0000/items/9259c3940ed91285c066)
[DogStatsD を使った、メトリクスの送信](http://docs.datadoghq.com/ja/guides/metrics/)