WIZnet S2E Deadbolts

Unlocking the deadbolt via Ethernet using WIZ750SR S2E, your WiFi network is now the key to your lock.
ORIGINAL POST
By Peter Ma
components
Hardware Components
Software Apps and online services
Microsoft Windows 10
details

无标题.png

S2E Unlock Demo

https://youtu.be/XsfUd-Xpe6M

Keyless Entry and Smart Locks

The idea of smart locks has been out for a while, but at the end of the day, people still end up carrying either RFID or just use the lock itself. We pretty much carry our phone all the time now, and by the time we are at the door we are automatically connected to our own WiFi network. By using Serial to Ethernet (S2E), we can actually implement a true keyless experience, using our phone as the key and S2E to unlock the deadbolts.

Step 1: Connect the WIZ750SR

With developer edition, we first can power up the WIZ750SR through micro-usb port. when everything is connected, we should see green LED on for connected to the ethernet, blue LED on for EtherNet add on working and red led on for device being powered on as figure below.

WIZ750SR powered on

After powering on we can download the configuration tool from https://github.com/Wiznet/WIZnet-S2E-Tool-GUI to check whether the device is working. Easiest way here is to go through IP allocation via DHCP, then go back to static to auto fill out the Network configuration

WIZnet S2E Configuration Tool

The USB to UART driver can be downloaded if you are using the usb port. The Micro usb port that powers up the board will be the CP210x USB to UART Bridge used for debugging.

https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers

UART Bridge

We can use debug port to test out termite to test out the serial port, which can be downloaded from https://www.compuphase.com/software_termite.htm we should receive all the messages sending to COM port via debug usb

How Termite works

As for the ethernet side we used ioninja’s tcp server listening http://ioninja.com/plugins/tcp-listener.html Once that’s successful we can test out whether these are in Sync, this allows to communicate from Serial to Ethernet

Termite and IO Ninja

Step 2: Install All the IDE

We first need to install all the drivers for WIZ750SR, in this case we only have Windows IDE available and they are being instructed through https://github.com/Ricky-Kwon/WIZ750SR_Boot/wiki/Develop-environment-for-windows

For the most part, we need the following in our IDE, and this guide specifically used 64 bit windows.

From Ricky-Kwon’s installation guide it seems that GNU Arm Eclipse Plugin web might not work, you can easily download, unzip and set that up to install as Eclipse’s plugin as image below. Successful install would ask you to restart Eclipse.

Installing GNU ARM Eclipse Plug-ins

After wards, we can copy the project and change accordingly

git clone https://github.com/Ricky-Kwon/WIZ750SR_App.git

Running WIZ750SR_App in Eclipse

New firmware update can be seen from https://wizwiki.net/wiki/doku.php?id=products:wiz750sr:developers:start#building_a_wiz750sr_development_environment

Step 3: Getting Lock to Work with Arduino

The deadbolts usually require 12V, while normal Arduino would only output 5V max, so in order to get the lock to work we can tap into the power source by soldering two wires at the power source like image below. We will use red wire as 12V and black wire as ground.

Tapping 12V from Arduino

After that, We can insert the knob at A0 and Relay at D6 and use following code to test out the lock

#define ROTARY_ANGLE_SENSOR A0
#define LED 3  //the Grove - LED is connected to PWM pin D3 of Arduino
#define ADC_REF 5 //reference voltage of ADC is 5v.If the Vcc switch on the seeeduino
                   //board switches to 3V3, the ADC_REF should be 3.3
#define GROVE_VCC 5 //VCC of the grove interface is normally 5v
#define FULL_ANGLE 300 //full value of the rotary angle is 300 degrees
const int relayPin =  6;      // the number of the Relay
int incomingByte = 0;   // for incoming serial data
void setup() {
 // initialize the LED pin as an output:
 pinMode(relayPin, OUTPUT);
 Serial.begin(9600);     // opens serial port, sets data rate to 9600 bps
 pinMode(ROTARY_ANGLE_SENSOR, INPUT);
 pinMode(LED,OUTPUT);   
}
void loop() {
   float voltage;
   int sensor_value = analogRead(ROTARY_ANGLE_SENSOR);
   voltage = (float)sensor_value*ADC_REF/1023;
   float degrees = (voltage*FULL_ANGLE)/GROVE_VCC;
   //Serial.println("The angle between the mark and the starting position:");
   //Serial.println(degrees);
   if(degrees < 100)
   {
     digitalWrite(relayPin, HIGH);
     Serial.println("on");
   }
   else
   {
     digitalWrite(relayPin, LOW);
     Serial.println("off");
   }
   delay(100);
}

If everything is successful, we can lock and unlock by using the knob through testing it should show up on the GIF below.
https://hackster.imgix.net/uploads/attachments/517120/ezgif_com-optimize_OgSnXg4qIO.gif?auto=compress&gifq=35&w=740&h=555&fit=max&fm=mp4

