ESP-12F学习总结——01

ESP-12F学习总结——01



前言

跟随太极创客教程学习了ESP-12F,现简单总结如下,以待不时之需。


一、搭建开发环境

1.1、安装Arduino_IDE,下载链接如下:https://arduino.me/home。安装过程全部选是就行。
全部选是就行:

1.2、界面选择中文:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.3、双击安装8266支持包:
在这里插入图片描述在这里插入图片描述

1.4、安装Notepad++,将界面设置为中文:

在这里插入图片描述
1.5、安装CH340驱动
CH340/CH341Windows 驱动下载链接:https://www.wch.cn/download/CH341SER_EXE.html/

二、配套代码学习

以下代码为参考B站太极创客团队的《ESP8266教程》零基础入门学用物联网–基础知识篇

2.1、打开IDE,开发板选择ESP-12E;端口选择对应的串口端口。

在这里插入图片描述

2.2、点亮一个小灯

点亮一个小灯代码如下:

/**********************************************************************
  程序名称/Program name     : 01、点亮一个小灯
  团队/Team                 : 橡木工作室
  作者/Author               : 志城
  日期/Date(YYYYMMDD)     :2402081633
  程序目的/Purpose          :已成功点亮LED,通过修改时间即可进行不同时间的亮灭调节
  -----------------------------------------------------------------------
***********************************************************************/
void setup() {
  pinMode(LED_BUILTIN, OUTPUT);     // Initialize the LED_BUILTIN pin as an output
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, LOW);   // Turn the LED on (Note that LOW is the voltage level
  // but actually the LED is on; this is because
  // it is active low on the ESP-01)
  delay(1000);                      // Wait for a second
  digitalWrite(LED_BUILTIN, HIGH);  // Turn the LED off by making the voltage HIGH
  delay(1000);                      // Wait for two seconds (to demonstrate the active low LED)
}
/***********************************************************************/


2.3、(3-1ESP8266物联网开发基础)教程配套代码测试通过

第一款代码如下(示例):

/**********************************************************************
程序名称/Program name     : 02、调用softAP()将ESP12F12F变为一个wifi终端
团队/Team                : 太极创客团队
作者/Author              : 小黑
日期/Date(YYYYMMDD)     : 2402081638
程序目的/Purpose          : 测试成功
此程序使用ESP8266WiFiAP库来演示softAP()函数的用法
softAP()函数会开启一个校验式wifi。我们可以在代码中设置WiFi网络名称、
WiFi密码、最大允许连接设备数量、信号通道编号、是否广播WiFi名称。
-----------------------------------------------------------------------
***********************************************************************/

#include <ESP8266WiFi.h>
 
#define AP_ssid   "abcd" //这里改成你的设备当前环境下接入点名字
#define password  "12345678"         //这里改成你的设备当前环境下接入点密码

void setup() {
  
  pinMode(LED_BUILTIN, OUTPUT);     //LED引脚设置为输出模式
  Serial.begin(9600);             // 启动串口通讯
  Serial.println();
  
  WiFi.mode(WIFI_AP);  //配置接入点信息
  
  Serial.print("设置接入点中 ... ");   //启动接入点模式,并设置账号和密码
  Serial.println("");                 // 通过串口监视器输出信息
  Serial.print("当前工作模式:");       // 告知用户设备当前工作模式
  Serial.println(WiFi.getMode());
  Serial.print("接入点名字:");    
  Serial.println(AP_ssid);            // 告知用户建立的接入点WiFi名
  Serial.print("接入点密码:");        
  Serial.println(password);           // 告知用户建立的接入点WiFi密码
  //WiFi.softAP(AP_ssid, password,3,1);  //启动校验式网络(需要输入账号密码的网络),通道为3,wifi隐藏,最大连接数=4
  WiFi.softAP(AP_ssid, password,3,0);    //启动校验式网络(需要输入账号密码的网络),通道为3,wifi非隐藏,最大连接数=4
}

void loop() {
  
  digitalWrite(LED_BUILTIN, LOW);   // Turn the LED on (Note that LOW is the voltage level
  delay(1000);                      // Wait for a second
  digitalWrite(LED_BUILTIN, HIGH);  // Turn the LED off by making the voltage HIGH
  delay(1000);                      // Wait for two seconds (to demonstrate the active low LED)

}

/***********************************************************************/

第二款代码如下(示例):


/**********************************************************************
  程序名称/Program name     : 03、调用WiFi.begin()将12F接入WIFI
  团队/Team                : 太极创客团队 
  作者/Author              : 小黑
  日期/Date(YYYYMMDD)     : 2402081644
  程序目的/Purpose          :
 
  此程序使用ESP8266WiFiSTA库来演示建立连接,ESP8266模块切换工作模式为无线终端模式。
***********************************************************************/

#include <ESP8266WiFi.h>
 
#define AP_ssid   "abcd"              //这里改成你的设备当前环境下接入点名字
#define password  "12345678"          //这里改成你的设备当前环境下接入点密码
 
int i = 0;    //用来判定连接是否超时的累加量
 
void setup() {
  Serial.begin(9600);  // 启动串口通讯,波特率设置为9600
  Serial.println("开始连接");
  
  //调用 WiFi.begin()函数,开始连接接入点
  WiFi.begin(AP_ssid, password);
  Serial.print("正在连接到");
  Serial.print(AP_ssid);
  
  //这里的循环用来判断是否连接成功的。连接过程中每隔500毫秒会检查一次是否连接成功,,并打一个点表示正在连接中
  //连接成功后会给出提示,但是若60秒后还是没有连接上,则会提示超时
  while (WiFi.status() != WL_CONNECTED) {
    i++;
    delay(500);
    Serial.print(".");
    if (i > 120) { //60秒后如果还是连接不上,就判定为连接超时
      Serial.print("连接超时!请检查网络环境");
      break;
    }
  }
  
  Serial.println("网络连接成功");
  
  //这一部分用来输出连接网络的基本信息
  Serial.println("500");              // 延时500毫秒
  Serial.print("当前工作模式:");     // 告知用户设备当前工作模式
  Serial.println(WiFi.getMode());
  Serial.print("连接到的接入点名字:");
  Serial.println(AP_ssid);            // 告知用户建立的接入点WiFi名
  Serial.print("连接到的接入点密码:");
  Serial.println(password);        // 告知用户建立的接入点WiFi密码
  Serial.print("无线终端模式成功开启,网络连接成功");

  Serial.print("IP_address: ");            // 告知用户NodeMCU的IP地址
  Serial.println(WiFi.softAPIP());   //通过调用WiFi.softAPIP()可以得到NodeMCU的IP地址

  Serial.println("初始化完成");
}
 
