// channel id : 2549736
//channel api key : PLQFARB3MYHA75OE
#include <WiFi.h>
#include <Wire.h>
#include "Adafruit_MCP9808.h"
#include "ThingSpeak.h"
#include <ThingsBoard.h>
#include <ThingSpeak.h>
#include <LiquidCrystal_I2C.h>
#include <Arduino_MQTT_Client.h>


#define MCP9808_ADDRESS 0x18


const int LED_PIN = 13;
const int VIBRATION_SENSOR_PIN = 12; // Exemple, ajustez le numéro de broche selon votre câblage
const char* WIFI_NAME = "Wokwi-GUEST";
const char* WIFI_PASSWORD = "";
const int myChannelNumber = 2549736;
const char* myApiKey = "PLQFARB3MYHA75OE";
const char* server = "api.thingspeak.com";
#define TB_SERVER "thingsboard.cloud"
#define TOKEN "cKukYPLJUJMTR2A5y97v"

constexpr uint16_t MAX_MESSAGE_SIZE = 256U;

WiFiClient espClient;
Arduino_MQTT_Client mqttClient(espClient);
ThingsBoard tb(mqttClient, MAX_MESSAGE_SIZE);

void connectToWiFi() {
  Serial.println("Connecting to WiFi...");
  int attempts = 0;
  
  }
void connectToThingsBoard() {
  if (!tb.connected()) {
    Serial.println("Connecting to ThingsBoard server");
    
    if (!tb.connect(TB_SERVER, TOKEN)) {
      Serial.println("Failed to connect to ThingsBoard");
    } else {
      Serial.println("Connected to ThingsBoard");
    }
  }
}

void sendDataToThingsBoard(float temp) {
  String jsonData = "{\"tempIn\":" + String(temp) + "}";
  tb.sendTelemetryJson(jsonData.c_str());
  Serial.println("Data sent");
}

Adafruit_MCP9808 mcp;
WiFiClient client;

LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup() {
  Serial.begin(115200);
  Wire.begin();
  mcp.begin();
  pinMode(LED_PIN, OUTPUT);
  pinMode(VIBRATION_SENSOR_PIN, INPUT); // Configuration de la broche comme entrée pour le capteur de vibration
  WiFi.begin(WIFI_NAME, WIFI_PASSWORD);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Wifi not connected");
  }
  {
  Serial.begin(115200);
  Wire.begin();
  mcp.begin(MCP9808_ADDRESS);
 
  Serial.println("Server started");
}
  Serial.println("Wifi connected !");
  Serial.println("Local IP: " + String(WiFi.localIP()));
  WiFi.mode(WIFI_STA);
  ThingSpeak.begin(client);

  lcd.init();
  lcd.backlight();
}

void loop() {
  float temperature = mcp.readTempC();
  ThingSpeak.setField(1, temperature);
  
  // Lecture de la valeur du capteur de vibration
  int vibrationValue = digitalRead(VIBRATION_SENSOR_PIN);
  
  if (temperature > 45 || temperature < 20) {
    digitalWrite(LED_PIN, HIGH);
    lcd.setCursor(0, 0);
    lcd.print("Temp out of range!");
  } else {
    digitalWrite(LED_PIN, LOW);
    lcd.setCursor(0, 0);
    lcd.print("Temperature: ");
    lcd.print(temperature);
    lcd.print(" C");
    lcd.setCursor(0, 1);
    lcd.print("Vibration: ");
    lcd.print(vibrationValue == HIGH ? "Detected" : "None"); // Affiche "Detected" si la vibration est détectée
  }
  
  int x = ThingSpeak.writeFields(myChannelNumber, myApiKey);
  
  Serial.println("Temperature: " + String(temperature, 2) + "°C");
  Serial.println("Vibration: " + String(vibrationValue == HIGH ? "Detected" : "None"));
  
  if (x == 200) {
    Serial.println("Data pushed successfully");
  } else {
    Serial.println("Push error: " + String(x));
  }
  connectToWiFi();

  // Lecture de la température depuis le capteur MCP9808
  float temp = mcp.readTempC();

  Serial.println(temp);

  if (!tb.connected()) {
    connectToThingsBoard();
  }

  sendDataToThingsBoard(temp);

  delay(10000);

}
$abcdeabcde151015202530354045505560fghijfghij
MCP9808Breakout