物联网入门实践项目:通过ESP8266-nodeMCU点亮小灯的三种方式

一、基础版点亮小灯

(1)介绍: 通过Arduino点亮ESP8266开发板中自带的小灯,实现控制小灯的亮灭。

(2)硬件搭建: ESP8266通过连接数据线插入电脑的USB接口中,如图所示:

在这里插入图片描述

(3)软件程序:

#include<ESP8266WiFi.h>
#include<ESP8266WiFiMulti.h>
#include<ESP8266WebServer.h>

ESP8266WiFiMulti wifiMulti;       //建立ESP8266WiFiMulti的对象,对象名为wifiMulti
ESP8266WebServer esp8266_server(80);  //建立ESP8266WebServer的对象,对象名为esp8266_server;这里表明设置ESP8266为服务器

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);   //启动串口监视

  pinMode(LED_BUILTIN,OUTPUT);    //使能LED管脚

  
  wifiMulti.addAP("ssid1","password");      //启动连接wifi
  wifiMulti.addAP("ssid2","password"); 
  Serial.println("Connecting ..."); 

  int i =0;
  while(wifiMulti.run() != WL_CONNECTED){     //判断wifi是否连接成功

    delay(1000);
    Serial.print(i++);
    Serial.print(' ');
  }

  //wifi连接成功后的串口信息
  Serial.println('\n');
  Serial.print("Connected to");
  Serial.println(WiFi.SSID());        //WiFi.SSID()函数表示连接WiFi的名字
  Serial.print("IP Adress is:");
  Serial.println(WiFi.localIP());     //WiFi.localIP()函数表示连接WiFi的IP地址

  //开始启动网络服务程序
  esp8266_server.begin();
  esp8266_server.on("/",HTTP_GET,handleRoot);     //起始页面
  esp8266_server.on("/LED",HTTP_POST,handleLED);  //跳转到这个页面控制电灯
  esp8266_server.onNotFound(handleNotFound);      //跳转失败页面


  Serial.println("HTTP esp8266_server started");//  告知用户ESP8266网络服务功能已经启动
}

void loop() {
  // put your main code here, to run repeatedly:
  esp8266_server.handleClient();      // 处理http服务器访问,它的主要作用之一是检查有没有设备通过网络向NodeMCU发送请求 
}

//server响应中调用的各个函数
void handleRoot(){      //让页面显示Toggle Led按键,点击按钮将会跳转/LED页面。这里简单的写了个页面,通过send函数发送请求的页面
  
  esp8266_server.send(200,"text/html","<form action=\"/LED\" method=\"POST\"><input type=\"submit\" value=\"Toggle LED\"></form>");
  
}

void handleLED(){

  digitalWrite(LED_BUILTIN,!digitalRead(LED_BUILTIN));    //当小灯为低电平时使其变高,当小灯为高电平时使其变低,从而控制小灯的亮灭
  esp8266_server.sendHeader("Location","/");              //跳转回页面的根目录
  esp8266_server.send(303);                               // 发送Http相应代码303 跳转 
  
}

void handleNotFound(){

  esp8266_server.send(404,"text/plain","Connected unsuccessed,please try again.");
}

(4)效果展示图:
前端页面的开关按键,点击按键将会控制小灯的亮灭
在这里插入图片描述
小灯被点亮图:

在这里插入图片描述


二、进阶版的点亮小灯——改造你身边的台灯

(1)介绍: 理论运用于实际。通过基础班的点亮小灯,了解了其基本原理后,我们将理论运用于实际,点亮你身边的台灯。这一次我们通过闪存文件系统,将前端代码上传到ESP8266中的闪存中直接使用。

(2)硬件搭建: 所需要的硬件材料有:①ESP8266-nodeMCU、②5V低电平触发继电器和一个有线台灯。如图所示:

在这里插入图片描述

其中,引脚接入:
①ESP8266与继电器的引脚接法(左边是ESP8266的引脚,右边是继电器的引脚):

GND->GND;
3v3->Vcc;
D4(注:LED_BUILTIN为D4引脚)->IN;

在这里插入图片描述

②继电器与台灯接法:
将台灯的线剪段,台灯里面的线有3条线(有些只有2条线),其中有一条线是白线,这是开关的控制线,可以不用管他,只接黑线和红线就好了。两头的黑线分别接到继电器的COM和NO口上,红线部分中的铜丝则相互缠在一起,具体接法如图所示:

在这里插入图片描述

(3)软件程序:
这里准备使用闪存系统,将前端代码部分上传到nodeMCU中。
注意data文件夹(存放html代码的文件)要与Arduino项目放在同一文件夹中。
在这里插入图片描述
然后打开Arduino程序,打开工具按钮选择ESP8266 Sketch Updater将data资源上传到开发板的闪存系统中。

在这里插入图片描述
注意:这个选项是需要安装下载好 Arduino-ESP8266闪存文件插件程序后才有的,如果不知道怎么下载安装,可以参考太极创客官网的安装教程(这是一个教学物联网的团队,强烈推荐小白学习)——太极创客闪存插件安装教程

