「M5Stack」と「Arduino」の共同開発で作られた、小型で高性能なIoTデバイス「Arduino Nesso N1」の初期設定から使い方まで、サンプルプログラムを使って詳しく紹介します。
機能的には液晶画面がタッチパネルで、無線通信はWi-Fi、Bluetoothに加えてLoRa(850〜960MHz)、Thread/Zigbeeに対応しており、これらを利用した機器の製作や学習用途に最適です。
「M5StickC Plus2」の使い方は以下のリンクで詳しく紹介しています。

1.Arduino Nesso N1とは
2.外観
・梱包状態
・本体
・デモ画面
・M5StickC Plus2と比較(互換寸法)
3.仕様一覧表
4.端子番号、機能一覧表
5.開発環境の準備
・Arduino IDEのインストール
・ボードマネージャ、ライブラリのインストールと初期設定
・シリアルモニタ出力設定
・公式チュートリアルの紹介
6.動作確認
・動作紹介
・サンプルプログラム(コピペ)
7.I/Oエキスパンダーについて
・サンプルプログラム(I/Oエキスパンダー)
8.まとめ
1.Arduino Nesso N1とは
「Arduino Nesso N1」は、「Arduino」と「M5Stack」が共同開発したオールインワンIoT開発ボードで、ESP32-C6を搭載し、Wi-Fi 6・Bluetooth 5.3・Thread/Zigbee・LoRaなど複数の通信規格に対応する次世代デバイスです。
1.14 インチの LCD タッチスクリーン、6軸 IMU センサー、2つのプログラマブルボタン、LED、ブザー、充電式バッテリーまで内蔵し、GroveコネクタとQwiicコネクタも搭載しています。
さらに、「M5StickC Plus/Plus2」と同一寸法、同一端子配列で、完全上位互換機としてHATユニット等を使用した高機能なIoTデバイスをこれ1つで実現することができます。
公式のデータシートへのリンクは以下になります。
https://docs.arduino.cc/resources/datasheets/TPX00227-datasheet.pdf
2.外観
梱包状態から、本体の外観、デモ画面、M5StickC Plusとの外観比較について以下から詳しく紹介します。
・梱包状態
梱包状態は下画像のようになります。

箱はしっかりした箱でビニールに包まれて高級感があります。

箱の底には基本的な仕様が書かれています。



箱を開けると上写真のようにArduino Nesso N1本体が収納されています。
本体画面に貼られているフィルムの気泡が気になりますね^^;

本体を取り出すと六角レンチが付属しています。
これは背面のアンテナを収納しているケース部を取り外すためのものです。
内容物を全て取り出したものは下写真のようになります。

・本体
本体の外観は外観は下画像のようになります。

背面には取得している規格が書かれており、技適も取得済みのため安心して使用することができます。

本体は厚さがありますが、付属のアンテナを収納しているケース部が大きいためです。



左側面には「Qwiicコネクタ」の差し込み口があります。これは「I2C通信」デバイスの接続をメインに使用することになると思います。

底部分には「USBーCコネクタ」と「Groveコネクタ」、背面のケースには付属のアンテナが収納されているのが見えます。

付属のアンテナは上写真のように引っ張ると取り出すことができます。

アンテナは取り出すと本体と同じぐらい長いです。

アンテナはLoRa通信の850-960MHzに対応していることが記載されています・。

取り出したアンテナは上写真のように側面に取り付けて使用します。

アンテナは3方向の取り付けが可能で上写真のようにも取り付け可能です。

上写真のようにも取り付け可能でコンパクトに使用できますが、この場合は側面のボタンを押すことができなくなります。
・デモ画面
USB-Cコネクタから電源を供給すると以下のようなデモ画面が表示されます

まずは「Arduino」のロゴが描かれて表示されます。

次に上写真のように「ARDUINO NESSO N1」のようにデバイス名が表示されます。

次に「drag to reveal」と表示されますが、これは「ドラッグして表示」という意味です。

本体画面を指でなぞると、なぞった部分に上写真のようにロゴが表示されていき、全体が表示されると次の画面に切り替わります。
最後の画面は下写真のようになり、使用されているコントローラ名「ESP32-C6」や使用されている周辺機器のIC名、液晶サイズ、「Nesso N1」のWebページのアドレスが表示されます。

