From t-o-f

Arduino: Wemos D1 Mini Matrix Shield

Contents (hide)

  1. 1. Installation
  2. 2. Code de base
  3. 3. Dessiner des images
  4. 4. Exemples
    1. 4.1 Demo
    2. 4.2 Neige
    3. 4.3 Serveur pour afficher du texte
    4. 4.4 Image par UDP

1.  Installation

2.  Code de base

Global :

// INCLUDE LIBRARY:
#include <Adafruit_GFX.h>
#include <WEMOS_Matrix_GFX.h>

// INSTANTIATE MATRIX OBJECT:
MLED matrix(7); // SET TO MAXIMUM INTENSITY (7).

Dans loop() :

// EFFACER LE CONTENU PRECEDENT:
matrix.clear();

// DESSINER UN PIXEL:
matrix.drawPixel(x, y, LED_ON);

// DESSINER UNE LIGNE:
matrix.drawLine( x0, y0, x1, y1, LED_ON);

// DESSINER UN RECTANGLE VIDE:
matrix.drawRect( x , y, width, height , LED_ON);

// REMPLIR UN RECTANGLE:
matrix.fillRect(x, y, width, height  , LED_ON);

// DESSINER UN CERCLE VIDE:
matrix.drawCircle( x , y, radius, LED_ON);

// REMPLIR UN CERCLE:
matrix.fillCircle(x, y, radius, LED_ON);

// DESSINER UN TRIANGLE VIDE:
matrix.drawTriangle(x0, y0, x1, y1,  x2, y2, LED_ON );

// REMPLIR UN TRIANGLE:
matrix.fillTriangle(ux0, y0, x1, y1,  x2, y2, LED_ON);

// TEXTE:
matrix.setTextSize(1);
matrix.setTextWrap(false);  // NO TEXT WRAP
matrix.setTextColor(LED_ON);
matrix.setCursor(x,y);
matrix.print("text");

// METTRE A JOUR LES PIXELS A LA MATRICE:
matrix.writeDisplay();  // write the changes we made to the display

// FOR MORE, SEE:
// https://learn.adafruit.com/adafruit-gfx-graphics-library/graphics-primitives

3.  Dessiner des images

Définir les images dans l'espace global (avant setup() ) :

// EN BINAIRE :
const unsigned char image_name[] PROGMEM = {
        B00111100,
        B01000010,
        B10100101,
        B10000001,
        B10100101,
        B10011001,
        B01000010,
        B00111100 };

// OU

// EN HEXADECIMALE :
const unsigned char image_name [] PROGMEM = {
        0xff, 0xff, 0xbd, 0xff,0xff, 0xbd, 0xc3, 0xff
};

Dans loop() :

matrix.drawBitmap(x, y, image_name , 8, 8, LED_ON);

Convertir les images avec image2cpp  :

4.  Exemples

4.1  Demo


#include <Adafruit_GFX.h>
#include <WEMOS_Matrix_GFX.h>

MLED matrix(7); //set intensity=7 (maximum)

void setup() {
        Serial.begin(57600);
        Serial.println("8x8 LED Matrix Test");


}

static const uint8_t PROGMEM
smile_bmp[] =
{ B00111100,
        B01000010,
        B10100101,
        B10000001,
        B10100101,
        B10011001,
        B01000010,
        B00111100 },
neutral_bmp[] =
{ B00111100,
        B01000010,
        B10100101,
        B10000001,
        B10111101,
        B10000001,
        B01000010,
        B00111100 },
frown_bmp[] =
{ B00111100,
        B01000010,
        B10100101,
        B10000001,
        B10011001,
        B10100101,
        B01000010,
        B00111100 };

void loop() {
        matrix.clear();
        matrix.drawBitmap(0, 0, smile_bmp, 8, 8, LED_ON);
        matrix.writeDisplay();
        delay(500);

        matrix.clear();
        matrix.drawBitmap(0, 0, neutral_bmp, 8, 8, LED_ON);
        matrix.writeDisplay();
        delay(500);

        matrix.clear();
        matrix.drawBitmap(0, 0, frown_bmp, 8, 8, LED_ON);
        matrix.writeDisplay();
        delay(500);

        matrix.clear();      // clear display
        matrix.drawPixel(0, 0, LED_ON);
        matrix.writeDisplay();  // write the changes we just made to the display
        delay(500);

        matrix.clear();
        matrix.drawLine(0,0, 7,7, LED_ON);
        matrix.writeDisplay();  // write the changes we just made to the display
        delay(500);

        matrix.clear();
        matrix.drawRect(0,0, 8,8, LED_ON);
        matrix.fillRect(2,2, 4,4, LED_ON);
        matrix.writeDisplay();  // write the changes we just made to the display
        delay(500);

        matrix.clear();
        matrix.drawCircle(3,3, 3, LED_ON);
        matrix.writeDisplay();  // write the changes we just made to the display
        delay(500);

        matrix.setTextSize(1);
        matrix.setTextWrap(false);  // we dont want text to wrap so it scrolls nicely
        matrix.setTextColor(LED_ON);
        for (int8_t x=0; x>=-36; x--) {
                matrix.clear();
                matrix.setCursor(x,0);
                matrix.print("Hello");
                matrix.writeDisplay();
                delay(100);
        }
        matrix.setRotation(3);
        for (int8_t x=7; x>=-36; x--) {
                matrix.clear();
                matrix.setCursor(x,0);
                matrix.print("World");
                matrix.writeDisplay();
                delay(100);
        }
        matrix.setRotation(0);
}