void loop() {
}
/***********************************************************************/


第三款代码如下(示例):



/**********************************************************************
  程序名称/Program name     : 04、将12F接入WIFI打印IP地址
  团队/Team                : 太极创客团队 
  作者/Author              : 小黑
  日期/Date(YYYYMMDD)     : 2402081644
  程序目的/Purpose          :  测试成功
 
  此程序使用ESP8266WiFiSTA库来演示建立连接,ESP8266模块切换工作模式为无线终端模式。
  备注:一个开发板无线终端IP地址为: 192.168.1.10
        另个开发板无线终端IP地址为: 192.168.1.11
  IP地址是模块联网之后,由路由器给模块动态分配的地址。

  通过CMD里面:C:\Users\123>ping 192.168.1.11
  正在 Ping 192.168.1.11 具有 32 字节的数据:
  来自 192.168.1.11 的回复: 字节=32 时间=104ms TTL=255
  来自 192.168.1.11 的回复: 字节=32 时间=4ms TTL=255
  来自 192.168.1.11 的回复: 字节=32 时间=4ms TTL=255
  来自 192.168.1.11 的回复: 字节=32 时间=4ms TTL=255

  192.168.1.11 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
  往返行程的估计时间(以毫秒为单位):
    最短 = 4ms,最长 = 104ms,平均 = 29ms

***********************************************************************/

#include <ESP8266WiFi.h>
 
#define AP_ssid   "abcd"              //这里改成你的设备当前环境下接入点名字
#define password  "12345678"          //这里改成你的设备当前环境下接入点密码

 
void setup() {
  Serial.begin(9600);              // 启动串口通讯,波特率设置为9600
  Serial.println("开始连接");
  
  WiFi.begin(AP_ssid, password);   //调用 WiFi.begin()函数,开始连接接入点
  Serial.print("正在连接到");
  Serial.print(AP_ssid);Serial.println("...");
  
   
  int i = 0;    //用来判定连接是否超时的累加量
  //这里的循环用来判断是否连接成功的。连接过程中每隔500毫秒会检查一次是否连接成功,,并打一个点表示正在连接中
  //连接成功后会给出提示,但是若60秒后还是没有连接上,则会提示超时
  while (WiFi.status() != WL_CONNECTED) {
    i++;
    delay(500);
    Serial.print(".");
    if (i > 120) { //60秒后如果还是连接不上,就判定为连接超时
      Serial.print("连接超时!请检查网络环境");
      break;
    }
  }
  
  Serial.println("网络连接成功");
  
  //这一部分用来输出连接网络的基本信息
  Serial.println("500");              // 延时500毫秒
  Serial.print("当前工作模式:");     // 告知用户设备当前工作模式
  Serial.println(WiFi.getMode());
  Serial.print("连接到的接入点名字:");
  Serial.println(AP_ssid);            // 告知用户建立的接入点WiFi名
  Serial.print("连接到的接入点密码:");
  Serial.println(password);        // 告知用户建立的接入点WiFi密码
  Serial.print("无线终端模式成功开启,网络连接成功");

  Serial.print("IP_address: ");            // 告知用户NodeMCU的IP地址
  Serial.println(WiFi.softAPIP()); //ESP8266开发板建立WiFi接入点后, 我们可以使用WiFi.softAPIP()函数获取ESP8266开发板的IP地址。

 if (WiFi.status() == WL_CONNECTED)
  {
    Serial.print("无线终端IP地址为: ");
    Serial.println(WiFi.localIP());         //localIP函数可在无线终端模式下获取当前ESP8266模块的IP地址
  }

}
 
void loop() {}

/***********************************************************************/

2.4、(3-2 ESP8266网络服务器)教程配套代码测试通过

第一段代码如下(示例):


/**********************************************************************
  程序名称/Program name     : 07、使用12F连接WIFI;从浏览器输入12F的IP地址;进行对应语句的显示。
  团队/Team                :  
  作者/Author              : 
  日期/Date(YYYYMMDD)     : 2402081644
  程序目的/Purpose          :  测试成功
  使用8266作为WebServer,并用浏览器打开设备IP+80端口进行访问,会显示如下信息:
  Hello i am here ;test homepage !
***********************************************************************/
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266WebServer.h>
 
//设置您的WiFi接入信息
#define AP_ssid   "abcd"              //这里改成你的设备当前环境下接入点名字
#define password  "12345678"          //这里改成你的设备当前环境下接入点密码


ESP8266WebServer server(80);
 
//自定义主页访问处理函数
void homepage() {
  server.send(200, "text/plain", "Hello i am here ;test homepage !");
  Serial.println("用户访问了主页");
}
 
