ESP32/ESP8266 WIFI接入通过HTTP响应远程控制(附可用源码)

2023-10-30

1.esp32/esp8266相关介绍:

1.1ESP-WIFI工作模式:

ESP共有三种工作模式,分别是无线接入点模式(AP)、无线终端模式STA(Wireless Station)以及混合模式(以上两种模式的混合)。

2.网络连接:

ESP的WiFi设置是储存在它的闪存系统中的。因此在启动ESP8266并连接WiFi时,它都会尝试使用闪存系统中储存的信息来进行WiFi连接

b7f57bab8b9bb0d9865347ff73c9be9b.png

连接网络基本步骤:

1.引用WiFi库 #include <WiFi.h>  /  esp8266使用<ESP8266WiFi.h>
2.配置STA模式下IP地址 config()(非必须)
3.开启STA模式,连接AP WiFi.begin(ssid, password);

0e096146fdd445a5b84c7fa66aba70a5.png

3.配置和代码:

本次我使用的是STA模式接入已创建的AP,再使用ESP利用互联网或局域网向网络服务器发送HTTP请求,并且分析网络服务器返回的HTTP响应信息,进行相应的控制

//#include <ESP8266WiFi.h>
//#include <WiFi.h>   ESP32使用这个头文件就行
#ifndef STASSID
#define STASSID "小奇" // 要接入的wifi名称      
#define STAPSK  "********"   // wifi密码
#endif
 //   esp与被控设备接入同一局域网下 进行网页端HTTPX响应远程控制

const char* ssid = STASSID;
const char* password = STAPSK;

//http://IP/gpio/(0/1)打开网页端控制(低电平亮)
//IP连接成功后由串口发送给上位机


//创建服务器,监听指定端口(led)
WiFiServer server(80);

void setup() {
  Serial.begin(115200);

  // LED
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, 0);

  // 连接 WiFi 
  Serial.println();
  Serial.println();
  Serial.print(F("Connecting to "));
  Serial.println(ssid);
  //  STA模式
  WiFi.mode(WIFI_STA);
  // 开始接入AP
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(F("."));
  }
  Serial.println();
  Serial.println(F("WiFi connected"));

  // 开始连接 WiFi 
  server.begin();
  Serial.println(F("Server started"));

  // 打印IP地址
  Serial.println(WiFi.localIP());
}

void loop() {
  // 检查是否连接成功
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
  Serial.println(F("new client"));

  client.setTimeout(5000); // 默认值1000

  // 读取第一行指令
  String req = client.readStringUntil('\r');
  Serial.println(F("request: "));
  Serial.println(req);

  // 匹配相应指令
  int val;
  if (req.indexOf(F("/gpio/0")) != -1) {
    val = 0;
  } else if (req.indexOf(F("/gpio/1")) != -1) {
    val = 1;
  } else {
    Serial.println(F("invalid request"));
    val = digitalRead(LED_BUILTIN);
  }

  // 设定led状态
  digitalWrite(LED_BUILTIN, val);

 //读取
  while (client.available()) {

    client.read();
  }

 //发送响应给客户端
  client.print(F("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\nGPIO is now "));
  client.print((val) ? F("high") : F("low"));
  client.print(F("<br><br>Click <a href='http://"));
  client.print(WiFi.localIP());
  client.print(F("/gpio/1'>here</a> to switch LED GPIO off, or <a href='http://"));
  client.print(WiFi.localIP());
  client.print(F("/gpio/0'>here</a> to switch LED GPIO on.</html>"));

//客户端实际上会被刷新,然后断开连接
//当函数返回时,'client'对象被销毁(超出范围)
// flush =确保写入的数据被对方接收
  Serial.println(F("Disconnecting from client"));
}

 然后建议的话是直接下载arduino编译器,下载对应的包即可,vscode可能还需要进行一些环境的配置。

然后复制上方代码就可以实现接入WIFI然后在服务端链接进行远程控制了,我这次做的是简单的LED控制,如有需要可以自行进行修改从而达到大家的需求

