В давние времена, мониторинг температуры в серверной был делом не дешевым, а главное не тривиальным.
Мне приходилось иметь дело с устройством NetPing, которое по сети, по протоколу SNMP, позволяло считывать данные о температуре и в зависимости от ее значение выполнять заданные действия. Устройство периодически зависало само, потому нужно было мониторить и его, по необходимости дергая питание вручную. Но иного выхода не было – даже эта простая железка в те времена стоила не малых денег, которых в бюджетном учреждении не было.
Сейчас ситуация изменилась и стало доступное огромное количество устройств с различными датчиками, шинами, “не скучными корпусами” по вполне доступной цене.
Но я расскажу, каким образом была решена задача по мониторингу температуры мною.
Были приобретены Arduino Nano, датчик температуры и влажности DHT22 и резистор на 4-6 кОм. Общая стоимость деталей составила 280 рублей.
Continue reading »
Скрипт arduino-serial.sh:
#!/bin/sh #Последовательный порт, через который работаем с ардуиной usbPort="/dev/ttyUSB0" #Устанавливаем параметры последовательного порта stty -F $usbPort 9600 raw 9600 -echo -cstopb #Через две секунды, если порт существует, посылаем данные в порт. А сами продолжаем выполнение скрипта sleep 2 && test -e $usbPort && echo "$1" | dd of=$usbPort 1>/dev/null 2>/dev/null & #Читаем одну строку из порта head -n 1 $usbPort
При запуске скрипта, в параметре передаем строку, которую оправим ардуине:
./arduino-serial.sh test
Через две секунды скрипт выведет в консоль то, что ответила ардуина.
Основное отличие от того что советуют на многих форумах – мы пишем и читаем из порта одним скриптом. Для этого сначала открываем порт на чтение программой head и ждем строку данных, а уж только после этого отправляем в порт запрос.
Строка которую отправит ардуина в последовательны порт обязательно должна оканчиваться символом переноса (метод Serial.println как раз то что нужно ;) )!