M5Camera의 카메라 이미지를 M5Stack의 LCD에 표시

6587 단어 M5stackM5Camera

소개



12/5 에 M5Camera 가 발매되었으므로, 조속히 사 보았습니다.
M5Stack에 접속해 사용하는 카메라 모듈이라고 생각하고 있으면, M5Camera 자체에 ESP32가 탑재되고 있어 단독으로 동작시킬 수 있는 것 같습니다.

처음부터 네트워크 카메라로서 동작하는 프로그램이 쓰여져 있어 ESP32Cam/M5Camera 빠른 시작 을 보면서 PC로부터 SSID:M5Cam의 Wifi 액세스 포인트에 접속해, 브라우저로. 표시되었습니다.

M5Stack의 LCD에 카메라 이미지 표시



PC의 브라우저로 표시하는 것도 좋지만, 모처럼 M5 시리즈이므로, M5Stack의 LCD에 표시하고 싶습니다.
공식 샘플 프로그램이 있습니까? 라고 생각했습니다만, 2018/12/16 현재는 없었습니다.

선구자 발견



Instructables에서 같은 일을하는 사람을 발견하십시오. 해외에서는 더 빨리 판매되고 있었습니까?
htp://192.168.4.1/
이 안에, M5Stack-Cam-Viewer라고 하는 M5Stack로 M5Camera의 화상을 표시하는 소프트의 리포지토리를 발견.
M5Cam X M5Stack: 5 Steps
M5Camera측의 프로그램도 있습니다만, M5Camera측의 개발 환경이 ESP-IDF 밖에 대응하고 있지 않고, 개발 환경의 준비가 힘들 것 같았다고, 대충 본 M5Camera측은 변경하지 않아도 갈 수 있을 것 같다 기분이 들었기 때문에 M5Stack 측만 시도해 보기로 했습니다.

그대로 움직이지 않는다.



조속히 클론하고 M5Stack에 써서 실행해 보았습니다만, 정기적으로 재기동하는 거동을 해버려 움직이지 않았습니다.
시리얼 모니터에는 다음과 같은 표시가 반복되었습니다.

시리얼 모니터
rst:0x1 (POWERON_RESET),boot:0x17 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:1100
load:0x40078000,len:9220
load:0x40080400,len:6300
entry 0x400806a4
M5Stack initializing...OK
[HTTP] begin...
[HTTP] GET...
[HTTP] GET... code: -11
[HTTP] GET... failed, error: read Timeout
[HTTP] begin...
[HTTP] GET...
[HTTP] GET... code: -11
[HTTP] GET... failed, error: read Timeout
[HTTP] begin...
[HTTP] GET...
[HTTP] GET... code: -11
[HTTP] GET... failed, error: read Timeout
[HTTP] begin...
[HTTP] GET...
[HTTP] GET... code: 200
[HTTP] size: 15200
***ERROR*** A stack overflow in task loopTask has been detected.
abort() was called at PC 0x4008d210 on core 1

Backtrace: 0x4008cfc8:0x3ffae240 0x4008d1f9:0x3ffae260 0x4008d210:0x3ffae280 0x400904e7:0x3ffae2a0 0x40091ff4:0x3ffae2c0 0x40091faa:0x00000000

여러 번 다시 시도하여 연결할 수 있으며 HTTP Get은 성공한 것처럼 보이지만 스택 오버플로가 발생합니다. M5Stack-Cam-Viewer의 소스 코드를 읽으면 다음과 같은 부분이있었습니다.

M5Stack_Cam_Viewer.ino
        // get lenght of document (is -1 when Server sends no Content-Length header)
        int len = http.getSize();
        Serial.printf("[HTTP] size: %d\n", len); // (1)

        if (len <= 0) {
          Serial.printf("[HTTP] Unknow content size: %d\n", len);
        } else {
          // create buffer for read
          uint8_t buff[len] = { 0 }; // (2)

시리얼 출력에 [HTTP] size: 15200 가 표시되어 있으므로 (1)까지는 실행할 수 있는 것 같습니다. 스택 오버플로라고 하는 것이므로, (2)의 uint8_t buff[len] = { 0 }; 라고 하는 곳이 수상합니다. 라고 할까 여기겠지요.

일단 버퍼의 정의를 loop() 밖에 정적으로 해 보기로 합니다. 사이즈를 모르겠습니다만, [HTTP] size: 15200 라고 있었으므로 일단 20kb정도 정의해 보기로 했습니다.

M5Stack_Cam_Viewer.ino
uint8_t buff[20 * 1024] = { 0 }; // 追加
void loop() {
:
          // create buffer for read
//          uint8_t buff[len] = { 0 }; // コメントアウト

하지만 잘 작동하지 않았습니다. 다시 시리얼 모니터를 보면 다음과 같은 표시가 되었습니다.

시리얼 모니터
[HTTP] GET... code: 200
[HTTP] size: 31200
[HTTP] read: 4308
[HTTP] read: 4308
[HTTP] read: 5744
[HTTP] read: 5744
Guru Meditation Error: Core  1 panic'ed (InstrFetchProhibited). Exception was unhandled.
Core 1 register dump:

스택 오버플로가 아닌 것 같습니다만, [HTTP] size: 32100 (이)라고 있으므로, 버퍼의 사이즈가 부족하지 않은 것 같습니다.
아래와 같이 버퍼 사이즈를 20kb→64kb로 수정했습니다.

M5Stack_Cam_Viewer.ino
uint8_t buff[64 * 1024] = { 0 }; // 20->64に変更

성공



볼 수 있었습니다. 훌륭합니다.
moononournation/M5Stack-Cam-Viewer: Arduino M5Cam viewer for M5Stack

의 동영상에서는, 1fps 정도 나오고 있는 것 같습니다만, 내 손에 있으면 0.2fps(1회의 갱신에 5초 가까이 걸린다) 정도밖에 나와 있지 않습니다. 원인은 모릅니다만, LCD 화면이 위에서 아래까지 갱신되는 것이 눈으로 봐 알 정도로 늦기 때문에, 그 근처라고 생각합니다.

현재 M5Camera가 액세스 포인트이지만 기존 Wifi에 연결하려면 M5Camera측의 코드를 수정해야 합니다. M5Camera측의 코드가 만지면, 단체로 화상 인식의 프로그램을 달리거나 등 여러가지 할 것 같습니다만, ArduinoIDE에 대응해 주지 않을까…

좋은 웹페이지 즐겨찾기