지난번에 FRDM-KL25Z와 Ethernet shield를 이용해서 auto LED를 만들어 보았다.

이번에는 WIZwiki-W7500을 이용해서 그 기능을 똑같이 구현해 보려고 한다. 이름은 Smart LED 라고 지었다.

<이전글>

2015/06/29 - [IT / Development/mbed] - mbed로 auto LED 만들어 보자. - 1

2015/06/29 - [IT / Development/mbed] - mbed로 auto LED 만들어 보자 + Ethernet - 2


PIR 센서와 CDS 센서, Power LED가 들어가 있는 보드는 이전에 사용했던 것을 그대로 사용했다. 이전글을 참고해보면 된다.

회로도와 보드는 아래 사진과 같다.

그리고 CDS센서와 PIR센서의 값을 받아 들이는 예제 코드를 작성해서 따로 공유해 두었다. 아래 글을 참고하길 바란다.

2015/06/29 - [IT / Development/mbed] - [mbed] WIZwiki-W7500으로 CDS센서 값 읽기.

2015/06/29 - [IT / Development/mbed] - [mbed] WIZwiki-W7500으로 PIR motion sensor 값 받기.


현재의 빛의 밝기, 사람의 움직임, LED의 상태를 TCP Server로 전송하는 프로젝트이다.

기본적으로 어두울때 사람의 움직임이 감지되면 LED가 계속 켜지게 되고, 밝을때는 LED가 켜지지 않는다.


<코드>

#include "mbed.h"
#include "EthernetInterface.h"

#define USE_DHCP    0

#define PORT    5000

const char * IP_Addr    = "192.168.11.194";
const char * IP_Subnet  = "255.255.255.0";
const char * IP_Gateway = "192.168.11.1";
const char * Target_IP  = "192.168.11.227";
unsigned char MAC_Addr[6] = {0x00,0x08,0xDC,0x12,0x34,0x56};


Serial pc(USBTX, USBRX);

DigitalOut ledR0(LED_RED);
DigitalOut ledG0(LED_GREEN);
//DigitalOut ledB0(LED_BLUE);

DigitalOut led0(D5);
DigitalOut led1(D6);

DigitalIn PIR(D8);
AnalogIn CDS(A0);

#define PLED_ON      led0 = led1 = 1
#define PLED_OFF     led0 = led1 = 0

int CDS_data;
int PIR_sensor;

int CDS_check()
{
    CDS_data = CDS.read()*1000;
    return CDS_data;
}

int PIR_check()
{
    PIR_sensor = PIR;
    return PIR_sensor;
}

int main() {
    ledR0 = ledG0 = 1;
    PLED_OFF;

    unsigned char flag = 1;
    int csd_int = 2;
    int pir_int0 = 2;
    int pir_int1 = 2;
    int pir_status = 0;
    
    pc.baud(115200);
    wait(0.5f);
    pc.printf("Hello WIZwiki-W7500!\n\r");
    pc.printf("===========================================\n\r");
    
    EthernetInterface eth;
    #if USE_DHCP
    int ret = eth.init(MAC_Addr);
    #else
    int ret = eth.init(MAC_Addr,IP_Addr,IP_Subnet,IP_Gateway);
    #endif
    TCPSocketConnection client;
    
    //eth.link(3000);
    wait(5);
    pc.printf("Connecting......wait 5sec \r\n");
    if (!ret) {
        pc.printf("Initialized, \r\nMAC: %s\r\n", eth.getMACAddress());
        ret = eth.connect();
        if (!ret) {
            pc.printf("IP: %s \r\nMASK: %s \r\nGW: %s\r\n",
                      eth.getIPAddress(), eth.getNetworkMask(), eth.getGateway());
        } else {
            pc.printf("Error ethernet.connect() - ret = %d\r\n", ret);
            exit(0);
        }
    } else {
        pc.printf("Error ethernet.init() - ret = %d\r\n", ret);
        exit(0);
    }
    
    client.connect(Target_IP,5000);
    
    if(client.is_connected() == 1){
        pc.printf("Connected success : %s\r\n", client.get_address());
        client.send("Hello server!\r\n", 15);
        PLED_ON;
        wait(0.2f);
        PLED_OFF;
        wait(0.2f);
        PLED_ON;
        wait(0.2f);
        PLED_OFF;
    }
    else {
        pc.printf("Connected fail : %s\r\n", client.get_address());
        PLED_ON;
        wait(0.4f);
        PLED_OFF;
    }

    while (1) {
        Timer t;
        if(CDS_check() > 600){
            if(csd_int != 0){
                pc.printf("Now is dark.\r\n");
                client.send("Now is dark.\r\n", 14);
                csd_int = 0;
            }
            ledG0 = 0;
            flag = 1;
            while(flag){
                if(PIR_check()){
                    if(pir_int0 != 0){
                        pc.printf("The movement is detected.\r\n");
                        pc.printf("Power LED is turned on.\r\n");
                        client.send("The movement is detected.\r\n", 27);
                        client.send("Power LED is turned on.\r\n", 25);
                        pir_int0 = 0;
                    }
                    t.stop();
                    t.reset();
                    t.start();
                    pir_status = 1;
                    ledR0 = 0;
                    PLED_ON;
                }
                if(pir_status == 0) {
                    flag = 0;
                }
                if(t.read_ms() > 5000 && pir_status == 1){
                    if(pir_int0 != 1){
                        pc.printf("The movement is not detected.\r\n");
                        pc.printf("Power LED is turned off.\r\n");
                        client.send("The movement is not detected.\r\n", 31);
                        client.send("Power LED is turned off.\r\n", 26);
                        pir_int0 = 1;
                    }
                    t.stop();
                    t.reset();
                    pir_status = 0;
                    ledR0 = 1;
                    PLED_OFF;
                    flag = 0;
                    wait(0.1f);
                }
            }
        }
        else{
            if(csd_int != 1){
                pc.printf("Now is brighter.\r\n");
                client.send("Now is brighter.\r\n", 18);
                csd_int = 1;
            }
            
            ledG0 = 1;
            if(PIR_check()){
                if(pir_int1 != 0){
                    pc.printf("The movement is detected.\r\n");
                    client.send("The movement is detected.\r\n", 27);
                    pir_int1 = 0;
                }
                ledR0 = 0;
            }
            else{
                if(pir_int1 != 1){
                    pc.printf("The movement is not detected.\r\n");
                    client.send("The movement is not detected.\r\n", 31);
                    pir_int1 = 1;
                }
                ledR0 = 1;
            }
        }
    }
}

<mbed code URL>

https://developer.mbed.org/users/nanjsk/code/Smart_LED_WIZwiki-W7500/


<동영상>

PC가 Sever가 되어서 WIZwiki-W7500이 서버에 접속 해서 메세지를 전송하는 것을 볼수있다.




+ Recent posts