• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

i2c и ESP8266

n00b00dy

New member
Похожая проблема (с квадратиками) решилась установкой перемычки на модуле I2C и регулировкой контрастности на этом же модуле
i2c.jpg
 
Похожая проблема (с квадратиками) решилась установкой перемычки на модуле I2C и регулировкой контрастности на этом же модуле
Lcd1602 уже стал отображать слова, но мне этот экран показался маленьким, и я купил 2 других побольше размером. На одном подсветка светится, но экраны ничего не пишут. Вот я и начал изучать почему так происходит. А на этих двух экранах ручки контраста и перемычек нету. В посте выше мне тут ссылку дали хорошую про один из этих экранов, я эту ссылку в интернете не видел. Попробую по ней что-нибудь сделать. Может получится.
 
А вот другой экран. Он своеобразный, - у него черный фон, и на этом фоне должны светиться зелёные буквы. С ним вообще ничего не получается.
Но Вы меня натолкнули на мысль, - может ничего не получается, потому что для этих экранов контраст прописывается программно, а я этого не сделал? Стоит попробовать.
 

Вложения

Я неправильно программировал этот экран. Там нужен код достаточно сложный (по крайней мере для меня он сложный). Я воспользовался кодом из ссылки, что Вы дали, и все заработало.
 

Vo001

New member
Код для запуска экрана GM12864-59N VER:2.0 на контроллере ST7567S COG для ESP8266 Arduino с поддержкой кириллицы на библиотеке U8g2 . В этой библиотеке много шрифтов с поддержкой кириллицы, название шрифта с примерами можно посмотреть тут https://github.com/olikraus/u8g2/wiki/fntgrpx11 и тут https://github.com/olikraus/u8g2/wiki/fntgrpnbp

На ESP32 тоже должен работать, если указать соответствующие пины SCL и SDA.
Код писался в PlatformIO - устанавливайте библиотеку U8g2.
В Arduino IDE тоже должно запустится, если установить библиотеку U8g2.

ЖК дисплей отличный, хорошо читается днем на солнце и в помещении тоже норм. Есть варианты - чёрный, синий, обычный. На фото обычный. С крупными цифрами фото сделана днем на улице (на экране еще защитная пленка мешается.


Собственно код для экрана:

C++:
#include <U8g2lib.h>   // установите библиотеку U8g2

#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif

U8G2_ST7567_ENH_DG128064I_F_SW_I2C u8g2(U8G2_R0,  5 /* I2C SCL пин */, 4 /* I2C SDA пин */, U8X8_PIN_NONE);


void setup(void) {
u8g2.setI2CAddress(0x3F * 2);   // I2C адрес экрана


u8g2.begin();
u8g2.enableUTF8Print();
u8g2.clearBuffer(); // clear the internal memory
u8g2.setDisplayRotation(U8G2_R2) ;
u8g2.setContrast(230) ;   // установка контраста экрана
}
void loop(void) {
  //u8g2.setFont(u8g2_font_inb24_mf);
//u8g2.setFont(u8g2_font_ncenB08_tr); // choose a suitable font    рабочий щрифт
u8g2.setFont(u8g2_font_guildenstern_nbp_t_all); // choose a suitable font
u8g2.drawStr(0, 60, "Hello World!"); // write something to the internal memory
u8g2.drawBox(0,25,128,10);  // вывод прямоугольника
u8g2.drawUTF8(0, 20, "Привет мир!");  // КИРИЛИЦА ВЫВОДИТСЯ ТОЛЬКО ЧЕРЕЗ u8g2.drawUTF8 !!!
u8g2.sendBuffer(); // transfer internal memory to the display
delay(1000);
}

photo_2022-08-22_12-02-31.jpg
photo_2022-08-22_12-02-28.jpgphoto_2022-08-22_12-01-48.jpg
 
Спасибо большое! Благодарю! А не подскажите, какая команда выводит переменную на экран ( например, значение температуры)? Просто lcd.print(переменная) не выводит
 

Vo001

New member
Спасибо большое! Благодарю! А не подскажите, какая команда выводит переменную на экран ( например, значение температуры)? Просто lcd.print(переменная) не выводит
Для вывода нужно преобразовать тип, если выводить через библиотеку U8g2, то нужно преобразовать в char * . lcd.print скорее всего тоже самое.

Вот пример кода (последнее фото экрана с предыдущено поста), температура берется с термопары через MAX6675 в формате float и преобразуется в char[8] в переменную
temp_char для вывода на экран.

Библиотеки U8g2 и max6675 установить.

Код (PlatformIO) вывода температуры с термопары через MAX6675 на ESP8266 экран GM12864-59N VER:2.0 на контроллере ST7567S COG :

C++:
#include <U8g2lib.h>
#include <SPI.h>
//#include <VoPin8266.h>


#include <max6675.h>
int thermoDO = 12;
int thermoCS = 15;
int thermoCLK = 14;

MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);


#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif

U8G2_ST7567_ENH_DG128064I_F_SW_I2C u8g2(U8G2_R0, 5, 4, U8X8_PIN_NONE);

   String str;
   char temp_char[8] ;

void setup(void) {
Serial.begin(115000);


u8g2.setI2CAddress(0x3F * 2);


u8g2.begin();
u8g2.clearBuffer(); // clear the internal memory
u8g2.setDisplayRotation(U8G2_R2) ;
u8g2.setContrast(240) ;
}





void loop(void) {



   str =(String) thermocouple.readCelsius() ;

   str.toCharArray(temp_char,8);


   Serial.println(temp_char);
   //u8g2.setFont(u8g2_font_inb24_mf);

//u8g2.setFont(u8g2_font_7x13_t_cyrillic); // choose a suitable font
u8g2.setFont(u8g2_font_ncenB08_tr); // choose a suitable font

u8g2.clearBuffer(); // clear the internal memory


u8g2.drawStr(30, 10,  "Temperatura"); // write something to the internal memory

u8g2.setFont(u8g2_font_logisoso34_tr); // choose a suitable font
u8g2.drawStr(3, 55,  temp_char); // write something to the internal memory

u8g2.sendBuffer(); // transfer internal memory to the display
delay(1000);
}
 

Vo001

New member
Возможно через другие функции U8g2 можно вывести число без таких извращений, надо поизучать
 
Сверху Снизу