TTGO Lora32 ov7670

Hola!
He seguido el proyecto de bitluni de la esp32 (tengo una ttgo lora32) y la cámara ov7670: GitHub - bitluni/ESP32CameraI2S
El código no me da errores y se sube a la placa, pero cuando abro la dirección IP en la que tengo la ttgo lora32, no se carga la página. No sé si será un error del servidor web o algo, no tengo mucha idea acerca de esto.
Adjunto código:

#include "OV7670.h"

#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_ST7735.h> // Hardware-specific library

#include <WiFi.h>
#include <WiFiMulti.h>
#include <WiFiClient.h>
#include "BMP.h" 

const int SIOD = 21; //SDA
const int SIOC = 22; //SCL

const int VSYNC = 34;
const int HREF = 35;

const int XCLK = 32;
const int PCLK = 33;

const int D0 = 27;
const int D1 = 17;
const int D2 = 16;
const int D3 = 15;
const int D4 = 14;
const int D5 = 13;
const int D6 = 12;
const int D7 = 4;

const int TFT_DC = 5;
const int TFT_CS = 2;

#define ssid1        "oppo"
#define password1    "sofiaaaa"

Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS,  TFT_DC, 0/*no reset*/);
OV7670 *camera;

WiFiMulti wifiMulti;
WiFiServer server(80);

unsigned char bmpHeader[BMP::headerSize];

void serve()
{
  WiFiClient client = server.available();
  if (client) 
  {
    //Serial.println("New Client.");
    String currentLine = "";
    while (client.connected()) 
    {
      if (client.available()) 
      {
        char c = client.read();
        //Serial.write(c);
        if (c == '\n') 
        {
          if (currentLine.length() == 0) 
          {
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println();
            client.print(
              "<style>body{margin: 0}\nimg{height: 100%; width: auto}</style>"
              "<img id='a' src='/camera' onload='this.style.display=\"initial\"; var b = document.getElementById(\"b\"); b.style.display=\"none\"; b.src=\"camera?\"+Date.now(); '>"
              "<img id='b' style='display: none' src='/camera' onload='this.style.display=\"initial\"; var a = document.getElementById(\"a\"); a.style.display=\"none\"; a.src=\"camera?\"+Date.now(); '>");
            client.println();
            break;
          } 
          else 
          {
            currentLine = "";
          }
        } 
        else if (c != '\r') 
        {
          currentLine += c;
        }
        
        if(currentLine.endsWith("GET /camera"))
        {
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:image/bmp");
            client.println();
            
            client.write(bmpHeader, BMP::headerSize);
            client.write(camera->frame, camera->xres * camera->yres * 2);
        }
      }
    }
    // close the connection:
    client.stop();
    //Serial.println("Client Disconnected.");
  }  
}


void setup() 
{
  Serial.begin(115200);

  wifiMulti.addAP(ssid1, password1);
  //wifiMulti.addAP(ssid2, password2);
  Serial.println("Connecting Wifi...");
  if(wifiMulti.run() == WL_CONNECTED) {
      Serial.println("");
      Serial.println("WiFi connected");
      Serial.println("IP address: ");
      Serial.println(WiFi.localIP());
  }

  camera = new OV7670(OV7670::Mode::QQVGA_RGB565, SIOD, SIOC, VSYNC, HREF, XCLK, PCLK, D0, D1, D2, D3, D4, D5, D6, D7);
  BMP::construct16BitHeader(bmpHeader, camera->xres, camera->yres);

  tft.initR(INITR_BLACKTAB);
  tft.fillScreen(0);
  server.begin();
}

void displayY8(unsigned char * frame, int xres, int yres)
{
  tft.setAddrWindow(0, 0, yres - 1, xres - 1);
  int i = 0;
  for(int x = 0; x < xres; x++)
    for(int y = 0; y < yres; y++)
    {
      i = y * xres + x;
      unsigned char c = frame[i];
      unsigned short r = c >> 3;
      unsigned short g = c >> 2;
      unsigned short b = c >> 3;
      tft.pushColor(r << 11 | g << 5 | b);
    }  
}

void displayRGB565(unsigned char * frame, int xres, int yres)
{
  tft.setAddrWindow(0, 0, yres - 1, xres - 1);
  int i = 0;
  for(int x = 0; x < xres; x++)
    for(int y = 0; y < yres; y++)
    {
      i = (y * xres + x) << 1;
      tft.pushColor((frame[i] | (frame[i+1] << 8)));
    }  
}

void loop()
{
  camera->oneFrame();
  serve();
  displayRGB565(camera->frame, camera->xres, camera->yres);
}

Hola, sigues con el problema?

Hola! Sii

Por lo que veo te conectas por WIFI. Desde donde quieres conectarte, desde tu propia red Local o desde fuera?
Al conectarse que dice?
Te muestra una IP local no?

#define ssid1        "oppo"
#define password1    "sofiaaaa"

Segun esto, se conecta y debería decir

  if(wifiMulti.run() == WL_CONNECTED) {
      Serial.println("");
      Serial.println("WiFi connected");
      Serial.println("IP address: ");
      Serial.println(WiFi.localIP());
  }

IP address: 192.XXX.XXX.XXX
Esa red tiene un SSID oculto no?

vale, te comento jajjajjaja. El problema lo tenia con los pines. He cambiado a una ESP32, y aquí sí que parece que funciona, aunque la imagen que me muestra es esta:
image

El usuario tiene exactamente el mismo tema en la parte inglesa del foro aquí:

También creé un duplicado en la parte en inglés.

Este cerrado.

@antonio_00
Por favor publique su pregunta una vez. Ya lo he visto 3 veces. Si continúas creando nuevos temas sobre el mismo tema, corres el riesgo de ser suspendido del foro.

Gracias.

User has the exact same topic in the English part of the forum here:

Also created a duplicate in the English part

This one locked.

@antonio_00
Please post your question once. I've now seen it 3 times. If you continue to create new topics on the same subject you risk being suspended from the forum.

Thank you.

1 Like


Moderador
Por favor @antonio_00 como es que lo has publicado 3 veces!!
Dos hasta lo puedo entender mas allá que es pasible de advertencia, pero 3 ya no.
Teniendo en cuenta lo dicho por @PerryBebbington esta es tu última falta. Luego tendrás sanciones. En mi caso comienza con 2 dias.

Volviendo al tema. Has logrado que funcione la cámara?

1 Like