Dear Mobizt,
Can you help me with the following. Since a few days I'm having problems with the Firebase connection to my Arduino nano 33 IoT. The Arduino establishes the code, but won't keep it running. After some time, it just says 'connection refused', or 'connection lost'. After that it says 'stream timeout'.
Maybe it's my code?
`
#include <Wire.h>
#include <Adafruit_NeoPixel.h>
#include "paj7620.h"
#include "Firebase_Arduino_WiFiNINA.h"
FirebaseData HeartbeatData;
#define PIN_RING 5
#define NUMPIXELS_RING 9 //Coded as GRB
String heartbeatLevel = ""; //Stresslevel indicator
int previousGestureTime = 0;
Adafruit_NeoPixel pixels_ring = Adafruit_NeoPixel(NUMPIXELS_RING, PIN_RING, NEO_RGB + NEO_KHZ800);
// constants for min and max PWM
const int minPWM = 0;
const int maxPWM = 65;
// Global Fade Value
// but be bigger than byte and signed, for rollover
float fadeValue = 0;
int InOrOut = 1;
// How smooth to fade?
float fadeIncrement = .075;
float fadeIncrementFire = .2;
// millis() timing Variables
int previousFadeMillis;
unsigned long previousDatabaseCheck;
unsigned long currentMillis = 0;
unsigned long previousMillis;
// How fast to increment?
const unsigned long fadeInterval = 3000;
const unsigned long fadeIntervalFire = 1000;
const unsigned long holdBreathInterval = 1; // Must be longer than time it takes to light the LEDS!
int excerciseID = 0;
boolean excerciseChosen = false;
boolean gestureOK = false;
boolean once = false;
boolean notBreathing = true;
void setup() {
pixels_ring.begin(); // This initializes the NeoPixel library.
pixels_ring.setPixelColor(NUMPIXELS_RING, pixels_ring.Color(0, 0, 0)); //Set all pixels to OFF
pixels_ring.show(); // This sends the updated pixel color to the hardware.
Serial.begin(9600);
uint8_t error = 0;
error = paj7620Init(); // initialize Paj7620 registers
if (error) {
Serial.print("INIT ERROR,CODE:");
Serial.println(error);
} else {
Serial.println("INIT OK");
}
Serial.println("Please input your gestures:\n");
Serial.print("Connecting to Wi-Fi");
int status = WL_IDLE_STATUS;
while (status != WL_CONNECTED) {
status = WiFi.begin(secret, secret);
Serial.print(".");
for (int i = 0; i < NUMPIXELS_RING; i = i + 1) {
pixels_ring.setPixelColor(i, pixels_ring.Color(0, 0, 0)); //White neutral color LEDS
pixels_ring.show();
}
delay(50);
}
Serial.println("Connected with IP: ");
Serial.println(WiFi.localIP());
for (int i = 0; i < NUMPIXELS_RING; i = i + 1) {
pixels_ring.setPixelColor(i, pixels_ring.Color(50, 0, 0)); //White neutral color LEDS
pixels_ring.show();
}
delay(2000);
for (int i = 0; i < NUMPIXELS_RING; i = i + 1) {
pixels_ring.setPixelColor(i, pixels_ring.Color(0, 0, 0)); //White neutral color LEDS
pixels_ring.show();
}
Firebase.begin("secret", "secret", "secret", "secret");
Firebase.reconnectWiFi(true);
if (!Firebase.beginStream(HeartbeatData, "/actions/excercise")) {
Serial.println("------Can't begin stream connection------");
Serial.println("REASON: " + HeartbeatData.errorReason());
Serial.println();
}
if (Firebase.setBool(HeartbeatData, "/actions/response", false)) {} //Variabelen uitzetten
if (Firebase.setBool(HeartbeatData, "/actions/stopped", false)) {} //Variabelen uitzetten
if (Firebase.setBool(HeartbeatData, "/actions/response-breath", false)) {} //Variabelen uitzetten
if (Firebase.setBool(HeartbeatData, "/actions/response-negative", false)) {} //Variabelen uitzetten
}
void loop() {
normalBehaviour();
}
void normalBehaviour() {
int val = 0;
if (!Firebase.readStream(HeartbeatData)) {
Serial.println("Can't read stream data");
Serial.println("REASON: " + HeartbeatData.errorReason());
Serial.println();
}
if (HeartbeatData.streamTimeout()) {
Serial.println("Stream timeout, resume streaming...");
Serial.println();
}
if (HeartbeatData.streamAvailable()) {
Serial.println("-------Stream Data available-------");
Serial.println("STREAM PATH: " + HeartbeatData.streamPath());
Serial.println("EVENT PATH: " + HeartbeatData.dataPath());
Serial.println("DATA TYPE: " + HeartbeatData.dataType());
Serial.println("EVENT TYPE: " + HeartbeatData.eventType());
Serial.print("VALUE: ");
if (HeartbeatData.dataType() == "int") {
Serial.println(HeartbeatData.intData());
}
Serial.println();
val = HeartbeatData.intData();
}
if (val == 101) {
heartbeatLevel = "high";
}
if (val == 100) {
heartbeatLevel = "normal";
}
if (val == 99) {
heartbeatLevel = "low";
}
if (val == 404) {
excerciseChosen = false;
gestureOK = false;
}
if (val == 303) {
gestureOK = false;
}
if (val == 304) {
gestureOK = true;
}
else if (val > 0 && val < 60) {
excerciseID = val;
excerciseChosen = true;
gestureOK == false;
}
else if (excerciseChosen == true) {
uint8_t data = 0, data1 = 0, error;
error = paj7620ReadReg(0x43, 1, &data);
if (excerciseID == 51 || excerciseID == 52) {
if (gestureOK == false) {
switch (data) {
case GES_UP_FLAG:
//some code
break;
case GES_DOWN_FLAG:
//some code
break;
default:
//some code
break;
}
}
else if (gestureOK == true) {
switch (data) {
case GES_FORWARD_FLAG:
//some code
break;
}
}
}
if (excerciseID == 1 || excerciseID == 2 || excerciseID == 6 || excerciseID == 7 || excerciseID == 21) {
if (gestureOK == false) {
switch (data) {
case GES_UP_FLAG:
//some code
break;
case GES_DOWN_FLAG:
//some code
break;
default:
//some code
break;
}
} else if (gestureOK == true) {
switch (data) {
case GES_FORWARD_FLAG:
//some code
break;
}
}
}
}
}
`
Maybe it's the combination with the PAJ7620 Gesture sensor of the Neopixel library I'm using in my compelte code? Hope you can help me!
Greetz,
Fre