Оглавление:

RuuviTag и PiZero W и Blinkt! Термометр на основе маяка Bluetooth: 3 шага (с изображениями)
RuuviTag и PiZero W и Blinkt! Термометр на основе маяка Bluetooth: 3 шага (с изображениями)

Видео: RuuviTag и PiZero W и Blinkt! Термометр на основе маяка Bluetooth: 3 шага (с изображениями)

Видео: RuuviTag и PiZero W и Blinkt! Термометр на основе маяка Bluetooth: 3 шага (с изображениями)
Видео: Woggle, чат-бот Raspberry Pi Zero — обновление 2024, Июль
Anonim
RuuviTag и PiZero W и Blinkt! термометр на основе Bluetooth-маяка
RuuviTag и PiZero W и Blinkt! термометр на основе Bluetooth-маяка
RuuviTag и PiZero W и Blinkt! термометр на основе Bluetooth-маяка
RuuviTag и PiZero W и Blinkt! термометр на основе Bluetooth-маяка
RuuviTag и PiZero W и Blinkt! термометр на основе Bluetooth-маяка
RuuviTag и PiZero W и Blinkt! термометр на основе Bluetooth-маяка

В этом руководстве описывается подход к считыванию данных о температуре и влажности из RuuviTag с использованием Bluetooth с Raspberry Pi Zero W и отображению значений в двоичных числах на мигающем значке Pimoroni! pHAT. Или, короче: как построить современный и немного занудный термометр.

RuuviTag - это Bluetooth-маяк с открытым исходным кодом, который поставляется с датчиками температуры / влажности / давления и ускорения, но может также действовать как стандартный бесконтактный маяк Eddystone ™ / iBeacon. Это был очень успешный проект на Kickstarter, и я получил свой несколько недель назад. Существует Github с программным обеспечением python для чтения RuuviTag с помощью малины, и я использовал один из их примеров с некоторыми дополнениями.

Raspberry Pi Zero W - последний член семейства RPi, в основном Pi Zero с добавленными Bluetooth и WLAN.

Блинкт! pHAT от Pimoroni - это, по сути, полоска из восьми светодиодов RBG, настроенная как HAT для Raspberry Pi. Он очень прост в использовании и поставляется с библиотекой Python. Идея заключалась в том, чтобы прочитать данные из RuuviTag и отобразить их с помощью мигания! ШАПКА. Значения отображаются в виде двоичных чисел с помощью 7 светодиодов, а восемь индикаторов используются для индикации отображения значений влажности или температуры (+ / - / 0).

Шаг 1: Настройка системы

Настроить систему очень просто: - Включите RuuviTag (версия с датчиком температуры RuuviTag).

- Настройте свой RPi Zero W, RPi3 или любой другой RPi с добавленной мощностью Bluetooth, следуя инструкциям на сайте www.raspberrypi.org.

- Поместите блинкт! ШАПКА на RPi (пока выключена).

- Установите блинкт! и программное обеспечение RuuviTag, как указано на соответствующих страницах GitHub.

- Теперь вам нужно определить MAC-адрес вашего RuuviTag.

- скопируйте прикрепленную программу Python, откройте ее с IDLE для Python 3

- измените MAC-адрес RuuviTag на свой, затем сохраните и запустите программу.

- не стесняйтесь изменять и оптимизировать программу. Программа поставляется как есть, вы можете использовать ее на свой страх и риск, никакой ответственности за нанесенный ущерб не несет.

Шаг 2: устройство и программа

Устройство и программа
Устройство и программа
Устройство и программа
Устройство и программа
Устройство и программа
Устройство и программа
Устройство и программа
Устройство и программа

Как упоминалось выше, идея заключалась в создании простой и недорогой системы для чтения данных с маяка и отображения числовых значений на мигающем индикаторе! ШАПКА, или аналогичная светодиодная лента.

Диапазон значений температуры, измеряемой системой на основе RPi, в большинстве случаев будет где-то между -50 ° C и + 80 ° C для влажности от 0 до 100%. Таким образом, для большинства приложений будет достаточно дисплея, который может отображать значения от -100 до +100. Десятичные числа меньше 128 могут отображаться как двоичные числа с 7 битами (или светодиодами). Таким образом, программа берет значения температуры и влажности из RuuviTag как «плавающие» числа и преобразует их в двоичные числа, которые затем отображаются на мигающем значке !.

На первом этапе число округляется, анализируется, является ли оно положительным, отрицательным или нулевым, а затем преобразуется в положительное число с помощью «абс». Затем десятичное число преобразуется в 7-значное двоичное число, в основном строку из нулей и единиц, которая анализируется и отображается на последних 7 пикселях мигающего символа !.

Для значений температуры первый пиксель указывает, является ли значение положительным (красный), нулевым (пурпурный) или отрицательным (синий). При отображении значений влажности он становится зеленым. Чтобы упростить различение значений температуры и влажности, двоичные пиксели имеют белый цвет для температуры и желтый для влажности. Чтобы улучшить читаемость двоичных чисел, пиксели «0» не выключаются полностью, а вместо этого устанавливаются намного слабее, чем в состоянии «1». Как моргнуть! пиксели очень яркие, вы можете установить общую яркость, изменив параметр «яркий»

