Официальный сайт компании Arduino по адресу arduino.cc
ENC28J60 и обработка параметров URL
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Пнд, 10/11/2014 - 14:45
Всем привет!
Юзал поиск, нашёл это http://arduino.ru/forum/programmirovanie/parsing-stroki-adresa-arduino-v-rezhime-veb-servera ... всё тут хорошо, но малость не то, что надо .. а именно:
Допустим весь урл звучит так http://10.0.0.10/?mod=leds&led_id=1&cmd=on (это так .. для примера)
нужна функция, на подобии $_GET[] в php .. т.е.
if (get_param("mod") == "leds") {
.....
}
if (get_param("cmd") == "on") {
.....
}
пробовал переработать вышеуказанный пример, но то-ли опыта ещё нет в написании кода для ардуины, то-ли руки ... ну в общем не получилось у меня ... php это одно, а тут это уже более серьёзный уровень .. буду рад помощи, и если кто из Брянска есть (а вдруг) - пивом проставлюсь )))
Вот как я пробовал эксперементировать ...
при таком варианте он мне пишет в сериал вот что:
а если изменить вот так
то выводит вот так
то получим вот такую ошибку
после вот таких изменений
получаем ошибку
Ну правильно - при парсинге вы указатель перезаписываете вот оно и работает только один раз чтобы работало много раз нужно присваивать строки через strncpy(), так же желательно явно задать максимальную длину строки
Супер, а можешь помочь разобраться с тем, как сравнить полученный результат с моей строкой?
да ё-моё .... если значение параметра не число - то выводится 0 ....
например
_http://192.168.3.5/setip?aaa=qwerty&bbb=168&ccc=1&ddd=33
input 'h ttp://192.168.3.5/setip?aaa=qwerty&bbb=168&ccc=&ddd=33'
Ну так и должно быть согласно строке 14 и функции strtoint()
Попейте чаю а то уже очевидного не замечаете.
Ну да, перегрелся видимо ..
последний момент остался непонятным ...
придётся после каждого сравнения писать?
strncpy() нужно чтобы скопировать строку в кавычках в память выделенную для переменной. Логичнее в самой функции определить переменную и копировать туда данные, для их обработки. по переданному указателю или даже по указателю который разбивает строку по '?'.
P.S. Код конечно жуткий, но вам самому надо понять как его улучшить. Я бы сделал класс, где парметры парсились при инициализации и потом просто нахолились по имени.
На счёт кода - согласен ... и подозреваю я, что гораздо проще/лучше/правильней/безопасней будет прицепить контроллер к COM (USB-COM) порту сервера (на котором и будет вертеться вся веб-мордочка), и уже СЛАТЬ команды на него, управляя из полноценного веб-интерфейса ... или попробовать использовать Шилд с микроСД картой ... народ пишет, что с ним проще работать, да и сам он мощнее ...
Столкнулся счас с такой штукой ... подал внешнее питание а контроллер, а он не проинициализировался ардуинкой ... какая разница в том, какое питание подаётся? .. было подано питание от второй ардуинки ... просто питание и всё
[quote=bsdshneg]Столкнулся...[/quote]со схемой электрической
Пардон, а какая разницо откуда питание идёт? .. или я физику наглухо забыл?
Пардон, а какая разницо откуда питание идёт? .. или я физику наглухо забыл?
а по физике электротехнику всегда поверхностно опысывают
схему посмотрите поймете
что вы там резет не понимаете?
как резистор притягивает к плюсу?
на какой уровень пр каких кандерах этот уровень проседает?
ключевое слово
я вашей схемы не вижу
разговор ни о чем
щас попробую поискать местные мои чтоб дать понять что без основ разговор ни о чем
схема
З.Ы.напрмер вот боролся с нехилой пульсацией коллекторных моторов в режиме жуткого форсажа
https://yadi.sk/i/tikT5q0NaFQuP
там по питанию ардуины лупит удары током по полампера
у вас все в разы спокойнее
в веб игрушками вообще не помню проблем по питанию
обычно стадно не понимают как это логику на сторону клиента надо переносить и всю серверную логику в ардуинку пытаются всунуть а потом стонут что не работает
99% от отсутсивя понимания основ http клиент сервер что делать сревреру что делать клиенту и сколько у кого ресрурсов и куда логику в каком случае лучше переносить
я все жду когда тут застонут когда php не смогу всунуть
фотки моих веб сервреров на ардуине не нашел а поднимать лень
а ведь будут
даю вероятность 99% на due будут пытаться
По поводу логики - разговор отдельный)))))
На счет php - натыкался на статью, но не про ардуину, а просто на атмеге и эзернет-контроллере собирали мини вебник, кстати с cgi и там выполнялись легкие php скрипты )))
з.ы. девайс по полу катается прикольный)))
Из всех плясок с эзернет-модулем я понял, что "универсальности" не добиться ... в любом случае нужно писать отдельный код (веб-части) под каждый отдельный случай ..
Может я не прав, но у меня не получилось (хотя я не мега-кодер на Си) ...
зриш в корень
1.это слово закончилось на apache ну например http://art1.by иссКуйСвто заключаю в выгребании авна и запуска в промышленную эксплуатацию
2.на атмегах 328 больше не всунешь и то тут сдшка нужна
пока всю логику на произвольного но виндо-линухо-андроид клиента не перенес нормально адекватно не управляется
и то в один поток
вот тут хороший пример
checkbox прекрастно щелкаешь релюшками тож бывает твой комп пока выплюнет команду бывает в непонятках через секунду
button труба дело вроде жмется а скорострельности что-то стабильно меньше
а вот отображение в сторону клинета когда логика клиента нафик не работает
переменники отображаются шустренько
ну кнопки понятно как сам пальцем тыкаешь
быстрей чем этот веб интерфейс не всречал
скорость определятся скоростью виндо компьютера
начинаеш просчитывать затраты и получается
Меньше 50$(без акк) за однопотоковый ногодрыг ацпслух через веб ключевое новомодное слово atmega328
Вебсерак к которому можешь по квартире подойти и звездюлей накатить вполне ничего и прекрастно
За 200$(с аккумуляторм) древнюoщий махровый апач по 50 попыток взлома в сутки игнорирует пятилетками ключевое слово старик интел
веб одноплатники собирал
на raspberry 185$ (без акк) тот же апач или nxix но с гиммороем на raspbian поднимать если только готовое тебе не в тему
Ну как сказать про готовое ... надо начать с того "для чего оно мне"
Ответ прост - пока не для чего ... с ардуиной знаком пару недель, пришёл ещё комплект барахла из Китая .. вот сижу разбираюсь, как минутка выдаётся .. страничку с СД карты отдаёт, но опять же, чтоб это всё красиво работало (например при включении чего-нибудь, на страничке показывала, что это что-то включено, а не 2 кнопуи ВКЛ и ВЫКЛ) - нужно продумывать как это делать с минимальными нагрузками на контроллер .. вариант вижу с записью/чтением параметров в/из файлик(а), чтоб eeprom не засирать, но опять же, это пока так, баловство ... пожалуй самым провильным вариантом будет всёж подключение этого хозяйства к серверу через USB-COM и управление командами ... с уже красивым, понятным WEB-интерфейсом .. хотя опять же вопрос обратной связи от контроллера имеет место быть, т.е. как он будет сообщать статусы того или иного прибора подсоединённого к нему .... выход - запись параметров например в базу и при включении контроллера слать ему портянку из комманд ..
Короче тема долгая и интересная, особенно с пивом хорошо будет обсуждаться .. жаль не с кем)))
Ну как сказать про готовое ... надо начать с того "для чего оно мне"
Ответ прост - пока не для чего ... с ардуиной знаком пару недель, пришёл ещё комплект барахла из Китая .. вот сижу разбираюсь, как минутка выдаётся .. страничку с СД карты отдаёт, но опять же, чтоб это всё красиво работало (например при включении чего-нибудь, на страничке показывала, что это что-то включено, а не 2 кнопуи ВКЛ и ВЫКЛ) - нужно продумывать как это делать с минимальными нагрузками на контроллер .. вариант вижу с записью/чтением параметров в/из файлик(а), чтоб eeprom не засирать, но опять же, это пока так, баловство ... пожалуй самым провильным вариантом будет всёж подключение этого хозяйства к серверу через USB-COM и управление командами ... с уже красивым, понятным WEB-интерфейсом .. хотя опять же вопрос обратной связи от контроллера имеет место быть, т.е. как он будет сообщать статусы того или иного прибора подсоединённого к нему .... выход - запись параметров например в базу и при включении контроллера слать ему портянку из комманд ..
Короче тема долгая и интересная, особенно с пивом хорошо будет обсуждаться .. жаль не с кем)))
вижу веб вы никогда не поднимали
на этой миркушке забудьте про php как старшный сон очевидно cgi вы не писали и не нужно в микрушку его пихать
логика на стороне клиента называется JavaScript логика которая утрамбована оптимальна уже абревиатура Ключевая абревиатруа ajax
почитайте что это за приемы кодирования javascript передачи xml и какая упрощенная серверная часть достаточна ino подгрузки клиенту html - это наш случай atmega328
приведенная страничка как говорят pure java в данном случае конечно же не ява а "чистый ajax" по книжке с прикручиванием к atmega328+w5100+miniSD32gbyte+ethernet+code.ino+index.html-><--xml-->intel+windows7+yandex.browser+index.html+javascript
вот такая цепочка технологических решений
1. Сервер Слабый
логику стартуя молотит ардуино как только появился первый и постяннй запрос пытается вытолкнуть с minisd index.html в сторону занимающего канал связи и становится в ожидание команд "command".xml все за 1 секунду успел и расслабился
2. Клиент Мощный
мощный Intel Core Due +Windows7+ или Android начиная с версий 2 запускает монстра Web-Browser способного легко промолачивать JavaScript и задавать вопросы серверу легковесной xml
я даже command.xml не писал она на лету в памятях мелочь тощая туду сюда шныряет
клиентский монстр самое тормозное звено вижу пр таком переносе логики
это основы построения клиент сервер - кто думает больше
народ за 2 пятилетку вообще обленился
привык что многоголовый apache все успевает
а тут надо вспомнить основы и логику всего-лишь из cgi/php перенести в javascript
чтоб студентов на бабло раздевать обозвали все словом ajax
все старо как мир web
чтоб не собирать с миру по нитке поищи книжку со словами ну типа ajax
я когда писал книжек не нашел
а вот статейки как к генератору arduino-w5100-index.html прикрутить омен ajax-ом уже были все на ангельском
теоретически можно index.html типовой 10кбайт в код ino хранить но я что дибил что-ли
любая правка оформления старнички будет требовать перешивание контроллера
я сразу искал варинат чтобы index.html править в любой момент
люди которые придумывали этот щиток реально знают основы построения web-server тупо покупаешь и все готовенькое для сервера
Я этот щиток на Arduino Mega ADK и Arduino Uno R3 проверял одним и тем же кодом на ура.
Релюшный щиток сверху третей полкой на ура.
И не грееется я на всякий случай радиатор приклеил на w5100
Теперь вопрос о графике
Стадо сразу пытается графику прикрутить и тупят постояно.
Основы если не хватает ресурсов сервера подкачиваем с сервера который успевает. Это прописано в стандарте HTTP.
Я думал со свободных 32 гигабайт miniSD шки подкачивть jpg gif и тормоза жуткие не прокачке. Решение внешними ссылками со своего севрера подкачивать. У меня есть веб-сервера личные, мне легко, а у вас? Короче я жестко послал графику в сад. Брал чисто древню псевдо графику и средства JavaScript. Button максимум. Варианты когда стрелочки на шкалках двигаются. Ну тормозят они.
Короче текст и максимум цвет шрифт и все летает как ласточка на любов вашем android nokia и других мобильниках.
Проанализируем клиентов
Собственно я делал из расчета мелкого мобильного интерфейса. Узенько и Высоко так чтобы на 4 дюймовом оперативно без увеличения можно было тыкнуть.
button вроде побольше, а оказался хуже проверенного старика checkbox-а в синтаксисе javascript
Ладно хватит. Преподы за такой курс 1500$ берут. И так много безплатно рассказал.
попробуйте понять что здесь написано - это с рабочего сервера каждая строчка вилизана и вычищена летает ласточкой
при беглом взгляде я думаю вы увидите полностью отображаетя распиновка официальной платы
так сказать вариант заготовка для разработчика
заказчику просто удаляя строчки и преименовывая можно отдавать рабочий девайс
ключевое слово удаляя а не комментируя иначе вы не расслябляете arduino
выверять каждый символ менять каждые пробелы на табуляцию и т. д. никакой графики вылетает за один раз клиенту
сохраните как index.html и вперед на мины
Не надо изобретать велосипеды. Из классического железа классический Web-Server-Arduino я устанавливаю вот таким. Красным цветом помечены свободные ноги для щитка третьего уровня. Можно и четвертый. Но тут уже все типы: Аналоги, I2C, Кнопки, Мощные ключи, Чего еще надо количество ног? Тупо вынимаем и вставляем в Arduino Mega без переписывания кода. Тут Щиток третьего уровня дороже arduino+w5100=17$ 20$ итого имеем без аккумулятора 50$. Я думаю мы понимаем что сервера без УПС не строятся ну на крайний случай wdt.h Мне эта собака никогда не нужна была.
Код не дам. Вот книжечку напишут за 50$. Потом переведут за 20$. Народ прочитет если не основы то хоть приемы переноса логики на клиента. Тогда и можно будет поповорить об оптимизации например. Ну жу куда оптимизировать? Без книжки. Как минимум продажная цена 100$ это минимум. Не нужна экспериментальщина? Вперед на заводские типовые решения за 50$. Не нравится? Вперед на покупку следующих заводских решений за 50$.
Ну вот заготовку целой лекции прочитал по курсу: http сервера клиенты. Распределение динамических и статичных данных при обмене.
Вах, круто ... есть пара НО:
Веб я поднимал, сбился со счёту раз ))) (да, не на ардуине а на многоголовом апаче, поэтому эта тема для меня офигенно нова)
Занимаюсь разработкой веб-проектом, поэтому и с технологиями знаком)))
С внешними серверами проблем нет, да и графики мне на странице не надо, первым делом я хочу разобраться с кодом ардуины, а именно - попробовать реализовать "модульную структуру" .. например есть ссылка
http://192.168.3.5/?mod=led&ledid=7&cmd=off
она соответствует такой структуре
http://192.168.3.5/?mod=<имя контроллера(модуля)>&<параметр>=<значение>&<команда>=<значение>
по анадогии с MVC моделью ... но вот как раз тут (написание кода на Си) знаний маловато :(
Плюс мне ещё не совсем понятно, как будет осуществляться передача параметров от ардуины на эту страничку (к примеру как будет известно, что светодиод включен, а не выключен), учитывая, что страничка лежит на SD карте .. ну и подобные, казалось бы (кому-то), элементарные вещи ... за пару недель урываками разбираясь со всем этим хозяйством, сложно "постичь дзэн" )))))
У меня есть желание именно разобраться, понять, ане копипастить чужой код ...
как будет осуществляться передача параметров от ардуины на эту страничку (к примеру как будет известно, что светодиод включен, а не выключен),
тощий xml
учитывая, что страничка лежит на SD карте
1!!! один раз при запросе клента пытаемся 4 килобайта index.html затолкать клиенту чтоб думать начинал уже он
У меня есть желание именно разобраться, понять, ане копипастить чужой код ...
уж повер при куче авна кода прийдется выверять кажды символ
очень много случайного народы в веб стротиельстве не понимают для чего придумали симовл переноса строки в конце передаче \n и ноют тут 99,99999999999999% что связь обАрВалАся ай яй яй
их халтурщиков вредителей надо xtml ткнуть носом за грубейши брак в сети
я 3 недели вьезжал по 14 часов без праздников и выходных
количесво авна переичнанного
думаю проштудировал все книжки што хоть как-то по этой теме боком
вот сухая выжимка в остатке
теряешь время это все уже написано по моим прикидкам 2 года назад
сайт есть какой?
w5100+ miniSD на 4 килобайта нйдется?
мой "балконнный личный апач" http://art1.by
Своего у меня сайта нет, классический пример "сапожника без сапог"
Если ты говоришь, что написано, можешь инфой поделиться? .. на примеры ссылочку кинуть? .. по примерам всёж проще изучать-то)))
Просто я уже долго ищу, но не нашёл ровным счётом ничего подобного ...
Своего у меня сайта нет, классический пример "сапожника без сапог"
Если ты говоришь, что написано, можешь инфой поделиться? .. на примеры ссылочку кинуть? .. по примерам всёж проще изучать-то)))
Просто я уже долго ищу, но не нашёл ровным счётом ничего подобного ...
а железо?
w5100+ miniSD на 4 килобайта нйдется?
у меня пока эзернет-модуль enc28j60 и вот такой SD-модуль
ну и карта на 512мегов .. перебрал 4 штуки, только 1 заработала ...
у меня пока эзернет-модуль enc28j60 и вот такой SD-модуль
ну и карта на 512мегов .. перебрал 4 штуки, только 1 заработала ...
Теоретически можно попробовать на твоем железе код попробовать прикрутить.
Мне за сервера в следующем месяце платить надо 40$. И что-то пока халтур нет. Если ты сайт поднимал то понимаешь, что это не деньги за рабочую технологию.
Рабочий код сервера могу продать. Веб сервер arduino что на мега что на uno в инет для тестирования выставить не проблема. А как он поднимется на твоем железе. Тебе смотреть надо. Теоретически вроде похоже. Смотри сам. Мое железо. Все классика все схемы официальные. http://arduino.cc/en/Main/ArduinoEthernetShield все тут всем доступно.
http://arduino.cc/en/uploads/Main/arduino-ethernet-shield-06-schematic.pdf
Код я для этого железа отлаживал.
Красным я помечаю свободные ноги. Остальное все сервер занимает.
Решайся на книжках больше потратишь и не найдешь единственно правильного решения. Почтовым переводом например. Или в банк сходить на карточку как я хохлам типа всяких вариантов мгновенных переводов. В моем банке все варианты есть возможны. В Краматорск до войны я хлопцу через WesternUnion 180$ за 2 дня долетало.
Будешь у себя лежа на диване своим андроидом релюшками всякие девайсы щелкать :)
Я уже нащелкался я своему Windows2012-му думаю включение удаленное приладить. Но пока жареный петух не клюнул лень.
Enc28j60 - не очень удобен - много памяти сьедает TCP/IP стек. Я использовал библиотеку Webduino - почти полноценный веб сервер, но памяти тоже не хило ест. Можно конечно самому написать только нужный функционал - экономя каждый байт. Модулюную структуру я понимаю как - куча модулей связывается с сервером - получая по dhcp адреса и используя адрес шлюза для запроса настроек и регистрации. Если модули настроены то - они могут связываться между собой (в настройках задается автоматика взаимодействия). Но это как экстренная мера при нарушении целостности сети - когда сервер недоступен.
Каждое устройство имеет в себе http клиента для уведомления сервера о событиях на входах устройства и http сервер для управления устройством. Параметры лучше чтобы были числовыми - от 0 до 255 (1 байт или тип uint8_t). А на самом устройстве сделать "стстичную" страницу с описанием возможностей - количество входов, выходов, возможные значения.
А мой сервак у меня дома, чтобы просто так не стоял - он у меня и торенты качает и инет раздает.
Я бы остановился на второй схеме плюсом(это в дальнейшем) к которой было бы p2p сеть(когда вторичные устройства тупо взаимодействуют между собой по последней настроенной логической схеме).
Логика такая: если событие произошло в вторичном устройсве - они делают запрос на сервер. Если событие произошло на сервере - он делает запрос на нужное вторичное устройство. Например нужно зажечь лампочку - есть ардуинка с блоком реле и ардиинка с блоком кнопок. Нажимаем на кнопку - ардуинка делает запрос на сервер, сервер разбирается что за кнопка и включает соответвующую лампочку отправив запрос на ардуинку с блоком реле. А вот тут возникает вопрос - если сервер будет недоступен(перезагружаться после скачка напряжения) то свет включить не получится? Вот тут то и должно помочь p2p - когда ардуинка не увидя сервер выполнит команду(запрос) из загруженной конфигурации - обратится напрямую к ардуинке с блоком реле. Тоесть простая логика сможет работать даже при наличии всего 2 вторичных устройств связанных локальной сетью и предварительно настроенных.
вот это сюрприз :-o в век когда чипов как грязи еще что-то ковырять програмно
нет уж луше к 4$ добавлю 3$ тое сть не надо докупать SDсчитыватель баксов и чтоб летало удобно не глючило наращивалось
а сколько кардридерчик в розницу может это теже в итоге 7 баксов
так как у меня всех тварей по аре мне все равно какой из трех вариантов
я затачивал так чтоб ардуино гаджет в любом месте на стенку за 50$ повесил и с любой точки мира рубильниками щелкать с любого устройства у жены некий Nokia с неким бройзером и прекрасно щелкается на расстояни дома на работе в тролейбусе
я так с миру доступ даю
плодитесь 50$ и размножайтесь WebArduino девайсы
в чем смысл покупать enc82j60 ведь те же деньги в итоге не наращиваемо не меньше размерам все равно картридер покупать и както прикручиват код тяжелее результат все чем далше тем менее надежнее?
1.сейчас щиток w5100 я считал 12$ сейчас смотрю уже 7$ и 2.летает все сдкартридер уже есть 3.нарастить щитком раз плюнуть 4.паять ничего не надо 5.вышло из строя замена легка.
чего-то я нмчего не понимаю
постарел наверно
у меня все стандартное из коробки
и размер
влезает везде ну может только 8 и 16 не влезет
я еще думал может arduinopro+enc82j60-minisd в виде ручки пишущей сдеалть и на проводе UTP чтоб висело, а тут еще такие косяки за дорого
дайте ссыль на биьлиотеку enc82j60 посмотреть что там за писанина
а то я классикой ethernet.h может совсем обленился?
art100
Как я писал выше, ардуина у меня чуть более 2ух недель, а пришло всё разом, вместе с эзер-модулем+сд-модуль ... стоило это всё 12$
Библиотека вот https://github.com/jcw/ethercard
Вс более-менее подходящие примеры написаны именно под щиток .. вот заказал за 5$
NeiroN
Вот я тоже к этому варианту склоняюсь, НО хочу свести роль сервера к минимуму .. ну или действительно что-то типа p2p в отдалённом светлом будущем попробовать реализовать)))