前端页面代码:

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
	<title>LED_handle2</title>
</head>

<body>
<center>
<div id="demo">
<h1>以下按钮可控制ESP8266开发板引脚</h1>
 <br>
  <button type="button" onclick="sendData(1)">点亮 LED</button>
  <button type="button" onclick="sendData(0)">关闭 LED</button><br>
</div>

<div>
    LED引脚状态 : <span id="LEDState">NA</span><br>
</div>
<br><br>

<script>
function sendData(led) {
  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      document.getElementById("LEDState").innerHTML =
      this.responseText;
    }
  };
  xhttp.open("GET", "setLED?LEDstate="+led, true);
  xhttp.send();
}
 
</script>
</center>
</body>
</html>

Arduino代码:

#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266WebServer.h>
#include <FS.h>

ESP8266WiFiMulti wifiMulti;     // 建立ESP8266WiFiMulti对象,对象名称是 'wifiMulti'

ESP8266WebServer esp8266_server(80);    // 建立网络服务器对象,该对象用于响应HTTP请求。监听端口(80)

void setup() {
  Serial.begin(9600);          // 启动串口通讯
  Serial.println("");

  pinMode(LED_BUILTIN, OUTPUT);   // 初始化NodeMCU控制板载LED引脚为OUTPUT
  digitalWrite(LED_BUILTIN, HIGH);// 初始化LED引脚状态
  
  wifiMulti.addAP("HONOR V30 PRO", "12345678"); // 将需要连接的一系列WiFi ID和密码输入这里
  wifiMulti.addAP("ssid_from_AP_2", "your_password_for_AP_2"); // ESP8266-NodeMCU再启动后会扫描当前网络
  wifiMulti.addAP("ssid_from_AP_3", "your_password_for_AP_3"); // 环境查找是否有这里列出的WiFi ID。如果有
  Serial.println("Connecting ...");                            // 则尝试使用此处存储的密码进行连接。

  //等待连接WiFi过程中
  int i = 0;  
  while (wifiMulti.run() != WL_CONNECTED) { // 尝试进行wifi连接。
    delay(1000);
    Serial.print(i++); Serial.print(' ');
  }
  
  // WiFi连接成功后将通过串口监视器输出连接成功信息 
  Serial.println('\n');
  Serial.print("Connected to ");
  Serial.println(WiFi.SSID());              // 通过串口监视器输出连接的WiFi名称
  Serial.print("IP address:\t");
  Serial.println(WiFi.localIP());           // 通过串口监视器输出ESP8266-NodeMCU的IP

  if(SPIFFS.begin()){                       // 启动闪存文件系统
    Serial.println("SPIFFS Started.");
  } else {
    Serial.println("SPIFFS Failed to Start.");
  }     
 
  esp8266_server.on("/setLED", handleLED); 
  esp8266_server.onNotFound(handleUserRequest); // 处理其它网络请求

  // 启动网站服务
  esp8266_server.begin();
  Serial.println("HTTP server started");
}

void loop(void) {
  esp8266_server.handleClient();
}


void handleLED() {
 String ledState = "OFF";
 String LED_State = esp8266_server.arg("LEDstate"); //参考xhttp.open("GET", "setLED?LEDstate="+led, true);
 Serial.println(LED_State);
 
 if(LED_State == "1"){
  digitalWrite(LED_BUILTIN,LOW); //LED 点亮
  ledState = "ON"; //反馈参数
 } else {
  digitalWrite(LED_BUILTIN,HIGH); //LED 熄灭
  ledState = "OFF"; //反馈参数
 }
 
 esp8266_server.send(200, "text/plain", ledState); //发送网页
}

// 处理用户浏览器的HTTP访问
void handleUserRequest() {         
     
  // 获取用户请求资源(Request Resource)
  String reqResource = esp8266_server.uri();
  Serial.print("reqResource: ");
  Serial.println(reqResource);
  
  // 通过handleFileRead函数处处理用户请求资源
  bool fileReadOK = handleFileRead(reqResource);

  // 如果在SPIFFS无法找到用户访问的资源,则回复404 (Not Found)
  if (!fileReadOK){                                                 
    esp8266_server.send(404, "text/plain", "404 Not Found"); 
  }
}

bool handleFileRead(String resource) {            //处理浏览器HTTP访问

  if (resource.endsWith("/")) {                   // 如果访问地址以"/"为结尾
    resource = "/index.html";                     // 则将访问地址修改为/index.html便于SPIFFS访问
  } 
  
  String contentType = getContentType(resource);  // 获取文件类型
  
  if (SPIFFS.exists(resource)) {                     // 如果访问的文件可以在SPIFFS中找到
    File file = SPIFFS.open(resource, "r");          // 则尝试打开该文件
    esp8266_server.streamFile(file, contentType);// 并且将该文件返回给浏览器
    file.close();                                // 并且关闭文件
    return true;                                 // 返回true
  }
  return false;                                  // 如果文件未找到,则返回false
}