Программа также отображает значения и части процесса на экране. Кроме того, вы найдете несколько приглушенных (#) инструкций по печати. Я оставил их, так как они могут быть полезны для понимания процесса, если они включены.

Значения также могут храниться в файле журнала.

Шаг 3: Программный код

Код был немного отлажен и оптимизирован. Теперь вы можете найти версию 3 (20_03_2017).

«Эта программа предназначена для считывания значений температуры, влажности и давления из RuuviTag» и для отображения значений температуры и влажности в виде двоичных чисел на мигающем значке Pimorini! ШАПКА. '' '' Он основан на примере print_to_screen.py из библиотеки ruuvitag на github. «Требуется Pi Zero W, Pi 3 или любой другой RPi, оснащенный bluetooth и всеми необходимыми установленными библиотеками».

время импорта

импортировать ОС из даты и времени импортировать дату и время

из ruuvitag_sensor.ruuvi импорт RuuviTagSensor

from blinkt import set_clear_on_exit, set_pixel, clear, show

def temp_blinkt (bt):

# эта процедура берет значение температуры и отображает его в виде двоичного числа на мигающем значке!

Чисто ()

# цвет и интенсивность «1» пикселя: белый

г1 = 64 г1 = 64 б1 = 64

# цвет и интенсивность "0" пикселей: белый

г0 = 5 г0 = 5 б0 = 5

# Округлить и преобразовать в целое число

r = круглый (bt)

# vz представляет собой алгебраический знак для индикаторного пикселя

if (r> 0): vz = 1 # положительное elif (r <0): vz = 2 # отрицательное else: vz = 0 # ноль # print (vz) i = abs (r) #print (i)

# преобразовать в абсолютное 7-значное двоичное число

i1 = i + 128 # for i приводит к 8-значному двоичному числу, начинающемуся с 1 # print (i1)

b = "{0: b}". format (i1) # преобразовать в двоичный

# print (b)

b0 = str (b) # преобразовать в строку

b1 = b0 [1: 8] # обрезать первый бит

print ("двоичное число:", b1)

# Установить пиксели на blinkt!

# установить двоичное число

для h в диапазоне (0, 7): f = (h + 1) if (b1 [h] == "1"): set_pixel (f, r1, g1, b1) # print ("bit", h, " равно 1, пиксель ", f) else: set_pixel (f, r0, g0, b0) # print (" nil ")

# Установить индикатор пикселя

if (vz == 1): set_pixel (0, 64, 0, 0) # красный для положительных значений elif (vz == 2): set_pixel (0, 0, 0, 64) # синий для отрицательных значений else: set_pixel (0, 64, 0, 64) # пурпурный, если ноль

Показать()

# конец temp_blinkt ()

def hum_blinkt (bh):

# принимает значение влажности и отображает его в виде двоичного числа на мигающем значке!

Чисто()

# цвет и интенсивность «1» пикселя: желтый

г1 = 64 г1 = 64 б1 = 0

# цвет и интенсивность "0" пикселей:

г0 = 5 г0 = 5 б0 = 0

# Округлить и преобразовать в целое число

r = круглый (bh)

# преобразовать в абсолютное 7-значное двоичное число i = abs (r) #print (i)

i1 = i + 128 # for i дает 8-значное двоичное число, начинающееся с 1

# print (i1)

b = "{0: b}". формат (i1)

# print (b)

b0 = str (b)

b1 = b0 [1: 8] # обрезать первый бит

print ("двоичное число:", b1)

# Установить пиксели на blinkt!

# установить двоичное число в пиксели

для h в диапазоне (0, 7): f = (h + 1) if (b1 [h] == "1"): set_pixel (f, r1, g1, b1) else: # отключение для пустых светодиодов set_pixel (f, r0, g0, b0) # Отключение звука до выключения светодиодов

# Установить индикатор пиксель

set_pixel (0, 0, 64, 0) # зеленый для влажности

Показать()

# конец hum_blinkt ()

set_clear_on_exit ()

# Чтение данных из RuuviTag

mac = 'EC: 6D: 59: 6D: 01: 1C' # Изменить на mac-адрес своего устройства

print ('Запуск')

сенсор = RuuviTagSensor (mac)

в то время как True:

data = sensor.update ()

line_sen = str.format ('Датчик - {0}', mac)

line_tem = str.format ('Температура: {0} C', data ['temperature']) line_hum = str.format ('Влажность: {0}%', data ['влажность']) line_pre = str.format ("Давление: {0}", данные ["давление"])

Распечатать()

# отображать температуру на мигающем! ba = str.format ('{0}', data ['temperature']) bt = float (ba) print (bt, «Â ° C») temp_blinkt (bt) print ()

time.sleep (10) # отображать температуру в течение 10 секунд

# отображать влажность на мигании!

bg = str.format ('{0}', data ['влажность']) bh = float (bg) print (bh, "%") hum_blinkt (bh) print ()

# Очистить экран и распечатать данные датчика на экране

os.system ('clear') print ('Нажмите Ctrl + C для выхода. / n / n') print (str (datetime.now ())) print (line_sen) print (line_tem) print (line_hum) print (line_pre) print ('\ n / n / r …….')

# Подождите несколько секунд и начните заново

try: time.sleep (8) except KeyboardInterrupt: # При нажатии Ctrl + C выполнение цикла while останавливается print ('Exit') clear () show () break

Рекомендуемые: