LoginSignup
1
0

More than 1 year has passed since last update.

LEDパネルキットAKBONE2022で楽しもう! Beta3版

Posted at

「LEDパネルキットAKBONE2022で楽しもう! Beta1版」
https://qiita.com/nanbuwks/items/4317031bdf3bdcfafbf8

で紹介したLEDパネルキットを、初心者向けに楽しめる教育コンテンツにするようにソフトウェアの開発を進めています。4月頃の発売、およびワークショップなどの開催を予定しています。

この記事では、リリースに向けての進捗、リリース後の情報をこちらにまとめていきます。

(2023/02/04 記載) 以下の内容は「LEDパネルキットAKBONE2022で楽しもう! Beta1版」とほぼ一緒ですが、ソフトウェアの開発が進み次第内容を変更していきます。

キットのラインナップ

基本キット

image.png

これとLEDパネルを組み合わせて使います。

¥2000

LEDパネル(安)

image.png
P3 ( ピッチ3mm )、192mm x 96mm 、64x32 pixel のパネルです。
なお、P4 ( ピッチ4mm )、256mm x 64mm 、64x32 pixel のパネルも選択できます。

¥2000

LEDパネル(高)

image.png
P2 ( ピッチ2mm )、 256mm x 128mm 、128x64 pixel のパネルです。

¥5000

電源キット 2600mAH (PSE)

image.png

通常の利用シーンはUSB電源につなげて使う想定ですが、AVTOKYOイベントにおいて首から下げてバッジとして使うためにモバイルバッテリーをオプションで用意しました。

¥1000

電源キット 3100mAH (BASEN)

image.png

ちょっと高性能なモバイルバッテリーキットです。

¥1500

ブースターパック

image.png

センサなどをつなげて、いろんな機能を使えるようにするパーツです。

¥2000

組み立て方

用意する道具

  • はんだごて
  • ピンセット
  • ニッパー

基本キット

image.png

内容の一覧です。

  • 基板 x 1
  • ターミナル x 2
  • 0.1μF 1206メトリック表面実装コンデンサ x 2 (多めに入っています)
  • ピンソケット 一列 (切って使います)
  • ESP32ボード x 1

image.png

Beta1の基板です

image.png

Beta1 のPCBは ESP32 Devkit のいくつかのタイプに対応しています。
image.png

キットに入っている ESP32 ボードに合わせてピンソケットをカットします。
image.png

このように取り付けます。基板の表裏に注意! 注意! 注意!

image.png

一列をはんだづけします。終わったら反対側のもう一列も。ちなみに、ESP32はまだ接続しないのが無難です。アース処理ができていない機材の場合は、パーツを壊す可能性があります。

image.png

ボックスヘッダをはんだづけ。

image.png

ターミナルを2つつけます。
image.png

表面実装のコンデンサ、予備で1つ入ってますが2つをはんだづけします。
C1 は ESP32 への書き込みの安定化のためのコンデンサです。
C2 はロータリーエンコーダーの安定化のためのコンデンサで、ロータリーエンコーダーはブースターキットに含まれるパーツですが、ここで一緒に取り付けます。
image.png

片側にはんだを盛ります

image.png

ピンセットを使ってはんだをとかし、付けてみましょう
image.png

もう片側もはんだづけします。
image.png

うまくできたかな?
image.png

基本キット完成です!
image.png

PCにつないでみます。
image.png

※ ブースターパックの組み立ては更に下にあります。

ソフトウェア

開発環境をセットアップ、サンプルプログラムを書いてみます。
「LEDパネルキット AKBONE2022 の環境構築を自分でやってみる」
https://qiita.com/nanbuwks/items/d4523ebfb9cabdae90c5

ESP32のソフトが書き込みできるかどうかテストしましょう。

ESP32 ボードを接続し、シリアルポートとボードを合わせます。
動作確認プログラムは
「スケッチ例」-「ESP32」-「ChipID」-「GetChipID」を試してみました。

image.png

ここまで確認できたら、ケーブルをつなげて光らせてみましょう!

パネルと接続して光らせてみる

電源ケーブルをネジ止め。
image.png

基板とパネルの配線はこのようになります。
パネル側のフラットケーブルのコネクタは2箇所あるので左側に取付てください。

image.png

image.png

パネルに基板を固定

うまく動いたら、基板をパネルに取付けます。

AVTOKYOで頒布したバックパネルのセットです。
image.png

ダボが邪魔になるのでカット。
image.png

