Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >发送json对象并重置时esp8266崩溃

发送json对象并重置时esp8266崩溃
EN

Stack Overflow用户
提问于 2021-08-08 04:24:48
回答 1查看 334关注 0票数 0

你好,我正在尝试发送一个使用arduinoJson库的JSON对象。当它是一个小的json对象时,一切都很好,但当它变得更大时,esp8266就会崩溃并重置。我可以在调试时看到它创建了json对象,但是当它使用ajax POST方法发送它时,它就崩溃了。在图片中,您可以看到串行监视器,还可以看到创建了json对象,但是当它发送该对象时,esp8266会崩溃并重新启动Serial debug。我相信问题与这行代码Possible problem有关

esp8266上的代码如下所示。

代码语言:javascript
运行
AI代码解释
复制
#include <Arduino.h>
#include <ArduinoJson.h>
#include <ESP8266WiFi.h>
#include <Hash.h>
#include <WiFiClientSecure.h>
#include <ESPAsyncTCP.h>
#include <ESPAsyncWebServer.h>
#include <FS.h>
#include <Wire.h>
#include "max6675.h"
#include <UniversalTelegramBot.h>
#define BOTtoken "1863133375:AAFE3m83AFQYaRjqOas2Kr-DB5fhbONCZ80"
#define CHAT_ID "-599306428"


const int thermoCS = D8;
const int thermoCLK = D5;
int x = 0;
int r[] = {1,1,1,1,1};
int lk;

int TEMP1[121];
int TEMP2[121];
int TEMP3[121];
int TEMP4[121];
int TEMP5[121];

MAX6675 thermocouple_TEMP1(thermoCLK, thermoCS, D7);
MAX6675 thermocouple_TEMP2(thermoCLK, thermoCS, D6);
MAX6675 thermocouple_TEMP3(thermoCLK, thermoCS, D2);
MAX6675 thermocouple_TEMP4(thermoCLK, thermoCS, D1);
MAX6675 thermocouple_TEMP5(thermoCLK, thermoCS, D0); // esp8266 skal bruge D0, hvor ESP32 skal bruge 0
WiFiClientSecure client;
X509List cert(TELEGRAM_CERTIFICATE_ROOT);
WiFiClientSecure secure_client;
UniversalTelegramBot bot(BOTtoken, secure_client);
// Replace with your network credentials
const char* ssid = "Telenor646209_EXT";
const char* password = "";

// Create AsyncWebServer object on port 80
AsyncWebServer server(80);

String temp5() {
  float f = abs(thermocouple_TEMP5.readCelsius()) ;
    return String(f);
    client.stop();
}
String temp4() {
  float d = abs(thermocouple_TEMP4.readCelsius()) ;
    return String(d);
    client.stop();
}
String temp3() {
  float s = abs(thermocouple_TEMP3.readCelsius()) ;
    return String(s);
    client.stop();
}
String temp2() {
  float a = abs(thermocouple_TEMP2.readCelsius());
    return String(a);
    client.stop();
}

String temp1() {
  float m = abs(thermocouple_TEMP1.readCelsius());
    return String(m);
    client.stop();
}
String TEMP() {
  String Json;
  StaticJsonDocument<54000> doc;
JsonArray Temp1 = doc.createNestedArray("Temp1");
JsonArray Temp2 = doc.createNestedArray("Temp2");
JsonArray Temp3 = doc.createNestedArray("Temp3");
JsonArray Temp4 = doc.createNestedArray("Temp4");
JsonArray Temp5 = doc.createNestedArray("Temp5");
  for (int i = 0; i <= x-1; i++) {
  Temp1.add(TEMP1[i]);
  Temp2.add(TEMP2[i]);
  Temp3.add(TEMP3[i]);
  Temp4.add(TEMP4[i]);
  Temp5.add(TEMP5[i]);
  }
  serializeJson(doc, Json);
  Serial.println(Json);
    return Json;
    client.stop();
}


void setup(){
  // Serial port for debugging purposes
  configTime(0, 0, "pool.ntp.org");      // get UTC time via NTP
  secure_client.setTrustAnchors(&cert); // Add root certificate for api.telegram.org
  Serial.begin(9600);
  // Initialize SPIFFS
  if(!SPIFFS.begin()){
    //Serial.println("An Error has occurred while mounting SPIFFS");
    return;
  }
  // Connect to Wi-Fi
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    //Serial.println("Connecting to WiFi..");
  }
  Serial.println(WiFi.localIP());
  // Print ESP32 Local IP Address
  // Route for root / web page
  server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send(SPIFFS, "/index.html");
  });
  server.on("/temp1", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send_P(200, "text/plain", temp1().c_str());
  });
  server.on("/temp2", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send_P(200, "text/plain", temp2().c_str());
  });
  server.on("/temp3", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send_P(200, "text/plain", temp3().c_str());
  });
  server.on("/temp4", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send_P(200, "text/plain", temp4().c_str());
  });
  server.on("/temp5", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send_P(200, "text/plain", temp5().c_str());
  });
  server.on("/TEMP", HTTP_POST, [](AsyncWebServerRequest *request){
    request->send_P(200, "text/plain", TEMP().c_str());
  });

  // Start server
  server.begin();
    //bot.sendMessage(CHAT_ID, "EPS8266_fyr starter", "");
}
 
