Hé! Vous semblez être en United States, souhaitez-vous utiliser notre site English ?
Switch to English site
Skip to main content

Sony Spresense intègre des fonctionnalités IoT avancées dans une carte ultracompacte

Main30_ab5a42ce339330e5d51be4846d983a9d3050ea84.jpg

La plate-forme ultracompacte intègre une caméra, une antenne GNSS, de nombreuses fonctions GPIO et est compatible avec Arduino.

Vous pensez qu'il est impossible de trouver un produit à la fois efficace, rapide et bon marché ? Découvrez la plate-forme Sony Spresense qui offre un processeur multicœurs haute performance à faible consommation d'énergie, 8 Mo de mémoire Flash, une interface caméra, un GNSS, ainsi que de nombreuses E/S, pour un peu plus que le coût d'une carte de développement GNSS. Et ce n'est pas tout, elle est également compatible avec l'IDE Arduino, et permet d'utiliser un kit de développement logiciel basé sur une chaîne de compilation GNU et présentant une structure de développement basée sur le RTOS NuttX.

Packaging_745c4442c8dd0cb2f49d11df025ce726bf2994da.jpg

Dans cet article, nous présentons la carte principale, la carte d'extension et le module caméra de Sony Spresense, avant d'illustrer son fonctionnement par quelques exemples.

Sony CXD5602 au cœur du système

MainBoard_0c9a4c49030360074ef690fbe8d014c773d1d2eb.jpg

La carte principale Spresense  (178-3376)  est construite autour du microcontrôleur CXD6502 de Sony, qui gère une multitude de fonctionnalités dans un boîtier de CI ultracompact de 6,5 x 6,5 mm.

MainBoardSignals_c9dfa2b619f40da7b42cc36fb08d1cc6281ba38c.jpg

Basé sur une technologie FD-SOI à faible consommation, avec une sélection de modes veille et séparée en plusieurs domaines de puissance, le microcontrôleur est conçu pour les applications IoT embarquées à faible consommation d'énergie.

MCU_BlockDiagram_dc252feacf2d0c598eae6006864df2b0937560ea.jpg

Le domaine d'application CX5602 est alimenté par six processeurs Arm Cortex-M4 dotés d'une mémoire SRAM de 1,5 Mo, et d'un septième prenant en charge le DSP du récepteur GNSS. Le huitième et dernier cœur est un Cortex-M0 configuré en tant que système et processeur d'E/S. Les autres caractéristiques clés incluent :

  • Un domaine de traitement d'images avec prise en charge de divers formats et contrôle de capture
  • Un domaine de capteurs avec décimation et filtre numérique, ainsi que des contrôleurs et une interface DMA comprenant :
    • I2C
    • SPI
    • CONV A/N
    • PWM
  • Stockage/connectivité, y compris eMMC et USB
  • Horloge en temps réel (RTC)

La carte principale Spresense est également dotée de 8 Mo de mémoire Flash, d'une antenne GNSS, de connecteurs micro-USB et de caméra, de LED et de boutons, ainsi que d'un connecteur haute densité pour l'interface avec la carte d'extension ou une carte personnalisée.

En outre, la carte principale intègre également un Sony CXD5247GF doté d'un système de gestion de l'alimentation et d'un bloc audio. Ce dernier fournit un amplificateur de microphone analogique à 4 canaux avec gain programmable et ADC, ainsi qu'un amplificateur de sortie audio de classe D pour une utilisation à une charge de 8 ohms.

Facteur de forme Arduino

ExtensionBoardSignals1_a9e35adc53810083cf11e1483a6aed5dad43ca5b.jpg

Bien qu'un module compact soit très pratique lorsqu'il s'agit d'intégrer du matériel personnalisé, il est agréable d'utiliser un module un peu plus grand au début du prototypage, avec davantage d'E/S et, si possible, translation de niveau et expansion modulaire

ExpansionBoard1_55b37c2d328079117eacfbaf091953810cad10ea.jpg

Tout cela, et bien plus encore, est possible avec la carte d'extension Spresense  (178-3377) , qui transforme le module en un facteur de forme Arduino Uno avec embases de shield, jack de 3,5 mm, micro-SD, port USB supplémentaire et embase de microphone.

Module caméra 5 mégapixels

Camera_2a58ebcf18af33ac30cfd3158c4ec31920d403f6.jpg

