- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
顾名思义,我的Esp32会每隔一个HTTP Post请求就会出现紧急情况。第一个运行正常,第二个运行400错误,Esp panics,然后重新启动。
如果Esp没有提供任何其他功能,那么这将不是一个太大的问题,但是确实可以。结果是它供电的传感器无法正常工作,并给出错误的完整数据。下面我有错误代码。
Verbonden met WiFi, met Ip adres: myip
Distance: 35 cm
Temperatuur: 19.70
Luchtvochtigheid: 74.00
Grondvochtigheid: 4095
Lichsterkte sensor 1: 432.00
Lichsterkte sensor 2: 288.00
Lichsterkte sensor 3: 0.00
HTTP Response code: 200
Test: {"Log":{}}
Distance: 35 cm
Temperatuur: 19.70
Luchtvochtigheid: 74.00
Grondvochtigheid: 4095
Lichsterkte sensor 1: 480.00
Lichsterkte sensor 2: 290.00
Lichsterkte sensor 3: 0.00
HTTP Response code: 400
Test: "Missing values"
Guru Meditation Error: Core 1 panic'ed (InstrFetchProhibited). Exception was unhandled.
Core 1 register dump:
PC : 0xc000e82e PS : 0x00060430 A0 : 0x800d3002 A1 : 0x3ffb1d90
A2 : 0x3ffb1f10 A3 : 0xc000e82e A4 : 0x00000001 A5 : 0x0000ff00
A6 : 0x00ff0000 A7 : 0xff000000 A8 : 0x8015dd02 A9 : 0x3ffc11dc
A10 : 0x3ffba818 A11 : 0x3f401763 A12 : 0x00000002 A13 : 0x0000ff00
A14 : 0x00ff0000 A15 : 0xff000000 SAR : 0x0000000a EXCCAUSE: 0x00000014
EXCVADDR: 0xc000e82c LBEG : 0x400014fd LEND : 0x4000150d LCOUNT : 0xffffffff
Backtrace: 0x4000e82e:0x3ffb1d90 0x400d2fff:0x3ffb1db0 0x400d3071:0x3ffb1dd0 0x400d1c4e:0x3ffb1df0
0x400d6625:0x3ffb1fb0 0x40088f69:0x3ffb1fd0
Rebooting...
ets Jun 8 2016 00:22:57
我的C++代码如下:
// Includen van alle benodigde libraries
#include <Arduino.h>
#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
#include <DHT.h>
// Definen van alle datapins van alle componenten
#define DHTPIN 14
#define DHTTYPE DHT11
#define echoPin 26
#define grondPin 33
#define trigPin 27
#define lichtPin1 32
#define lichtPin2 35
#define lichtPin3 34
//#define redPin 2
//#define greenPin 4
// magic number handlers
const int procentHulpwaarde = -1;
const int nulWaarde = 0;
const int potDiepte = 31;
const int grensWaardepostUpdate = 10;
const int procentRekenwaarde = 100;
const int sensorRekenwaarde = 4095;
const int timerDelaywaarde = 1000;
// Declaratie variabeles
String strluchtvochtigheid;
String strtemperatuur;
String strgrondvochtigheid;
String strlichtsterkte1;
String strlichtsterkte2;
String strlichtsterkte3;
String strwaterniveau;
double dblluchtvochtigheid = nulWaarde;
double dbltemperatuur = nulWaarde;
double lichtSterkte1;
double lichtSterkte2;
double lichtSterkte3;
int distance;
int sensorValueGrond;
int postCounter;
long duration;
unsigned long lastTime = nulWaarde;
unsigned long timerDelay = timerDelaywaarde;
// Aanroepen van benodigdheden voor miscellaneous functies binnen de code
DHT dht(DHTPIN, DHTTYPE);
StaticJsonDocument<200> doc;
// Declaratie van WiFi netwerken die gebruikt kunnen worden
//const char* ssid = "12connect";
//const char* password = "";
// Declaratie van de eindbestemming
const char* serverName = "my target";
void setup()
{
Serial.begin(115200);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
//pinMode(redPin, OUTPUT);
//pinMode(greenPin, OUTPUT);
dht.begin();
WiFi.begin(ssid, password);
Serial.println("Connecting");
while(WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Verbonden met WiFi, met Ip adres: ");
Serial.println(WiFi.localIP());
}
void loop()
{
// Ultrasonic sensor
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
// Natuurkundige berekening voor de hoeveelheid water in het reservoir
distance = duration * 0.034 / 2;
if ((millis() - lastTime) > timerDelay)
{
if(WiFi.status()== WL_CONNECTED)
{
//Lees alle sensoren uit
// DHT sensor
dblluchtvochtigheid = dht.readHumidity();
dbltemperatuur = dht.readTemperature();
// Grondvochtigheids sensor
sensorValueGrond = analogRead(grondPin);
// Ultrasonic sensor
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
// Natuurkundige berekening voor de afstand
distance = duration * 0.034 / 2;
// Lichtsterkte sensoren
lichtSterkte1 = analogRead(lichtPin1);
lichtSterkte2 = analogRead(lichtPin2);
lichtSterkte3 = analogRead(lichtPin3);
// Print alle waardes uit (voor debugging)
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
Serial.print("Temperatuur: ");
Serial.println(dbltemperatuur);
Serial.print("Luchtvochtigheid: ");
Serial.println(dblluchtvochtigheid);
Serial.print("Grondvochtigheid: ");
Serial.println(sensorValueGrond);
Serial.print("Lichtsterkte sensor 1: ");
Serial.println(lichtSterkte1);
Serial.print("Lichtsterkte sensor 2: ");
Serial.println(lichtSterkte2);
Serial.print("Lichtsterkte sensor 3: ");
Serial.println(lichtSterkte3);
HTTPClient http;
http.begin(serverName);
//procentuele omrekening van alle getallen
sensorValueGrond = ((((sensorValueGrond - sensorRekenwaarde) *
procentHulpwaarde) * procentRekenwaarde) / sensorRekenwaarde);
distance = ((distance * procentRekenwaarde) / potDiepte) -
procentRekenwaarde;
lichtSterkte1 = (lichtSterkte1 * procentRekenwaarde) / sensorRekenwaarde;
lichtSterkte2 = (lichtSterkte2 * procentRekenwaarde) / sensorRekenwaarde;
lichtSterkte3 = (lichtSterkte3 * procentRekenwaarde) / sensorRekenwaarde;
// Omzetten van alle getallen naar strings, zo kunnen ze worden
meegegeven in de JSON string
strtemperatuur = strtemperatuur + dbltemperatuur;
strluchtvochtigheid = strluchtvochtigheid + dblluchtvochtigheid;
strwaterniveau = strwaterniveau + distance;
strgrondvochtigheid = sensorValueGrond + strgrondvochtigheid;
strlichtsterkte1 = strlichtsterkte1 + lichtSterkte1;
strlichtsterkte2 = strlichtsterkte2 + lichtSterkte2;
strlichtsterkte3 = strlichtsterkte3 + lichtSterkte3;
// Toevoegen van headers aan de HTTP Post, zo kunnen we gebruik maken van
gebruikersnamen en wachtwoorden
http.addHeader("Content-Type", "application/json");
http.addHeader("X-AUTH-TOKEN", "TEST");
http.addHeader("X-AUTH-ID", "wajdhlawkjhdlawjkdhawkjdh");
http.addHeader("Temperatuur", strtemperatuur);
http.addHeader("Luchtvochtigheid", strluchtvochtigheid);
http.addHeader("Grondvochtigheid", strgrondvochtigheid);
http.addHeader("Waterniveau", strwaterniveau);
http.addHeader("Lichtsterkte1", strlichtsterkte1);
http.addHeader("Lichtsterkte2", strlichtsterkte2);
http.addHeader("Lichststerkte3", strlichtsterkte3);
// HTTP Post
int httpResponseCode = http.POST("{\"Temperatuur\" : "+strtemperatuur+" ,
\"Luchtvochtigheid\" : "+strluchtvochtigheid+" , \"Grondvochtigheid\" :
"+strgrondvochtigheid+" , \"Waterniveau\" : "+strwaterniveau+" ,
\"Lichtsterkte1\" : "+strlichtsterkte1+" , \"Lichtsterkte2\" :
"+strlichtsterkte2+" , \"Lichtsterkte3\" : "+strlichtsterkte3+"}");
String response = http.getString();
Serial.print("HTTP Response code: ");
Serial.println(httpResponseCode);
Serial.print("Test: ");
Serial.println(response);
// Schoon alles op
strtemperatuur = "";
strluchtvochtigheid = "";
strgrondvochtigheid = "";
strlichtsterkte1 = "";
strwaterniveau = "";
strlichtsterkte1 = "";
postCounter = nulWaarde;
http.end();
}
else
{
Serial.println("WiFi Disconnected");
}
lastTime = millis();
}
}
}
enter code here
有谁知道如何解决这个问题?
最佳答案
尝试仅一次全局声明HTTPClient http
,并将其从loop()
中取出。一遍又一遍地重新创建它可能会使您的堆弄得一团糟,因为您经常使用String类,所以堆可能已经很紧。
说到这:最好只对大多数弦进行一次组合,而不是每次在循环中进行组合,在循环中您只需将测量值添加到预制弦即可。
Sterkte!
关于c++ - Esp32紧急每隔一个HTTP发布请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64836033/
我需要一个跟踪付款的结果,我可以在其中查看在过去五个小时内以 15 分钟为间隔使用了多少个付款选项。 我的表“payment_options_log”有两列:payment_option 和 crea
我创建了一个类似于节拍器的 Android 应用程序。实际上我想每 n 毫秒播放一次哔声。为此,我使用了 MediaPlayer 和计时器。 我的代码是这样的: 解决方案 1: start_butto
我有多个 Raspberry Pi 从移动设备收集 wifi 信标并将它们保存在 mySQL 数据库中。我在数据库中创建了一个 View 。数据库中的每个条目都有移动设备 mac 地址、pi id、r
我比较菜鸟我有一个天文台,当我点击一个按钮时它开始计时 crono = (Chronometer) findViewById(R.id.crono); begin= (Button) find
我有一个 python 脚本,我正在运行它,如下所示: python3 ./bin/abc.py --log_file ./web/prr.log 现在我需要确保上述进程每 3 小时运行一次。流程如下
我有以下列表。 vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] inserted_elements = [2, 2, 2, 2, 2] 我想通过插入每两个元素来获得以
我想知道安排代码的最佳方法。我有一个代码可以生成报告并每隔 24 小时向一组人发送邮件。它是一个基于控制台的 Java 应用程序。我想知道安排它的最佳方法。有时我可能需要将其更改为 12 小时间隔。但
这个问题在这里已经有了答案: Run certain code every n seconds [duplicate] (7 个答案) 关闭 8 年前。 我有一个线程类,它的循环需要每秒执行 4 次
我有一个很长的 clojure 字符串,我需要每 2 个字符用空格将其拆分(例如:“1234567890”-->“12 34 56 78 90”。我使用的解决方案是: (->> (partitio
我想在 3 个字符后添加一个冒号。所以“123:456:789:0”我想打印它。我怎样才能做到这一点。现在输出的方式:“123:4567890” String s = "1234567890"; Sy
我有一个包含以下(相关)列的表:id_mi、日期和值。我想使用 y 轴中“值”列中的值和 x 轴中的日期来构建图表,但由于它们很多,我希望图表上的点是 X 行的平均值。 对于这个例子,假设 X = 1
我有一个具有游戏风格元素的应用程序,即使它不是游戏,我有游戏中心正在运行,并且希望每次有 100 个“Chatters”加入他们的群组/论坛时通知当前设备用户。一旦用户达到某些里程碑(1k 订阅/加入
我有以下查询,用于计算每天的 CSR 调用指标和总数。我现在为每日报告运行它的方式是按扩展分组并将 now() 和 curdate() 值放在日期和时间列中。但是,我现在的任务是修改它以获取过去 30
例如,我想在每天凌晨 3 点在两个数据库之间运行同步 ruby 脚本(如果可能的话,在 rails 操作中)。将这些时间存储在数据库中会很好,因为如果同步失败,我想将其设置为在一个小时内重试(在数
我有一个 android studio 项目,它包含 C++ 代码。代码非常大,编译它大约需要 1.5 小时。每次当我点击“运行”或“调试”按钮时,gradle 中的第一个任务是:ProjectNam
所以我正在为现有的 c 应用程序编写一个图形用户界面。 gui 只是一个简单的界面,它只会显示而不会真正向应用程序反馈任何信息。但是如果有一些新信息可用,我需要检查一个链表。 现在我不想使用另一个线程
Java spring - 我有以下 cron 作业的 cron 表达式。 0 0/35 * * * ? 但是上面提到的 cron 表达式每小时触发一次,如下所示 1:35 2:35 3:35 4:3
为了对新表字段进行一些测试,我想伪造测试数据库中现有记录的一些值。我想为表中的每 8 条记录分配一个值。我可以使用以下语法轻松选择每 8 条记录: select * from (select ro
为 CakePHP 1.3 编写一个新功能,我希望密码在 x 天后过期,并在 y 天过期前自动将密码更改为随机字符串,并通过电子邮件向用户发送新密码或登录链接。服务器上的 crontab 是正确的方法
我正在学习 Python 和 Pygame,我要做的第一件事是一个简单的贪吃蛇游戏。我试图让蛇每 0.25 秒移动一次。这是我循环的代码部分: while True: check_for_qu
我是一名优秀的程序员,十分优秀!