Скетч Arduino с огромным числом датчиков DS18B20. TEST!!!

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

Volter5000
Сообщения: 38
Зарегистрирован: Пн мар 27, 2017 12:33 am
Откуда: ДНР, Донецк
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

Re: Скетч Arduino с огромным числом датчиков DS18B20. TEST!!

Сообщение Volter5000 » Сб окт 21, 2017 10:48 pm

У меня они подключены к одной ардуине и получаю инфу с них в таком виде:
23,54
9,11
21,10
каждую минуту в ответ на запрос мажорика приходит в файл такой ответ, где я знаю что первый датчик стоит в аквариуме, и присваиваю его к свойству аквариума, второй на улице, присваиваю его к улице и т.д.
СпойлерПоказать
shell_exec("echo T1 >/dev/ttyUSB0");
$aquatemp=exec('head -n-2 /home/vcerkas/temp.log | tail -n1');
setGlobal('AquaTemp.temperatura',$aquatemp);
$hometemp=exec('head -n-1 /home/vcerkas/temp.log | tail -n1');
setGlobal('TempSensor01.zal',$hometemp);
$ulicatemp=exec('head -n-0 /home/vcerkas/temp.log | tail -n1');
setGlobal('TempSensor01.ulica',$ulicatemp);
это мой сценарий, который выполняется каждую минуту,
СпойлерПоказать
include <OneWire.h>
#include <DallasTemperature.h>

char incomingChar;
String fullString="";
// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 10
#define TEMPERATURE_PRECISION 12
// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
void setup() {
// put your setup code here, to run once:
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
Serial.begin( 115200 );
digitalWrite(11,HIGH);
digitalWrite(12,HIGH);
sensors.begin();
}

void loop() {
if(Serial.available()>0)
{
//while(Serial.available()!=0)
//{
incomingChar=Serial.read();
delay(50); // задержка 2мс. нужна, чтобы сериал порт успел принять все символы.
fullString += incomingChar;
incomingChar=Serial.read();
delay(50); // задержка 2мс. нужна, чтобы сериал порт успел принять все символы.
fullString += incomingChar;

//}


if(fullString=="P1")
{
// Serial.write("OK");
digitalWrite(11,LOW);
delay(3000);
digitalWrite(11,HIGH);
}
else if(fullString=="P2")
{
// Serial.write("OK");
digitalWrite(11,LOW);
delay(3000);
delay(3000);
digitalWrite(11,HIGH);
}

if(fullString=="S1")
{
// Serial.write("OK");
digitalWrite(12,LOW);
}
else if(fullString=="S2")
{
// Serial.write("OK");
digitalWrite(12,HIGH);
}


if(fullString=="T1")
{
sensors.requestTemperatures();
Serial.println(sensors.getTempCByIndex(0));
//delay(200);
Serial.println(sensors.getTempCByIndex(1));
//delay(200);
Serial.println(sensors.getTempCByIndex(2));
}






fullString="";
}
delay(100);
}
скетч ардуины, в котором предусмотренно по командам P1 P2 и т.д. кормление рыб и управление светом а по команде T1 в юарт летит информация о температуре. У меня система на линуксе и при запуске ее с определенного порта пишеться информация в файл. а мажорик уже выгребает из него информацию.
pavel0055
Сообщения: 3
Зарегистрирован: Пн июл 08, 2019 10:33 am
Благодарил (а): 0
Поблагодарили: 0

Re: Скетч Arduino с огромным числом датчиков DS18B20. TEST!!!

Сообщение pavel0055 » Пн июл 08, 2019 10:41 am

Добрый день. скетч загрузил ip все указал в нем. но как настроить в системе majordomo все не понимаю что бы он отображался у меня.
по подробней обьясните пожалуйста как сделать настройки в системе куда посмотреть что сделать. Спасибо заранее
mmf16
Сообщения: 2
Зарегистрирован: Вт ноя 21, 2017 5:03 pm
Благодарил (а): 0
Поблагодарили: 2 раза

Re: Скетч Arduino с огромным числом датчиков DS18B20. TEST!!!

Сообщение mmf16 » Ср сен 18, 2019 8:53 pm

tsember писал(а):
Вт мар 24, 2015 12:02 pm
Здравствуйте.
Начал осваивать МЖД. Купил ардуино, датчики 18B20. Загрузил скетч (http://smartliving.ru/Main/ArduinoSchema).
Для освоения скетч хороший. Но меня не устраивало, что при подключении нового датчика, постоянно требовалось вносить изменения в код и перезаливать его в плату Arduino (перед этим отключив все шилды), что, согласитесь, крайне не удобно.

Решил написать универсальный скетч (который бы и команды на реле посылал, и всевозможные датчики бы контролировал, а самое главное - чтоб умел самостоятельно найти, определить и отсылать информацию на сервер MJD).

Представляю Вашему вниманию Universal Arduino sketch for MajorDoMo: https://github.com/petertsermber/arduin ... orDoMo.ino

Пока работает только с датчиками 18B20 (но я в ближайшем будущем добавлю поддержку распространенных датчиков: DHT (влажности и температуры), BPM085 (давления и температуры, PIR (датчик движения), а так же модуля управления реле на 4 канала).

Ардуино ищет подключенные с 1-wire шине датчики, определяет их адреса, заносит в массив.
Далее по циклу, с каждого датчика получаем температуру, округляем ее до десятых, сравниваем с прошлой отправленной на сервер температурой. Если дельта больше 0,3 градуса, то отправляем данные на сервер МЖД. Идентификатором на сервере служит адрес датчика в HEX формате. Затем цикл повторяется.
Для "горячего" подключения датчиков требуется всего лишь "железно" подцепить датчик к шине, а в МажорДоМо добавить новый объект с именем типа 28156B15060000A7 (Адрес нового датчика можно узнать в стандартной программе типа Hyper Terminal), в котором существует свойство temp. Ну и должен присутствовать стандартный метод tempSensors-> tempChanged (который присутствует в стандартном дистрибутиве MJD). ВСЕ! Никаких перепрограммирований, перепрошиваний и прочего!

P.S. Я не программист, си++ вообще впервые увидел три недели назад, если что в коде не так, прошу сильно не ругать, а здесь написать.

Спасибо.

а что не так с датчиком dth11? там всего пару строк дописать
Ответить