Pull to refresh

Comments 48

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

Мелкая корректировка — вы нерационально расходуете память. Сейчас у вас весь HTML хранится в ней — пока код прост, это не вызовет проблем, но когда накрутите логики, придётся ужиматься.

Решение простое — применяйте F():
Serial.println(F("Эта строка-константа будет храниться не в SRAM, а в флэш-памяти"));
Не очень то и понял… а подробнее можно?
Ну автоматом закинет текст в Flash память и будет её таскать оттуда, а не держать в оперативке, которой не густо.
а где об это почитать можно? Есть много вопросов технических… что? как? куда? сколько?
Ну дык ссылку же привели, там всё написано.
У вас на последнем скриншоте вышло «Sketch size — 5 килобайт из 32 максимум», заметили?

Если вы усложните страничку отображением пары индикаторов, нескольких кнопок и т.п. — вы мяукнуть не успеете, как размер скетча приблизится к пределу. Для кода, который должен выполняться по нажатию кнопочек (щёлканье релешками, мигание лампочками) может тупо не остаться места.

Но если вы прочитаете руководство по ссылке, вы узнаете, что у Ардуины не одно место, где она может хранить длинные константы. Если уж начали писать HTML в коде, сразу начинайте убирать его в флеш-память, меньше придётся переписывать потом.
Я не спорю… простые примеры будут работать а более сложные не особо… но для них есть другие библиотеки, более продвинутые и сетевые контроллеры есть получше.
А ссылочку Вашу на руководство я не вижу… :(
«Другие библиотеки» рискуют не вместиться, если от SRAM уже прилично отъедено — попросту не останется места для размещения их рабочих переменных.

Ссылка — playground.arduino.cc/Learning/Memory — приведена в первом комментарии.
сори… не сразу понял что там ссылка… цветность монитора в мастерской хромает :)))
как мне вытянуть эту строку из флеш? и отправить её в сетевой… это пример на сколько я понял если я храню много переменных в массивах символов. А если в зависимости от условия мне добавляется та или иная строка из проги в масив(пример: слово — старт или стоп) то у меня будет хранится в массиве только одно слово которое согласно условию будет выбрано и отправлено в массив для ответа на сетевой запрос.
Получается что слово «старт» и слово «стоп» первоначально будут хранится в Flash а согласно условию добавляются в масив?
 if (param=="2"){
      ethernet.print("<H1>Таблица с кнопкой</H1><br/>");                     // Не хранится в RAM?
      ethernet.respond();     	
   }


Я так понимаю что пока не сработает условие то в RAM не попадает, а если сработало, то ethernet.print отправляет строку в массив(занимая часть RAM) и функцией ethernet.respond(); отправляет накопившиеся данные в массиве на браузер
>> У вас на последнем скриншоте вышло «Sketch size — 5 килобайт из 32 максимум», заметили?
Так это и есть flash usage, разве нет?
Если компилить из консоли средствами тулчайна, можно получить и предполагаемый RAM(SRAM) usage.
Ну либо внутри скетча в нужных местах для дебага в serial текущую занятость оперативки выводить. Вот здесь в самом низу довольно простая функция описана.
позже попробую компельнуть в версии 1.5.2(1.4.0) уже есть расход RAM… проведу следственный эксперимент. :)
скетч-то как раз больше вряд ли станет, а вот оперативная освободится…
вы правы, я как-то привык к своей настройке IDE, которая выводит в лог расход SRAM. А у автора там выводится только размер скетча — он, действительно, не изменится.
Не знал что так можно, спасибо.
Баловался некоторое время назад с ENC28j60 — стабильность хромает из-за кривой реализации tcp/ip. Может, сейчас баги и пофиксили, но все же W5100 в разы лучше, хотя бы потому что для нее есть библа из «коробки» от ардуино.
Согласен… W5100 круче в разы… у нее аппаратный стек, и можно посылать кучу запросов одновременно, но цена соответственно выше… Думаю как для простенького варианта мониторинга или управления достаточно дешёвого 28j60. Хотя наверное актуальнее уже wi-fi модуль за 2-3$. Но для тех кому надо просто и доступно и не дорого думаю в самый раз.
Если уже не спотыкается и аптайм приличный, то сойдет ;)
на W5100 я делал сервер для управления садовым освещением с анализом датчиков движения, сайт на sd карте, моментальное отображение изменений одновременно на всех браузерах, и куча других приятных мелочей… На таком контроллере приятно что то создавать… кстати китайцы начали делать их компактными, но цена пока кусается.
Да, с 28J60 был опыт еще очень давно у меня, не особо удачный и осталось море неприятных впечатлений. WizNet, конечно, потом использовать было прельстиво.
Если цена не кусает, я бы сразу смотрел на WizNet и забыл про 28J60.
Espressif за 3 бакса сейчас очень актуален (особенно с учетом того, что весь веб-сервер и логику можно запилить прямо на нем), но, внезапно, иногда нужен ethernet и вот никак по другому (у меня как раз сейчас «наклевывается» проект, который я думал сделать с esp8266, но в техзадании строго — ethernet, что, в общем-то, в той ситуации у заказчиков пожалуй оправдано).
wi-fi esp8266 местами сыроват, хотя если взять с большим количеством gpio, то можно навешать все на него и написать в нем же прогу и все сведется к 2,7$… Как то делал обзор на него:

