ESP8266 是一种低成本、高性能的 Wi-Fi 模块,内置了 TCP/IP 协议栈,它可以作为单独的无线网络控制器,或者与其他微控制器进行串口通信。它具有以下特点:
1、采用CH340芯片,是一款高性价比开发板;
2、设计,使USB接口更加牢固;
3、文档资料齐全,任何人可免费获取,仅供传阅;
4、每一块出货板子都是经过严格测试(测试一块板子需2-5分钟),严格把控质量。
支持无线802.11 b/g/n标准;
支持STA/AP/STA+AP三种工作模式;
内置TCP/IP协议栈,支持多路TCPClient连接(5MAX);
传输速率:110-460800bps:支持UART/GPIO数据通信接口;支持远程固件升级(OTA);工作温度:-40℃~+125℃;驱动形式:双路大功率H桥驱动
在本次实验中实现ESP8266手机点灯,即通过手机 APP 控制 ESP8266 来实现点亮LED和熄灭LED。
ESP8266模块 | 1个 |
---|---|
LED | 1个 |
Microusb数据线(用于板子下载程序和供电) | 1条 |
杜邦线 | 若干 |
网络调试助手APP | 1个 |
首先确定led要连接在esp8266的哪个引脚,查看esp8266引脚定义:
本次实验点亮LED使用esp8266模块的D2引脚,通过引脚定义可以知道它为GPIO4. 所以在arduino中定义led引脚为4, 其中led正极固定接vin给高电平,led负极通过D2引脚给高低电平变化,控制led的亮灭。硬件连接图如下:
#include
#define led 4 //led接在esp8266的GPIO4上
const char *ssid = "YXDZ_8266"; //要连接的wifi名称
const char *password = "12345678"; //连接的wifi密码
const char *host = "172.21.150.2"; //要连接的手机端IP,手机和8266要在同一网络下
WiFiClient client; //创建WiFiClient对象client,用于处理TCP连接
const int tcpPort = 8080; //创建服务器时指定的端口号
void setup()
{
Serial.begin(9600); //初始化串口通信,波特率为9600
pinMode(led,OUTPUT); //将LED引脚设置为输出模式
delay(10);
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid); //通过串口显示连接的wifi名称
WiFi.begin(ssid, password); //建立WiFi连接
//等待连接建立
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
}
//连接成功信息及打印8266ip地址
Serial.println("");
Serial.println("Connection established!");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void loop()
{
while (!client.connected()) //若未连接到主机,则客户端进行连接
{
if (!client.connect(host, tcpPort))//如果客户端未连接,使用client.connect()函数尝试连接主机并在500毫秒后再次尝试
{
Serial.println("connection....");
delay(500);
}
}
while (client.available()) //如果客户端连接成功,使用while (client.available())循环处理从主机接收到的数据
{
char val = client.read(); //将接收到的字符存储在变量val中
if(val=='1'){ //如果val等于'1',则通过将LED引脚设置为LOW来关闭LED
digitalWrite(led, LOW);
}
if(val=='0') //如果val等于'0',则通过将LED引脚设置为HIGH来打开LED
{
digitalWrite(led, HIGH);
}
}
}
上面的代码实现了以下功能:
WiFi连接:通过WiFi.begin(ssid, password)语句连接到指定的WiFi网络。在setup()函数中,代码会一直等待,直到成功连接到WiFi网络为止。连接成功后,通过WiFi.localIP()获取并打印ESP8266的IP地址。
与手机端通信:使用client.connect(host, tcpPort)建立与手机端的TCP连接。在loop()函数中,代码会检测是否已连接到手机端。如果未连接,则通过延迟等待一段时间,并重试连接。一旦成功连接,代码会继续执行。
接收和处理数据:通过client.available()检测是否有数据可用。如果有数据可用,通过client.read()读取数据。在这个例子中,代码会判断接收到的数据是否为1或0,并根据接收到的值点亮或熄灭连接到ESP8266的LED。
综上所述,上述代码实现了通过ESP8266连接到指定的WiFi网络,并与手机端建立TCP连接进行数据交互。通过接收来自手机端的指令,控制LED的亮灭。这个代码可以作为一个简单的远程控制示例,可用于控制远程设备的开关状态。
程序完成后我们将程序上传至esp8266模块:
程序下载后esp8266会连接wifi,通过串口可以查看wifi连接相关信息:
手机连接与esp8266连接的同一wifi,
手机上打开网络调试助手,新建服务器:
点击新建的服务器进入,会自动监听,显示已连接,表示手机端与esp8266已经连接成功,此时就可以通过手机与esp8266通信了,
选中最下面的纸飞机可以进行快捷发送,这样就能比较方便的控制led的亮灭了。
在使用以上代码实现功能时,请注意以下几点:
替换ssid和password变量的值为您要连接的WiFi网络的凭据。确保凭据正确,以便ESP8266能够成功连接到WiFi网络。
替换host变量的值为您要连接的主机的IP地址。确保IP地址正确,以便ESP8266能够成功建立TCP连接。
确保连接的主机在指定的端口上监听TCP连接。在代码中,端口号为8080,如果您的主机使用了不同的端口,请相应地修改tcpPort常量的值。
根据您的硬件连接,确保将LED正确连接到ESP8266模块的指定引脚。在代码中,LED连接到引脚4,如果您将LED连接到其他引脚,请相应地修改led常量的值。
如果您的主机发送的数据是按照不同的格式或协议进行的,请根据您的需求修改loop()函数中处理接收数据的代码。目前的代码只是简单地根据接收到的字符来控制LED的状态。
如果手机上没有对应的网络调试助手,也可以通过电脑PC端的网络调试助手进行连接,这里推荐一个方便好用的软件NetAssist,支持快捷指令发送,和手机上的实验效果一样。
在使用代码之前,确保您已经安装了适用于ESP8266开发板的Arduino开发环境,并正确配置了开发环境。这包括选择正确的开发板和端口,并安装了ESP8266库。
本文主要介绍了ESP8266连接WiFi并与手机端通信的功能。使用ESP8266WiFi库来连接WiFi网络,并使用WiFiClient库与手机端进行通信。代码中定义了一个LED连接到ESP8266的GPIO4上,然后在setup()函数中初始化串口、LED引脚和WiFi连接。在loop()函数中,首先检测是否已连接到服务端,并在连接成功后开始接收来自手机端的数据。如果收到的数据是1,则点亮LED,如果是0,则熄灭LED。
通过本文,我们学习了如何使用ESP8266模块连接到WiFi网络,并通过与主机建立TCP连接来控制LED。这是一个简单的示例,说明了ESP8266在物联网应用中的潜力。您可以根据自己的需求和创意,进一步扩展该示例,实现更复杂的功能。希望这篇文章对您有所帮助,以上如有错误,欢迎各位留言指正!谢谢阅读!