void setup(void) {
  Serial.begin(9600);  //初始化串口
  Serial.println("");
 
  WiFi.begin(AP_ssid, password);   //调用 WiFi.begin()函数,开始连接接入点
  Serial.print("正在连接到");
  Serial.print(AP_ssid);Serial.println("...");
  int i = 0;    //用来判定连接是否超时的累加量
  //这里的循环用来判断是否连接成功的。连接过程中每隔500毫秒会检查一次是否连接成功,,并打一个点表示正在连接中
  //连接成功后会给出提示,但是若60秒后还是没有连接上,则会提示超时
  while (WiFi.status() != WL_CONNECTED) {
    i++;
    delay(500);
    Serial.print(".");
    if (i > 120) { //60秒后如果还是连接不上,就判定为连接超时
      Serial.print("连接超时!请检查网络环境");
      break;
    }
  }
  Serial.println("网络连接成功");
  //这一部分用来输出连接网络的基本信息
  Serial.println("500");              // 延时500毫秒
  Serial.print("当前工作模式:");     // 告知用户设备当前工作模式
  Serial.println(WiFi.getMode());
  Serial.print("连接到的接入点名字:");
  Serial.println(AP_ssid);            // 告知用户建立的接入点WiFi名
  Serial.print("连接到的接入点密码:");
  Serial.println(password);        // 告知用户建立的接入点WiFi密码
  Serial.print("无线终端模式成功开启,网络连接成功");

 if (WiFi.status() == WL_CONNECTED)
  {
    Serial.print("无线终端IP地址为: ");
    Serial.println(WiFi.localIP());         //localIP函数可在无线终端模式下获取当前ESP8266模块的IP地址
  }

//------------------  “启动网络服务功”程序部分开始--------------//初始化WebServer
  server.on("/", homepage);
  server.begin();
//------------------  “启动网络服务功”程序部分结束--------------//
  Serial.println("HTTP server started");
}
 
void loop(void) {
  //监听客户请求并处理
  server.handleClient();
}
/***********************************************************************/



第二段代码如下(示例):


/**********************************************************************
  程序名称/Program name     : 08、使用12F连接WIFI;从浏览器输入12F的IP地址;进行对应语句的显示。
  团队/Team                :  
  作者/Author              : 
  日期/Date(YYYYMMDD)     : 2402082355
  程序目的/Purpose          :  测试成功
  使用8266作为WebServer,并用浏览器打开设备IP+80端口进行访问;http://192.168.1.10/123   显示404
***********************************************************************/
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
 
//设置您的WiFi接入信息
#define AP_ssid   "abcd"              //这里改成你的设备当前环境下接入点名字
#define password  "12345678"          //这里改成你的设备当前环境下接入点密码
 
ESP8266WebServer server(80);
 
//设置主页
void homepage() {
  server.send(200, "text/plain", "test homepage !");
  Serial.println("用户访问了主页");
}
 
// 设置处理404情况的函数'handleNotFound'
void handleNotFound() {                                       // 当浏览器请求的网络资源无法在服务器找到时,
  server.send(404, "text/plain", "404: Not found");   // NodeMCU将调用此函数。
}
 
void setup(void) {
  //初始化串口
  Serial.begin(9600);
  Serial.println("");
 
  //初始化网络
  WiFi.mode(WIFI_STA);
  WiFi.begin(AP_ssid, password);   //调用 WiFi.begin()函数,开始连接接入点
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("IP Address: ");
  Serial.println(WiFi.localIP());
 
  //初始化WebServer
  server.on("/", homepage);
  server.onNotFound(handleNotFound);
  server.begin();
  Serial.println("HTTP server started");
}
 
void loop(void) {
  //监听客户请求并处理
  server.handleClient();
}

/***********************************************************************/

第三段代码如下(示例):
这个代码开始有点意思了。


/**********************************************************************
  程序名称/Program name     : 09、使用12F连接WIFI;从浏览器输入12F的IP地址;点击按钮控制模块LED亮灭。
  团队/Team                :  
  作者/Author              : 
  日期/Date(YYYYMMDD)     : 2402082355
  程序目的/Purpose          : 使用NodeMCU建立基本服务器。用户可通过浏览器使用8266的IP地址
                           访问8266所建立的基本网页并通过该页面点亮/熄灭NodeMCU的内置LED
***********************************************************************/
#include <ESP8266WiFi.h>        // 本程序使用 ESP8266WiFi库
#include <ESP8266WiFiMulti.h>   //  ESP8266WiFiMulti库
#include <ESP8266WebServer.h>   //  ESP8266WebServer库
 
ESP8266WiFiMulti wifiMulti;     // 建立ESP8266WiFiMulti对象,对象名称是 'wifiMulti'
 
ESP8266WebServer esp8266_server(80);// 建立网络服务器对象,该对象用于响应HTTP请求。监听端口(80)
 
void setup(void){
  Serial.begin(9600);   // 启动串口通讯
 
  pinMode(LED_BUILTIN, OUTPUT); //设置内置LED引脚为输出模式以便控制LED

  wifiMulti.addAP("ChinaNet-fLQc", "vxgdwscn"); // 将需要连接的一系列WiFi ID和密码输入这里
  wifiMulti.addAP("abcd", "12345678"); // ESP8266-NodeMCU再启动后会扫描当前网络
  wifiMulti.addAP("ssid_from_AP_3", "your_password_for_AP_3"); // 环境查找是否有这里列出的WiFi ID。如果有
  Serial.println("Connecting ...");                            // 则尝试使用此处存储的密码进行连接。
  
  int i = 0;                                 
  while (wifiMulti.run() != WL_CONNECTED) {  // 此处的wifiMulti.run()是重点。通过wifiMulti.run(),NodeMCU将会在当前
    delay(1000);                             // 环境中搜索addAP函数所存储的WiFi。如果搜到多个存储的WiFi那么NodeMCU
    Serial.print(i++); Serial.print(' ');    // 将会连接信号最强的那一个WiFi信号。
  }                                          // 一旦连接WiFI成功,wifiMulti.run()将会返回“WL_CONNECTED”。这也是
                                             // 此处while循环判断是否跳出循环的条件。
  
  // 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
 
  esp8266_server.begin();                           // 启动网站服务
  esp8266_server.on("/", HTTP_GET, handleRoot);     // 设置服务器根目录即'/'的函数'handleRoot'
  esp8266_server.on("/LED", HTTP_POST, handleLED);  // 设置处理LED控制请求的函数'handleLED'
  esp8266_server.onNotFound(handleNotFound);        // 设置处理404情况的函数'handleNotFound'
 
  Serial.println("HTTP esp8266_server started");//  告知用户ESP8266网络服务功能已经启动
}
 
