设置vmware vsphere web client_Arduino+前端高级应用-通过WEB网页控制Arduino开发板上的LED灯...
![](/assets/blank.gif)
在本教程中,让我们继续学习如何控制GPIO 引脚,不过这次进入高级阶段,我们将从一个可以访问的WEB网页中开关led灯。超详细代码解读,前端工程师也可以轻松玩起嵌入式。听起来是不很酷,Let’s go ,让我们开始吧!
项目概述
在本文中,我将向你展示如何控制GPIO引脚。在本教程中,我们从可以用一个网页中来控制led灯的开关,这个网页可以从任何连接互联网的设备访问。
但首先,让我们回顾一下一些基本术语:
Web服务器——软件、硬件或两者的组合,包含处理和传递Web页面所需的文件
Web客户端-可以向Web服务器发送HTTP/ Web请求的任何设备
本地服务器-只能在你的局域网内访问的网络服务器
全球服务器-一个网络服务器,可以通过互联网在任何地方进行访问
HTTP POST—将数据传输到服务器的web请求
HTTP GET—从web浏览器检索数据的web请求
端口转发-一种路由器设置,它将流量从一个广域网路端口导向你局域网内的一个特定设备
组件和供应
Arduino UNO和Genuino UNO开发板 1块
![](/assets/blank.gif)
Espressif ESP8266 ESP-01模块 1块
![](/assets/blank.gif)
实验面包板 1块
![](/assets/blank.gif)
电阻器1 k欧姆 1只
![](/assets/blank.gif)
电阻器10 k欧姆 1只
![](/assets/blank.gif)
跳线(通用) 1包
![](/assets/blank.gif)
LED灯 1只
![](/assets/blank.gif)
2.21 k欧姆电阻 1只
![](/assets/blank.gif)
app和在线服务
- Arduino IDE
- WEB浏览器
硬件连接
用跳线将各部件按下图所示连接:
![](/assets/blank.gif)
和以前一样,我们将使用Arduino UNO来对ESP-01模块编程。为此,我们将通过将RESET 引脚连接到GND来禁用UNO的板载芯片。然后,在Arduino IDE中将通用ESP8266模块设置为您的板。
将GPIO0引脚连接到GND,将ESP-01模块设置为程序模式。同样,在上传前连接并断开ESP-01的复位引脚到GND。
故障排除技巧
- 千万不要忘记将Arduino RESET pin连接到GND。
- 确保上传速率为115200。
- 检查分压器电路的电压读数。它必须给你的RX引脚输出3.3V电压。
- 果你在上传程序到ESP-01时经常出错,把你的ESP8266板库降级到2.5.0版。
- 如果上传后程序没有运行,短暂连接然后再断开ESP-01复位引脚至GND。
代码解读
我们这次只需要esp8266wifi .h这个文件。这是包含在ESP8266板的库中,所以不需要安装它。
#include <ESP8266WiFi.h>
在这里输入您的家庭网络密码。
const char* ssid = "WiFi name";
const char* password = "WiFi password";
将webserver端口号设置为80。
WiFiServer server(80);
Setup()函数部分,将LED引脚设置为输出,并将其初始化为LOW。
有趣的是,ESP-01内置的LED连接到GPIO2上,但低电平有效。如果你将GPIO2引脚设置为低,连接到GPIO2的LED就会关闭,而内置的LED则会亮起。
Setup()函数中还初始化串口监视器。串口监视器用于显示诸如ESP-01的IP地址等信息。它还有助于识别错误。
最后,安装程序使用server.begin()启动web服务器。
void setup()
{
Serial.begin(115200);
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(100);
Serial.print(".");
}
Serial.println("");
Serial.println("Connected to WiFi");
Serial.print("IP: "); Serial.println(WiFi.localIP());
server.begin();
}
接下来,在循环部分中,我们有server.available()。这个函数检测新的web客户端。当没有时,它总是返回false。相反,如果检测到新客户端接入,代码将继续执行到下一行。
WiFiClient client = server.available();
if (!client) {
return;
}
它一直等待,直到客户端发送一个请求。
while(!client.available()){
}
并读取请求,然后将其打印到串口监视器上。flush()函数确保所有传出字符都已发送。
读取请求,然后在串口监视器上打印。这个客户端.flush()函数确保所有输出字符都已经发送。
String request = client.readStringUntil('r');
Serial.println(request);
client.flush();
LED=ON和LED=OFF是我们将用于开关LED的请求的名称。我们将在后面的HTML代码中看到它们。基本上,如果前一行读取LED=ON,程序发送一个高到LED引脚,反之亦然。
int value = LOW;
if (request.indexOf("/LED=ON") != -1) {
digitalWrite(ledPin, HIGH);
value = HIGH;
}
if (request.indexOf("/LED=OFF") != -1){
digitalWrite(ledPin, LOW);
value = LOW;
}
最后,我们使用client.println()创建一个web页面。
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("");
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.print("LED status: ");
if(value == HIGH)
{
client.print("ON");
}
else
{
client.print("OFF");
}
client.println("<br><br>");
client.println("Turn <a href="/LED=ON">ON</a><br>");
client.println("Turn <a href="/LED=OFF">OFF</a><br>");
client.println("</html>");
Serial.println("");
在这里,我们将看到如何将请求命名为LED=ON和LED=OFF。
client.println("Turn <a href="/LED=ON">ON</a><br>");
client.println("Turn <a href="/LED=OFF">OFF</a><br>");
演示
上传程序,打开串口监视器。会出现串行监视器显示乱码,而ESP-01拒绝连接的情况。一个简单的处理方法是连接和断开ESP-01复位引脚到地。
![](/assets/blank.gif)
从任何web浏览器输入串行监视器给定的IP地址。第一行指示LED当前是打开还是关闭。要更改它,只需单击链接。
![](/assets/blank.gif)
代码
#include <ESP8266WiFi.h>
const char* ssid = "WiFi name";
const char* password = "WiFi password";
int ledPin = 2;
WiFiServer server(80);
void setup()
{
Serial.begin(115200);
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(100);
Serial.print(".");
}
Serial.println("");
Serial.println("Connected to WiFi");
Serial.print("IP: "); Serial.println(WiFi.localIP());
server.begin();
}
void loop()
{
WiFiClient client = server.available();
if (!client) {
return;
}
while(!client.available()){
}
String request = client.readStringUntil('r');
Serial.println(request);
client.flush();
int value = LOW;
if (request.indexOf("/LED=ON") != -1)
{
digitalWrite(ledPin, HIGH);
value = HIGH;
}
if (request.indexOf("/LED=OFF") != -1)
{
digitalWrite(ledPin, LOW);
value = LOW;
}
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println(""); // do not forget this one
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.print("LED status: ");
if(value == HIGH)
{
client.print("ON");
}
else
{
client.print("OFF");
}
client.println("<br><br>");
client.println("Turn <a href="/LED=ON">ON</a><br>");
client.println("Turn <a href="/LED=OFF">OFF</a><br>");
client.println("</html>");
Serial.println("");
}
原理图
![](/assets/blank.gif)
设置vmware vsphere web client_Arduino+前端高级应用-通过WEB网页控制Arduino开发板上的LED灯...相关推荐
- arduino 网页服务器,如何将Arduino开发板用作Web服务器
通过使用以太网扩展板(Ethernet shield),您可以将Arduino开发板用作一个Web服务器. 通过向Arduino开发板配备一个以太网扩展板,您可以将其变成简易的Web服务器,并通过在与 ...
- 【linux】ARM开发板上设置RTC时间,断电重启后,设置失效的原因分析
问题描述 linux中使用date设置时间后用hwclock -w同步到RTC,断电重启后,有时会失效 原因分析 保存时间戳 1.使用命令关机(halt)会调用rc0.d中的脚本: 2.使用命令重启( ...
- linux开发板设置时间,开发板上修改时间方法
之前使用开发板时发现每次开机后,系统的时间都恢复到初始状态1970年. 一. 先说一下时钟的概念,时钟包括硬件时钟和系统时钟,系统时钟就是linux系统显示的时间,用命令date可以显示当前系统时间: ...
- 洋桃电子STM32物联网入门30步笔记三、CubeMX图形化编程、设置开发板上的IO口
此文档作为对杨桃电子视频的整理,B站链接:第四集 一.开启RCC的外部时钟.包括外部高速时钟HSE和外部低速时钟LSE 时钟配置三个选项的含义: 选择禁用的话就只能使用内部时钟 旁路时钟源一般是有源晶 ...
- openWRT 系统安装 Web服务器,OpenWRT高级应用之 Web环境搭建(Nginx+Php)
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 php.ini配置文件 #开始 [PHP] zend.ze1_compatibility_mode = Off engine = On precision ...
- EC600 QuecPython下载脚本代码到开发板、设置开机自运行
同专栏的上一篇介绍了 EC600 QuecPython 的开发环境搭建和固件下载,本篇介绍如何 下载脚本代码到开发板.设置开机自运行. 下载脚本到EC600开发板并运行 编辑脚本,建议使用 Pycha ...
- 使用 Packer 自动执行 VMware vsphere 模板
在这篇博客文章中,我想向您展示如何使用 Packer 自动执行 VMware vsphere 模板.我喜欢它,因为packer可以在其他平台上使用,如Hyper-V,Azure,AWS或soagar ...
- java web前端哪个城市,Java Web 是前端还是后端
Java Web 是前端还是后端 Java Web 是前端还是后端? Java Web是属于后端,Java Web就是用Java技术开发的Web应用,而Java是一种可以编写跨平台应用软件.完全面向对 ...
- vmware虚拟机中ubuntu系统里设置USB串口连接海思开发板
vmware虚拟机中ubuntu系统里设置USB串口连接海思开发板 作为海思平台的一个新手,在学习海思开发板时,会因为一个很小的问题折腾半天,但是当解决一个小问题时还是很兴奋的,记录下自己学习过程. ...
最新文章
- mysql 性能优化索引、缓存、分表、分布式实现方式。
- Linux网络性能评估工具iperf
- nlv sqlserver_未能使用提供程序“DataProtectionConfigurationProvider”进行解密。提供程序返回错误消息为: 该项不适于在指定状态下使用...
- Akka之actor模型
- 云计算-My Future, The IT's Future
- 1. jenkins常见错误及解决方法
- unity3d 人物对话_RPG角色对话编辑器系统RPG Conversation/Dialogue Editor 1.2.0
- c 显示服务器相关的图片到对话框,使用MFC CImage类绘制PNG图片时遇到的问题
- 中环混改尚存变数 高调的TCL要上演“资本魔输”?
- 如何快速通过信息系统管理工程师考试
- 2017-2021系统集成项目管理师综合知识易错题整理
- “老K,怎样副业搞钱?”
- 常用标点符号的英文名称
- 无限天空服务器,滚动的天空无限钻石无限金币版
- 计算机表格怎么取消分页,Excel表格自动分页、取消分页等技巧 专家详解
- DROID-SLAM: 单目、双目、RGBD相机的深度视觉SLAM
- 利用micro:bit开发板工具写一个小游戏
- monodepth无监督卷积神经网络深度估计代码解析(一)
- 小米路由器pro装php,关于路由器:小米路由器proR3P安装opkg
- sql2000 安装配置失败 C:\WINNT\sqlstp.log(转)
热门文章
- 网关Spring Cloud Gateway科普
- 细数 Spring 那些最常见的面试问题
- Spring事务“套路”面试
- LiveVideoStack Meet | 苏州:视频会议研发中心一日游
- 音视频技术开发周刊 | 172
- 超高清视觉体验需要哪些技术栈?
- 音视频技术开发周刊 55期
- c语言实现c++的继承和多态
- 重磅亮相KubeCon China,腾讯云为你揭秘国内云商最大容器集群
- 腾讯游戏应邀2019大数据产业峰会BDIC | 荣获“大数据星河奖”并获颁测评证书...