具体实现功能:网页+APP 实现控制舵机等IO操作。

1、使用 AP 模式提供WiFi接入,终端设备通过 Web 网页实现舵机控制;

2、使用串口连接蓝牙模组,提供蓝牙接入,终端设备通过手机APP实现舵机控制;

3、按键实现舵机角度录入;

4、LED 实现状态显示和告警;

5、ADC 实现系统电压检测。

功能演示+讲解视频地址:【esp8266+arduino】WiFi+蓝牙实现无线开关功能演示(宿舍神器)_哔哩哔哩_bilibili

源码地址:基于esp8266的开关外设装置: 存放关于此装置的所有工程文件和教程资料,供大家一起学习


目录

1、文档

2、WiFi AP 测试

3、web Server 测试

4、web 控制 IO 测试

5、强制门户 测试

6、蓝牙数据传输 测试

7、ADC外部电路电压 测试

8、舵机控制 测试

9、按键 测试

10、EEPROM 测试

11、整合全部模块


本篇作为开发记录

1、文档

开发过程中需要用到的官方文档

ESP8266 Arduino Core :Welcome to ESP8266 Arduino Core’s documentation! — ESP8266 Arduino Core 2.4.0 documentation

NodeMCU Documentation:NodeMCU Documentation

ESP12E DevKit:产品简介 | ESP12E DevKit 产品说明书


2、WiFi AP 测试

AP(Access Point):访问接入点,一般家庭的无线路由器就是一个AP。简单来说 AP 模式就是让 ESP8266 创建一个 WIFI,让它成为一个 WiFi,我们用手机或者电脑等设备去连接它,而不是让 ESP8266 去连接其它 WiFi

功能:提供 WIFI 连接

参照:ESP8266-Soft AP模式 —— 谁想连上我 - 天子骄龙 - 博客园

功能函数(参数):

设置WIFI模式为 AP 模式

WiFi.mode(WIFI_AP)

配置AP网络信息

IPAddress local_IP(192, 168, 1, 1);   //实例化IP地址
IPAddress gateway(192, 168, 1, 1);  //实例化网关IP地址
IPAddress subnet(255, 255, 255, 0); //实例化子网掩码

WiFi.softAPConfig(local_IP, gateway, subnet)

设置账号和密码

#define AP_SSID "TEST"                  //这里改成你的 AP(WiFi)名字   
#define AP_PSW "12345678"           //这里改成你的 AP (WiFi)密码   8位及以上!!!

WiFi.softAP(AP_SSID, AP_PSW)

注意:WiFi 密码必须是 8位及以上(我犯傻写了4位,弄了半天配置不成功)

#include <ESP8266WiFi.h>#define AP_SSID "Test"              //这里改成你的AP名字--AP账号
#define AP_PSW "12345678"           //这里改成你的AP密码 8位以上IPAddress local_IP(192, 168, 1, 1); //实例化IP地址
IPAddress gateway(192, 168, 1, 1);  //实例化网关IP地址
IPAddress subnet(255, 255, 255, 0); //实例化子网掩码void setup() {Serial.begin(115200); //串口配置波特率delay(2000);Serial.print("配置AP网络信息。。。。。。");WiFi.mode(WIFI_AP);   //设置WIFI模式为AP模式delay(2000);Serial.println(WiFi.softAPConfig(local_IP, gateway, subnet) ? "网络配置成功" : "网络配置失败");  //配置AP网络信息---并且串口提示输出Serial.print("设置AP......");bool result = WiFi.softAP(AP_SSID, AP_PSW);  //设置账号和密码,通道为1,wifi不隐藏,最大连接数=4//返回值:是否成功if (result) {Serial.println("账号密码设置成功");Serial.println(String("Soft-AP IP 地址是: ") + String(WiFi.softAPIP().toString()));//WiFi.softAPIP()    获取AP的IP地址--就是IPAddress local_IP(192,168,1,1)Serial.println(String("MAC 地址是: ") + WiFi.softAPmacAddress().c_str());//WiFi.softAPmacAddress().c_str()   获取AP的mac地址并转化成指针Serial.println("设置完成");} else {Serial.println("账号密码设置失败");}
}void loop() {}

