В этом материале мы рассмотрим, как подключить к Raspberry Pi 3 широко распространенные датчик влажности и температуры DHT11 и LCD-дисплей размерности 1602 (шестнадцать символов в строке, две строки) на базе контроллера HD44780. Большинство выпускаемых различными производителями дисплеев не имеют поддержки кириллицы, но для отображения значений температуры и влажности такой недостаток не имеет принципиального значения.
Мы будем использовать дисплей с очень удобным переходником на микросхеме PCF8574T, который позволяет управлять дисплеем по протоколу I2C всего по двум проводам, не считая питания +5В и земли. При обычных способах подключения дисплея к микроконтроллеру требуется 8 или 12 линий. Подключение по I2C существенно экономит вводы-выводы общего назначения (GPIO) Raspberry, которые могут понадобиться для подключения других устройств, и никак не мешает наблюдать относительно медленно меняющиеся параметры.
Датчик DHT11 требует для подключения всего один провод линии данных, также не считая питания и земли. Его следует питать напряжением +3,3В. DHT11 имеет собственный протокол обмена данными 1-Wire.
Разберем пошагово установку программного обеспечения и подключение внешних устройств. Мы использовали операционную систему Raspbian Jessie With Pixel, скачанную с сайта raspberrypi.org и плату Raspberry Pi 3 Model B.
Шаг первый.
Подготовим Raspberry к установке необходимого программного обеспечения. Если у вас свежая версия Raspbian, то, скорее всего, необходимые модули уже установлены. Но, на всякий случай, лучше застраховаться.
Откройте терминал и наберите следующие команды:
sudo apt-get update <Enter>
sudo apt-get upgrade <Enter>
Первая команда синхронизирует и обновит индексные файлы установленных в системе пакетов, вторая – обновит все установленное на данный момент программное обеспечение. Это занимает некоторое время.
Шаг второй.
Разрешим, если это еще не сделано, использование в системе протоколов I2C и 1-Wire. Для этого введем команду
sudo raspi-config
в открывшемся меню с помощью стрелок вверх/вниз и клавиши Enter зайдем в Interfacing Options, последовательно откроем соответствующие пункты меня и разрешим (выбрав “Y” при запросе) использование I2C и 1-Wire. Клавишей Tab установим маркер на <Back>, нажатием на Enter выйдем в меню верхнего уровня, выберем <Finis>, нажмем Enter. Для выхода на предыдущий уровень меню также можно использовать клавишу <Esc>. После выхода в терминал необходимо перезагрузить систему. Это можно сделать, введя команду
sudo reboot
После перезагрузки необходимо изменить файл конфигурации модулей так, чтобы необходимые модули попали в автозагрузку. Для этого необходимо открыть в редакторе nano файл modules:
sudo nano /etc/modules
Добавьте в открывшийся для редактирования файл к имеющимся строкам еще две строки:
i2c-dev
i2c-bcm2708
Если какая-либо из этих строк уже имеется в файле, ее добавлять не надо.
Выйдем из редактора, нажав <Ctrl-X> и ответив “Y” на вопрос о сохранении файла.
Шаг третий.
Теперь необходимо установить библиотеки smbus и I2C для Python. Для этого последовательно введите в терминале команды:
sudo apt-get update (еще раз обновим индексные файлы)
sudo apt-get install –y python-smbus i2c-tools (собственно установка библиотеки)
sudo reboot (перезагрузка)
Проверим, установилась ли библиотека? Наберем в терминале
lsmod | grep i2c <Enter>
Если в появившемся отклике системы есть строка i2c_bcm2708, то это значит, что библиотека установлена успешно.
Шаг четвертый.
Настало время подключить датчики к выводам GPIO Raspberry. Повторим схему разъема GPIO для наглядности. Перед подключением внешних устройств обязательно отключите Raspberry от питания!
Подключим LCD-экран и датчик DHT11 в соответствии со следующей таблицей:
Контакты I2C LCD | Контакты GPIO Raspberry | Описание |
GND | 6 | Земля |
VCC | 2 | +5В |
SDA | 3 | GPIO 2 (I2C1_SDA) |
SCL | 5 | GPIO 3 (I2C1_SCL) |
Контакты DHT11 | Контакты GPIO Raspberry | Описание |
GND | 9 | Земля |
DATA | 8 | GPIO 14 |
VCC | 1 | +3,3 В |
Шаг пятый.
Включим питание Raspberry и проверим, обнаруживает ли операционная система устройство, подключенное по шине I2С? Введем в терминале команду (она входит в установленную на третьем шаге утилиту i2c-tools):
sudo i2cdetect 1
В ответ система выдаст такую информацию:
На пересечении строки, помеченной цифрой 20, и столбца 7 мы видим адрес единственного подключенного устройства – 27 (в системе счисления по основанию 16). Теоретически, адрес может быть и другим. Запомним его, он нам понадобится в дальнейшем. Если на одного адреса не отображается, это означает, что либо устройство не подключено, либо оно подключено неверно, либо необходимое программное обеспечение не установлено.
Шаг шестой.
Все предварительные действия закончены. На этом шаге мы настроим и запустим программу на языке Python, которая отобразит температуру и влажность, полученные с датчика DHT11 на дисплее. Загрузим файлы из файлового хранилища: dht11.py и raspi-dht11-i2clcd.py. Первый из них является драйвером датчика DHT11. Он используется в основной программе, которая находится во втором файле.
Введем в терминале
sudo wget https://masterkit.ru/zip/dht11.py ,
затем
sudo wget https://masterkit.ru/zip/raspi-dht11-i2clcd.py
Команды можно объединить в одну (имена файлов указываются через пробел):
sudo wget https://masterkit.ru/zip/dht11.py https://masterkit.ru/zip/raspi-dht11-i2clcd.py
Файлы будут загружены в рабочий каталог /home/pi.
После загрузки необходимо отредактировать адрес LCD-дисплея на шине I2C, который мы наши пятом шаге, в нашем случае он равен 27. Занесем его в основной файл программы. Откроем файл raspi-dht11-i2clcd.py на редактирование в редакторе nano:
sudo nano /home/pi/ raspi-dht11-i2clcd.py
По умолчанию адрес 27 задан в переменной I2C_ADDR = 0x27. Если адрес на пятом шаге не равен 27, следует подставить его значение.
Сохраняем изменения Ctrl-O, закрываем редактор Ctrl-X.
Изменить файл можно и более привычным (для пользователей Windows) способом в редакторе среды программирования Python двойным кликом на файле основной программы:
Редактируем и сохраняем файл.
Запустить программу можно из терминала, из среды программирования, а также автозагрузкой при включении питания. Последний способ нужен, если мы планируем использовать Raspberry автономно: без подключения мыши, клавиатуры или удаленного управления.
Запуск из терминала:
sudo python raspi-dht11-i2clcd.py
Запуск из редактора среды программирования Python (см.рис 9):
Run->Run Module или F5.
Автозапуск:
Введите в терминале команду, открывающую на редактирование новый файл dht11-lcd.desktop:
sudo nano /etc/xdg/autostart/dht11-lcd.desktop
В открывшемся окне редактора nano введите 8 строк:
[Desktop Entry]
Version=1.0
Encoding=UTF-8
Name=dht11-lcd
Comment=
Exec=sudo python /home/pi/raspi-dht11-i2clcd.py
Terminal=false
Type=Application
и сохраните.
Теперь при включении питания будет автоматически запускаться интерпретатор Python с файлом raspi-dht11-i2clcd.py, что приведет к исполнению нашей программы.