Step 4: Connect WIZ750SR to Arduino

Since we’ve gotten the lock to work, we are now ready to setup the WIZ750SR, we can connect the WIZ750SR to Arduino UNO with relay like the image below. Arduino UNO only have Serial port that’s basically pin 0 and 1 for RX and TX

TX RX Arduino

We can use following code to make sure the lock works via receiver. At this point we can also remove the rotary knob as it is no longer needed.

#include <SoftwareSerial.h>
const int relayPin =  6;      // the number of the Relay
SoftwareSerial mySerial(0, 1); // RX, TX
void setup() {
 // initialize the LED pin as an output:
 pinMode(relayPin, OUTPUT);
 Serial.begin(9600);     // opens serial port, sets data rate to 9600 bps
 while (!Serial) {
   ; // wait for serial port to connect. Needed for native USB port only
 }
 //S2E is using 115200 from previous steps
 mySerial.begin(115200);
}
void loop() {
 if (mySerial.available()) {
   if(mySerial.read() == 49)
   {
     digitalWrite(relayPin, HIGH);
     Serial.println("on");
     delay(5000);
     digitalWrite(relayPin, LOW);
     Serial.println("off");
   }
 }
 delay(100);
}

At this point if you enter "1" into tcp it should unlock the lock. We can also get rid of the knob at this point. the enter unit now looks like the photo below.
https://hackster.imgix.net/uploads/attachments/517173/ezgif_com-optimize_(1)_hhOyuJX8jO.gif?auto=compress&gifq=35&w=740&h=555&fit=max&fm=mp4

Step 5: Building Android App to Unlock

Now that we can already unlock the door using TCP, the next step is building an android app so that user no longer need to carry the keys around. Below are a very simple app that we’ve built to unlock the deadbolt. Now that WiFi network becomes your key to the house as you’d be able to unlock deadbolts using WIZ750SR.

Android unlock app

The code for Android is following, and you can download the full from GitHub.

 package com.demo.s2elock;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import cheekiat.slideview.SlideView;
public class MainActivity extends AppCompatActivity {
   TcpClient mTcpClient;
   SlideView mSlideView;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       mSlideView = (SlideView) findViewById(R.id.slide_view);
       mSlideView.setOnFinishListener(new SlideView.OnFinishListener() {
           @Override
           public void onFinish() {
               //someting to do
               if(mTcpClient != null)
               {
                   mTcpClient.sendMessage("1");
                   mSlideView.reset();
               }
           }
       });
   }
   protected void onResume() {
       super.onResume();
       if(mTcpClient == null)
       {
           new ConnectTask().execute("");
       }
   }
   protected void onPause() {
       super.onPause();
       if (mTcpClient != null) {
           mTcpClient.stopClient();
           mTcpClient = null;
       }
   }
   public class ConnectTask extends AsyncTask<String, String, TcpClient> {
       @Override
       protected TcpClient doInBackground(String... message) {
           //we create a TCPClient object
           mTcpClient = new TcpClient(new TcpClient.OnMessageReceived() {
               @Override
               //here the messageReceived method is implemented
               public void messageReceived(String message) {
                   //this method calls the onProgressUpdate
                   //publishProgress(message);
               }
           });
           mTcpClient.run();
           return null;
       }
       @Override
       protected void onProgressUpdate(String... values) {
           super.onProgressUpdate(values);
           //response received from server
           Log.d("test", "response " + values[0]);
           //process server response here....
       }
   }
}

https://hackster.imgix.net/uploads/attachments/517823/ezgif_com-optimize_(2)_phuoiYunQs.gif?auto=compress&gifq=35&w=740&h=555&fit=max&fm=mp4

Schematics

https://hacksterio.s3.amazonaws.com/uploads/attachments/517134/screen_shot_2018-07-05_at_2_32_18_am_sZkgbs36MT.png

Code

Arduino S2E receiver code

#include <SoftwareSerial.h>
const int relayPin =  6;      // the number of the Relay
SoftwareSerial mySerial(0, 1); // RX, TX
void setup() {
 // initialize the LED pin as an output:
 pinMode(relayPin, OUTPUT);
 Serial.begin(9600);     // opens serial port, sets data rate to 9600 bps
 while (!Serial) {
   ; // wait for serial port to connect. Needed for native USB port only
 }
 //S2E is using 115200 from previous steps
 mySerial.begin(115200);
}
void loop() {
 if (mySerial.available()) {
   if(mySerial.read() == 49)
   {
     digitalWrite(relayPin, HIGH);
     Serial.println("on");
     delay(5000);
     digitalWrite(relayPin, LOW);
     Serial.println("off");
   }
 }
 delay(100);
}

S2E Deadbolt Repo