以上便是本文的所有内容,希望能帮到大家,谢谢!

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ESP32/ESP8266 WIFI接入通过HTTP响应远程控制(附可用源码) 的相关文章

  • 使用 python requests 模块时出现 HTTP 503 错误

    我正在尝试发出 HTTP 请求 但当前可以从 Firefox 浏览器访问的网站响应 503 错误 代码本身非常简单 在网上搜索一番后我添加了user Agent请求参数 但也没有帮助 有人能解释一下如何消除这个 503 错误吗 顺便说一句
  • Apache 未发送 304 响应(如果启用了 mod_deflate 和 AddOutputFilterByType)

    我在 Apache httpd conf 中添加了以下行 AddOutputFilterByType DEFLATE text html text css application javascript application x javas
  • 使用 file_get_content 发布数据

    我已经做了一些关于如何使用的研究file get content与帖子 我也读过this one https stackoverflow com questions 2445276 how to post data in php using
  • 仅从日期计算夏令时

    我正在使用 Arduino 和实时时钟芯片 该芯片补偿了闰年等 因此它始终具有正确的日期 但我认为由于区域复杂性 它不处理夏令时 时钟可以给出日 月 年 从 1 开始 以及星期几 星期日 0 到星期六 6 因为我需要与用户输入的日期和时间进
  • 流星图像、CSS、“普通”Web 服务

    我经常看到这个问题出现 如何在我的 Meteor 网站上放置图像 如何使用 Meteor 托管 标准 网页内容 我尝试添加一个 img src img myimage png 标签但没有图像显示 如何在 Meteor 站点上托管一些文件 将
  • 如何查看点击 HTML 按钮时发出的 POST 请求的地址?

    我正在创建一个涉及网络抓取和网络自动化的项目 我想首先提交此表格 http rgsntl rgs cuhk edu hk rws prd applx2 Public tt dsp timetable aspx http rgsntl rgs
  • 这个重写规则是什么意思?

    我正在安装 phpancake 有一个像这样的文件夹 application install library public sql schema install html install php 这条规则意味着什么 RewriteEngin
  • 如何将所有GET请求查询参数放入Go中的结构体中?

    你好 我想将 get 查询参数转换为 Go 中的结构 例如我有这样的结构 type Filter struct Offset int64 json offset Limit int64 json limit SortBy string js
  • C# HTTP 请求解析器[重复]

    这个问题在这里已经有答案了 可能的重复 将原始 HTTP 请求转换为 HTTPWebRequest 对象 https stackoverflow com questions 318506 converting raw http reques
  • 是否可以使用 http url 作为 DirectShow .Net 中源过滤器的源位置?

    我正在使用 DirectShow Net 库创建一个过滤器图 该过滤器图通过使用 http 地址和 WM Asf Writer 来流式传输视频 然后 在网页上 我可以使用对象元素在 Windows Media Player 对象中呈现视频源
  • 以 REST 方式更新整个资源集合

    我有一个资源列表的 REST URI 例如 http foo com group users 这些用户中的每一个都有一个序列号 我想公开一种方法来为集合中的所有用户重新编号这些值 并使访问该列表的每个人都可以使用此更改 由于这是对整个集合的
  • cookie 在会话结束时或在特定时间过期?

    cookie 是否可以在会话结束时或在特定时间过期 是的 这很简单 HttpCookie newCookie new HttpCookie myCookie newCookie Expires DateTime Today AddDays
  • 使用.pem文件在java中发送https请求

    我有包含证书 私钥和信任链的 pem 文件 以及我使用它生成的 p12 文件openssl pkcs12 导出 openssl pkcs12 export out file p12 in file pem inkey file pem pa
  • 如何找出数据包的HTTP头长度?

    我知道如何手动执行此操作 通过查看十六进制转储 我怎样才能自动获得相同的信息 我必须使用 API 吗 我有wireshark 和Microsoft 网络监视器 这可以通过简单地实现Lua解析器 http wiki wireshark org
  • 如何在 G-WAN 中添加 HTTP/2

    我想知道是否可以通过使用解决方案 nghttp2 https nghttp2 org https nghttp2 org 很抱歉这么晚才回答 出于某种原因 Stackoverflow 没有通知我们这个问题 我之所以找到它只是因为收到了更新的
  • Android 套接字和 HTTP 响应标头

    有趣的是 我可能无意中找到了解决方案是否可以使用普通套接字连接发送 HTTP 请求并接收没有标头的响应 https stackoverflow com questions 8320574 我希望我忽略了一些东西 无论如何 我正在连接到 We
  • 如何解析来自基于 C 的 Web 服务器的 HTTP 请求

    我有一个编程项目 我必须创建一个处理 HTTP 请求的多线程 Web 服务器 我刚刚学习了套接字编程 并且运行了一个客户端和一个服务器 我想知道解析 HTTP 请求标头的最佳方法是什么 我看到了这个 如何用C 解析http请求 https
  • 对于较大的请求正文,Nginx proxy_cache_key $request_body 将被忽略

    我使用 nginx 作为反向代理 我希望它能够缓存 POST 请求 我的后端已正确配置为为 POST 请求返回适当的缓存控制标头 在 nginx 中我配置了 proxy cache methods POST proxy cache key
  • 如何用 C 语言通过 HTTP 协议发送图像?

    我是一名正在做网络服务器练习的学生 我需要一些帮助 我的网络服务器在文本页面上运行良好 但是每当浏览器发送一个 GET img jpg HTTP 1 1请求 我不知道如何处理 我听说 HTTP 协议是基于文本的 那么如何在 HTTP 响应中
  • Angular2:动态同步http请求

    Goal 发出一系列同步 http 请求并能够将它们作为一个可观察流进行订阅 示例 不工作 let query arr test1 test2 test3 function make request query arr if query a