// 获取文件类型
String getContentType(String filename){
  if(filename.endsWith(".htm")) return "text/html";
  else if(filename.endsWith(".html")) return "text/html";
  else if(filename.endsWith(".css")) return "text/css";
  else if(filename.endsWith(".js")) return "application/javascript";
  else if(filename.endsWith(".png")) return "image/png";
  else if(filename.endsWith(".gif")) return "image/gif";
  else if(filename.endsWith(".jpg")) return "image/jpeg";
  else if(filename.endsWith(".ico")) return "image/x-icon";
  else if(filename.endsWith(".xml")) return "text/xml";
  else if(filename.endsWith(".pdf")) return "application/x-pdf";
  else if(filename.endsWith(".zip")) return "application/x-zip";
  else if(filename.endsWith(".gz")) return "application/x-gzip";
  return "text/plain";
}

(4)效果展示:

前端页面图:

在这里插入图片描述

小灯效果图:
在这里插入图片描述


三、更进阶版的点亮小灯——通过语音控制来控制台灯的亮灭

(1)介绍: 通过点灯·blinker手机APP,实现对台灯的语音控制。

(2)硬件搭建: 和二中的进阶板点亮小灯一样,需要ESP8266-nodemcu、5v低电平触发继电器和台灯。一下就不具体详细介绍了。

(3)软件程序: 手机下载点灯·blinker,通过这个APP可以实现手机控制和语音控制台灯的亮灭。如果你的手机有小爱同学、天猫精灵和小米的语音助手的话,更能直接通过这些语音助手直接唤醒台灯的亮灭。没有这些语音助手的话,则需要通过打开点灯APP中的语音功能来控制。具体的操作步骤我就不在这里书写了,可以直接参考其官网的操作文档,跟着官网的步骤一步一步来就可以操作了——点灯·blinker官网

在这里插入图片描述
在这里插入图片描述

(4)效果展示: 通过语音控制台灯的亮灭

在这里插入图片描述

四、资源代码:

上述三个小项目的资源代码我将上传到GitHub和gitee上,有需要程序的伙伴们可以去那里下载。
github仓库
gitee仓库


五、参考学习资料:

(1)太极创客官网
(2)点灯·blinker官网
(3)Arduino中文社区

  • 4
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: ESP8266是一款强大的Wi-Fi芯片,可以实现与互联网的连接,而NodeMCU则是基于ESP8266开发板的一种程序开发环境,能够方便地实现对ESP8266的开发与管理。因此,ESP8266 NodeMCU的原理图即为基于ESP8266NodeMCU开发板的电路原理图。 从电路原理图上可以看出,ESP8266 NodeMCU主要由ESP8266芯片、USB转串口芯片以及其他外围电路组成。ESP8266芯片作为处理器来控制整个电路的运作,并且实现与Wi-Fi网络通讯;USB转串口芯片则是将电脑上的串口信号转换成用于与ESP8266芯片进行通讯的USB接口。此外,还包括了电源管理电路、LED指示等。 需要注意的是,ESP8266芯片在高端模式下会消耗大量的电流,因此,NodeMCU的外围电路需要合理设计使其能够保证电路稳定运行。同时,在编写代码过程中,需要遵循各种芯片的电气特性,并根据不同运行状态设置对应的电流和电压值。 总的来说,ESP8266 NodeMCU的原理图是一个复杂的电路系统,需要对各个芯片的特性有深入的了解并具备一定的电路设计能力。通过合理的设计和编写代码,可以利用这款芯片实现各种应用,从而满足不同领域的需求。 ### 回答2: ESP8266 NodeMCU是一款基于ESP8266 Wi-Fi模块的开源电子平台,它的原理图可以分为以下几个模块。 1. 电源模块:ESP8266 NodeMCU支持5V电源输入,通过稳压电路将电压转换为3.3V供给ESP8266芯片和其他模块。 2. USB转串口模块:ESP8266 NodeMCU可以通过Micro-USB口与计算机连接,实现与计算机的数据通信。这里采用了CH340E芯片作为USB转串口模块。 3. ESP8266 Wi-Fi模块:ESP8266芯片是本平台的核心,它支持802.11 b/g/n Wi-Fi协议,集成了TCP/IP协议栈,可以进行远程控制。 4. LED指示ESP8266 NodeMCU板上集成了一个LED指示,用于指示电源状态、Wi-Fi连接状态、数据传输状态等。 5. GPIO扩展模块:ESP8266 NodeMCU支持多个GPIO引脚,可以通过它们连接各种传感器、执行器等外部设备,实现更多的功能。 6. 其他部件:ESP8266 NodeMCU还包括晶振、电容、电阻等元件,它们共同构成了一个高性能、低功耗的电子平台。 总之,ESP8266 NodeMCU原理图揭示了该平台的组成结构及内部连接关系,为开发者提供了重要的参考资料,可以帮助开发者更好地理解ESP8266 NodeMCU平台,以及实现更多创新性的应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值