Le module caméra  (182-5720) est interfacé avec la carte principale via un câble plat court et dispose d'une caméra de 5 mégapixels doté d'une sensibilité ISO 40-800. Il offre différents modes de contrôle de l'exposition et de la mise au point, ainsi que des plages de vitesse d'obturation et des préréglages pour la sélection de scène. Le format HD Motion est pris en charge jusqu'à 30 images/s avec une résolution de 1080p et 60 images/s avec 720p.

Comment programmer Spresense avec la grande variété de fonctionnalités matérielles à notre disposition ?

Prise en charge de l'IDE Arduino

SSS_BoardsManager_d21da66a01d8a8552dd3e51e0a98c9054eb8d79e.jpg

Si vous n'êtes pas un développeur de solutions intégrées expérimenté, le moyen le plus simple de débuter est de tirer parti du support de la plate-forme Arduino. Pour commencer à l'utiliser, suivez les étapes suivantes :

  1. Si ce n'est pas déjà fait, installez l'IDE Arduino
  2. Ajoutez une URL au gestionnaire de cartes
  3. Recherchez et installez le support de carte Spresense
  4. Mettez à jour le bootloader Spresense

Pour plus d'informations, consultez la documentation officielle.

SSS_LED_Test_87f08a7e3ec08499632ca81bd78c1d2b07d9c234.jpg

Comme vous l'aurez deviné, le schéma utilisé pour vérifier l'installation utilise des LED. Aucune surprise ici : après la compilation et le téléchargement, les quatre LED de la carte principale s'allument dans l'ordre.

Il est important de savoir que l'IDE, le support de carte et le matériel fonctionnent correctement, mais il est évidemment possible de réaliser des tâches beaucoup plus intéressantes que de faire clignoter quelques LED. Jetons un œil aux éléments clés de l'exemple fourni avec la caméra.

#include <SDHCI.h>
#include <stdio.h>  /* for sprintf */
#include <Camera.h>

SDClass  theSD;
int take_picture_count = 0;

