Удаленная работа с Ардуино. Нужна практика.

Deniska407
Offline
Зарегистрирован: 03.11.2014

Коллеги!

Стоит казалась бы простая задача: удаленное управление и мониторинг дачей. Есть знания с++, куплено "железо" (ардуино Ethernet, реле, датчики ...) но нужны для начала еще и теоретические знания, в которых к сожалению есть некоторый пробел.

Мое (на сегодняшний день) понимание удаленного управления и мониторинга следующее: есть ардуино, подключенное к сети со статическим IP адресом. На ардуино запущена программа, которая а) опрашивает порты ввода б) отправляет SNMP трапы мне домой (вор залез, температура опустилась ниже 5 град.) в) формирует некую web-страницу на которой можно нажав кнопку удаленно включить реле (например отопление) и посмотреть состояние портов ввода (температура, закрыты ли все двери ...)

Для начала, что бы небыло путаницы, хочу определиться с вводными данными:

IP адрес компьютера - 192.168.0.10

IP адрес ардуино - 192.168.0.100

Порт А1 (аналоговый) - температура

Порт D5 (цифровой) - Дверь

Порт D7 (цифровой) - Управление реле

Хотелось бы по шагам разобраться, с чего начинать. На сколько я понимаю на ардуино есть разъем для MicroSD карты. На ней нужно разместить web-страницу для управления ардуино или страница будет формироваться в коде программы для ардуино? Какой МИНИМАЛЬНЫЙ текст должна содержать эта страница для мониторинга и управления? Может ли ардуино быть и web-сервером и отправителем SNMP-трапов?

Подскажите, коллеги ...

 

С ув.,

Д. 

Araris
Offline
Зарегистрирован: 09.11.2012

Все уже изобретено до нас. Что мешает Вам найти (в том числе и на этом форуме) информацию про 100500 уже реализованных аналогичных проектов и воспользоваться ей ? [Вопрос риторический]

Deniska407
Offline
Зарегистрирован: 03.11.2014

Приветствую, коллеги!

Воспользовавшись очень полезным, познавательным, содержательным и бесценным советом  от Araris, решил для начала посмотреть образец веб-сервера. За пример взял стандартный: «файл» -> «образцы» -> «Ethernet» -> «WebServer», но тут же всплыла проблема. Первый раз я захожу на страничку и вижу, как живет контроллер. Но! Стоит ее покинуть, то вернутся на нее обратно можно только путем нажатия кнопки «reset» на контроллере. Причем на компьютере три браузера (IE, Opera и Chrome) везде одна и та же картина. Так же не работает, если сначала зайти на контроллер одним браузером, закрыть страницу и попытаться зайти другим.

Может кто сталкивался с подобной проблемой? Железо – Arduino Mega 2580 и Ethernet шилд на контроллере WIZnet Ethernet W5100.

Ответы по образцу Araris можно не писать. Не засоряйте ветку.

Спасибо. И за понимание тоже.

С ув.,

Д.

Deniska407
Offline
Зарегистрирован: 03.11.2014

решил, но пока не понял как и почему так вышло ...  Вынул Микро SD и все заработало в штатном режиме. Коллеги! что не так? как подружить Micro SD и эзернет шилд ?

Deniska407
Offline
Зарегистрирован: 03.11.2014

продолжаем монолог. спасибо иностранным ресурсам.

теперь и SD ok и страничка отображается ...

#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>

byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};

byte ip[]={192, 168, 1, 188};
byte subnet[] = { 255, 255, 255, 0 };
byte gateway[] = { 192, 168, 1, 100 };

EthernetServer server(80);

void setup() {

  Serial.begin(9600);

    pinMode(10,OUTPUT);
  digitalWrite(10,HIGH);

  if(SD.begin(4) == 0) 
     Serial.println("SD failed");
  else
     Serial.println("SD ok");
     
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }

   Ethernet.begin(mac, ip, subnet, gateway);
   digitalWrite(10,HIGH);  
   delay(2000);  
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}

 

Anatoljevich_pro
Offline
Зарегистрирован: 07.01.2015

Deniska407 пишет:

Коллеги!

Стоит казалась бы простая задача: удаленное управление и мониторинг дачей. Есть знания с++, куплено "железо" (ардуино Ethernet, реле, датчики ...) но нужны для начала еще и теоретические знания, в которых к сожалению есть некоторый пробел.