随机推荐

  • 国产操作系统银河麒麟V10下安装部署MySQL

    银河麒麟V10环境安装MySQL 最近在信创操作系统 银河麒麟V10下部署了一遍MySQL 走了点弯路 后来在大佬的指点下成功部署 在此予以记录 准备工作 安装MySQL之前要先检测系统是否带有MySQL和mariadb 如果有建议全部删掉
  • 如何使用CCRenderTexture创建动态纹理 Cocos2d-x 2.1.4

    如何使用CCRenderTexture创建动态纹理 Cocos2d x 2 1 4 本文实践自 Ali Hafizji 的文章 How To Create Dynamic Textures with CCRenderTexture in C
  • 多线程模拟网络抢票

    using System using System Collections using System Collections Generic using System Threading using UnityEngine public c
  • Docker实战

    先部署mysql redis和zookeeper 启动mysql docker run d p 3306 3306 network mynetwork privileged true v Users yaoqiang app data my
  • 新建一个Vue项目后,如何在vue.config,js中配置后端访问地址

    在 Vue 2 项目中 可以通过配置 vue config js 文件来设置后端访问地址 下面是一个简单的示例 在项目根目录下新建 vue config js 文件 如果已存在 则直接编辑该文件 在 vue config js 文件中添加以
  • Ubuntu使用sudo apt install安装时,提示正在等待缓存锁:无法获得锁 /var/lib/dpkg/lock-frontend。锁正由进程 35132(unattended-

    如标题所示 最近想跟着学做一个项目 正准备往Ubuntu上安装gcc和g 当执行命令 sudo apt install gcc g 时 提示信息如图所示 为了解决这个问题 我在网上搜索到了问题出现的原因 以及如何将问题解决 这个问题可以归结
  • Python3 中打的迭代器与生成器

    迭代器 迭代是Python最强大的功能之一 是访问集合元素的一种方式 迭代器是一个可以记住遍历的位置的对象 迭代器对象从集合的第一个元素开始访问 直到所有的元素被访问完结束 迭代器只能往前不会后退 迭代器有两个基本的方法 iter 和 ne
  • 关于从规划云上复制的POI数据转成适合在ArcGis上个导入的csv数据的方法

    首先将规划云上复制的POI数据复制在excel文件中 其次 一次输入如下的公式 MID A1 1 FIND A1 1 MID A1 FIND A1 1 FIND A1 FIND A1 1 FIND A1 1 MID A1 FIND A1 F
  • promQL语法

    文章目录 一 表达式语言数据类型 二 字面量 一 字符串 二 标量 三 时间序列过滤器 一 瞬时向量过滤器 二 区间向量过滤器 三 时间位移操作 四 操作符 一 二元运算符 1 算术二元运算符 2 布尔运算符 3 集合运算符 二 匹配模式
  • 过零检测电路原理与作用 可控整流

    原文地址 http blog 163 com liuyunqian yeah blog static 7039584320104185634579 使用光耦 Multisim仿真电路 网友建议 电容代替那只47K的电阻 330欧电阻直接短路
  • xftp无法链接Linux

    报错信息 SFTP子系统申请已拒绝 请确保SSH连接SFTP子系统设置有效 无法与192 168 0 102 解决方法 编辑 etc ssh sshd config文件 将 Subsystem sftp usr local libexec
  • 6.2、Flink数据写入到Kafka

    目录 1 添加POM依赖 2 API使用说明 3 序列化器 3 1 使用预定义的序列化器 3 2 使用自定义的序列化器 4 容错保证级别 4 1 至少一次 的配置 4 2 精确一次 的配置 5 这是一个完整的入门案例 1 添加POM依赖 A
  • Lua : 函数封装好,用起来就是爽

    目录 1 Lua函数的格式 2 Lua可变参数函数 3 多个返回值的函数 Lua中函数比较简单 只是相比较c c 来说 lua函数的返回值比较特殊 他可以返回一个或者多个值 且值的类型可不相同 1 Lua函数的格式 Lua 函数语法格式 f
  • 刷个宇宙题:剑指 Offer II 006. 排序数组中两个数字之和、 007. 数组中和为 0 的三个数

    题目 006 排序数组中两个数字之和 方法1 哈希表的方式 class Solution public vector
  • 内存函数详细解析 - C语言

    文章目录 前言 1 memcpy 内存拷贝 2 memmove 内存移动 3 memcmp 内存比较 4 memset 内存设置 5 函数代码 5 1memmove代码 5 2memcpy代码 5 3memcmp代码 5 4memset代码
  • 可综合的ROM芯片设计实现-verilog代码

    文章目录 1 基本单元 1 1 最基本cell 1 2 两个存储单位 1 3 八个存储单位 1 4 十六个存储单位 2 使用和测试 2 1 使用 2 2 仿真 本文实现可以综合的ROM模块 由verilog实现 该方法可以用于芯片固化程序的
  • 关于Android Studio中adb识别不了设备问题。

    文章目录 前情提要 第一种 杀进程方式 第二种 复制文件在Windows目录下 第三种 修改adb的端口号 第四种 重启电脑 前情提要 在windows系统中安装adb后 adb connect ip 5555 总是出现5037端口被占用的
  • MATLAB 批量读取NC文件并转为TIF文件

    因为课题处理30年的降雨和蒸发的遥感资料 NC格式 而想要在Arcgis中处理要求的是raster格式的 所以需要批量转化为tif文件 所以在此分享自己改编之后的代码 可以简洁明了的实现这个过程 我所参考和借鉴的文章的链接如下 MATLAB
  • 免费快捷一键生成SSL证书

    https freessl cn https www pianyissl com https certbot eff org 我只用过第一个 因为太强了 差不多五分钟搞定 下面两个是别人推荐的 记录一下使用过程 先注册登录https fre
  • ESP32/ESP8266 WIFI接入通过HTTP响应远程控制(附可用源码)

    1 esp32 esp8266相关介绍 1 1ESP WIFI工作模式 ESP共有三种工作模式 分别是无线接入点模式 AP 无线终端模式STA Wireless Station 以及混合模式 以上两种模式的混合 2 网络连接 ESP的WiF