さらに画面をタップすると、最初のロゴ画面に戻り、同じように繰り返し表示されます。
・M5StickC Plus2と比較(互換寸法)
無線通信用のアンテナが付属しており、本体ケース内に格納されているため大きく見えますが、アンテナが収納されているケースは下画像のように取り外すことができ、取り外すと「M5StickC Plus/Plus2」と同一寸法で、端子配列も同じです。

付属の六角レンチを使用して背面のネジ2本を緩めることで、アンテナを収納しているケースを取り外すことができます。

背面のケースを取り外すと上写真のようになり、端子配列等の情報が記載されているのが確認できます。

背面のケースを外すと「M5StickC Plus/Plus2」と同一寸法になります。
正面にはそれぞれプログラムで使用できるボタンがあります。

背面に記載されている端子配列を確認すると、「M5StickC Plus/Plus2」と同じ配列になっていることが確認できます。

「USB-Cコネクタ」と「Groveコネクタ」の配置もほぼ同じです。

上面の外部入出力端子の配置と、赤外線LED(IR)の配置もほぼ同じです。

右側面にはそれぞれプログラムで使用できるボタンがあり、「Nesso N1」には上側にアンテナが取り付けられるようになっており、下側にはストラップを取り付けるホルダーがあります。

左側面にはそれぞれ電源ボタンがあり、「Nesso N1」には「QWIICコネクタ」があります。
「M5StickC」用のHATユニット使用可
下写真のように「M5StickC」用のHATユニットもピッタリサイズで取り付け可能です。



上写真のようなユニットも問題なく使用できます。

上写真のような腕時計として使用できる「Watch Accessories」も使用できます。
3.仕様一覧表
基本的な仕様は以下表のようになります。
| 項目 | 詳細 |
|---|---|
| コントローラ | ESP32-C6 RISC-V 32-bit single-core CPU 160 MHz |
| システムメモリ | FLASH:1536 kB SRAM:512 kB 16 MB external Flash (GD25Q128/W25Q128) |
| 無線通信 | 2.4 GHz Wi-Fi® 6 (802.11ax) Bluetooth® 5.3 LE 802.15.4 Thread/Zigbee® FPC専用アンテナ |
| LoRa® 無線通信モジュール | トランシーバ:SX1262(850-960 MHz) アンテナ:IPEX4(取り外し可能、本体に格納可) 受信用低ノイズアンプ:FM8625H 送信用低ノイズアンプ:SGM13005L4 |
| USBコネクタ | USB-C(USB 3.0) |
| LCD | 1.14″ IPS LCD ST7789P3 SPI通信 135 × 240 pixels – 262K colors (18-bit) |
| タッチパネル | FT6336U(静電容量式)I²C通信 |
| 本体ボタン | 本体正面ボタン(KEY1) 本体右側面ボタン(KEY2) 本体左側面ボタン(電源ボタン) ・短押し:電源ON、リセット ・ダブルクリック:電源OFF ・長押し:プログラムダウンロードモード |
| 内蔵LED ※電源ボタン部 | LED緑:プログラムで使用可能 LED青:電源/本体状態表示用 |
| ブザー | パッシブブザー(4kHz)プログラムで使用可能 |
| 赤外線LED | 送信用 |
| IMU(慣性計測)センサー | BMI270 6軸 IMU(3軸 加速度 + 3軸 ジャイロ)I²C通信 |
| 入出力コネクタ、端子 | Groveコネクタ:GPIO, 5V電源、I²C通信(HY2.0-4P) Qwiicコネクタ:I²C通信 ※3.3V(PH1.0-4P) 外部入出力(8ピンHAT):M5StickC HAT互換 (GPIO/ADC/power/BAT) |
| バッテリー | 内蔵リチウムポリマーバッテリー 250 mAh(3.7 – 4.2 V) |
| バッテリー管理IC | バッテリー充電管理IC:AW32001ECSR バッテリー監視IC:BQ27220YZFR |
| 電源制御IC | DC-DCコンバータ:JW5712(システム用3.3V) ブーストコンバータ:SGM6603(周辺機器用3.3V→5V 出力) |
| 入力電圧 | USB-C:5V DC input バッテリー:3.7 V (3.7 – 4.2 V) |
4.端子番号、機能一覧表
端子番号と各端子の機能について以下表のようにまとめました。

