// Waermebild-Versuch - ESP32-S3-WROOM-1 + MLX90640
// Liest den Sensor aus und schickt jeden Frame binaer ueber USB-Serial.
// I2C: SDA=GPIO8, SCL=GPIO9 | VCC->3V3, GND->GND

#include <Adafruit_MLX90640.h>

Adafruit_MLX90640 mlx;
float frame[32 * 24];                 // 768 Pixel

void setup() {
  Serial.begin(921600);
  Wire.begin(8, 9);                   // ESP32-S3: SDA=GPIO8, SCL=GPIO9
  Wire.setClock(1000000);             // 1 MHz I2C - bei Zickereien auf 800000 runter

  if (!mlx.begin(MLX90640_I2CADDR_DEFAULT, &Wire)) {
    while (1) { delay(1000); }        // Sensor nicht gefunden -> Verkabelung pruefen
  }
  mlx.setMode(MLX90640_CHESS);
  mlx.setResolution(MLX90640_ADC_18BIT);
  mlx.setRefreshRate(MLX90640_8_HZ);  // 8 Bilder/s, schoen ruhig. 16_HZ = flotter, aber rauschiger
}

void loop() {
  if (mlx.getFrame(frame) != 0) return;          // Lesefehler -> Frame ueberspringen
  uint8_t sync[2] = {0x5A, 0xA5};                // Frame-Startmarker
  Serial.write(sync, 2);
  Serial.write((uint8_t *)frame, sizeof(frame)); // 768 x float = 3072 Bytes binaer
}
