#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <Wire.h>
#include <WiFi.h>
#include "FS.h"
#include "SD.h"
#include "SPI.h"
#include "ThingsBoard.h"
#include "PubSubClient.h"
#include "DHTesp.h"
#define token "LT8NXAobdWJlgKRzbFPC"
#define thingsboard_server "demo.thingsboard.io"
Adafruit_MPU6050 mpu;
#define FILE_NAME "sensor_data.txt"
#define SERIAL_DEBUG_BAUD 115200
#define CURRENT_FIRMWARE_TITLE "TEST"
#define CURRENT_FIRMWARE_VERSION "1.0.0"
// Initialize ThingsBoard client
WiFiClient espClient;
// Initialize ThingsBoard instance
ThingsBoard tb(espClient);
// the Wifi radio's status
char ssid[] = "Wokwi-GUEST";
char password[] = "";
TaskHandle_t Task1;
File myFile;
void createDir(fs::FS &fs, const char * path){
Serial.printf("Creating Dir: %s\n", path);
if(fs.mkdir(path)){
Serial.println("Dir created");
} else {
Serial.println("mkdir failed");
}
}
void removeDir(fs::FS &fs, const char * path){
Serial.printf("Removing Dir: %s\n", path);
if(fs.rmdir(path)){
Serial.println("Dir removed");
} else {
Serial.println("rmdir failed");
}
}
void readFile(fs::FS &fs, const char * path){
Serial.printf("Reading file: %s\n", path);
File file = fs.open(path);
if(!file){
Serial.println("Failed to open file for reading");
return;
}
Serial.print("Read from file: ");
while(file.available()){
Serial.write(file.read());
}
file.close();
}
void writeFile(fs::FS &fs, const char * path, const char * message){
Serial.printf("Writing file: %s\n", path);
File file = fs.open(path, FILE_WRITE);
if(!file){
Serial.println("Failed to open file for writing");
return;
}
if(file.print(message)){
Serial.println("File written");
} else {
Serial.println("Write failed");
}
file.close();
}
void appendFile(fs::FS &fs, const char * path, String message){
Serial.printf("Appending to file: %s\n", path);
File file = fs.open(path, FILE_APPEND);
if(!file){
Serial.println("Failed to open file for appending");
return;
}
if(file.print(message)){
Serial.println("Message appended");
} else {
Serial.println("Append failed");
}
file.close();
}
void renameFile(fs::FS &fs, const char * path1, const char * path2){
Serial.printf("Renaming file %s to %s\n", path1, path2);
if (fs.rename(path1, path2)) {
Serial.println("File renamed");
} else {
Serial.println("Rename failed");
}
}
void deleteFile(fs::FS &fs, const char * path){
Serial.printf("Deleting file: %s\n", path);
if(fs.remove(path)){
Serial.println("File deleted");
} else {
Serial.println("Delete failed");
}
}
void setup(void) {
Serial.begin(115200);
while (!mpu.begin()) {
Serial.println("MPU6050 not connected!");
delay(1000);
}
Serial.println("MPU6050 ready!");
if(!SD.begin(5)){
Serial.println("Card Mount Failed");
return;
}
WiFi.begin(ssid,password);
uint8_t cardType = SD.cardType();
if(cardType == CARD_NONE){
Serial.println("No SD card attached");
return;
}
Serial.print("SD Card Type: ");
if(cardType == CARD_MMC){
Serial.println("MMC");
} else if(cardType == CARD_SD){
Serial.println("SDSC");
} else if(cardType == CARD_SDHC){
Serial.println("SDHC");
} else {
Serial.println("UNKNOWN");
}
uint64_t cardSize = SD.cardSize() / (1024 * 1024);
Serial.printf("SD Card Size: %lluMB\n", cardSize);
writeFile(SD,"/data.txt","Sensor_Data\r\n");
}
sensors_event_t event;
void loop(){
mpu.getAccelerometerSensor()->getEvent(&event);
float X=event.acceleration.x;
float Y=event.acceleration.y;
float Z=event.acceleration.z;
Serial.print("[");
Serial.print(millis());
Serial.print("] X: ");
Serial.print(event.acceleration.x);
Serial.print(", Y: ");
Serial.print(event.acceleration.y);
Serial.print(", Z: ");
Serial.print(event.acceleration.z);
Serial.println(" m/s^2");
String X_string=String(X,5);
String Y_string=String(Y,5);
String Z_string=String(Z,5);
String data =X_string+"\t"+Y_string+"\t"+Z_string+"\r\n";
appendFile(SD,"/data.txt",data);
readFile(SD,"/data.txt");
delay(500);
if (!tb.connected())
{
Serial.print("Connecting to: ");
Serial.print(thingsboard_server);
Serial.print(" with token ");
Serial.println(token);
if (!tb.connect(thingsboard_server, token))
{
Serial.println("Failed to connect");
return;
}
}
Serial.println("Sending data...");
//tb.sendTelemetryData("Temperature:", temp);
//tb.sendTelemetryData("Humidity: ", humid);
tb.sendTelemetryFloat("X",X);
tb.sendTelemetryFloat("Y",Y);
tb.sendTelemetryFloat("Z",Z);
tb.loop();
// writeFile(SD,"/data.txt",data)
}