Arduino Uno + Ethernet Shield W5100 Подключение к интернету и передача данных. Удаленный доступ.

Alex-human
Offline
Зарегистрирован: 03.11.2014

Здравствуйте, уважаемые форумчане. Я новичок в программировании ардуино. Не могли бы вы подсказать и подробно рассказать или дать конктретный ответ на интересующие меня вопросы? А именно: расскажите мне подробно пожалуйста(как тупому-шаг за шагом)как с помощью интернета, получить удаленный доступ и получать информацию с датчиков, имея Arduino Uno + Ethernet Shield. Ну про датчики не буду. Я с ними разобрался. Как в локальной сети получить тоже разобрался. А вот чтоб удаленно не могу. Поскажите пожалуйста. В интернете искал и много. Но толкового не нашел. Потому что не хватает знаний подключения в сети и управление. 

maksim
Offline
Зарегистрирован: 12.02.2012

Ну если в локальной сети все получилось, то вопрос то не по адресу, причем тут вообще ардуина и программирование? 

Что бы подключиться из вне к ардуине необходимо пробросить порт в роутере.
Что бы стучаться в роутер не по IP, который у вас при каждом реконекте меняется нужно настроить DDNS.
Как все это делается инфы полно.

Alex-human
Offline
Зарегистрирован: 03.11.2014

Не могли бы вы поделиться информацией? Ссылкой или видео. То что я находил мне не особо было понятно. Все урывками. Заранее благодарен. 

maksim
Offline
Зарегистрирован: 12.02.2012
Alex-human
Offline
Зарегистрирован: 03.11.2014

Есть пример на ардуине?

maksim
Offline
Зарегистрирован: 12.02.2012

Перечитайте #1.

Alex-human
Offline
Зарегистрирован: 03.11.2014

Возможно ли проделать ситуацию (достучаться из вне) если у меня usb модем? 

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

Ddns

destination nat

Alex-human
Offline
Зарегистрирован: 03.11.2014

Как можно настроить? Через управления сетями, я правильно понимаю или нет?

maksim
Offline
Зарегистрирован: 12.02.2012

С модемом скорее всего не прокатит, потому что операторы выделяют "серые" IP и из вне достучаться нельзя.

Проверить это можно зайдя в свединия подключения и посмотреть какой IP вам выдал оператор, 
затем идете на http://2ip.ru/ и смотрите свой внешний адрес и если выданный оператором не соответствует внешнему значит у вас "серый" IP.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

maksim пишет:

С модемом скорее всего не прокатит, потому что операторы выделяют "серые" IP и из вне достучаться нельзя.

ну не обязательно достукиваться извне, можно просто очень часто стучать в сервер изнутри.

maksim
Offline
Зарегистрирован: 12.02.2012

Ну так... как говорится с сервером и дурак сможет...

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

maksim пишет:

Ну так... как говорится с сервером и дурак сможет...

Отлично, ну тогда можно общаться через  емайлы :) 

maksim
Offline
Зарегистрирован: 12.02.2012

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

Alex-human
Offline
Зарегистрирован: 03.11.2014

maksim пишет:

С модемом скорее всего не прокатит, потому что операторы выделяют "серые" IP и из вне достучаться нельзя.

Проверить это можно зайдя в свединия подключения и посмотреть какой IP вам выдал оператор, 
затем идете на http://2ip.ru/ и смотрите свой внешний адрес и если выданный оператором не соответствует внешнему значит у вас "серый" IP.

Хорошо. А есть ли такая возможность, как только я подключусь через ddns и проброшу порт, могу ли я считывать данные с ардуино и (пока не знаю как) хранить или забивать в базу. Чтобы потом я смог мониторить через прогу на C#. Есть идеи?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Alex-human]</p> <p>[quote=maksim пишет:

 Есть идеи?

У гугля полно идей... или вы предлагает тут все вывалить на 234234234 страницах?

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

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

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

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

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

В самом начале скетча, точнее в разделе объявления переменных и констант, вы указываете, примерно следующее:

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // MAC address Ethernet шилда
IPAddress ip(192, 168, 1, 177); // IP address Ethernet шилда
byte gateway[] = { 192, 168, 1, 1 }; // Адрес основного шлюза (роутера локальной сети) Смотреть в настройках роутера.
byte subnet[] = { 255, 255, 255, 0 }; // Маска подсети. В локальной сети можно на любом компе зайти в центр упр. сет. -> параметры адаптера.
EthernetServer server(80);  // create a server at port 80

Если вы работаете только в локальной сети, то вам нужны только первая, вторая и последняя переменные. Если собираетесь работать с И-нетом, то лучше указать шлюз и маску подсети (3 и 4 переменные)

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

Если же мне надо было обратиться к шилду из И-нета, то наоборот, при порте 80 ни при каких обстоятельствах шилд не пинговался.  При этом я пытался освободить в системе 80 порт от других приложений - ничего не выходило. Надо было назначать любую другую цифру. Я выбрал 81 (и пробросил порты в роутере). Все заработало. Т.е. получилось, что шилд мог быть доступен либо из локальной сети, либо из И-нета. И от туда, и от туда не получилось. Попробуйте и вы для обращения из И-нета назначить другой порт. Если получится связаться, тогда копайте дальше.

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