void CamCB(CamImage img)
{

  /* Check the img instance is available or not. */

  if (img.isAvailable())
    {

      /* If you want RGB565 data, convert image data format to RGB565 */

      img.convertPixFormat(CAM_IMAGE_PIX_FMT_RGB565);

      /* You can use image data directly by using getImgSize() and getImgBuff().
       * for displaying image to a display, etc. */
}

void setup()
{

  /* begin() without parameters means that
   * number of buffers = 1, 30FPS, QVGA, YUV 4:2:2 format */

  theCamera.begin();

  /* Start video stream.
   * If received video stream data from camera device,
   *  camera library call CamCB.
   */

  theCamera.startStreaming(true, CamCB);

  /* Auto white balance configuration */

  theCamera.setAutoWhiteBalanceMode(CAM_WHITE_BALANCE_DAYLIGHT);

  /* Set parameters about still picture.
   * In the following case, QUADVGA and JPEG.
   */

  theCamera.setStillPictureImageFormat(
     CAM_IMGSIZE_QUADVGA_H,
     CAM_IMGSIZE_QUADVGA_V,
     CAM_IMAGE_PIX_FMT_JPG);
}

/**
 * @brief Take picture with format JPEG per second
 */

void loop()
{
  sleep(1); /* wait for one second to take still picture. */

  /* This sample code can take 100 pictures in every one second from starting. */

  if (take_picture_count < 100)
    {

      /* Take still picture.
      * Unlike video stream(startStreaming) , this API wait to receive image data
      *  from camera device.
      */
  
      CamImage img = theCamera.takePicture();

      /* Check availability of the img instance. */
      /* If any error was occured, the img is not available. */

      if (img.isAvailable())
        {
          /* Create file name */
    
          char filename[16] = {0};
          sprintf(filename, "PICT%03d.JPG", take_picture_count);

          /* Save to SD card as the finename */
    
          File myFile = theSD.open(filename, FILE_WRITE);
          myFile.write(img.getImgBuff(), img.getImgSize());
          myFile.close();
        }

      take_picture_count++;
    }
}

Ici, le système de débogage du port série a été supprimé. Cela ne pourrait pas être plus simple : nous incluons des bibliothèques pour la prise en charge des cartes SD et le support d'appareil photo et définissons une fonction permettant de vérifier si les données d'image sont disponibles et de les convertir au format RGB565. Nous définissons ensuite quelques paramètres de base et commençons à capturer des images.

CameraTest_9ce2400e11d79922891ec87c66f0c17f41325d26.jpg

Les résultats obtenus avec les paramètres par défaut ne sont pas mauvais du tout et pourraient probablement être améliorés en configurant la balance des blancs pour l'adapter à un éclairage fluorescent d'intérieur.

Autres exemples Arduino fournis :

  • Enregistrement et lecture audio, et encodage et décodage MP3
  • Reconnaissance de chiffres manuscrits à l'aide d'un réseau neuronal profond (DNN)
  • Traceur GPS
  • Commande de servomoteur

Kit de développement Spresense

SSS_SDK_9d9e469c4a92754e74c1d1851aede96136898d81.jpg

Un kit de développement complet est également disponible, ce qui séduira davantage les développeurs intégrés expérimentés et ceux ayant des cas d'usage plus avancés. Pour pouvoir l'utiliser avec Ubuntu Linux, il suffit d'installer une chaîne de compilation Arm via le système de gestion de paquets, de construire et d'installer un paquet depuis NuttX, puis d'installer le kit de développement Spresense. Cela ne vous prendra que quelques minutes, et pour obtenir des informations détaillées, consultez la documentation officielle.

SSS_SDK_make_53ed3e9b189e134abc4a6fd0191fdad3f5f83f16.jpg

Après avoir installé le kit de développement et mis en place quelques commandes de configuration et deux commandes d'action, nous avons créé une image NutX avec l'exemple classique "Hello, World". Une commande supplémentaire est nécessaire pour le faire apparaître sur la carte, puis nous pouvons exécuter un émulateur de terminal, dans ce cas, Minicom, pour nous y connecter.

SSS_SDK_hello_9306513d891f66bf3c244410581ecd279ff74388.jpg

Une fois que la carte démarre, nous passons au shell NutX, et nous pouvons saisir "hello" pour exécuter notre exemple.

SSS_SDK_shell_43d58b7d4ecd13d2f6a8f563d7d9704f40775c22.jpg

Nous pouvons également saisir "help" pour obtenir une liste de commandes et exécuter ls et ps, etc., pour répertorier les fichiers et les processus. Vous ne rêvez pas, il s'agit bien d'un petit système d'exploitation en temps réel doté d'un shell interactif qui fonctionne sur notre carte !

Les exemples du kit de développement Spresense comprennent :

  • Un décimateur (sous-échantillonnage de données pour réduire la charge à traiter) avec prise en charge d'un gyroscope, d'un accéléromètre et de divers magnétomètres
  • Géorepérage (par exemple, maintien de drones dans une zone donnée) à l'aide du GNSS embarqué
  • HTPP GET (p. ex. accès API) via LTE à l'aide d'un modem connecté
  • CAN (capteurs analogiques, audio)
  • PWM (contrôle de vitesse de ventilateur et de moteur, etc.)

Le mot de la fin

Le matériel Spresense est particulièrement impressionnant et nous n'avons vu qu'un aperçu de ses possibilités. Ses 6 cœurs ARM cadencés à 156 MHz permettent à son microcontrôleur d'exécuter des applications très exigeantes. En outre, la prise en charge du kit de développement pour la transmission de messages et la mémoire partagée facilite considérablement le développement pour tirer parti du matériel.

En plus des performances brutes du domaine d'application du microcontrôleur, Spresense bénéficie également d'une décimation matérielle et d'un filtrage des données de capteur, ainsi que d'un système dédié et d'un processeur d'E/S. L'association de toutes ces fonctionnalités à une interface riche et à la prise en charge de NuttX RTOS constitue une combinaison puissante, mais pourtant très bien adaptée aux applications à faible consommation d'énergie et, par conséquent, idéale pour les cas d'utilisation avancés de l'IoT.

En résumé, Spresense est une plate-forme qui rassemble les fonctionnalités les plus performantes d'une carte, d'excellents outils de développement et une documentation de haute qualité, ce qui devrait permettre la réalisation d'applications très prometteuses.

Andrew Back

Open source (hardware and software!) advocate, Treasurer and Director of the Free and Open Source Silicon Foundation, organiser of Wuthering Bytes technology festival and founder of the Open Source Hardware User Group.
DesignSpark Electrical Logolinkedin