O módulo Anxinke ESP32-S3 aciona a câmera OV2640 para realizar a captura remota de fotos e a transmissão HTTP para o Alibaba Cloud Object Storage OSS e exibi-la no miniaplicativo WeChat. (Bom artigo profundo, todo de código aberto)


  • Esta série de aprendizado de blog é escrita por uma equipe não oficial com meio coração . É apenas para troca e compartilhamento técnico pessoal, não para uso comercial. Se houver algo errado, por favor deixe uma mensagem e eu vou mudar a tempo.

Série 1: Notas da Série de Aprendizagem Básica do Módulo da Série ESP32

1. Subir no poço para aprender uma nova jornada, construir um ambiente de desenvolvimento esp32 em uma máquina virtual e imprimir "Hellow World". 2. Usando habilmente o editor de eclipes, o tutorial oficial constrói um ambiente de desenvolvimento esp32 no Windows e imprime "Hellow World". 3. Conheça a interface GPIO do esp32 básico, comece a acender seu primeiro LED e interrompa o retorno de chamada para realizar a função do botão. 4. Experimente a poderosa função de timer do esp32, realize o tempo de 2s para piscar uma luz LED. 5. Entre em contato e pratique a função de pulso de largura pwm do esp32 para realizar o efeito respiratório e piscar uma luz LED. 6. A realização de smartConfig e WeChat airKiss em esp32, configuração de rede com um clique e conexão fácil e rápida ao roteador. 7. Use a interrupção GPIO para fazer um pressionamento curto e um evento de retorno de chamada de pressionamento longo de um botão, não precisa mais se preocupar com a fonte do acionador. 8. Realize a função de cliente e servidor UDP local no esp32 e realize a comunicação na LAN. 9. Realize a função de cliente e servidor TCP local no esp32, que pode retornar dados desconectando e reconectando a rota original. 10. A programação Espressif esp32 SDK usa rmt para conduzir luzes coloridas ws2812 para obter efeitos de gradiente de arco-íris. 11. Comece com o desenvolvimento da estrutura de áudio Espressif esp-adf, construa um fone de ouvido Bluetooth com esp32, realize funções como troca de músicas e obtenção de informações sobre músicas. 12. Abra o código-fonte de uma rede de distribuição airkiss de conta pública WeChat esp32 e um projeto de função de descoberta de LAN e compartilhe um gadget de rede de distribuição airkiss. 13. esp32 tem um servidor dns embutido, não há necessidade de acessar o nome de domínio da rede externa para retornar à página da web especificada. 14. A programação Esp32 sdk implementa a autenticação obrigatória do portal. Após a conexão com o hotspot esp32, a interface de login especificada aparecerá automaticamente.













15. Entenda a estrutura de reconhecimento de ativação de voz off-line local esp-skainet para realizar o controle de reconhecimento local de voz de hardware de baixo custo. 16. Aprendendo a estrutura de reconhecimento off-line de ativação de voz local esp-skainet, como modificar a palavra de ativação?Como personalizar a palavra de comando? Como fazer ação intencional? 17. Lançado em toda a rede, o Espressif esp32 sdk está diretamente conectado à plataforma aberta JD Weilian·Xiaojingyu·IoT para realizar o controle de voz inteligente do áudio Dingdong. 18. Comece com o desenvolvimento H5 do painel de controle de Jingdong Weilian Xiaojingyu, entenda a sintaxe do Vue e crie sua própria página de controle. 19. Heavy open source, como conectar esp32 e blufi com ble no miniaplicativo WeChat! 20. Um bom artigo, o firmware do esp32 compilado durante o processo de desenvolvimento é muito grande para iniciar normalmente? Ensina como customizar a tabela de partição partitions.csv. 21. A rede de distribuição bluetooth esp32 blufi é altamente compactada, fácil de integrar, fácil de usar, fácil de usar e melhora a eficiência do desenvolvimento! 22. Discuta o "arroz da juventude" do programador e compartilhe a realização de vários algoritmos de criptografia md5 | AES CBC-ECB | Sha1 | Sha256 e assim por diante no esp32! 23. A placa de desenvolvimento de áudio Anxinke esp32-a1s transplantou a estrutura de áudio esp-adf mais recente, um pequeno teste de como realizar a reprodução online de conversão de texto em fala. 25. Compartilhe o pacote que realiza o ajuste suave da temperatura de cor da luz fria e quente no esp32 SDK e integre-o facilmente ao seu projeto. 26. Compartilhe como usar o CMake para compilar na janela, a velocidade de compilação é melhorada em um nível em comparação com a compilação tradicional, e ESP32 e ESP32-C3 são suportados. 27. Instale o ambiente ESP8266/ESP32 com o Linux embutido na plataforma windows10 e não há necessidade de instalar uma máquina virtual adicional.










