• Система автоматизации с открытым исходным кодом на базе 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 можно вывести число без таких извращений, надо поизучать
 
Сверху Снизу