Мое (на сегодняшний день) понимание удаленного управления и мониторинга следующее: есть ардуино, подключенное к сети со статическим IP адресом. На ардуино запущена программа, которая а) опрашивает порты ввода б) отправляет SNMP трапы мне домой (вор залез, температура опустилась ниже 5 град.) в) формирует некую web-страницу на которой можно нажав кнопку удаленно включить реле (например отопление) и посмотреть состояние портов ввода (температура, закрыты ли все двери ...)

Для начала, что бы небыло путаницы, хочу определиться с вводными данными:

IP адрес компьютера - 192.168.0.10

IP адрес ардуино - 192.168.0.100

Порт А1 (аналоговый) - температура

Порт D5 (цифровой) - Дверь

Порт D7 (цифровой) - Управление реле

Хотелось бы по шагам разобраться, с чего начинать. На сколько я понимаю на ардуино есть разъем для MicroSD карты. На ней нужно разместить web-страницу для управления ардуино или страница будет формироваться в коде программы для ардуино? Какой МИНИМАЛЬНЫЙ текст должна содержать эта страница для мониторинга и управления? Может ли ардуино быть и web-сервером и отправителем SNMP-трапов?

Deniska407, я для себя выбрал готовое решение нежели собирать конструктор на коленке. Использую устройство удаленного управления розетками NetPing 2/PWR-220 v1/SMS со встроенным GSM модемом. Неплохой девайс, который умеет управлять нагрузкой, мониторить информацию с датчиков и оповещать владельца различными средствами. Один экземпляр использую на даче, другой - в серверной на работе. Для дачи - отправляю SMS, включается обогреватель в комнате. Через пару часов уже тепло. В серверной - перезагружаю зависший 3G модем и контроллирую проходы в помещение.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Отстойная рекламма. Голимый девайс с огромной ценой и глючной работой - в топку. Модем он перегружает :) Плох админ который ватчдогами пользуется, пытается свою непроыессиональность режить костылями :) Это я как айтишник-управленец могу смело утверждать :)

inspiritus
Offline
Зарегистрирован: 17.12.2012

Единственное, что невозможно дистанционно админить , это зависание канала связи. Про "ватчдоги" тут ничего не говорилось. Что значит " режить костылями" я вообще не понял , наверно это такой айтишно-управленческий "проЫЕссиональный" слэнг. Видимо айтишник-управленец это совсем не айтишник-админ. Может быть Вы расскажете про то, как Вы ! высокопроЫессионально-управленчески режите костыли. Хотя у айтишника-управленца всегда есть замечательный проЫессиональный способ перегрузить модем - отправить айтишника-админа.

Каждое устройство хорошо, если оно стоит приемлимые деньги и выполняет потребные от него функции. человека оно устроило. Когда высказываете личное мнение добавляйте ИМХО.

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

 

inspiritus,подразумевалось "решить")

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Да.... Прикольно некоторым товарищам занозы не дают покоя. Инспиритус помните, свойство обижаться характерно для неудачников. 

Про рекламу пурги- неоправданная цена с кривым функционалом. А зависшие каналы связи это пассаж ! Вам бы со сцены выступать. Чего нибудь про зависшие мир и вселенную зарядить. Смешно слышать рассуждения дилетанта. Да проверьте ошибки в моих сообщениях, я уверен вы считаете, что упрек в неграмотности другого сделает вас умнее, развивайтесь :)

Зависающее оборудование говорит о неграмотном применении или неправильном выборе. Сейчас любой сервер имеет ватчдог.  Хотя нет, не буду метать бисер. Не вижу смысла.

inspiritus
Offline
Зарегистрирован: 17.12.2012

Мдэ. Господи, спаси практиков от таких управленцев.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

 Я то на вас не обижаюсь. Я вообще стараюсь с идиотами не связываться. То что вам так не понравилась моя персона и вы не потерпели это, а попытались опустить меня, говорит о вашей неудовлетворенности собой. Я вообще в аллаха верю. Так, так что не там вы спасение ищете. Ищите его в своей голове.

inspiritus
Offline
Зарегистрирован: 17.12.2012

Человек перед Вашим первым выступлением  - Anatoljevich_pro , дал дельный совет, Вы его зачем-то обгадили. 

Вот и вопрос кто опускал, кто неудовлетворен и кто обижен.

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

 