https://github.com/Nyceane/s2e-deadbolt

 





无标题.png

S2E Unlock Demo

https://youtu.be/XsfUd-Xpe6M

Keyless Entry and Smart Locks

The idea of smart locks has been out for a while, but at the end of the day, people still end up carrying either RFID or just use the lock itself. We pretty much carry our phone all the time now, and by the time we are at the door we are automatically connected to our own WiFi network. By using Serial to Ethernet (S2E), we can actually implement a true keyless experience, using our phone as the key and S2E to unlock the deadbolts.

Step 1: Connect the WIZ750SR

With developer edition, we first can power up the WIZ750SR through micro-usb port. when everything is connected, we should see green LED on for connected to the ethernet, blue LED on for EtherNet add on working and red led on for device being powered on as figure below.

WIZ750SR powered on

After powering on we can download the configuration tool from https://github.com/Wiznet/WIZnet-S2E-Tool-GUI to check whether the device is working. Easiest way here is to go through IP allocation via DHCP, then go back to static to auto fill out the Network configuration

WIZnet S2E Configuration Tool

The USB to UART driver can be downloaded if you are using the usb port. The Micro usb port that powers up the board will be the CP210x USB to UART Bridge used for debugging.

https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers

UART Bridge

We can use debug port to test out termite to test out the serial port, which can be downloaded from https://www.compuphase.com/software_termite.htm we should receive all the messages sending to COM port via debug usb

How Termite works

As for the ethernet side we used ioninja’s tcp server listening http://ioninja.com/plugins/tcp-listener.html Once that’s successful we can test out whether these are in Sync, this allows to communicate from Serial to Ethernet

Termite and IO Ninja

Step 2: Install All the IDE

We first need to install all the drivers for WIZ750SR, in this case we only have Windows IDE available and they are being instructed through https://github.com/Ricky-Kwon/WIZ750SR_Boot/wiki/Develop-environment-for-windows

For the most part, we need the following in our IDE, and this guide specifically used 64 bit windows.

From Ricky-Kwon’s installation guide it seems that GNU Arm Eclipse Plugin web might not work, you can easily download, unzip and set that up to install as Eclipse’s plugin as image below. Successful install would ask you to restart Eclipse.

Installing GNU ARM Eclipse Plug-ins

After wards, we can copy the project and change accordingly

git clone https://github.com/Ricky-Kwon/WIZ750SR_App.git

Running WIZ750SR_App in Eclipse

New firmware update can be seen from https://wizwiki.net/wiki/doku.php?id=products:wiz750sr:developers:start#building_a_wiz750sr_development_environment

Step 3: Getting Lock to Work with Arduino

The deadbolts usually require 12V, while normal Arduino would only output 5V max, so in order to get the lock to work we can tap into the power source by soldering two wires at the power source like image below. We will use red wire as 12V and black wire as ground.

Tapping 12V from Arduino

After that, We can insert the knob at A0 and Relay at D6 and use following code to test out the lock

#define ROTARY_ANGLE_SENSOR A0
#define LED 3  //the Grove - LED is connected to PWM pin D3 of Arduino
#define ADC_REF 5 //reference voltage of ADC is 5v.If the Vcc switch on the seeeduino
                   //board switches to 3V3, the ADC_REF should be 3.3
#define GROVE_VCC 5 //VCC of the grove interface is normally 5v
#define FULL_ANGLE 300 //full value of the rotary angle is 300 degrees
const int relayPin =  6;      // the number of the Relay
int incomingByte = 0;   // for incoming serial data
void setup() {
 // initialize the LED pin as an output:
 pinMode(relayPin, OUTPUT);
 Serial.begin(9600);     // opens serial port, sets data rate to 9600 bps
 pinMode(ROTARY_ANGLE_SENSOR, INPUT);
 pinMode(LED,OUTPUT);   
}
void loop() {
   float voltage;
   int sensor_value = analogRead(ROTARY_ANGLE_SENSOR);
   voltage = (float)sensor_value*ADC_REF/1023;
   float degrees = (voltage*FULL_ANGLE)/GROVE_VCC;
   //Serial.println("The angle between the mark and the starting position:");
   //Serial.println(degrees);
   if(degrees < 100)
   {
     digitalWrite(relayPin, HIGH);
     Serial.println("on");
   }
   else
   {
     digitalWrite(relayPin, LOW);
     Serial.println("off");
   }
   delay(100);
}

If everything is successful, we can lock and unlock by using the knob through testing it should show up on the GIF below.
https://hackster.imgix.net/uploads/attachments/517120/ezgif_com-optimize_OgSnXg4qIO.gif?auto=compress&gifq=35&w=740&h=555&fit=max&fm=mp4

Step 4: Connect WIZ750SR to Arduino

