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

本文主要是介绍物联网入门实践项目:通过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");      //启动连接wifiwifiMulti.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引脚为OUTPUTdigitalWrite(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的IPif(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中文社区

这篇关于物联网入门实践项目:通过ESP8266-nodeMCU点亮小灯的三种方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/336703

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

内核启动时减少log的方式

内核引导选项 内核引导选项大体上可以分为两类:一类与设备无关、另一类与设备有关。与设备有关的引导选项多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导选项。比如,如果你想知道可以向 AHA1542 SCSI 驱动程序传递哪些引导选项,那么就查看 drivers/scsi/aha1542.c 文件,一般在前面 100 行注释里就可以找到所接受的引导选项说明。大多数选项是通过"_

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题:

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识