управление ардуиной из интернета-помогите
- Войдите на сайт для отправки комментариев
Добрый день.
Пришло время изучить и это направление.
Очень хочется реализовать следующее(для примера).
Отображение температуры с датчика d18b20 (в com порт кидаем без проблем) на веб странице домашнего сервера.
Запись температуры и времени в базу SQL (на домашнем сервере)
Управлением одним реле через веб страницу.
У меня конкретные трудности с WEB страницами.Есть шильд Ethernet Шилд W5100 . В нем SD у меня не получается одновремменно с сетью работать и с SD картой (кинтье если есть готовый пример).Идея в следующем (если есть пример то же ссылку) на карте держать index.htm и его выкидывать.
Но что то не срастаеться :)
Так же не могу понять как температуру пихать в SQL базу.Сам принцип. Температуру в WEB я добился что бы показвало -дальше то что ?
СПАСИБО ЗА ПОМОЩЬ.
P.s. буду рад если кто подбросит исходники для андройда (отображение температуры и управлением реле)
Может вам сгодится?
Правда, базы SQL там нет.
http://samde.ru/ru/index.html
Не совсем понятно, в каком режиме вы хотите запускать ардуино.
Если как сервер (с использованием флешки) - про БД точно можете забыть.
Если как клиент - вам нужен развернутый веб-сервер, с которым ардуино будет общаться посредством http-запросов.
а что мешает совместить ?
Многое мешает. Но теоретически - можно. Наверное.
А зачем?
Совместить можно, но снаружи придется обращаться по разным портам - иначе на роутере/файерволле не пропишешь правила переадресации.
Совместить можно, но снаружи придется обращаться по разным портам - иначе на роутере/файерволле не пропишешь правила переадресации.
Совместить можно, но снаружи придется обращаться по разным портам - иначе на роутере/файерволле не пропишешь правила переадресации.
А вы осознаете, что речь идет об Ардуино?
ага
И на Ардуино можно поднять TCP протокол. Ну если автору хочется поизвращаться. :)
Главное чтобы памяти и быстродействия хватило.
Но вообще никто не запрещает по UDP обращаться из Интернета.
И на Ардуино можно поднять TCP протокол. Ну если автору хочется поизвращаться. :)
Главное чтобы памяти и быстродействия хватило.
Но вообще никто не запрещает по UDP обращаться из Интернета.
Я не у ТС спросил, а у вас.
Хорошо давайте упростим задачу.
вот код который выкидывает на веб темературу.
помогите написать "соеденение " с SQL . SQL установлен на серваке и имеет белый IP. Что бы эта температура записывалась в базенку.
#include <OneWire.h> #include <DallasTemperature.h> #include <Wire.h> #include <SPI.h> #include <Ethernet.h> #define ONE_WIRE_BUS 8 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); DeviceAddress Thermometere = { 0x28, 0xC3, 0xC7, 0x3B, 0x05, 0x00, 0x00, 0x42 }; long Temperature = 0, Pressure = 0, Altitude = 0; byte mac[] = { 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xF1 }; byte ip[] = { 172, 16, 2, 126 }; EthernetServer server(80); int Relay = 5; int Relay1 = 7; float tempC1; char incomingByte; int t=2; // скорость обмена int x=0; int d=0; void setup() { pinMode(Relay, OUTPUT); pinMode(Relay1, OUTPUT); sensors.begin(); sensors.setResolution(Thermometere, 10); Wire.begin(); Serial.println("start"); Ethernet.begin(mac, ip); // запуск сервера server.begin(); Serial.print("server is at "); Serial.println(Ethernet.localIP()); Serial.begin(9600); } void printTemperature(DeviceAddress deviceAddress) { float tempC = sensors.getTempC(deviceAddress); // Serial.println(tempC,1); } void loop(){ sensors.requestTemperatures(); float tempC1=sensors.getTempC(Thermometere); char bytes; Serial.print("TEMPERATURE "); Serial.println(tempC1); delay(60); if (tempC1 >30) { digitalWrite(Relay, LOW); digitalWrite(Relay1, LOW); } if (tempC1 <30) { digitalWrite(Relay, HIGH); digitalWrite(Relay1, HIGH); } EthernetClient client = server.available(); if (client) { Serial.println("new client"); // an http request ends with a blank line boolean currentLineIsBlank = true; while (client.connected()) { if (client.available()) { char c = client.read(); Serial.write(c); // if you've gotten to the end of the line (received a newline // character) and the line is blank, the http request has ended, // so you can send a reply if (c == '\n' && currentLineIsBlank) { // send a standard http response header client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connection: close"); // the connection will be closed after completion of the response client.print("Refresh: "); // refresh the page automatically every 5 sec client.println(t); //client.println("Refresh: 10"); client.println(); client.println("<!DOCTYPE HTML>"); client.println("<meta http-equiv=content-type content=text/html; charset=utf-8 />"); client.println("<html>"); client.println("<meta http-equiv=content-type content=text/html; charset=utf-8 />"); // output the value of each analog input pin // for (int analogChannel = 7; analogChannel < 8; analogChannel++) { // int sensorReading = analogRead(analogChannel); if (tempC1 >30) { digitalWrite(Relay, LOW); client.print("Rele OFF "); } if (tempC1 <30) { digitalWrite(Relay, HIGH); client.print("Rele ON "); } client.print("Temperature "); client.print(tempC1); client.print(" C"); client.println(t); client.print(" speed"); client.print("<img src= http://www.nearbus.net/images/graphical_dashboard/graphic_dash_0a.png>"); client.print (" <div id=marquee1 style=position:absolute; overflow:hidden; left:1px; top:4px; width:150px; height:43px; z-index:0>"); client.print("<marquee width=150 height=43>"); client.print("<div class=wpmd>"); client.print("<div>сегодня</div>"); client.print("</div></marquee>"); client.print("</div>"); // client.print(sensorReading); client.println("<br />"); //} client.println("</html>"); break; } if (c == '\n') { // you're starting a new line currentLineIsBlank = true; } else if (c != '\r') { // you've gotten a character on the current line currentLineIsBlank = false; } } } // give the web browser time to receive the data delay(1); // close the connection: client.stop(); Serial.println("client disonnected"); } }Gagarin74, на сервере должен работать скрипт, который умеет принимать параметры и умеет эти параметры писать в базу данных.
Ардуино, в режиме клиента должен обратиться к этому скрипту и передать ему данные, для записи в БД, в http-запросе.
Исследовал вопрос работы sd совместно с эзпрнетом на этом шилде. Все работает влет. НО ПЕРЕД ИНИЦИАЛИЗАЦИЕЙ ЭЗЕРНЕТА НЕОБХОДИМО 4 НОГУ ПОДНЯТЬ В HIGH, видимо проблема в том, что по умолчанию на этой ножке ноль, который активирует sd карту, поскольку это ножка чипселекта sd. Далее авсе работает без проблем :-)
Я бы сказал , что на бунту-сервере с LAMP по крону запускается скрипт на пхп, который обращается к ардуине, работающей в режиме сервера. Скрипт получает пакет , парсит его и складывает в мискл. На бунту-сервере работает апач, который выдает страницы , слепленыеиз дизайна и мискла. Управляющие воздействия складываются в отдельную таблицу мискла. Их подбирает скрипт , формируя запрос следующего пакета от арду-серва.
за теорию спасибо. теперь по существу
1 из выше так и не понятно ардуино работать должна как сервер или клиент?
2 меня как раз и интересует PHP скрипт
3 можно код для ардуинки где работает и карта и сеть.
Пожалуйста
сервер
стоит времени
стоит времени
время- деньги
inspiritus,странно вообще то, ну да ладно пусть Вам тоже все помогают за деньги.
P.s. и зря Вы за всех отвечаете :(
за теорию спасибо. теперь по существу
1 из выше так и не понятно ардуино работать должна как сервер или клиент?
2 меня как раз и интересует PHP скрипт
3 можно код для ардуинки где работает и карта и сеть.
Из того, что написано выше мне тоже ничего не понятно, но если у вас уже есть сервер, зачем вам еще сервер на ардуино? Да и сама технология "сервер-сервер" мне не известна.
Скрипты, сохраняющие в файл на сервере, я выкладывал, но с БД я еще не работал - ничем не помогу. Хотя подозреваю, что и эти скрипты тоже будут простыми.
в том то всё и дело -что по отдельности в теориии найти куски можно. Хотел собрать для себя в единый кусок и разобраться что к чему, и за что кто отвечает. Уровень подготовки у всех разный.Я вот, туплю полностью по нектрым темам.
В конечном итоге хотелось что бы температура с ардуины попадала в базу SQL. Как это будет называться мне по барабану ,хоть сервер-сервер,хоть клиент клиент.Сейчас вообще ни чего нет :)
Назначение базы данных?
Просто запись в текстовый файл с меткой времени - никак?
ни как. через SQL проще будет сортировать(удалять итд итп)
за теорию спасибо. теперь по существу
1 из выше так и не понятно ардуино работать должна как сервер или клиент?
2 меня как раз и интересует PHP скрипт
3 можно код для ардуинки где работает и карта и сеть.
Ардуинка как клиент.
Сервер с БД на большой машине.
Ардуино каждый раз по определённому URL будет отправлять на сервер свои данные, а в ответ будет получать различные команды для реле и т.д. Если данные в бинарном ввиде то используйте POST запрос.
вот теперь если бы теорию реализовать в коде,то будет очень продуктивно.
вот читаю вроде все красиво написано. но не понятно как с ардуины забрать значение температуры.
Я же написал арда-сервер, комп является по отношению к ней клиентом, сервер- тот, кто слушает. По оотношению к скрипту - серверы и арда и мискл. Слушают оба, а клиент-скрипт зпускается по крону и шлет запросы- пересылает ответы. По отношению к апачу слушает мискл. По отношению к инету слушает апач.
сервер это не ящик это функционал
вот читаю вроде все красиво написано. но не понятно как с ардуины забрать значение температуры.
Я же описал вам алгоритм еще в самом начале.
Загвоздка в самом скрипте (поддержка SQL - это ваше требование - вам и решать задачу).
Когда у вас будет сервер с нужным скриптом (ссылку на примеры скриптов я вам тоже дал) - просто обращайтесь к этому скрипту с необходимым параметром в GET-запросе. Достаточно стандартного примера из стандартной библиотеки Ethernet.
всё разобрался сделал вот отсюда
разобрался...
А где mySQL?
буду делать. я главное принцип понял (что от меня хочет php сервер). да и примеров много .
А по поводу самого Sql . а чего тут этот код выкладывать? он стандартный для всех лет 15. Мне главное надо было переменную из ардуинки вытащить.
буду делать. я главное принцип понял (что от меня хочет php сервер). да и примеров много .
А по поводу самого Sql . а чего тут этот код выкладывать? он стандартный для всех лет 15. Мне главное надо было переменную из ардуинки вытащить.
Короче, повторяю последний раз - вся сложность вашего проекта в стыковке с БД.
На стороне ардуино вам хватит стандартного примера из стандартной библиотеки.
File-Examples-Ethernet-Web client
И не нужны вам никакие примеры с Народным монитором.
Мне главное надо было переменную из ардуинки вытащить.
А вот этим вы меня убили...
Сколько людей,столько и проблем и хотелок.Можно быть хорошим программером и плохим электриком.Можно офигенно разбираться в SQL и понятие не иметь о языке программирования в 1с. итд итп.
Я же написал арда-сервер, комп является по отношению к ней клиентом...
зачем два-то сервера, и на ардуине, и на компьютере? ардуина замечательно передает данные, будучи клиентом
Комп, на котором мискл, пхп интерпретатор и апач - есть сервер.
мискл Вы на арде чтоли собираетесь поднимать?
а можно код в студию.
передача переменной $A с ардуинки на удаленный комп методом POST .
Комп, на котором мискл, пхп интерпретатор и апач - есть сервер.
мискл Вы на арде чтоли собираетесь поднимать?
либо вы не понимаете, о чем я говорю, либо я не понимаю вас. либо и то, и друго.
еще раз - чтобы передать данные о температуре с ардуино на большой настоящий сервер с линуксом, апачем и сервером бд (мускуль не люблю, постгрес лучше) на ардуине не надо поднимать никаких серверов. только веб-клиент
а можно код в студию.
передача переменной $A с ардуинки на удаленный комп методом POST .
эм... а чем вам GET не угодил? проще, нагляднее, трафик меньше. или у вас секретная температура?
блин!!!! да поднят у меня клиент на ардуине.
я с формированием посылки от неё не могу разобраться.
ещё раз повторюсь -по барабану каким методом POST GET
как передать переменную $A на IP 192.168.88.1 (это как пример большой машины)
Получите запрос "GET 192.186.88.1/script.php?10 HTTP/1.0"
я с формированием посылки от неё не могу разобраться.
а без ардуины-то работает? напрямую, из браузера?
Получите запрос "GET 192.186.88.1/script.php?10 HTTP/1.0"
"GET 192.186.88.1/script.php?q=10 HTTP/1.0"
Получите запрос "GET 192.186.88.1/script.php?10 HTTP/1.0"
"GET 192.186.88.1/script.php?q=10 HTTP/1.0"
Две минуты вникал, пытаясь понять, что вы хотели сказать...
лучше вот так
http://192.186.88.1/script.php?temp=25&sensorid=1
:)
лучше вот так
http://192.186.88.1/script.php?temp=25&sensorid=1
:)
Так выглядит запрос из браузера, а мы содержимое HTTP запроса разбираем :)
Ребят ,большое спасибо.Вроде с пересылкой разобрался. В приведенном коде отсылается переманная A.
Я не очень дружу с ардуинкой. Не подскажите как все это запихнуть в цикл. Что бы она посылала переменную раз в минуту на большого брата. А то сейчас код отрабатывает и все.
Надо кусок кода с 59 по 68 строку перенести в loop и выполнять его раз в минуту, в соседних темах есть как организовать задержку без delay. Этот кусок можно вставить между 94 и 95 строкой, чтобы отправлять температуру только если действительно подключены к серверу
Надо кусок кода с 59 по 68 строку перенести в loop и выполнять его раз в минуту, в соседних темах есть как организовать задержку без delay. Этот кусок можно вставить между 94 и 95 строкой, чтобы отправлять температуру только если действительно подключены к серверу
А еще лучше - выделить этот код в отдельную функуию, и вызывать эту функцию из loop() по расписанию.
c 54 по 73
:)
лучше вот так
http://192.186.88.1/script.php?temp=25&sensorid=1
:)
Так выглядит запрос из браузера, а мы содержимое HTTP запроса разбираем :)
некоторые библиотеки позволяют сразу отправлять строку запроса. экономия в коде 3-4 строки, и проще отлаживать
можно так
if (client.connect(server, 80)) { Serial.println("connected"); client.println("GET /search?q=arduino HTTP/1.1"); client.println("Host: www.google.com"); client.println("Connection: close"); client.println(); }а можно сразу
inet.httpGET("www.google.com", 80, url, resultmsg, len);внутри все одинаково, но работать приятнее во втором случае
c 54 по 73
:)
Так какой конкретно кусок кода вставить ? К сожалению сейчас проверить не могу.
Каждый раз перед тем как сделать запрос, нужно сперва соединиться, потом отправить данные, потом закрыть соединение.
Поэтому c 54 по 73 крутите в цикле.
Если раз в минуту, то очень долго будете ждать возможность отправки команды для реле.
Кстати, хотел спросить, чего не хватает в моём сервисе лично для вас, базы данных, нормального описания?
Каждый раз перед тем как сделать запрос, нужно сперва соединиться, потом отправить данные, потом закрыть соединение.
Поэтому c 54 по 73 крутите в цикле.
Если раз в минуту, то очень долго будете ждать возможность отправки команды для реле.
Кстати, хотел спросить, чего не хватает в моём сервисе лично для вас, базы данных, нормального описания?
О каком сервисе идет речь ?