Anatoljevich_pro
Offline
Зарегистрирован: 07.01.2015

inspiritus пишет:

Человек перед Вашим первым выступлением  - Anatoljevich_pro , дал дельный совет, Вы его зачем-то обгадили. 

Вот и вопрос кто опускал, кто неудовлетворен и кто обижен.

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

 

Благодарю, inspiritus, за то что Вы оценили мою железку. Не обращайте внимания на неадыкватных людей, которые думают, что они ПУП земли.

Удачи во всех начинания!

Vadim111
Offline
Зарегистрирован: 14.01.2015

Deniska407 пишет:

Коллеги!

Стоит казалась бы простая задача: ...

Сам только что закончил проект управления по сети. Все работает, но делал все сверх примитивно. Возможно мои советы чем-то помогут.

1.Ethernet шилд работает либо как web сервер, либо как web клиент. Работать и так, и так он не может. Из вашей постановки задачи вам больше подойдет сервер (но тут лучше вам решать). Т.е. в дальнейшем рассматривайте только вопросы, касаемые работы шилда, как сервера.

2. Вот здесь:

http://startingelectronics.com/tutorials/arduino/ethernet-shield-web-server-tutorial/basic-web-server/

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

3. Я за основу своего, достаточно сложного управления роботом, взял стандартный пример в библиотеках Ардуино Ethernet -> WebServer. Глубоко в него можно даже не вникать. Там вначале идет ожидание соединения, потом запроса клиента, потом начинается чтение самого запроса. Основная обработка идет только после строчки if (c == '\n' && currentLineIsBlank). Главное - понять идею удаленного управления и от этого плясать. А идея такова:

Чтобы управлять ардуиной удаленно надо: А) послать ей некоторое количество переменных, Б) Она должна прочесть все эти переменные, В) в зависимости от величин этих переменных она сделает те или иные действия. Г) обновит Веб страницу (или составит заново) и отправит обратно, туда от куда пришел запрос.

Теперь подробнее: А) переменные Ардуине вы можете послать с помощью http GET запроса. (есть еще POST запросы и др., но давайте их пока не рассматривать) GET запрос - это самый обычный текст, в котором идет куча непонятных (для ламера) букв и слов. Но среди этих непонятных символов обязательно присутствует строка, типа: ?name=Vasya&password=123 . В этой строке ? - начало запроса, name и password - имена передаваемых переменных, а Vasya и 123 - величины этих переменных. & - разделитель между передаваемыми переменными. Переменных может быть и 1 штука (тогда & не нужен, т.к. нечего разделять) и очень много штук, тогда и разделителей (&) будет много - между каждой переменной. Сформировать эту строку GET запроса вы можете как угодно. Например, вы можете тупо написать в строке браузера http://192.168.1.177?name=Vasya&password=123, и на сервер уйдет GET запрос с двумя переменными и их величинами. Можно на http странице нарисовать форму и по нажатию кнопки Send будет автоматически формироваться подобный запрос с количеством переменных, равных количеству полей формы. Я же, например, пошел по третьему пути: я на С# написал простенькую форму и воспользовавшись стандартными библиотеками для формирования GET запроса отправлял эти запросы на сервер. Т.е. путей формирования и отправки такого запроса - множество. Самый элементарный - браузер.

Б) Теперь в скетче, в строке кода HTTP_req += c; Ардуина считывает весь GET запрос посимвольно. Т.е. после прочтения всего запроса в переменной HTTP_req хранится весь непонятный вам мусор. Но там также находится и строчка с нашими переданными переменными. Т.е. второй крупный шаг программы - это анализ полученного текста и вытаскивание из него тех переменных и их значений, которые пришли с запросом. Тут, по сути, вы работаете с текстом. И тут  все зависит только от вашей логики - работаете ли вы с одной переменной или множеством, приходит ли каждый раз четкий набор переменных или каждый раз могут приходить разные переменные по одиночке и т.п. Но, используя стандартные функции работы с текстом, анализ текста не должен вызвать трудностей.

В) Самый простой шаг. Анализ полученных переменных и выполнение определенных действий. Допустим, если переменная Level > 10 то на пине 3 будет высокий сигнал и т.д. Так же вам может потребоваться считать показания каких-то пинов.

