CT — ESP32 simulation

An interactive ESP32 circuit simulation you can run free in your browser on Velxio, by felipe021-com.

Components

Sketch code

#include <TinyGPSPlus.h>
#include <SPI.h>
#include <SD.h>
#include <Wire.h>
#include <WiFi.h>
#include <WebServer.h>
#include <vector>
#include <algorithm>
     
// ---------------- MODO WIFI (baixar os arquivos do SD sem tirar o cartao) ----------------
// Como usar: com a gravacao PARADA, SEGURE o botao por 3 segundos.
//   1) O LED2 passa a piscar rapido: o ConecTrack criou uma rede WiFi.
//   2) No celular/notebook, conecte na rede abaixo.
//   3) Abra http://192.168.4.1 no navegador: lista de arquivos com Baixar / Apagar.
//   4) Pra sair: segure o botao 3 s de novo, ou aperte rapido pra comecar a gravar.
// Obs.: com o WiFi ligado a amostragem fica pausada (e os pinos GPIO25/26 nao leem no WiFi).
#define WIFI_SSID  "ConecTrack"
#define WIFI_SENHA "conectrack1"          // minimo 8 caracteres. Troque se quiser.
const unsigned long TEMPO_PRESSAO_LONGA = 3000;   // ms

WebServer server(80);
bool wifiOn = false;
void wifiParar();   // declarada aqui porque iniciarGravacao() usa

// ---------------- MPU6050 / clones (leitura direta dos registradores) ----------------
// Nao usa a biblioteca Adafruit: ela recusa clones (WHO_AM_I diferente de 0x68).
// O seu modulo responde WHO_AM_I = 0x70 (chip MPU-6500), que usa os mesmos registradores
// de acelerometro e giroscopio e funciona normalmente aqui.
uint8_t mpuEndereco = 0x68;
uint8_t mpuQuem = 0;
bool mpuOk = false;

const float ACC_LSB_POR_G    = 4096.0f;  // faixa +-8 g
const float GYRO_LSB_POR_DPS = 65.5f;    // faixa +-500 graus/s

// Aceleracao em g, giroscopio em graus/s, temperatura do sensor em graus C
float ACCX = 0, ACCY = 0, ACCZ = 0;
float GYROX = 0, GYROY = 0, GYROZ = 0;
float TEMPM = 0;

bool mpuEscrever(uint8_t reg, uint8_t valor) {
  Wire.beginTransmission(mpuEndereco);
  Wire.write(reg);
  Wire.write(valor);
  return Wire.endTransmission() == 0;
}

bool mpuLerRegs(uint8_t reg, uint8_t* buf, uint8_t n) {
  Wire.beginTransmission(mpuEndereco);
  Wire.write(reg);
  if (Wire.endTransmission(false) != 0) return false;
  if (Wire.requestFrom((int)mpuEndereco, (int)n) != n) return false;
  for (uint8_t i = 0; i < n; i++) buf[i] = Wire.read();
  return true;
}

bool mpuIniciar() {
  // procura em 0x68 e depois 0x69
  bool achou = false;
  for (uint8_t end = 0x68; end <= 0x69; end++) {
    Wire.beginTransmission(end);
    if (Wire.endTransmission() == 0) { mpuEndereco = end; achou = true; break; }
  }
  if (!achou) return false;

  if (!mpuLerRegs(0x75, &mpuQuem, 1)) return false;   // WHO_AM_I


  if (!mpuEscrever(0x6B, 0x01)) return false;  // acorda, clock do giroscopio
  delay(100);
  mpuEscrever(0x19, 9);      // taxa de amostragem interna: 100 Hz
  mpuEscrever(0x1A, 0x04);   // filtro digital ~21 Hz
  mpuEscrever(0x1B, 0x08);   // giroscopio +-500 graus/s
  mpuEscrever(0x1C, 0x10);   // acelerometro +-8 g
  mpuEscrever(0x1D, 0x04);   // filtro do acelerometro (so existe no 6500; no 6050 e ignorado)
  delay(50);
  return true;
}

// ---------------- GPS ----------------
// O baud tem q

More projects by felipe021-com