测试结果和 web server 测试一同在下面展示


3、web Server 测试

ESP8266 作为 web 服务器,提供 web 服务;连上 WiFi 后通过访问 IP 地址打开相应网页

功能:提供 Web 访问服务

功能函数(参数):

web 服务的请求路径(“/”)和相应处理函数(“handleRoot”)

server.on("/", handleRoot)

void handleRoot() {
    server.send(200, "text/html", "You are connected");
}

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>#define AP_SSID "Test"              //这里改成你的AP名字--AP账号
#define AP_PSW "12345678"           //这里改成你的AP密码 8位以上IPAddress local_IP(192, 168, 1, 1); //实例化IP地址
IPAddress gateway(192, 168, 1, 1);  //实例化网关IP地址
IPAddress subnet(255, 255, 255, 0); //实例化子网掩码ESP8266WebServer server(80);void handleRoot() {server.send(200, "text/html", "<h1>This is a test</h1>");
}void setup() {Serial.begin(115200);  //串口配置波特率delay(2000);Serial.print("配置AP网络信息。。。。。。");WiFi.mode(WIFI_AP);   //设置WIFI模式为AP模式delay(2000);Serial.println(WiFi.softAPConfig(local_IP, gateway, subnet) ? "网络配置成功" : "网络配置失败");  //配置AP网络信息---并且串口提示输出Serial.print("设置AP......");bool result = WiFi.softAP(AP_SSID, AP_PSW);  //设置账号和密码,通道为1,wifi不隐藏,最大连接数=4//返回值:是否成功if (result) {Serial.println("账号密码设置成功");Serial.println(String("Soft-AP IP 地址是: ") + String(WiFi.softAPIP().toString()));//WiFi.softAPIP()    获取AP的IP地址--就是IPAddress local_IP(192,168,1,1)Serial.println(String("MAC 地址是: ") + WiFi.softAPmacAddress().c_str());//WiFi.softAPmacAddress().c_str()   获取AP的mac地址并转化成指针Serial.println("设置完成");} else {Serial.println("账号密码设置失败");}server.on("/", handleRoot);server.begin();Serial.println("HTTP server started");
}void loop() {server.handleClient();
}

测试结果:


4、web 控制 IO 测试

功能:控制 LED 、按键、舵机等IO

参考:ESP8266+网页控制LED :ESP8266+网页控制LED_Ti多芬的博客-CSDN博客_esp8266网页控制led

引脚图:(网上都是这图,但不知道具体型号,所以坑慢慢踩吧)

功能函数(参数):

设置 D5 引脚为输出模式以便控制 LED

pinMode(D5, OUTPUT);

改变 LED 的点亮或者熄灭状态

digitalWrite(D5,!digitalRead(D5));


