デモコード
コードをつかみ、自分で試してみたい場合は、Githubでここで見つけることができます。
フリートロニクスDMDライブラリLEDドットマトリックスディスプレイへの線、形状、テキストの描画はすべて、Freetronics DMDライブラリを介して行われます。それを使用するには、次の手順を完了します
次に、Freetronics DMDに固有のインクルードがあります。これらはすべて、以前にArduinoライブラリフォルダーにコピーしたファイルから利用できるようにする必要があります。
次に、2つの定数displays_acrossとdisplays_downがあります。これらは、一緒に結合したLEDディスプレイの数を定義するために使用されます。私はあなたが私と同じ状況にあり、1つのディスプレイを持っていると仮定します。したがって、これらは両方とも1つに等しくなります。次に、それをDMDライブラリに渡して、DMD DMD()を使用して実行します。
<span><span>#include <SoftwareSerial.h></span> </span> <span><span>#define SCREEN_WIDTH <span>32</span></span> </span> <span><span>#define SCREEN_HEIGHT <span>16</span></span> </span> <span><span>#define BUFLENGTH <span>512</span></span></span>
次のコードはDMDサンプルに含まれています。これは、DMDライブラリを取得して、設定されたインターバルでディスプレイを更新する関数です。その間隔をもう少し下に定義します。
<span><span>#include <SPI.h></span> </span> <span><span>#include <DMD.h></span> </span> <span><span>#include <TimerOne.h></span></span>
次に、最後の2つの変数を定義します。これら2つは、シリアルポートを介してメッセージを受信することに関連しています。まず、BUF [buflength]は、LEDがオンとオフにする必要があるシリアルポートメッセージのバッファーを保存します。第二に、bufcountは、このバッファ内のバイトの数を保存するために使用されます。
<span><span>#define DISPLAYS_ACROSS <span>1</span></span> </span> <span><span>#define DISPLAYS_DOWN <span>1</span></span> </span> DMD <span>dmd(DISPLAYS_ACROSS, DISPLAYS_DOWN);</span>
次に、以前に含めたタイマーローンライブラリを使用してタイマーを初期化します。 4ミリ秒からカウントダウンするように指示します。 Freetronicsの例では、ディスプレイのちらつきを避けるために、これを5ミリ秒以上に設定しないことをお勧めします。
<span>void ScanDMD() { </span> dmd<span>.scanDisplayBySPI(); </span> <span>}</span>
最後に、setup()関数では、dmd.clearscreen()関数にtrueを渡すことにより、ディスプレイ上のすべてのピクセルをクリアします。この関数にfalseを渡すと、すべてのピクセルがオンになります!
<span>char buf[BUFLENGTH]; </span> <span>int bufCount;</span>
<span><span>#include <SoftwareSerial.h></span> </span> <span><span>#define SCREEN_WIDTH <span>32</span></span> </span> <span><span>#define SCREEN_HEIGHT <span>16</span></span> </span> <span><span>#define BUFLENGTH <span>512</span></span></span>
serialParse()内で、bufcountを-1に設定してカウント値をリセットします。次に、serial.readbytesuntil()を使用して、その配列(buflength)の512要素を読み取ります。 N文字がある場合、配列の読み取りも停止します。ここでの主な目的は、LEDライトグリッドの長さにシリアルメッセージを保持することです。
<span><span>#include <SPI.h></span> </span> <span><span>#include <DMD.h></span> </span> <span><span>#include <TimerOne.h></span></span>
バッファにメッセージがある場合は、parsebuffer()に送信します。これは、画面に解析して表示されます。
parsebuffer()関数内で、画面をクリアすることから、新しい図面で明るくすることから始めます。次に、読んでいる配列のどの位置を追跡するために、iの整数を作成します。<span><span>#define DISPLAYS_ACROSS <span>1</span></span> </span> <span><span>#define DISPLAYS_DOWN <span>1</span></span> </span> DMD <span>dmd(DISPLAYS_ACROSS, DISPLAYS_DOWN);</span>
Arduinoがどのように機能するかをカバーしています。LEDが添付された状態でArduinoでそのコードを実行すると、何も表示されません。ドットマトリックスディスプレイに何かを表示するには、シリアルポートを介してメッセージを送信するにはノードコードが必要です。
ノードコード<span>void ScanDMD() { </span> dmd<span>.scanDisplayBySPI(); </span> <span>}</span>
JavaScriptは、2つの重要なNPMモジュールを必要とすることから始まります。 SerialPortは、シリアルポートを介してArduinoにメッセージを送信できるものとPNG-JSがPNG画像で読まれるものです。
次に、シリアルポートメッセージングを設定します。変数シリアルポート内にシリアルポートオブジェクトを設定します。これには、Arduinoが接続されているポートと、シリアルポートメッセージをリッスンするボーレートを設定します。
<span>char buf[BUFLENGTH]; </span> <span>int bufCount;</span>
<span><span>#include <SoftwareSerial.h></span> </span> <span><span>#define SCREEN_WIDTH <span>32</span></span> </span> <span><span>#define SCREEN_HEIGHT <span>16</span></span> </span> <span><span>#define BUFLENGTH <span>512</span></span></span>
SerialPortオブジェクトには、「オープン」のイベントリスナーがあり、定義されたシリアルポートが開いており、JavaScriptからアクセスできるときに応答します。この場合、Console.logを実行して、すべてがシリアルポートメッセージングに適していることを確認できます。
<span><span>#include <SPI.h></span> </span> <span><span>#include <DMD.h></span> </span> <span><span>#include <TimerOne.h></span></span>
png.decode()関数から返されたデータは、0から255の値の配列になります。各ピクセルを繰り返し、それぞれの4つのアイテムのシリーズ(赤、緑、青、アルファ)を繰り返します。価値。デモでアルファ値を使用することはありません。黒と白の画像だけを扱っているため、理論的には必要に応じてできます。サンプルアレイはそうに見えます:
<span><span>#define DISPLAYS_ACROSS <span>1</span></span> </span> <span><span>#define DISPLAYS_DOWN <span>1</span></span> </span> DMD <span>dmd(DISPLAYS_ACROSS, DISPLAYS_DOWN);</span>
上記の配列は、255,255,255,255の1つの白いピクセルと0,0,0,255の1つの黒いピクセルを表します。これは、画像全体を表現するまで、すべてのピクセルで何度も続きます。 コールバック関数内で、SerialMessageを空白の文字列にリセットし、4つのセットのデータ配列を介して繰り返し始めます。各ピクセルのそれぞれの値に一致するように、赤、緑、青のローカル変数を設定しました。
<span>void ScanDMD() { </span> dmd<span>.scanDisplayBySPI(); </span> <span>}</span>
その値が150を超える場合、それはかなり明るい色であると仮定し、0(白)に設定します。それ以外の場合は、1に設定して黒くします。どちらかの値をSerialMessage文字列に追加します
すべてのピクセルを通過し、ゼロまたはそれを表現するためにゼロまたはゼロのいずれかを割り当てたら、SerialPort.write()を使用してシリアルポートにそのメッセージを送信します。画像を読み、反復するこのプロセス全体は、実際にディスプレイを受信する準備が整うまでにかかる時間よりも速いようです。 。
<span>char buf[BUFLENGTH]; </span> <span>int bufCount;</span>
デモを実行してください
<span>void setup() { </span> Serial<span>.begin(57600);</span>
スケッチをアップロードする場合は、ディスプレイをArduinoに接続し、node serialdmd.jsを介してノードサーバーコードを実行します(NPMを最初にインストールすることを忘れないでください)。 >
これを拡張できる方法はたくさんあります。これはノードサーバーなので、APIに接続して、それを通過する画像を表示できます。時間の時間、自宅のインターネット接続されたデバイスの状態、天気、またはその他のものに応じて、別の画像を表示することができます!
このアイデアを本当にきちんとしたものに拡張した場合は、コメントでお知らせするか、Twitterで私と連絡してください(@thatpatrickguy)、見たい!node.jsを使用したドットマトリックスLEDディスプレイに画像を表示することに関するよくある質問(FAQ)ドットマトリックスLEDディスプレイをコンピューターに接続するには、通常、ArduinoやRaspberry Piなどのマイクロコントローラーを使用します。マイクロコントローラーは、コンピューターとLEDディスプレイの間の仲介者として機能します。その後、node.jsを使用してコンピューターからマイクロコントローラーにデータを送信して、LEDディスプレイにデータを送信できます。 ?
ドットマトリックスLEDディスプレイを使用することの利点は何ですか? 。それらは非常に用途が広く、テキスト、数字、画像を表示できます。また、エネルギー効率が高く、耐久性があり、長い寿命があります。さらに、広告ボードから情報ディスプレイまで、さまざまなアプリケーションに適した明るさと視認性を提供します。 DOT Matrix LEDディスプレイの画像には、画像をディスプレイが理解できる形式に変換することが含まれます。これには通常、画像をバイナリ形式に変換し、各ピクセルが0(オフ)または1(オン)で表されます。その後、node.jsを使用して、このバイナリデータをLEDディスプレイに送信できます。
はい、DOTマトリックスLEDディスプレイは大規模アプリケーションに適しています。それらを組み合わせて、より大きなディスプレイを作成し、デジタルビルボード、パブリック情報ディスプレイ、大規模な広告などのアプリケーションに最適です。 >ドットマトリックスLEDディスプレイの寿命は、使用されるLEDの品質と表示が使用される条件によって異なります。ただし、LEDディスプレイは一般的に長寿で知られており、数万時間の使用を続けることができます。 DOT Matrix LEDディスプレイには、ディスプレイとマイクロコントローラー間の接続を確認し、正しいデータがディスプレイに送信されていることを確認し、電源をチェックすることができます。 node.jsを使用している場合は、デバッグツールを使用してコードの問題を特定するのに役立つこともできます。ディスプレイは屋外で使用できます。ただし、ディスプレイが要素から適切に保護されていることを確認することが重要です。これには、耐候性のケーシングを使用したり、シェルターの場所にディスプレイを設置したりすることができます。
パルス幅変調(PWM)を使用して制御されます。これには、各LEDがオンになっている時間を変えることが含まれ、ディスプレイの明るさを制御します。 node.jsを使用して、LEDディスプレイに送信されたPWM信号を制御し、必要に応じて明るさを調整できるようにします。
以上がnode.jsを使用したドットマトリックスLEDディスプレイに画像を表示するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。