Не работает экран 1602 (программная проблема)

yazerg
Offline
Зарегистрирован: 12.02.2015

Всем привет! Пилю счетчик подписчиков youtube, который тащит данные для подключения к wifi c sd карты.

Проблема в том, что если нету void readWifiConfig (чтение данных с карты памяти) и переменные заданы вручную, то экран работает и выдает данные, но все, что идет после подключения void readWifiConfig не дает экрану включиться и работать нормально. Ничего не понимаю, может подскажете?


#include <YoutubeApi.h>
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <ArduinoJson.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <SPI.h>
#include <SD.h>
#define API_KEY "стерто"
#define CHANNEL_ID "стерто"

File myFile;
char wifiSsid[63];
char wifiKey[63];
char temp;
char settingSsid[5] = "SSID";
char settingKey[4] = "KEY";
char settingTemp[10];
char valueTemp[63];
int settingTempLastPos = 0;
int valueTempLastPos = 0;
int percentCount = 0;
int andCount = 0;
bool isSetting = true;
bool ssidValueFound = false;
bool keyValueFound = false;
int nextStatDelay = 100;

LiquidCrystal_I2C lcd(0x27, 16, 2);

WiFiClientSecure client;
YoutubeApi api(API_KEY, client);

unsigned long api_mtbs = 60000;
unsigned long api_lasttime;

long subs = 0;

void readWifiConfig() {
  Serial.println("Initializing SD card...");

  if (!SD.begin(4)) {
    Serial.println("Initialization failed!");
    return;
  }
  lcd.clear();
  lcd.setCursor(2, 0);
  Serial.println("Initialization done.");
// lcd.print("Initialization done.");
  myFile = SD.open("CONFIG.TXT");
  if (myFile) {
    Serial.println("CONFIG.TXT");
    while (myFile.available()) {
      temp = myFile.read();
      if (temp == '%') {
        percentCount++;
        isSetting = true;
        if (percentCount == 2) {
          //Serial.println(settingTemp);
          if (strcmp(settingSsid,settingTemp) == 0) {
            Serial.println("SSID SETTING FOUND");
            //IF FOUND RAISE FLAG FOR ADDING VALUE TO SSID CHAR ARRAY
            ssidValueFound = true;
            }
          else if (strcmp(settingKey,settingTemp) == 0) {
            Serial.println("KEY SETTING FOUND");
            //IF FOUND RAISE FLAG FOR ADDING VALUE TO SSID CHAR ARRAY
            keyValueFound = true;
            }
          memset(&settingTemp[0], 0, sizeof(settingTemp));
          settingTempLastPos = 0;
          percentCount = 0;
        }
      }
      else if (temp == '&') {
        andCount++;
        isSetting = false;
        if (andCount == 2) {
          //Serial.println(valueTemp);
          if (ssidValueFound) {
            //Serial.println(valueTemp);
            memcpy(wifiSsid,valueTemp,63);
            //Serial.println(wifiSsid);
            ssidValueFound = false;
            }
          else if (keyValueFound) {
            //Serial.println(valueTemp);
            memcpy(wifiKey,valueTemp,63);
            //Serial.println(wifiKey);
            keyValueFound = false;
            }
          memset(&valueTemp[0], 0, sizeof(valueTemp));
          valueTempLastPos = 0;
          andCount = 0;
        }
      }
      else {
        if (isSetting == true) { //setting
          settingTemp[settingTempLastPos] = temp;
          settingTempLastPos++;
        }
        else if (isSetting == false) { //value
          valueTemp[valueTempLastPos] = temp;
          valueTempLastPos++;
        }
      }
    }
    //Serial.println(settingTemp);
    myFile.close();
  } else {
    Serial.println("Can't open CONFIG.TXT");
  }
}

void setup() {
  lcd.begin();
  lcd.backlight();
  lcd.clear();
  lcd.setCursor(2, 0);
  Serial.begin(115200); // Скорость загрузки
  Serial.println();
  delay(10);
  readWifiConfig();
  Serial.println(wifiSsid);
  Serial.println(wifiKey);

  // Попытка подключения к WIFI сети
  WiFi.begin(wifiSsid, wifiKey);
  Serial.print("connecting");
  lcd.print("connecting");

  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    lcd.print(".");
    delay(500);
  }
  Serial.println();
  Serial.print("connected: ");
  Serial.println(WiFi.localIP());
  lcd.clear();
  lcd.setCursor(2, 0);
  lcd.print(WiFi.localIP());
  lcd.setCursor(2, 1);
  lcd.print("wait for data");
  Serial.print("wait for data");
}

