当前位置:首页 > CN2资讯 > 正文内容

arduino 云服务器 arduino做服务器

3天前CN2资讯

  网络服务器有很多种类型,它们的功能也十分丰富。通常承担网络服务器工作的设备都是运算能力比较强大的电脑。我们的ESP866-NodeMCU虽然也能实现网络服务器的一些功能,但是毕竟它的运算能力是无法与那些昂贵的服务器电脑相媲美的,因此ESP8266-NodeMCU只能实现一些基本的网络服务功能。不过这些基本的网络服务功能已经足够我们开发物联网项目了。在接下来的几节教程里,我们将一起来学习如何让ESP8266-NodeMCU来实现网络服务功能。

网络服务是一个很宽泛的概念,我们在这里即将给您介绍的是网络服务中的网页服务功能。所谓网页服务就是专门用于网页浏览的服务。

一、使用浏览器访问ESP8266服务器

  代码:

#include <ESP8266WiFi.h> #include <ESP8266WiFiMulti.h> #include <ESP8266WebServer.h> ESP8266WiFiMulti WiFiMulti;//建立ESP8266WiFiMulti对象,对象名称为WiFiMulti ESP8266WebServer esp8266_server(80);//建立ESP8266WebServer对象,对象名称是“esp8266_server” //括号中的数字是网络服务器响应http请求的端口号 //网络服务器http端口号为80,因此这里使用80为端口号 int led=14;//设置指示灯 void setup() { pinMode(led,OUTPUT); Serial.begin(9600); WiFiMulti.addAP("vivo","QiFei159874");//这条指令就是告诉ESP8266下面会告诉你多个WiFi网络名称和密码 WiFiMulti.addAP("vivo1","qifei159874");//注意这里的双引号要加上,没加报错 WiFiMulti.addAP("vivo2","QIFEI159874");// digitalWrite(led,HIGH);//默认LED是熄灭的 //运行自定义函数,当未连接到路由器的过程中,闪烁LED,直到连接成功,点亮LED //gotowifi(); Serial.println("WiFi正在连接中"); int i=0; while(WiFiMulti.run()!=WL_CONNECTED)//WiFiMulti.run()和WiFi.Status()功能一样,都是用来表示当前WiFi连接的状态 { delay(1000); Serial.print("."); } Serial.println('\n'); Serial.print("连接到"); Serial.println(WiFi.SSID()); Serial.print("IP Address: "); Serial.println(WiFi.localIP());//ESP8266的IP地址 /*-------------”启动网络服务功能“程序部分开始------------*/ esp8266_server.begin();//启动网络服务器 esp8266_server.on("/",handleRoot);//on函数的作用就是提供页面服务,告诉MCU通过那个函数访问这个界面“/”页面,就是主页,通过handleRoot函数处理该页面 esp8266_server.onNotFound(handleNotFound);//当请求页面不存在时,通过该函数处理 //----启动网路服务功能部分结束 Serial.println("HTTP esp8266_server Started");//告知用户ESP8266网络服务功能已经启动 } void loop() { esp8266_server.handleClient();//处理HTTP服务器访问 } void handleRoot() { /*服务器响应状态码200(找到信息了),text/plain,表示告诉浏览器接下来要返送信息内容的是一段纯文本信息,信息内容就是Hello from ESP8266 */ esp8266_server.send(200,"text/plain","Hello from ESP8266");//nodeMCU将调用 } void handleNotFound()//当浏览器访问页面不存在时,通过该函数处理 { /*服务器响应状态码404(未找到浏览器需要的信息),text/plain,表示告诉浏览器接下来要返送信息内容的是一段纯文本信息,信息内容就是404 Not found*/ esp8266_server.send(404,"text/plain","404 Not found"); }

 

将上述代码下载到ESP8266后,在复位之后,通过串口查看ESP8266网络服务器的IP地址如图1,将其复制到浏览器打开可以看到如图2的现象,这说明已经成功建立了一个网络服务器。

在IP地址后在加一些页面再次访问,因为在代码中我们没有写led的界面,也就是说我们访问的页面不存在,所以得到了如图3的结果,这也就是我们做的另一个页面了。

 

 

 图1

 

 

  图2

图3

二、通过浏览器访问ESP8266服务器进行简单的操作(点亮和熄灭LED)。

 


实验代码

 

 

