Подключение датчиков к Raspberry Pi 3 на конкретном примере
Одна из ключевых возможностей Raspberry Pi любой версии – это способность взаимодействовать с различными датчиками. Это обусловлено тем, что у данного одноплатника имеется собственный GPIO.
2682
Тэги
Одна из ключевых возможностей Raspberry Pi любой версии – это способность взаимодействовать с различными датчиками. Это обусловлено тем, что у данного одноплатника имеется собственный GPIO (хотя при желании можно подключить и дополнительный).
Рассматривать подключение датчиков к Raspberry Pi 3 довольно тяжело, так как соответствующих модулей существуют десятки. Также для взаимодействия с ними требуется код. Найти его, в свою очередь, можно на GitHub, GitLab и в прочих хранилищах. А при желании его можно написать самостоятельно, изучив официальную документацию и располагая базовыми знаниями Python.
Ниже будет рассмотрен процесс подключения датчика на конкретном примере. Наиболее часто из Raspberry Pi 3 делают метеостанции. Поэтому для рассмотрения можно взять датчик ds18b20, который фиксирует температуру.
Подключение датчика ds18b20 к RPi3
Сразу следует отметить, что ds18b20 подключается к Raspberry Pi 3 точно так же, как и к другим моделям “Малины”. Поэтому ниженаписанное можно использовать в том числе для настройки датчика и на других версиях платформы.
Первое, что потребуется – это присоединить датчик температуры к GPIO Raspberry Pi 3. Его нужно установить так:
- напряжение – 3,3 Вольта;
- заземление;
- порт GPIO4.
После того, как физическое подключение датчика температуры к Raspberry Pi 3 было выполнено, можно поставить необходимые модули ядра. Их всего 2. Из-под sudo (для этого можно указать в консоли команду sudo -i и ввести пароль) требуется выполнить пару команд: modprobe w1-grio и modprobe w1-therm.
Первый модуль нужен, чтобы на порту GPIO4 активировался протокол 1-wire. Второй же необходим, чтобы система могла непосредственно считывать температурные показатели с соответствующей шины.
Здесь есть очень важный момент. После перезагрузки модули снова будут неактивны, поэтому их придется опять загружать. Но исправить это очень легко. Нужно всего лишь вписать их названия в файл /etc/modules. Для этого из-под sudo следует набрать команду nano /etc/modules и добавить в конец файла w1-gpio и w1-therm (каждый с новой строки), а затем сохранить изменения.
Все, теперь можно проверять работоспособность датчика и, если все нормально, писать код для работы с ним или использовать готовое решение.
Как проверить работоспособность датчика ds18b20 на RPi3?
На Raspberry Pi 3 датчики пишут данные в файлы. Конкретно ds18b20 записывает их каталог со своим серийным номером, который, в свою очередь, располагается в директории /sys/bus/w1/devices. Он появляется после подключения, но может не сразу, а спустя несколько секунд.
Название соответствующего каталога примерно такое: 00-000000000a0b. Поэтому после подключения зайдите и проверьте, есть ли там что-то похожее. Следует отметить, что если подключены несколько датчиков, то придется узнавать серийный номер каждого из них опытным путем. Это возможно сделать, например, прогревом и снятием показателей или поочередным подключением.
Но предположим, что датчик всего 1. Чтобы проверить его работоспособность нужно в консоли вписать следующую команду: cat СЕРИЙНЫЙ_НОМЕР/w1_slave. После нажатия на Enter выведется сообщение.
В первой строке будет присутствовать контрольная сумма в шестнадцатеричной системе счисления и CRC. Если значение crc равно последнему числу, то выводится YES, а если нет – NO. В первом случае датчик сообщает, что он правильно определил температуру, а во втором – нет.
Вторая строка – это как раз данные температуры. То, что указывается в шестнадцатеричной системе полностью соответствует значению выше. То, что левее – это его перевод в десятичную форму.
Интересно то, что значение t (температура) указывается в 1000 раз больше, чем есть на самом деле. Поэтому если после знака “=” указывается, например, 26398, это означает 26,3 градуса Цельсия.
Данный факт следует учитывать при написании кода.
Как возможно убедиться, заставить работать датчик температуры на RPi3 очень просто. Примерно так же выполняется подключение к Raspberry Pi 3 и dht11, dht22, ds3231 и многих прочих.
Источник: https://myraspberry.ru/podklyuchenie-datchikov-k-raspberry-pi-3-na-konkretnom-primere.html
Raspberry Pi и OneWire датчики
6 сентября 2015, 14:44
Рассмотрим пример подключения OneWire датчиков к Raspberry Pi на примере датчика температуры DS18B20. Применение этого датчика будет использоваться в следующих статьях. Для подключения нам понадобиться: плата Raspberry Pi, датчик температуры DS18B20, сопротивление от 4.7 кОм до 10 кОм, макетная плата и немного проводов.
Необходимо собрать схему, как показано на изображении выше, после чего можно включать питание.
Подключаемся к плате по SSH, и первым делом необходимо добавить поддержку OneWire в config.txt.
Открываем файл в текстовом редакторе nano:
sudo nano /boot/config.txt
И добавляем в конец файла следующую строчку:
dtoverlay=w1-gpio
Сохраняем изменения в файле и перезагружаем плату sudo reboot.
После перезагрузки приступим к проверке работоспособности датчика, для этого добавим модули w1-gpio и w1-therm в ядро следующими командами:
sudo modprobe w1-gpio sudo modprobe w1-therm
Перейдем в каталог с устройствами OneWire и посмотрим доступные устройства
cd /sys/bus/w1/devices ls
Должны увидеть следующие каталоги
pi@raspberrypi /sys/bus/w1/devices $ ls 10-0008019c26d2 w1_bus_master1
Каталог 10-0008019c26d2 и есть уникальный номер датчика DS18B20.
Перейдем в этот каталог
cd 10-0008019c26d2
И выведем содержимое файла w1_slave на экран
cat w1_slave
На экране должны появиться следующие 2 строчки:
pi@raspberrypi /sys/bus/w1/devices/10-0008019c26d2 $ cat w1_slave 2b 00 4b 46 ff ff 02 10 8a : crc=8a YES 2b 00 4b 46 ff ff 02 10 8a t=21625
Если в конце первой строчки будет YES, то в конце второй строчки будет температура в градусах Цельсия умноженная на 1000. В моем случае это 21.652 ℃.
Использование
Для удобства просмотра и дальнейшей обработки температуры удобно использовать скрипт на Python.
Создадим файл temperature.py:
nano temperature.py
И добавим в него следующее содержимое:
import os import glob import time os.system('modprobe w1-gpio') os.system('modprobe w1-therm') base_dir = '/sys/bus/w1/devices/' device_folder = glob.glob(base_dir + '10*')[0] device_file = device_folder + '/w1_slave' def read_temp_raw(): f = open(device_file, 'r') lines = f.readlines() f.close() return lines def read_temp(): lines = read_temp_raw() while lines[0].strip()[-3:] != 'YES': time.sleep(0.2) lines = read_temp_raw() equals_pos = lines[1].find('t=') if equals_pos != -1: temp_string = lines[1][equals_pos+2:] temp_c = float(temp_string) / 1000.0 temp_f = temp_c * 9.0 / 5.0 + 32.0 return temp_c, temp_f while True: print(read_temp()) time.sleep(1)
Сохраним перед выходом и запусти командой:
sudo python temperature.py
На экране каждую секунду будет обновляться значение температуры, в первом столбце в градусах Цельсия, во втором в градусах Фаренгейта.
pi@raspberrypi ~ $ sudo python temperature.py (21.5, 70.7) (21.562, 70.8116) (21.625, 70.925) (22.687, 72.8366) (23.937, 75.0866)
Источник: https://kropochev.com/?go=all/raspberry-pi-and-onewire-sensor/
Вывод температуры и влажности с датчика DHT11 на LCD дисплей с помощью Arduino
Приветствуем читателей нашего урока по программированию на Arduino. В данной статье мы разберем подключение и программирование уникального соединения сразу нескольких элементов, и у нас получится интересный проект.
Для осуществления нашего проекта требуется база знаний. На прошлых уроках мы смотрели подключение LCD экрана к “Ардуино” и подключение датчика влажности и температуры DHT11 к “Arduino”.
С помощью этих базовых знаний мы без труда совместим наши знания и получим крутой гибрид. Вам это понравится!
Взглянем на схему подключения нашего соединения.
Схема подключения LCD экрана и датчика влажности и температуры DHT11 к Arduino
Вам представлена схема подключения нашего проекта. Как вы видите нам нужно не мало компонентов для этого соединения, а чтобы приступить к сборке нам нужно их подготовить.
Необходимые компоненты для подключения нашего проекта
- Любая Arduino(в нашем случае прототип Arduino UNO)
- LCD-дисплей на базе HD44780
- Breadboard(макетная плата)
- Соединительные провода
- Датчик DHT11 в любой модернизации (мы используем модернизированный датчик)
- Резистор на 10 кОм (для датчика с четырьмя ножками вывода)
- Ваша внимательность и терпение =)
После того, как вы собрали необходимые комплектующие приступим к подключению.
Подключение LCD экрана и датчика влажности и температуры DHT11 к Arduino
Ну что, пришло время приступить к подключению. Советую делать это внимательно и никуда не торопиться, ведь кто поспешит тот людей насмешит, помните об этом.
После подключения у вас должно получиться примерно такая картинка.
Правильность подключения мы сможем проверить только после программирования нашего микроконтроллера “Ардуино”
Программирование нашего соединения на Arduino
Для того, чтобы микроконтроллер понял наши действия нам необходимо скачать и установить необходимые библиотеки.
Скачать библиотеку для датчика DHT11 можно здесь , а библиотеку для LCD дисплея можно здесь .
После того, как мы скачали нужную библиотеку, ее нужно правильно установить. скачанные файлы нужно переместить по следующему пути :
Диск CProgtam FilesArduinoLibraries
Ну что, время пришло познать код программы. Напомню, что подробные объяснения к подключению датчика влажности и температуры и lcd экрана можно посмотреть в предыдущих уроках.
#define DHTPIN 10
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
#include “DHT.h”
#include
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() {
lcd.begin (16,2);
dht.begin( );
} void loop() {
int h = dht.
readHumidity();
int t = dht.readTemperature(); lcd. setCursor(0, 0);
lcd. print(“Temp: “);
lcd. print(t);
lcd. print(“C”); lcd. setCursor(0,1);
lcd. print(“Humidity: “);
lcd. print(h);;
lcd.
print(“%”); delay (200);
}
Пояснение
Перейдем к объяснению нашего кода, ведь нужно уметь понимать то, что ты делаешь! Первые строки у нас в коде такие:
#define DHTPIN 10
#define DHTTYPE DHT11
#define это удобная директива, которая позволяет дать имя константе перед тем как программа будет скомпилирована.
Синтаксис: #define constantName value
Внимание! Символ # перед словом define обязателен.
Следующая строчка :
DHT dht(DHTPIN, DHTTYPE);
В этой строчке мы создаем и обозначаем объект “dht”
Затем в нашем коде пишутся такие строчки :
#include “DHT.h”
#include
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
Здесь мы подключаем библиотеку для датчика влажности и температуры и lcd исплея. Также для lcd дисплея обозначаем порты подключения
Следующим в нашем коде идет цикл, который выполняется лишь один раз.
void setup() {
lcd.begin (16,2);
dht.begin( );
}
В этом цикле мы указываем, что на дисплее будет “16” столбцов и “2” строчки. Также в этом цикле мы заставляем датчик DHT11 работать.
Перейдем к еще одному циклу в нашем скетче. Это уже цикл, который будет повторяться до тех пор, пока вы не отключите питание установки.
void loop() {
int h = dht.readHumidity();
int t = dht.readTemperature(); lcd. setCursor(0, 0);
lcd. print(“Temp: “);
lcd. print(t);
lcd. print(“C”); lcd. setCursor(0,1);
lcd. print(“Humidity: “);
lcd. print(h);;
lcd.
print(“%”); delay (200);
}
В строчках “int h = dht.readHumidity();” и “int t = dht.readTemperature();” мы вводим переменные “h” и “t” , в которые будет считываться значение с датчика DHT11. Это нам понадобится для дальнейших действий.
Далее строчкой “lcd. setCursor(0, 0);” мы ставим курсор нашей программы в ПЕРВУЮ строчку дисплея и в ПЕРВЫЙ столбик. Будте внимательны, счет ведется с нуля, тоесть значение “0” в коде – это первая строчка или группа .
Рассмотрим следующие 3 строчки:
lcd. print(“Temp: “);
lcd. print(t);
lcd. print(“C”);
В строчках lcd. print(“Temp: “); , lcd. print(t); и lcd. print(“C”); мы указываем то, что будет написанно на самом LCD дисплее. Хотелось бы обратить внимание на то, что мы указали переменную “t”, которая отвечает за информацию, выданную с датчика DHT11.
В следующих строчках все аналогично.
setCursor(0,1);
lcd. print(“Humidity: “);
lcd. print(h);;
lcd. print(“%”);
Обратите внимание что в строчке “setCursor(0,1);” мы указываем курсор программы на экране в ПЕРВЫЙ столбик, но во ВТОРУЮ строчку.
Ну а завершающей строкой нашего кода является:
Смысл этой строки очень прост, мы даем программе время “передохнуть”. Delay это время, которое программа будет бездействовать, ждать, ничего не делая. В нашем скетче мы указали 200 мс (значение всегда задается в “мс”)
Ну что, мы справились! В конце у нас должно получиться вот так!
Ну вот и все, мы вывели температуру и влажность с датчика dht11 на lcd экран с помощью Arduino ! Согласитесь, это не сложно, но очень интересно и необычно. Если вам понравилось , как мы вам объяснили и показали подключение и программирование этого соединения,то делитесь с друзьями этой статьей.
Источник: http://helpduino.ru/podklychenie_lcd_and_dht11.html
Raspberry Pi – DS18B20
Подключение цифрового датчика температуры DS18B20 к Raspberry Pi выполняется по следующей схеме:
DS18B20 – это цифровой датчик температуры, который работает по однопроводному интерфейсу 1-Wire. Он измеряет температуру в пределах -10 .. + 85 градусов по шкале Цельсия.
Как видно из схемы для его использования нам потребуется сам датчик DS18B20 и резистор 4,7 кОм.
Вы можете подключить несколько датчиков как указано на следующей схеме:
Если использовать провода, длиннее трех метров, могут возникнуть проблемы со считыванием. В этом случае рекомендуется использовать экранированные провода.
После подключения датчика выполняем следующие команды:
sudo modprobe w1-gpio && sudo modprobe w1_therm
ls -l /sys/bus/w1/devices/
Должны увидеть что-то похожее на следующее:
total 0
total 0
lrwxrwxrwx 1 root root 0 Nov 29 10:49 28-000000d7970b -> ../../../devices/w1_bus_master1/28-000000d7970b
lrwxrwxrwx 1 root root 0 Nov 29 10:49 w1_bus_master1 -> ../../../devices/w1_bus_master1
Если подобного результата нет, а датчик подключен правильно, редактируем файл /boot/config.txt:
sudo nano /boot/config.txt
добавляем строку
dtoverlay=w1-gpio
сохраняем файл и перезагружаем Raspberry командой reboot.
Каждый датчик имеет уникальный номер. Находим ID датчика. В моем случае 28-000000d7970b.
Далее выполняем команду (Вы должны заменить значение 28-000000d7970b на ID своего датчика):
cat /sys/bus/w1/devices/28-000000d7970b/w1_slave
Видим информацию, которую выдает датчик:
7c 01 4b 46 7f ff 04 10 09 : crc=09 YES
7c 01 4b 46 7f ff 04 10 09 t=23750
Среди этой информации есть следующий фрагмент: t = 23750. Это температура по шкале Цельсия, умноженная на 1000. То есть, температура 23750/1000 = 23,750 oC. Не надо обманываться относительно трех знаков после запятой. Абсолютная точность датчика всего 0,5 oC.
Программно получить значение температуры можно следующим образом:
Bash:
cat /sys/bus/w1/devices/28-000000d7970b/w1_slave | sed -n 's/^.*(t=[^ ]*).*/1/p' | sed 's/t=//' | awk '{x=$1}END{print(x/1000)}'
Python:
tfile=open(“/sys/bus/w1/devices/28-000000d7970b/w1_slave”)
ttext=tfile.read()
tfile.close()
temp=ttext.split(”
“)[1].split(” “)[9]
temperature=float(temp[2:])/1000
print temperature
Успехов.
Смотри также:
Brushless Motors
ESP8266
STM32
Raspberry Pi
Источник: http://www.avislab.com/blog/raspberry-pi-ds18b20_ru/
Raspberry Pi и датчик температуры ds18b20
Dallas Semiconductors, теперь часть Maxim Integrated, имеет некоторые очень хорошие чипы-термометры в их серии DS1820. Уникальное свойство этих термометров заключается в том, что они могут быть соединены единым цифровым интерфейсом по одной проводной шине данных (1-Wire). Вы даже можете разместить несколько датчиков (не только термометры) на одном и том же проводе, если пожелаете.
Подключение одного или нескольких цифровых датчиков температуры ds18b20 до Raspberry Pi осуществляется через резистор 4.7 кОм (рисунок 1).
Рисунок 1 – Схема подключения датчиков ds18b20 к Raspberry Pi
Использование 1-Wire термометров реализовано на Paspbery Pi очень просто. Все, что вам нужно это загрузить два специальные модули ядра и все, можно читать температуру. Модули загружаются набором в командной строке следующих команд:
sudo modprobe w1-gpio
sudo modprobe w1-therm
Первая строка активирует протокол модуля 1-wire на GPIO4. Вторая строка загружает модуль, который, собственно, читает температуру с 1-wire шины. Для того, чтобы модули автоматически загружались после перезагрузки или выключения Raspberry Pi, две вышеприведенные строки нужно добавить в файл /etc/modules. Делается это так:
sudo nano /etc/modules
И добавляем в конец файла (если их там нет) две строчки:
w1-gpio
w1-therm
Таким образом вопрос чтения текущей температуры сводится к чтению специального файла. Этот файл расположен в каталоге /sys/bus/w1/devices. Этот каталог содержит один или несколько подкаталогов. Один, который всегда присутствует, называется w1_bus_master1. Но нас он не интересует.
Нас интересуют каталоги вида 28-000800575c8b. Для каждого подключенного по 1-wire датчика температуры создается свой такой каталог. Может потребоваться несколько секунд для их появления. Название каждого каталога – это уникальный серийный номер датчика ds18b20.
Если вы подключили более одного датчика по шине, вам придется выяснить какой каталог с серийным номером какому датчику принадлежит. Сделать это можно путем прогревания одного датчика, считывания температуры со всех датчиков и проверки температура которого именно меняется.
Или можно подключать датчики поочередно и записывать, какой каталог какому датчику отвечает.
Считать температурные показания датчика можно так (замените серийный номер на номер вашего датчика):
cat 28-000800575c8b/w1_slave
В результате вы увидите нечто вроде этого:
30 00 4b 46 ff ff 0f 10 b8 : crc=b8 YES
30 00 4b 46 ff ff 0f 10 b8 t=23812
Шестнадцатеричные числа воспроизводят байтовую информацию, которую датчик вернул вашему Raspberry Pi. Первая строка проверяет, корректность контрольной суммы CRC (последний байт ответа должен быть таким же как исчисленная CRC). Если все правильно выводится “YES”, если нет – выводится “NO”.
Если ответ “NO”, необходимо снова считать данные с датчика, ибо данная температура не корректна. Вторая строчка содержит считанную температуру в градусах Цельсия, умноженную на 1000, поэтому необходимо разделить ее на 1000, чтобы сделать читабельной для человека.
Ниже приведен пример скрипта для считывания и воспроизведения всех датчиков на шине.
Источник: http://academicfox.com/raspberry-pi-ds18b20-2/
Raspberry Pi 3 – подключаем датчик DHT11 и LCD-дисплей
В этом материале мы рассмотрим, как подключить к 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<\p>
sudo apt-get upgrade<\p>
Первая команда синхронизирует и обновит индексные файлы установленных в системе пакетов, вторая – обновит все установленное на данный момент программное обеспечение. Это занимает некоторое время.
Шаг второй.
Разрешим, если это еще не сделано, использование в системе протоколов I2C и 1-Wire. Для этого введем команду
sudo raspi-config
в открывшемся меню с помощью стрелок вверх/вниз и клавиши Enter зайдем в Interfacing Options, последовательно откроем соответствующие пункты меня и разрешим (выбрав “Y” при запросе) использование I2C и 1-Wire.
Клавишей Tab установим маркер на , нажатием на Enter выйдем в меню верхнего уровня, выберем , нажмем Enter. Для выхода на предыдущий уровень меню также можно использовать клавишу . После выхода в терминал необходимо перезагрузить систему.
Это можно сделать, введя команду
sudo reboot
После перезагрузки необходимо изменить файл конфигурации модулей так, чтобы необходимые модули попали в автозагрузку. Для этого необходимо открыть в редакторе nano файл modules:
sudo nano /etc/modules
Добавьте в открывшийся для редактирования файл к имеющимся строкам еще две строки:
i2c-dev
i2c-bcm2708
Если какая-либо из этих строк уже имеется в файле, ее добавлять не надо.
Выйдем из редактора, нажав и ответив “Y” на вопрос о сохранении файла.
Шаг третий.
Теперь необходимо установить библиотеки smbus и I2C для Python. Для этого последовательно введите в терминале команды:
sudo apt-get update (еще раз обновим индексные файлы)
sudo apt-get install –y python-smbus i2c-tools (собственно установка библиотеки)
sudo reboot (перезагрузка)
Проверим, установилась ли библиотека? Наберем в терминале
lsmod | grep i2c<\p>
Если в появившемся отклике системы есть строка 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, что приведет к исполнению нашей программы.
Источник: https://masterkit.ru/blog/articles/raspberry-pi-3-podklyuchaem-datchik-dht11-i-lcd-displej
Построение контроллеров на Raspberry Pi #5: отображение сообщений на LCD дисплее
Светодиоды используются в качестве прямой замены ламп накаливания из-за таких преимуществ, как меньшая теплоотдача и более долгий срок службы. Помимо использования в качестве источников света, светодиоды достаточно гибки, чтобы использовать их в бегущей строке для отображения сообщений.
Буквы и цифры могут быть легко созданы с помощью семисегментных светодиодных дисплеев, используя простую схему соединений, полученную из технического описания на конкретный оптоэлектронный компонент.
Для создания сообщений, состоящих из нескольких букв с помощью буквенно-цифровых символов (сочетания цифр и букв), требуется методика управления каждой семисегментной светодиодной цифрой через схему электронного драйвера.
Этот метод управления каждой семисегментной светодиодной цифрой через схему электронного драйвера называется мультиплексированием. Хотя семисегментные светодиодные дисплеи и отличаются энергоэффективностью и простотой использования, основная проблема оптоэлектронных компонентов – это размытие изображения при ярком солнечном свете.
Жидкокристаллический дисплей (LCD) был разработан с целью удаления тепловыделения и размытия изображения. Кроме того, LCD дисплеи позволяют выводить множество символов и сложную графику. В данном проекте мы рассмотрим использование LCD с помощью Raspberry Pi.
Raspberry Pi позволит отображать на LCD дисплее простые текстовые сообщения с помощью языка программирования Python. Мы будем использовать библиотеку Adafruit_Python_CharLCD для экспериментов с RPi LCD контроллером для отображения простых текстовых сообщений. Блок-схема нашего RPi LCD контроллера показана на рисунке 1.
Кроме того, ниже приведен также список компонентов RPi LCD контроллера.
Рисунок 1 – Компоненты, необходимые для создания RPi LCD контроллера
Перечень компонентов
Основное об LCD
Прежде, чем мы начнем практическую работу с LCD дисплеями, давайте узнаем, как они работают. LCD дисплеи традиционно используются для отображения данных, графики или того и другого на стеклянной пластине.
Типовые LCD дисплеи состоят из контроллера и материала стеклянной подложки.
Сегменты LCD дисплея, установленные на материале стеклянной подложки, управляются электронным контроллером, который состоит из микропроцессора или микроконтроллера.
Типовая блок-схема LCD дисплея с контроллером показана на рисунке 2.
Рисунок 2 – Блок-схема типового LCD дисплея
Кристаллические сегменты LCD дисплея расположены между стеклянными пластинами с электродами. Для того чтобы кристаллические сегменты начали отображать буквы или символы, необходимо небольшое переменное напряжение. Переменное напряжение включает кристаллические сегменты.
Электронным устройством, ответственным за управление этим электрическим напряжением для кристаллических сегментов, является контроллер LCD. Для обеспечения правильных длительностей времени включения и выключения кристаллических сегментов внутри LCD контроллера используется микропроцессор или микроконтроллер.
Типовыми LCD контроллерами, используемыми для управления кристаллическими сегментами, являются HD44780 и KS0066. LCD дисплеи поставляются с различным количеством строк и столбцов, например, 8×1, 16×1, 20×2 и 20×4. В данном проекте мы будем использовать стандартный LCD дисплей 16×2.
Типовой LCD дисплей и его контроллер, обозначенный как U2, показан на рисунке ниже.
Рисунок 3 – Обратная сторона типового LCD дисплея. На плате показан LCD контроллер, обозначенный как “U2”.
Теперь, когда мы рассмотрели основные понятия об LCD дисплеях, можно начать сборку RPi LCD контроллера.
Сборка RPi LCD контроллера
Как и предыдущие проекты на Raspberry Pi в данной серии, мы соберем LCD контроллер, используя лишь несколько электронных компонентов.
Беспаечная макетная плата является незаменимым инструментом прототипирования при создании электронных проектов, она так же будет использоваться и при соединении компонентов RPi LCD контроллера.
Кроме того, мы подключим к LCD дисплею потенциометр (10 или 100 кОм) для регулировки контрастности дисплея. Ниже приведены схема соединений компонентов и две принципиальные схемы.
Рисунок 4 – Схема соединений компонентов LCD контроллера
Эквивалентная принципиальная схема из Fritzing для LCD контроллера показана ниже.
Рисунок 5 – Принципиальная схема LCD контроллера во Fritzing
Поскольку принципиальная схема во Fritzing слегка трудночитаема, ниже приведена нормальная принципиальная схема LCD контроллера.
Рисунок 6 – Принципиальная схема RPi LCD контроллера
Перед тем, как перейти к тестированию RPi LCD контроллера, проверьте соединения на наличие ошибок. Если ошибок нет, вы готовы протестировать управление контрастностью LCD дисплея перед загрузкой библиотеки Adafruit_Python_CharLCD на Raspberry Pi.
Рисунок 7 – Собранный макет LCD контроллера на Raspberry Pi
Тестирование правильности сборки LCD контроллера на Raspberry Pi
Теперь, когда LCD контроллер на Raspberry Pi полностью собран на макетной плате, вы готовы провести электрическое испытание устройства. Для проверки правильности сборки LCD контроллера необходимо просто подать питание на Raspberry Pi и подстроить контрастность LCD дисплея с помощью потенциометра.
Вы можете увидеть ряд прямоугольных блоков, их видимость зависит от положения потенциометра. На рисунке 7 ниже приведена фотография моего RPi LCD контроллера. Если прямоугольников не видно, подстройте контрастность дисплея с помощью потенциометра.
Поздравляю, вы успешно собрали свой LCD контроллер на Raspberry Pi! Заключительным этапом данного проекта является добавление библиотеки Adafruit_Python_CharLCD в Raspberry Pi для отображения сообщения.
Рисунок 8 – Тестирование правильности сборки RPi LCD контроллера
Добавление библиотеки Adafruit_Python_CharLCD
Нам остается сделать еще один шаг для получения полностью рабочего LCD контроллера. Всё, что остается, это добавить библиотеку Adafruit_Python_CharLCD на Raspberry Pi для отображения сообщений на дисплее.
Библиотека Adafruit_Python_CharLCD входит в пакет примеров программного обеспечения для Raspberry Pi от Adafruit. HD44780 представляет собой электронный контроллер, обычно используемый в LCD дисплеях. Пакет примеров Adafruit содержит библиотеку для управления данным LCD контроллером.
Библиотеку Adafruit_Python_CharLCD можно получить из репозитория Github.
Перед установкой необходимо проверить наличие следующих зависимостей:
sudo apt-get update sudo apt-get install build-essential python-dev python-smbus python-pip
Затем необходимо убедиться, что установлена библиотека RPi.GPIO, с помощью команды:
sudo pip install RPi.GPIO
Теперь необходимо скачать библиотеку Adafruit_Python_CharLCD, распаковать архив, перейти в каталог распакованного архива и установить библиотеку, выполнив команду:
sudo python setup.py install
Код программы
Обратите внимание на конфигурацию выводов Raspberry Pi, подключенных к LCD дисплею. Кроме того, библиотека Adafruit_Python_CharLCD позволяет управлять подсветкой LCD дисплея (в собранном нами проекте подсветка не используется).
#!/usr/bin/python import time import Adafruit_CharLCD as LCD # Конфигурация выводов Raspberry Pi: lcd_rs = 25 lcd_en = 24 lcd_d4 = 23 lcd_d5 = 17 lcd_d6 = 21 lcd_d7 = 22 lcd_backlight = 4 # Определяем размеры LCD дисплея в строках и столбцах для LCD дисплея 16×2. lcd_columns = 16 lcd_rows = 2 # Пример указания LCD дисплея 20×4. # lcd_columns = 20 # lcd_rows = 4 # Инициализация LCD, используя выводы, определенные выше. lcd = LCD.Adafruit_CharLCD(lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7, lcd_columns, lcd_rows, lcd_backlight) # Напечатать двухстрочное сообщение lcd.message('Hello
world!') # Ждать 5 секунд time.sleep(5.0) # Демонстрация, показывающая курсор. lcd.clear() lcd.show_cursor(True) lcd.message('Show cursor') time.sleep(5.0) # Демонстрация, показывающая мигание курсора. lcd.clear() lcd.blink(True) lcd.message('Blink cursor') time.sleep(5.0) # Остановить мигание и отображение курсора. lcd.show_cursor(False) lcd.blink(False) # Демонстрация прокрутки сообщения вправо/влево. lcd.clear() message = 'Scroll' lcd.message(message) for i in range(lcd_columns-len(message)): time.sleep(0.5) lcd.move_right() for i in range(lcd_columns-len(message)): time.sleep(0.5) lcd.move_left() # Демонстрация включения/выключения подсветки. lcd.clear() lcd.message('Flash backlight
in 5 seconds…') time.sleep(5.0) # Выключить подсветку. lcd.set_backlight(0) time.sleep(2.0) # Изменить сообщение. lcd.clear() lcd.message('Goodbye!') # Включить подсветку. lcd.set_backlight(1)Рисунок 9 – LCD контроллер на Raspberry Pi
Вот и всё! Надеюсь, статья оказалась полезной. Оставляйте комментарии!
Символьный LCD дисплей 16×2 HD44780
Символьный (буквенно-цифровой) LCD дисплей. 2 строки по 16 символов. Построен на базе контроллера HD44780. По умолчанию поддерживается в Arduino IDE с помощью библиотеки LiquidCrystal.
Raspberry Pi 3 Model B
Raspberry Pi 3 – это третье поколение Raspberry Pi. Данный компьютер является заменой Raspberry Pi 2 Model B.
Источник: https://radioprog.ru/post/149
Подключаем датчик температуры DS18B20
Датчик DALLAS 18B20
Для измерения температуры можно использовать датчик DS18B20, который измеряет температуру от -55°C до +125°C.
Данный датчик работает по протоколу 1Wire, который позволяет добавить подобных устройств на одной шине более 16 миллионов. Расстояние до датчика может достигать 300 метров при соблюдении ряда условий.
В частности: использование специального кабеля IEEE1394, использование спецдрайвера, использование топологии “общая шина” и др.
Для подключения нам потребуется:
- Макетная плата
- Датчик температуры DS18B20
- Соединительные провод
- Резистор на 4.7кОм
Схема подключения датчика DS18B20
Включаем Raspberry Pi, открываем терминал.
Редактируем config.txt. В данном конфиг-файле можно редактировать множество параметров – от разрешения экрана до добавления лицензионных ключей для воспроизведения MPEG-2/VС-1
- sudo nano /boot/config.txt
И добавляем строку для включения при загрузке системы протокола 1Wire для 4 пина GPIO в конец файла
- dtoverlay=w1-gpio,gpiopin=4
Сохраняем CTRL+O, CTRL+X и перезагружаем малину
Загружаем модули. Данные модули предназначены для расширения возможностей ядра Linux. Так как протокол 1Wire по умолчанию не включен в ядре, необходимо загрузить дополнительные модули w1-gpio(модуль поддержки 1Wire протокола через GPIO порты) и w1-therm(модуль поддержки датчиков температуры DS18B20 и его совместимые) вручную.
Для каждого датчика создается собственный каталог, например 28-0000011aa1a1
Переходим в каталог датчика и считываем с него температуру
- cd /sys/bus/w1/devices/28*
Вывод будет примерно таким:
9a 01 4b 46 7f ff 06 10 78 : crc=78 YES
9a 01 4b 46 7f ff 06 10 78 t=25625
crc=78 YES показывает, что температура правильно считана, если будет выводить ответ = NO – необходимо заново считать температуру – cat w1_slave
t=25625 и есть температура, измеряемая датчиком, умноженная на 1000. То есть 25625 = 25.6 градуса по Цельсию.
Для удобства можно использовать скрипт на Python, который вы найдёте в архиве. Для этого нам нужно скачать архив.
Скачиваем
- wget http://wiki.malinapi.com/lib/exe/fetch.php/temp.tar
Распаковываем архив
При вводе команды ls мы увидим файл: temp.py
Для запуска скрипта, достаточно выполнить
Вывод температуры будет осуществляться в реальном времени!
Источник: https://ur7hbq.blogspot.com/2015/06/ds18b20.html