Г) После того, как у вас есть все считанные переменные вы формируете Веб страницу и отправляете ее обратно клиенту. По указанной ссылке об этом очень хорошо сказанно. В html код страницу вы подставляете свои считанные переменные, чтобы их можно было видеть в удаленном браузере и формируете форму для вставки новых значений переменных и отправки их с очередным GET запросом. В зависимости от ваших запросов по управлению, веб страница может получиться достаточно большой и не влезть в оперативную память Ардуины. К тому же, передача большого объема информации требует некоторого времени. Я же в своем проекте поступил нестандартно. Я отправлял одну строку GET запроса с помощью отдельно написанной программки и принимал всего несколько абзацев Веб страницы с возвращенными переменными, которые анализировал в той же программке. Задержек в обмене запросами не заметил.

Желаю удачи.

P.S. Я в своем проекте соединялся с Ардуиной по локальной сети, т.е. связывался с ней по адресу, типа: 192.168.1.177.  Но у меня ушел почти месяц на то, чтобы разобраться, а как же связаться с ней с удаленного компа по И-нету. Я поднимал подобную тему, но ответа не получил. Сейчас во всем разобрался. Сам же и отпишусь в своей теме. Если будет интересно - смотрите там.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Вот Vadim111 правильно и по делу пишет. Не то что непонятные комерсанты, ВПАРИВАЮЩИЕ СВОЮ ПУРГУ. Человек справшивает "как сделать", а ему отвечают "где купить". Это что... я даже объяснить глупостью это не берусь. Да еще и клоуны начинают красными носами мотать. Конечно, все за грамотность борются "неадЫкватных" везде мнят, на себя то в зеркало гляньте, только не испугайтесь. Я то как раз таких насмотрелся. Когда людей набираем, вот таких очень фильтровать тяжело, они на словах все могут, а на деле только "плюются".

Хочу добавить про пост запросы, они от гетов отличаются не только хидером, но и наличием блока данных, которые могут быть отправлены скрыто. Более того, в этих блоках не нужно соблюдать правило - "Только английский алфавит и никаких других знаков". В поле данных пост запроса можно отправлять и рав данные, то есть "какие есть, без обработки". Обычно оболочку с ардуино пишут на яваскрипте. Получается аякс :) Сам сейчас ковыряю веб сервер на меге. Такой где пользователь, при желании, может создвать свои страницы. Прикольно получается, немного тормозно, но вполне себе адекватная и надежная штука. В комплекте с SD - вообще бомба. Налепил явовских страничек, скинул их на флешку и готово. До DYN DNS пока не добрел, но и с этим планирую разобраться. На самом деле все намного проще, чем может показаться :)

inspiritus
Offline
Зарегистрирован: 17.12.2012

Уважаемый Vadim111 , как обычно истину глаголет.

А Вы, как обычно, как в лужу ...  Звучно, много и невнятно!

" говорил он много, но непонято об чём" ... вполне по-управленчески.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Вам бы подлечиться. Последнее дело на личности переходить, но для вас это естественно. Ну что тут скажешь... Я же не виноват, что вы неудачник, причина этому в вас :) А много и невнятно, этот тут на форуме вашего говнокода, для всяких утюгов. 

Кстати, то что вы не понимаете о чем я пишу, говорит только о вашей плохой осведомленности в вопросе и нежелании чего либо изучать. Иными словами, если вы что то не поняли, то это из за вашей глупости :)

gheki
Offline
Зарегистрирован: 22.04.2015

....ну вы как дети малые!!!.....ха-ха

..а вы знаете от чего все беды на земле?  от не совместимости характеров-мировозрений,

...один считает надо так делать, - другой - не-е.. надо вот так делать , а так как ты говориш не правильно.

.....вот и начинаются все войны на земле, .....хотя каждый по своему прав, просто у него взгляд на мировозрение немножко посвоему...

...а вы уже перестреляли друг-друга

ха-ха-ха

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

gheki ,да вы некромант, очень надеюсь, что не капрофил. Хотя, почти уверен, что ошибаюсь. Спецом зарегистрироваться, что бы вырыть покойника, это не всяк заценит...  Счтайте, что я оценил и ум ваш и совесть !

irvinru
Offline
Зарегистрирован: 16.06.2015

Deniska407

Доброго времени суток!

Получилось потравить Трап? Так же столкнулся с необходимостью отправить Трап, но что-то, видимо плоху гуглю, никак не выходит.