В Сети нашел подробную статью об индикаторе WH1602 с удачными примерами программ на языке C для вывода разной информации на индикатор. Программы подойдут и для WH0802. надо лишь в строке инициализации вместо 16 указать 8 и следить, чтобы длина строки выводимого текста не была длиннее 8 символов. В программах используется библиотека WiringPi, поэтому сначала надо установить ее. Введите команды:
sudo apt-get install git-core
git clone git://git.drogon.net/wiringPi
cd wiringPi
./build
Проверьте установку
gpio -v
gpio readall
Вы должны увидеть таблицу с распиновкой контактов GPIO. Если система сообщает об ошибках, дайте
sudo apt-get update
sudo apt-get upgrade
Далее приведена программка на C для вывода приветствия на индикатор WH0802. Так как WH0802 имеет 8 символов в строке, в строке инициализации заменил 16 на 8. Цифра 4 - используется 4-битовый режим (потребуется меньше проводов для соединения индикатора с контактами GPIO на Raspberry Pi 3).
В начале программы в строках #define указаны контакты, которые используются для вывода информации на индикатор (нумерация WiringPi). Если эти контакты случайно оказались заняты, то можно назначить другие номера контактов. Чтобы узнать, какие номера контактов шины GPIO соответствуют контактам WiringPi, введите команду gpio readall. Будет выведена таблица с номерами контактов для различных нумераций. Выбранные контакты обведены красными рамками.
В документации на WH0802 приведена распиновка индикатора.
Монтажную схему соединений индикатора с Raspberry Pi 3 свел в таблицу.
Для регулировки контрастности контакт V0 WH0802 лучше все-таки включить через потенциометр:
Остальные параметры взял из статьи http://raspberrypi.ru/blog/530.html.
Текст программы сохранил в файле wh0802-4_1.c в домашнем каталоге. Чтобы получить исполняемый файл, программу надо скомпилировать. Находясь в каталоге с программой, запустите компилятор командой
gcc -o wh0802-4_1 wh0802-4_1.c -lwiringPi -lwiringPiDev
где wh0802-4_1.c - текстовый файл, а wh0802-4_1 - исполняемый файл программы. Остальное - параметры компиляции. Полученный файл wh0802-4_1 можно запустить из любого места файловой системы, но для этого нужно указать полный путь к файлу, например /home/pi/wh0802-4_1. Если вы находитесь в том же каталоге, что и сам файл, то перед именем файла ставится точка и слэш, т.е. ./wh0802-4_1. Запустите wh0802-4_1. Если соединения сделаны правильно, то на экране индикатора увидите приветствие
Вторая программа выводит дату и время:
#include <wiringPi.h>
#include <lcd.h>
#include <stdio.h>
#include <time.h>
//USE WIRINGPI PIN NUMBERS
#define LCD_RS 25 //Register select pin
#define LCD_E 24 //Enable Pin
#define LCD_D4 23 //Data pin 4
#define LCD_D5 22 //Data pin 5
#define LCD_D6 21 //Data pin 6
#define LCD_D7 14 //Data pin 7
int main()
{
int lcd;
wiringPiSetup();
lcd = lcdInit (2, 8, 4, LCD_RS, LCD_E, LCD_D4, LCD_D5, LCD_D6, LCD_D7, 0, 0, 0, 0);
while(1){
time_t timer;
char buffer_date[26];
char buffer_time[26];
struct tm* tm_info;
time(&timer);
tm_info = localtime(&timer);
strftime(buffer_date, 26, "%d:%m:%Y", tm_info);
strftime(buffer_time, 26, "%H:%M:%S", tm_info);
lcdPosition(lcd, 0, 0);
lcdPuts(lcd, buffer_date);
lcdPosition(lcd, 0, 1);
lcdPuts(lcd, buffer_time);
}
}
Сохранил программу в файле wh0802-4_3.c. Скомпилировал
gcc -o wh0802-4_3 wh0802-4_3.c -lwiringPi -lwiringPiDev
и запустил
./wh0802-4_3
Если все сделано правильно, то вы должны увидеть часы
Получились интернет-часы, так как Raspberry Pi берет время из интернета.
В статье http://www.circuitbasics.com/raspberry-pi-lcd-set-up-and-programming-in-c-with-wiringpi/ приведены много примеров программ для вывода различной информации на индикатор:
Write to the LCD in 8 Bit Mode Запись в индикатор в 8-битном режиме
Write to the LCD in 4 Bit Mode Запись в индикатор в 4-битном режиме
Position the Text Позиция текста
Clear the Screen Очистка экрана
Blinking Text Мерцание текста
Turn the Cursor On and Off Включение/выключение курсора
Print the Date and Time Вывод даты и времени (вышеприведенная программа)
Print Your IP Address Вывод вашего IP адреса
Printing a Single Custom Character Вывод одного заказного символа (который вы сами сформируете в виде цепочки битов)
Printing Multiple Custom Character Вывод нескольких заказных символов
Scroll Right to Left Прокрутка текста справа налево
Scroll Left to Right Прокрутка текста слева направо
Print Data From a Sensor Вывод данных с датчика
Пока программа вывода даты и времени работает никаких других команд ввести нельзя, так как отсутствует приглашение командной строки. Чтобы продолжить работу, надо запустить ее в фоновом режиме. Например, дайте команду
nohup ./wh0802-4_3 &
Нажмите Ctrl+C, чтобы появилось приглашение командной строки. Для завершения программы наберите kill <номер процесса>.
Если ваш индикатор поддерживает русские символы, то можно попробовать вывести русский текст. По описанию знакогенератор содержит русские символы. Столбцы и строки пронумерованы в двоичной системе. Для удобства использования пронумеровал колонки и строки в шестнадцатеричной системе:
Подсказку, как вывести русский текст, нашел в статье http://mega-avr.ucoz.ru/_fr/0/LCD.pdf.
Программа на C для вывода приветствия на русском языке:
#include <wiringPi.h>
#include <lcd.h>
//USE WIRINGPI PIN NUMBERS
#define LCD_RS 25 //Register select pin
#define LCD_E 24 //Enable Pin
#define LCD_D4 23 //Data pin 4
#define LCD_D5 22 //Data pin 5
#define LCD_D6 21 //Data pin 6
#define LCD_D7 14 //Data pin 7
int main()
{
int lcd;
wiringPiSetup();
lcd = lcdInit (2, 8, 4, LCD_RS, LCD_E, LCD_D4, LCD_D5, LCD_D6, LCD_D7, 0, 0, 0, 0);
lcdPuts(lcd, "\xA8\x70\xB8\xB3\x65\xBF");
lcdPosition(lcd,1,1);
lcdPuts(lcd, "(*_*)");
}
Используя шестнадцатеричные коды символов, в первой строке индикатора выводится слово Привет. Не очень красиво, но работает:
A8 - русская П
70 - английская p
B8 - русская и
B3 - русская в
65 - английская e
BF - русская т.
Может случиться сбой в работе индикатора и на экран выводится всякая белиберда. Тогда отключите питание индикатора (шина +5 вольт) на 10-15 секунд и затем снова запустите программу индикации. Если не помогло, то перезагрузите Raspberry Pi.
Использованные ресурсы
http://www.circuitbasics.com/raspberry-pi-lcd-set-up-and-programming-in-c-with-wiringpi/
http://raspberrypi.ru/blog/530.html
http://wiringpi.com/download-and-install/
http://mega-avr.ucoz.ru/_fr/0/LCD.pdf
http://www.kosmodrom.com.ua/pdf/WH0802A-TMI-CT.pdf
|