Не работает экран 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й пин?
#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); } }#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); } }[#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: }Тогда и схему подключения показывай..
К 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