「ESP32-C6」の限られた端子で複数の機能を実装しているため、複数のICと通信で接続されており、直接外部入出力(GPIO)として使用できる端子は限られています。
「8x Header」の入出力端子(GPIO 2/6/7)と「GROVE」コネクタの信号端子(GPIO 4/5)は直接外部入出力端子として使用できます。(GPIO 7はアナログ入力不可)
「QWIIC」コネクタはI2C通信と共用の端子(GPIO8/10)で、6軸加速度センサ、バッテリー、タッチパネルを使用しなければ入出力としても使用できますが、ほとんどの場合はI2C通信専用として使用することになると思います。
「赤外線LED」(GPIO 9)と「ブザー」(GPIO 11)は直接外部入出力端子として使用できるため扱いやすいですが、「本体LED(緑)」と「正面ボタン」、「側面右ボタン」は「I2C通信のI/Oエキスパンダー」経由で接続されているため注意が必要です。
以下リンクから公式の端子配列のPDFがダウンロードできます。
5.開発環境の準備
「NESSO N1」を使用するために必要な開発環境とライブラリ等のインストール、初期設定について詳しく紹介します。
・Arduino IDEのインストール
「Arduino IDE」のインストール方法は、以下のリンクで詳しく紹介しています。

・ボードマネージャ、ライブラリのインストールと初期設定
「Arduino IDE」のインストールが完了して起動したら、下画像のように左メニューアイコンから[ボードマネージャ]を選択し、検索窓に「ESP32」と入力すると「esp32 by Espressif」が表示されるため、これをインストールします。

次に以下表のライブラリをインストールします。
| ライブラリ名 | 用途 | バージョン | 検索名 |
|---|---|---|---|
| M5GFX | 液晶画面制御用 | 0.2.17 | M5G |
| M5Unified | M5Stack共通ライブラリ | 0.2.11 | M5Unif |
| Arduino_Nesso_N1 | Arduino提供の専用ライブラリ | 1.0.0 | nesso |
下画像のように左メニューアイコンから[ライブラリマネージャ]を選択して検索窓に「M5GFX(M 5Gまででも良い)」と入力すると「M5GFX by M5Stack」が表示されるためこれをインストールします。

同様に「M5Unified」も検索してインストールしてください。
(ここで公開しているサンプルプログラムの動作確認には表ですが、必要に応じて「Arduino_Nesso_N1」も検索してインストールしてください。)
次に「NESSO N1」とパソコンをUSBケーブルでパソコンと接続します。
接続したら、下写真のようにメニューバーの[ツール]→[ボード:”ESP32 Familly Device”]→[esp32]→[Arduino Nesso N1(最下部)]をクリックしてください。

パソコン側で「NESSO N1」の接続が認識されれば、下画像のように画面上部に「Arduino Nesso N1」と表示されます。

・シリアルモニタ出力設定
最後に初期設定として、「Arduino IDE」のシリアルモニタ機能で「NESSO N1」からのシリアル出力を表示するための設定を行います。
下画像のように[ツール]→[USB CDC On Boot:”Disabled”]→[Enabled]を選択します。

・公式チュートリアルの紹介
チュートリアルについては「M5Stack」と「Arduino」それぞれのサイトで公開されていますのでリンクを貼っておきます。
M5Stack チュートリアル
「M5Stack」公式サイトのチュートリアルは以下リンク先になります。
「クイックスタート」で「Arduino IDE」のインストールから初期設定が紹介され、ボタンや液晶表示、IMUセンサ等の各動作ごとに「サンプルプログラム」が公開されています。
Arduino チュートリアル
「Arduino」公式サイトのチュートリアルは以下リンク先になります。
・初級:ユーザーズマニュアル(Arduino IDEの初期設定、サンプルプログラム)
・中級:加速度センサ(IMU)を使用したモーター異常検出(Edge Impulse使用)
6.動作確認
ここで公開している「サンプルプログラム」を実行した時の動作について紹介します。
・動作紹介
電源を入れると下画像のように「Hello Nesso N1!」が液晶画面に表示されます。
画面右下には電源を入れた直後のバッテリー容量(%)が表示されます。

