Меню

Как подключить ds18b20 к raspberry

История взаимодействия «чайника» и DS18B20 посредством Raspberry Pi с отправкой данных на narodmon.ru

Доброе время суток, уважаемое хабрасообщество!
Неделю назад я наконец-то дождался свою Малинку. Этот пост о том, как можно набить шишки в такой простой задаче как работа с датчиками температуры.
Кому интересно — добро пожаловать под кат.

Итак, став обладателем Малинового счастья с 512 МБ ОЗУ на борту, заново начал пересматривать множество постов, в том числе на Хабре, про возможные варианты создания «Умного дома». Но поскольку мое образование далеко от IT, решил не делать сразу Алису, а начал с простого — контроля температуры.
Установку системы на Малинку я опущу, эта тема достаточно детально описана тут и тут. Перейду сразу к настройке Малинки для автоматизации контроля температуры с хранением и отображением результатов через веб.
Я ориентировался на связку 1-wire, ds18b20 и rrdtool, как самый простой и доступный вариант.

1. Установка софта
2. Создание необходимых скриптов

#update the database
`/usr/bin/rrdtool update /home/pi/temperature/multirPItemp.rrd N:$temp_readings[0]:$temp_readings[1]`;

sub check_modules
<
$mods = `cat /proc/modules`;
if ($mods =

/w1_therm/)
<
print «w1 modules already loaded \n»;
>
else
<
print «loading w1 modules \n»;
`sudo modprobe w1-gpio`;
`sudo modprobe w1-therm`;
>
>

sub get_device_IDs
<
# The Hex IDs off all detected 1-wire devices on the bus are stored in the file
# «w1_master_slaves»

# open file
open(FILE, «/sys/bus/w1/devices/w1_bus_master1/w1_master_slaves») or die(«Unable to open file»);

# read file into an array
@deviceIDs = ;

# close file
close(FILE);
>

sub read_device
<
#takes one parameter — a device ID
#returns the temperature if we have something like valid conditions
#else we return «9999» for undefined

$readcommand = «cat /sys/bus/w1/devices/».$_[0].»/w1_slave 2>&1″;
$readcommand =

s/\R//g;
$sensor_temp = `$readcommand`;

/t=(\d+)/i;
которая предполагает получение температуры с датчика без учета отрицательных температур. Ввиду отсутствия соответствующих знаний я потратил пол-часа и пару чашек кофе на приведение строки к виду:
$:sensor_temp =

/t=(\D*\d+)/i;
что позволило нормально заносить в БД и отрицательные температуры.

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

После этого я создал скрипт последовательного запуска получения температур с датчиков и генерирования графиков get.sh

что позволяет запускать скрипт автоматически каждые 5 минут.
Это все отображается на простенькой веб-страничке.

2.1. Подключение к narodmon.ru

01-23-45-67-89-AF — МАС-адрес сетевой карты Малинки, 0123456789ABCDEF — серийные номера датчиков температуры.
4. Добавляем в crontab строку для регулярной отправки информации на narodmon.ru (на сайте есть ограничение на частоту приемки информации — не чаще раза в 5 минут, поэтому я сделал отправку каждые 10 минут):

5. Регистрируемся на проекте narodmon.ru и добавляем МАС-адрес Малинки. Теперь статистика ведется и у них 🙂

3. Теперь переходим к железу

Порывшись в закромах кладовки, я обнаружил у себя двухрядный коннектор типа «мама» и телефонный удлинитель. От коннектора я откусил 2х4 и подпаял резистор 4k7 между ножкой 1 и ножкой 7 (на ножке 1 у нас +3В, ножка 6 — земля, ножка 7 — PIN4, который в Малинке позволяет общаться по протоколу 1-wire).

В удлинитель был впаян первый датчик ds18b20, а второй датчик я подпаял напрямую к телефонному кабелю, замотал черной (не синей) изолентой и через бывшее отверстие для кабеля спутниковой антенны вывел за пределы квартиры на улицу.
В собранном виде с учетом размещения Малинки в транспортировочном корпусе получилась следующая картина:

Как оказалось, использование микротройничка — очень удобная штука 🙂
Ну и напоследок — картинка с сайта.

Результат на проекте narodmon.ru.

Читайте также:  Как подключить вай фай на ноуте винда 10
Вместо послесловия

Если вы ожидали увидеть подключение датчиков температуры к чайнику — приношу свои извинения 🙂 «Чайник» в данной статье — это я. Понемногу разбирался с вопросом в меру сил и знаний, заглядывая в Гугл и используя метод проб и ошибок.
Поставленной цели я добился. Буду признателен всем за подсказки по улучшению или правильному подходу к достижению локальных целей. Спасибо за внимание 🙂