#include <ESP8266WiFi.h> #include <ESP8266WiFiMulti.h> #include <ESP8266WebServer.h> ESP8266WiFiMulti WiFiMulti;//建立ESP8266WiFiMulti对象,对象名称为WiFiMulti ESP8266WebServer esp8266_server(80);//建立ESP8266WebServer对象,对象名称是“esp8266_server” //括号中的数字是网络服务器响应http请求的端口号 //网络服务器http端口号为80,因此这里使用80为端口号 int LED=D5;//设置指示灯 void setup() { pinMode(LED,OUTPUT); Serial.begin(9600); WiFiMulti.addAP("vivo","QiFei159874");//这条指令就是告诉ESP8266下面会告诉你多个WiFi网络名称和密码 WiFiMulti.addAP("vivo1","qifei159874");//注意这里的双引号要加上,没加报错 WiFiMulti.addAP("vivo2","QIFEI159874");// digitalWrite(LED,HIGH);//默认LED是熄灭的 //运行自定义函数,当未连接到路由器的过程中,闪烁LED,直到连接成功,点亮LED //gotowifi(); Serial.println("WiFi正在连接中"); int i=0; while(WiFiMulti.run()!=WL_CONNECTED)//WiFiMulti.run()和WiFi.Status()功能一样,都是用来表示当前WiFi连接的状态 { delay(1000); Serial.print("."); } Serial.println('\n'); Serial.print("连接到"); Serial.println(WiFi.SSID()); Serial.print("IP Address: "); Serial.println(WiFi.localIP());//ESP8266的IP地址 /*-------------”启动网络服务功能“程序部分开始------------*/ esp8266_server.begin();//启动网络服务器 esp8266_server.on("/",HTTP_GET,handleRoot);//on函数的作用就是提供页面服务,告诉MCU通过那个函数访问这个界面“/”页面,就是主页,通过handleRoot函数处理该页面 esp8266_server.on("/LED",HTTP_POST,handleLED);//设置处理LED控制请求的函数“handleLED” esp8266_server.onNotFound(handleNotFound);//当请求页面不存在时,通过该函数处理 //----启动网路服务功能部分结束 Serial.println("HTTP esp8266_server Started");//告知用户ESP8266网络服务功能已经启动 } void loop() { esp8266_server.handleClient();//处理HTTP服务器访问 } void handleRoot() { /*服务器响应状态码200(找到信息了),text/plain,表示告诉浏览器接下来要返送信息内容的是一段纯文本信息,信息内容就是Hello from ESP8266 */ esp8266_server.send(200, "text/html", "<form action=\"/LED\" method=\"POST\"><input type=\"submit\" value=\"Toggle LED\"></form>");//nodeMCU将调用html内容,这是一个按钮 //啊啊啊啊啊,这里犯了一个巨蠢的错误,由于 input type 拼写错误,没报错,可以上传,就是不显示界面:<>: // esp8266_server.send(200, "text/html", "<form action=\"/LED\" method=\"POST\"><input type=\"submit\" value=\"Toggle LED\"></form>"); } void handleLED() { digitalWrite(LED,!digitalRead(LED));//改变LED的状态 esp8266_server.sendHeader("Location","/");//跳转回页面根目录 esp8266_server.send(303);//发送HTTP相应代码303 跳转到另一个界面} } void handleNotFound()//当浏览器访问页面不存在时,通过该函数处理 { /*服务器响应状态码404(未找到浏览器需要的信息),text/plain,表示告诉浏览器接下来要返送信息内容的是一段纯文本信息,信息内容就是404 Not found*/ esp8266_server.send(404,"text/plain","404 Not found"); }

 通过串口打印的信息如图4,将IP地址输入到浏览器中,点击显示图标,就可以观测到现象。 

 

图4

网页显示如图5

 

图5s

三、通过网络服务将ESP8266的引脚状态显示在网页上(手动刷新)。

如图6所显示的是实时刷新的按键状态,按键设置为上拉输入模式,所以当按键按下后检测为低电平。松开后又变成高电平。这个代码有个缺点就是需要刷新页面才可以显示当前的状态。

 


 图6

网页界面如图7所示

 


图7


 

 

代码:

