远程控制LED灯
功能:通过运行电脑上的代码,控制两个远程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;
}
可以算是远程控制的智能家居的一部分了!小部分!!!呵呵!加油! 网页方式好,仅一方ARDUINO编程即可实现 Randy 发表于 2012-7-13 09:07 static/image/common/back.gif
可以算是远程控制的智能家居的一部分了!小部分!!!呵呵!加油!
是啊,刚开始接触这个,还要加强学习才行。 yyy_zc 发表于 2012-7-13 12:22 static/image/common/back.gif
网页方式好,仅一方ARDUINO编程即可实现
嗯,网页方式的控制也准备学习一下。 yangqiang29 发表于 2012-7-13 19:57 static/image/common/back.gif
是啊,刚开始接触这个,还要加强学习才行。
有志者事竟成! 本帖最后由 麽麽茶㊣ 于 2012-7-15 21:08 编辑
刚写完TCP IP这一块~ 哈哈~
我看完后,又看了看自己这边Server端,是不是可以这样改?
SOCKET监听这一边得到 arduino的个数。然后指向性发出char或int信号~
int SendMessageAll(const char* buf, int iLen);
int SendMessageSingle(const char* buf, int iLen, string iID);
int GetMessage(int iMaxLen);
int GetClientNum();arduino这一块有Serial.read 得到Server这一端的信号~ 还有Serial.write发送一个字符串,让Server端知道是哪个ID~
这样既可以控制,还可以选择控制。
主要是Server不用规定发送什么,只要发送char,arduino来判断char的信息是否有if语句满足就好了~ 有空的时候,试试Yeelink的web页面控制方式吧
http://blog.yeelink.net/?p=94 这是W5100的网板代码,不是28J60的 在VS编译完成后不能从键盘中输入是什么原因?
页:
[1]