DesignSpark Electrical Logolinkedin
菜单 搜寻
提问问题

28 Jan 2019, 4:03

Sony Spresense將先進的物聯網功能融入微型板 (繁體)

Sony Spresense尺寸雖小,但集成了攝像頭,GNSS,豐富的GPIO和支援Arduino。

俗話說快速,便宜或好 - 你只可以選擇其中兩個。 然而,索尼Spresense將高性能,低能耗的多核處理器與8MB快閃記憶體,相機介面,GNSS以及不缺I / O相結合,只比單獨GNSS開發板的價格貴一點。 不僅如此,還完全支持使用Arduino IDE,或者是基於GNU工具鏈構建的SDK,以及基於NuttX RTOS的開發人員框架。

在這篇文章中,我們先看看Spresense主板,Extension擴展板和攝像頭板,然後再繼續運行一些提供的示例。

索尼CXD5602的核心

Spresense主板(178-3376) 是圍繞索尼CXD6502微控制器構建的,該微控制器可將大量功能集成到尺寸僅為6.5 x 6.5 mm的IC封裝中。

它的MCU採用低功耗FD-SOI技術,具有多種睡眠模式並分為多個電源域,主要針對具有低功耗要求的深度嵌入式物聯網應用。

CX5602應用領域由六個Arm Cortex-M4處理器和擁有1.5MB SRAM,第七個處理GNSS接收器DSP。 第八個也是最後一個核心是Cortex-M0,它被配置為系統和I / O處理器。 其他主要功能包括:

  • 影像處理域,支持各種格式和捕獲控制
  • 具有抽取和數位濾波的感測器域,以及DMA控制器和介面,包括:
    • I2C
    • SPI
    • ADC
    • PWM
  • 存儲/連接,包括eMMC和USB
  • 實時時鐘(RTC)

Spresense主板還有8MB快閃記憶體,GNSS天線,Micro USB和相機連接器,LED和按鈕,以及用於連接擴展板或定制板的高密度連接器。

除此之外,主板還集成了Sony CXD5247GF,具有電源管理功能和音訊模組。 後者提供具有可程式設計增益和ADC的4x通道類比麥克風放大器,以及用於8歐姆負載的D類音訊輸出放大器。

Arduino 外形封裝

在集成自訂硬體時,就像擁有如此緊湊的模組一樣好,在原型設計的早期階段,有一個更大尺寸的模組,更多的I / O接口是很好的,如果可能的話,水平移位和模塊化擴展。

Spresense擴展板(178-3377) 提供了更多功能,它將模組轉換為Arduino Uno外形,帶有Shield接頭,3.5mm插孔,Micro SD,附加USB和麥克風接頭。

500萬像素攝像頭

攝像頭(182-5720) 通過短排線直接與主板連接,像素為500萬,靈敏度為40-800 ISO。 具有各種曝光和聚焦控制模式,以及快門速度範圍和場景選擇預設。 高清運動格式支持最高30 fps,1080p解析度,60fps,720p。

因此,知道它的各種強大硬體功能後,我們如何對Spresense進行程式設計?

支援Arduino IDE

到目前為止,如果您不是一位經驗豐富的嵌入式開發人員,最簡單的入門方法是利用Arduino平臺支援。 啟動和運行很容易,涉及:

  1. 安裝 Arduino IDE
  2. 添加新的 Boards Manager URL
  3. 搜索並安裝Spresense板支援
  4. 更新Spresense引導載入程式bootloader

更多詳細資訊,請參閱官方文檔

用於驗證安裝用途的例子......你猜對了,LED! 這裡沒有任何意外,在編譯和上傳後,主板上的四個LED按順序亮起。

很高興知道IDE,電路板支援和硬體工作正常,但顯然我們可以做的更多令人興奮的事情,而不僅僅是讓一些LED亮起。 因此,如果我們從提供的相機示例中查看關鍵部分。

#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++;
    }
}

這裡的串口調試已被刪除,它變得更簡單; 我們加入用於SD卡和相機支援的庫,並定義一個函數來檢查圖像資料是否可用並將其轉換為RGB565。 然後我們設置一些基本參數並開始捕獲圖像。

使用預設設置,結果並不差,可以通過配置室內螢光燈的白平衡來改善。

其他的Arduino示例包括:

  • 音訊錄製和播放,以及MP3編碼和解碼
  • 使用深度神經網路(DNN)進行手寫數位識別
  • GNSS追蹤器
  • 伺服馬達控制

Spresense SDK

它還提供了一個全面的SDK,這將更有助於體驗嵌入式開發人員和具有更高級用例的人員。 在Ubuntu Linux上啟動和運行它只需要通過包管理系統安裝Arm工具鏈,從NuttX構建和安裝包,然後安裝Spresense SDK本身。 這需要幾分鐘,詳細資訊請參閱官方文檔

安裝SDK後,會有一些設置命令和兩個make命令,我們使用經典的“Hello,World”示例構建了一個NuttX圖像。 它還需要一個命令才能將其刷新到電路板,然後我們可以啟動一個終端模擬器,在本例中為Minicom,以連接它。

一旦電路板啟動,我們就會進入NuttX shell,從這裡可以輸入“hello”來運行我們的示例。

我們還可以輸入“help”來獲取命令列表,並運行ls和ps等列出檔和進程。是的,一個真正的小型即時操作系統在我們的主板上運行並具有互動式板面!

Spresense SDK示例包括:

  • Decimator(資料下採樣,以減少處理開銷),支援陀螺儀,加速度計和各種磁力計)
  • 使用機載GNSS進行Geofence地理圍欄(例如將無人機保持在指定區域內)
  • 使用連接的數據機通過LTE進行HTTP GET(例如API訪問)
  • ADC(模擬感測器,音訊)
  • PWM(電機和風扇速度控制等)

最後的想法

Spresense硬體特別令人印象深刻,在這裡我們幾乎沒有觸及其真正的能力。 由於6x Arm內核運行速度高達156MHz,其MCU能夠運行一些非常苛刻的應用程式,並且由於SDK支援消息傳遞和共用記憶體,因此開發這些以利用硬體應該變得更加容易。

除了MCU應用領域的原始性能之外,Spresense還受益於基於硬體的感測器資料抽取和過濾,以及專用系統和I / O處理器。 當所有這些與豐富的介面和NuttX RTOS支援相結合時,它實現了強大的組合 - 儘管它也非常適合低功耗(消耗)應用,因此非常適合高級物聯網使用案例。

簡而言之,Spresense是一個功能強大的電路板,具有出色的開發工具和高品質的文檔,可以實現一些非常令人興奮的應用程式。

Andrew Back

Blogger, DesignSpark Team since 2011

28 Jan 2019, 4:03