#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>#define AP_SSID "Test"              //这里改成你的AP名字--AP账号
#define AP_PSW "12345678"           //这里改成你的AP密码 8位以上IPAddress local_IP(192, 168, 1, 1); //实例化IP地址
IPAddress gateway(192, 168, 1, 1);  //实例化网关IP地址
IPAddress subnet(255, 255, 255, 0); //实例化子网掩码ESP8266WebServer server(80);void setup() {Serial.begin(115200);  //串口配置波特率delay(2000);pinMode(D5, OUTPUT); //设置D5引脚为输出模式以便控制LEDSerial.print("配置AP网络信息。。。。。。");WiFi.mode(WIFI_AP);   //设置WIFI模式为AP模式delay(2000);Serial.println(WiFi.softAPConfig(local_IP, gateway, subnet) ? "网络配置成功" : "网络配置失败");  //配置AP网络信息---并且串口提示输出Serial.print("设置AP......");bool result = WiFi.softAP(AP_SSID, AP_PSW);  //设置账号和密码,通道为1,wifi不隐藏,最大连接数=4//返回值:是否成功if (result) {Serial.println("账号密码设置成功");Serial.println(String("Soft-AP IP 地址是: ") + String(WiFi.softAPIP().toString()));//WiFi.softAPIP()    获取AP的IP地址--就是IPAddress local_IP(192,168,1,1)Serial.println("设置完成");} else {Serial.println("账号密码设置失败");}//server.on("/", handleRoot);//server.begin();server.begin();                           // 启动网站服务server.on("/", HTTP_GET, handleRoot);     // 设置服务器根目录即'/'的函数'handleRoot'server.on("/LED", HTTP_POST, handleLED);  // 设置处理LED控制请求的函数'handleLED'server.onNotFound(handleNotFound);        // 设置处理404情况的函数'handleNotFound'Serial.println("HTTP server started");
}void loop() {server.handleClient();
}/*设置服务器根目录即'/'的函数'handleRoot'该函数的作用是每当有客户端访问NodeMCU服务器根目录时,NodeMCU都会向访问设备发送 HTTP 状态 200 (Ok) 这是send函数的第一个参数。同时NodeMCU还会向浏览器发送HTML代码,以下示例中send函数中第三个参数,也就是双引号中的内容就是NodeMCU发送的HTML代码。该代码可在网页中产生LED控制按钮。 当用户按下按钮时,浏览器将会向NodeMCU的/LED页面发送HTTP请求,请求方式为POST。NodeMCU接收到此请求后将会执行handleLED函数内容*/
void handleRoot() {server.send(200, "text/html", "<form action=\"/LED\" method=\"POST\"><input type=\"submit\" value=\"LED\"></form>");Serial.println("访问根目录");
}//处理LED控制请求的函数'handleLED'
void handleLED() {                          digitalWrite(D5,!digitalRead(D5));// 改变LED的点亮或者熄灭状态server.sendHeader("Location","/");// 跳转回页面根目录server.send(303);                 // 发送Http相应代码303 跳转  Serial.println("/LED 请求");
}// 设置处理404情况的函数'handleNotFound'
void handleNotFound(){server.send(404, "text/plain", "404: Not found"); // 发送 HTTP 状态 404 (未找到页面) 并向浏览器发送文字 "404: Not found"
}

5、强制门户 测试

功能:强制门户概念:连接上wifi以后,手机会自动打开一个网页(连上 WiFi 后自动弹出操作 IO 的页面)

参考:ESP8266的Web配网以及强制门户的实现(连接wifi自动打开网页)_江麟的博客-CSDN博客_esp8266网页配网

实现原理:

当手机连接上一个 wifi 后,会访问一个手机内部的网址去查看是否可以上网,在访问此网址的时候会先发起DNS请求,向服务器问域名的IP地址。然后再发起HTTP请求,请求想要的内容。esp8266 相当于DNS服务器,会收到手机发来的DNS请求,这时将请求的 IP 地址指向 esp8266 的地址就可以实现强制门户功能。

DNSServer dnsServer;           //创建dnsServer实例
IPAddress apIP(192, 168, 4, 1);//esp8266-AP-IP地址
const byte DNS_PORT = 53;      //DNS端口号dnsServer.start(DNS_PORT, "*", apIP)//所有地址映射到esp8266的ip上server.on("/", HTTP_GET, handleRoot);  //设置主页回调函数
server.onNotFound(handleRoot);         //设置无法响应的http请求的回调函数WiFi.setAutoConnect(true);//设置自动连接

注意:

① server.on("/", HTTP_GET, handleRoot);必须在第二个参数上添加上HTTP_GET才能不影响强制门户,防止有些设备无法弹出强制门户,要用域名访问,如果不加第二个参数,就只能实现域名访问而无法强制门户。
② server.onNotFound(handleRoot); 在无法响应的http请求响应回调设置为主页的回调函数,才可以强制门户

③经测试,WiFi.setAutoConnect(true); 加上这一句才能使用强制门户(知道原因的请指点一下,谢谢)

TestGateDemo:

目前实现了:输入密码连上 WiFi 后,自动弹出操作 IO 的页面(开/关),点击开关按键,跳转页面(“操作成功”),D5 端口输出(LED灯亮);点击“操作成功”按键,回到(开/关)页面。