void loop(void){
  esp8266_server.handleClient();                     // 检查http服务器访问
}
 
  //设置服务器根目录即'/'的函数'handleRoot'
  //该函数的作用是每当有客户端访问NodeMCU服务器根目录时,
  //NodeMCU都会向访问设备发送 HTTP 状态 200 (Ok) 这是send函数的第一个参数。
  //同时NodeMCU还会向浏览器发送HTML代码,以下示例中send函数中第三个参数,
  //也就是双引号中的内容就是NodeMCU发送的HTML代码。该代码可在网页中产生LED控制按钮。 
  //当用户按下按钮时,浏览器将会向NodeMCU的/LED页面发送HTTP请求,请求方式为POST。
  //NodeMCU接收到此请求后将会执行handleLED函数内容
void handleRoot() {       
  esp8266_server.send(200, "text/html", "<form action=\"/LED\" method=\"POST\"><input type=\"submit\" value=\"Toggle LED\"></form>");
}
 
//处理LED控制请求的函数'handleLED'
void handleLED() {                          
  digitalWrite(LED_BUILTIN,!digitalRead(LED_BUILTIN));// 改变LED的点亮或者熄灭状态
  esp8266_server.sendHeader("Location","/");          // 跳转回页面根目录
  esp8266_server.send(303);                           // 发送Http相应代码303 跳转  
}
 
// 设置处理404情况的函数'handleNotFound'
void handleNotFound(){
  esp8266_server.send(404, "text/plain", "404: Not found"); // 发送 HTTP 状态 404 (未找到页面) 并向浏览器发送文字 "404: Not found"
}
/***********************************************************************/


第四段代码如下(示例):


/**********************************************************************
  程序名称/Program name     : 10、使用12F连接WIFI;从浏览器输入12F的IP地址;点击板子按键网络可以看到引脚状态
  团队/Team                :  
  作者/Author              : 
  日期/Date(YYYYMMDD)     : 2402090952
程序目的/Purpose          : 使用NodeMCU建立基本服务器。该页面将会显示NodeMCU
                           的D3引脚状态。NodeMCU开发板上的FLASH按键可以控制D3引脚的电平。
                           没有按下该按键时D3引脚将会保持高电平状态。当按下该按键后,
                           D3引脚会变为低电平。需要按住按键然后刷新一下页面才可以看到引脚状态。
-----------------------------------------------------------------------
修订历史/Revision History  
日期/Date    作者/Author      参考号/Ref    修订说明/Revision Description
***********************************************************************/
 
#include <ESP8266WiFi.h>        // 本程序使用 ESP8266WiFi库
#include <ESP8266WiFiMulti.h>   //  ESP8266WiFiMulti库
#include <ESP8266WebServer.h>   //  ESP8266WebServer库
 
#define buttonPin D3            // 按钮引脚D3
 
ESP8266WiFiMulti wifiMulti;     // 建立ESP8266WiFiMulti对象,对象名称是'wifiMulti'
 
ESP8266WebServer esp8266_server(80);// 建立网络服务器对象,该对象用于响应HTTP请求。监听端口(80)
 
bool pinState;  // 存储引脚状态用变量
 
void setup(){
  Serial.begin(9600);   // 启动串口通讯
  pinMode(buttonPin, INPUT_PULLUP); // 将按键引脚设置为输入上拉模式
 
  wifiMulti.addAP("ChinaNet-fLQc", "vxgdwscn");                // 将需要连接的一系列WiFi ID和密码输入这里
  wifiMulti.addAP("abcd", "12345678");                         // ESP8266-NodeMCU再启动后会扫描当前网络
  wifiMulti.addAP("ssid_from_AP_3", "your_password_for_AP_3"); // 环境查找是否有这里列出的WiFi ID。如果有
  Serial.println("Connecting ...");                            // 则尝试使用此处存储的密码进行连接。
  
  int i = 0;                                 
  while (wifiMulti.run() != WL_CONNECTED) {  // 此处的wifiMulti.run()是重点。通过wifiMulti.run(),NodeMCU将会在当前
    delay(1000);                             // 环境中搜索addAP函数所存储的WiFi。如果搜到多个存储的WiFi那么NodeMCU
    Serial.print(i++); Serial.print(' ');    // 将会连接信号最强的那一个WiFi信号。
  }                                          // 一旦连接WiFI成功,wifiMulti.run()将会返回“WL_CONNECTED”。这也是
                                             // 此处while循环判断是否跳出循环的条件。
  // WiFi连接成功后将通过串口监视器输出连接成功信息 
  Serial.println('\n');                     // WiFi连接成功后
  Serial.print("Connected to ");            // NodeMCU将通过串口监视器输出。
  Serial.println(WiFi.SSID());              // 连接的WiFI名称
  Serial.print("IP address:\t");            // 以及
  Serial.println(WiFi.localIP());           // NodeMCU的IP地址
  
  esp8266_server.begin();                   // 启动网站服务                
  esp8266_server.on("/", handleRoot);       // 设置服务器根目录即'/'的函数'handleRoot'
  esp8266_server.onNotFound(handleNotFound);// 设置处理404情况的函数'handleNotFound'        
 
  Serial.println("HTTP esp8266_server started");//  告知用户ESP8266网络服务功能已经启动
}
 
void loop(){
  esp8266_server.handleClient();     // 处理http服务器访问
  pinState = digitalRead(buttonPin); // 获取引脚状态
}
 
//以下函数处理网站首页的访问请求。此函数为本示例程序重点1
//详细讲解请参见太极创客网站《零基础入门学用物联网》
//第3章-第2节“通过网络服务将开发板引脚状态显示在网页中”的说明讲解。                                                                    
void handleRoot() {   
  String displayPinState;                   // 存储按键状态的字符串变量

  if(pinState == HIGH){                     // 当按键引脚D3为高电平
    displayPinState = "Button State: HIGH"; // 字符串赋值高电平信息
  } else {                                  // 当按键引脚D3为低电平
    displayPinState = "Button State: LOW";  // 字符串赋值低电平信息
  }
  
  esp8266_server.send(200, "text/plain", displayPinState); 
                                            // 向浏览器发送按键状态信息  
}
 
