Le module Anxinke ESP32-S3 pilote la caméra OV2640 pour réaliser la prise de photos à distance et la transmission HTTP vers Alibaba Cloud Object Storage OSS, et l'afficher sur l'applet WeChat. (Bon article profond, tout open source)


  • Cette série de blogs d'apprentissage est rédigée par une équipe non officielle avec un demi- cœur . C'est uniquement pour un échange et un partage technique personnel, et non pour un usage commercial. S'il y a quelque chose qui ne va pas, veuillez laisser un message et je le changerai à temps.

Série 1: Notes de la série d'apprentissage de base du module de la série ESP32

1. Montez dans la fosse pour apprendre un nouveau voyage, créez un environnement de développement esp32 sur une machine virtuelle et imprimez "Hellow World". 2. Utilisant habilement l'éditeur eclipes, le tutoriel officiel construit un environnement de développement esp32 sous Windows et imprime "Hellow World". 3. Connaissez l'interface GPIO de l'esp32 de base, commencez à allumer votre première LED et interrompez le rappel pour réaliser la fonction du bouton. 4. Découvrez la puissante fonction de minuterie d'esp32, réalisez un chronométrage de 2 secondes pour faire clignoter une lumière LED. 5. Contactez et pratiquez la fonction d'impulsion de largeur pwm d'esp32 pour réaliser l'effet de respiration et faire clignoter une lumière LED. 6. La réalisation de smartConfig et WeChat airKiss en esp32, configuration réseau en un clic et connexion facile et rapide au routeur. 7. Utilisez l'interruption GPIO pour effectuer un appui court et un événement de rappel d'appui long sur un bouton, vous n'avez plus besoin de vous soucier de la source de déclenchement. 8. Réalisez le rôle de client et de serveur UDP local sur esp32 et réalisez la communication en LAN. 9. Réalisez le rôle de client et de serveur TCP local sur esp32, qui peut renvoyer des données en déconnectant et en reconnectant la route d'origine. 10. La programmation du SDK Espressif esp32 utilise rmt pour piloter les lumières colorées ws2812 afin d'obtenir des effets de dégradé arc-en-ciel. 11. Lancez-vous dans le développement du framework audio Espressif esp-adf, construisez un casque Bluetooth avec esp32, réalisez des fonctions telles que changer de chanson et obtenir des informations sur la chanson. 12. Ouvrez la source d'un réseau de distribution d'airkiss de compte public WeChat esp32 et d'un projet de fonction de découverte LAN, et partagez un gadget de réseau de distribution d'airkiss. 13. esp32 a un serveur DNS intégré, pas besoin d'accéder au nom de domaine depuis le réseau externe pour revenir à la page Web spécifiée. 14. La programmation du sdk Esp32 implémente l'authentification obligatoire du portail. Après la connexion au point d'accès esp32, l'interface de connexion spécifiée apparaîtra automatiquement.













15. Comprendre le cadre de reconnaissance de réveil vocal hors ligne local esp-skainet pour réaliser un contrôle de reconnaissance vocale local à faible coût. 16. Apprentissage du cadre de reconnaissance hors ligne du réveil vocal local esp-skainet, comment modifier le mot de réveil ? Comment personnaliser le mot de commande ? Comment faire une action d'intention ? 17. Lancé sur l'ensemble du réseau, Espressif esp32 sdk est directement connecté à la plate-forme ouverte JD Weilian·Xiaojingyu·IoT pour réaliser un contrôle vocal intelligent de l'audio Dingdong. 18. Lancez-vous dans le développement H5 du panneau de contrôle de Jingdong Weilian Xiaojingyu, comprenez la syntaxe de Vue et créez votre propre page de contrôle. 19. Open source lourd, comment connecter esp32 et blufi avec ble sur l'applet WeChat ! 20. Un bon article, le firmware esp32 compilé lors du processus de développement est trop volumineux pour démarrer normalement ? Vous apprendre à personnaliser la table de partition partitions.csv. 21. Le réseau de distribution bluetooth esp32 blufi est hautement packagé, facile à intégrer, facile à utiliser, facile à utiliser et améliore l'efficacité du développement ! 22. Discutez du "riz de la jeunesse" du programmeur et partagez la réalisation de plusieurs algorithmes de chiffrement md5 | AES CBC-ECB | Sha1 | Sha256 et ainsi de suite dans esp32 ! 23. La carte de développement audio Anxinke esp32-a1s a transplanté le dernier cadre audio esp-adf, un petit test sur la façon de réaliser la lecture de synthèse vocale en ligne. 25. Partagez le package qui réalise le réglage en douceur de la température de couleur de la lumière froide et chaude dans le SDK esp32, et intégrez-le facilement dans votre projet. 26. Partagez comment utiliser CMake pour compiler sous la fenêtre, la vitesse de compilation est améliorée d'un niveau par rapport à la compilation make traditionnelle, et ESP32 et ESP32-C3 sont pris en charge. 27. Installez l'environnement ESP8266/ESP32 avec le Linux intégré sous la plate-forme Windows10, et il n'est pas nécessaire d'installer une machine virtuelle supplémentaire.