Хмм у меня на 2560 + 5100+ стандартная библа  доступно отовсюду. На шильде порт - 80, проброшен как 8088 . Пробросить можно любым кроме  занятых наружу, например 80 у меня занят роутером ( микротик) . Инициализация из примера библиотеки, естественно с моими адресами.

maksim
Offline
Зарегистрирован: 12.02.2012

Vadim111 пишет:

Если вы работаете только в локальной сети, то вам нужны только первая, вторая и последняя переменные. Если собираетесь работать с И-нетом, то лучше указать шлюз и маску подсети (3 и 4 переменные)

Не нужно, все эти данные дуина получит от DHCP сервера.

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

Я бы посоветовал в дхсп-аторе привязать выделяемый IP к МАК , чтобы не искать потом куда кинуло всякими сканерами.

Alex-human
Offline
Зарегистрирован: 03.11.2014

Я попробовал с портом но не вышло. Может я его неправильно отврыл или вообще не открыл. Не понимаю просто и не знаю сети и соединения. В локале все работает. А с инета не могу удаленно ничего получить....Подскажите инстррукцией как настроить роутер.

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

Инструкция ламера (надеюсь продвинутые юзеры смогут подкорректировать):

1. Подключись к И-нету (установи связь с провайдером) и определи свой внешний IP. Его можно посмотреть в админ странице роутера, зайти на сайт определяющий твой IP, позвонить провайдеру и т.п. Если у тебя какой-то специфический провайдер, который раздает серые IP (о чем писалось ранее), то читать дальше смысла нет. И это, по сути, и есть ответ на все твои вопросы - невозможно обратиться к какому-то устройству, если у него нет адреса. Пока 100% не узнаешь свой IP, Ардуину можешь не трогать.

2. В течение одной сессии IP не изменяется (это на тот случай, если твой провайдер раздает IP динамически), т.е. после того, как узнал свой IP комп (роутер) не выключай. Возьми стандартный пример скетча из ethernet библиотеки (по моему называется web server - там, где определяется напряжение на аналоговых входах и посылается на веб страницу), измени там IP адрес и номер порта.

а) IP адрес меняй, если у тебя в локальной подсети другой диапазон. Например, твоя подсеть использует диапазон адресов 192.168.0.1-255, тогда надо назначить, типа, 192.168.0.177. Если диапазон 192.168.1.1-255, тогда 192.168.1.177.

б) Номер порта поменяй на 81.

Залей скетч в Ардуину.

3. Открой админ страницу роутера. Это, к примеру, 192.168.0.1 или 192.168.1.1. Т.е. это первый адрес в диапазоне IP адресов твоей локальной сети. Должно запросить пароль. Обычно это admin и password. Если рекомендации пункта 3 (этого пункта) не помогают, т.е. попасть на админ страницу не можешь, то открывай руководство пользователя к роутеру и читай. Там все должно быть.

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

5. В настройке Переадресации портов долны быть такие параметры:

Имя службы - ставь (или выбирай из списка) HTTP;

Внешний начальный порт - ставь 81;

Внешний конечный порт- ставь 81;

Внутренний начальный порт- ставь 81;

Внутренний конечный порт- ставь 81;

IP адрес сервера - ставь тот IP, что зашит в скечте Ардуины, например, 192.168.1.177

Сохраняй сделанные настройки роутера. Если для сохранения настроек потребуется перегрузить роутер, то после перезагрузки надо по-новой узнавать свой внешний  IP - см. п.1.

6. Допустим твой внешний IP - 23.45.67.123 (только для примера, что надо набирать в браузере)

7. Открывай браузер и в строке адреса вводи: 23.45.67.123:81

81 - это номер порта, на который мы повесили сервер. Ты должен выйти на страницу своего веб сервера уже не из локальной сети, а из И-нета.

Если все получится, то тогда можешь копать дальше, на счет получения постоянного доменного имени (для случая с динамическим IP) и т.д.

 

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

Требуемая переадресация може называться nat, destination nat , или forwrding.

Вообщетто какой у Вас роутер?

Alex-human
Offline
Зарегистрирован: 03.11.2014

Всем большое спасибо. Помогло. Слелал так: узнал ip, он у нас оказался постоянным. Потом для ардуино написал ip и указал порт свой. В настройках роутера открыл DMZ на ip ардуины и все. Зашил для пробы датчик DHT 11. Все получилось. Данные выдает. Как сделать HTTPS? Расскажите кто делал, как осуществили

congrammer
congrammer аватар
Offline
Зарегистрирован: 01.05.2015

Привет,был оздачен такой же проблемой решил просто - https://ngrok.com/ в нете есть примеры как с ним рабоать. Есть поддержка HTTPS и вывода локального сервера в интернет без проброски и прочего гемороя.

Alex-human
Offline
Зарегистрирован: 03.11.2014