Série 2: notas da série da placa de desenvolvimento da câmera ESP32

1. Anxinke ESP32-Cam placa de desenvolvimento de câmera de desenvolvimento secundário programação C SDK, realiza transmissão remota de fotos MQTT para o servidor privado. 2. Anxinke ESP32-Cam placa de desenvolvimento de câmera desenvolvimento secundário programação C SDK para realizar monitoramento de fluxo de vídeo local. 3. Anxinke ESP32-Cam placa de desenvolvimento de câmera desenvolvimento secundário programação C SDK, as fotos tiradas são transmitidas para o computador host PC através da porta serial com fio.

Série 3: Notas da Série do Módulo ESP32-C3

1. [Notas Bluetooth Mesh ①] O módulo ESP32-C3 realiza o acesso Tmall Genie Bluetooth BLE Mesh AliGenie, e o controle de voz Tmall Genie também pode ser realizado sem conexão WiFi.

Série 4: Notas da Série do Módulo ESP32-S3

1. O módulo Anxinke ESP32-S3 aciona a câmera OV2640 para realizar a captura remota de fotos e a transmissão HTTP para Alibaba Cloud Object Storage OSS e exibi-la no miniaplicativo WeChat. .



insira a descrição da imagem aqui

prefácio

     O primeiro lote de amostras do ESP32-S3módulo foi obtido. Hoje vou compartilhar com vocês as especificações deste módulo. Este módulo se concentra precisamente no mercado AIoT e responde às necessidades técnicas do mercado para algoritmos AI. Em seguida, este artigo apresenta o ESP32-S3driver no módulo Câmera OV2640, o acompanhamento continuará a atualizar esta série de postagens no blog.


insira a descrição da imagem aqui

1. Características do produto ESP32-S3

   Peguei a amostra ESP32-S3 da Anxinke, claro que tenho que verificar suas especificações.

CPU e armazenamento

Processador Xtensa® LX7 dual-core de 32 bits , frequência principal de até 240 MHz
• Largura do barramento de dados de 128 bits, suporte a instruções SIMD
• 384 KB ROM
• 512 KB SRAM
• 16 KB RTC SRAM
• SPI, Dual SPI, Quad SPI As interfaces Octal SPI, QPI e OPI são conectadas externamente a vários flashes e RAM off-chip

Interfaces Periféricas e Sensores

• 45 × portas GPIO • Interface digital:
• 4 × SPI
• 1 × interface LCD (RGB paralelo de 8 bits a 16 bits, I8080, MOTO6800), suporta conversão entre RGB565, YUV422, YUV420, YUV411
• 1 × DVP 8- interface de câmera de ~16 bits
• 3 × UART
• 2 × I2C
• 2 × I2S
• 1 × RMT (TX/RX)
• 1 × contador de pulsos
• Controlador LED PWM, até 8 canais
• 1 × USB OTG de velocidade total
• 1 × controlador Serial/JTAG USB
• 2 × MCPWM
• 1 × interface host SDIO com 2 slots de cartão
• controlador DMA, 5 canais de recepção e 5 canais de transmissão
• 1 × controlador TWAI® (compatível com ISO11898-1)
• 2 × 12- bit SAR ADC, até 20 canais
• 1 × sensor de temperatura – 14 × GPIO de detecção capacitiva • Temporizadores:
• 4 × temporizador de uso geral de 54 bits
• 1 × temporizador de sistema de 52 bits
• 3 × temporizador de watchdog