正面と右側面のボタンを押すことでLEDの点灯/消灯(Lチカ)と、下画像のように液晶画面の表示が切り換わることが確認できます。

「正面ボタン」を押すと液晶画面の背景色が「青色」になり「Button_A ON!」と表示されます。

「右側面ボタン」を押すと液晶画面の背景色が「赤色」になり「Button_B ON!」と表示されます。

「正面ボタン」を押した時には見えにくいですが、上写真のように、電源ボタン奥の「LED(緑)」が点灯します。

「右側面ボタン」を押すと上写真のように、電源ボタン奥の「LED(緑)」が消灯します。
・サンプルプログラム(コピペ)
サンプルプログラムでは「M5Stack」の「M5Unified」ライブラリを使用して、他の「M5Stackシリーズ」と同じようにボタン操作や液晶表示を行っています。
「M5Stackシリーズ」のボタン操作や液晶表示については、以下のリンクで詳しく紹介しています。


サンプルプログラムは以下になります。
コピペで貼り付けて実行してください。コピーは下の黒塗り部右上のアイコンクリックでもできます。
#include <Wire.h> // I2C通信ライブラリ(エラーが出たためインクルード)
#include <M5Unified.h> // M5Stackシリーズ共通ライブラリ
// 初期設定 ***********************************
void setup() {
auto cfg = M5.config();
cfg.serial_baudrate = 115200; // シリアル出力初期化(ArduinoIDEでツール → USB CDC On Boot を「Enable」にしておく)
M5.begin(cfg);
delay(1000); // シリアル出力安定待ち
Serial.println("Hello Nesso N1!");
// バッテリー情報取得
M5.Power.isCharging(); // バッテリー充電を有効に設定
float voltage = M5.Power.getBatteryVoltage(); // バッテリー電圧を取得
Serial.printf("Voltage: %.2fV\n", voltage);
uint16_t chargeLevel = M5.Power.getBatteryLevel(); // バッテリーの推定充電レベルを%表示(数回充放電しないと精度が出ないクーロンカウント式)
Serial.printf("Charge Level: %d%%\n", chargeLevel);
// 液晶画面初期設定
M5.Display.begin(); // M5.Display初期化
M5.Display.setRotation(1); // 画面向き設定(USB位置基準 0:下/ 1:右/ 2:上/ 3:左)
M5.Display.setTextDatum(MC_DATUM); // テキストデータム設定(中央揃え)
M5.Display.setTextColor(TFT_WHITE, TFT_BLACK); // 文字色と背景色指定
M5.Display.setFont(&fonts::Font4); // フォント指定
M5.Display.setTextSize(1); // 文字サイズ(整数倍率)
// 初期画面表示
M5.Display.fillScreen(TFT_BLACK); // 画面クリア(黒塗り)
M5.Display.drawString("Hello Nesso N1!", M5.Display.width() / 2, M5.Display.height() / 2); // 文字表示, 画面サイズを取得して中央に表示
M5.Display.setCursor(190, 120); // 表示座標設定(x, y)
M5.Display.printf("%d%%", chargeLevel); // バッテリーレベル表示
}
// メインループ ********************************
void loop() {
M5.update(); // ボタン状態更新
auto& ioe = M5.getIOExpander(1); // I/OエキスパンダーE1のオブジェクトを取得
if (M5.BtnA.wasPressed()) { // 本体正面ボタンAがONなら
Serial.println("Button_A ON!"); // ボタンONシリアル出力
M5.Display.fillScreen(TFT_BLUE); // 画面青塗り
M5.Display.setTextColor(TFT_WHITE, TFT_BLUE); // 文字色と背景色指定
M5.Display.drawString("Button_A ON!", M5.Display.width() / 2, M5.Display.height() / 2); // 文字表示、画面サイズを取得して中央に表示
ioe.digitalWrite(7, false); // 本体LED点灯(E1.P7)
}
if (M5.BtnA.wasReleased()) { // 本体正面ボタンAがOFFなら
Serial.println("Button_A OFF!"); // ボタンOFFシリアル出力
}
if (M5.BtnB.wasPressed()) { // 本体正面ボタンBがONなら
Serial.println("Button_B ON!"); // ボタンONシリアル出力
M5.Display.fillScreen(TFT_RED); // 画面赤塗り
M5.Display.setTextColor(TFT_WHITE, TFT_RED); // 文字色と背景色指定
M5.Display.drawString("Button_B ON!", M5.Display.width() / 2, M5.Display.height() / 2); // 文字表示、画面サイズを取得して中央に表示
ioe.digitalWrite(7, true); // 本体LED消灯(E1.P7)
}
if (M5.BtnB.wasReleased()) { // 本体側面ボタンBがOFFなら
Serial.println("Button_B OFF!"); // ボタンOFFシリアル出力
}
delay(100);
}7.I/Oエキスパンダーについて
「NESSO N1」には限られた入出力端子を拡張するために「I/Oエキスパンダー」が2個使用されています。
これらの端子の入出力の指定は通常の「GPIO」のように直接指定するのではなくI2C通信で「I/Oエキスパンダー」経由で指定する必要があります。
「NESSO N1」で「I/Oエキスパンダー」経由で接続されている入出力端子については以下表のようになります。
・I/Oエキスパンダー E0