Since we’ve gotten the lock to work, we are now ready to setup the WIZ750SR, we can connect the WIZ750SR to Arduino UNO with relay like the image below. Arduino UNO only have Serial port that’s basically pin 0 and 1 for RX and TX

TX RX Arduino

We can use following code to make sure the lock works via receiver. At this point we can also remove the rotary knob as it is no longer needed.

#include <SoftwareSerial.h>
const int relayPin =  6;      // the number of the Relay
SoftwareSerial mySerial(0, 1); // RX, TX
void setup() {
 // initialize the LED pin as an output:
 pinMode(relayPin, OUTPUT);
 Serial.begin(9600);     // opens serial port, sets data rate to 9600 bps
 while (!Serial) {
   ; // wait for serial port to connect. Needed for native USB port only
 }
 //S2E is using 115200 from previous steps
 mySerial.begin(115200);
}
void loop() {
 if (mySerial.available()) {
   if(mySerial.read() == 49)
   {
     digitalWrite(relayPin, HIGH);
     Serial.println("on");
     delay(5000);
     digitalWrite(relayPin, LOW);
     Serial.println("off");
   }
 }
 delay(100);
}

At this point if you enter "1" into tcp it should unlock the lock. We can also get rid of the knob at this point. the enter unit now looks like the photo below.
https://hackster.imgix.net/uploads/attachments/517173/ezgif_com-optimize_(1)_hhOyuJX8jO.gif?auto=compress&gifq=35&w=740&h=555&fit=max&fm=mp4

Step 5: Building Android App to Unlock

Now that we can already unlock the door using TCP, the next step is building an android app so that user no longer need to carry the keys around. Below are a very simple app that we’ve built to unlock the deadbolt. Now that WiFi network becomes your key to the house as you’d be able to unlock deadbolts using WIZ750SR.

Android unlock app

The code for Android is following, and you can download the full from GitHub.

 package com.demo.s2elock;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import cheekiat.slideview.SlideView;
public class MainActivity extends AppCompatActivity {
   TcpClient mTcpClient;
   SlideView mSlideView;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       mSlideView = (SlideView) findViewById(R.id.slide_view);
       mSlideView.setOnFinishListener(new SlideView.OnFinishListener() {
           @Override
           public void onFinish() {
               //someting to do
               if(mTcpClient != null)
               {
                   mTcpClient.sendMessage("1");
                   mSlideView.reset();
               }
           }
       });
   }
   protected void onResume() {
       super.onResume();
       if(mTcpClient == null)
       {
           new ConnectTask().execute("");
       }
   }
   protected void onPause() {
       super.onPause();
       if (mTcpClient != null) {
           mTcpClient.stopClient();
           mTcpClient = null;
       }
   }
   public class ConnectTask extends AsyncTask<String, String, TcpClient> {
       @Override
       protected TcpClient doInBackground(String... message) {
           //we create a TCPClient object
           mTcpClient = new TcpClient(new TcpClient.OnMessageReceived() {
               @Override
               //here the messageReceived method is implemented
               public void messageReceived(String message) {
                   //this method calls the onProgressUpdate
                   //publishProgress(message);
               }
           });
           mTcpClient.run();
           return null;
       }
       @Override
       protected void onProgressUpdate(String... values) {
           super.onProgressUpdate(values);
           //response received from server
           Log.d("test", "response " + values[0]);
           //process server response here....
       }
   }
}

https://hackster.imgix.net/uploads/attachments/517823/ezgif_com-optimize_(2)_phuoiYunQs.gif?auto=compress&gifq=35&w=740&h=555&fit=max&fm=mp4

Schematics

https://hacksterio.s3.amazonaws.com/uploads/attachments/517134/screen_shot_2018-07-05_at_2_32_18_am_sZkgbs36MT.png

Code

Arduino S2E receiver code

#include <SoftwareSerial.h>
const int relayPin =  6;      // the number of the Relay
SoftwareSerial mySerial(0, 1); // RX, TX
void setup() {
 // initialize the LED pin as an output:
 pinMode(relayPin, OUTPUT);
 Serial.begin(9600);     // opens serial port, sets data rate to 9600 bps
 while (!Serial) {
   ; // wait for serial port to connect. Needed for native USB port only
 }
 //S2E is using 115200 from previous steps
 mySerial.begin(115200);
}
void loop() {
 if (mySerial.available()) {
   if(mySerial.read() == 49)
   {
     digitalWrite(relayPin, HIGH);
     Serial.println("on");
     delay(5000);
     digitalWrite(relayPin, LOW);
     Serial.println("off");
   }
 }
 delay(100);
}

S2E Deadbolt Repo

https://github.com/Nyceane/s2e-deadbolt

 





documents
Code
S2E Deadbolt Repo
Schematics
Arduino UNO to WIZ750SR

COMMENTS

Please Login to comment
  Subscribe  
Notify of
POSTED BY
TAGS