void loop() {
  if (millis() - api_lasttime > api_mtbs)  {
    if (api.getChannelStatistics(CHANNEL_ID))
    {
     
      lcd.clear();
      Serial.println(api.channelStats.subscriberCount);
    lcd.setCursor(4, 0);
      lcd.print("SUBSCIBER");
      lcd.setCursor(6, 1);
      lcd.print(api.channelStats.subscriberCount);
      delay(20000);
      delay(nextStatDelay);
     
   
      lcd.clear();
      Serial.println(api.channelStats.viewCount);
      lcd.setCursor(6, 0);
      lcd.print("VIEW ");
      lcd.setCursor(5, 1);
      lcd.print(api.channelStats.viewCount);
      delay(10000);
    }
    delay(nextStatDelay);
  }

}

 

iconini13ya
Offline
Зарегистрирован: 04.04.2021

Возможно старшие подскажут в чем проблема - но лучше сразу приложите в виде кода что вам выдает COM порт пк и им время сэкономите и вам. Также (возможно глупо звучит и вкусовщина, но) - попробуйте перекинуть самописную функцию после луп

yazerg
Offline
Зарегистрирован: 12.02.2015

С ком портом все хорошо. Выдает все, что нужно. Мне эти данные нужно так же на дисплее получать

Initializing SD card...
Initialization done.
CONFIG.TXT
SSID SETTING FOUND
KEY SETTING FOUND
тут логин и пароль вайфай
connecting.
connected: 192.168.1.81
wait for data

 

iconini13ya
Offline
Зарегистрирован: 04.04.2021

yazerg пишет:

С ком портом все хорошо. Выдает все, что нужно. Мне эти данные нужно так же на дисплее получать

Initializing SD card...
Initialization done.
CONFIG.TXT
SSID SETTING FOUND
KEY SETTING FOUND
тут логин и пароль вайфай
connecting.
connected: 192.168.1.81
wait for data

 


Пока нет взрослых - попробую ответить - поставьте в лупе вывод всех возможных значений в COM порт. И отследить - в чем проблема по ответам. в ком порте. Возможно вы никогда и не входите в цикл, указанный в лупе

yazerg
Offline
Зарегистрирован: 12.02.2015

в компорт так же попадают данные из лупа (подписчики и просмотры) с необходимой периодичностью

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

yazerg пишет:

может подскажете?

Вам уже подсказали куда идти. Не надо плодить бесполезные сучности.

yazerg
Offline
Зарегистрирован: 12.02.2015

В том то все и дело, что компорт показывает, что все работает. Только экран не работает. Может не будете здесь показывать комплекс "местного умника"?. Если я задаю вопрос на профильном форуме - значит я не нашел ответа и испробовал все необходимые способы решения проблемы. 

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Перенеси 123 строку так, чтобы она была перед 116й. О результате напиши. 

yazerg
Offline
Зарегистрирован: 12.02.2015

Все точно так же, разве что сократилось количество данных, которые сходу выводятся в компорт

было

Initializing SD card...

Initialization done.

CONFIG.TXT

SSID

SSID SETTING FOUND

"точка доступа"

"точка доступа"

KEY

KEY SETTING FOUND

"пароль"

"пароль"

"пароль"



"точка доступа"

"пароль"

connecting.

connected: 192.168.1.81

wait for data1120

57467

Стало

Gross_Home

"точка доступа"

"пароль"

connecting.

connected: 192.168.1.81

wait for data1120

57467
 
 
BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Логично, serial же не инициализирован еще, можно ж было догадаться... А почему в качестве SS 4й пин?

#include <YoutubeApi.h>
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <ArduinoJson.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <SPI.h>
#include <SD.h>
#define API_KEY "стерто"
#define CHANNEL_ID "стерто"

File myFile;
char wifiSsid[63];
char wifiKey[63];
char temp;
char settingSsid[5] = "SSID";
char settingKey[4] = "KEY";
char settingTemp[10];
char valueTemp[63];
int settingTempLastPos = 0;
int valueTempLastPos = 0;
int percentCount = 0;
int andCount = 0;
bool isSetting = true;
bool ssidValueFound = false;
bool keyValueFound = false;
int nextStatDelay = 100;