#include <ESP8266WiFi.h>
#include <DNSServer.h>
#include <ESP8266WebServer.h>const char* AP_SSID = "TestGate";        //这里改成你的AP名字--AP账号
const char* AP_PSW = "12345678";         //这里改成你的AP密码 8位以上//配网页面代码
const char* page_html = "\
<!DOCTYPE html>\r\n\
<html lang='en'>\r\n\
<head>\r\n\<meta charset='UTF-8'>\r\n\<meta name='viewport' content='width=device-width, initial-scale=1.0'>\r\n\<title>Switch</title>\r\n\<style>\r\n\body {\r\n\background-color: rgb(247, 250, 95);\r\n\}\r\n\.box {\r\n\width: 200px;\r\n\height: 110px;\r\n\background-color: rgb(92, 134, 250);\r\n\border: 4px solid gray;\r\n\position: absolute;\r\n\left: 50%;\r\n\top: 50%;\r\n\margin-top: -55px;\r\n\margin-left: -100px;\r\n\border-radius: 10px;\r\n\font-size: 70px;\r\n\font-weight: 500;\r\n\color: white;\r\n\outline: none;\r\n\}\r\n\</style>\r\n\
</head>\r\n\
<body>\r\n\<form name='input' action='/SWITCH' method='POST' >\r\n\<input type='submit' value='开/关' class='box'><br>\r\n\</form>\r\n\
</body>\r\n\
</html>\r\n\
";
const char* page_success_html = "\
<!DOCTYPE html>\r\n\
<html lang='en'>\r\n\
<head>\r\n\<meta charset='UTF-8'>\r\n\<meta name='viewport' content='width=device-width, initial-scale=1.0'>\r\n\<title>Switch</title>\r\n\<style>\r\n\body {\r\n\background-color: rgb(247, 250, 95);\r\n\}\r\n\.box {\r\n\width: 200px;\r\n\height: 110px;\r\n\background-color: rgb(92, 134, 250);\r\n\border: 4px solid gray;\r\n\position: absolute;\r\n\left: 50%;\r\n\top: 50%;\r\n\margin-top: -55px;\r\n\margin-left: -100px;\r\n\border-radius: 10px;\r\n\font-size: 40px;\r\n\font-weight: 400;\r\n\color: white;\r\n\outline: none;\r\n\}\r\n\</style>\r\n\
</head>\r\n\
<body>\r\n\<form name='input' action='/SUCCESS' method='POST' >\r\n\<input type='submit' value='操作成功' class='box'><br>\r\n\</form>\r\n\
</body>\r\n\
</html>\r\n\
";const byte DNS_PORT = 53;       //DNS端口号
IPAddress apIP(192, 168, 4, 1); //esp8266-AP-IP地址
DNSServer dnsServer;            //创建dnsServer实例
ESP8266WebServer server(80);    //创建WebServervoid handleRoot() {//访问主页回调函数server.send(200, "text/html", page_html);
}//Post回调函数:处理LED控制请求
void handleRootPost() {digitalWrite(D5,!digitalRead(D5));// 改变LED的点亮或者熄灭状态//server.sendHeader("Location",page_success_html);// 跳转回页面根目录server.send(200, "text/html", page_success_html);server.send(303);                 // 发送Http相应代码303 跳转  Serial.println("/SWITCH 请求");
}void handleRootSuccess() {//访问主页回调函数server.send(200, "text/html", page_html);Serial.println("/SUCCESS请求");
}//初始化基础
void initBasic(void){Serial.begin(115200);pinMode(D5, OUTPUT); //设置D5引脚为输出模式以便控制LED
}//初始化AP模式
void initSoftAP(void){WiFi.mode(WIFI_AP);WiFi.softAPConfig(apIP, apIP, IPAddress(255, 255, 255, 0));if(WiFi.softAP(AP_SSID,AP_PSW)){Serial.println("ESP8266 SoftAP is right");}
}//初始化WebServer
void initWebServer(void){/*必须在第二个参数上添加上HTTP_GET才能不影响强制门户,防止有些设备无法弹出强制门户,要用域名访问,如果不加第二个参数,就只能实现域名访问而无法强制门户在无法响应的http请求响应回调设置为主页的回调函数,才可以强制门户*/server.on("/", HTTP_GET, handleRoot);//设置主页回调函数server.onNotFound(handleRoot);//设置无法响应的http请求的回调函数server.on("/SWITCH", HTTP_POST, handleRootPost);//设置Post请求回调函数server.on("/SUCCESS", HTTP_POST, handleRootSuccess);//设置Post请求回调函数server.begin();//启动WebServerSerial.println("WebServer started!");
}void initDNS(void){//初始化DNS服务器if(dnsServer.start(DNS_PORT, "*", apIP)){//判断将所有地址映射到esp8266的ip上是否成功Serial.println("start dnsserver success.");}else Serial.println("start dnsserver failed.");
}void connectNewWifi(void){WiFi.setAutoConnect(true);//设置自动连接(经过测试,强制门户必须要加上这一句)//WiFi.begin();             //(经过测试,强制门户必须要加上这一句,我并没有找到原因)int count = 0;while (WiFi.status() != WL_CONNECTED) {delay(500);count++;if(count > 10){//如果5秒内没有连上,就开启Web配网 可适当调整这个时间initSoftAP();initWebServer();initDNS();break;//跳出 防止无限初始化}Serial.print(".");}
}void setup() {initBasic();connectNewWifi();
}void loop() {server.handleClient();dnsServer.processNextRequest();
}