// 设置处理404情况的函数'handleNotFound'
void handleNotFound(){                                        // 当浏览器请求的网络资源无法在服务器找到时,
  esp8266_server.send(404, "text/plain", "404: Not found");   // NodeMCU将调用此函数。
}

/***********************************************************************/

第五段代码如下(示例):


/**********************************************************************
  程序名称/Program name     : 11、使用12F连接WIFI;从浏览器输入12F的IP地址;点击板子按键网络自动刷新可以看到引脚状态
  团队/Team                :  
  作者/Author              : 
  日期/Date(YYYYMMDD)     : 2402090952
程序目的/Purpose          : 使用NodeMCU建立基本服务器。该网页将显示引脚D3状态。同时状态会
                           每隔5秒钟更新一次。
-----------------------------------------------------------------------
修订历史/Revision History  
日期/Date    作者/Author      参考号/Ref    修订说明/Revision Description
 
***********************************************************************/
 
#include <ESP8266WiFi.h>        // 本程序使用 ESP8266WiFi库
#include <ESP8266WiFiMulti.h>   //  ESP8266WiFiMulti库
#include <ESP8266WebServer.h>   //  ESP8266WebServer库
 
#define buttonPin D3            // 按钮引脚D3
 
ESP8266WiFiMulti wifiMulti;     // 建立ESP8266WiFiMulti对象,对象名称是'wifiMulti'
 
ESP8266WebServer esp8266_server(80);// 建立网络服务器对象,该对象用于响应HTTP请求。监听端口(80)
 
bool pinState;                      // 存储引脚状态用变量
 
void setup(){
  Serial.begin(9600);          // 启动串口通讯
  delay(10);
  Serial.println("");
 
  pinMode(buttonPin, INPUT_PULLUP); // 将按键引脚设置为输入上拉模式
 
  wifiMulti.addAP("ChinaNet-fLQc", "vxgdwscn");                // 将需要连接的一系列WiFi ID和密码输入这里
  wifiMulti.addAP("abcd", "12345678");                         // ESP8266-NodeMCU再启动后会扫描当前网络
  wifiMulti.addAP("ssid_from_AP_3", "your_password_for_AP_3"); // 环境查找是否有这里列出的WiFi ID。如果有
  Serial.println("Connecting ...");                            // 则尝试使用此处存储的密码进行连接。
  
  int i = 0;                                 
  while (wifiMulti.run() != WL_CONNECTED) {  // 此处的wifiMulti.run()是重点。通过wifiMulti.run(),NodeMCU将会在当前
    delay(1000);                             // 环境中搜索addAP函数所存储的WiFi。如果搜到多个存储的WiFi那么NodeMCU
    Serial.print(i++); Serial.print(' ');    // 将会连接信号最强的那一个WiFi信号。
  }                                          // 一旦连接WiFI成功,wifiMulti.run()将会返回“WL_CONNECTED”。这也是
                                             // 此处while循环判断是否跳出循环的条件。
  // WiFi连接成功后将通过串口监视器输出连接成功信息 
  Serial.println('\n');                     // WiFi连接成功后
  Serial.print("Connected to ");            // NodeMCU将通过串口监视器输出。
  Serial.println(WiFi.SSID());              // 连接的WiFI名称
  Serial.print("IP address:\t");            // 以及
  Serial.println(WiFi.localIP());           // NodeMCU的IP地址
  
  esp8266_server.begin();                  
  esp8266_server.on("/", handleRoot);      
  esp8266_server.onNotFound(handleNotFound);        
 
  Serial.println("HTTP esp8266_server started");//  告知用户ESP8266网络服务功能已经启动
}
 
void loop(){
  esp8266_server.handleClient();     // 处理http服务器访问
  pinState = digitalRead(buttonPin); // 获取引脚状态
}                                                                   
 
//以下函数处理网站首页的访问请求。此函数为本示例程序重点1
//详细讲解请参见太极创客网站《零基础入门学用物联网》
//第3章-第2节“通过网络服务将开发板引脚状态显示在网页中”的说明讲解。
void handleRoot() {   //处理网站目录“/”的访问请求 
  esp8266_server.send(200, "text/html", sendHTML(pinState));  
}
 

//建立用于发送给客户端浏览器的HTML代码。此代码将会每隔5秒刷新页面。通过页面刷新,引脚的最新状态也会显示于页面中
String sendHTML(bool buttonState){
  
  String htmlCode = "<!DOCTYPE html> <html>\n";
  htmlCode +="<head><meta http-equiv='refresh' content='1'/>\n";   //每一秒刷新一次
  htmlCode +="<title>ESP8266 Butoon State</title>\n";              //网页标题(浏览器左上角)
  htmlCode +="<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}\n";//定义页面中文字和颜色
  htmlCode +="body{margin-top: 50px;} h1 {color: #444444;margin: 50px auto 30px;} h3 {color: #444444;margin-bottom: 50px;}\n";//大标题文字
  htmlCode +="</style>\n";
  htmlCode +="</head>\n";
  htmlCode +="<body>\n";
  htmlCode +="<h1>ESP8266 BUTTON STATE</h1>\n";//大标题内容
  
  if(buttonState)
    {htmlCode +="<p>Button Status: HIGH</p>\n";}   //引脚状态
  else
    {htmlCode +="<p>Button Status: LOW</p>\n";}
    
  htmlCode +="</body>\n";
  htmlCode +="</html>\n";
  
  return htmlCode;
}
 
// 设置处理404情况的函数'handleNotFound'
void handleNotFound(){                                        // 当浏览器请求的网络资源无法在服务器找到时,
  esp8266_server.send(404, "text/plain", "404: Not found");   // NodeMCU将调用此函数。
}

/***********************************************************************/

2.5、(3-3ESP8266闪存文件系统)教程配套代码测试通过

第一段代码如下(示例):