ネジはこの位置に取付ます。
image.png

モバイルバッテリーで駆動したところ
image.png

AVTOKYO では、低レベル勉強会のロゴを併せて頒布しました。かっこよく貼り付けましょう。
image.png

AVTOKYO のストラップをとりつけてみました。
image.png

マグネットを使って、貼り付けもできます。工夫してください。

image.png

この、AVTOKYO のロゴは、次の作業で表示することができます。

SPIFFS を使えるようにする

画像ファイルを表示してみましょう。

https://github.com/nanbuwks/AKBONE2022
こちらからレポジトリをクローンしてローカルに保存します。
クローンしたファイルのうちの
AKBONE2022/Arduino/sketchbook/avtokyo2022demo を開きます。

AVTOKYOでは、パネルを3種類頒布しました。
image.png
左から、P4パネル、P3パネル、P2パネルです。

  • P4(ピッチ4mm) 256mmx128mm 64x32pixel
  • P3(ピッチ3mm) 192mmx96mm 64x32pixel
  • P2(ピッチ2mm) 256mmx128mm 128x64pixel

image.png
パネルのピッチが違うのがわかります。

パネルの種類に応じて、該当箇所を書き換えます。書き換えは5箇所です。

AVTOKYO で頒布した、 256x128mm の P4 パネルの場合

サイズを指定。

#define PANEL_64x32
//#define   PANEL_128x64

次の箇所を丸々無効にします。


struct LGFX_HUB75 : public lgfx::LGFX_Device
{
  struct Panel_Custom_HUB75 : public lgfx::Panel_HUB75
  {
/*/ X 座標が8ドット単位で逆順になる場合の対策が必要な場合はこのoverrideを有効にする

    void _draw_pixel_inner(uint_fast16_t x, uint_fast16_t y, uint32_t rawcolor) override
    {
      Panel_HUB75::_draw_pixel_inner((x & 8) ? x : (x ^ 7), y, rawcolor);
   // Panel_HUB75::_draw_pixel_inner((x & 8) ? (x ^ 7) : x, y, rawcolor);
    }
//*/
  };

行デコード方法をバイナリとします。

      // パネルの行選択の仕様に応じて指定する
      //cfg.address_mode = cfg.address_shiftreg;
      cfg.address_mode = cfg.address_binary;

列ドライバの初期化コマンドを送らないようにします。

      // LEDドライバの初期化コマンドを指定する
      cfg.initialize_mode = cfg.initialize_none;
      //cfg.initialize_mode = cfg.initialize_fm6124;

パネルの縦横ピクセル数を指定します。

      // ここでパネルサイズを指定する
      // 複数枚並べる場合は全体の縦横サイズを指定
      cfg.memory_width  = cfg.panel_width  = 64;
      cfg.memory_height = cfg.panel_height = 32;

AVTOKYO で頒布した、 192x96mm の P3 パネルの場合

サイズを指定。

#define PANEL_64x32
//#define   PANEL_128x64

次の箇所を丸々有効にします。


struct LGFX_HUB75 : public lgfx::LGFX_Device
{
  struct Panel_Custom_HUB75 : public lgfx::Panel_HUB75
  {
// X 座標が8ドット単位で逆順になる場合の対策が必要な場合はこのoverrideを有効にする

    void _draw_pixel_inner(uint_fast16_t x, uint_fast16_t y, uint32_t rawcolor) override
    {
      Panel_HUB75::_draw_pixel_inner((x & 8) ? x : (x ^ 7), y, rawcolor);
   // Panel_HUB75::_draw_pixel_inner((x & 8) ? (x ^ 7) : x, y, rawcolor);
    }
//*/
  };

行デコード方法をバイナリとします。

      // パネルの行選択の仕様に応じて指定する
      //cfg.address_mode = cfg.address_shiftreg;
      cfg.address_mode = cfg.address_binary;

列ドライバの初期化コマンドを送らないようにします。

      // LEDドライバの初期化コマンドを指定する
      cfg.initialize_mode = cfg.initialize_none;
      //cfg.initialize_mode = cfg.initialize_fm6124;

パネルの縦横ピクセル数を指定します。

