SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

.NET nanoFrameworkとESP32でIoTプログラミング

C#でLED電光掲示板を作ろう! .NET nanoFrameworkとESP32でIoTプログラミング!

.NET nanoFrameworkとESP32でIoTプログラミング 第5回


  • X ポスト
  • このエントリーをはてなブックマークに追加

 .NET nanoFrameworkは、組み込みデバイス向けの.NET実装です。.NET nanoFrameworkを用いれば、ハードウェア的な制約のあるマイコンボードでも、C#でのプログラミングが可能になります。この連載では、.NET nanoFrameworkと、ESP32マイコンモジュール(ESP32-WROVERなど)を使い、C#によるIoTプログラミングを解説します。

  • X ポスト
  • このエントリーをはてなブックマークに追加

対象読者

 IoTに興味があり、C#と電子工作の基本的な知識がある方を対象とします。C#や電子工作のごく初歩的な説明は割愛していますので、「C#ではじめるラズパイIoTプログラミング」の記事なども併せて参照してください。

はじめに

 連載第5回の今回は、マトリックスLEDを使った電光掲示板表示や距離センサーの値を表示するプログラムを作成します。

マトリックスLEDとは

 マトリックスLEDは、複数のLEDを行列状にならべて一体化したLEDです。今回は、8×8ドット(LED縦横8個、計64個)のマトリックスLEDを利用します。

 マトリックスLEDは、行と列を選択して特定のLEDを点灯させます。8×8ドットなら、計16ビットのデータで制御できるということです。前回解説した16ビットシフトレジスタMAX7219を使うことで、かんたんに制御することができます。

マトリックスLEDディスプレイモジュール

 マトリックスLEDは、単体でも入手できますが、8×8ドットのマトリックスLEDとMAX7219をセットにしたディスプレイモジュールが安価で入手可能です。専用の基板上にLEDとICが配置されるので、LEDを配線する必要はありません。またESP32とは、SPIでの接続となります。

 今回は、マトリックスLEDが1つのタイプと、4つカスケード接続されたタイプを利用します。いずれも、Amazon等で安価で販売されているものです。

8×8ドットマトリックスLED
8×8ドットマトリックスLED

接続

 最初は、マトリックスLED1つのタイプです。このディスプレイモジュールには、電源と、MAX7219のSPIの3つの信号線(DIN、CS、CLK)が接続できるようになっています。3つの信号線それぞれを、ESP32のMOSI、CS、SCLKに設定した端子に接続します。今回も、GPIO21をMOSI、22をSCLK、23をCSとしています。

ハートマークを表示する

 さっそくプログラムを作成しましょう。.NET nanoFrameworkのブランクプロジェクトを新規作成後、NuGetパッケージマネージャで、あらかじめ次のパッケージをインストールしておきます。

  • nanoFramework.Hardware.Esp32
  • nanoFramework.Iot.Device.Max7219

 今回は、Max7219用のクラスを利用しますので、とてもシンプルなコードで制御することができます。まずは、次のようなハートマークを表示してみます。

8×8ドットのハートマークデータ
8×8ドットのハートマークデータ

 ソースは、次のようになります。

[リスト1]Program.csの一部

public static void Main()
{
    // SPIで利用する端子の設定(1)
    Configuration.SetPinFunction(21, DeviceFunction.SPI1_MOSI);
    Configuration.SetPinFunction(22, DeviceFunction.SPI1_CLOCK);

    // CS端子とクロック周波数の設定(2)
    var connectionSettings = new SpiConnectionSettings(1, 23) // CS GPIO23
    {
        ClockFrequency = 10_000_000, // 10MHzクロック
    };
    
    // SPI通信オブジェクトの生成(3)
    using var spi = SpiDevice.Create(connectionSettings);

    // MAX7219オブジェクトの生成(4)
    var m7219 = new Max7219(spi);

    // ハートマークのバイト列データ(5)
    var heart = new byte[] { 
                    0b00000000,
                    0b01101100,
                    0b11111110,
                    0b11111110,
                    0b01111100,
                    0b00111000,
                    0b00010000,
                    0b00000000
    };

    // MAX7219の初期化(6)
    m7219.Init();

    // 表示データを内部バッファに書き込む(7)
    for (var i = 0; i < 8; i++)
    {
        m7219[new DeviceIdDigit( deviceId:0, digit: i )] = heart[i];
    }

    // LEDに表示する(8)
    m7219.Flush();
}

 SPIの設定(1)~(3)は、前回と同じコードで、最初にSPI通信オブジェクトを生成します。そして、そのオブジェクトを引数にして、MAX7219オブジェクトを生成します(4)。

 MAX7219の初期化は、Max7219クラスのInitメソッドを実行するだけです(6)。表示するハートマークは、LED1列に対応するデータを1バイトとするバイト配列で定義します。要素数は、8行分の8つとなります(5)。ビットが1で点灯、0で消灯となります。

 LEDを点灯させるには、まずMax7219クラスの内部バッファに表示データを書き込み、その後にまとめてMAX7219に転送するという手順になります。内部バッファは、DeviceIdDigitというオブジェクトの配列になっています。このDeviceIdDigitオブジェクトは、MAX7219の複数接続に対応するため、deviceIdプロパティで、何番目のMAX7219かを指定することができます。ここでは、1つしかありませんので、0を指定しています(7)。Max7219クラスのFlushメソッドで、データが転送されLEDが点灯します。

ハートマーク表示
ハートマーク表示

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
データを表示する向きを変えてみよう

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
.NET nanoFrameworkとESP32でIoTプログラミング連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 高江 賢(タカエ ケン)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/20049 2024/10/03 12:28

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング