
M5Atom을 PlatformIO로 이동 - 라이브러리 설치에서 가속도 획득까지
2022-10-06 last update
14 minutes reading PlatformIO M5Atom Arduino M5StickC ESP32우치에도 M5Atom이 도착했습니다!
M5AtomMatrix

옆의 버튼은 리셋 버튼으로, 이른바 버튼은 화면 누름이군요. 호.
덧붙여서 버튼은 뒷면을 눌러도 작동하는 것 같습니다.
조만간 PlatformIO로 시험해 보았는데, M5StickC를 지정해 빌드가 통과했습니다.
platformio.ini
[env:m5stick-c]
platform = espressif32
board = m5stick-c
framework = arduino
monitor_speed = 115200
라이브러리 설치
게다가 여기 에 공식 라이브러리의 초기 버젼이 오르고 있었으므로, 이쪽도 시도해 보았습니다.

PlatformIO 명령 행 (맨 오른쪽 [>])을 열고
platformio lib install 3113
를 입력하면 M5Atom 라이브러리가 설치됩니다.
현재 라이브러리 버전은 0.0.1
FastLED 라이브러리 설치
그대로 빌드하면 오류가 발생했습니다. 분명히 FaltLED 라이브러리가 필요한 것 같습니다.
게다가 자신의 환경이라고 최신판(3.3.3)으로 빌드하면 에러가 되었습니다.
PlatformIO>Libraries에서 라이브러리 화면으로 이동하여 FastLED를 선택한 후 3.2.10을 선택하여 설치하면 빌드가 통과하게 되었습니다.
[정정] 빌드 에러는 Adafruit_Neopixel 라이브러리와 FastLED 라이브러리를 #if로 전환하려고 했기 때문이었습니다. #if 문제는 여기 페이지에서와 같이
platformio.ini(part)
lib_ignore = RF24_STM32
추가로 피할 수있었습니다 (Mac 만?)

가속도 획득
샘플의 동작도 확인할 수 있었으므로, 다음에 샘플에 손을 가해 가속도를 취해 보겠습니다.
main.cpp
#include "M5Atom.h"
#define SIG_MAX (4096)
extern const unsigned char AtomImageData[375 + 2];
uint8_t DisBuff[2 + 5 * 5 * 3];
int16_t adX,adY,adZ;
void setBuffP(uint8_t posData, uint8_t Rdata, uint8_t Gdata, uint8_t Bdata)
{
DisBuff[2 + posData * 3 + 0] = Rdata;
DisBuff[2 + posData * 3 + 1] = Gdata;
DisBuff[2 + posData * 3 + 2] = Bdata;
}
void setBuff(uint8_t Rdata, uint8_t Gdata, uint8_t Bdata)
{
for (uint8_t i = 0; i < 25; i++)
setBuffP(i, Rdata, Gdata, Bdata);
}
void shftBuff()
{
for (uint8_t i = 24; i > 0; i--)
{
for (uint8_t j = 0; j < 3; j++)
DisBuff[2 + i * 3 + j] = DisBuff[2 + (i-1) * 3 + j];
}
}
void setup()
{
DisBuff[0] = 0x05;
DisBuff[1] = 0x05;
M5.begin(false, true, true);
delay(10);
M5.IMU.Init();
setBuff(0x20, 0x20, 0x20);
M5.dis.displaybuff(DisBuff);
}
void loop()
{
M5.update();
if (M5.Btn.read()==0)
{
M5.IMU.getAccelAdc(&adX, &adY, &adZ);
int r = min(max((int)map(adX,-SIG_MAX,SIG_MAX,0,255),0),255);
int g = min(max((int)map(adY,-SIG_MAX,SIG_MAX,0,255),0),255);
int b = min(max((int)map(adZ,-SIG_MAX,SIG_MAX,0,255),0),255);
shftBuff();
setBuffP(0,r,g,b);
M5.dis.displaybuff(DisBuff);
}
delay(20);
}
이것으로 기울기에 따라 LED가 빛나게 된다고 생각합니다.
동영상

일단 간단하게 보충해 둡니다.
M5.begin(false, true, true);
인수는 왼쪽에서 Serial,I2C,Display(LED Matrix)의 유효/무효 플래그입니다.
Serial 을 true 로 하면(자)
Serial.println()
등을 사용할 수 있게 됩니다.또, I2C를 유효하게 해도 가속도 센서는 초기화되지 않기 때문에(Wire.begin()가 불릴 뿐),
M5.IMU.Init();
추가로 호출합니다.
IMU에는 이런 식으로 함수가 준비되어 있습니다.
MPU6886.h(part)
:
public:
MPU6886();
int Init(void);
void getAccelAdc(int16_t* ax, int16_t* ay, int16_t* az);
void getGyroAdc(int16_t* gx, int16_t* gy, int16_t* gz);
void getTempAdc(int16_t *t);
void getAccelData(float* ax, float* ay, float* az);
void getGyroData(float* gx, float* gy, float* gz);
void getTempData(float *t);
void SetGyroFsr(Gscale scale);
void SetAccelFsr(Ascale scale);
void getAhrsData(float *pitch,float *roll,float *yaw);
:
버튼은
Button.h(part)
:
public:
uint8_t read();
uint8_t isPressed();
uint8_t isReleased();
uint8_t wasPressed();
uint8_t wasReleased();
uint8_t pressedFor(uint32_t ms);
uint8_t releasedFor(uint32_t ms);
uint8_t wasReleasefor(uint32_t ms);
uint32_t lastChange();
:
등이 준비되어 있습니다.
if (M5.Btn.read()==0)
는 ```누름시가 1, 떨어진 때가 0입니다.
Wi-Fi 등의 기능도 시도했습니다. 가 M5StickC 그대로 빌드에서 작동했습니다.
그 밖에도 여러가지 놀 수 있을 것 같습니다!