      // ここでパネルサイズを指定する
      // 複数枚並べる場合は全体の縦横サイズを指定
      cfg.memory_width  = cfg.panel_width  = 64;
      cfg.memory_height = cfg.panel_height = 32;

AVTOKYO で頒布した、 256x128mm の P2 パネルの場合

サイズを指定。

//#define PANEL_64x32
#define   PANEL_128x64

次の箇所を丸々無効にします。


struct LGFX_HUB75 : public lgfx::LGFX_Device
{
  struct Panel_Custom_HUB75 : public lgfx::Panel_HUB75
  {
//* X 座標が8ドット単位で逆順になる場合の対策が必要な場合はこのoverrideを有効にする

    void _draw_pixel_inner(uint_fast16_t x, uint_fast16_t y, uint32_t rawcolor) override
    {
      Panel_HUB75::_draw_pixel_inner((x & 8) ? x : (x ^ 7), y, rawcolor);
   // Panel_HUB75::_draw_pixel_inner((x & 8) ? (x ^ 7) : x, y, rawcolor);
    }
//*/
  };

行デコード方法をシフトレジスタ形式とします。

      // パネルの行選択の仕様に応じて指定する
      //cfg.address_mode = cfg.address_shiftreg;
      cfg.address_mode = cfg.address_binary;

列ドライバの初期化コマンドで輝度指定を送るようにします。

      // LEDドライバの初期化コマンドを指定する
      // cfg.initialize_mode = cfg.initialize_none;
      cfg.initialize_mode = cfg.initialize_fm6124;

パネルの縦横ピクセル数を指定します。

      // ここでパネルサイズを指定する
      // 複数枚並べる場合は全体の縦横サイズを指定
      cfg.memory_width  = cfg.panel_width  = 128;
      cfg.memory_height = cfg.panel_height = 64;

ファイルアップロード

「LEDパネルキット AKBONE2022 の環境構築を自分でやってみる」
https://qiita.com/nanbuwks/items/d4523ebfb9cabdae90c5#spiffs-%E3%82%92%E4%BD%BF%E3%81%88%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B
の「SPIFFSを使えるようにする」の設定を行っておきます。

「ツール」 - 「ESP32 Sketch Data Upload」で、アップロードし、スケッチも登録すると以下のように画面が出ます。

image.png

ブースターパック

image.png

内容物一覧です

  • ロータリーエンコーダ
  • ツマミ
  • ブザー
  • LED
  • 330Ω抵抗 1206メトリック
  • 10kΩ抵抗 1206メトリック
  • SDカードソケットアダプタ
  • MPU6500ジャイロモジュール
  • GY-BME280-3.3 温湿度気圧センサ
  • GROVEコネクタ
  • PCF8563 RTCモジュール
  • CR1220 電池
  • ピンソケット(約30pin分)
  • ピンヘッダ
  • ジャンパー

image.png

ブースターパック搭載の拡張モジュール詳細

中華製の市場で安く購入できるものをつなげられるようにしています。

ジャイロ

image.png

RTC
image.png

温湿度気圧センサ
image.png

このほか、ロータリーエンコーダー、GROVE端子などなど。

ブースターパック組み立て

再度基板にはんだ付けします。まずはESP32のモジュールを外しておきましょう。
image.png

330Ωの抵抗を取り付けます。331と書いてある抵抗です。なくしてもいいように余分に入っています。
image.png

4.7kΩの抵抗を取り付けます。シルクには 10kΩ(104) x4 と書いていますが、今回は4.7kΩ(472)を5個取付ます。
image.png

LEDを取付ます。ピンの長い方が下です。
image.png
裏側の足は余分を切りましょう。
image.png

6P ピンソケットを取り付け

ピンソケットを必要な長さで切り、写真の箇所にはんだづけします。マスキングテープで止めてはんだ付けしましょう。

image.png

LEDの近くにも6P 分をはんだづけします。
image.png

この位置に10P分を取付ます。
image.png

補助電源コネクタを取付ます。ピンヘッダを6つ分切って取付てください。
image.png
圧電ブザーと、ジャンパーコネクタを取付ます。
image.png
ジャンパーを取り付けておきましょう。
image.png

GROVE対応機器を接続できるコネクタを接続します。
image.png

ロータリーエンコーダを取り付けます。
image.png

中華モジュールにピンをはんだづけします。microSDカードモジュールのみ部品面にピンを立てるのに注意。
image.png

モジュールを装着します。RTCモジュールに電池を入れます。microSDカードモジュールは裏返して装着してください。
image.png

ツマミをつけて完成です。
image.png

モジュールを活用したサンプルプログラム

Beta1 の注意点

I2Cの設定ですが、Beta1 の割当が次のようになっています。