void loop(){
 TEMP1[x] = x;//abs(thermocouple_TEMP1.readCelsius()); 
 TEMP2[x] = x;//abs(thermocouple_TEMP2.readCelsius());
 TEMP3[x] = x;//abs(thermocouple_TEMP3.readCelsius());
 TEMP4[x] = x;//abs(thermocouple_TEMP4.readCelsius());
 TEMP5[x] = x;//abs(thermocouple_TEMP5.readCelsius());
  //Serial.print("TEMP værdier:");
  //Serial.print(x);
  //Serial.print(" TEMP1: ");
  Serial.print(TEMP1[x]);
  //Serial.print(" TEMP2: ");
  Serial.print(TEMP2[x]);
 //Serial.print(" TEMP3: ");
  Serial.print(TEMP3[x]);
  //Serial.print(" TEMP4: ");
  Serial.print(TEMP4[x]);
  //Serial.print(" TEMP5: ");
  Serial.println(TEMP5[x]);
  x += 1;
  if(TEMP1[x] >= 35){
  //bot.sendMessage(CHAT_ID, "Nedsfaldsrørs temperatur er over 35°C", "");
 }
  if(x == 120){  
    x=119;
    if(x>118) {
      for (int antal = 0; antal <= 118; antal++){
         TEMP1[antal] = TEMP1[antal+1]; 
         TEMP2[antal] = TEMP2[antal+1];
         TEMP3[antal] = TEMP3[antal+1];
         TEMP4[antal] = TEMP4[antal+1]; 
         TEMP5[antal] = TEMP5[antal+1];  
      }
  
    }
  }
  delay(1000);
}

我的代码的最后一部分是HTML/JAVASCRIPT,它看起来像这样。

代码语言:javascript
运行
AI代码解释
复制
<!DOCTYPE HTML><html>
<head>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <script src="https://code.highcharts.com/highcharts.js"></script>
  <style>
    h2 {
      font-family: Arial;
      font-size: 2.5rem;
      text-align: center;

    }
  </style>
</head>
<body>
  <h2>DASH BOARD</h2>
  <div id="chart-temperature" class="container"></div>
  <p id="demo"></p>
  <p id="demo2"></p>
