赞
踩
跟随太极创客教程学习了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教程》零基础入门学用物联网–基础知识篇
点亮一个小灯代码如下:
/********************************************************************** 程序名称/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) } /***********************************************************************/
第一款代码如下(示例):
/********************************************************************** 程序名称/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() {} /***********************************************************************/
第一段代码如下(示例):
/********************************************************************** 程序名称/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将调用此函数。 } /***********************************************************************/
第一段代码如下(示例):
/********************************************************************** 程序名称/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() {} /***********************************************************************/
欲知后事如何,且听下回分解。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。