6、蓝牙数据传输 测试

蓝牙模块设置:

参考:【常用模块】HC-05蓝牙串口通信模块使用详解(实例:手机蓝牙控制STM32单片机)_Yngz_Miao的博客-CSDN博客_hc05

遇到 AT+NAME? 无响应的问题,参考:HC-05连接时部分AT指令有用,部分AT指令(AT+NAME?)无反应**_百岁老人月下的博客-CSDN博客_发→◇at+name?□ [17:03:39.571]收←◆+err:1003

功能:ESP8266 模块连接蓝牙模块,手机连接蓝牙发送数据,蓝牙模块接收到数据之后串口发送给 esp8266 ,esp8266 根据接收到的数据进行 IO 操作。

参考:ESP6266连接蓝牙模块实现LED控制 :ESP8266连接蓝牙模块实现LED控制 - Arduino专区 - 一板网电子技术论坛

功能函数(参数):

#include <SoftwareSerial.h>SoftwareSerial btSerial(D7, D8);   // 串口2: Rx(D7),Tx(D8)// 串口1:Rx(D2),Tx(D4)// 串口0:Rx(D9),Tx(D10) Arduino IDE 使用的串口btSerial.begin(9600);       // 蓝牙波特率char data = btSerial.read();    // 读取蓝牙模块接收到的数据
btSerial.write("start");        // 同过串口发送数据//蓝牙服务
void bluetoothService(){if (btSerial.available() > 0) {    // check if bluetooth module sends some data to esp8266char data = btSerial.read();     // read the data from bluetoothswitch (data){case 'C':                               // if receive data is 'C'(chance)digitalWrite(D5,!digitalRead(D5));    // 改变LED的点亮或者熄灭状态Serial.println("bluetooth chances the status");break;default:break;}}
}

esp8266 板子的引脚是一个坑:

// 串口2: Rx(D7),Tx(D8)
// 串口1:Rx(D2),Tx(D4)
// 串口0:Rx(D9),Tx(D10) Arduino IDE 使用的串口

TestBluetooth:

目前实现了:①输入密码连上 WiFi 后,自动弹出操作 IO 的页面(开/关);

②弹出的网页:点击开关按键,跳转页面(“操作成功”),D5 端口输出(LED灯亮);点击“操作成功”按键,回到(开/关)页面;

③连上蓝牙,发送  C(change)   D5 端口输出(LED灯亮/灭);


#include <ESP8266WiFi.h>
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <SoftwareSerial.h>//-------------------------------  页面代码  ----------------------------------------
const char* page_html = "\
<!DOCTYPE html>\r\n\
<html lang='en'>\r\n\
<head>\r\n\<meta charset='UTF-8'>\r\n\<meta name='viewport' content='width=device-width, initial-scale=1.0'>\r\n\<title>Switch</title>\r\n\<style>\r\n\body {\r\n\background-color: rgb(247, 250, 95);\r\n\}\r\n\.box {\r\n\width: 200px;\r\n\height: 110px;\r\n\background-color: rgb(92, 134, 250);\r\n\border: 4px solid gray;\r\n\position: absolute;\r\n\left: 50%;\r\n\top: 50%;\r\n\margin-top: -55px;\r\n\margin-left: -100px;\r\n\border-radius: 10px;\r\n\font-size: 70px;\r\n\font-weight: 500;\r\n\color: white;\r\n\outline: none;\r\n\}\r\n\</style>\r\n\
</head>\r\n\
<body>\r\n\<form name='input' action='/SWITCH' method='POST' >\r\n\<input type='submit' value='开/关' class='box'><br>\r\n\</form>\r\n\
</body>\r\n\
</html>\r\n\
";
const char* page_success_html = "\
<!DOCTYPE html>\r\n\
<html lang='en'>\r\n\
<head>\r\n\<meta charset='UTF-8'>\r\n\<meta name='viewport' content='width=device-width, initial-scale=1.0'>\r\n\<title>Switch</title>\r\n\<style>\r\n\body {\r\n\background-color: rgb(247, 250, 95);\r\n\}\r\n\.box {\r\n\width: 200px;\r\n\height: 110px;\r\n\background-color: rgb(92, 134, 250);\r\n\border: 4px solid gray;\r\n\position: absolute;\r\n\left: 50%;\r\n\top: 50%;\r\n\margin-top: -55px;\r\n\margin-left: -100px;\r\n\border-radius: 10px;\r\n\font-size: 40px;\r\n\font-weight: 400;\r\n\color: white;\r\n\outline: none;\r\n\}\r\n\</style>\r\n\
</head>\r\n\
<body>\r\n\<form name='input' action='/SUCCESS' method='POST' >\r\n\<input type='submit' value='操作成功' class='box'><br>\r\n\</form>\r\n\
</body>\r\n\
</html>\r\n\
";//-------------------------------  环境配置  ----------------------------------------
const char* AP_SSID = "TestGate";  // 这里改成你的AP名字--AP账号
const char* AP_PSW = "12345678";   // 这里改成你的AP密码 8位以上
const byte DNS_PORT = 53;          // DNS端口号
IPAddress apIP(192, 168, 4, 1);    // esp8266-AP-IP地址
DNSServer dnsServer;               // 创建dnsServer实例
ESP8266WebServer server(80);       // 创建WebServer
SoftwareSerial btSerial(D7, D8);   // 串口2: Rx,Tx//-------------------------------  网页请求处理  ----------------------------------------
void handleRoot() {//访问主页回调函数server.send(200, "text/html", page_html);
}//Post回调函数:处理LED控制请求
void handleRootPost() {digitalWrite(D5,!digitalRead(D5));// 改变LED的点亮或者熄灭状态//server.sendHeader("Location",page_success_html);// 跳转回页面根目录server.send(200, "text/html", page_success_html);server.send(303);                 // 发送Http相应代码303 跳转  Serial.println("/SWITCH 请求");
}void handleRootSuccess() {//访问主页回调函数server.send(200, "text/html", page_html);Serial.println("/SUCCESS请求");
}//-------------------------------  配置函数  ----------------------------------------
//基础初始化
void initBasic(void){delay(1000);Serial.begin(115200);   // 串口波特率btSerial.begin(9600);   // 蓝牙波特率 pinMode(D5, OUTPUT);    //设置D5引脚为输出模式以便控制LEDSerial.println("Started...");btSerial.write("start");
}//初始化AP模式
void initSoftAP(void){WiFi.mode(WIFI_AP);WiFi.softAPConfig(apIP, apIP, IPAddress(255, 255, 255, 0));if(WiFi.softAP(AP_SSID,AP_PSW)){Serial.println("ESP8266 SoftAP is right");}
}//初始化WebServer
void initWebServer(void){/*必须在第二个参数上添加上HTTP_GET才能不影响强制门户,防止有些设备无法弹出强制门户,要用域名访问,如果不加第二个参数,就只能实现域名访问而无法强制门户在无法响应的http请求响应回调设置为主页的回调函数,才可以强制门户*/server.on("/", HTTP_GET, handleRoot);//设置主页回调函数server.onNotFound(handleRoot);//设置无法响应的http请求的回调函数server.on("/SWITCH", HTTP_POST, handleRootPost);//设置Post请求回调函数server.on("/SUCCESS", HTTP_POST, handleRootSuccess);//设置Post请求回调函数server.begin();//启动WebServerSerial.println("WebServer started!");
}//初始化DNS
void initDNS(void){//初始化DNS服务器if(dnsServer.start(DNS_PORT, "*", apIP)){//判断将所有地址映射到esp8266的ip上是否成功Serial.println("start dnsserver success.");}else Serial.println("start dnsserver failed.");
}//全部环境初始化
void connectNewWifi(void){WiFi.setAutoConnect(true);  //设置自动连接(经过测试,强制门户必须要加上这一句)//WiFi.begin();             //(经过测试,强制门户必须要加上这一句,我并没有找到原因)int count = 0;while (WiFi.status() != WL_CONNECTED) {delay(500);count++;if(count > 10){//如果5秒内没有连上,就开启Web配网 可适当调整这个时间initSoftAP();initWebServer();initDNS();break;//跳出 防止无限初始化}Serial.print(".");}
}//-------------------------------  setup(配置函数)  ----------------------------------------
void setup() {initBasic();connectNewWifi();
}//-------------------------------  loop(主函数)  -------------------------------------------
void loop() {server.handleClient();dnsServer.processNextRequest();bluetoothService();
}//-------------------------------  服务函数  ----------------------------------------
//蓝牙服务
void bluetoothService(){if (btSerial.available() > 0) {    // check if bluetooth module sends some data to esp8266char data = btSerial.read();     // read the data from bluetoothswitch (data){case 'C':                               // if receive data is 'C'(change)digitalWrite(D5,!digitalRead(D5));    // 改变LED的点亮或者熄灭状态Serial.println("bluetooth chances the status");break;default:break;}}
}

测试结果:


7、ADC外部电路电压 测试

功能:整个项目中用来检测电量:当电量低时 LED 灯亮(报警)

参考:arduino 读取模拟电压_ESP8266开发之旅 基础篇—ESP8266与Arduino的开发说明_龚匠的博客-CSDN博客

分压电路参考:arduino开发ESP8266学习笔记五——模拟输入 - 提货人 - 博客园

板子上有一个ADC口,电压范围为 0 - 1.0V;分压电路我踩了坑:电阻过大导致没有值。

TestADC:

void setup() {Serial.begin(115200);
}void loop() {Serial.print("ADC Value: ");  //输出0-1023 对应 外部输入电压 0-1.0v  Serial.println(analogRead(A0));//延时1s  delay(1000);
}

8、舵机控制 测试

功能:控制舵机完成  打开和关闭  开关面板  的机械动作

舵机文档:(注意工作电压,注意共地!)

SG90舵机 - 百度文库

参考:NodeMcu Esp8266 控制舵机 - freexiaoyu - 博客园

TestServo:


#include <Servo.h>Servo myServo;  // 定义Servo对象来控制
int pos = 0;    // 角度存储变量void setup() {myServo.attach(12); //D6 myServo.write(120);              // 舵机角度写入delay(500);
}void loop() {for (pos = 0; pos <= 180; pos ++) { // 0°到180°// in steps of 1 degreemyServo.write(pos);              // 舵机角度写入delay(15);                       // 等待转动到指定角度} delay(2000);//延时2sfor (pos = 180; pos >= 0; pos --) { // 从180°到0°myServo.write(pos);              // 舵机角度写入delay(15);                       // 等待转动到指定角度}delay(2000);//延时2
}

9、按键 测试

10、EEPROM 测试

11、整合全部模块

篇幅原因,上面三部分写在了记录二:ESP8266+Arduino实现控制【开关外设装置-记录二】_YuBooy的博客-CSDN博客_arduino esp8266 按键消抖

ESP8266+Arduino实现控制【开关外设装置-记录一】相关推荐

  1. esp8266舵机驱动_使用Arduino和ESP8266通过网页控制舵机

    在本文中,我们将尝试通过网页来控制舵机,通过滑动网页上对应的滑块,促使舵机做相应地运动.这样的尝试在做一些远程开关或者远程控制的小设备时非常有用,比如把 宠物定时喂食器 改造成网页控制的也是可以实现的 ...

  2. 用ESP8266实现 手机控制车库门开关

    一直想给车库的门加一个手机开关, 最近发发现了ESP8266 arduino 模块在淘宝上只要15人民币. 在ESP8266 2口连接了一个5v继电器控制模块, 实现了手机浏览器控制车库门. #inc ...

  3. ESP8266美的空调红外控制库(Arduino)

    有关美的空调的ESP8266的红外控制库,适用于Arduino平台,需配合IRremoteESP8266库使用. 文件基于IRremoteESP8266库文件编写. 个人网站上的文章www.songz ...

  4. App inventor2通过蓝牙控制Arduino Uno LED开关

    App inventor2控制Arduino Uno LED开关 如果学会这个小程序,大部分的手机通过蓝牙控制Arduino的功能都可以实现,这个小示例是通过蓝牙模块向Arduino发送"0 ...

  5. ESP8266 01S 继电器控制智能灯实现

    ESP8266 01S 继电器控制 智能灯实现(使用小度音响) 最近研究esp8266,发现可以通过wifi连接物联网云平台实现远程控制,同时也可以加入小度语音DIY简单的智能家居. 前言 本人也是刚 ...

  6. ESP-8266接入阿里云开关LED

    ESP-8266接入阿里云开关LED 我们通过esp8266连接到阿里云,再通过阿里云绑定修改led属性,esp8266接收到mqtt协议报文处理我们的开关灯函数 阿里云控制台添加设备,esp8266 ...

  7. 《Arduino直流电机控制教程》

    <Arduino直流电机控制教程> 在这个Arduino教程中,我们将学习如何使用Arduino控制直流电机.我们来看看控制直流电机的一些基本技术,并通过两个例子,学习如何使用L298N电 ...

  8. 热工仪表及控制实训装置

    ZN-10LX热工仪表及控制实训装置 一.概述 ZN-10LX热工仪表及控制实训装置按照劳动和社会保障部职业/工种资格(标准)<热工仪表及控制装置安装工>.<热工仪表及控制装置试验工 ...

  9. 和ESP8266 Arduino谈场恋爱

    非著名情感博主 IoT小能手 twowinter,耗费数月心血,编著长篇言情小说<和ESP8266 Arduino谈场恋爱>,为广大技术宅男传授深度撩妹技巧.是时候了,关掉屏幕上的波多野结 ...

最新文章

  1. python单词大全-python常用的单词
  2. [201804012]关于hugepages 3.txt
  3. 深入Activity的作业完成
  4. static在C和C++语言中的作用
  5. python教程:循环(while和for)
  6. 高级特性(1)-切片
  7. hexo的yelee主题使用自定义字体并用字蛛进行字体压缩的sed脚本
  8. rm命令改为移动到回收站
  9. PL/SQL Developer 8.0.2.1505 简体中文汉化版下载,带注册机-永久注册。
  10. 进程调度主要函数解析
  11. 丁胖胖眼中的WINDOWS操作系统(一)
  12. angularJS前端分页插件
  13. Tyvj3308毒药解药题解
  14. 《手语图像识别系统设计--人体动作识别》设计与实现
  15. 科学家提出记忆形成新解 大脑玩的拼图游戏
  16. P3717 [AHOI2017初中组]cover
  17. 关于公布部分非法刊物的通知及冀职改办字[2006]48号
  18. Java实现找回密码
  19. PMP考试章节口诀-关键词篇(1~7章)
  20. 智能音箱大战全面开火,那么问题来了:如何成为一名全栈语音识别工程师?

热门文章

  1. 疾风之刃服务器维护,疾风之刃
  2. 2021/11/05
  3. 微信收款助手消息不弹窗的解决办法
  4. 硬件-6-基站和移动通信系统的演进
  5. [LaTex]LaTex中的公式标签|多公式标签
  6. ubuntu of VM visualBox
  7. Hangman Judge, UVa 489
  8. 网络安全行业的权威职业证书大揭秘
  9. Python可视化数据分析10、Matplotlib库
  10. 【胎教级数据结构】线性表4:不必道别,再见即是相见——循环链表