4.2  Neige

wemos_matrix_gfx_snow.zip

4.3  Serveur pour afficher du texte

Changer le ssid et le mot de passe pour votre configuration réseau!

wemos_matrix_gfx_server.zip

4.4  Image par UDP

Code Arduino

Changer le ssid et le mot de passe pour votre configuration réseau! Choisir aussi une adresse IP unique!

// SEND AN ASCII MASSAGE BY UDP TO DRAW THE PIXELS.
// A AN ASCII MASSAGE IS A MESSAGE THAT STARTS WITH AN "ADDRESS".
// IT IS THEN FOLLOWED BY VALUES SEPARATED BY SPACES.
// IT ENDS WITH A NEW LINE (ASCII CODE 10).

// DRAW AN IMAGE
////////////////

// SEND THE FOLLOWING MASSAGE TO DRAW AN IMAGE:
// img row0 row1 row2 row3 row4 row5 row6 row7

// EACH rowX DATA IS A NUMBER BETWEEN 0-255 THAT REPRESENTS
// THE 8 PIXELS FOR THAT ROW.

// EXAMPLES:
// CLEAR:
// img 0 0 0 0 0 0 0 0
// FILL:
// img 255 255 255 255 255 255 255 255
// FACE:
// img 255 255 189 255 255 189 195 255
// FROWN:
// img 255 255 189 255 255 195 189 255

// DRAW A PIXEL
////////////////

// SEND THE FOLLOWING MASSAGE TO DRAW A PIXEL
// pix x y state

// x AND y IS THE POSITION OF THE PIXEL.
// state IS EITHER 0 OR 1 (OFF OR ON).

// INCLUDE ESP8266WiFi:
#include <ESP8266WiFi.h>

const char* ssid     = "*****";
const char* password = "*****";
IPAddress ip(10, 5, 0, 120);
IPAddress gateway(10, 5, 0, 1);
IPAddress subnet(255, 255, 255, 0);

// INCLUDE ESP8266 UDP
#include <WiFiUdp.h>
WiFiUDP udp;

// INCLUDE MASSAGE PARSER
#include <AsciiMassageParser.h>

// PACKER(FOR SENDING) AND PARSER(FOR RECEIVING) INSTANCES.
AsciiMassageParser inbound;

// WEMOS MATRIX SHIELD:
#include <Adafruit_GFX.h>
#include <WEMOS_Matrix_GFX.h>

MLED matrix(7); //set intensity=7 (maximum)

///////////
// SETUP //
///////////
void setup() {

        // INITIATE SERIAL COMMUNICATION.
        Serial.begin(57600);

        WiFi.config(ip , gateway , subnet );
        WiFi.begin(ssid, password);
        while (WiFi.status() != WL_CONNECTED) {
                Serial.print("Waiting for connection: ");
                Serial.print(millis());
                Serial.println(" ms");
                delay(50);
        }

        Serial.println("WiFi connected");
        Serial.println("IP address: ");
        Serial.println(WiFi.localIP());

        // START LISTENING ON UDP PORT 7777.
        udp.begin(7777);

}


//////////
// LOOP //
//////////
void loop() {

        // RECEIVE PACKETS OVER UDP

        if ( udp.parsePacket() ) {
                if ( inbound.parseStream( &udp ) ) {
                        if ( inbound.fullMatch("img") ) {
                                matrix.clear();

                                for ( int y = 0 ; y < 8 ; y++ ) {
                                        byte p = inbound.nextByte();

                                        for ( int x = 0; x < 8; x++) {
                                                if ( bitRead(p, x) ) matrix.drawPixel( x , y , LED_ON);
                                        }

                                }

                                matrix.writeDisplay();
                        } else if ( inbound.fullMatch("pix") ) {
                                byte x = inbound.nextByte();
                                byte y = inbound.nextByte();
                                byte state = inbound.nextByte();
                                matrix.drawPixel( x , y , state);
                                matrix.writeDisplay();
                        }
                }
        }


}

Code Max

Choisir l'adresse IP de votre Wemos!