З.Ы. Ссылку на страничку с графиками не дам — «ляжет» «Малинка» 😉

Источник

Media UniX

freebsd команды, настройка, установка сервера и не только

Датчик температуры dallas 18B20 на raspberry pi 2

dallas 18b20. Схема подключение к raspberry pi 2

Подключаем датчик при выключенном raspberry pi 2, после чего включаем малинку.
Переходим к настройке.
sudo nano /boot/config.txt
Добавляем в конце строку, которая активирует 1-wire для GPIO4
dtoverlay=w1-gpio,gpiopin=4
Перезапускаем raspberry:
sudo reboot
Подгружаем модули ядра для 1-wire и dallas 18B20:
sudo modprobe w1-gpio
sudo modprobe w1-therm
Чтобы не подгружать их после перезагрузки, нужно в /etc/modules добавить 2-е строки:
w1-gpio
w1-therm

В /sys/bus/w1/devices/ находятся директории с вашими датчиками, начинаются они с «28-»
У меня подключен пока один датчик и поэтому в директории /sys/bus/w1/devices/ есть только:
ls /sys/bus/w1/devices/
28-03155178d4ff w1_bus_master1
где
28-03155178d4ff — это и есть наш датчик температуры dallas 18B20

Узнать, какую температуру он фиксирует, довольно просто, достаточно вывести содержимое файла:
cat /sys/bus/w1/devices/28-03155178d4ff/w1_slave
вместо 28-03155178d4ff конечно подставляйте свой датчик, который у вас определился в raspbian. Каждое устройство будет иметь свой идентификатор.
увидим примерно такую картину:
e0 01 01 01 1f ff 01 01 5e : crc=5e YES
e0 01 01 01 1f ff 01 01 5e t=30000
Смотрим на первую строку. Первый момент: убеждаемся что последняя цифра шестнадцатиричного числа равна crc. В моём примере это 5e=5e. Второй момент — в конце первой строки должно быть написано YES, Если NO, то данные считаны не корректно.
Смотрим на вторую строку и здесь 30000 — это и есть температура, правда умноженная на 1000. Значит чтобы узнать понятное для людей число, надо разделить его на 1000. Получается температура, которую зафиксировал датчик равна 30 градусам Цельсия. Если 30500, то соответственно 30.5 градусов.
Из консольки теперь можно смотреть показания, но я хочу больше.

Читайте также:  Как подключить 1с парк риски

Создаём базу sensor_db
mysql> CREATE DATABASE sensor_db CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Создаём пользователя базы с логином pi и паролем raspberry0 (пароль можете указать свой, raspberry0 используется только ради примера), который будет иметь полные права на базу sensor_db:
mysql> GRANT ALL PRIVILEGES ON sensor_db.* TO pi@localhost IDENTIFIED BY ‘raspberry0’;
mysql> GRANT ALL PRIVILEGES ON sensor_db.* TO ‘pi’@’%’ IDENTIFIED BY ‘raspberry0’;
mysql> FLUSH PRIVILEGES;
mysql> exit;

Смотрим созданное:
mysql> SHOW TABLES;
+———————+
| Tables_in_sensor_db |
+———————+
| sensors001 |
+———————+
1 row in set (0.01 sec)

и ещё смотрим:
mysql> DESCRIBE sensors001;
+————+————-+——+——+———+——-+
| Field | Type | Null | Key | Default | Extra |
+————+————-+——+——+———+——-+
| place | varchar(50) | YES | | NULL | |
| sensdata | varchar(30) | YES | | NULL | |
| modelsens | varchar(30) | YES | | NULL | |
| pcname | varchar(30) | YES | | NULL | |
| datetime | datetime | YES | | NULL | |
| other | varchar(50) | YES | | NULL | |
+————+————-+——+——+———+——-+
6 rows in set (0.01 sec)

Создадим ещё один столбец, который будет автоматически генерироваться и будет PRIMARY KEY:
mysql> ALTER TABLE sensors001 ADD id INT NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (id);
mysql> SET NAMES utf8 COLLATE utf8_unicode_ci;
mysql> DESCRIBE sensors001;
+————+————-+——+——+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+————+————-+——+——+———+—————-+
| id | int(11) | NO | PRI | NULL | auto_increment |
| place | varchar(50) | YES | | NULL | |
| sensdata | varchar(30) | YES | | NULL | |
| modelsens | varchar(30) | YES | | NULL | |
| pcname | varchar(30) | YES | | NULL | |
| datetime | datetime | YES | | NULL | |
| other | varchar(50) | YES | | NULL | |
+————+————-+——+——+———+—————-+
7 rows in set (0.01 sec)