Сыроват, да. Но эти черти его пилят и пилят. И это хорошо. В некоторых своих мечтах я радуюсь полностью открытым исходникам либ его СДК. Может быть, через какое-то время так и произойдет.
В этом я согласен… Я запасся разными моделями wi-fi esp8266 и жду :))
Аналогично :)

Я еще хочу, когда появится свободное время, запилить прошивку с поддержкой Pawn (типа как с поддержкой Lua, только лучше :).
Думаю, это было-бы круто, так как сам Pawn — крут, стабилен, универсален и функционален. В некоторых проектах просто неоценимо выручает, и лучше скриптового языка для эмбеддерства, пожалуй, не найти.
Столкнулся с очень неприятной ситуацией, W5100 не работает с дешевыми свичами, пробовал D-Link DES1005A, DES1005, DES1008,Surecom какой-то нифига, линк горит, кадры не ходят, а с Cisco catalyst 2960 работает без проблем, ну еще с парочкой серьезных свичей, кто-нибудь сталкивался?
на TP-LINK D-Link Asus Cisco работает у меня w5100. смотри проблема в опресовке… не каждый свитч автоматически «перекидывает жилки» с А на В.
Говорю же, линк поднимается, вот как это выглядит:
www.youtube.com/watch?v=fzVjnMlayqI
Библиотека с офф. сайта, даже не знаю на что грешить, думал мне такой шилд попался, попросил человека проверить, у него свой шилд и свой dlink, тоже не заработало.
Когда работает в циске, никаких ошибок нет, runts, giants, crc, все в норме.
А не связано это с 10МБит а не 100 :))) была похожая история комп с Гигабиткой не хотел конектить пока вручную не выставил 10МБит… Попробуй к компу и кноуту напрямую…
Все равно не пойму что не так с jpeg :)
Тогда стоит протереть монитор)

jpeg около каждого символа даёт тонны шума, который очень раздражает глаз.
UFO just landed and posted this here
Для SD карты и тому подобного ардуино неплохо справляется… это следующие видео… только пока нарезка… позже публикации…
ethernet для 28J60 github.com/ntruchsess/arduino_uip
я и забыл за такую библиотечку… протестирую отпишусь
вполне можно сделать подключение стиля CSS, который хранится на каком-нибудь сервере, и всех скриптов с картинками. а потом из скрипта аяксом посылать запросы на ардуино, и все.
UFO just landed and posted this here
а в чем проблема с аяксом? зачем проксирование? arduina должна иметь домен, порты проброшены…
UFO just landed and posted this here
Есть CORS, который разрешает кроссдоменный ajax. В вашем случае достаточно отдавать соответствующие заголовки (preflight не нужен, скорее всего)
UFO just landed and posted this here
Меня вполне jcw библиотека устраивает.

Но! сам ENC28j60 периодически виснет.
Поэтому:
— Для инициализации/реинициализации используем пин сброса.
— Отслеживаем программно работоспособность модуля.
UFO just landed and posted this here
Примеры в «примерах» — Github /jcw

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

Завис — хард-ресет модуля и инициализация по новой.

Более продвинутый вариант — использовать таск-менеджер. И работать с модулем в своем «потоке».
Тогда зависший модуль, не вешает основной цикл.
Любопытная статейка… И совершенно никакой пользы. Загрузить пример и немного его подправить — несложно. А вот разобраться, почему библиотека EtherShield не компилируется и ругается на ошибку, когда ей встречается слово «prog_char» — куда увлекательнее.
Угробил пару дней на то, чтоб разобраться с этой ерундой. Понял, что время, которое я потратил, стоит дороже, чем разница в пару баксов между ENC28J60 и W5100.
После активного гугления выяснил, что в исходниках библиотеки надо в объявлении функции uint16_t fill_tcp_data_p заменить const prog_char *progmem_s на const PROGMEM char *progmem_s, вот так:

uint16_t fill_tcp_data_p(uint8_t *buf,uint16_t pos, const PROGMEM char *progmem_s)


после этого, наконец-то, скетч скомпилировался (HelloWorld из примеров библиотеки ETHER_28J60), ардуина стала отвечать на пинг и показывать страничку «Hello World» в броузере.

PS Arduino IDE 1.6.7.
Sign up to leave a comment.

Articles

Change theme settings