почему это неожиданное поведение проявляется, когда я использую следующий код для отправки данных с ультразвукового датчика расстояния в firebase
Я использую Wi-Fi-модуль NodeMCU esp8266 для отправки данных, полученных ультразвуковым датчиком расстояния, на пожарную базу. вот мой код:
#include <ArduinoJson.h>
#include <ESP8266WiFi.h>
#include <FirebaseArduino.h>
//Firebase settings
#define FIREBASE_HOST "dis3333333333333333aseio.com"
#define FIREBASE_AUTH "Lb21333333333333333333v6HzPatg1HA"
//Wi-Fi settings
#define WIFI_SSID "hello"
#define WIFI_PASSWORD "123456789"
//Define trigger and echo digital pins
const int trigPin = 5;
const int echoPin = 4;
// The amount of time the ultrassonic wave will be travelling for
long duration = 0;
// Define the distance variable
double distance = 0;
double cm=0;
double statusTemp=0;
int temp=0;
unsigned long time_now=0 ;
unsigned long time_prev=0 ;
String stringOne="consump/day";
String stringTwo;
void setup()
{
Serial.begin(9600);
// Connect to Wi-Fi
Serial.print("Wi-Fi...");
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("Connecting...");
while (WiFi.status() != WL_CONNECTED)
{
Serial.print(".");
delay(500);
}
Serial.println();
Serial.print("Connected to: ");
Serial.println(WiFi.localIP());
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
// Ultrasonic sensor, set echo as Input and trigger as Output
}
void loop()
{
getDistance();
time_now = millis();
Serial.print("Distance: ");
Serial.println(distance);
delay(500);
}
void getDistance()
{
pinMode(trigPin, OUTPUT);
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
pinMode(echoPin, INPUT);
Serial.print("Time: ");
Serial.println(time_now);
if(statusTemp==0){
time_prev=time_now;
statusTemp=1;
Serial.println("Hello");
}
if(statusTemp==1)
{
if((time_now - time_prev)> 10000){
statusTemp=0;
stringTwo=stringOne+temp;
Serial.print(stringTwo);
Firebase.setFloat(stringTwo, distance);
temp++;
Serial.print(temp);
}
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2;
Firebase.setFloat("distance", distance);
if (Firebase.failed()) {
Serial.print("setting /number failed:");
Serial.println(Firebase.error());
return;
}
}
}
long microsecondsToCentimeters(long microseconds) {
return microseconds / 29 / 2;
}
Он работает совершенно нормально но через некоторое время появляется следующая вещь Происходит ли следующее из-за моего кода или что-то еще вызывает это?
@Tank, 👍1
Обсуждение0
Смотрите также:
- ESP8266 не подключается к Wi-Fi
- Каково использование зарезервированных контактов и контактов SDD2, SDD3 NodeMCU?
- Обнаружение ESP8266 в сети
- NodeMCU продолжает отключаться
- Соединение сетей Wi-Fi на nodemcu: как настроить esp8266 в качестве расширителя Wi-Fi, простейший случай
- Ошибка запуска FirebaseDemo в NodeMCU
- Как связать MPU9250 и NodeMcu?
- Как изменить тайм-аут загрузки ArduinoOTA?
Похоже на какую-то проблему с памятью (из описаний подобных ошибок, найденных через Google). Вы используете " Строку`, что не очень хорошо. Читайте [запись в блоге Майенко](https://hackingmajenkoblog.wordpress.com/2016/02/04/the-evils-of-arduino-strings/) о зле струн Arduino. Попробуйте вместо этого использовать массивы char (также называемые C-строками). Если это сработает, я напишу полный ответ., @chrisl
вы пробовали декодер исключений? он должен сообщить вам строку кода, которая выходит из строя., @dandavis