  • SDA 22
  • SCL 21

通常は以下のようになっています。

  • SDA 21
  • SCL 22

なのでI2Cのピンマッピングを変更する必要があります。 Arduino 開発環境の場合、以下のようにしてI2Cの初期化をします。

  Wire.begin(22,21);

モジュールがつながっているか確認する

「ESP32 を使って I2C スキャナ」
https://qiita.com/nanbuwks/items/c235f7f867f6139b6c8b

を使って、I2Cに接続したアドレスを確認します。先のI2Cの初期化部分を書き換えて実行します。

Scanning...
I2C device found at address 0x51  !
I2C device found at address 0x68  !
I2C device found at address 0x76  !
done

と出ればOKです。

アドレスは以下のように割当となります。

  • 0x51 PCF8563 RTCモジュール
  • 0x68 MPU6500ジャイロモジュール
  • 0x76 GY-BME280-3.3 温湿度気圧センサ

温湿度気圧センサBME280を使ってみる

サンプルプログラムの BME280demo を使ってみます。

「LEDパネルキット AKBONE2022 の環境構築を自分でやってみる」
https://qiita.com/nanbuwks/items/d4523ebfb9cabdae90c5#bme280%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%82%92%E5%B0%8E%E5%85%A5%E3%81%99%E3%82%8B
の「BME280ライブラリを導入する」を行うと、温度湿度気圧が表示できます。
image.png

カレンダモジュール RTC PCF8563 を使ってみる

「LEDパネルキット AKBONE2022 の環境構築を自分でやってみる」
https://qiita.com/nanbuwks/items/d4523ebfb9cabdae90c5#rtc-%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%82%92%E5%B0%8E%E5%85%A5%E3%81%99%E3%82%8B
の「RTC ライブラリを導入する」を行うと、カレンダ機能が使えるようになります。

64x32pixelパネルの例
image.png

128x64pixelパネルの例
image.png

ジャイロモジュール MPU6500 を使ってみる

「LEDパネルキット AKBONE2022 の環境構築を自分でやってみる」

「ジャイロセンサライブラリを導入する」を行うと、6軸加速度が取得できるようになります。
https://qiita.com/nanbuwks/items/d4523ebfb9cabdae90c5#%E3%82%B8%E3%83%A3%E3%82%A4%E3%83%AD%E3%82%BB%E3%83%B3%E3%82%B5%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%82%92%E5%B0%8E%E5%85%A5%E3%81%99%E3%82%8B
https://twitter.com/i/status/1589277896434397184

その他のモジュールのサンプルソフトウェア

後ほど公開します! 乞期待!

ピン配置

#define R1PIN     33
#define G1PIN     32
#define B1PIN     25
#define R2PIN     18
#define G2PIN     19
#define B2PIN     5
#define A0PIN     12
#define A1PIN     14
#define A2PIN     27
#define A3PIN     26
// #define A4PIN       4 // GND
#define CLKPIN    4
#define LATPIN    17
#define OEPIN     16
#define LEDPANEL_X      64
#define LEDPANEL_Y      32

その他

ESP32 Linuxボード 信号名 説明
VP(GPIO36) SW_B ロータリーエンコーダーB相
VN(GPIO39) SW_ANALOG ロータリーエンコーダーSWとESCスイッチのマルチプレックス
GPIO34 SW_A ロータリーエンコーダーA相
GPIO35 MOSI/RX SDMISO_SMOSI_RX2 microSDソケットMISO/LinuxボードSPI0_MOSI/ジャンパー選択でLinuxボードRX
GPIO23 MISO/TX SDMOSI_SMISO_TX2 microSDソケットMOSI/LinuxボードSPI0_MISO/ジャンパー選択でLinuxボードTX
GPIO13 SCLK SCLK microSDソケットCLK/LinuxボードSPI0_CLK
GPIO22 I2C_SDA センサやGrove端子のSDA
GPIO21 I2C_SCL センサやGrove端子のSCL
GPIO2 BUZZER 圧電ブザー
GPIO15 CS CS microSDソケットCS/LinuxボードSPI0_CS
TX RX TX ESP32ボード上でUSBシリアルとして接続/ジャンパー選択でLinuxボードRX
RX TX RX ESP32ボード上でUSBシリアルとして接続/ジャンパー選択でLinuxボードTX

SW_ANALOGは、10kでプルアップされていて、ロータリーエンコーダーSWを押すとGND,ESCを押すと電圧が中点となります。両方押すとGND。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0