#include <ESP8266WiFi.h> #include <ESP8266WiFiMulti.h> #include <ESP8266WebServer.h> ESP8266WiFiMulti WiFiMulti;//建立ESP8266WiFiMulti对象,对象名称为WiFiMulti ESP8266WebServer esp8266_server(80);//建立ESP8266WebServer对象,对象名称是“esp8266_server” //括号中的数字是网络服务器响应http请求的端口号 //网络服务器http端口号为80,因此这里使用80为端口号 int LED=D5;//设置指示灯 int BUTTON=D1;//设置按键引脚/*D0不知道为啥不可以,在第一次按键按下之后就会保持为低电平,只有复位才可以恢复高电平,所以改用使用D1,成功*/ bool pinState;//存储按键的状态 void setup() { pinMode(LED,OUTPUT); pinMode(BUTTON,INPUT_PULLUP);//将按键设置为上拉输入。 Serial.begin(9600); WiFiMulti.addAP("vivo","QiFei159874");//这条指令就是告诉ESP8266下面会告诉你多个WiFi网络名称和密码 WiFiMulti.addAP("vivo1","qifei159874");//注意这里的双引号要加上,没加报错 WiFiMulti.addAP("vivo2","QIFEI159874");// digitalWrite(LED,HIGH);//默认LED是熄灭的 //运行自定义函数,当未连接到路由器的过程中,闪烁LED,直到连接成功,点亮LED //gotowifi(); Serial.println("WiFi正在连接中"); int i=0; while(WiFiMulti.run()!=WL_CONNECTED)//WiFiMulti.run()和WiFi.Status()功能一样,都是用来表示当前WiFi连接的状态 { delay(1000); Serial.print("."); } Serial.println('\n'); Serial.print("连接到"); Serial.println(WiFi.SSID()); Serial.print("IP Address: "); Serial.println(WiFi.localIP());//ESP8266的IP地址 /*-------------”启动网络服务功能“程序部分开始------------*/ esp8266_server.begin();//启动网络服务器 esp8266_server.on("/",HTTP_GET,handleRoot);//on函数的作用就是提供页面服务,告诉MCU通过那个函数访问这个界面“/”页面,就是主页,通过handleRoot函数处理该页面 esp8266_server.onNotFound(handleNotFound);//当请求页面不存在时,通过该函数处理 //----启动网路服务功能部分结束 Serial.println("HTTP esp8266_server Started");//告知用户ESP8266网络服务功能已经启动 } void loop() { esp8266_server.handleClient();//处理HTTP服务器访问 pinState=digitalRead(BUTTON); Serial.println(digitalRead(BUTTON)); } void handleRoot() { String displayPinState;//存储按键状态的字符串变量 if(pinState==HIGH)//当按键为高电平时 { displayPinState="Pin State=HIGH";//字符串赋值高电平信息 } else { displayPinState="Pin State=LOW"; } esp8266_server.send(200,"text/plaint",displayPinState); } void handleNotFound()//当浏览器访问页面不存在时,通过该函数处理 { /*服务器响应状态码404(未找到浏览器需要的信息),text/plain,表示告诉浏览器接下来要返送信息内容的是一段纯文本信息,信息内容就是404 Not found*/ esp8266_server.send(404,"text/plain","404 Not found"); }

四、通过网络服务将ESP8266的引脚状态显示在网页上。(自动刷新)

代码

 

