博客59篇,耿耿于怀!59分比60分好?
esp8266不能使用C#掌控,耿耿于怀!保持求知欲?
耿耿于怀,不怕被贼偷,就怕被贼惦记,我就是惦记计算机那个‘贼’。
在前面基础上,大太阳好几天,今天早上成了阴天,光在哪里?手机在哪里?先打开这个esp8266WiFi台灯,找什么找?骑驴找驴吗?计算机都搞定了,还要手机干嘛?手机还得手指戳好几下,c#的运行程序鼠标点一下就ok,好,搞定,灯亮了,让我们把c#的完整代码贡献上来,那个异步的网络tcpip套接字vc++通讯代码实在太难搞了,一大堆,这个c#好,入门简单,代码不多:
第一,创建一个c#form,然后添加引用
using System.Net.Sockets;
using System.Net;
第二, 添加变量
Socket clientsocket;
EndPoint Endpoint;//ip地址和端口号,192.168.4.1,8080(区分esp8266的是WiFi名称的不同,ip地址和端口号可以固定死)
第三,在formload(...)函数中添加代码,初始化
//202001292046更改为esp8266wifi开关灯
byte[] ad = new byte[4];
ad[0] = 192; ad[1] = 168; ad[2] = 4; ad[3] = 1;
IPAddress ip = new IPAddress(ad);
IPEndPoint endpoint = new IPEndPoint(ip,8080);
Endpoint = endpoint;
第四,在form上添加‘开灯’按钮button,代码如下:
private void openlight_Click(object sender, EventArgs e)
{
clientsocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
clientsocket.Connect(Endpoint);
if (clientsocket.Connected)
{
byte[] openrelay = new byte[4];//close light
openrelay[0] = 0x0a0;
openrelay[1] = 0x01;
openrelay[2] = 0x01;
openrelay[3] = 0x0a2;
clientsocket.SendTo(openrelay, Endpoint);
}
clientsocket.Close();
}
第五,在form上添加‘关灯’按钮button,代码如下:
private void closelight_Click(object sender, EventArgs e)
{
clientsocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
clientsocket.Connect(Endpoint);
if (clientsocket.Connected)
{
byte[] openrelay = new byte[4];//close light
openrelay[0] = 0x0a0;
openrelay[1] = 0x01;
openrelay[2] = 0x00;
openrelay[3] = 0x0a1;
clientsocket.SendTo(openrelay, Endpoint);
}
clientsocket.Close();
}
好了,搞定,需要解释的是开关灯中相同的代码:
clientsocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
clientsocket.Connect(Endpoint);
if (clientsocket.Connected){...}
clientsocket.Close();
原因是,你不知道esp8266WiFi什么时候自动踢掉你(原因是人家是服务器,你是客户端,人家不待见你时,就会踢掉你,可恶!这人情世故,好像也蛮有道理的,换做你自己,你也不可能无限连接吧!),这些相同的代码就是为了解决这个问题。另外程序运行时,记得先连接无线esp8266WiFi,(否则,自己怎么死的都不知道!)如图: