ESP8266 在简单的 http 请求后崩溃

2024-01-03

我正在使用 NodeMCU V3 模块。每当我尝试向服务器发出 http 请求时,模块就会崩溃。

这是代码:

void setup() {
    WiFi.begin("wifi-name", "wifi-password");  

    while (WiFi.status() != WL_CONNECTED) {  //Wait for the WiFI to connect }
}
void loop() {
   HTTPClient http; 
   WiFiClient client;

   http.begin( client, "server-address" );  

   int httpCode = http.GET();  
   String payload = http.getString();  //Get the response payload

   Serial.println(httpCode);   //Print HTTP return code
   Serial.println(payload);    //Print request response payload

   http.end();  //Close connection

   delay( 1000 );
}

这是结果,如串行监视器中所示:

200
["JSON response from the server"]

Exception (28):
epc1=0x40212e82 epc2=0x00000000 epc3=0x00000000 excvaddr=0x000001b6 depc=0x00000000

>>>stack>>>

ctx: cont
sp: 3ffffc90 end: 3fffffc0 offset: 01a0
3ffffe30:  00000000 4bc6a7f0 0000333f 3ffee5f8  
3ffffe40:  00000000 00000000 4bc6a7f0 00000000  
[...] 
3fffffb0:  feefeffe feefeffe 3ffe84e8 40100c41  
<<<stack<<<

奇怪的是,它正确地从服务器检索响应,但大约一秒钟后,它向串行监视器吐出异常并重置。起初我以为这可能是因为我同时运行 ESP8266WebServer,但即使我运行我在互联网上找到的最基本的示例,它仍然崩溃。我尝试在 Arduino IDE 而不是 PlatformIO 上编译相同的代码,甚至使用不同的 NodeMCU,但无济于事。

编辑:再玩一会儿后,似乎将延迟设置为至少 10 秒会使 NodeMCU 在 3 个请求后崩溃,而不是在第一个请求后崩溃。难道是几次请求之后内存就溢出了?我是否遗漏了让 ESP8266 为新请求做好准备的关键部分?


无需在中重新创建 WiFi 和 HTTP 客户端loop()一遍又一遍地。您可以在全局范围内声明一次它们。这是这个简单草图的稳定版本:

#include <Arduino.h>

#include <ESP8266WiFi.h>
#include <ESPHTTPClient.h>

HTTPClient http; 
WiFiClient client;

void setup() {
  Serial.begin(115200);
  Serial.println();
  WiFi.begin("****", "****");  

  Serial.print("Connecting to WiFi");
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("done.");
}

void loop() {
  http.begin(client, "http://httpbin.org/get"); // <1KB payload
//  http.begin(client, "http://www.geekstips.com/esp8266-arduino-tutorial-iot-code-example/"); // 30KB payload

  int httpCode = http.GET();  
  String payload = http.getString();  //Get the response payload

  Serial.println(httpCode);   //Print HTTP return code
  Serial.println(payload);    //Print request response payload

  http.end();  //Close connection

  Serial.printf("Free heap: %d\n", ESP.getFreeHeap());
  delay(1000);
}

报告的空闲堆随着时间的推移非常稳定。 请记下我在注释行中添加的用于测试的第二个 URL。那http.getString()对于较小的资源来说很方便并且效果很好,但是对于较大的资源会产生意想不到的结果,即错误的结果 - 您只能看到打印到控制台的一小部分主体。

对于较大的有效负载,您应该直接使用低级 WiFiClient 并逐行或逐字符读取/解析响应。请参阅以下位置的文档:https://arduino-esp8266.readthedocs.io/en/latest/esp8266wifi/client-examples.html https://arduino-esp8266.readthedocs.io/en/latest/esp8266wifi/client-examples.html作为模板。

void loop()
{
  WiFiClient client;

  Serial.printf("\n[Connecting to %s ... ", host);
  if (client.connect(host, 80))
  {
    Serial.println("connected]");

    Serial.println("[Sending a request]");
    client.print(String("GET /") + " HTTP/1.1\r\n" +
                 "Host: " + host + "\r\n" +
                 "Connection: close\r\n" +
                 "\r\n"
                );

    Serial.println("[Response:]");
    while (client.connected() || client.available())
    {
      if (client.available())
      {
        String line = client.readStringUntil('\n');
        Serial.println(line);
      }
    }
    client.stop();
    Serial.println("\n[Disconnected]");
  }
  else
  {
    Serial.println("connection failed!]");
    client.stop();
  }
  delay(5000);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ESP8266 在简单的 http 请求后崩溃 的相关文章

  • ESP8266使用邮件客户端 Arduino 库发送邮件(兼容ESP32)

    使用 ESP8266 发送邮件可以方便地处理各种事情 可以让 ESP8266 直接访问您的邮件服务器 例如 Gmail Hotmail Outlook 并通过它发送邮件 但许多邮件服务器会拒绝从不同于邮件服务器的域 您的 ip 发送的邮件
  • ESP8266与网络服务器实时通讯

    目前 所有已呈现的通信都是基于请求响应方法的 其中一个实体正在发送请求 另一实体正在发送回响应 但是在某些情况下 您需要ESP8266模块与服务器之间的实时通信 而不仅仅是事务 实时通讯协议 ESP8266流数据 要从ESP8266流传输数
  • 【ESP8266】关于调试fatal exception/自动重启的一些经验分享

    本人小白一枚 最近在捣鼓ESP8266的NONOS SDK开发 本来已经写好了一个工程测试基本功能也没什么问题了 但是发现了一个很严重的问题 就是每次一跑上40来分钟的时候 就会宕机重启 自动重启 真是奇了个怪了 本来这也没啥 但出于对稳定
  • Anduino+esp8266_relay继电器 开发智能开关,APP可远程控制

    一 准备工作 1 在网上要购买一块ESP8266 01s带relay继电器的 价格10几元 2 网上购买一个USB转TTL的转接头 我自己用是CH340 价格几元 3 找一个服务器 当然免费的最好 我用的是酱菜创客平台 此平台是给创客提供一
  • NodeMcu arduino ESP8266 使用WIFIManager 库

    WiFiManager库使用说明 提示 这里可以添加系列文章的所有文章的目录 目录需要自己手动添加 例如 第一章 Python 机器学习入门之pandas的使用 提示 写完文章后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 W
  • arduino IDE搭建ESP8266开发环境和简单使用

    arduino IDE搭建ESP8266开发环境和简单使用 文章目录 arduino IDE搭建ESP8266开发环境和简单使用 安装 下载IDE 在Arduino IDE上安装esp8266库 下载安装esp8266库 使用 选择开发板
  • ESP8266恒温控制器

    本文 我们将使用ESP8266构建家用恒温器 温控器将具有以下功能 它将从DHT22温度传感器读取温度 它将温度与所需温度进行比较 如果高于它 它将触发继电器关闭 如果低于它 它将触发继电器打开 在此之前 首先了解下ESP8266如何保持温
  • 从零开始的ESP8266探索(16)-扫描网络演示

    文章目录 目的 使用演示 同步扫描 异步扫描 总结 目的 ESP8266可以通过扫描获取周围环境中的WiFi热点 所以我们也可以先扫描一下再决定连接到某个网络上 这也是一种常见的应用场景 使用演示 同步扫描 使用下面代码进行同步扫描 同步扫
  • ESP32/ESP8266使用MicroPython控制DHT11/DHT22

    本教程介绍了如何使用MicroPython固件将DHT11或DHT22温度和湿度传感器与ESP32和ESP8266开发板一起使用 DHT模块 刷新MicroPython固件 要遵循本教程 您需要在ESP32或ESP8266板上安装Micro
  • 【ESP8266 快速入门】示例5:Arduino环境实现OTA无线升级固件功能WebServer网页服务器方式

    主题 使用 ESP8266 Arduino环境实现OTA无线升级固件功能 由LED闪烁程序通过OTA升级为PWM呼吸灯程序 目录 主题 0 引言 1 环境准备 2 OTA步骤 2 1 OTA的基础程序 LED闪烁 2 2 OTA的升级程序
  • 解决vscode找不到arduino esp8266头文件

    用Arduino IDE写ESP8266没有代码补全 不能跳转查看头文件 个人觉得这是最难受的 vscode装上Microsoft的arduino扩展后 有时候会找不到头文件 刚开始自己傻傻的一个个往includePath里面添加 后来在引
  • 玩转ESP8266-01——AT指令集

    该指令集是接上一个 链接 初识AT指令 全部是根据本人在使用esp8266过程中用过的指令 可能有不全 有错误 还请理解指正 一起学习 AT指令集 一 基础指令 1 测试指令 2 复位指令 重启 二 设置指令 1 设置波特率 2 设置工作模
  • 使用ESP8266接入“天猫精灵”控制七彩灯(WS2812)的颜色/亮度-开源

    目录 演示视频 1 准备工作 1 1 原理 1 2 使用的硬件以及硬件连接图 1 3 开发环境准备 Arduino开发环境 安装ESP8266的扩展 安装blinker Arduino库 安装blinker APP 下载ws2812的驱动库
  • Arduino for ESP8266&ESP32适用库ESPAsyncWebServer:快速入门

    文章目录 目的 特征 安装 快速体验 注意事项 总结 目的 Arduino for ESP8266 和 Arduino for ESP32 中默认就有WebServer 不过这些WebServer都是同步的 不支持同时处理多个连接 这在很多
  • 制作OLED图标

    制作OLED图标 陈拓 2021 06 24 2021 06 26 1 概述 制作用于OLED显示的图标 获取C语言图像点阵数据 2 图标库 先准备图标图像 可以从图标库中找需要的图案 下面两个是我常用的图标网站 2 1 Font Awes
  • 在Mac上安装ArduinoIDE并布置环境支持NodeMcu

    前言 笔者最近在研究Swoole 因为对物联网很感兴趣 在某宝上买来了 NodeMcu 开发板 关于NodeMcu大家请提前做好功课 我选择的是CP2102版 Swoole TCP Server负责和小车通讯 Swoole WebScoke
  • ESP8266 for Arduino IDE (xtensa-lx106-elf-gcc) 和 std::map 链接错误

    是否可以将地图与 ESP8266 一起用于 Arduino 包 这是我的代码 include
  • 使用 PubSubclient 在 esp8266 和 arduino 之间进行 mqtt

    我正在使用 WiFiEsp 库将 ESP8266 与 arduino 结合使用 我想与 arduino 建立 MQTT 连接 所以我使用 PubSubclient 库 我收到错误 正在尝试 MQTT 连接 失败 rc 2 5 秒后重试 我的
  • ESP8266 在简单的 http 请求后崩溃

    我正在使用 NodeMCU V3 模块 每当我尝试向服务器发出 http 请求时 模块就会崩溃 这是代码 void setup WiFi begin wifi name wifi password while WiFi status WL
  • Sntp.sync() 忽略服务器

    我一直在尝试与 ntp 服务器同步时间 但是 nodemcu 似乎忽略了服务器参数 sync lua sntp sync fr pool ntp org function tm rtctime epoch2cal rtctime get p

随机推荐

  • 错误:安装 mysql2 时出错:错误:无法构建 gem 本机扩展

    我在尝试为 Rails 安装 gem install mysql2 v 0 3 17 时遇到一些问题 当我尝试通过运行 gem install mysql2 v 0 3 17 或 gem install mysql2 v 0 3 17 来安
  • getLoginStatus javascript facebook 在页面重新加载时消失

    我实现了 facebook connect 并且工作正常 该函数在登录后返回我的名字 FB getLoginStatus function response if response response status connected FB
  • .onload 从 Firefox 扩展调用多次

    我正在开发一个 Firefox 扩展并具有以下代码 function initialize For accessing browser window from sidebar code var mainWindow window Query
  • IE 中的事件处理

    我下面包含的代码允许我在用户第一次将鼠标悬停在元素上时执行某些操作 然后删除该事件 它在 W3C 事件模型浏览器中运行良好 但在 IE6 8 中不断抛出错误 我从另一个问题中得到了代码 并相信它可以处理 IE 有人看到我做错了什么吗
  • 如何使用 Tesseract OCR 从图像中读取表格数据?

    有谁知道如何从图像中读取和解析任何表格数据 我正在使用 asp net 应用程序 并且已使用 Tesseract OCR API 成功读取数据 但无法从图像读取表格 请用c 代码给出解决方案 None
  • 在 div 上使用 .FindControl() 失败

    我有一个 html div 元素 其中包含多个 div 其值我想放入数组服务器端 我的 html div 看起来像 div div class box 2 div div class box 1 div div class box 3 di
  • jQuery:如何找到第一个可见的输入/选择/文本区域(不包括按钮)?

    I tried input not input type button input type submit button visible first 但它没有找到任何东西 我的错误是什么 UPD 我在 document load 上执行此操
  • Python循环遍历Excel表格,放入一个df中

    我有一个 Excel 文件foo xlsx约40张sh1 sh2等 每张纸的格式为 area cnt name nparty1 name nparty2 blah 9 5 5 word 3 7 5 在每张表中 我想用以下格式重命名变量nam
  • 比特币地址生成出现Python错误

    我正在尝试用 python 来理解比特币 并尝试创建我自己的虚荣地址生成器 下面是 while 循环的片段 循环运行大约 10 次后 我不断收到错误消息 任何帮助将不胜感激 我搜索了论坛并找到了答案 但它们不起作用 IE 我改变了 inte
  • XP 和 Server 2003 上并发调用时 wmic 失败

    我在用wmic以获得时间 我已将其范围缩小到一 1 行 bat 文件 我从 stackoverflow 学到了有关管道 stdin 和 stdout 以避免挂起的知识 C gt type t bat TYPE NUL wmic os get
  • ASP.Net 3.5/4.0 代码隐藏还是代码文件?

    我读了之前的帖子 代码文件与代码隐藏 https stackoverflow com questions 73022 codefile vs codebehind 但我仍然很困惑应该使用哪个 听起来 CodeFile 是应该使用的较新选项
  • 创建一系列文本剪辑并使用 moviepy 将它们连接成视频

    在 MoviePy 中 有一个 API 可以从文本创建剪辑以及连接剪辑列表 我正在尝试在循环中创建剪辑列表 然后尝试将它们连接起来 问题是每次它都会创建一个 25 秒的视频文件 并且循环中仅包含最后一个文本 这是代码 for text in
  • 如何在没有原型的情况下找到C函数?

    公司政策规定 C 源代码中的每个函数都有一个原型 我继承了一个有自己的 make 系统的项目 所以我cannot在 gcc 或 Visual Studio 上测试它 发现其中一个文件有一些没有原型声明的静态函数 有没有办法 不一定使用编译器
  • 如何在Android上将GPS坐标保存在exif数据中?

    我正在将 GPS 坐标写入 JPEG 图像 并且坐标是正确的 如我的 logcat 输出所示 但它似乎以某种方式被损坏 读取 exif 数据会导致空值 或者对于我的 GPS 512 976698 degrees 512 976698 deg
  • 使用 VBA 从 Outlook 2010 保存 .XLSX 附件

    我们使用 Outlook 2010 并接收带有 Excel 附件的电子邮件 我们手动将附件保存在我们在网络驱动器上的分区文件夹中创建的子文件夹中 我很好奇的是是否有可能 使用代码检查传入的电子邮件以查看它们是否有附件 然后检查附件是否为 X
  • 内存间接寻址 movl - 汇编

    我试图了解内存间接寻址在具有 AT T 语法的汇编语言中到底是如何工作的 movl eax ebx movl eax ebx 这是一个类似的问题 解释了内存间接寻址 https stackoverflow com questions 161
  • 是否可以使 JavaFX 中的 ImageView 响应式?

    我和一些朋友正在进行一个项目 我们尝试用 JavaFX 编写游戏 我们有一个 GridPane 它与内部的 ImageView 一起生长以容纳地图和游戏角色等 游戏角色和敌人将有自己的图像视图 我们可以在网格窗格中移动 所以 我们现在的问题
  • 尝试禁用 JInternalFrame 的拖动

    我已经四处寻找了一段时间 但找不到禁用拖动 JIntenal Frame 的方法 任何帮助将不胜感激 TYIA 罗兰 请记住这是一个小程序 import java awt import java applet import java awt
  • 如何查询NHibernate的特定类型?

    我使用 Fluent NHibernate 和 DiscrimminateSubClassesOnColumn 来支持子类化 用于区分子类的列未映射到实体上的实际属性 如何创建仅返回给定类型实体的查询 这是我的尝试 其中 propertyN
  • ESP8266 在简单的 http 请求后崩溃

    我正在使用 NodeMCU V3 模块 每当我尝试向服务器发出 http 请求时 模块就会崩溃 这是代码 void setup WiFi begin wifi name wifi password while WiFi status WL