Características de consumo de energia

   O ESP32-S3 adota tecnologia avançada de gerenciamento de energia, que pode alternar entre diferentes modos de consumo de energia. Os modos de energia suportados pelo ESP32-S3 são:

Modo ativo : a CPU e o chip de rádio estão funcionando. Os chips podem receber, transmitir e ouvir sinais.
Modo de hibernação do modem : a CPU pode funcionar com frequência de clock configurável. A banda base Wi-Fi e o rádio estão desligados, mas o Wi-Fi permanece conectado.
Modo de suspensão leve : a CPU está suspensa. Os periféricos RTC e os coprocessadores ULP podem ser ativados periodicamente por temporizadores para serem executados. Qualquer evento de ativação (MAC, host, temporizador RTC ou interrupção externa) ativará o chip. Wi-Fi permanece conectado.
Modo de suspensão profunda : a CPU e a maioria dos periféricos estão desligados, apenas a memória RTC e os periféricos RTC estão funcionando. Os dados de conexão Wi-Fi são armazenados no RTC. O coprocessador ULP funciona.
Modo de hibernação : O relógio do oscilador RC rápido integrado e o coprocessador ULP são desativados. Apenas 1 temporizador de relógio RTC no relógio de baixa velocidade e alguns GPIOs RTC estão funcionando. O temporizador do relógio RTC ou RTC GPIO pode ativar o chip do modo de hibernação. equipamento em

Diferentes modos de consumo de energia têm consumo de corrente diferente, consulte o seguinte para obter detalhes:

modo de energia descrever valor típico unidade
Sono leve A CPU está parada. 240 µA
Sono profundo A memória RTC e os periféricos RTC estão ativos 8 µA
Hibernação A memória RTC está ativa, os periféricos RTC estão desligados 7 µA
Desligar O pino CHIP_PU é puxado para baixo e o chip é desligado 1 µA

2. Preparação

hardware

  • Módulo Anxinke ESP32-S3.

  • Ferramenta de depuração TTL-USB (recomenda-se usar o chip de porta serial CP2102, para garantir tensão e corrente suficientes).

Programas

  • Construção do ambiente: ambiente Linux para construir o branch master
  • Configurações da cadeia de ferramentas: baixe a cadeia de ferramentas, a versão usada pelo blogueiro é:gcc version 5.2.0 (crosstool-NG crosstool-ng-1.22.0-97-gc752ad5)
  • Versão Python:Python 3.8

fiação

pino da câmera pino do módulo
pin_pwdn GPIO_NUM_35
pin_reset GPIO_NUM_36
pin_xclk GPIO_NUM_15
pin_sscb_sda GPIO_NUM_4
pin_sscb_scl GPIO_NUM_5
pin_d7 GPIO_NUM_16
pin_d6 GPIO_NUM_17
pin_d5 GPIO_NUM_18
pin_d4 GPIO_NUM_12
pin_d3 GPIO_NUM_11
pin_d2 GPIO_NUM_10
pin_d1 GPIO_NUM_9
pin_d0 GPIO_NUM_8
pin_vsync GPIO_NUM_6
pin_href GPIO_NUM_7
pin_pclk GPIO_NUM_13

3. Protocolo e princípio de comunicação

insira a descrição da imagem aqui

3.1 Servidor de upload de fotos do módulo

Protocolo: HTTP

POST /index.php HTTP/1.1
Host: www.domain.com
Content-Type: image/jpeg
Name-Pic: name
Content-Length: 12540


"<file contents here>"

3.2 O applet envia instruções ao módulo para tirar fotos e enviá-las ao servidor

Protocolo: MQTT
Tópico: /light/deviceIn
payload:

{
    "action" : "0" ,
    "name" : "pic-name"
}

3.3 O módulo chama de volta o resultado do servidor de upload para o applet

Protocolo: MQTT
Tópico: /light/deviceOut
payload:

{
  "url" : "base64(url)" 
}

url é a URL da imagem que pode ser acessada da rede externa após tirar a foto, criptografada com base64.


4. Preparação do servidor

3.1 Receber processamento de imagem

Esse código é enviado pelo protocolo HTTP POST e a imagem é carregada no servidor em formato binário. Seu formato é o seguinte:

POST /index.php HTTP/1.1
Host: www.domain.com
Content-Type: image/jpeg
Name-Pic: name
Content-Length: 12540

"<file contents here>"

Portanto, o servidor deve receber fluxos de dados, tomando como exemplo a PHPlinguagem :

//接受数据流
$stream = file_get_contents('php://input');
//数据流转化为png格式,并保存在指定的位置
$len = file_put_contents('/www/wwwroot/static/' . time() . ".png", $stream); 

3.2 Receber processamento de imagem

    public function upload()
    {
    
    
        $getPostDataArry = apache_request_headers();

        try {
    
    
            $name = $getPostDataArry['Name-Pic'];
        } catch (Exception $e) {
    
    
            if (empty($name)) {
    
    
                $response_data['code'] = 1;
                $response_data['des'] = ' Name-Pic is not exist';
                return json($response_data);
            }
        }
        //接受数据流
        $stream = file_get_contents('php://input');
        //数据流转化为png格式,并保存在指定的位置
        $len = file_put_contents('/www/wwwroot/www.xuhongv.com/public/icon/' . $name . ".png", $stream);
        $response_data = [];
        if ($len) {
    
    
            $accessKeyId = "LTAI4Fg*********YJBLPoTo5";
            $accessKeySecret = "OT7s9vkQd*******4p8KQ31qoTIL4";
            $endpoint = "we****ong.oss-cn-hongkong.aliyuncs.com";
            $bucket = 'web****hong';
            try {
    
    
                $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, true);
                //判断存储空间是否存在
                $isExist = $ossClient->doesBucketExist($bucket);
                if (!$isExist) {
    
    
                    $response_data['code'] = 1;
                    $response_data['des'] = $endpoint . ' is not exist';
                    return json($response_data);
                }
                $options = array();
                //oss 存储文件路径
                $object = "images/" . $name . ".png";
                $ossClient->uploadFile($bucket, $object, '/www/wwwroot/www.xuhongv.com/public/icon/' . $name . ".png", $options);
            } catch (OssException $e) {
    
    
                $response_data['code'] = 1;
                $response_data['des'] = $e->getMessage();
                return json($response_data);
            }
            $response_data['code'] = 0;
            $response_data['des'] = 'uploadup ok';
            $response_data['url'] = base64_encode("https://" . $endpoint . '/' . $object);
            return json($response_data);
        }
        $response_data['code'] = 1;
        $response_data['des'] = "error , the upload file length is" . $len;
        return json($response_data);
    }
}

3.3 Lógica de negócios do servidor

  1. Receba as imagens enviadas pelo módulo S3 e armazene-as em uma pasta no servidor local.
  2. Ao mesmo tempo, envie esta imagem para o Alibaba Cloud Object Storage e retorne um endereço que possa acessar remotamente a imagem para o módulo.

5. Preparação de desenvolvimento incorporado

Configure as informações do servidor, tire uma foto e faça o upload.

    //配置服务器相关信息
    esp_http_client_config_t config = {
        .url = "http://domain.xuhongv.com/api/upload",
        .method = HTTP_METHOD_POST,
        .event_handler = _http_event_handler,
        .buffer_size = 4096,
        .user_data = local_response_buffer, 
        .buffer_size_tx = 4096 * 5,
        .timeout_ms = 10000
    };

    //开始拍照
    pic = esp_camera_fb_get();

    if (!pic)
    {
        ESP_LOGE(TAG, "Camera capture failed");
        goto end;
    }
    else
    {
        esp_camera_fb_return(pic);

        pic = esp_camera_fb_get();

        if (!pic)
        {
            ESP_LOGE(TAG, "Camera capture failed");
         }
        else
        {
            //拍照成功,获取其大小、尺寸等信息
            ESP_LOGI(TAG, "Camera capture OK , Its size was: %zu bytes", pic->len);
            ESP_LOGI(TAG, "Camera capture OK , Its width was: %d", pic->width);
            ESP_LOGI(TAG, "Camera capture OK , Its height was: %d ", pic->height);

            esp_http_client_handle_t esp_client = esp_http_client_init(&config);

            //设置HTTP请求头为image/jpg表示图片类型
            esp_http_client_set_header(esp_client, "Content-Type", "image/jpg");

            //设置图片名字
            esp_http_client_set_header(esp_client, "Name-Pic", &(test_task_param->pic_name_p));

            //把图片放在body里面
            esp_http_client_set_post_field(esp_client, (const char *)pic->buf, pic->len);

            //开始执行请求服务器
            res = esp_http_client_perform(esp_client);

            //判断是否请求成功
            if (res == ESP_OK)
            {
                ESP_LOGI(TAG, "HTTPS Status = %d", esp_http_client_get_status_code(esp_client));
            }
            else
            {
                ESP_LOGE(TAG, "perform http request %s", esp_err_to_name(res));
            }
            ESP_ERROR_CHECK(esp_http_client_cleanup(esp_client));
        }
    }