LiquidCrystal_I2C lcd(0x27, 16, 2);

WiFiClientSecure client;
YoutubeApi api(API_KEY, client);

unsigned long api_mtbs = 60000;
unsigned long api_lasttime;

long subs = 0;

void readWifiConfig() {
  Serial.println("Initializing SD card...");

  if (!SD.begin(4)) {
    Serial.println("Initialization failed!");
    return;
  }
  lcd.clear();
  lcd.setCursor(2, 0);
  Serial.println("Initialization done.");
  // lcd.print("Initialization done.");
  myFile = SD.open("CONFIG.TXT");
  if (myFile) {
    Serial.println("CONFIG.TXT");
    while (myFile.available()) {
      temp = myFile.read();
      if (temp == '%') {
        percentCount++;
        isSetting = true;
        if (percentCount == 2) {
          //Serial.println(settingTemp);
          if (strcmp(settingSsid, settingTemp) == 0) {
            Serial.println("SSID SETTING FOUND");
            //IF FOUND RAISE FLAG FOR ADDING VALUE TO SSID CHAR ARRAY
            ssidValueFound = true;
          }
          else if (strcmp(settingKey, settingTemp) == 0) {
            Serial.println("KEY SETTING FOUND");
            //IF FOUND RAISE FLAG FOR ADDING VALUE TO SSID CHAR ARRAY
            keyValueFound = true;
          }
          memset(&settingTemp[0], 0, sizeof(settingTemp));
          settingTempLastPos = 0;
          percentCount = 0;
        }
      }
      else if (temp == '&') {
        andCount++;
        isSetting = false;
        if (andCount == 2) {
          //Serial.println(valueTemp);
          if (ssidValueFound) {
            //Serial.println(valueTemp);
            memcpy(wifiSsid, valueTemp, 63);
            //Serial.println(wifiSsid);
            ssidValueFound = false;
          }
          else if (keyValueFound) {
            //Serial.println(valueTemp);
            memcpy(wifiKey, valueTemp, 63);
            //Serial.println(wifiKey);
            keyValueFound = false;
          }
          memset(&valueTemp[0], 0, sizeof(valueTemp));
          valueTempLastPos = 0;
          andCount = 0;
        }
      }
      else {
        if (isSetting == true) { //setting
          settingTemp[settingTempLastPos] = temp;
          settingTempLastPos++;
        }
        else if (isSetting == false) { //value
          valueTemp[valueTempLastPos] = temp;
          valueTempLastPos++;
        }
      }
    }
    //Serial.println(settingTemp);
    myFile.close();
  } else {
    Serial.println("Can't open CONFIG.TXT");
  }
}

void setup() {
  Serial.begin(115200); // Скорость загрузки
  Serial.println();
  delay(10);
  readWifiConfig();
  lcd.begin();
  lcd.backlight();
  lcd.clear();
  lcd.setCursor(2, 0);
  Serial.println(wifiSsid);
  Serial.println(wifiKey);

  // Попытка подключения к WIFI сети
  WiFi.begin(wifiSsid, wifiKey);
  Serial.print("connecting");
  lcd.print("connecting");

  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    lcd.print(".");
    delay(500);
  }
  Serial.println();
  Serial.print("connected: ");
  Serial.println(WiFi.localIP());
  lcd.clear();
  lcd.setCursor(2, 0);
  lcd.print(WiFi.localIP());
  lcd.setCursor(2, 1);
  lcd.print("wait for data");
  Serial.print("wait for data");
}

void loop() {
  if (millis() - api_lasttime > api_mtbs)  {
    if (api.getChannelStatistics(CHANNEL_ID)) {

      lcd.clear();
      Serial.println(api.channelStats.subscriberCount);
      lcd.setCursor(4, 0);
      lcd.print("SUBSCIBER");
      lcd.setCursor(6, 1);
      lcd.print(api.channelStats.subscriberCount);
      delay(20000);
      delay(nextStatDelay);


      lcd.clear();
      Serial.println(api.channelStats.viewCount);
      lcd.setCursor(6, 0);
      lcd.print("VIEW ");
      lcd.setCursor(5, 1);
      lcd.print(api.channelStats.viewCount);
      delay(10000);
    }
    delay(nextStatDelay);
  }
}

 

