• Skip to primary navigation
  • Skip to content
  • Skip to primary sidebar
  • Skip to secondary sidebar

У Павла!

  • Контроллеры
    • Arduino
      • Приборы
      • Музыка
      • Проекты Arduino
      • Уроки Arduino
      • Игры на Arduino
      • Роботы на Ардуино
      • FLProg
    • Raspberry pi
      • Raspberry pi server
      • Проекты Raspberry pi
    • ESP
      • ESP8266
        • NodeMCU
      • ESP32
  • ЧПУ
  • 3d печать
  • Об авторе

Бегущая строка с управлением через Web интерфейс на NodeMCU

Сентябрь 25, 2017

Для реализации бегущей строки нам понадобится:

Плата NodeMCU: http://ali.pub/1qdz7a

Матрица 8×8: http://ali.pub/1uwnyl

Данный скетч работает таким образом:

ESP8266 подключается к wi-fi сети, получает ip адрес автоматически, полученный ip адрес можно посмотреть в мониторе порта. При переходе по полученному адресу через браузер, увидим следующее поле:

В данное поле вводим текст, который хотим чтоб отображался на матрице и нажимаем кнопку “Применить”. После чего на нашем дисплее выводится введенный текст.

Схема подключения у нас выглядит вот так:

Matrix D7 D5 D3 VCC Gnd
NodeMCU DIN Clk CS 3.3v Gnd

Собственно сам скетч:

 

/*
Подключения:
NodeMCU    -> Matrix
MOSI-D7-GPIO13  -> DIN
CLK-D5-GPIO14   -> Clk
GPIO0-D3        -> CS
*/

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>

#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Max72xxPanel.h>

const char* ssid     = "NETGEAR";     //Имя wi-fi сети
const char* password = "test";    //пароль


ESP8266WebServer server(80);

Max72xxPanel matrix = Max72xxPanel(D3, 4, 1);   //D3-Пин подключения cs, 4- количество матриц по горизонтали, 1 - количество по вертикали

unsigned long ticker_next;
String tape = "psenyukov.ru";
int spacer = 1;
int width = 5 + spacer;

const char page[] = 
"<html>"
"<meta charset=\"utf-8\">"
"<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">"
"<title>Ticker control</title>"
"<body>"
"
<form action=\"\" method=\"post\">"
"<input type=\"text\" name=\"text\"/>"
"<input type=\"submit\" value=\"Применить\">"
"</form>

"
"</body>"
"</html>";

String utf8rus(String source){
  int i,k;
  String target;
  unsigned char n;
  char m[2] = { '0', '\0' };

  k = source.length(); i = 0;
  while (i < k) { n = source[i]; i++; if (n >= 0xC0) {
      switch (n) {
        case 0xD0: {
          n = source[i]; i++;
          if (n == 0x81) { n = 0xA8; break; }
          if (n >= 0x90 && n <= 0xBF) n = n + 0x2F; break; } case 0xD1: { n = source[i]; i++; if (n == 0x91) { n = 0xB7; break; } if (n >= 0x80 && n <= 0x8F) n = n + 0x6F;
            break;
        }
      }
    } // switch
    m[0] = n; target = target + String(m);
  }
  return target;
}

void handleSubmit(){
  tape = utf8rus(server.arg("text"));
  server.send(200, "text/html", page);
}

void handleRoot() {
  if (server.hasArg("text")) {
    handleSubmit();
  } else {
    server.send(200, "text/html", page);
  }
}

void setup(void){
  tape = utf8rus("psenyukov.ru");

  Serial.begin(115200);
  delay(10);

// Подключаемся к сети WiFi
 Serial.println();
 Serial.println();
 Serial.print("Connecting to ");
 Serial.println(ssid);
 WiFi.begin(ssid, password);

    
// Ожидание подключения
 while (WiFi.status() != WL_CONNECTED) {
 delay(500);
 Serial.print(".");
 }
 Serial.println("");
 Serial.println("WiFi connected");
 
  server.on("/", handleRoot);
  server.begin();
 
 // Вывод полученного IP адреса
 Serial.println(WiFi.localIP());

  

  matrix.setIntensity(7); //яркость
   matrix.setRotation(0, 1);        // 1 матрица
  matrix.setRotation(1, 1);        // 2 матрица
  matrix.setRotation(2, 1);        // 3 матрица
  matrix.setRotation(3, 1);        // 4 матрица
}

void handleTicker(){
  for ( int i = 0 ; i < width * tape.length() + matrix.width() - 1 - spacer; i++ ) { matrix.fillScreen(LOW); int letter = i / width; int x = (matrix.width() - 1) - i % width; int y = (matrix.height() - 8) / 2; while ( x + width - spacer >= 0 && letter >= 0 ) {
      if ( letter < tape.length() ) {
        matrix.drawChar(x, y, tape[letter], HIGH, LOW, 1);
        server.handleClient();
      }

      letter--;
      x -= width;
    }

    matrix.write();
    delay(50);
  }
}

void loop(void){
  
  
  server.handleClient();
  handleTicker();
}

 

Ссылка на скетч: https://yadi.sk/d/QM3f__953NCotx

Для корректной работы скетча нужно скачать следующие библиотеки:

Adafruit_GFX_Library: https://yadi.sk/d/BxfKUBu53NAcSp
arduino-Max72xxPanel-master: https://yadi.sk/d/_sMXrMoC3NAcYj

Демонстрация работы данной программы можно увидеть в видео приведенном в конце статьи.

 

  • Нравится

Primary Sidebar

Поиск

Новые записи

  • Подключение к raspberry pi через USB-ttl адаптер
  • Гирлянда на адресных светодиодах ws2812b и arduino
  • Снежинка на arduino и светодиодной ленте ws2812
  • Подключение термистора к arduino.
  • Термостат с регулировкой температуры до 1000 С° с помощью модуля MAX6675, реле и arduino.

Метки

Loading

Arduino attiny84 BH1750 Blynk buzzer CNC DS18b20 esp8266 Ethernet FLProg Games GSM HC-06 HC-SR04 HC-SR501 ir isd1820 L298N LM335 MAX7219 MQ-2 neopixel NEOWAY M590 Nextion nodemcu processing raspberry pi Relay RFID SD card Servo sharp ThingSpeak ws2812 Влажность Датчик звука Сигнализация Температура ЧПУ диод кнопка монитор порта уроки фоторезистор часы 3d печать (1)
Arduino (82)
ESP (2)
ESP32 (1)
ESP8266 (13)
FLProg (10)
NodeMCU (7)
Raspberry pi (5)
Raspberry pi server (2)
Uncategorized (2)
Игры на Arduino (3)
Музыка (1)
Приборы (1)
Проекты Arduino (53)
Проекты Raspberry pi (1)
Роботы на Ардуино (1)
Уроки Arduino (14)
ЧПУ (3)

Подписаться на YouTube!

Группа в ВК

Secondary Sidebar

Свежие записи

  • Подключение к raspberry pi через USB-ttl адаптер
  • Гирлянда на адресных светодиодах ws2812b и arduino
  • Снежинка на arduino и светодиодной ленте ws2812
  • Подключение термистора к arduino.
  • Термостат с регулировкой температуры до 1000 С° с помощью модуля MAX6675, реле и arduino.

Copyright_У Павла! © 2019 ·