Arduino:RFIDでセサミ ロック解除 のみ完成 

スマートホームへ向けて妻のご希望が半完成
RFIDでセサミ ロック解除完成のみ

非常にシンプル 汚いソースだけど
バッチリ動く

自分は、CP2102 がやはり、安定しているようだ。

ESP-12E

20160228_050608A
まず手順として、NEO-M8Nはつなげてない ^_^>
RFID-RC522をつなげて、タグは認識できた
できたこと

ESP-12E稼働状態
RFIDにタグをかがすと
IFTTTに RFIDイベントを送りつける。
受け取ったIFTTTは、セサミのロックを解除 ^_^>

この動作

IFTTTの準備

SnapCrab_NoName_2019-7-16_0-7-10_No-00

この右上、Documentation をクリック
SnapCrab_NoName_2019-7-16_0-20-14_No-00

この赤ラインに一意のキーが表示される。
これ重要、タグ毎にここを制御することになる。
タグによって、ドアを開ける、締める、家の電気を消す、監視カメラを起動する等、完全に操作できるので
青がイベント “RFID”とした。
赤が、一意のキー。
これは、アカウントごと違う。
キーも、暗号処理されているので例えば、どれかを一つ変えたとしても、合致することはないので安心する。
そして、それ以外に、With an optional JSON body of:
に同時に、3つのキーを送れるので、ソースもそのようなっている。

SnapCrab_NoName_2019-7-17_1-23-33_No-00

アプレットを作成、このようになればOK

後は、以下をコンパイルして送るだけ
※自宅はMACセキュリティを入れているので登録
※IP固定は、ESP8266WiFiでできるようだが、失敗するというので
※ここは、別途登録した。

——————————ソースはここから

#include <ESP8266WiFi.h>
#include <SPI.h>
#include <MFRC522.h>
// Configurable, see typical pin layout above
#define RST_PIN         3
// Configurable, see typical pin layout above
#define SS_PIN          4
#define IFTTT_MAX_SIZE_STRING    512

const char* ssid     = “自宅のSSD”;
const char* password = “自宅のパスワード”;
const char* host = “maker.ifttt.com”;

// Create MFRC522 instance
MFRC522 mfrc522(SS_PIN, RST_PIN);
unsigned long getID()
{
if ( ! mfrc522.PICC_ReadCardSerial())
{ //Since a PICC placed get Serial and continue
return -1;
}
unsigned long hex_num;
hex_num =  mfrc522.uid.uidByte[0] << 24;
hex_num += mfrc522.uid.uidByte[1] << 16;
hex_num += mfrc522.uid.uidByte[2] <<  8;
hex_num += mfrc522.uid.uidByte[3];
mfrc522.PICC_HaltA(); // Stop reading
return hex_num;
}

void setup() {
Serial.begin(9600);
// Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4)
while (!Serial);
// Init SPI bus
SPI.begin();
// Init MFRC522
mfrc522.PCD_Init();
// Optional delay. Some board do need more time after init to be ready, see Readme
delay(4);
mfrc522.PCD_DumpVersionToSerial();
// Show details of PCD – MFRC522 Card Reader details
Serial.println(F(“Scan PICC to see UID, SAK, type, and data blocks…”));
// pinMode(12, OUTPUT);
delay(100);

}
void loop()
{
//送信チェック
int chk=0;
String str=””;
String uidstr=””;
//mfrc522カード読み込み
if(mfrc522.PICC_IsNewCardPresent())
{
//uidのみ抽出
unsigned long uid = getID();
if(uid != -1)
{
//読み取ったuidを表示
Serial.println(uid);
//読み取った数字で制御
switch(uid)
{
case 00000000:
  chk=1;
  str=”wife”;
  break;
case 00000001:
chk=1;
str=”boy1″;
break;
case 00000002:
chk=1;
str=”boy2″;
break;
default:
chk=0;
str=””;
break;
}
//送信フラグで送信
if(chk==1)
{
Serial.println();
Serial.println();
Serial.print(“Connecting to “);
Serial.println(ssid);
//wifiに接続
WiFi.begin(ssid, password);
//wifiのステータをチェック
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(“.”);
}
//wifiコネクト開始
Serial.println(“”);
Serial.println(“WiFi connected”);
Serial.println(“IP address: “);
Serial.println(WiFi.localIP());
// Connect to IFTTT
Serial.print(“connecting to “);
Serial.println(host);

// Use WiFiClient class to create TCP connections
WiFiClient client;
const int httpPort = 80;
if (!client.connect(host, httpPort))
{
Serial.println(“connection failed”);
return;
}

// This will send POST to IFTTT server
char str[IFTTT_MAX_SIZE_STRING] = {0};
char v1[16] = “”;
char v2[16] = “”;
char v3[16] = “”;
char header[100] = “POST /trigger/RFID/with/key/ここには赤のキーを入れる HTTP/1.1\r\n”;
const char * host = “Host: maker.ifttt.com\r\n”;
char contentLen[50] = {0};
const char * contentType = “Content-Type: application/json\r\n\r\n”;
char valueData [150] = {0};
sprintf(valueData,”{\”value1\”:\”%s\”,\”value2\”:\”%s\”,\”value3\”:\”%s\”}\r\n”,v1,v2,v3);
sprintf(contentLen,”Content-Length: %d\r\n”,strlen(valueData));
sprintf(str,”%s%s%s%s%s”,header,host,contentLen,contentType,valueData);

client.print(str);
delay(10);
//  chk=0;
}
}
}
//  digitalWrite(12, HIGH);
//  delay(500);
//  digitalWrite(12, LOW);
//  delay(500);
}

——————————ソースはここまで

シリアルモニターに、表示されるICタグのUIDを確認
それを緑へコピペ
緑の  0000000 を置き換えれば良い。
UIDが、合致したら送付用 CHK=1が入り、WIFIの接続が始まる。
もっと整理すれば良いのだが、セサミやその他のスマート機器対応のために、このままにした。
非常に雑だ 、情けなくて汗が出る。 ^_^?
これは、毎回発生するようにしている。 ^_^>
一度つながると、そのIPは、リース期限までそのままなので利用できるが、セキュリティ上と電力的によろしくないのでリースが切れると再度WIFIを接続するようにしている。
簡単。
^_^?
汚いコードですいません。
これでわかった、タグによるドアを開くは簡単になりました。
あくまでも、UIDで接続しているので簡単ですが・・
問題は、セサミを開くだけ対応! セサミのAPIはまだ利用していない。
セサミの状態から、開くか閉じるかを自動的に判断させたい。
これは、まだ完成していないが、シールのタグで開けるので、妻の希望の半分は完成だ。
あー眠たい。
RFID-RC522

フリーのNFCタグ コレに書き込みます。

フリーのNFCタグ コレに書き込みます。