yazerg
Offline
Зарегистрирован: 12.02.2015
Код собран из двух (некоторые данные удалены)
Код не мой, поэтому я и прошу помощи на форуме
#include <YoutubeApi.h>
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <ArduinoJson.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

char ssid[] = "";
char password[] = "";
#define API_KEY ""
#define CHANNEL_ID ""

int nextStatDelay = 100;


LiquidCrystal_I2C lcd(0x27, 16, 2);

WiFiClientSecure client;
YoutubeApi api(API_KEY, client);

unsigned long api_mtbs = 60000;
unsigned long api_lasttime;

long subs = 0;

void setup() {

  Serial.begin(115200); // Скорость загрузки
  Serial.println();
  lcd.begin();
  lcd.backlight();
  lcd.clear();

  // Попытка подключения к WIFI сети
  WiFi.begin(ssid, password);
  Serial.print("connecting");
  lcd.print("connecting");

  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    lcd.print(".");
    delay(500);
  }
  Serial.println();
  Serial.print("connected: ");
  Serial.println(WiFi.localIP());
  lcd.clear();
  lcd.setCursor(2, 0);
  lcd.print(WiFi.localIP());
  lcd.setCursor(2, 1);
  lcd.print("wait for data");
  Serial.print("wait for data");
}

void loop() {
  // Отображение информации на диплее
  if (millis() - api_lasttime > api_mtbs)  {
    if (api.getChannelStatistics(CHANNEL_ID))
    {
      // Количество ПОДПИСЧИКОВ
      lcd.clear();
      Serial.println(api.channelStats.subscriberCount);
    lcd.setCursor(4, 0); // Курсор для сдвига слова
      lcd.print("SUBSCIBER"); // Слово SUBSCIBER (подписчики) можно изменить на свое ( например Имя канала) ТОЛЬКО на АНГЛ.ЯЗ!
      lcd.setCursor(6, 1); // Курсор для сдвига цифр
      lcd.print(api.channelStats.subscriberCount);
      delay(20000); // Время задержки надписи на дисплее (в миллисекундах)
      delay(nextStatDelay);
   
      // Количество ПРОСМОТРОВ
      lcd.clear();
      Serial.println(api.channelStats.viewCount);
      lcd.setCursor(6, 0); // Курсор для сдвига слова
      lcd.print("VIEW "); // Слово VIEW (просмотры) можно изменить на свое. ТОЛЬКО на АНГЛ.ЯЗ!
      lcd.setCursor(5, 1); // Курсор для сдвига слова
      lcd.print(api.channelStats.viewCount);
      delay(10000); //Время задержки надписи на дисплее (в миллисекундах)
    }
    delay(nextStatDelay);
  }

}[

 

Второй код взят с форума по 8266
#include
#include

File myFile;
char wifiSsid[63];
char wifiKey[63];
char temp;
char settingSsid[5] = "SSID";
char settingKey[4] = "KEY";
char settingTemp[10];
char valueTemp[63];
int settingTempLastPos = 0;
int valueTempLastPos = 0;
int percentCount = 0;
int andCount = 0;
bool isSetting = true;
bool ssidValueFound = false;
bool keyValueFound = false;

void readWifiConfig() {
  Serial.println("Initializing SD card...");

  if (!SD.begin(4)) {
    Serial.println("Initialization failed!");
    return;
  }
  Serial.println("Initialization done.");
  myFile = SD.open("CONFIG.TXT");
  if (myFile) {
    Serial.println("CONFIG.TXT");
    while (myFile.available()) {
      temp = myFile.read();
      if (temp == '%') {
        percentCount++;
        isSetting = true;
        if (percentCount == 2) {
          //Serial.println(settingTemp);
          if (strcmp(settingSsid,settingTemp) == 0) {
            Serial.println("SSID SETTING FOUND");
            //IF FOUND RAISE FLAG FOR ADDING VALUE TO SSID CHAR ARRAY
            ssidValueFound = true;
            }
          else if (strcmp(settingKey,settingTemp) == 0) {
            Serial.println("KEY SETTING FOUND");
            //IF FOUND RAISE FLAG FOR ADDING VALUE TO SSID CHAR ARRAY
            keyValueFound = true;
            }
          memset(&settingTemp[0], 0, sizeof(settingTemp));
          settingTempLastPos = 0;
          percentCount = 0;
        }
      }
      else if (temp == '&') {
        andCount++;
        isSetting = false;
        if (andCount == 2) {
          //Serial.println(valueTemp);
          if (ssidValueFound) {
            //Serial.println(valueTemp);
            memcpy(wifiSsid,valueTemp,63);
            //Serial.println(wifiSsid);
            ssidValueFound = false;
            }
          else if (keyValueFound) {
            //Serial.println(valueTemp);
            memcpy(wifiKey,valueTemp,63);
            //Serial.println(wifiKey);
            keyValueFound = false;
            }
          memset(&valueTemp[0], 0, sizeof(valueTemp));
          valueTempLastPos = 0;
          andCount = 0;
        }
      }
      else {
        if (isSetting == true) { //setting
          settingTemp[settingTempLastPos] = temp;
          settingTempLastPos++;
        }
        else if (isSetting == false) { //value
          valueTemp[valueTempLastPos] = temp;
          valueTempLastPos++;
        }
      }
    }
    //Serial.println(settingTemp);
    myFile.close();
  } else {
    Serial.println("Can't open CONFIG.TXT");
  }
}

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  delay(10);
  readWifiConfig();
  Serial.println(wifiSsid);
  Serial.println(wifiKey);
}

