Wio LTE로 비를 스마트폰 알려주는 구조를 만들어 보았다.
Grove의 물 센서(전극 부분에 물이 닿으면 출력이 LOW가 됩니다.푸시 버튼 스위치의 Grove처럼 취급할 수 있습니다.
프로그램
프로그램은 물 센서가 반응하면 IFTTT의 WebHook에 POST하게 되어 있습니다. 센서가 반응하지 않는 상태에서 반응하고 있는 상태로 바뀔 때만 반응하는 ON 엣지 검출이라는 방법으로 반응을 보고 있습니다. 또한 센서가 오작동하지 않도록 10회 연속으로 반응하지 않으면 검출하지 않도록 고안하고 있습니다.
Wio LTE는 D38만 Grove 커넥터의 전원 단자가 항상 ON으로 되어 있습니다만, 그 이외는 프로그램으로 ON으로 하지 않으면 사용할 수 없습니다. 예를 들어, D20의 커넥터에 접속하는 경우는, 다음의 프로그램과 같이 합니다.
#include <WioLTEforArduino.h>
#include <stdio.h>
#define APN "soracom.io"
#define USERNAME "sora"
#define PASSWORD "sora"
#define WEBHOOK_EVENTNAME "NotifyRain"
#define WEBHOOK_KEY "-- key --"
#define WEBHOOK_URL "https://maker.ifttt.com/trigger/"WEBHOOK_EVENTNAME"/with/key/"WEBHOOK_KEY
#define WATER_SENSOR_PIN (WIOLTE_D20) // I2Cの場合はPB8、UARTの場合はPB7とする
#define INTERVAL (100)
#define WATER_SENSOR_OFF 0
#define WATER_SENSOR_ON 1
#define WATER_SENSOR_ERR -1
WioLTE Wio; // D38以外に接続する場合は記述する
void connectLTE()
{
SerialUSB.println("### Power supply ON.");
Wio.PowerSupplyLTE(true);
delay(5000);
SerialUSB.println("### Turn on or reset.");
if (!Wio.TurnOnOrReset()) {
SerialUSB.println("### ERROR! ###");
return;
}
SerialUSB.println("### Connecting to \""APN"\".");
delay(5000);
if (!Wio.Activate(APN, USERNAME, PASSWORD)) {
SerialUSB.println("### ERROR! ###");
return;
}
}
void setup()
{
pinMode(WATER_SENSOR_PIN, INPUT);
Wio.Init(); // D38以外に接続する場合は記述する
Wio.PowerSupplyGrove(true); // D38以外に接続する場合は記述する
connectLTE();
}
void loop()
{
static int beforeWaterSensorStatus = WATER_SENSOR_OFF;
int waterSensorStatus = getWaterSensorStatus();
if(waterSensorStatus != WATER_SENSOR_ERR ) {
if((waterSensorStatus == WATER_SENSOR_ON)
&&(beforeWaterSensorStatus == WATER_SENSOR_OFF)) {
char data[100];
int status;
SerialUSB.println("### Post.");
sprintf(data, "{\"value1\":\"It started to rain\"}");
SerialUSB.print("Post:");
SerialUSB.print(data);
SerialUSB.println("");
if (!Wio.HttpPost(WEBHOOK_URL, data, &status)) {
SerialUSB.println("### ERROR! ###");
}
SerialUSB.print("Status:");
SerialUSB.println(status);
}
beforeWaterSensorStatus = waterSensorStatus;
}
delay(INTERVAL);
}
// 水センサーの値を取得
int getWaterSensorStatus()
{
int waterSensorStatus = digitalRead(WATER_SENSOR_PIN); // 現在の値を取得(基準)
delay(100);
// 10回同じ値であれば正常
for(int i=0;i<10;i++) {
int nowWaterSensorStatus = digitalRead(WATER_SENSOR_PIN); // 現在の値を取得
if( waterSensorStatus != nowWaterSensorStatus ){
return WATER_SENSOR_ERR;
}
delay(100);
}
if(waterSensorStatus == LOW) return WATER_SENSOR_ON;
return WATER_SENSOR_OFF;
}
또한 I2C의 Grove 커넥터에 접속하는 경우는 PB8, UART의 경우는 PB7로 합니다.
IFTTT 으로 스마트폰으로
IFTTT에는 스마트폰용 앱이 있으며 출력측 서비스에서 'Notifications'를 사용하면 스마트폰 앱에서 받고 표시할 수 있습니다. 스마트 폰의 앱은 스토어에서 IFTTT로 검색하면 발견된다고 생각합니다.
IFTTT 설정
알림을 받은 스마트폰 화면
실용시의 주의점
비에 반응시켰을 때 그대로 마르면 비의 성분이 남아 버려 반응한 채로 되어 버립니다. 그 때문에, 맑은 때는 닦아내거나, 센서를 비스듬하게 해, 흘러내리는 듯한 궁리가 필요합니다.
마지막으로
집필 중인 Kindle 서적의 Wio LTE 책(Grove 레퍼런스편)은 이러한 노하우를 정리하고 있습니다. 출판까지 조금 기다려주세요!
목차 및 책에 대한 정보는 아래를 참조하십시오.
Reference
이 문제에 관하여(Wio LTE로 비를 스마트폰 알려주는 구조를 만들어 보았다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/jksoft/items/c519fdb75c1885907063
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#include <WioLTEforArduino.h>
#include <stdio.h>
#define APN "soracom.io"
#define USERNAME "sora"
#define PASSWORD "sora"
#define WEBHOOK_EVENTNAME "NotifyRain"
#define WEBHOOK_KEY "-- key --"
#define WEBHOOK_URL "https://maker.ifttt.com/trigger/"WEBHOOK_EVENTNAME"/with/key/"WEBHOOK_KEY
#define WATER_SENSOR_PIN (WIOLTE_D20) // I2Cの場合はPB8、UARTの場合はPB7とする
#define INTERVAL (100)
#define WATER_SENSOR_OFF 0
#define WATER_SENSOR_ON 1
#define WATER_SENSOR_ERR -1
WioLTE Wio; // D38以外に接続する場合は記述する
void connectLTE()
{
SerialUSB.println("### Power supply ON.");
Wio.PowerSupplyLTE(true);
delay(5000);
SerialUSB.println("### Turn on or reset.");
if (!Wio.TurnOnOrReset()) {
SerialUSB.println("### ERROR! ###");
return;
}
SerialUSB.println("### Connecting to \""APN"\".");
delay(5000);
if (!Wio.Activate(APN, USERNAME, PASSWORD)) {
SerialUSB.println("### ERROR! ###");
return;
}
}
void setup()
{
pinMode(WATER_SENSOR_PIN, INPUT);
Wio.Init(); // D38以外に接続する場合は記述する
Wio.PowerSupplyGrove(true); // D38以外に接続する場合は記述する
connectLTE();
}
void loop()
{
static int beforeWaterSensorStatus = WATER_SENSOR_OFF;
int waterSensorStatus = getWaterSensorStatus();
if(waterSensorStatus != WATER_SENSOR_ERR ) {
if((waterSensorStatus == WATER_SENSOR_ON)
&&(beforeWaterSensorStatus == WATER_SENSOR_OFF)) {
char data[100];
int status;
SerialUSB.println("### Post.");
sprintf(data, "{\"value1\":\"It started to rain\"}");
SerialUSB.print("Post:");
SerialUSB.print(data);
SerialUSB.println("");
if (!Wio.HttpPost(WEBHOOK_URL, data, &status)) {
SerialUSB.println("### ERROR! ###");
}
SerialUSB.print("Status:");
SerialUSB.println(status);
}
beforeWaterSensorStatus = waterSensorStatus;
}
delay(INTERVAL);
}
// 水センサーの値を取得
int getWaterSensorStatus()
{
int waterSensorStatus = digitalRead(WATER_SENSOR_PIN); // 現在の値を取得(基準)
delay(100);
// 10回同じ値であれば正常
for(int i=0;i<10;i++) {
int nowWaterSensorStatus = digitalRead(WATER_SENSOR_PIN); // 現在の値を取得
if( waterSensorStatus != nowWaterSensorStatus ){
return WATER_SENSOR_ERR;
}
delay(100);
}
if(waterSensorStatus == LOW) return WATER_SENSOR_ON;
return WATER_SENSOR_OFF;
}
IFTTT에는 스마트폰용 앱이 있으며 출력측 서비스에서 'Notifications'를 사용하면 스마트폰 앱에서 받고 표시할 수 있습니다. 스마트 폰의 앱은 스토어에서 IFTTT로 검색하면 발견된다고 생각합니다.
IFTTT 설정
알림을 받은 스마트폰 화면
실용시의 주의점
비에 반응시켰을 때 그대로 마르면 비의 성분이 남아 버려 반응한 채로 되어 버립니다. 그 때문에, 맑은 때는 닦아내거나, 센서를 비스듬하게 해, 흘러내리는 듯한 궁리가 필요합니다.
마지막으로
집필 중인 Kindle 서적의 Wio LTE 책(Grove 레퍼런스편)은 이러한 노하우를 정리하고 있습니다. 출판까지 조금 기다려주세요!
목차 및 책에 대한 정보는 아래를 참조하십시오.
Reference
이 문제에 관하여(Wio LTE로 비를 스마트폰 알려주는 구조를 만들어 보았다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/jksoft/items/c519fdb75c1885907063
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
집필 중인 Kindle 서적의 Wio LTE 책(Grove 레퍼런스편)은 이러한 노하우를 정리하고 있습니다. 출판까지 조금 기다려주세요!
목차 및 책에 대한 정보는 아래를 참조하십시오.
Reference
이 문제에 관하여(Wio LTE로 비를 스마트폰 알려주는 구조를 만들어 보았다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/jksoft/items/c519fdb75c1885907063텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)