#include <ESP8266WiFi.h> #include <ESP8266WiFiMulti.h> #include <ESP8266WebServer.h> ESP8266WiFiMulti WiFiMulti;//建立ESP8266WiFiMulti对象,对象名称为WiFiMulti ESP8266WebServer esp8266_server(80);//建立ESP8266WebServer对象,对象名称是“esp8266_server” //括号中的数字是网络服务器响应http请求的端口号 //网络服务器http端口号为80,因此这里使用80为端口号 int LED=D5;//设置指示灯 int BUTTON=D1;//设置按键引脚 bool pinState;//存储按键的状态 void setup() { pinMode(LED,OUTPUT); pinMode(BUTTON,INPUT_PULLUP);//将按键设置为上拉输入。 Serial.begin(9600); WiFiMulti.addAP("vivo","QiFei159874");//这条指令就是告诉ESP8266下面会告诉你多个WiFi网络名称和密码 WiFiMulti.addAP("vivo1","qifei159874");//注意这里的双引号要加上,没加报错 WiFiMulti.addAP("vivo2","QIFEI159874");// digitalWrite(LED,HIGH);//默认LED是熄灭的 //运行自定义函数,当未连接到路由器的过程中,闪烁LED,直到连接成功,点亮LED //gotowifi(); Serial.println("WiFi正在连接中"); int i=0; while(WiFiMulti.run()!=WL_CONNECTED)//WiFiMulti.run()和WiFi.Status()功能一样,都是用来表示当前WiFi连接的状态 { delay(1000); Serial.print("."); } Serial.println('\n'); Serial.print("连接到"); Serial.println(WiFi.SSID()); Serial.print("IP Address: "); Serial.println(WiFi.localIP());//ESP8266的IP地址 /*-------------”启动网络服务功能“程序部分开始------------*/ esp8266_server.begin();//启动网络服务器 esp8266_server.on("/",handleRoot);//on函数的作用就是提供页面服务,告诉MCU通过那个函数访问这个界面“/”页面,就是主页,通过handleRoot函数处理该页面 esp8266_server.onNotFound(handleNotFound);//当请求页面不存在时,通过该函数处理 //----启动网路服务功能部分结束 Serial.println("HTTP esp8266_server Started");//告知用户ESP8266网络服务功能已经启动 } void loop() { esp8266_server.handleClient();//处理HTTP服务器访问 pinState=digitalRead(BUTTON); //Serial.println(digitalRead(BUTTON)); } void handleRoot()//处理网站目录“/”的访问请求 { esp8266_server.send(200,"text/html",SendHtml(pinState)); } String SendHtml(bool buttonState) { String htmlCode="<!DOCTYPE html><html>\n"; htmlCode+="<head><meta http-equiv='refresh' content='1'/>\n"; htmlCode+="<title>ESP8266 Button State</title>\n"; htmlCode+="<style>html {font-family:Helcetica;dispaly:inline-block;margin:0px auto;text-align:center;}\n"; htmlCode+="body{margin-top:50px} h1{coloe:#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 State:HIGH</p>\n"; } else { htmlCode+="<p>Button State:LOW</p>\n"; } htmlCode+="</body>\n"; htmlCode+="</html>\n"; return htmlCode; } void handleNotFound()//当浏览器访问页面不存在时,通过该函数处理 { /*服务器响应状态码404(未找到浏览器需要的信息),text/plain,表示告诉浏览器接下来要返送信息内容的是一段纯文本信息,信息内容就是404 Not found*/ esp8266_server.send(404,"text/plain","404 Not found"); }

 

 

 



    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/20947.html

    分享给朋友:

    “arduino 云服务器 arduino做服务器” 的相关文章

    深入解析APT攻击及其主要案例分析

    在网络安全的领域,APT攻击近年来引起了广泛关注。这种高级持续性威胁(APT)通常是由高度专业化的攻击者发起,针对特定目标进行长期、隐蔽的攻击。APT攻击的目标通常是国家级别的机构、企业、科研单位等,它们的攻击方式不仅难以检测,而且往往具有明显的目的性。 回顾APT攻击的历史,我们可以发现其起源与发...

    AS7473在网络数据传输中的重要性与应用探究

    AS7473简介 AS7473是一个重要的ASN编号,主要与网络数据传输和路由相关。它在信息技术领域中扮演着至关重要的角色,连接着不同的网络节点,确保数据能够顺利传输。想象一下,在这个数字化时代,数据的传输速度和准确性直接影响着我们的工作效率与信息交流。因此,AS7473的定义与重要性绝不容小觑。...

    RackNerd评测:高性价比VPS服务体验与优缺点分析

    谈到VPS主机服务,RackNerd无疑是近年来备受关注的一个名字。成立于2019年的RackNerd,以其高性价比和出色的客户服务,迅速在行业内站稳了脚跟。无论你是个人网站的博主,还是小型企业的运营者,RackNerd都能为你提供一个合适的解决方案。 RackNerd的主要数据中心遍布北美和欧洲,...

    VPS是干嘛用的:解析虚拟专用服务器的优势与应用

    在当今互联网的快速发展下,VPS(Virtual Private Server,虚拟专用服务器)逐渐成为了个人和企业首选的主机类型。简单来说,VPS就是一种将物理服务器分割成多个虚拟服务器的技术。每个虚拟服务器都能独立运行操作系统,用户可以自由管理自己的环境,就像拥有一台独立的服务器一样。VPS通过...

    VPS硬盘清理:提升服务器性能的全面指南

    当我的VPS(虚拟专用服务器)磁盘满了时,事情往往会变得非常棘手。这不仅会导致应用程序的运行速度变慢,甚至可能引发系统崩溃或数据丢失。这样的状况让我不得不思考,定期进行硬盘清理的重要性。其实,维护良好的磁盘使用状况,对于确保服务器的整体性能至关重要。 首先,当VPS磁盘满了,系统的反应速度会明显下降...

    Digital-VM评测:性价比高的VPS主机服务与全球数据中心优势分析

    Digital-VM是一家在2018年成立于美国的主机商,专注于提供VPS主机服务。自成立以来,Digital-VM致力于为全球用户提供高效、低价的云计算解决方案。随着虚拟主机市场的快速发展,Digital-VM不断扩展其服务和产品线,逐渐成长为一家具备竞争力的主机商。在技术方面,Digital-V...