Arduino Uno + Ethernet Shield W5100 Подключение к интернету и передача данных. Удаленный доступ.
- Войдите на сайт для отправки комментариев
Сб, 11/04/2015 - 20:58
Здравствуйте, уважаемые форумчане. Я новичок в программировании ардуино. Не могли бы вы подсказать и подробно рассказать или дать конктретный ответ на интересующие меня вопросы? А именно: расскажите мне подробно пожалуйста(как тупому-шаг за шагом)как с помощью интернета, получить удаленный доступ и получать информацию с датчиков, имея Arduino Uno + Ethernet Shield. Ну про датчики не буду. Я с ними разобрался. Как в локальной сети получить тоже разобрался. А вот чтоб удаленно не могу. Поскажите пожалуйста. В интернете искал и много. Но толкового не нашел. Потому что не хватает знаний подключения в сети и управление.
Ну если в локальной сети все получилось, то вопрос то не по адресу, причем тут вообще ардуина и программирование?
Что бы подключиться из вне к ардуине необходимо пробросить порт в роутере.
Что бы стучаться в роутер не по IP, который у вас при каждом реконекте меняется нужно настроить DDNS.
Как все это делается инфы полно.
Не могли бы вы поделиться информацией? Ссылкой или видео. То что я находил мне не особо было понятно. Все урывками. Заранее благодарен.
Проброс портов
Настройка DDNS
Есть пример на ардуине?
Перечитайте #1.
Возможно ли проделать ситуацию (достучаться из вне) если у меня usb модем?
Ddns
destination nat
Как можно настроить? Через управления сетями, я правильно понимаю или нет?
С модемом скорее всего не прокатит, потому что операторы выделяют "серые" IP и из вне достучаться нельзя.
Проверить это можно зайдя в свединия подключения и посмотреть какой IP вам выдал оператор,
затем идете на http://2ip.ru/ и смотрите свой внешний адрес и если выданный оператором не соответствует внешнему значит у вас "серый" IP.
С модемом скорее всего не прокатит, потому что операторы выделяют "серые" IP и из вне достучаться нельзя.
ну не обязательно достукиваться извне, можно просто очень часто стучать в сервер изнутри.
Ну так... как говорится с сервером и дурак сможет...
Ну так... как говорится с сервером и дурак сможет...
Отлично, ну тогда можно общаться через емайлы :)
Причем этим сервером может быть другая ардуина ,которая будет подключена к нормальному проводному интернету с белым IP.
С модемом скорее всего не прокатит, потому что операторы выделяют "серые" IP и из вне достучаться нельзя.
Проверить это можно зайдя в свединия подключения и посмотреть какой IP вам выдал оператор,
затем идете на http://2ip.ru/ и смотрите свой внешний адрес и если выданный оператором не соответствует внешнему значит у вас "серый" IP.
Хорошо. А есть ли такая возможность, как только я подключусь через ddns и проброшу порт, могу ли я считывать данные с ардуино и (пока не знаю как) хранить или забивать в базу. Чтобы потом я смог мониторить через прогу на C#. Есть идеи?
Есть идеи?
У гугля полно идей... или вы предлагает тут все вывалить на 234234234 страницах?
При сером IP не спасет и DynDNS. В таких случаях используют сервисы месенджеров всякие аськи, вайберы. В инете полно примеров.
При всем уважении к вопросу, мне кажется вы пытаетесь получить ответы на множество разноплановых тем, каждая из которых - это отдельное направление работы с Ардуино. Поучение доступа из локальной сети из из И-нета - это одна тема. Организация базы данных на веб сервере - это другая тема, совершенно с первой не связанная. Получить ответ на все сразу, да еще и то, что вам нужно, наверное не получится.
Совсем недавно, будучи ламером в веб программировании, мучался с аналогичным вопросом - доступ к ардуине из И-нета. Возможно я буду поруган профессионалами в администрировании сетей, но как ламер ламеру могу сказать следующее:
В самом начале скетча, точнее в разделе объявления переменных и констант, вы указываете, примерно следующее:
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 (и пробросил порты в роутере). Все заработало. Т.е. получилось, что шилд мог быть доступен либо из локальной сети, либо из И-нета. И от туда, и от туда не получилось. Попробуйте и вы для обращения из И-нета назначить другой порт. Если получится связаться, тогда копайте дальше.
Хмм у меня на 2560 + 5100+ стандартная библа доступно отовсюду. На шильде порт - 80, проброшен как 8088 . Пробросить можно любым кроме занятых наружу, например 80 у меня занят роутером ( микротик) . Инициализация из примера библиотеки, естественно с моими адресами.
Если вы работаете только в локальной сети, то вам нужны только первая, вторая и последняя переменные. Если собираетесь работать с И-нетом, то лучше указать шлюз и маску подсети (3 и 4 переменные)
Я бы посоветовал в дхсп-аторе привязать выделяемый IP к МАК , чтобы не искать потом куда кинуло всякими сканерами.
Я попробовал с портом но не вышло. Может я его неправильно отврыл или вообще не открыл. Не понимаю просто и не знаю сети и соединения. В локале все работает. А с инета не могу удаленно ничего получить....Подскажите инстррукцией как настроить роутер.
Инструкция ламера (надеюсь продвинутые юзеры смогут подкорректировать):
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) и т.д.
Требуемая переадресация може называться nat, destination nat , или forwrding.
Вообщетто какой у Вас роутер?
Всем большое спасибо. Помогло. Слелал так: узнал ip, он у нас оказался постоянным. Потом для ардуино написал ip и указал порт свой. В настройках роутера открыл DMZ на ip ардуины и все. Зашил для пробы датчик DHT 11. Все получилось. Данные выдает. Как сделать HTTPS? Расскажите кто делал, как осуществили
Привет,был оздачен такой же проблемой решил просто - https://ngrok.com/ в нете есть примеры как с ним рабоать. Есть поддержка HTTPS и вывода локального сервера в интернет без проброски и прочего гемороя.
Привет. Ну я посмотрел http://www.youtube.com/watch?v=jO7pDP0MjFg, как работает. Ну вот а как вы подключили ардуину? И что там показывается? Пример работы с ардуино не нашел.
Так у вас есть локальный сервер на arduino? Если есть то в пропишите ip в ngrok и он выдаст вам ссыль на ваш сервре котрый доступен в интернете запросы к нему будут идти к ардуинке. Я чуть по другому делал я создавал локальный сервер на denwer потом через ngrok выводил в интернет. Управлял ардуинкой тоже через сервер denwer через php, посылая запросы на com port 3 (я делал без обратной связи, не получал ответа от arduino)
Вот php код для win 7
del
Да. Можно сделать локальный. Только я хотел сделать просто чтоб в инете была страница для просмотра и все. Вывод данных туда только. Но вот либо аутентификацию делать либо https чтобы было доступно тому, кто введет пароль правильно.
тогда юзай ngrok
Можете подсказать где там или какой командой создать аутентификацию. Не особо разобрался
Аутифакция дело программирования а HTTPS это протокол защиты трафика от перехвата
Извините пожалуйста, сколько читал про https, но не смог понять. Вот например, если я хочу подключиться к серверу удаленно и считывать данные, при этом заносить их в базу данных потом. Мониторить так сказать. Но при этом, я не хочу подвергать опасности сервер. Как его защитить мне? Подскажите пожалуйста. Как мне может помочь HTTPS в этом деле? Или как сделать аутентификацию только для меня? объясните пожалуйста.
Https не обязателен для этих целий обычного логина и пароля достаточно. Https нужен только для хащиты от перехвата трафика между вами и сервером не думаю что вас будет кто то ломать. Я могу вам сделать всё под ключь за определённую цену т.к я фрилансер.
я могу написать чтоб можно было управлять через прогрмму написанной мной а так же через сайт + монитор данных (api) для вашего сайта
Да спасибо конечно за предложение, но хочется самому дойти до этого, опыта набраться, разобраться. Если можете подсказать, подскажите пожалуйста, буду благодарен. Если бы было необходимо сделать, тема была бы в другой теме форума. Конечно я буду иметь ввиду,что вы делаете. Но пока что я прошу поделиться опытом. Если можете и вам не жалко, поделитесь
Да тут не в опыте дело а в знаниях я просто не могу вам взять и выложить то чем я занимаюсь 3 года в одном сообщении. Я только не давно набрался необходимых знаний чтоб смог всё интегрировать а ардуино. Так что вам придётся это пройти для начала изучите php + html
Ну вот моя первостепенная задача состоит в том, чтобы выдать определенные данные с датчиков в интернет. Там своя логика, построенная на условиях. Ну вот например, мне надо поменять нижнюю границу датчика температуры. Для этого необходимо получить доступ. Так? Ввести логин и пароль. И можно увеличить уменьшить и сохранить. С помощью чего это можно сделать?
Php + Html + ngrok - будет пердавать данные с интерента в ардуинку а та сохранять у себя в энерго независимую память
Для начала сделай так
http://www.youtube.com/watch?v=PPB2Xvubt4s
Не могу сделать для W5100. Где прописать такой буфер или там так не получится?
хз
Сделал из другого примера тоже со светодиодами. http://zelectro.cc/Ethernet_shield_W5100
Что далее?
Далее подключай ngrok
Вот как сделано http://www.2wg.co.nz/
Как мне так сделать? Там логинишься и тогда можно менять. не найду ссылку где описывается этот проект
Что именно подключать в ngrok???
Не далее тебе нужно разжовывать, что и как делать. Я так не хочу, дальше сам
Хочешь за пару т.р сделаю как там и даже лучьше
Добрый вечер Alex. Вот наткнулся на вашу переписку и, что называется обрадовался.Имею кучу трудностей с Arduino и они схожи с Вашими. Тупик. Вы уже прошли этот этап или в процесе?
Здравствуйте. Давно я к Вам не обращалась за помощью, пришло время:
Имею W5100+UNO
W5100 выступает в качестве клиента.
Имею локальный сайт, в корне которого лежит index.php
Код ардуино: