M5Stamp C3 Mateを試してみました【Arduino使用】

Raspberry Pi/電子工作

こんにちは、あろっちです。

M5Stamp C3 Mateを入手したので試してみました。

m5-docs
The reference docs for M5Stack products. Quick start, get the detailed information or instructions such as IDE,UIFLOW,Arduino. The tutorials for M5Burner, Firmw...

本記事では、プログラムにArduino(C/C++)を使っています。

スポンサーリンク

ピン配列

LEDG2
ボタンG3

回路図

内容物

こんな感じです。

1 x M5Stamp C3
1 x 耐熱ステッカー
1 x M2 六角レンチ
2 x HY2.0-4Pコネクタ(90° Grove互換コネクタ)
1 x ピンヘッダ 6ピン
1 x ピンソケット 6ピン
1 x ピンヘッダ 9ピン
1 x ピンソケット 9ピン

技適マークは添付のステッカーに印刷されています。

最初は、ケースがついた状態で、ケースにMACアドレスが記載されたシールが貼り付けられていました。

MACアドレスのシールをはがした状態

ケースを取り外すには、MACアドレスのシールをはがし、ネジを付属の六角レンチで外します。

USBシリアルについて

今回入手したM5Stamp C3は、シリアルにCH9102Fというチップを搭載しています。
※回路図を見ると、CP2104と書いてありますが、実物はCH9102Fが実装されているようです。

※2021年11月1日追記
スイッチサイエンスさんよりシリアルチップの変更とCH9102Fドライバについて、アナウンスがありました。

M5Stack v2.6の変更点とCH9102Fのドライバについて
みなさんこんにちは。鹿島です。 先日もお伝えしましたが、このたびM5Stack Coreシリーズのv2.6が発売となりましたので、そのご紹介です。 Basic、GO、FIREの三つがv2.6となり、スイッチサイエンスでは別SKUで発売となります。なお、在庫がある間は前バージョンも併売します。 変更点 ...

Mac シリアルドライバ

※2021年11月1日追記
公式サイトから、CH9102_VCP_SER_MacOSをダウンロードできます。

https://docs.m5stack.com/en/download

以下の情報は、自分の環境だと上記ドライバのインストーラで画像のようなエラーが発生し、インストールできなかったため、代替手段として書いています。


なお、上記ドライバがインストールできれば、以下のドライバのインストールは不要です。

macOS Catalina 10.15.7

自分の環境では、上述のエラーが発生したため、(wch公式)最新のUSBシリアルドライバ(CH34xVCPDriver V1.1)をインストールすることで使用することができました。

https://github.com/WCHSoftGroup/ch34xser_macos

こちらから、CH34xVCPDriver.pkgをダウンロードしてインストールします。
インストール手順なども書いてあります。

Windows 10 シリアルドライバ

公式サイトから、CH9102_VCP_SER_Windowsをダウンロードできます。
ダブルクリックでインストーラが起動し、[INSTALL]をクリックするとドライバがインストールできます。

https://docs.m5stack.com/en/download

Arduinoボード設定

ESP32ボード(Ver2.0.0以降)をインストールします。
※2021年11月13日現在 Ver2.0.1がリリースされています。なお、安定リリース版でOKです。
筆者としては、開発リリース版(RC版)は動作が不安定なことも考えられますので、ご使用はあまりお勧めしません。

ESP32ボードのインストール方法については、以下の記事をご参照ください。

[ツール] > [ボード] > [ESP32 Arduino] > [ESP32C3 Dev Module]を選択します。

シリアルポートは、Macの場合、/dev/cu.wchusbserial*から始まるポートを選択します。

Windowsの場合は、COM*で認識されますので、それを選択します。

書き込みモード(Download Boot)

G9とGNDを短絡することで、書き込みモードにできるようです。

ESP32C3 Technical Reference Manual(7.2 Boot Mode Control)および回路図を参考にしました。

書き込みがうまくいかない場合に試すとよいかと思います。

今回は、ピンヘッダー未装着のため、スルーホール用テストワイヤで試してみました。

以下のようにUSBを接続し、Arduino IDE(1.8.15 Mac版)からスケッチが書き込めるのを確認しました。

参考(pdf):

esp32-c3_technical_reference_manual
esp32-c3_datasheet_en

今回使用したスルーホール用テストワイヤは、秋月電子通商さんで入手したものです。

スルーホール用テストワイヤ TT−200 (10本入): 電子工作便利商品 秋月電子通商-電子部品・ネット通販
電子部品,通販,販売,半導体,IC,マイコン,電子工作スルーホール用テストワイヤ TT−200 (10本入)秋月電子通商 電子部品通信販売

サンプルプログラム(Arduinoスケッチ)

Lチカ

カラフルにLチカしてみました。

Adafruit NeoPixelライブラリを使用しています。

#include <Adafruit_NeoPixel.h>

#define LED_PIN 2

#define COLOR_REPEAT 2

// create a pixel strand with 1 pixel on PIN_NEOPIXEL
Adafruit_NeoPixel pixels(1, LED_PIN);

uint8_t color = 0, count = 0;
uint32_t colors[] = {pixels.Color(125, 0, 0), pixels.Color(0, 125, 0), pixels.Color(0, 0, 125), pixels.Color(125, 125, 125)};
const uint8_t COLORS_LEN = (uint8_t)(sizeof(colors) / sizeof(colors[0]));

void setup() {
  pixels.begin();  // initialize the pixel
}

void loop() {
  pixels.setPixelColor(0, colors[color]);
  pixels.show();
  
  delay(1000);
  
  pixels.clear();
  pixels.show();
  
  delay(1000);
  
  count++;

  if(count >= COLOR_REPEAT) {
    count = 0;
    color++;
    if(color >= COLORS_LEN) {
      color = 0;
    }
  }
}

レインボー

#include <Adafruit_NeoPixel.h>

#define LED_PIN 2
#define MAX_BRIGHTNESS 255

Adafruit_NeoPixel pixels(1, LED_PIN);

int rgbValues[] = {MAX_BRIGHTNESS, 0, 0}; // 0=Red, 1=Green and 2=Blue
int upIndex = 0, downIndex = 1;

void setup()
{
  pixels.begin(); // initialize the pixel
}

void loop()
{
  rgbValues[upIndex] += 1;
  rgbValues[downIndex] -= 1;

  if (rgbValues[upIndex] > MAX_BRIGHTNESS)
  {
    rgbValues[upIndex] = MAX_BRIGHTNESS;
    upIndex = upIndex + 1;

    if (upIndex > 2)
    {
      upIndex = 0;
    }
  }

  if (rgbValues[downIndex] < 0)
  {
    rgbValues[downIndex] = 0;
    downIndex = downIndex + 1;

    if (downIndex > 2)
    {
      downIndex = 0;
    }
  }

  pixels.setPixelColor(0, pixels.Color(MAX_BRIGHTNESS - rgbValues[0], MAX_BRIGHTNESS - rgbValues[1], MAX_BRIGHTNESS - rgbValues[2]));
  pixels.show();

  delay(5);
}

HelloServer

[スケッチ例] > [WebServer] > [HelloServer]のコードをM5Stamp C3用に修正したものです。
LEDにNeoPixelを使うように修正しています。

#include <WiFi.h>
#include <WiFiClient.h>
#include <WebServer.h>
#include <ESPmDNS.h>
#include <Adafruit_NeoPixel.h>

const char* ssid = "........";
const char* password = "........";

WebServer server(80);

#define LED_PIN 2
Adafruit_NeoPixel pixels(1, LED_PIN);

void led_on() {
  pixels.setPixelColor(0, pixels.Color(125, 0, 0));
  pixels.show();
}

void led_off() {
  pixels.clear();
  pixels.show();  
}

void handleRoot() {
  led_on();
  server.send(200, "text/plain", "hello from esp32!");
  led_off();
}

void handleNotFound() {
  led_on();
  String message = "File Not Found\n\n";
  message += "URI: ";
  message += server.uri();
  message += "\nMethod: ";
  message += (server.method() == HTTP_GET) ? "GET" : "POST";
  message += "\nArguments: ";
  message += server.args();
  message += "\n";
  for (uint8_t i = 0; i < server.args(); i++) {
    message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
  }
  server.send(404, "text/plain", message);
  led_off();
}

void setup(void) {
  pixels.begin();
  Serial.begin(115200);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.println("");

  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  if (MDNS.begin("esp32")) {
    Serial.println("MDNS responder started");
  }

  server.on("/", handleRoot);

  server.on("/inline", []() {
    server.send(200, "text/plain", "this works as well");
  });

  server.onNotFound(handleNotFound);

  server.begin();
  Serial.println("HTTP server started");
}

void loop(void) {
  server.handleClient();
  delay(2);//allow the cpu to switch to other tasks
}

スケッチを書き込む場合、ssidとpasswordを接続するWi-Fiの情報に書き換えてください。

シリアルモニターを開くと、HelloServerのIPアドレスが表示されますので、ブラウザからアクセスします。

以下のように表示されます。

http://IPアドレス

http://IPアドレス/inline

http://IPアドレス/適当な文字列

まとめ

小さくて高機能。USBシリアルポート搭載で、すぐ試せるというのが嬉しいですね。

お試し程度でしか触れていませんが、ご参考になればと思います。

以下は、当ブログで紹介したマイコンの記事です。よろしければ、ご覧ください。

スポンサーリンク
この記事を書いた人
あろっち

元ITエンジニア
エンジニア時代は大手企業などでSE・プログラマを経験してきました。

当ブログでは、経験や日々の暮らしの中で、興味があること、役に立ちそうなこと、気になったことを発信していきます。

IT関係(技術的な内容もあります) / スマホ・PC / ガジェット / 生活に役立ちそうなこと ... etc

あろっちをフォローする
Raspberry Pi/電子工作IT
スポンサーリンク
あろっちをフォローする
あろしーど

コメント

タイトルとURLをコピーしました