Привет. Ну я посмотрел http://www.youtube.com/watch?v=jO7pDP0MjFg, как работает. Ну вот а как вы подключили ардуину? И что там показывается? Пример работы с ардуино не нашел.

congrammer
congrammer аватар
Offline
Зарегистрирован: 01.05.2015

Так у вас есть локальный сервер на arduino? Если есть то в пропишите ip в ngrok и он выдаст вам ссыль на ваш сервре котрый доступен в интернете запросы к нему будут идти к ардуинке. Я чуть по другому делал я создавал локальный сервер на denwer потом через ngrok выводил в интернет. Управлял ардуинкой тоже через сервер denwer через php, посылая запросы на com port 3 (я делал без обратной связи, не получал ответа от arduino)

Вот php код для win 7

exec("Mode COM3:9600,n,8,1,P");
exec("ECHO 0 > COM3");

 

congrammer
congrammer аватар
Offline
Зарегистрирован: 01.05.2015

del

Alex-human
Offline
Зарегистрирован: 03.11.2014

Да. Можно сделать локальный. Только я хотел сделать просто чтоб в инете была страница для просмотра и все. Вывод данных туда только. Но вот либо аутентификацию делать либо https  чтобы было доступно тому, кто введет пароль правильно. 

congrammer
congrammer аватар
Offline
Зарегистрирован: 01.05.2015

тогда юзай ngrok 

Alex-human
Offline
Зарегистрирован: 03.11.2014

Можете подсказать где там или какой командой создать аутентификацию. Не особо разобрался

congrammer
congrammer аватар
Offline
Зарегистрирован: 01.05.2015

Аутифакция дело программирования а HTTPS это протокол защиты трафика от перехвата

Alex-human
Offline
Зарегистрирован: 03.11.2014

Извините пожалуйста, сколько читал про https, но не смог понять. Вот например, если я хочу подключиться к серверу удаленно и считывать данные, при этом заносить их в базу данных потом. Мониторить так сказать. Но при этом, я не хочу подвергать опасности сервер. Как его защитить мне? Подскажите пожалуйста. Как мне может помочь HTTPS в этом деле? Или как сделать аутентификацию только для меня? объясните пожалуйста. 

congrammer
congrammer аватар
Offline
Зарегистрирован: 01.05.2015

Https не обязателен для этих целий обычного логина и пароля достаточно. Https нужен только для хащиты от перехвата трафика между вами и сервером не думаю что вас будет кто то ломать. Я могу вам сделать всё под ключь за определённую цену т.к я фрилансер.

congrammer
congrammer аватар
Offline
Зарегистрирован: 01.05.2015

я могу написать чтоб можно было управлять через прогрмму написанной мной а так же через сайт + монитор данных (api) для вашего сайта

Alex-human
Offline
Зарегистрирован: 03.11.2014

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

congrammer
congrammer аватар
Offline
Зарегистрирован: 01.05.2015

Да тут не в опыте дело а в знаниях я просто не могу вам взять и выложить то чем я занимаюсь 3 года в одном сообщении. Я только не давно набрался необходимых знаний чтоб смог всё интегрировать а ардуино. Так что вам придётся это пройти для начала изучите php + html

Alex-human
Offline
Зарегистрирован: 03.11.2014

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

 

congrammer
congrammer аватар
Offline
Зарегистрирован: 01.05.2015

Php + Html + ngrok - будет пердавать данные с интерента в ардуинку а та сохранять у себя в энерго независимую память 

congrammer
congrammer аватар
Offline
Зарегистрирован: 01.05.2015

Для начала сделай так

 

http://www.youtube.com/watch?v=PPB2Xvubt4s

Alex-human
Offline
Зарегистрирован: 03.11.2014

Не могу сделать для W5100. Где прописать такой буфер или там так не получится?

congrammer
congrammer аватар
Offline
Зарегистрирован: 01.05.2015

хз

Alex-human
Offline
Зарегистрирован: 03.11.2014

Сделал из другого примера тоже со светодиодами. http://zelectro.cc/Ethernet_shield_W5100

Что далее?

congrammer
congrammer аватар
Offline
Зарегистрирован: 01.05.2015

Далее подключай ngrok

Alex-human
Offline
Зарегистрирован: 03.11.2014

Вот как сделано http://www.2wg.co.nz/

Как мне так сделать? Там логинишься и тогда можно менять. не найду ссылку где описывается этот проект

Alex-human
Offline
Зарегистрирован: 03.11.2014

Что именно подключать в ngrok???

congrammer
congrammer аватар
Offline
Зарегистрирован: 01.05.2015

Не далее тебе нужно разжовывать, что и как делать. Я так не хочу, дальше сам

congrammer
congrammer аватар
Offline
Зарегистрирован: 01.05.2015

Хочешь за пару т.р сделаю как там и даже лучьше

rtb
Offline
Зарегистрирован: 19.05.2015

Добрый вечер Alex. Вот наткнулся на вашу переписку и, что называется обрадовался.Имею кучу трудностей с Arduino и они схожи с Вашими. Тупик. Вы уже прошли этот этап или в процесе?