Установим bc:
sudo apt-get install bc

Делаем исполняемым:
sudo chmod +x /script/gpio/sensors001.sh

Теперь выведем эти данные на веб-интерфейс, чтобы смотреть в браузере. Для этого редактируем index.php, расположенный в корне веб-сервера. Файл index.html оттуда надо удалить.
sudo rm /var/www/index.html
sudo nano /var/www/index.php
вписываем туда:

Ещё создаём там же где и index.php файл style.css
sudo nano /var/www/style.css
вписываем туда:

Можно открывать http:// ip-адрес-сайта/index.php и увидим табличку с данными из mysql

Несколько датчиков dallas 18b20. Схема подключение к raspberry pi 2

и в /sys/bus/w1/devices/ у вас будет несколько устройств, начинающихся с «28-»
Радуемся показаниям температуры на веб-интерфейсе.

Добавить комментарий Отменить ответ

Для отправки комментария вам необходимо авторизоваться.

Источник

Работа с Народным Мониторингом на Python с Raspberry Pi

Пытаясь подключить свой датчик температуры DS18B20 к своей умной теплице, я обнаружил, что в интернете нет полной инструкции по подключению этого датчика посредством языка программирования Python. Использую его, так как работаю с платформой Raspberry Pi. Я решил эту проблему устранить. Оказывается работать с TCP не так сложно, но нужно понимать, что и для чего мы делаем. Двухчасовой танец с бубном меня явно выбесил. Так что здесь, помимо самой программной части, я хочу рассказать весь алгоритм от начала до конца. Думаю, что другие датчики работают похоже, поэтому большая статьи будет для всех одинакова. Надеюсь, что если вы захотите подключить свой датчик, Вам уже бубен не понадобится:) И так, давайте приступим, прошу Вас под Хаброкат.

Читайте также:  Как подключить все включено vip

Шаманство с датчиком

Для нам нужно подключить сам датчик. Я буду работать с датчиком температуры DS18B20. Статей на эту тему полно, не будем их дублировать. Про подключение можно почитать здесь. Затем нам нужно получить данные с датчика. Мы сделаем так же, как указано в статье выше. Там есть замечательный пример на Python, фанатом которого я являюсь.

Не забываем заменить данные на свой датчик.

Как мы можем заметить, значение температуры принимает переменная temperature (кто бы мог подумать), что и понадобится нам дальше.

Колдуем с мониторингом

Ну во первых нужно зарегистрироваться narodmon.ru, тем, кто ещё это не сделал. API сервиса предлагает нам передавать данные по протоколу TCP. Так и поступим. Нас просят передать текст следующего формата:

Но по факту нам нужно передать всего три параметра: MAC устройства, имя датчика и его значение. Остальное не обязательно, и не очень нам нужно.

В первой строке нам нужно передать решётку, MAC и символ перевода строки \n.
Во второй и последующих строках мы опять передаём решётку, имя датчика, опять решётка и показания датчика. Завершаем это символом перевода строки \n.
В последней строке надо передать две решётки, для завершения пакета.

В итоге формат остаётся таким:

Пишем программу на Python

Программу мы будем писать на Python 2. Алгоритм будет такой. Получаем данные с датчика и записываем в переменную temperature. Затем мы формируем пакет и отправляем его на сервер Народного Мониторинга. Запускать скрипт будем каждые 10 минут (минимальный разрешённый интервал отправки показаний 5 минут) через cron.

Отправка происходит так (пример приведённый на сайте мониторинга):

Подключаемся мы к серверу narodmon.ru:8283

В итоге у нас получается вот такой скрипт:

Вот так выглядит отправка данных с двух датчиков. Если дать датчику название, начинающееся на T, то сервер сам определит, что это датчик температуры.

Ждём пока скрипт запустится.

Теперь идём сюда narodmon.ru/ip и смотрим передались ли данные. Если всё в порядке, то нажимаем на главной странице в меню кнопку «Добавить устройство» и указываем MAC. Теперь мы можем всё настроить по вкусу (название, тип, местоположение и т.д.). Сделать датчик публичным можно через сутки после начала передачи показаний.

На этом всё. Желаю Вам удачи в подключение датчиков. Делайте это чаще, ведь так удобно из дома заранее посмотреть температуру в том месте, куда ты собираешься.

Источник

Adblock
detector