Série 2 : Notes sur la série de cartes de développement de caméra ESP32-Camera

1. Anxinke ESP32-Cam carte de développement de caméra développement secondaire programmation C SDK, réaliser la transmission de photos à distance MQTT vers le serveur privé. 2. Carte de développement de caméra Anxinke ESP32-Cam développement secondaire programmation C SDK pour réaliser la surveillance de flux vidéo local. 3. Anxinke ESP32-Cam carte de développement de caméra développement secondaire C SDK programmation, les photos prises sont transmises à l'ordinateur hôte PC via le port série câblé.

Série 3 : Remarques sur la série de modules ESP32-C3

1. [Notes Bluetooth Mesh ①] Le module ESP32-C3 réalise l'accès Tmall Genie Bluetooth BLE Mesh AliGenie, et la commande vocale Tmall Genie peut également être réalisée sans connexion WiFi.

Série 4 : Remarques sur la série de modules ESP32-S3

1. Le module Anxinke ESP32-S3 pilote la caméra OV2640 pour réaliser la prise de photos à distance et la transmission HTTP vers Alibaba Cloud Object Storage OSS, et l'afficher sur l'applet WeChat. .



insérez la description de l'image ici

avant-propos

     Le premier lot d'échantillons du ESP32-S3module a été obtenu. Aujourd'hui, je vais partager avec vous les spécifications de ce module. Ce module se concentre précisément sur le marché de l'AIoT et répond aux besoins techniques du marché en matière d'algorithmes d'IA. Ensuite, cet article présente le ESP32-S3pilote sur le module .Appareil photo OV2640, le suivi se poursuivra pour mettre à jour cette série d'articles de blog.


insérez la description de l'image ici

1. Caractéristiques du produit ESP32-S3

   J'ai reçu l'échantillon ESP32-S3 d'Anxinke, bien sûr, je dois vérifier ses spécifications.

CPU et stockage

• Processeur double cœur Xtensa® 32 bits LX7 , fréquence principale jusqu'à 240 MHz
• Largeur de bus de données 128 bits, prise en charge des instructions SIMD
• 384 Ko de ROM
• 512 Ko de SRAM
• 16 Ko de SRAM RTC
• SPI, double SPI, quad SPI , Octal SPI, QPI, interfaces OPI sont connectées en externe à plusieurs mémoires flash et hors puce

Interfaces périphériques et capteurs

• 45 × ports GPIO • Interface numérique :
• 4 × SPI
• 1 × interface LCD (RVB parallèle 8 bits à 16 bits, I8080, MOTO6800), prend en charge la conversion entre RVB565, YUV422, YUV420, YUV411
• 1 × DVP 8- interface de caméra bit ~16 bits
• 3 × UART
• 2 × I2C
• 2 × I2S
• 1 × RMT (TX/RX)
• 1 × compteur d'impulsions
• Contrôleur LED PWM, jusqu'à 8 canaux
• 1 × USB OTG pleine vitesse
• 1 × contrôleur USB série/JTAG
• 2 × MCPWM
• 1 × interface hôte SDIO avec 2 emplacements pour carte
• Contrôleur DMA, 5 canaux de réception et 5 canaux de transmission
• 1 × contrôleur TWAI® (conforme à la norme ISO11898-1)
• 2 × 12- bit SAR ADC, jusqu'à 20 canaux
• 1 × capteur de température – 14 × GPIO à détection capacitive • Minuteries :
• 4 × minuterie à usage général 54 bits
• 1 × minuterie système 52 bits
• 3 × minuterie de chien de garde

Caractéristiques de consommation d'énergie

   ESP32-S3 adopte une technologie avancée de gestion de l'alimentation, qui peut basculer entre différents modes de consommation d'énergie. Les modes d'alimentation pris en charge par ESP32-S3 sont :

Mode actif : CPU et chip radio fonctionnent. Les puces peuvent recevoir, transmettre et écouter des signaux.
Mode modem-veille : le CPU peut fonctionner avec une fréquence d'horloge configurable. La bande de base Wi-Fi et la radio sont désactivées, mais le Wi-Fi reste connecté.
Mode veille légère : le CPU est suspendu. Les périphériques RTC et les coprocesseurs ULP peuvent être périodiquement réveillés par des temporisateurs pour fonctionner. Tout événement de réveil (MAC, hôte, temporisateur RTC ou interruption externe) réveillera la puce. Le Wi-Fi reste connecté.
Mode veille profonde : le processeur et la plupart des périphériques sont éteints, seuls la mémoire RTC et les périphériques RTC sont en état de fonctionnement. Les données de connexion Wi-Fi sont stockées dans le RTC. Le coprocesseur ULP fonctionne.
Mode Hibernation : L'horloge de l'oscillateur RC rapide intégré et le coprocesseur ULP sont désactivés. Seulement 1 minuterie d'horloge RTC sur l'horloge à basse vitesse et certains GPIO RTC fonctionnent. La minuterie d'horloge RTC ou RTC GPIO peut réveiller la puce du mode Hibernation. équipement dans