・I/Oエキスパンダー E1

上表のように使用頻度の高い操作ボタンやLEDも「I/Oエキスパンダー」経由になっています。
実際にI2C通信でこれらを使用するのは大変ですが「M5Unified」ライブラリを使用することで簡単に使用することができるため、以下サンプルプログラムで使用例を紹介しておきます。
サンプルプログラム(I/Oエキスパンダー)
「M5Unified」ライブラリを使用することで「I/Oエキスパンダー」経由のボタンとLEDを操作する「Lチカ」のサンプルプログラムを紹介します。
サンプルプログラムは以下になります。
コピペで貼り付けて実行してください。コピーは下の黒塗り部右上のアイコンクリックでもできます。
#include <Wire.h> // I2C通信ライブラリ(エラーが出たためインクルード)
#include <M5Unified.h> // M5Stackシリーズ共通ライブラリ
// 初期設定 ***********************************
void setup() {
auto cfg = M5.config(); // 設定オブジェクトを取得
M5.begin(cfg); // デバイス全体を初期化(LCD,I/Oエキスパンダー,ボタン,IMU等)
}
// メインループ ********************************
void loop() {
// I/Oエキスパンダー更新
auto& ioe0 = M5.getIOExpander(0); // E0のオブジェクトを取得
auto& ioe1 = M5.getIOExpander(1); // E1のオブジェクトを取得
// ボタン処理(Lチカ)
if (ioe0.digitalRead(0) == false) { // 正面ボタン(E0.P0)がONなら
ioe1.digitalWrite(7, false); // LED(E1.P7)点灯
}
if (ioe0.digitalRead(1) == false) { // 側面右ボタン(E0.P1)がONなら
ioe1.digitalWrite(7, true); // LED(E1.P7)消灯
}
delay(100); // 遅延時間
}8.まとめ
「Arduino Nesso N1」の初期設定から使い方まで、サンプルプログラムを使って詳しく紹介しました。
「Arduino Nesso N1」は、「M5Stack」と「Arduino」それぞれの強みを活かした、非常に高機能で拡張性の高いIoT開発ボードです。
小型ながらタッチ液晶・各種センサー・複数の無線規格・バッテリーまで搭載し、さらに「M5StickC Plus/Plus2」との互換性によって既存のHATユニットも活用できます。
一方で、「ESP32-C6」の限られたGPIOを補うために「I/Oエキスパンダー」が多用されており、どの端子が直接GPIOで、どれがエキスパンダー経由なのかを理解しておくことが、Nesso N1を使いこなす上で重要なポイントになると思います。
記事内で紹介した端子一覧やライブラリの扱いを押さえておけば、複雑な構成でも迷わず開発を進められるはずです。
初心者向けというよりは、複数の通信規格を試したい方や、「M5StickCシリーズ」の互換性を活かしてより高度なIoTデバイスを作りたい方に最適なデバイスですね。
この記事が、「Nesso N1」の初期設定から実際のプログラミングまでの理解を深め、あなたのIoT開発の幅を広げるきっかけになれば嬉しいです^^
基本的な使い方がわかったところで、次は前から気になっていた無線通信Lo-Raを試して見ようと思ってますので、また動作確認の様子を紹介したいと思います。































コメント