</body>
<script>
var Json;
var d = new Date();
var h = d.getHours();
var c = d.getMinutes();
var chartT = new Highcharts.Chart({
  chart:{
    renderTo : 'chart-temperature',
    type: 'line',
    zoomType: 'x',
    panning: true,
    panKey: 'shift'
  },
  tooltip: {
  dateTimeLabelFormats: {
    millisecond: "%A, %b %e, %H:%M"
  }
},
  title: { text: 'temperature' },
  series: [{
    name: 'TEMP1',
    showInLegend: true,
    connectNulls: true,
    data: [],
    color: '#FF0000'
  }, {
     name: 'TEMP2',
     connectNulls: true,
    data:[],
    color: '#4572A7'
  },
  {
     name: 'TEMP3',
     connectNulls: true,
    data:[],
    color: '#000000'
  },
  {
     name: 'TEMP4',
     connectNulls: true,
    data:[],
    color: '#0000FF'
  },
  {
     name: 'TEMP5',
     connectNulls: true,
    data:[],
    color: '#6600FF'
  }],

  plotOptions: {
    line: { animation: false,
      dataLabels: { enabled: true }

    },
  },
  xAxis: { type: 'datetime',
    dateTimeLabelFormats: { second: '%H:%M:%S' },
    min: Date.UTC(0,0,0,h,c-120,0), tickInterval: 30*60*1000, max: Date.UTC(0,0,0,h,c,0)
  },
  yAxis: {
    title: { text: 'Temperature (Celsius)' },
    //title: { text: 'Temperature (Fahrenheit)' }
  },
  credits: { enabled: false }
});
Highcharts.setOptions({
    time: {
        useUTC: true
    }
});
function loadall(){
  var m;
  var tid;
  var y1;
  var y;
  var just;
    var xhttp = new XMLHttpRequest();
      xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      if(chartT.series[0].data.length == 0){
        y1 = this.responseText;
        y = JSON.parse(y1);
        just = y.Temp1.length;
      for (let i = 0; i < just; i++) {
         tid = Date.UTC(0,0,0,h,(c-i),0);
            chartT.series[0].addPoint([tid, y.Temp1[just-i-1]], true, false, false);
            chartT.series[1].addPoint([tid, y.Temp2[just-i-1]], true, false, false);
            chartT.series[2].addPoint([tid, y.Temp3[just-i-1]], true, false, false);
            chartT.series[3].addPoint([tid, y.Temp4[just-i-1]], true, false, false);
            chartT.series[4].addPoint([tid, y.Temp5[just-i-1]], true, false, false);
          }
           }
            }
             }
    xhttp.open("POST", "TEMP", true);
    xhttp.send();
  }
  function Load(serie,sensor,tid){
    var xhttp = new XMLHttpRequest();
      xhttp.onreadystatechange = function() {
        var y = parseFloat(this.responseText);
    if (this.readyState == 4 && this.status == 200) {
            chartT.series[serie].addPoint([tid, y], true, true, false);
          }
           }
    xhttp.open("GET", sensor, false);
    xhttp.send();
  }
  loadall();
  setInterval(function(){
    d = new Date();
    h = d.getHours();
    c = d.getMinutes();
    chartT.xAxis[0].update({
        max: Date.UTC(0,0,0,h,c,0),
        min: Date.UTC(0,0,0,h,c-120,0)
    });
    Load(0,"temp1",Date.UTC(0,0,0,h,c,0));
    Load(1,"temp2",Date.UTC(0,0,0,h,c,0));
    Load(2,"temp3",Date.UTC(0,0,0,h,c,0));
    Load(3,"temp4",Date.UTC(0,0,0,h,c,0));
    Load(4,"temp5",Date.UTC(0,0,0,h,c,0));
  }, 60000);

</script>
</html>
EN

回答 1

Stack Overflow用户

发布于 2021-08-10 07:12:05

我找到了导致重置的问题,是ESP8266的看门狗在6秒后重置了它。这意味着我必须重写我的程序,要么将json数组保存在SPIFFS中,要么将其分成更小的部分发送。

修复方法是升级到ESP32,因为ESP8266速度不够快

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68700739

