記事をご覧くださりありがとうございます!
初めまして。AI/IoT分野のプロフェッショナルを目指して修行中の、のぶたんです。🐉
今回は、服の状態を監視して、服が少なくなったらメールで通知するIoTシステムを自作してみたことについて書いている記事です。
この洗濯アラートサービス「SENTAQUIQ」を使うことで、早めに服を洗濯することで、「着る服がない!!」という困りごとを解消することができます(^▽^)/
システム構成
試作版SENTAQUIQ
→ハンガーの服状態を監視する仕組みはシンプル、透過型フォトインタラプタでハンガーがかけているかを判別しています!
→ハンガーのかけている状態を監視して、服の乾き具合を測る方法が別案であるので、バージョン2では、改良していきます。
→温湿度センサをつけているので、カビが生えやすい湿度になったら、通知することもできます★
メール通知
→sigfoxのCallback機能を使ってサーバに飛んできたデータを判別してメール送信するようにしています。
ソースコード(サーバ側)
MAIL_SERVER = 'smtp.gmail.com'
MAIL_PORT = 587
MAIL_USE_TLS = True
MAIL_USE_SSL = False
MAIL_USERNAME = '送り元@gmail.com'
MAIL_PASSWORD = '送り元パスワード'
MAIL_DEFAULT_SENDER = '送り元@gmail.com'
# -*- coding: utf-8 -*-
from datetime import datetime
from flask import Flask,request
import requests
from flask_mail import Mail, Message
import config
import json
bodytemp=datetime.now().strftime('%Y-%m-%d')+datetime.now().strftime('%H:%M:%S') +" \n熱中症リスクがあります。こまめな水分補給してください!!"
bodykabi=datetime.now().strftime('%Y-%m-%d')+datetime.now().strftime('%H:%M:%S') +"\nカビが生えやすい湿度です。換気してください!!"
bodycloth=datetime.now().strftime('%Y-%m-%d')+datetime.now().strftime('%H:%M:%S')+" \n服が少なくなりました。洗濯してください!!"
app = Flask(__name__)
app.config.from_object('config')
mail = Mail(app)
@app.route('/post', methods=['GET', 'POST'])
def post():
if request.method == 'POST':
data = request.data
print(data)
json_dict = json.loads(data)
status = map(int, json_dict["data"])
if status[-3] == 1 or status[-3] == 2 or status[-3] == 3 or status[-3] == 4:
msg = Message(recipients=['宛先@gmail.com'],body=bodytemp,subject='SENTAQUIQサービス')
mail.send(msg)
if status[-2] == 1:
msg = Message(recipients=['宛先@gmail.com'],body=bodykabi,subject='SENTAQUIQサービス')
mail.send(msg)
if status[-1] == 1 or status[-1] == 2:
msg = Message(recipients=['宛先@gmail.com'],body=bodycloth,subject='SENTAQUIQサービス')
mail.send(msg)
return ''
if __name__ == "__main__":
app.run(host='0.0.0.0',port=8090)
ソースコード(sentaquiqシステム側)
#include <SoftwareSerial.h>
#include "SparkFun_Si7021_Breakout_Library.h"
#include <Wire.h>
float humidity = 0;
float tempf = 0;
//Create Instance of HTU21D or SI7021 temp and humidity sensor and MPL3115A2 barrometric sensor
Weather sensor;
#define sensor1 4
#define sensor2 5
#define sensor3 6
#define sensor4 7
//#define sensor5 8
//#define sensor6 9
//#define sensor7 10
//#define sensor8 11
SoftwareSerial mySerial(3, 2); // RX, TX
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
/*while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}*/
pinMode(sensor1,INPUT);
pinMode(sensor2,INPUT);
pinMode(sensor3,INPUT);
pinMode(sensor4,INPUT);
// pinMode(sensor5,INPUT);
// pinMode(sensor6,INPUT);
// pinMode(sensor7,INPUT);
// pinMode(sensor8,INPUT);
sensor.begin();
// set the data rate for the SoftwareSerial port
mySerial.begin(9600);
}
void loop() { // run over and over
getWeather();
int tempc = (tempf-32)/1.8;
int data=0;
if(tempc >= 24){
//level1
data = 100;
}else if(tempc >= 28){
//level2
data = 200;
}else if(tempc >= 31){
//level3
data = 300;
}else if(tempc >= 34){
//level4
data = 400;
}else{
//level0
data= 0;
}
if (humidity > 65){
//kabi
data = 10;
}else{
data = 0;
}
int s1=digitalRead(sensor1);
int s2=digitalRead(sensor2);
int s3=digitalRead(sensor3);
int s4=digitalRead(sensor4);
// int s5=digitalRead(sensor5);
// int s6=digitalRead(sensor6);
// int s7=digitalRead(sensor7);
// int s8=digitalRead(sensor8);
// Serial.println(String(s1)+String(s2)+String(s3)+String(s4)+String(s5)+String(s6));
data += !s1;
data += !s2;
data += !s3;
data += !s4;
//data +=!s5;
// data +=!s6;
//data +=!s7;
// data +=!s8;
String senddata = "AT$SF=";
senddata += String(data+1000);
senddata += "\r";
mySerial.write(senddata.c_str());
//2時間おきにデータがポストされます!
delay(1000*60*60*2);
}
void getWeather()
{
// Measure Relative Humidity from the HTU21D or Si7021
humidity = sensor.getRH();
// Measure Temperature from the HTU21D or Si7021
tempf = sensor.getTempF();
// Temperature is measured every time RH is requested.
// It is faster, therefore, to read it from previous RH
// measurement with getTemp() instead with readTemp()
}
このSENTAQUIQをIoTサービスっぽいサイトとして作ってみた
感想
Sigfoxを始めて使ってみて、2時間に一回データをPOSTする仕組みにしているので、コスト的にも他の通信規格(ポケットWI-FIなど)よりいいと思いました。
→大量にデータ通信する場合は、別の規格がよい。
この記事をご覧になった方...
今回はSigfoxを使って洗濯通知IoTシステムを構築してみました。
センサーとArduinoとSigfoxボードを組み合わせれば、
アイデア次第でいろいろ活用できると思います。
皆さんも、生活の困りごとを解消するアイデアをIoTという形で実現してみてはいかがでしょうか。
とっても面白いですよ👍
それでは✋