Différents modes de consommation d'énergie ont une consommation de courant différente, veuillez vous référer à ce qui suit pour plus de détails :

mode d'alimentation décris valeur typique unité
Sommeil léger Le CPU est arrêté. 240 µA
Sommeil profond La mémoire RTC et les périphériques RTC sont actifs 8 µA
Hibernation La mémoire RTC est active, les périphériques RTC sont éteints 7 µA
Éteindre La broche CHIP_PU est tirée vers le bas et la puce est éteinte 1 µA

2. Préparation

Matériel

  • Module Anxinké ESP32-S3.

  • Outil de débogage TTL-USB (recommandé d'utiliser la puce de port série CP2102, pour assurer une tension et un courant suffisants).

Logiciel

  • Construction de l'environnement : environnement Linux pour construire la branche master
  • Paramètres de la chaîne d'outils : téléchargez la chaîne d'outils, la version utilisée par le blogueur est :gcc version 5.2.0 (crosstool-NG crosstool-ng-1.22.0-97-gc752ad5)
  • Version Python :Python 3.8

câblage

goupille de caméra Broche de module
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
broche_d6 GPIO_NUM_17
broche_d5 GPIO_NUM_18
broche_d4 GPIO_NUM_12
broche_d3 GPIO_NUM_11
broche_d2 GPIO_NUM_10
broche_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. Protocole et principe de communication

insérez la description de l'image ici

3.1 Serveur de téléchargement de photos du module

Protocole : 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 L'applet envoie des instructions au module pour prendre des photos et les envoyer au serveur

Protocole :
Sujet MQTT : /light/deviceIn
charge utile :

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

3.3 Le module rappelle le résultat du serveur d'upload vers l'applet

Protocole : MQTT
Rubrique : /light/deviceOut
charge utile :

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

url est l'URL de l'image accessible depuis le réseau externe après avoir pris la photo, cryptée avec base64.


4. Préparation du serveur

3.1 Recevoir le traitement de l'image

Ce code est soumis par le protocole HTTP POST et l'image est téléchargée sur le serveur sous forme binaire. Son format est le suivant :

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

"<file contents here>"

Par conséquent, le serveur doit recevoir des flux de données, en prenant comme exemple le PHPlangage :

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

3.2 Recevoir le traitement d'image

    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 Logique métier du serveur

  1. Recevez les images envoyées par le module S3 et stockez-les dans un dossier sur le serveur local.
  2. En même temps, envoyez cette image à Alibaba Cloud Object Storage et renvoyez une adresse qui peut accéder à distance à l'image au module.

5. Préparation du développement embarqué

Configurez les informations du serveur, puis prenez une photo et téléchargez-la.

    //配置服务器相关信息
    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. Préparation pour le développement du mini programme WeChat

Configurez les informations du serveur, puis prenez une photo et téléchargez-la.

    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,
        });
      })
    })

Téléchargement du code source

Code du module : https://github.com/xuhongv/StudyInEsp32/tree/master/24_esp32s2_s3_camera_wechat_mini

Code de l'applet WeChat : https://github.com/xuhongv/RemoteWeChatForESP

Code serveur : consultez la section d'introduction au code serveur de cet article.

De plus, ne prenez pas mon blog comme une norme d'apprentissage, les miens ne sont que des notes, et il est difficile d'être négligent. S'il y en a, veuillez les signaler et n'hésitez pas à laisser un message !

  • Jouez esp8266avec vous, QQrejoignez le groupe, amis qui n'aiment pas, ne vaporisez pas ou n'ajoutez pas : 434878850
  • E-mail personnel : [email protected] 24 heures en ligne, tous les e-mails seront répondus !
  • résumé d'apprentissage du code source esp8266 (mis à jour en permanence, bienvenue dans l'étoile): https://github.com/xuhongv/StudyInEsp8266
  • résumé d'apprentissage du code source esp32 (mis à jour en permanence, bienvenue dans l'étoile): https://github.com/xuhongv/StudyInEsp32
  • Faites attention au QR code du compte public WeChat ci-dessous, il y a beaucoup de produits secs, et nous les pousserons dès que possible !

insérez la description de l'image ici

Je suppose que tu aimes

Origine blog.csdn.net/xh870189248/article/details/120481155
conseillé
Classement