/**********************************************************************
程序名称/Program name      : 11、使用12F写内容到闪存;esp8266-flash-write
团队/Team                 : 太极创客团队 / Taichi-Maker (www.taichi-maker.com)
作者/Author               : CYNO 朔 
日期/Date(YYYYMMDD)      : 2402091130
程序目的/Purpose           : 此程序用于演示如何向NodeMCU的SPIFFS中建立名为
                            notes.txt的文件,程序还将向该文件写入信息。
-----------------------------------------------------------------------
不知道您有没有想过,当我们上传程序给ESP8266时,我们的程序具体存放在什么地方呢?每一个ESP8266都配有一个闪存,这个闪存很像是一个小硬盘,
我们上传的文件就被存放在这个闪存里。这个闪存的全称是Serial Peripheral Interface Flash File System(SPIFFS)。
除了可以存放上传的程序以外,我们还可以将网页文件或者系统配置文件存放在ESP8266的闪存中。在这节课里,
我们将学习如何利用程序对闪存文件系统(SPIFFS)进行文件读取和修改。

函数说明:
SPIFFS.open(file_name, "w"); 
以上函数有两个参数:
第一个参数是被操作的文件名称,本示例中该文件为/notes.txt
第二个参数"w" 代表写入文件信息。(如需了解如何读取信息,请参阅示例程序esp8266-flash-read)

注意:点击工具->flash size->选择1M
***********************************************************************/
 
 
#include <FS.h>  
 
String file_name = "/taichi-maker/notes.txt"; //被读取的文件位置和名称
 
void setup() {
  Serial.begin(9600);
  Serial.println("");
  
  Serial.println("SPIFFS format start");
  SPIFFS.format();    // 格式化SPIFFS
  Serial.println("SPIFFS format finish");
  
  if(SPIFFS.begin()){ // 启动SPIFFS
    Serial.println("SPIFFS 启动成功。");
  } else {
    Serial.println("SPIFFS 启动失败。");
  }
  //文件对象
  File dataFile = SPIFFS.open(file_name, "w");// 建立File对象用于向SPIFFS中的file对象(即/notes.txt)写入信息
  dataFile.println("Hello IOT World.欢迎来到物联网世界。");       // 向dataFile写入字符串信息
  dataFile.close();                           // 完成文件写入后关闭文件
  Serial.println("写入数据成功");
}
 
void loop() {
}

/***********************************************************************/

第二段代码如下(示例):


/**********************************************************************
程序名称/Program name      : 12、读取12F闪存内容:esp8266-flash-read
团队/Team                 : 太极创客团队 / Taichi-Maker (www.taichi-maker.com)
作者/Author               : CYNO 朔
日期/Date(YYYYMMDD)      : 20191109
程序目的/Purpose           : 此程序用于演示如何从NodeMCU的内置SPIFFS中存储的文件notes.txt读取数据。
                           notes.txt 文件内容将会通过串口监视器显示出来供用户确认。
                           注意在使用本程序以前需要先将notes.txt 文件上传到NodeMCU开发板的SPIFFS中
-----------------------------------------------------------------------
修订历史/Revision History
日期/Date    作者/Author      参考号/Ref    修订说明/Revision Description
-----------------------------------------------------------------------
函数说明:
SPIFFS.open(file_name, "r"); 
以上SPIFFS函数有两个参数:
第一个参数是被操作的文件名称,本示例中该文件为/notes.txt
第二个参数"r" 代表读取文件信息。(如需了解如何写入信息,请参阅示例程序esp8266-flash-write)
***********************************************************************/
 
#include <FS.h>
//建立file_name字符串 
String file_name = "/taichi-maker/notes.txt";              //被读取的文件位置和名称
 
void setup() {
  Serial.begin(9600);
  Serial.println("");
  
  if(SPIFFS.begin()){ // 启动闪存文件系统
    Serial.println("SPIFFS Started.");
  } else {
    Serial.println("SPIFFS Failed to Start.");
  }
 
  //确认闪存中是否有file_name文件
  if (SPIFFS.exists(file_name)){  //exists 存在的意思;如果有这个文件,就告诉找到了,如果没有就告诉没有找到
    Serial.print(file_name);
    Serial.println(" FOUND.file_name.找到file_name文件了");
  } else {
    Serial.print(file_name);
    Serial.print(" NOT FOUND.file_name.没有找到file_name文件");
  }
 
  //建立File对象用于从SPIFFS中读取文件
  File dataFile = SPIFFS.open(file_name, "r"); 
 
  //读取文件内容并且通过串口监视器输出文件信息
  for(int i=0; i<dataFile.size(); i++){    //size大小,判断有多少个字符;8266系统每个字符都占用一个字节
    Serial.print((char)dataFile.read());   //显示读取的一个字符信息    
  }
 
  //完成文件读取后关闭文件
  dataFile.close();                           
}
 
void loop() {
}

/***********************************************************************/

第三段代码如下(示例):

/**********************************************************************
程序名称/Program name      : 13、向12F闪存添加内容:esp8266-flash-append
团队/Team                 : 太极创客团队 / Taichi-Maker (www.taichi-maker.com)
作者/Author               : CYNO 朔 
日期/Date(YYYYMMDD)      : 20191109
程序目的/Purpose           : 此程序用于演示如何向NodeMCU的内置SPIFFS中存储的文件
                            notes.txt添加数据。                      

                            备注:写入文件会格式化再写入,添加会执行几次添加几次
-----------------------------------------------------------------------  
函数说明:
SPIFFS.open(file_name, "a"); 
以上SPIFFS函数有两个参数:
第一个参数是被操作的文件名称,本示例中该文件为/notes.txt
第二个参数"a" 代表添加文件信息。(如需了解如何读取信息,请参阅示例程序esp8266-flash-read)
此示例程序所演示的是向SPIFFS中的文件里添加信息。这一操作写入信息有所区别。
添加信息是不会删除文件内原有信息,而是在原有信息后面添加新的信息。
但写入操作(示例 esp8266-flash-write.ino)是将文件内容完全清除,重新写入新信息。    
***********************************************************************/
 
#include <FS.h>
 
String file_name = "/taichi-maker/notes.txt";              //被读取的文件位置和名称
 