复制
相关文章
Spring Cloud Stream整合Kafka
KafkaProperties-> Consumer->valueDeserializer
用户1215919
2021/12/28
1.3K0
Kafka及Spring Cloud Stream
下载kafka http://mirrors.hust.edu.cn/apache/kafka/2.0.0/kafka_2.11-2.0.0.tgz
HUC思梦
2020/09/03
1.2K0
Spring Cloud Stream与Kafka集成
Spring Cloud Stream是一个用于构建消息驱动的微服务的框架,它为Spring Boot应用程序提供了与消息代理集成的声明式模型。在本文中,我们将探讨如何使用Spring Cloud Stream与Kafka集成,以及如何构建一个使用Kafka作为消息代理的Spring Boot应用程序。
堕落飞鸟
2023/04/12
1.5K0
Spring Cloud Stream与Kafka集成示例
下面是一个完整的示例,它使用Spring Cloud Stream和Kafka来创建一个简单的消息处理器和发布器:
堕落飞鸟
2023/04/12
1.2K0
spring-cloud-stream-binder-kafka属性配置
本文简单介绍下spring-cloud-stream-binder-kafka的一些属性配置。
code4it
2018/09/17
3.9K0
Kafka设计解析(七)- Kafka Stream
Kafka Stream背景 Kafka Stream是什么 Kafka Stream是Apache Kafka从0.10版本引入的一个新Feature。它是提供了对存储于Kafka内的数据进行流式处理和分析的功能。 Kafka Stream的特点如下: Kafka Stream提供了一个非常简单而轻量的Library,它可以非常方便地嵌入任意Java应用中,也可以任意方式打包和部署 除了Kafka外,无任何外部依赖 充分利用Kafka分区机制实现水平扩展和顺序性保证 通过可容错的state store实
Jason Guo
2018/06/20
2.3K2
kafka stream简要分析
kafka历史背景 Kafka是2010年Kafka是Linkedin于2010年12月份开源的消息系统,我接触的不算早,大概14年的时候,可以看看我们14年写的文章《高速总线kafka介绍》。 消息总线一直是作IT系统集成的核心概念,IBM/oracle等传统厂商都有相关中间件产品。传统消息中间件解决是消息的传输,一般支持AMQP协议来实现,如RabbitMQ。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。AMQP协议更多用在企业系统内,对数据一致性、稳定性和可靠性要求
大数据和云计算技术
2018/03/08
1.3K0
kafka stream简要分析
kafka stream word count实例
kafka呢其实正道不是消息队列,本质是日志存储系统,而stream processing是其最近大力推广的特性,本文简单介绍下word count的实例。
code4it
2018/09/17
1K0
Kafka核心API——Stream API
Kafka Stream是Apache Kafka从0.10版本引入的一个新Feature,它提供了对存储于Kafka内的数据进行流式处理和分析的功能。简而言之,Kafka Stream就是一个用来做流计算的类库,与Storm、Spark Streaming、Flink的作用类似,但要轻量得多。
端碗吹水
2020/09/23
3.7K0
Kafka核心API——Stream API
kafka stream errorlog报警实例
log4j-core-2.7-sources.jar!/org/apache/logging/log4j/core/appender/mom/kafka/KafkaAppender.java
code4it
2018/09/17
6460
Kafka Stream(KStream) vs Apache Flink
腾讯云流计算 Oceanus 是大数据实时化分析利器,兼容 Apache Flink 应用程序。新用户可以 1 元购买流计算 Oceanus(Flink) 集群,欢迎读者们体验使用。
吴云涛
2021/11/28
4.9K0
Kafka Stream(KStream) vs Apache Flink
Spark Stream对接kafka 源码分析
本文会讲解Spark Stream是如何与Kafka进行对接的,包括DirectInputStream和KafkaRDD是如何与KafkaConsumer交互的
平凡的学生族
2020/06/29
9760
单元测试(Spring)
YGingko
2017/12/28
4.7K0
【首席架构师看Event Hub】Kafka深挖 -第2部分:Kafka和Spring Cloud Stream
在这个博客系列的第1部分之后,Apache Kafka的Spring——第1部分:错误处理、消息转换和事务支持,在这里的第2部分中,我们将关注另一个增强开发者在Kafka上构建流应用程序时体验的项目:Spring Cloud Stream。
架构师研究会
2019/10/23
2.6K0
【首席架构师看Event Hub】Kafka深挖 -第2部分:Kafka和Spring Cloud Stream
Spring单元测试
单元测试对开发来说是一种基本素养。Java这方面的工业标准是使用JUnit。在使用了Spring框架及其衍生的相关框架后,会有不同程度的变化。
李鸿坤
2020/11/03
1.2K0
​玩转Kafka—Spring整合Kafka
参考文章:https://www.cnblogs.com/angelyan/p/10800739.html
闫同学
2022/10/31
8660
​玩转Kafka—Spring整合Kafka
Spring Cloud Task 集成Spring Cloud Stream
pring Cloud Task和Spring Cloud Stream都是Spring Cloud的组件,它们都提供了处理消息的功能。
堕落飞鸟
2023/04/17
7600
Spring cloud stream【消息分组】
  上篇文章我们简单的介绍了stream的使用,发现使用还是蛮方便的,但是在上个案例中,如果有多个消息接收者,那么消息生产者发送的消息会被多个消费者都接收到,这种情况在某些实际场景下是有很大问题的,比如在如下场景中,订单系统我们做集群部署,都会从RabbitMQ中获取订单信息,那如果一个订单同时被两个服务获取到,那么就会造成数据错误,我们得避免这种情况。这时我们就可以使用Stream中的消息分组来解决了!
用户4919348
2019/07/03
1.1K0
Spring cloud stream【消息分组】
Spring Cloud 系列之 Spring Cloud Stream
比如用户在电商网站下单,下单完成后会给用户推送短信或邮件,发短信和邮件的过程就可以异步完成。因为下单付款是核心业务,发邮件和短信并不属于核心功能,并且可能耗时较长,所以针对这种业务场景可以选择先放到消息队列中,有其他服务来异步处理。
古时的风筝
2019/09/29
1.7K0
Spring Cloud 系列之 Spring Cloud Stream
Spring Cloud Stream和 Kafka 的那点事,居然还有人没搞清楚?
Spring Cloud Stream is a framework for building highly scalable event-driven microservices connected with shared messaging systems.
Java程序猿阿谷
2020/07/29
1.9K0
Spring Cloud Stream和 Kafka 的那点事,居然还有人没搞清楚?

相似问题

Spring Kafka Stream未编写

129

Spring cloud stream with bind kafka

15

Spring cloud stream / Kafka异常

2138

如何使用Kafka DSL对Spring Cloud Stream进行单元测试

168

如何使用Kafka Streams对Spring Cloud Stream进行单元测试

114
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档