M5 : 비트로 샘플 프로그램 이동

14165 단어 M5stackmicrobitM5Bit

M5:Bit converter Board for Micro:bit



M5:Bit를 입수했지만 샘플 프로그램의 움직이는 방법이 알기 어려웠기 때문에, 기재합니다.

원래 이것은 무언가라고 말하면, Micro:bit를 M5Stack로부터 제어하기 위한 것입니다.
이 M5:Bit를 Micro:bit에 장착하는 것으로 Grove 접속의 Micro:bit 모듈에 할 수 있는 이미지입니다. 다만 Micro:bit측에도 그것용의 프로그램이 필요하게 됩니다.

각각의 프로그램은 공식의 아래 링크에 기재된 대로입니다만 여러가지 작동하지 않았던 점이 있었습니다.

M5Stack측 프로그램



공개된 샘플 프로그램인 M5BIT.ino에서는
#include <M5StackUpdater.h>

에서 우선 컴파일 오류가 되었습니다.
검색해 조사해 보면, 이것은 「M5Stack-SD-Updater」라고 하는 것이 사용되고 있다고 합니다.

↓M5Stack-SD-Updater에 대해서는, 이쪽의 설명을 알기 쉬웠습니다.
htps : // 이 m/토모토 w56/이고 ms/c58f099595bc873에 4c65

과연 매우 편리한 라이브러리인 것 같습니다.
그래서이 정보에 따라 라이브러리를 설치하고 진행하려고하면 또한 새로운 종속성 오류에. 그리고 그 앞에 또 의존관계가‥로 궁극적으로 잘 모르는 에러에.

원래, M5Stack-SD-Updater는 편리할 것 같지만 이번 움직여보고 싶은 M5:Bit에는 사용하지 않아도 좋을 것 같기 때문에 M5Stack-SD-Updater를 사용하지 않게 했습니다.

특히 include 행과
  if(digitalRead(BUTTON_A_PIN) == 0){
    Serial.println("Will load menu binary");
    updateFromFS(SD);
    ESP.restart();
  }

을 코멘트 아웃하는 것만으로 괜찮았습니다.

또, 이 M5:Bit는 UART 통신이므로, GROVE 포트는 M5Stack Fire등의 PortC(청색)에 연결합니다.
(처음 M5Stack Basic의 I2C의 GROVE 포트에 연결되어 버려 "움직이지 않는다"라고 꺾어 버렸습니다.)

m5bit.ino
/*
    Description: Use UART communication to control the LED matrix on microbit.
*/
#include <M5Stack.h>

#define WIDTH 320
#define HEIGHT 240
#define BLOCK_SIZE  40
#define UNIT_WIDTH  5
#define UNIT_HEIGHT 5
#define UNIT_SIZE 25
#define GETX(i) ((i) % (5))
#define GETY(i) ((i) / (5))
int world[UNIT_SIZE];
int i;

void setup() {
  M5.begin();
  M5.Power.begin();
  Wire.begin();
//  if(digitalRead(BUTTON_A_PIN) == 0){
//    Serial.println("Will load menu binary");
//    updateFromFS(SD);
//    ESP.restart();
//  }
  Serial2.begin(115200, SERIAL_8N1, 16, 17);
  M5.Lcd.fillScreen(BLACK);
  M5.Lcd.setTextSize(2);
  M5.Lcd.setCursor(35, 220);  
  M5.Lcd.println("  <       *       >");  
    for (i = 0; i < UNIT_SIZE; i++) {
    world[i] = 0;
  }
  i = UNIT_SIZE / 2;
}

void loop() {
      M5.update();
      int x = GETX(i) + 1;
      int y = GETY(i);
      if (world[i] > 0) M5.Lcd.fillRect(x * BLOCK_SIZE + 1, y * BLOCK_SIZE + 1, BLOCK_SIZE - 2, BLOCK_SIZE - 2, LIGHTGREY);
      else M5.Lcd.fillRect(x * BLOCK_SIZE + 1, y * BLOCK_SIZE + 1, BLOCK_SIZE - 2, BLOCK_SIZE - 2, BLUE);
      if (M5.BtnC.wasPressed()) {
         if (world[i] > 0) M5.Lcd.fillRect(x * BLOCK_SIZE + 1, y * BLOCK_SIZE + 1, BLOCK_SIZE - 2, BLOCK_SIZE - 2, WHITE);
         else M5.Lcd.fillRect(x * BLOCK_SIZE, y * BLOCK_SIZE, BLOCK_SIZE, BLOCK_SIZE, BLACK);
         ++i;
         if (i >= UNIT_SIZE) i=0;
      }
      if (M5.BtnA.wasPressed()) {
         if (world[i] > 0) M5.Lcd.fillRect(x * BLOCK_SIZE + 1, y * BLOCK_SIZE + 1, BLOCK_SIZE - 2, BLOCK_SIZE - 2, WHITE);
         else M5.Lcd.fillRect(x * BLOCK_SIZE, y * BLOCK_SIZE, BLOCK_SIZE, BLOCK_SIZE, BLACK);
         --i;
         if (i < 0 ) i=UNIT_SIZE -1;
      }
      if (M5.BtnB.wasPressed()) {
        if (world[i] > 0) world[i]=0;
        else world[i]=1;
        Serial2.print(world[i]);
        Serial2.print(GETX(i));
        Serial2.println(GETY(i));
      }
}

Micro:bit측 프로그램



여기는 MakeCode입니다.
샘플은 영어 표기의 이미지였기 때문에 일본어로 하면 이렇게 됩니다.



실행



M5Stack측 프로그램과 Micro:bit측 프로그램을 기입하면, 접속해 실행할 수 있습니다.

좋은 웹페이지 즐겨찾기