void setup() {
  Serial.begin(9600);
  Serial.println("");
  
  if(SPIFFS.begin()){ // 启动闪存文件系统
    Serial.println("SPIFFS Started.");
  } else {
    Serial.println("SPIFFS Failed to Start.");
  }
 
  //确认闪存中是否有file_name文件
  if (SPIFFS.exists(file_name)){
    
    Serial.print(file_name);
    Serial.println(" FOUND.");
 
    File dataFile = SPIFFS.open(file_name, "a");// 建立File对象用于向SPIFFS中的file对象(即/notes.txt)写入信息
    dataFile.println("This is Appended Info.添加文件已成功。"); // 向dataFile添加字符串信息
    dataFile.close();                           // 完成文件操作后关闭文件   
    Serial.println("Finished Appending data to SPIFFS");
    
  } else {
    Serial.print(file_name);
    Serial.print(" NOT FOUND.");
  }
                        
}
 
void loop() {
}

/***********************************************************************/

第四段代码如下(示例):


/**********************************************************************
程序名称/Program name      : 13、向12F闪存添加内容:esp8266-flash-append
团队/Team                 : 太极创客团队 / Taichi-Maker (www.taichi-maker.com)
作者/Author               : CYNO 朔 
日期/Date(YYYYMMDD)      : 20191109
程序目的/Purpose           : 此程序用于演示如何向NodeMCU的内置SPIFFS中存储的文件
                            notes.txt添加数据。                      

                            备注:写入文件会格式化再写入,添加会执行几次添加几次
-----------------------------------------------------------------------  
函数说明:
SPIFFS.open(file_name, "a"); 
以上SPIFFS函数有两个参数:
第一个参数是被操作的文件名称,本示例中该文件为/notes.txt
第二个参数"a" 代表添加文件信息。(如需了解如何读取信息,请参阅示例程序esp8266-flash-read)
此示例程序所演示的是向SPIFFS中的文件里添加信息。这一操作写入信息有所区别。
添加信息是不会删除文件内原有信息,而是在原有信息后面添加新的信息。
但写入操作(示例 esp8266-flash-write.ino)是将文件内容完全清除,重新写入新信息。    
***********************************************************************/
 
#include <FS.h>
 
String file_name = "/taichi-maker/notes.txt";              //被读取的文件位置和名称
 
void setup() {
  Serial.begin(9600);
  Serial.println("");
  
  if(SPIFFS.begin()){ // 启动闪存文件系统
    Serial.println("SPIFFS Started.");
  } else {
    Serial.println("SPIFFS Failed to Start.");
  }
 
  //确认闪存中是否有file_name文件
  if (SPIFFS.exists(file_name)){
    
    Serial.print(file_name);
    Serial.println(" FOUND.");
 
    File dataFile = SPIFFS.open(file_name, "a");// 建立File对象用于向SPIFFS中的file对象(即/notes.txt)写入信息
    dataFile.println("This is Appended Info.添加文件已成功。"); // 向dataFile添加字符串信息
    dataFile.close();                           // 完成文件操作后关闭文件   
    Serial.println("Finished Appending data to SPIFFS");
    
  } else {
    Serial.print(file_name);
    Serial.print(" NOT FOUND.");
  }
                        
}
 
void loop() {
}

/***********************************************************************/

第五段代码如下(示例):

/**********************************************************************
程序名称/Program name      : 14、内置SPIFFS中文件夹里读取文件信息: esp8266-flash-folder-read
团队/Team                 : 太极创客团队 / Taichi-Maker (www.taichi-maker.com)
作者/Author               : CYNO 朔
日期/Date(YYYYMMDD)      : 20191109
程序目的/Purpose           : 此程序用于演示如何从NodeMCU的内置SPIFFS中文件夹里读取文件信息
                           文件夹内容将会通过串口监视器显示出来。
                           
-----------------------------------------------------------------------
修订历史/Revision History
日期/Date    作者/Author      参考号/Ref    修订说明/Revision Description
-----------------------------------------------------------------------
函数说明:
SPIFFS.openDir(folder_name);
以上函数打开指定目录并返回一个目录对象实例。
***********************************************************************/

#include <FS.h>
 
String file_name = "/taichi-maker/myFile.txt"; //被读取的文件位置和名称
String folder_name = "/taichi-maker";         //被读取的文件夹
 
void setup() {
  Serial.begin(9600);
  Serial.println("");
  
  if(SPIFFS.begin()){ // 启动闪存文件系统
    Serial.println("SPIFFS Started.");
  } else {
    Serial.println("SPIFFS Failed to Start.");
  }
 
  File dataFile = SPIFFS.open(file_name, "w");// 建立File对象用于向SPIFFS中的file对象(即myFile.txt)写入信息
  dataFile.println("Hello Taichi-Maker.");    // 向dataFile写入字符串信息
  dataFile.close();                           // 完成文件写入后关闭文件
  Serial.println(F("Finished Writing data to SPIFFS"));
 
  // 显示目录中文件内容以及文件大小
  Dir dir = SPIFFS.openDir(folder_name);  // 建立“目录”对象
  
  while (dir.next()) {  // dir.next()用于检查目录中是否还有“下一个文件”
    Serial.println(dir.fileName()); // 输出文件名
  }
}
 
void loop() {}


/***********************************************************************/

第六段代码如下(示例):



/**********************************************************************
程序名称/Program name      : 14、内置SPIFFS中文件夹里读取文件信息: esp8266-flash-folder-read
团队/Team                 : 太极创客团队 / Taichi-Maker (www.taichi-maker.com)
作者/Author               : CYNO 朔
日期/Date(YYYYMMDD)      : 20191109
程序目的/Purpose           : 此程序用于演示如何从NodeMCU的内置SPIFFS中文件夹里读取文件信息
                           文件夹内容将会通过串口监视器显示出来。
                           
-----------------------------------------------------------------------
修订历史/Revision History
日期/Date    作者/Author      参考号/Ref    修订说明/Revision Description
-----------------------------------------------------------------------
函数说明:
SPIFFS.openDir(folder_name);
以上函数打开指定目录并返回一个目录对象实例。
***********************************************************************/

