NeoPixel(WS2812B)の制御 その4
ArduinoによるNeoPixel(WS2812B)の制御の続きです。質問があり、折角なので
以前作成した、8x8ドットマトリックスタイプのNeoPixelを制御するスケッチを汎用化(任意のサイズ対応)しました。
とりあえず手持ちの16x16ドットモジュールで試してみました。
動いている様子
利用したモジュールは、Aliexpressにて入手しまた。
1 pcs/lot DC5V 16x16 Pixel WS2812B LED Digital Flexible Individually addressable Panel light
このモジュールのNeoPixelの並びは次のようになっています。
接続
Arduino:D11 - NeoPixel:DIN
Arduino:5V - NeoPixel:5V
Arduino:GND - NeoPixel:GND
スケッチ
スケッチは、16x16ドットマトリックスに対応するように作成していますが、
下記の横ピクセル数、縦ピクセル数を変更することで、横8x縦8ドット、横32x縦8ドットにも対応出来ると思います。
#define PXCEL_W 16 // 横ピクセル数
#define PXCEL_H 16 // 縦ピクセル数
また、メッセージ表示の縦位置は NeoMsg()関数の最後の引数で指定出来ます。
スケッチは、Githubのgistにて公開しています。スケッチ表示の下部の帯のリンクから参照出来ます。
スケッチのコンパイルには、別途下記のライブラリが必要です。
ライブラリ
・Arduino用 美咲フォントライブラリ 教育漢字・内部フラッシュメモリ乗せ版
https://github.com/Tamakichi/Arduino-misakiUTF16
<2023/06/11 追記>
本記事に対して質問があり、16x16ドットマトリックスに8x8ドットフォントを表示した場合、確かに「文字、小さっ」ですよね~
ちょっと改造やってみました。
Arduino Uno的には、16ドットフォントデータを単体で載せるのは無理なので、
美咲フォント(8x8ドット)を倍角処理(16x16)して表示するバージョンを作ってみました。
倍角表示対応として、以下の関数を追加しています。
①NeoScrollInCharEx() 16x16ドットフォントのスクロール表示版
この関数は、NeoMsgEx()から呼び出されて利用します。
②NeoMsgEx() 倍角表示対応版
美咲フォント(8x8ドット)から倍角フォント(16x16ドット)を作成しています。
ソースのコメント部の倍角フォント作成(追加)でやってます。
倍角にするには、1ドットを4ドット(縦2倍x横2倍)にしています。
8x8ドットのフォントデータ uint8_t fnt[8] から1ドットあたり4ビットをuint16_t fntEx[16]に格納します。
追加の処理構造、倍角処理あたりのビット操作(ループで8x8ドットから1ビットの取り出し⇒1か0かの判断 ⇒ それを元に処理)、
自分的には、頭の中で処理や構造が「パッ」と短時間で映像で浮かんで、単にそれを実装(コード化)する感じなのですが、
これを文章化して人に伝えるには、フロチャートやPADに落とさないと無理かな~(-_-;)
( ⇒ コードを書いて示した方が早い? そうすると自力で悩まないのでスキルUP、育成に繋がらない
⇒ なのでヒント小出し
⇒ いじわるしていると思われる(-_-;) 、
以前もFacebookで「もったいぶらず、さったと答えを教えろ」的に攻撃してきた人がいたのでFacebook辞めました(>_<)
)
ソフトウェアの仕様伝達、ノウハウの具現化? 難しい..
その16x16ドットフォントをNeoScrollInCharEx()を呼び出して文字を表示します。
倍角表示
スケッチ
関連記事
NeoPixel(WS2812B)の制御 その4(2020.01.09) ・・・ 16x16マトリックスの制御(この記事です)
NeoPixel(WS2812B)の制御 その3(2018.05.30) ・・・ 8x8マトリックスの制御
NeoPixel(WS2812B)の制御 その2(2018.05.22) ・・・ SPIを使った制御
NeoPixel(WS2812B)の制御(2018.05.20) ・・・ GPIOを使った制御
« 明けましておめでとうございます。 | トップページ | ココログの不具合治らず.. 過去記事を修正中です »
「arduino」カテゴリの記事
- Arduino IDE+Arduino STM32環境で指定と異なるgccが使われてしまう(2025.01.23)
- Zorin OSでArduino Uno互換機(CH340)が認識しない(2025.01.19)
- Arduino IDE 2.3.4でArduino STM32を利用する(2025.01.12)
- Arduino用 SKK日本語変換ライブラリの開発 その1(2024.12.28)
- NeoPixel(WS2812B)の制御 その5(2024.09.15)
「表示器制御関連」カテゴリの記事
- NeoPixel(WS2812B)の制御 その5(2024.09.15)
- Arduino用 美咲フォントライブラリを更新しました(2024.03.21)
- Raspberry Pi Pico(MicroPython)でLEDドットマトリックスを使ってみる(2024.03.14)
- Raspberry Pi Pico MicroPython用のマルチフォントライブラリ(2023.02.09)
- MicroPython(Raspberry Pi pico)で8x8ドットNeoPixcel文字表示(2023.02.08)
LEDマトリクスに日本語を表示したく、こちらのページ参考にさせていただいております。
横32x縦8ドットのWS2812Bマトリクスを使用して上記のプログラムを試させていただきました。
縦位置が若干ずれていたのは、 NeoMsg()関数の最後の引数で修正することができたのですが、流れる日本語文字が鏡文字のように反転してしまいました。(左から右へ流れる)
このような症状に対処できるなにか良い方法ありましたら教えていただけないでしょうか?
投稿: akatsukipapa | 2020年6月18日 (木) 23時19分
akatsukipapaさん
ピクセル座標(横、縦)をNeoPixelのピクセル番号に変換する関数 XYtoNo() の修正で対応できるかもしれません。
(修正前)
// PXCEL_W×PXCEL_Hドットマトリックス 指定座標ピクセル番号変換
inline uint8_t XYtoNo(uint8_t x, uint8_t y) {
return y&1 ? PXCEL_W*y + x : PXCEL_W*y + (PXCEL_W-1) -x;
}
akatsukipapaさんのモジュールはNeoPixelの番号並びが1ライン目が右向き、次が左向き、右、左・・ となっていると思われます。
なので三項演算子の真偽のそれぞれの処理を入れ替えれるだけでいけるかもしれません。
(修正後)
// PXCEL_W×PXCEL_Hドットマトリックス 指定座標ピクセル番号変換
inline uint8_t XYtoNo(uint8_t x, uint8_t y) {
return y&1 ? PXCEL_W*y + (PXCEL_W-1) -x : PXCEL_W*y + x ;
}
試していないので、動くかは保証出来ません。
投稿: たま吉さん(管理者) | 2020年6月19日 (金) 19時25分
判定部の修正の方が簡単ですね。
return !(y&1) ? PXCEL_W*y + x : PXCEL_W*y + (PXCEL_W-1) -x;
投稿: たま吉さん(管理者) | 2020年6月19日 (金) 19時29分
たま吉さん
ピクセルの番号変換等、修正を示して頂きありがとうございます。早速、修正後のものと、その後のコードも置き換えてみたのですが、LEDには 出だしの1行だけが光る状態になってしまいました。お手間を取らしてしまい申し訳ありません><
投稿: akatsukipapa | 2020年6月24日 (水) 22時17分
たま吉様
Neopixel 16x16を使用例のご投稿楽しく拝見させて頂きました。早速理髪店の待ち時間を表示するものを下記Youtubeのとおり作成することができました。
https://youtu.be/nnjbN09hwXI
Blynkで表示を制御したのですが、現行Blynkの廃止に伴い再作製が必要となりました。
RF-Nano(ArduinoにNRF240Lの無線モジュールがついたもの)を使用し遠隔制御しようとしたのですが、RF-Nanoの11ピンが無線モジュールのインターフェイスと競合しており使うことができません。他のPWMピンの6ピンがNeopixel 制御用ピンに使えるのであれば問題が解決するのですが、スケッチの11を6に変えてNeopixcelのDINも6番に変えたのですが作動しません。Neopixcelの制御用ピンをArduinoの6番に変更することはできますでしょうか。
下記スケッチはBlynkから移行するためのテストのためBlynkでなくIRで表示を制御しているものです。このNeopixcelのDINをArduinoの6番ピンに変えたいのですがご教示いただけると大変助かります。
https://75.gigafile.nu/1020-3491c02c58ed75fb237306f73f11e293
お忙しいなかお手数ながらよろしくお願いします。
関口 隆
投稿: 関口隆 | 2022年10月13日 (木) 16時51分
関口隆さん
Neopixelの制御にSPIを利用しています。
11番ピンはSPIのMOSIであり、データ出力に利用していますので、残念ながら6番ピンへの変更は出来ません。
関連記事でSPIを使わない方法では、任意のピンへの変更が可能かと思いますが、
https://nuneno.cocolog-nifty.com/blog/2018/05/neopixelws2812b.html
正確なタイミングを得るために割り込み禁止を行っており、無線モジュールとの通信に問題が生じる可能性があります。
Neopixelの制御用ライブラリとしては、下記のAdafruitがよく使われているようです。
https://github.com/adafruit/Adafruit_NeoPixel
ESP8266、ESP32にも対応しているようですので、上記のライブラリの利用も良いかもしれません。
ご検討願います。
投稿: たま吉さん(管理者) | 2022年10月13日 (木) 20時44分
初めまして。
Arduino初心者です。8x8マトリクスLEDの記事を探してたどり着きました。
美咲フォントでひらがな表示ができ、すばらしいソフトと感動しております。
ありがとうございます。
というわけで、赤外線リモコンでメッセージボードのようなものを、たま吉さん
のソフトを変更させて使用できるよう試作しました。
変更したソフトをyoutubeで紹介してもよろしいでしょうか?
初心者なので、それなりですが。
もちろんたま吉さんの名前は残したままで、コメント欄にリンクを張らせて
いただきたいと思います。よろしくお願いいたします。
投稿: konan0119 | 2023年2月23日 (木) 22時09分
早速の返信ありがとうございます。
「該当する記事に直接コメント」失礼しました
私も仕事でシステム開発もしていましたがaduinoスケツチは初心者です
「PIC電子工作ブログさん」の「WS2812BマトリクスLEDで電光掲示板」
見たのですが、希望するイメージはズバリそれでよいのですが
BMPから読み込むPRGが私にはまだまだレベルが高くて分かりません(^^;)
------------------------------------
NeoMsg("かんたんなかんじの表示ができます。",16, 4, 4, 100,4);
のようにフォントを直接書き込みするのが簡単で分かりやすいです
NeoScrollInChar(fnt, R, G, B, tm, y);の
左からR, G, B,は色指定/tmは左スクロール速度/yは上からの位置
はわかりました
希望するフォントの拡大はどのprg部分を変えればよいでしょうか?
よろしくお願いします。
投稿: old_papa | 2023年6月 9日 (金) 10時31分
old_papaさん
まずArduinoについてですが、
「PIC電子工作ブログさん」の「WS2812BマトリクスLEDで電光掲示板」の記事では、
利用しているマイコンボードは、ESP32のようですが、
old_papaさんが利用しているマイコンボードは、Arduino Uno( ATmega328ベース)として説明します。
本サンプルスケッチではフォントとして8x8ドットの
「Arduino用 美咲フォントライブラリ 教育漢字・内部フラッシュメモリ乗せ版」を利用しています。
フォントの拡大としては、8x8ドットフォントをベースに倍角(8x8→16x16変換)でよろしいでしょうか?
16x16ドットのフォントを期待している場合は、外部メモリの実装が必要となります。
投稿: たま吉さん(管理者) | 2023年6月 9日 (金) 18時48分
old_papaさん
やり方としては、2つあると思います。
①8x8ドットフォントから16x16ドットフォントを生成し、
16x16ドットフォントをスクロール表示(データ送信)する
②8x8ドットフォントを表示する際、1ドットにつき4ドットを送信する
処理としては①が簡単だと思います。
この場合、NeoScrollInChar()は、現状8x8ドットフォントにしか対応していないので、
別途16x16ドットに対応しているNeoScrollInChar()を作成した方が良いと思います。
この関数をNeoScrollInCharEx()とします。
現状のNeoScrollInChar()は横8回x縦8回の2重ループですが、
NeoScrollInCharEx()は横16回x縦16回の2重ループにすれば良いでしょう。
8x8ドットフォントから16x16ドットフォントを生成処理はarduinoとは関係なく、
C言語での単純なデータ変換処理なので実装は簡単だと思います。
16x16のビットビット処理を考えると16x16ドットのデータはuint8の配列ではなく、
uint16の配列データが良いと思います。
投稿: たま吉さん(管理者) | 2023年6月 9日 (金) 19時17分
方針としては、
・NeoMsg()の16x16ドット版を作成 ⇒ NeoMsgEx()
・NeoMsgEx()ではて8x8ドットのフォントから16x16ドットのフォントデータを作成し、
NeoScrollInCharEx()を呼び出す。
・NeoScrollInCharEx()では、16x16ドットフォントの表示処理を行う。
投稿: たま吉さん(管理者) | 2023年6月 9日 (金) 19時27分
丁寧なご説明ありがとうございます。
早速やってみたいと思います
定年後の今年後期高齢者です(時間はたっぷりありますのでじっくりやってみます)
すもうを見ていた時ウチワにこのようなLEDpanelを使っていた人を見て
これは孫の行事応援に使ったら[目立ちすぎますかねー(笑)]と思った次第です
時間かかるとおもいますが結果またご連絡いたします
感謝です!!
投稿: old_papa | 2023年6月10日 (土) 09時36分
ご指示どうりに変更してみました。
if (! (str = getFontData(fnt, str)) ) {
でエラーになりました
cannot convert 'uint16_t* {aka unsigned int*}' to 'byte* {aka unsigned char*}'
for argument '1' to 'char* getFontData(byte*, char*, bool)'
翻訳「引数「1」を「char* getFontData(byte*, char*, bool)」に変換するには、
「uint16_t* {aka unsigned int*}」を「byte* {aka unsigned char*}」に変換できません」
強引に//で消してコンパイルできましたので書き込みすると
16*16パネル2枚光り文字も大きくなりましたがあらくて
スクロールもパネル2枚同時にスクロールしています
-------------------
// 定数
//***************
#define PXCEL_W 16 // 横ピクセル数
#define PXCEL_H 16 // 縦ピクセル数
#define PXCEL_NUM 2 // 「****追加しました」 並べるパネル数
#define PIXCELNUM (PXCEL_W*PXCEL_H*PXCEL_NUM) // 「****変更しました」 Neopixel ピクセル数(LED数)
// メッセージの表示
void NeoMsgEx(char* msg, uint16_t R, uint16_t G, uint16_t B, uint32_t tm,uint16_t y=0) {
uint16_t fnt[16];
int16_t len;
char *str = msg;
NeoCLS();
while(*str) {
// if (! (str = getFontData(fnt, str)) ) { ←cannot convert 'uint16_t* {aka unsigned int*}' to 'byte* {aka unsigned char*}'
for argument '1' to 'char* getFontData(byte*, char*, bool)'
翻訳「引数「1」を「char* getFontData(byte*, char*, bool)」に変換するには、
「uint16_t* {aka unsigned int*}」を「byte* {aka unsigned char*}」に変換できません」
// break;
// }
NeoScrollInCharEx(fnt, R, G, B, tm, y);
}
}
もう一度スケッチを変更してコンパイルすると今度は一切コンパイルerrorになり受け付けません
error内容
最大2048バイトのRAMのうち、グローバル変数が3082バイト(150%)を使っていて、ローカル変数で-1034バイト使うことができます。
Not enough memory;
see https://support.arduino.cc/hc/en-us/articles/360013825179 for tips on reducing your footprint.
スケッチのサイズとメモリ使用量を減らす
ボードArduino Unoに対するコンパイル時にエラーが発生しました。
---------------------------
ご指導いただいたときに
「16x16ドットのフォントを期待している場合は、外部メモリの実装が必要となります。」
と指導いただきましたが外部メモリの実装はどのようにすればよいでしょうか??
**すみません長々書き込みましたが私のEmailに送っていただければ助かります
よろしくお願いいたします。
投稿: old_papa | 2023年6月10日 (土) 13時49分
すみません
ArduinoMegaを持っていますので
それでやつてみます
投稿: old_papa | 2023年6月10日 (土) 14時09分
ArduinoMEGAに切り替えできました
「最大253952バイトのフラッシュメモリのうち、スケッチが2262バイト(0%)を使っています。
最大8192バイトのRAMのうち、グローバル変数が3082バイト(37%)を使っていて、ローカル変数で5110バイト使うことができます。」
正常に書き込みもできました。
投稿: old_papa | 2023年6月10日 (土) 17時47分
old_papaさん
文章だとイメージ?仕様?の伝達に齟齬が生じる(ソフトウェア開発ではありがちですね~)ので、
記事に追記しました。参考にしていただければ幸いです。
この記事のプログラムでは、Arduino Unoの制約(Flashメモリ32KB、SRAM:2KB)での漢字表示を実現されるため、
自作の教育漢字に絞ったフォントライブラリを利用しています。
>>ご指導いただいたときに
>>「16x16ドットのフォントを期待している場合は、外部メモリの実装が必要となります。」
>>と指導いただきましたが外部メモリの実装はどのようにすればよいでしょうか??
16x16ドットのフォントを利用する場合、1文字あたり32バイトですので、最低限の教育漢字+α(半角など)の1710文字では、
54kバイト必要なため、Arduino Uno単体では実現不能なため、コメントしました。
実現方法としては、I2C、SPI接続のフラッシュメモリの利用、SPI接続でのSDカードの利用があります。
私がArduino Uno用に作成したものとしてこんな感じのものがあります。
・Arduino用漢字フォントライブラリ SPI フラッシュメモリ版
https://github.com/Tamakichi/Arduino_exfonts
8x8~24x24ドットフォントをArduino Unoで使うライブラリ(TV出力などのサンプル付)
だだし、貧弱なマイコンボード(8ビットマイコン)の利用での制約の問題解決に悩むよりは、
ESP32ボード、ラズパイPico、ARM等を使った方が良いと思います。
ESP32ボードや、ラズパイPicoでは、フラッシュメモリは数Mバイト単位、SRAMも100倍以上の容量です。
投稿: たま吉さん(管理者) | 2023年6月11日 (日) 13時27分
おっしゃるとおりですよね
教えていただいた「PIC電子工作ブログさん」の「WS2812BマトリクスLEDで電光掲示板」を
秋月電子で
ESP32-DevKitCフラッシュメモリ8MBとマイクロSDカードスロットDIP化キット
注文して、そっくりやってみようと思います
また結果ご報告させていただきます
投稿: old_papa | 2023年6月12日 (月) 08時58分
すみません「PIC電子工作ブログさん」の部品を秋月通商から取り寄せてみましたが、うっかりBSS138を注文しなかったのでamazonからの到着まちです(25日頃)、
「PIC電子工作ブログさん」Tubeをキャプチャしてそっくり同じものを作成したいのですが「BSS138」の部分が良く見えなくてamazonのものと違っているので自分なりに配線図を見てやろうと思っています
「PIC電子工作ブログさん」に質問したいのですか、どこから質問できるのかわかりません(^^;)
そんなわけで夢中になっていて<2023/06/11 追記>見るの遅れてすみませんでした
ご指導どうり後でやつてみます
ありがとうございます。
投稿: old_papa | 2023年6月17日 (土) 13時36分
お世話様です
2023/06/11美咲フォント(8x8ドット)を倍角処理(16x16)して表示するバージョン
そっくりやってみましたが
下記コンパイルエラーがでてしまいました
Error箇所→ SPDR = NEOSPI_RST; // SPIデータ送信
----「SPDR' はこのスコープで宣言されていませんでした」-----
宣言されていないとあるので#define SPDRといれてみましたが
Error箇所→ SPDR = buf[i] & (0x80>>j) ? NEOSPI_1:NEOSPI_0; // SPIデータ送信
-----「=」トークンの前に主式が必要です--------------------
すみません
Facebookで「もったいぶらず、さったと答えを教えろ」的な人もいるんですね
恐縮ですがご指導よろしくお願いします。
投稿: old_papa | 2023年6月21日 (水) 11時31分
old_papaさん
エラーの原因としては、Arduino UNO以外のマイコンボードを利用したためだと思われます。
SPDR、SPSR はSPIを制御するレジスタなのですが、Arduino UNOのマイコンATMEGA328P固有のレジスタであるため、
他のマイコンボードでは存在しないので、未定義エラーとなります。
投稿: たま吉さん(管理者) | 2023年6月21日 (水) 12時57分
申し訳ありませんm(--)m
Arduino MEGAでシリアルポート確認してできましたー(^^)
Arduino UNOはメモリー不足か、書き込み中にエラーになりました(^^;)
ありがとうございました
ようやくPIC電子工作さんに連絡取れました指導していただいています
たま吉さんのことも書いてありました。
また結果ご報告させていただきます。
投稿: old_papa | 2023年6月21日 (水) 15時19分
PIC電子工作さんに質問していましたが
https://pic-garage.blogspot.com/2023/06/blog-post_18.html#comment-form
どうしてもコンパイルエラーがでてしまい改善されませんでした
くどく質問もご迷惑のように感じましたので終了させていただきました
配線も完了していて書き込みさえできればよかったのですが残念です
究極の製品もありましたが
https://www.amazon.co.jp/LED%E3%82%B5%E3%82%A4%E3%83%B3%E3%83%9C%E3%83%BC%E3%83%89-%E3%82%B9%E3%82%AF%E3%83%AD%E3%83%BC%E3%83%AB%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%83%9C%E3%83%BC%E3%83%89-%E3%83%91%E3%83%8D%E3%83%AB%E3%82%AB%E3%83%BC%E3%82%B5%E3%82%A4%E3%83%B3%E3%83%87%E3%82%A3%E3%82%B9%E3%83%97%E3%83%AC%E3%82%A4-Bluetooth-%E5%BA%83%E5%91%8A%E7%94%A8%E3%80%82%E8%AA%AC%E6%98%8E%E6%9B%B8%E3%80%81%E3%82%AB%E3%83%BC%E3%83%81%E3%83%A3%E3%83%BC%E3%82%B8%E3%83%A3%E3%83%BC%E3%80%81%E3%81%BC%E3%82%8D%E3%81%8D%E3%82%8C%E4%BB%98%E3%81%8D/dp/B0B31P8BQG/ref=rvi_sccl_2/357-5481480-5042448?pd_rd_w=vn4ry&content-id=amzn1.sym.a4dc92d7-7100-437e-b3e3-2349e8298523&pf_rd_p=a4dc92d7-7100-437e-b3e3-2349e8298523&pf_rd_r=TN7XWTTW30YNYWJYB89F&pd_rd_wg=wi3rM&pd_rd_r=68d46505-34b1-4e13-be17-7f7439ad3bd5&pd_rd_i=B0B31P8BQG&th=1
そこまでして欲しいとは思いませんので・・・
ありがとうございました。
投稿: old_papa | 2023年6月25日 (日) 10時08分
old_papaさん
リンク先に掲載のコンパイルエラーを拝見したところ、下記でのエラーについてですが、
C:\Users\yasuo\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.9\libraries\FS\src/FS.h:24:10: fatal error: memory: No such file or directory
具体的なエラー発生部のコードは下記です。
FS.h:24: #include <memory>
memoryは、C++用のライブラリなのですが、この記述(.hなし)はC言語としてコンパイルするとエラーとなります。
BITMAPDecorder.c の拡張子が.cppではなく、.cであるためC言語としてコンパイルされます。
拡張子の変更: BITMAPDecorder.c ⇒ BITMAPDecorder.cpp
をお試しください。
リンク先の質問では、BITMAPDecorder.cppだったり、BITMAPDecorder.cだったりと記述されていますが、
実際のファイル名はどうなっているかをご確認下さい。
投稿: たま吉さん(管理者) | 2023年6月26日 (月) 16時25分
ご丁寧なご指導ありがとうございます。
「BITMAPDecorder.c の拡張子が.cppではなく、.cであるためC言語としてコンパイルされます。」
ズバリおっしゃるとおりでした、流石です!!
実は今日お昼前にteratailに「ozin_papa さん」で「どうしてもコンパイルエラーがでてしまいます」
で質問しましたら「この回答はGPT-4による自動生成回答です」解答があり3番目に同じことが書いてありました。拡張子を.cppに変更しましたらコンパイル、および書き込みできましたー(^^)
(秋月通商は右リセットボタンを押したまま左ボタンを1回押して話すと書込みモードになるようです)
早速すべて配線、microSDカードセツトしてみましたら右側一列に一本点いたままです??
明日いろいろいじってみます(^^;)
ありがとうございます、感謝!感謝です
またご報告させていただきます。
投稿: old_papa | 2023年6月26日 (月) 17時52分
old_papaさん
解決できて何よりです(*´ω`*)
もう1点、回路についてですが、WS2812BのDIN(データピン)で、レベル変換は不要です。
ESP32の3.3Vの信号はダイレクトに結線できます。
WS2812Bにはバージョンがあり、確かに初期はレベル変換が必要でしたが、
2018年以降の製品では、不要となっています。
私も、3.3vマイコンで変換なしで利用していて問題ないです。
ちょっと古い記事ですが、参考資料としてリンクを紹介します。
[参考]
・スイッチサイエンス:Neo Pixel WS2812シリーズ製品アップグレードのお知らせ
https://mag.switch-science.com/2018/11/29/neopixelupgrade/
[抜粋]: 6.制御信号(のHレベル)が2.8V以下でも認識されるようになった(3.3V/3.0V駆動のマイコンに直結可能になった)
投稿: たま吉さん(管理者) | 2023年6月26日 (月) 18時17分
ありがとうございます!
早速やってみます
投稿: old_papa | 2023年6月26日 (月) 18時52分
お世話様です
「ESP32の3.3Vの信号はダイレクトに結線できます。」
配線のBSS138は外しました、3.3VとIO5を合わせてPANELのGreenDataに差込みました
書込み後SDカードセットしてあるときはLEDpanel、1枚目左側、縦16個のみ点灯
SDカード外すとLEDpanel、1枚目左側、縦16個の内ランダム3個ほど消えたり点いたりします
※変化がないのでprintln("check-setup")とprint("check-loop")を入れてみました
------------------------------------------------
void setup() {
Serial.begin(115200); // シリアル通信速度設定*******************
Serial.println("check-setup"); // シリアル通信出力(改行有)***************
const char* Shino_Zen_Font_file = "/shnmk16.bdf"; //全角フォントファイル名を定義
const char* Shino_Half_Font_file = "/shnm8x16r.bdf"; //半角フォントファイル名を定義
SFR.SPIFFS_Shinonome_Init2F(Shino_Half_Font_file, Shino_Zen_Font_file);
if (!SD.begin(SD_CS, SPI, 24000000)) {
scrollMsg("microSD Error\n");
}
else {
scrollMsg("OK\n");
load_config();
delay(1000);
}
}
void loop() {
Serial.println("check-loop"); // シリアル通信出力(改行有)********************
delay(1000); // 1000msスリープ(1秒)**********************
scrollMsgFile("/message.txt");
----------以下「シリアルモニター」----------------------------------------------------------------
entry 0x400805f0
check-setup ←--- スケッチ「Serial.println("check-setup"); 」表示されています
/shnm8x16r.bdf File read OK!
/shnmk16.bdf File read OK!
Guru Meditation Error: Core 1 panic'ed (IllegalInstruction). Exception was unhandled.
Memory dump at 0x400d1f20: 62e5f846 00000003 41004136
Core 1 register dump:
PC : 0x400d1f25 PS : 0x00060230 A0 : 0x800d1fcf A1 : 0x3ffb2170
A2 : 0x00000028 A3 : 0x3ffc25f0 A4 : 0x00000543 A5 : 0x0000007e
A6 : 0x00000323 A7 : 0x0000005e A8 : 0x800d1f25 A9 : 0x3ffb2150
A10 : 0x3ffc2780 A11 : 0x0000012b A12 : 0x00000002 A13 : 0x00000000
A14 : 0x00000000 A15 : 0x3ffc3054 SAR : 0x00000005 EXCCAUSE: 0x00000000
EXCVADDR: 0x00000000 LBEG : 0x4008491d LEND : 0x40084925 LCOUNT : 0x00000027
Backtrace: 0x400d1f22:0x3ffb2170 0x400d1fcc:0x3ffb2190 0x400d2022:0x3ffb21b0 0x400d2085:0x3ffb21d0 0x400d233e:0x3ffb2230 0x400d27f6:0x3ffb2260 0x400d748e:0x3ffb2290
ELF file SHA256: b6383661ca8d795a
Rebooting...
ets Jul 29 2019 12:21:46
rst:0xc (SW_CPU_RESET),boot:0x12 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0030,len:1344
load:0x40078000,len:13924
ho 0 tail 12 room 4
load:0x40080400,len:3600
entry 0x400805f0
check-setup
/shnm8x16r.bdf File read OK!
/shnmk16.bdf File read OK!
Guru Meditation Error: Core 1 panic'ed (IllegalInstruction). Exception was unhandled.
Memory dump at 0x400d1f20: 62e5f846 00000003 41004136
Core 1 register dump:
PC : 0x400d1f25 PS : 0x00060230 A0 : 0x800d1fcf A1 : 0x3ffb2170
A2 : 0x00000028 A3 : 0x3ffc25f0 A4 : 0x00000543 A5 : 0x0000007e
A6 : 0x00000323 A7 : 0x0000005e A8 : 0x800d1f25 A9 : 0x3ffb2150
A10 : 0x3ffc2780 A11 : 0x0000012b A12 : 0x00000002 A13 : 0x00000000
A14 : 0x00000000 A15 : 0x3ffc3054 SAR : 0x00000005 EXCCAUSE: 0x00000000
EXCVADDR: 0x00000000 LBEG : 0x4008491d LEND : 0x40084925 LCOUNT : 0x00000027
Backtrace: 0x400d1f22:0x3ffb2170 0x400d1fcc:0x3ffb2190 0x400d2022:0x3ffb21b0 0x400d2085:0x3ffb21d0 0x400d233e:0x3ffb2230 0x400d27f6:0x3ffb2260 0x400d748e:0x3ffb2290
ELF file SHA256: b6383661ca8d795a
Rebooting...
ets Jul 29 2019 12:21:46
rst:0xc (SW_CPU_RESET),boot:0x12 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0030,len:1344
load:0x40078000,len:13924
ho 0 tail 12 room 4
load:0x40080400,len:3600
entry 0x400805f0
check-setup ←--- スケッチ「Serial.println("check-setup"); 」表示されています
/shnm8x16r.bdf File read OK!
/shnmk16.bdf File read OK!
Guru Meditation Error: Core 1 panic'ed (IllegalInstruction). Exception was unhandled.
Memory dump at 0x400d1f20: 62e5f846 00000003 41004136
Core 1 register dump:
PC : 0x400d1f25 PS : 0x00060230 A0 : 0x800d1fcf A1 : 0x3ffb2170
A2 : 0x00000028 A3 : 0x3ffc25f0 A4 : 0x00000543 A5 : 0x0000007e
A6 : 0x00000323 A7 : 0x0000005e A8 : 0x800d1f25 A9 : 0x3ffb2150
-----------------------------------------------------
check-loopは表示されません! スケッチvoid loop() { まで到達できないようです?
microSDはセット、配線も間違えないと思うのですが?
コメント記述長くなつてすみません
私のEmailで連絡させていただけるとよいのですがよろしくお願いします
投稿: old_papa | 2023年6月27日 (火) 15時03分
old_papaさん
モニター出力をみると、下記の出力があります。
Guru Meditation Error: Core 1 panic'ed (IllegalInstruction). Exception was unhandled.
このエラーで処理が終了して、再起動を繰り返しているようです。
この実行時エラー(例外発生)、不当なメモリー領域を参照しての命令実行等が発生していると思われます。
プリント文を埋めて、エラーを発生個所を調べる必要がありそうです。
投稿: たま吉さん(管理者) | 2023年6月28日 (水) 13時10分
ありがとうございます
私もGuru Meditation Errorとあるので調べているところです
「パニックハンドラは、エラーの原因をコンソールに出力することから開始します。」とありました
しろいろご指導いただいてありがとうございました
ここまできているので時間かけてやろうと思います
何回も返信ありがとうございました。感謝です!!
投稿: old_papa | 2023年6月29日 (木) 09時43分
NeoPixel (32x8)を手に入れたのでコードを参考にさせていただきました。
実行して分かりましたが、LEDの接続が
・パネルの左上起点に下上になっている
でした。
たま吉さんのは「パネルの左上起点に右左」ですよね。
その場合の、コードの変更箇所ですが
・XYtoNo
・NeoScroll
になるでしょうか? 頑張って読み解いていくのですがヒント頂けると助かります。
投稿: Zuhi | 2024年9月10日 (火) 21時38分
Zuhiさん
いろいろなパターンのものが出回っているようですね
コードの変更はZuhiさんのお考え通り、下記の2つの変更でいけるとおもいます。
①XYtoNo()
②NeoScroll()
具体的な方法について、コメントに画像添付で記載しようとしたのですが(画像は作成済)、
本件については、ブログ記事にて近日中に解答します..
どうも、ココログの仕様変更(劣化)で、以前出来たコメントへの画像埋め込みが出来なくなっている.. (゚∀゚)アヒャ
コメントでhtmlのタグも書けなくなった模様.. (-_-;)
管理者環境ではコメントはhtmlの記述で見えているのに、htmlでのエディットが出来ない..(以前は出来たのに..)
過去記事への追記・修正はレイアウトが崩れて実質不能(糞過ぎる..).. 過去記事への追記での説明も厳しいそうです。
このあたり、ココログのサポート員が糞で状況説明しても、一向に改善してくれない。課金会員なのに..(と愚痴
niftyの管理母体はITとは無縁のノジマだし、ココログは縮小の方向のようだし..
投稿: たま吉さん(管理者) | 2024年9月11日 (水) 18時23分
Zuhiさん
下記のブログを参考願います。
・「NeoPixel(WS2812B)の制御 その5」
https://nuneno.cocolog-nifty.com/blog/2024/09/post-51eb20.html
修正版でXYtoNo()を変更で行けると思います。
投稿: たま吉さん(管理者) | 2024年9月15日 (日) 12時16分