极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 23287|回复: 9

远程控制LED灯

[复制链接]
发表于 2012-7-12 20:54:10 | 显示全部楼层 |阅读模式
功能:
通过运行电脑上的代码,控制两个远程LED灯的开关。

硬件需求:
1、Arduino 控制板
2、ENC28J60 模块
3、220欧电阻2个
4、LED灯*2
5、连接线若干

电路:
1、ENC28J60模块与Arduino控制板接线

2、两个LED灯分别接在控件板7、8接口,各串联一个220欧电阻后接地。


Arduino服务端代码:
#include <SPI.h>
#include <Ethernet.h>

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network.
// gateway and subnet are optional:
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[]={192,168,2, 177};

// telnet defaults to port 23
Server server(23);


void setup() {
  // initialize the ethernet device
  Ethernet.begin(mac, ip);
  // start listening for clients
  server.begin();
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);   
  Serial.begin(9600);

  Serial.print("Chat server address:");
  Serial.println("192.168.2.177");
}

void loop() {
  // wait for a new client:
  Client client = server.available();

  if (client)
  {
      if (client.available() > 0)
      {
        // read the bytes incoming from the client:
        char thisChar = client.read();
        if(thisChar=='b')
        {
            digitalWrite(7, HIGH);
            digitalWrite(8, LOW);
        }
        else if(thisChar=='c')
        {
            digitalWrite(7, LOW);
            digitalWrite(8, HIGH);
        }
        else
        {
            digitalWrite(7, LOW);
            digitalWrite(8, LOW);
        }
  
        Serial.println(thisChar);
        client.flush();   //每次接收完数据后必须清除,不然会出错。
      }
      client.stop();
  }
}


电脑控制端代码:
#include <winsock2.h>
#pragma comment(lib,"WS2_32")
#include <stdio.h>

//封装一个类,用于载入和释放Winsock库
class CInitSock
{
public:
        CInitSock(BYTE minorVer=2,BYTE majorVer=2)
        {
                WSADATA wsaData;
                WORD sockVersion=MAKEWORD(minorVer,majorVer);
                if(::WSAStartup(sockVersion,&wsaData)!=0)
                {
                        exit(0);
                }
        }
        ~CInitSock()
        {
                ::WSACleanup();
        }
};
CInitSock initSock;
int main()
{

        char buff;
        int chose;
       printf("==================\n");
        printf("||远程LED控制程序||\n");
        printf("==================\n");
        printf("输入1,一号灯亮。\n");
        printf("输入2,二号灯亮。\n");
        printf("输入3,两灯全灭。\n");
        printf("输入其它,程序退出。\n");
        printf("请输入一个字符:\n");
        while(true)
        {
                SOCKET s=::socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

                if(s==INVALID_SOCKET)
                {
                        printf("Failed socket()\n");
                        return 0;
                }

                sockaddr_in servAddr;
                servAddr.sin_family=AF_INET;
                servAddr.sin_port=htons(23);
                servAddr.sin_addr.S_un.S_addr=inet_addr("192.168.2.177");

                if(::connect(s,(LPSOCKADDR)&servAddr,sizeof(servAddr))==-1)
                {
                        printf("Failed connect()\n");
                        return 0;
                }

               
                chose=getchar();getchar();//接收选择字符和回车
               
                if(chose=='1')
                        buff='b';
                else if(chose=='2')
                        buff='c';
                else if(chose=='3')
                        buff='a';
                else
                        break;
                int n_Send=::send(s,&buff,1,0);
                ::closesocket(s);
        }
        return 0;
       
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

参与人数 1 +2 收起 理由
幻生幻灭 + 2 鼓励新人贴,期待更新

查看全部评分

回复

使用道具 举报

发表于 2012-7-13 09:07:26 | 显示全部楼层
可以算是远程控制的智能家居的一部分了!小部分!!!呵呵!加油!
回复 支持 反对

使用道具 举报

发表于 2012-7-13 12:22:34 | 显示全部楼层
网页方式好,仅一方ARDUINO编程即可实现
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-7-13 19:57:05 | 显示全部楼层
Randy 发表于 2012-7-13 09:07
可以算是远程控制的智能家居的一部分了!小部分!!!呵呵!加油!

是啊,刚开始接触这个,还要加强学习才行。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-7-13 19:57:35 | 显示全部楼层
yyy_zc 发表于 2012-7-13 12:22
网页方式好,仅一方ARDUINO编程即可实现

嗯,网页方式的控制也准备学习一下。
回复 支持 反对

使用道具 举报

发表于 2012-7-13 22:09:29 | 显示全部楼层
yangqiang29 发表于 2012-7-13 19:57
是啊,刚开始接触这个,还要加强学习才行。

有志者事竟成!
回复 支持 反对

使用道具 举报

发表于 2012-7-15 21:06:09 | 显示全部楼层
本帖最后由 麽麽茶㊣ 于 2012-7-15 21:08 编辑

刚写完TCP IP这一块~ 哈哈~
我看完后,又看了看自己这边Server端,是不是可以这样改?
SOCKET监听这一边得到 arduino的个数。然后指向性发出char或int信号~[pre lang="cpp" line="1"]       
       int SendMessageAll(const char* buf, int iLen);

        int SendMessageSingle(const char* buf, int iLen, string iID);

        int GetMessage(int iMaxLen);

        int GetClientNum();[/code]arduino这一块  有Serial.read 得到Server这一端的信号~ 还有Serial.write发送一个字符串,让Server端知道是哪个ID~

这样既可以控制,还可以选择控制。
主要是Server不用规定发送什么,只要发送char,arduino来判断char的信息是否有if语句满足就好了~

评分

参与人数 1 +1 收起 理由
幻生幻灭 + 1 虽然还不懂,但是小支持一下

查看全部评分

回复 支持 反对

使用道具 举报

发表于 2012-7-15 21:50:31 | 显示全部楼层
有空的时候,试试Yeelink的web页面控制方式吧
http://blog.yeelink.net/?p=94
回复 支持 反对

使用道具 举报

发表于 2012-7-25 14:27:05 | 显示全部楼层
这是W5100的网板代码,不是28J60的
回复 支持 反对

使用道具 举报

发表于 2015-3-15 22:52:13 | 显示全部楼层
在VS编译完成后不能从键盘中输入是什么原因?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 20:24 , Processed in 0.041673 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表