Не работает экран 1602 (программная проблема)
- Войдите на сайт для отправки комментариев
Сб, 24/04/2021 - 19:54
Всем привет! Пилю счетчик подписчиков 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); } }
Возможно старшие подскажут в чем проблема - но лучше сразу приложите в виде кода что вам выдает COM порт пк и им время сэкономите и вам. Также (возможно глупо звучит и вкусовщина, но) - попробуйте перекинуть самописную функцию после луп
С ком портом все хорошо. Выдает все, что нужно. Мне эти данные нужно так же на дисплее получать
С ком портом все хорошо. Выдает все, что нужно. Мне эти данные нужно так же на дисплее получать
Пока нет взрослых - попробую ответить - поставьте в лупе вывод всех возможных значений в COM порт. И отследить - в чем проблема по ответам. в ком порте. Возможно вы никогда и не входите в цикл, указанный в лупе
в компорт так же попадают данные из лупа (подписчики и просмотры) с необходимой периодичностью
может подскажете?
Вам уже подсказали куда идти. Не надо плодить бесполезные сучности.
В том то все и дело, что компорт показывает, что все работает. Только экран не работает. Может не будете здесь показывать комплекс "местного умника"?. Если я задаю вопрос на профильном форуме - значит я не нашел ответа и испробовал все необходимые способы решения проблемы.
Перенеси 123 строку так, чтобы она была перед 116й. О результате напиши.
Все точно так же, разве что сократилось количество данных, которые сходу выводятся в компорт
было
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
Логично, serial же не инициализирован еще, можно ж было догадаться... А почему в качестве SS 4й пин?
Тогда и схему подключения показывай..
К Wemos D1 Mini подключены по SPI SD адаптер и по I2C дисплей.
Как я говорил ранее - сам код работает, он выдает данные в компорт, а если исключить получение данных с SD карты, то и дисплей показывает.
Я даже в начале void readWifiConfig выводил данные на экран и все работало.
Не работает все что после кода получения параметров с SD
После lcd.clear поставь делей на секунд. Посмотри что получится. И в начале, до инициализации вифи что нибудь выводит?
К которому SPI? На SPI у ESP своя флешка висит и МК ей пользуется без оглядки на пользователя.
Не сработало.
Вывод указан выше. Все, как и предполагается кодом
Вот сюдым-с. Повторюсь, алгоритм чтения с карты памяти работает, раз система подключается к моему wifi
Как оно с тем кодом работает вообще?)
Не знаю, но у меня все цепляется) Или о чем ты?
Если про отсутствие библиотек во втором примере - я хз) добавлял сам SPI и SD
Или может подскажете часть другого кода? А то вобще ничего не понимаю
Вопрос решился.
Изменил на 13 и все заработало
А если бы схему сразу предоставил - быстрее бы решился вопрос. )))
Хотя странно без схемы. SS как D8 указан выше на схеме wemos. А на самом деле куда что подключено гадать... ну нафиг, решилось и фиг с ним.
Ну и отлично!
Он указан, как GPIO13
Сразу всплыла новая проблема при подключении к другой WiFi сети. Точно так же не горит экран и идет трансляция в компорт. Первый запуск проходит хорошо, а при втором ничего. В чем может быть проблема? Может что-то затирать надо при смене конфигурации?
Вопрос решился.
Изменил на 13 и все заработало
Епстесвенно. Если лупить SPI трафик в SDA , то никому работать на I2C шине не захочется.
Тык проблема повторилась
Все, теперь проблема решена полностью. Плата оказалась не очень то и рабочей. Поменял и все заработало. Всем, кто помогал - большое спасибо!
Он указан, как GPIO13
Где он так указан? Я вижу D8 и он же GPIO15