6. Preparação para o desenvolvimento do miniprograma WeChat

Configure as informações do servidor, tire uma foto e faça o upload.

    data: {
    host: 'a0je61b5.mqtt.iot.gz.baidubce.com',
    subTopic: '/light/deviceOut',
    pubTopic: '/light/deviceIn',
    msg: 'Hello! I am from WeChat miniprogram',
    //默认显示的图片
    img_url: 'https://docs.ai-thinker.com/_media/o1cn01faxszt1ls4mym2mkb_2922621297.png',
    mqttOptions: {
      protocolVersion: 4, //MQTT连接协议版本
      clientId: 'DeviceId-jviujtntjy',
      clean: true,
      password: 'sM2hrD6kcRFlmIgR2F',
      username: 'a0je61a/wechat',
      reconnectPeriod: 1000, // 1000毫秒,两次重新连接之间的间隔
      connectTimeout: 30 * 1000, // 1000毫秒,两次重新连接之间的间隔
      resubscribe: true // 如果连接断开并重新连接,则会再次自动订阅已订阅的主题(默认true)
     }
    }
    
    let that = this

    client = mqtt.connect(`wxs://${this.data.host}/mqtt`, this.data.mqttOptions)

    client.on('reconnect', (error) => {
      console.log('Reconnecting...')
    })

    client.on('error', (error) => {
      console.log('连接失败:', error)
    })

    client.on('connect', () => {
      wx.showToast({
        title: '连接成功'
      })

      client.subscribe(this.data.subTopic, (err) => {
      })
      client.on('message', (topic, payload) => {
        let object = JSON.parse(payload)
        //base64解码url地址
        let url = that.base64_decode(object.url)
        console.log(url)
        that.setData({
          img_url: url
        })
        wx.showModal({
          content: `收到 Topic: ${topic}, Payload:  ${url}`,
          showCancel: false,
        });
      })
    })

Download do código-fonte

Código do módulo: https://github.com/xuhongv/StudyInEsp32/tree/master/24_esp32s2_s3_camera_wechat_mini

Código do miniaplicativo WeChat: https://github.com/xuhongv/RemoteWeChatForESP

Código do servidor: consulte a seção de introdução ao código do servidor deste artigo.

Além disso, não tome meu blog como um padrão de aprendizado, os meus são apenas anotações, e é difícil ser negligente.Se houver algum, por favor, aponte-os e seja bem-vindo para deixar uma mensagem!

  • Brinque esp8266com você, entre QQno grupo, amigo quem não gostar, não borrife ou adicione: 434878850
  • E-mail pessoal: [email protected] 24 horas online, todos os e-mails serão respondidos!
  • resumo do aprendizado do código-fonte esp8266 (atualizado continuamente, bem-vindo à estrela): https://github.com/xuhongv/StudyInEsp8266
  • resumo do aprendizado do código-fonte esp32 (atualizado continuamente, bem-vindo à estrela): https://github.com/xuhongv/StudyInEsp32
  • Preste atenção ao código QR da conta pública do WeChat abaixo, há muitos produtos secos e os enviaremos o mais rápido possível!

insira a descrição da imagem aqui

Acho que você gosta

Origin blog.csdn.net/xh870189248/article/details/120481155
Recomendado
Clasificación