<pre><code>
----------begin_max5_patcher----------
1445.3oc6ZszaaiCD9rKP+OHnyYMDkjkj2SsX2K8PAJP28TSgAsDsMyJSJPR
k3rE6+8kOzaKoJmHmzBzDXKmY3P9wONyvgz4au8MKr2ROg31V+t0WrVr3aRI
KzxTRVTJXg8Q3o3THW2P6iHNGtGYeSgRA5jPq3Va7w8VtqVoeAhVW+40U+8s
jasqLMESPwzbh1d2RozbQJRHdLCY.lss0WK0QxOhIRs7VVfSz.ft8tey0uEv
hooTloabV5bSi2.Kcp61LnH9.lreCCEKLMGrZkpYtgg5GdZi7BZZEW7XpFi0
yHI9LvWCPPo3s6aADuv.+PfBHdQ9d.e0mzu0nyKLw8RrYOClfQF5rwXuCmlp
6rMkjpsAN80D86fKCocrtBytqc.qCzV6rNxw27IoHPG9+rtXJ8vff.R1aVWb
CUqZ8zhLFMixDXJQ0LYWtt29IWPaRoxNS2p+6suQ8T93lmeTSF9jkqkuki87
3+6MS9+qhhzMKzU8HzSGE39K2+e49+Tb+InGjdm838yPYHRhkLJ3x8+A83+C
VaOAmZu0Ocm54OEfZaSm1+NOIC.QiQFgZRvrwF.37xxEPACeJVvRafPF7HRf
XaPD3Vy.6LHMjh4B6aJdVCYF8A8.DMcGFuI3v3p8T.NNUOt.Vx853w7cJzZd
7fF0AxMvvGlGtfvebBm5kbjeVQPyF4DLJ4T3r.V+CK4LvqYpPjwHG.vTUQzq
A2DSOdTsk1YbymU6DINfrxfw+CJw5HTShRQLZ99CV+8e9ok1SNwxJmwX.e.P
m80USD9d9ZJ3xRr3L+Tvec.ys34a0HFwzLAWyIeDdxpvqRJfpk89O+Ge3CUz
zNJSlV+BXH+Q2q1MxvI9guFLzfErXA4wX7GMy4OobTXR+h4o3Eev3AMQMHDv
pfmSI4EKvETPIGrvVV9G5dDiWTaXY6WXCyxZHeQSiTT2clhVCuoVFlXj4UKi
gtGW1E90hgL4bUHmn4LC5OETcLdUOQSPLRNtNr2rXVBsZJJvTXmqY+5.ecJX
+nlNMpZbSop36lEXHW3j0ghIx5Q4x.CXUswU5SP6f4ohM6nDAG+uZbpyh0WC
1AiQCaNQVmidZ9dFFVU.j57K3DJQAj1TuRd4PptXByxeq4jtIDXVelK8rjDz
PZ4xIaNeKjoVYJJ6xsRqfRSaqq1xTzNQg9LLgzkPEzrQzxv6OLl0aoRsGGs6
0p3axIF0ajwthMb38cXdALMsHZtyHbBRvxLVHA1rdH2xtRqoFzC7XFMMs871
n599TkH8uiQOfSDGJNwTCURCvYkNV10K6IXYJUQGgB3ddGQmGbKkUkpdi.cL
KUNa5zhV2vWqn1l4.aqnStPS9i5.xgRkMXI.ClQyWmQyKpwIQ7ZErNv7tmL8
MUUt81Y1fIInSMSiTs4PYNkmLIooiVC1HaEbNG5L.GB99bnNePH3YSgfWaJr
8dtcpaUPgiytXhXLB1a.B1yahdotlaBy+7CJeAT7KJmIn7GOtkl9z8JGJx1y
epg1N5pTVs9mFRSVmi5X..mq.qsZptZdl5WB+4g0DT73DV6Kp4BhOClJo4.t
ZwmMpzR8cVMz9oZvoZv.zImlyhKIjxImUGfJKTPfIUUf9kZeGUKm9p5kClUS
FLdWev3OUv3d8wh2jIF+qNX.SFKAihkRE0GjxVU6bxFywE1.EBFdatv3r25L
hWXorxiasElVTlZ0YeFut15xeqP4reT9imtyhfDKySxVxU47eGLIQd9OtL4+
RYQUKAtNVuS8EkXEJ+YdNhu2DNgewkB4FELC2Klwz1osJ3st9dkr2Y9bQs74
FveyGzveq20oIOdAuvimOXJCX6r.1TVh49S.uXHP8O2fEnGH3LCPv8ElzUeS
cSe.uJr9zff5qT+pw5fW5XKf2TFvRlo+jIctKP8X08N.6d+e8b2eibuemcme
ZLHe6+wlYTmB
-----------end_max5_patcher-----------
</code></pre>
Récupéré sur http://wiki.t-o-f.info/Arduino/WemosD1MiniMatrix
Page mise à jour le 29 November 2017 à 11h39