してもいい日の絶対サイン

#概要
例えれば、電子式YES/NO枕です。
夫婦間の微妙な問題をスパッと解決して、少子化防止にも貢献する、お助けツール。
webサービスから、貝殻ランプを遠隔操作する。
女性が、スマホ、PCから操作する。
arduino unoからesp8266でwifiにつなぎます。
mqttブローカーは、sangoを使ってます。
スイッチは、jsdo.itに置いてます。
#写真
![MVC-003S.JPG](https://qiita-image-store.s3.amazonaws.com/0/18104/9f1a24c0-1a27-3575-c170-f91d55d861cd.jpeg)
![iihi4.JPG](https://qiita-image-store.s3.amazonaws.com/0/18104/f864d9d0-3917-56ef-cc03-963c984f1c05.jpeg)
#ムービー
https://www.youtube.com/watch?v=kJN0jGaMacw
#回路図
![iihi.JPG](https://qiita-image-store.s3.amazonaws.com/0/18104/9b163986-433d-7684-b36b-82acaf0c9750.jpeg)
#サンプルコード
```
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11);
char buff[256];
long int ctime = millis();
String sendAT(String command, const int timeout)
{
	String response = "";
	Serial.print(command);
	long int time = millis();
	while ((time + timeout) > millis())
	{
		while (Serial.available())
		{
			char c = Serial.read();
			response += c;
		}
	}
	mySerial.print(response);
	return response;
}
String waitAT(const int timeout)
{
	String response = "";
	long int time = millis();
	while ((time + timeout) > millis())
	{
		while (Serial.available())
		{
			char c = Serial.read();
			response += c;
		}
	}
	mySerial.print(response);
	return response;
}
void setup()
{
	pinMode(13, OUTPUT);
	digitalWrite(13, LOW);
	mySerial.begin(115200);
	Serial.begin(115200);
	sendAT("AT+GMR\r\n", 2000);
	sendAT("AT+CWJAP=\"free-spot\",\"\"\r\n", 3000);
	sendAT("AT+CIPMUX=0\r\n", 1000);
	sendAT("AT+CIFSR\r\n", 1000);
	sendAT("AT+CIPSTART=\"TCP\",\"lite.mqtt.shiguredo.jp\",1883\r\n", 2000);
	sendAT("AT+CIPSEND=52\r\n", 3000);
	Serial.write(16);
	Serial.write(50);
	Serial.write(0);
	Serial.write(4);
	Serial.print("MQTT");
	Serial.write(4);
	Serial.write(194);
	Serial.write(0);
	Serial.write(60);
	Serial.write(0);
	Serial.write(4);
	Serial.print("papa");
	Serial.write(0);
	Serial.write(14);
	Serial.print("ohisama@github");
	Serial.write(0);
	Serial.write(16);
	sendAT("pass", 2000);
	sendAT("AT+CIPSEND=27\r\n", 3000);
	Serial.write(130);
	Serial.write(25);
	Serial.write(0);
	Serial.write(1);
	Serial.write(0);
	Serial.write(20);
	Serial.print("ohisama@github/test0");
	Serial.write(0);
	waitAT(2000);
	mySerial.print(" ok\r\n");
}
void loop()
{
	int ch_id, packet_len;
	char * pb;
	int i = 0;
	char c;
	if ((ctime + 29000) < millis())
	{
		String cipSend = "AT+CIPSEND=2\r\n";
		sendAT(cipSend, 3000);
		Serial.write(192);
		Serial.write(0);
		ctime = millis();
	}
	if (Serial.available())
	{
		while (Serial.available() > 0)
		{
			c = Serial.read();
			if (c > ' ' && c < 127)
			{
				buff[i++] = c;
			}
			if (i > 1 && buff[i - 2] == 'I' && buff[i - 1] == '+')
			{
				buff[i] = 0;
				i = 0;
				break;
			}
		}
		mySerial.print(buff);
		if (strncmp(buff, "+IPD,", 5) == 0)
		{
			mySerial.print(" ok1\r\n");
			sscanf(buff + 5, "%d", &packet_len);
			mySerial.print("@len: ");
			mySerial.println(packet_len);
			if (packet_len > 0)
			{
				if (packet_len == 27)
				{
					digitalWrite(13, LOW);
					mySerial.print("@on@");
				}
				else if (packet_len == 28)
				{
					digitalWrite(13, HIGH);
					mySerial.print("@off@");
				}
				else
				{
					mySerial.print("@?@");
				}
			}
		}
		else
		{
			mySerial.print(" ng\r\n");
		}
	}
}
```