void loop() {
  // put your main code here, to run repeatedly:

}

 

 

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Тогда и схему подключения показывай..

yazerg
Offline
Зарегистрирован: 12.02.2015

К Wemos D1 Mini подключены по SPI SD адаптер и по I2C дисплей.

Как я говорил ранее - сам код работает, он выдает данные в компорт, а если исключить получение данных с SD карты, то и дисплей показывает.

Я даже в начале void readWifiConfig выводил данные на экран и все работало.

Не работает все что после кода получения параметров с SD

nik182
Offline
Зарегистрирован: 04.05.2015

После lcd.clear поставь делей на секунд. Посмотри что получится. И в начале, до инициализации вифи что нибудь выводит?

sadman41
Offline
Зарегистрирован: 19.10.2016

К которому SPI? На SPI у ESP своя флешка висит и МК ей пользуется без оглядки на пользователя.

yazerg
Offline
Зарегистрирован: 12.02.2015

Не сработало.

Вывод указан выше. Все, как и предполагается кодом

yazerg
Offline
Зарегистрирован: 12.02.2015

 

Вот сюдым-с. Повторюсь, алгоритм чтения с карты памяти работает, раз система подключается к моему wifi

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Как оно с тем кодом работает вообще?)

yazerg
Offline
Зарегистрирован: 12.02.2015

Не знаю, но у меня все цепляется) Или о чем ты?

Если про отсутствие библиотек во втором примере - я хз) добавлял сам SPI и SD

yazerg
Offline
Зарегистрирован: 12.02.2015

Или может подскажете часть другого кода? А то вобще ничего не понимаю

 

yazerg
Offline
Зарегистрирован: 12.02.2015

Вопрос решился.

  if (!SD.begin(4))

Изменил на 13 и все заработало

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

А если бы схему сразу предоставил - быстрее бы решился вопрос. )))

Хотя странно без схемы. SS как D8 указан выше на схеме wemos. А на самом деле куда что подключено гадать... ну нафиг, решилось и фиг с ним. 

SergeiL
SergeiL аватар
Offline
Зарегистрирован: 05.11.2018

Ну и отлично!

yazerg
Offline
Зарегистрирован: 12.02.2015

Он указан, как GPIO13

Сразу всплыла новая проблема при подключении к другой WiFi сети. Точно так же не горит экран и идет трансляция в компорт. Первый запуск проходит хорошо, а при втором ничего. В чем может быть проблема? Может что-то затирать надо при смене конфигурации?

sadman41
Offline
Зарегистрирован: 19.10.2016

yazerg пишет:

Вопрос решился.

  if (!SD.begin(4))

Изменил на 13 и все заработало


Епстесвенно. Если лупить SPI трафик в SDA , то никому работать на I2C шине не захочется.

yazerg
Offline
Зарегистрирован: 12.02.2015

Тык проблема повторилась 

yazerg
Offline
Зарегистрирован: 12.02.2015

Все, теперь проблема решена полностью. Плата оказалась не очень то и рабочей. Поменял и все заработало. Всем, кто помогал - большое спасибо!

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

yazerg пишет:

Он указан, как GPIO13

Где он так указан? Я вижу D8 и он же GPIO15