Переделать pov-бегущую строку амперка на управление через wifi access point

Тема в разделе "ESP8266, ESP32", создана пользователем dmb, 18 июн 2022.

  1. dmb

    dmb Нерд

    Доброе время! Решил сделать небольшой проект с POV (англ. point of view) - такая штука, которой можно махнуть и она отрисовывает в воздухе символы или буквы, подобно той, описание которой изложено на сайте Амперки:

    [​IMG]

    http://wiki.amperka.ru/projects:povdisplay

    Задача переделать код так, чтобы она работала на ESP8266, лучше ESP12F - а отображаемый текст программировался через браузер устройства, подключенного по WiFi (AP). В сети много подобных проектов - но я не нашел именно того, что нужно. Есть подобный девайс с хорошим объяснением у Алекса Гайвера
    [​IMG]
    https://alexgyver.ru/pov-serial-display/ - но она прошивается по Bluetooth - а это не совсем хорошо, так как реализация слишком громоздкая: нужна и ардуинка (которые сейчас дорогие) и Bluetoth HC-06 и еще устанавливать приложение в телефон - в то время, когда одна копеечная еэспешка может все это потянуть. То есть: сделать ESP точкой доступа, подключиться смартфоном к новой WiFi сети, в браузере зайти на стандартную страницу, типа 192.168.4.1 и ввести новый набор символов, который "прошьется" в ESP и будет отображаться в "бегущей строке".

    В общем, есть код, который отрисовывает строку

    Код (C++):


    int shiftPin = 4;

    int storePin = 3;

    int dataPin = 2;

    int LEDanPin = 5;

    int analogPin = A1;

    int schalter = 0;

    int kali;

    int g;

    int Zeichen[13][8]={

    {0,0,0,0,0,0,0,0},

    {0,0,0,1,1,0,0,0},

    {0,0,1,0,0,1,0,0},

    {0,1,0,0,0,0,1,0},

    {1,0,0,1,0,0,0,1},

    {1,0,1,0,0,1,0,1},

    {1,0,1,0,0,0,0,1},

    {1,0,1,0,0,1,0,1},

    {1,0,0,1,0,0,0,1},

    {0,1,0,0,0,0,1,0},

    {0,0,1,0,0,1,0,0},

    {0,0,0,1,1,0,0,0},

    {0,0,0,0,0,0,0,0}};

    void setup(){

    pinMode(storePin, OUTPUT);

    pinMode(shiftPin, OUTPUT);

    pinMode(dataPin, OUTPUT);

    pinMode(LEDanPin, OUTPUT);

    pinMode(analogPin, INPUT);

    Serial.begin(9600);

    kali = analogRead(analogPin);

    digitalWrite(LEDanPin, HIGH);

    }

    void loop(){

    g = kali-(analogRead(analogPin));

    Serial.print(g);

    Serial.println();

    if (g > 80 and schalter == 0){

    schalter = 1;

    delay (30);

    for (int n=0; n < 13; n++){

    for (int i=0; i < 8; i++){

    resetPins();

    digitalWrite(dataPin, Zeichen[n][i]); delay(0);

    digitalWrite(shiftPin, HIGH); delay(0);

    }

    digitalWrite(storePin, HIGH);

    digitalWrite(LEDanPin, LOW);

    delay(5);

    digitalWrite(LEDanPin, HIGH);

    }

    }else if (g < -80 and schalter == 1){

    schalter = 0;

    delay (30);

    for (int n=0; n < 13; n++){

    for (int i=0; i < 8; i++){

    resetPins();

    digitalWrite(dataPin, Zeichen[n][i]); delay(0);

    digitalWrite(shiftPin, HIGH); delay(0);

    }

    digitalWrite(storePin, HIGH);

    digitalWrite(LEDanPin, LOW);

    delay(5);

    digitalWrite(LEDanPin, HIGH);

    }

    }

    }

    void resetPins(){

    digitalWrite(shiftPin, LOW);

    digitalWrite(storePin, LOW);

    digitalWrite(dataPin, LOW);

    }

     
    и есть код, который умеетподключеть ESP-шку по WiFi и управлять светодиодом, например этот:

    Код (C++):
    /*
    * Sketch: ESP8266_LED_Control_02B
    * Now with added CSS and LED status
    * Control an LED from a web browser
    * Intended to be run on an ESP8266
    *
    * connect to the ESP8266 AP then
    * use web broswer to go to 192.168.4.1
    *
    */

    #include <ESP8266WiFi.h>
    const char WiFiPassword[] = "12345678";
    const char AP_NameChar[] = "LEDControl" ;
    WiFiServer server(80);
    String header = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n";
    String html_1 = "<!DOCTYPE html><html><head><meta name='viewport' content='width=device-width, initial-scale=1.0'/><meta charset='utf-8'><style>body {font-size:140%;} #main {display: table; margin: auto;  padding: 0 10px 0 10px; } h2,{text-align:center; } .button { padding:10px 10px 10px 10px; width:100%;  background-color: #4CAF50; font-size: 120%;}</style><title>LED Control</title></head><body><div id='main'><h2>LED Control</h2>";
    String html_LED = "";
    String html_2 = "<form id='F1' action='LEDON'><input class='button' type='submit' value='LED ON' ></form><br>";
    String html_3 = "<form id='F2' action='LEDOFF'><input class='button' type='submit' value='LED OFF' ></form><br>";
    String html_4 = "</div></body></html>";
    String request = "";
    int LED_Pin = D1;
    void setup()
    {
        pinMode(LED_Pin, OUTPUT);
        boolean conn = WiFi.softAP(AP_NameChar, WiFiPassword);
        server.begin();
    } // void setup()
    void loop()
    {
        // Check if a client has connected
        WiFiClient client = server.available();
        if (!client)  {  return;  }
        // Read the first line of the request
        request = client.readStringUntil('\r');
        if       ( request.indexOf("LEDON") > 0 )  { digitalWrite(LED_Pin, HIGH);  }
        else if  ( request.indexOf("LEDOFF") > 0 ) { digitalWrite(LED_Pin, LOW);   }
        // Get the LED pin status and create the LED status message
        if (digitalRead(LED_Pin) == HIGH) { html_LED = "The LED is on<br><br>"; }
        else                              { html_LED = "The LED is off<br><br>"; }
        client.flush();
        client.print( header );
        client.print( html_1 );
        client.print( html_LED );
        client.print( html_2 );
        client.print( html_3 );
        client.print( html_4);
        delay(5);
      // The client will actually be disconnected when the function returns and 'client' object is detroyed
    } // void loop()
    - и их нужно как-то объединить. Кто может помочь в этом? Заранее благодарен!
     
    Последнее редактирование: 18 июн 2022
  2. parovoZZ

    parovoZZ Гуру

    Если предложить не благодарность, а денежные средства - обязательно найдутся желающие с непреодолимым желанием помочь!
     
  3. dmb

    dmb Нерд

    Да, бабло побеждает зло
     
  4. issaom

    issaom Гуру

    Если бы вы внимательно посмотрели проекты, то Амперковский проект ESP8266 не потянет в принципе (ног не хватит). Там используется инерциальный датчик, и работает это соответственно на порядок лучше чем у Гайвера. (так махать можно с разной скоростью).... Работы на вашу задумку примерно на 2-3 дня Вы 3 рабочих дня примерно в какую сумму оцениваете?
     
  5. dmb

    dmb Нерд

    Я посмотрел внимательно и привел первый скетч (не Амперковский), в котором используется сдвиговый регистр и там задействовано всего 6 выводов, включая акселерометр, вот видео того проекта:

    . Скетч простой, работает вообще без каких-либо библиотек и без проблем компилируется на ESP. Гайвера я привел просто, как пример, в котором была реализована возможность программирования текста по воздуху - но сразу сказал, что это, к сожалению не подходит. Второй скетч легко создает WiFi точку доступа, там даже есть html страничка, которую можно немного изменить (это я могу сделать сам). По сути, нужно просто перебросать куски кода из одного в другой - конечно же, имея правильные знания (которых у меня, к сожалению нет). По поводу оплаты 3 рабочих дней - подождите, не начинайте, дайте мне подумать...
     
  6. issaom

    issaom Гуру

    Этот пример сюда не подойдет не разу.
    Вот есть пример с окнами ввода....
    https://randomnerdtutorials.com/esp32-esp8266-input-data-html-form/
    Разбирайтесь и переписывайте под себя....
     
  7. dmb

    dmb Нерд

    О, да, этот пример лучше, там уже есть готовые поля ввода - правда, здесь ESP должна подключиться к роутеру (в ESP должен быть прошит SSID и пароль), а роутер назначает динамический IP, его заранее знать нельзя, а можно узнать только подключив в компу и заглянуть в монитор порта. Мой же пример - делает из ESP точку доступа, то есть, где-то на улице, где нет никакой локальной сети, можно одним только телефоном подключиться к ESP - и прошить новый текст в рисовалку - это и есть WiFi Access Point. Однако, за статью спасибо!
     
  8. issaom

    issaom Гуру

    Там этих примеров.....
    Вот вам точка доступа.... выкидываете ту часть где осуществляется подключение к вафле.
    /https://randomnerdtutorials.com/esp8266-nodemcu-wi-fi-manager-asyncwebserver/
     
  9. dmb

    dmb Нерд

    А если вместо светодиодов использовать адресную светодиодную ленту WS2812 может получиться? Есть похожая штука на гитхабе (скорей всего их много), например эта: https://github.com/juliensnz/pov-wheel . Ну и два-три дня, на мой взгляд, многовато, тут два-три часа скорей всего)
     
  10. parovoZZ

    parovoZZ Гуру

    Пробуй. Потом расскажешь.
     
  11. ostrov

    ostrov Гуру

    Плотная адресная лента и передача данных на телеграм-бот, как вариант.