#include <FS.h>
 
String file_name = "/taichi-maker/myFile.txt"; //被读取的文件位置和名称
String folder_name = "/taichi-maker";         //被读取的文件夹
 
void setup() {
  Serial.begin(9600);
  Serial.println("");
  
  if(SPIFFS.begin()){ // 启动闪存文件系统
    Serial.println("SPIFFS Started.");
  } else {
    Serial.println("SPIFFS Failed to Start.");
  }
 
  File dataFile = SPIFFS.open(file_name, "w");// 建立File对象用于向SPIFFS中的file对象(即myFile.txt)写入信息
  dataFile.println("Hello Taichi-Maker.");    // 向dataFile写入字符串信息
  dataFile.close();                           // 完成文件写入后关闭文件
  Serial.println(F("Finished Writing data to SPIFFS"));
 
  // 显示目录中文件内容以及文件大小
  Dir dir = SPIFFS.openDir(folder_name);  // 建立“目录”对象
  
  while (dir.next()) {  // dir.next()用于检查目录中是否还有“下一个文件”
    Serial.println(dir.fileName()); // 输出文件名
  }
}
 
void loop() {}

/***********************************************************************/

第七段代码如下(示例):


/**********************************************************************
程序名称/Program name      : 15、删除文件夹:esp8266-flash-remove
团队/Team                 : 太极创客团队 / Taichi-Maker (www.taichi-maker.com)
作者/Author               : CYNO 朔 
日期/Date(YYYYMMDD)      : 20191109
程序目的/Purpose           : 此程序用于演示如何删除SPIFFS中存储的文件                        
***********************************************************************/
 
#include <FS.h>
 
String file_name = "/taichi-maker/notes.txt";              //被读取的文件位置和名称
 
void setup() {
  Serial.begin(9600);
  Serial.println("");
  
  if(SPIFFS.begin()){ // 启动闪存文件系统
    Serial.println("SPIFFS Started.");
  } else {
    Serial.println("SPIFFS Failed to Start.");
  }
  
  //从闪存中删除file_name文件
  if (SPIFFS.remove(file_name)){
    
    Serial.print(file_name);
    Serial.println(" remove sucess");
    
  } else {
    Serial.print(file_name);
    Serial.println(" remove fail");
  }                       
}
 
void loop() {}
                    
/***********************************************************************/

第八段代码如下(示例):



/**********************************************************************
程序名称/Program name      : 16、文件夹信息:esp8266-flash-info
团队/Team                 : 太极创客团队 / Taichi-Maker (www.taichi-maker.com)
作者/Author               : CYNO 朔
日期/Date(YYYYMMDD)      : 20200204
程序目的/Purpose           : 此程序用于演示如何使用FSInfo对象来显示闪存文件系统状态
-----------------------------------------------------------------------
修订历史/Revision History
日期/Date    作者/Author      参考号/Ref    修订说明/Revision Description
***********************************************************************/
 
 
#include <FS.h>
 
FSInfo fs_info;
 
void setup() {
  Serial.begin(9600);
 
  SPIFFS.begin();       //启动SPIFFS
  Serial.println("");
  Serial.println("SPIFFS Started.");
 
  // 闪存文件系统信息
  SPIFFS.info(fs_info);
 
  // 可用空间总和(单位:字节)
  Serial.print("totalBytes: ");     
  Serial.print(fs_info.totalBytes); 
  Serial.println(" Bytes"); 
 
  // 已用空间(单位:字节)
  Serial.print("usedBytes: "); 
  Serial.print(fs_info.usedBytes);
  Serial.println(" Bytes"); 
 
  // 最大文件名字符限制(含路径和'\0')
  Serial.print("maxPathLength: "); 
  Serial.println(fs_info.maxPathLength);
 
  // 最多允许打开文件数量
  Serial.print("maxOpenFiles: "); 
  Serial.println(fs_info.maxOpenFiles);
 
  // 存储块大小
  Serial.print("blockSize: "); 
  Serial.println(fs_info.blockSize);
 
  // 存储页大小
  Serial.print("pageSize: ");
  Serial.println(fs_info.pageSize);
}
 
void loop() {}

/***********************************************************************/

第九段代码如下(示例):


/**********************************************************************
项目名称/Project           : 零基础入门学用物联网
程序名称/Program name      :17、 esp8266-data-upload
团队/Team                 : 太极创客团队 / Taichi-Maker (www.taichi-maker.com)
作者/Author               : CYNO 朔
日期/Date(YYYYMMDD)      : 20191109
程序目的/Purpose           : 此程序用于演示如何使用Arduino IDE向NodeMCU开发板的闪存文件系统
                            上传文件。
-----------------------------------------------------------------------
修订历史/Revision History
日期/Date    作者/Author      参考号/Ref    修订说明/Revision Description
-----------------------------------------------------------------------
说明:
在使用本程序以前,请先将ESP8266FS闪存文件上传插件安装到Arduino IDE中。具体操作请打开以下
链接前往太极创客网站相关教程页面获取详细信息。
http://www.taichi-maker.com/homepage/esp8266-nodemcu-iot/iot-c/spiffs/upload-files/
***********************************************************************/

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

String file_name = "/test_text.txt";              //被读取的文件位置和名称

void setup() {
  Serial.begin(9600);
  
  SPIFFS.begin();                             //启动SPIFFS
  Serial.println("SPIFFS Started.");
  
  if (SPIFFS.exists(file_name)){
    Serial.print(file_name);
    Serial.println(" FOUND.");
  } else {
    Serial.print(file_name);
    Serial.print(" NOT FOUND.");
  }

  //建立File对象用于从SPIFFS中读取文件
  File dataFile = SPIFFS.open(file_name, "r"); 

  //读取文件内容并且通过串口监视器输出文件信息
  for(int i=0; i<dataFile.size(); i++){
    Serial.print((char)dataFile.read());       
  }

  //完成文件读取后关闭文件
  dataFile.close();                           
}

void loop() {}
/***********************************************************************/

总结

欲知后事如何,且听下回分解。

  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值