вторник, 11 ноября 2014 г.

Uploading Arduino .hex from Netgear Stora

AAAAAAAAA

I've done it. After so much pain. I even do not remmeber all the steps. However:


  • I've compiled usb drivers and ftdi drivers. I have a post about it 
  • I've compiled avrdude 6 on my Netgear Stora. Don't ask how. There was also a lot of pain. But for some reason avrdude 6 worked while v5 still cannot be compiled.
  • I have a daemon which talks to arduino, so to program I have to switch it off
  • Then I faced an issue whatever I tried I receive "avrdude: stk500_getsync(): not in sync". Looks like the issue was with my usb and ftdi drivers - for some reasons they can't help avrdude to negotiate a correct baudrate for my arduino. I tried several and looks like 57600 worked for me. I tried terminal mode like this
/root/avrdude-6.0.1/avrdude -t -v -v -v -v -c arduino -p m328p -b 57600 -P /dev/ttyUSB0

  • But then another issue arised - looks like core version of avrdude cannot properly reset the arduino. There are several tricks on how to do that manually - I'll try them later. Also I think Arduino's version of avrdude can do that, but I have issues compiling it on my Netgear (some Perl issues - nothing too serious can be solved in the future). So I went with another solution - I just reset my USB subsystem and then attach to arduino to upload a sketch. To reset the usb subsistem I'm doing the following:

echo -n "1-0:1.0" > /sys/bus/usb/drivers/hub/unbind
echo -n "1-0:1.0" > /sys/bus/usb/drivers/hub/bind

  •  In the above code IDs of your USB hub could be different, so check them in the folder /sys/bus/usb/drivers/hub/, but I guess on all Storas they should be the same.
  • Then upload the sketch, like that:
/root/avrdude-6.0.1/avrdude -v -v -v -v -c arduino -p m328p -b 57600 -P /dev/ttyUSB0 -D -Uflash:w:/home/arduino/Firmw4_4.cpp.hex
Have a good time with your IoT ;)

среда, 24 сентября 2014 г.

Low power wireless sensor node, using stock arduino

Hi ardu-people,
There are a lot of posts in the Internet about making a low power arduino projects. However most of them assume you have to do it with custom built arduinos using atmega chips, I think it’s a correct approach, BUT it is still possible to do a low power node even on stock parts. Below are some hacks I discovered or confirmed while creating my low power projects.
  • LED lights
    There are a lot of articles about how much power do they really consume and I can only confirm that, even this tiny power led on your Pro Mini or Nano. I used sharp knife to cut the connection to the power led on my Pro Mini and I desoldered leds on all other peripherals such as radio power converter
  • Power down mode
    For my arduino I was using Narcoleptic library, and PowerDown mode for the nrf24l01 radio. For arduino everything worked perfectly, for radio see below
  • Cut power to peripheral devices
    To save some more power we can disable sensors while arduino and radio are sleeping, simple solution is to power up sensors using arduino pins, set pin to HIGH to enable device, LOW to power it down, this worked perfectly for me. If you see issues with measurements, you may need to add a delay after powering a sensor up. More appropriate solution is to use tip120 or something similar to disable/enable power for all sensors at once.
  • Radio nrf24l01 power down issues
    Unfortunately looks like Nfr chip doesn’t like power manipulations, after several cycles of powering it down with arduino pin as a power source as per above while radio is in the powerdown mode, the radio developed some kind of a power leak and started to consume more (~6ma). Radio is functioning properly, but consuming a lot for a sleep period. I’ve understood that it’s consuming power via MOSI line (pin11), the solution was to set all nrf pins to low and to switch MOSI pin to input mode, don’t forget to switch it back to output when powering everything back up.
Stay tuned, I’ll be working with reducing power consumption with relays, coz they are eating a LOT
Written with StackEdit.

вторник, 23 сентября 2014 г.

Покупка лоукостерных билетов lifehack

Предисловие

Опишу коротко как я покупаю билеты в лоу костерах. Для начала несколько базовых тезисов которые мной проверены уже неоднократно


  • Low cost будет дешевле в 90% случаев. Много раз приходил к этому, даже с учётом оставления авто на платной парковки у аэропорта, грин карты, бензина и т.д. Конечно когда надо делать пересадки и при этом ночевать где-то и если нужно долго и неудобно добираться при этих пересадках до аэропорта, особенно если пересадок больше чем одна - то это уже звоночек чтобы посмотреть и на стандартные билеты например из Питера напрямую. Если вы молоды и с вами нет детей то ночёвка и 10ч пребывания в Лондоне с переездом из Гатвига в Станстед могут быть даже интересными, хотя врят ли :)
  • Low cost бывает не только в Финляндии. Сейчас Wizz Air набирает ход и у них очень хорошие предложения из прибалтики, кроме того можно ими очень дёшево полететь из Турку в Польшу а от туда дальше.
  • Ехать до Лаперанты ближе чем кажется. После того как построили ЗСД - то стало гораздо быстрее и комфортнее
  • Одного кабинного чемодана достаточно. Порой бывает трудно в это поверить но даже моя жена которая не может носить одно платье или купальник два дня подряд :) вполне успешно справляется (не знаю каким образом - надо у неё спросить) этим небольшим кабинным чемоданом. Если у нас бывает много покупок "домой" то можно просто купить (или заранее взять с собой) чемодан и докупить багаж к обратному билету - проверено проблем никаких (главное по весу распределить всё правильно)
  • Распечатывайте все подтверждения. Это особенно верно для авиа билетов (а точнее посадочных которые печатаются поcле того как через вебсайт вы проходите check-in), потому как их распечатка в аэропорту может обойтись ОЧЕНЬ дорого.
  • Приезжайте в аэропорт заранее. 2 часа до вылета это стандарт и неоднократно бывало что если забиваешь на это золотое правило попадаешь в неприятные ситуации. Кроме того, правда сейчас это актуально только для Wizz Air - если первым проходишь все проверки и встаёшь в очередь на посадку - можно занять более комфортные места и например занять место ребёнку если для него места не предусмотрено (это правда верно только если самолёт не забит под завязку). Ryanair изменили правила и теперь всем принудительно назначаются места просто по порядку, по-этому для них lifehack другой - регистрируйтесь в самый последний момент - например в ночь перед вылетом, тогда у вас будут места в самом хвосте и если самолёт не полный то сразу за вами будет уйма свободных мест или даже рядов.
  • Если у вас только кабинный багаж - иногда можно не стоять в очереди. В некоторых аэропортах бывают отдельные стойки Ryanair которые занимаются всем кроме регистрации - в них вы можете сделать Visa Check (вам поставят печать что ваш паспорт позволяет путешествовать дальше) и смело идти прямиком на проверку безопасности и на посадку.
  • Детская коляска не только коляска но и 15кг груза :).  Если у вас есть детская коляска да ещё и с чехлом то в неё можно запихать всё что не влезло в кабинный багаж (кстати на ребёнка с местом выделяют отдельный кабинный багаж) - обычно на это смотрят сквозь пальцы, я даже бывало скотчем памперсы и мячик прикручивал - и ничего долетели. Правда есть один негативный момент в коляске - нужно стоять в очереди в регистрацию чтобы коляску положили в багаж, хотя бывает с детьми, особенно маленькими, пропускают вне очереди
  • Разложите все жидкости в пакеты заранее и в доступном месте. Этот lifehack разработала моя жена - теперь у нас никогда не бывает никаких проблем на Security проверках - всё происходит очень оперативно и быстро.

Покупка Билетов

Сейчас я в основном пользуюсь новым и очень хорошим ресурсом skypicker.com - он отличается от остальных тем что может планировать перелёт учитывая пересадки в один или несколько дней и ему можно задавать очень гибкие условия поиска. Я делаю примерно следующее.
From: Radius search (и выбираю радиус с центром где-то в Чудском Озере, чтобы он захватывал Тампере, Турку и Вильнюс с Каунасом, но не Стокгольм (хотя такой вариант тоже возможен если паром не дорог)) (Хотя можно и просто Лапперанту выбрать)


To: Выбираете или страну куда хотите попасть или конкретный город, можно Anywhere если ещё не решили куда :)

Departure: Удобнее всего выбирать неделю от и до когда вы готовы вылететь, вот например я выбрал с 9 по 15 Ноября - я готов куда-нибудь улететь


Return: Тут удобнее всего выбрать длинну отпуска, например - я хочу отдыхать 10-15 дней (лучше выбирать -1 и +1 день от желаемого размера потому что более дешёвое предложение может не попасть хотя оно например на день больше но рано утром прилетаете - то же ведь вариант). Хотя бывает что диапазон дат тоде удобен - например если вы уже знаете с какого по какое число у вас отпуск - в departue выставляете начала отпуска -1 день, + 3-4 дня, в return выставляете дату окончания отпуска -3-4 дня, +1 день
Нажимаем Поиск.
Поскольку у меня было выбрано anywhere - мне показываются различные варианты, кроме всякой разной скандинавии я вижу Париж и Милан за 50 евро с человека, неплохо. Выбираю Милан. Кроме того можно заметить что Skypicker даёт возможность указать email и они уведомят тебя если цена упала ещё ниже, для меня правда эта функциональность почему-то не работала

Когда выбран конкретный город - skypicker даёт список дешёвых вариантов по поиску, вот самый дешёвый вариант для меня из Вильнюса в Милан за 50 евро на человека, до Вильнюса правда далековато (кстати 10-11 часов может не хватить - мы как-то нарвались на ремонт дорог в Литве и чуть не опоздали). Есть вариант из Таллина за 3300 руб на человека - тоже неплохо. Или из Лапперанты (нету на скриншоте) за 80 евро, я скорее всего выбиру Лапперанту потому что не раз уже оттуда летал и ехать недалеко, да и по слухам Эстонская таможня бывает непредсказуема

Покупка

Покупать лучше непосредственно на сайте Авиакомпании ryanair.com или wizzair.com. Уже ввести известные вам из skypicker-а даты вылета выбрать билеты и купить.

Будьте бдительны - задача лоу кост кампаний втюхать вам всё что только можно - отказываемся от страховки (No Travel Insurance), не покупайте всякие чемоданы, место я тоже считаю покупать не обязательно, если у вас только кабинный багаж - багаж обычный вам не нужен (No bags), кстати недавно лоу кост компании разрешили помимо кабинного багажа ещё иметь и небольшую сумку для фотоаппарата или ноутбука например, не ведитесь ни на какие разводки более дешёвого авто в аренду или отелей. Кроме того уже в момент ввода данных кредитки - есть возможность перейти на отдельное окошко конвертации курса и отключить конвертацию (потому что лоу костеры по своему курсу переводят евро в доллары и снимают с вас уже доллары, что как правило дороже чем если с вас снимут Евро напрямую)

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

Когда покупать?
Как правило цены у лоу костеров меняются постоянно (в зависимости от того сколько билетов уже продано). Мне удалось проследить некую закономерность для ryanair - самая низкая цена как правило за 60 или 30 дней до вылета (+/- конечно но в этот период) и как правило с пятницы по субботу, иногда если 30 или 60 дней приходится на воскресенье то например в воскресенье-понедельник. В принципе можно сказать что в одну сторону билет должен быть меньше 50 евро (это Европа за исключением Испании и Португалии и дальней Италии (Сицилия, Рим)), причём в эти вот периоды 30-60 дней, может быть значительно дешевле, вот в примере я нашёл например из лаперанты за 40(если перевести в одну сторону), но не исключено что там билет туда вообще за 20 а обратный 60 - потому что время его скидки ещё не пришло. Самое выгодное покупать билеты туда и обратно отдельно попадая в вышеуказанные коридоры скидок (но даже у меня так не всегда получается :))

P.S.

Кроме Skypicker.com ещё есть удобный skyscanner.com, он менее удобен на мой вкус но имеет больше фичей, более визуален и включает ВСЕ авиакомпании бюджетные и не только, skypicker как я понимаю заточен именно под бюджетные

суббота, 2 августа 2014 г.

Италия, около 6 дней, на машине из Милана.

Съездили на майские праздники в путешествие по северной Италии, летели из Вильнюса, там Wizzair как-то совсем недорого билеты продаёт. В Вильнюсе парковка у аэропорта наши номера не распознаёт, но немного постояв, подумав :) - открывают, бронировать можно через интернет http://www.unipark.lt/ . Ещё лайфхак по Вильнюсу - 10 и даже 11 часов из Питера может не хватить :) Ну а дальше описание маршрута, он не по дням а по перемещениям:


  1. Машина в Бергамо и до отеля в Падуе, хороший отель - это миниквартира, есть стиральная машина даже и большая общая кухня, утюг http://www.booking.com/hotel/it/b-b-brandolese.en-gb.html?sid=38ea3f5e30b3a0743c9546118c2d1539;dcid=2
  2. Венеция (тут надо отдельный пост :)), из Венеции в Верону, в Вероне тоже хороший отель, не в центре, но до центра 5 минут на машине, в Вероне красивый «Колизей» там кстати устраивают концерты классической музыки, билеты нам сказали можно купить через интернет. Ещё местный прохладительный напиток из шампанского, кампари и сока - очень освежает. Отель гардения http://www.booking.com/hotel/it/gardenia-verona.en-gb.html?sid=38ea3f5e30b3a0743c9546118c2d1539;dcid=2
  3. Из Вероны в Тоскану, в Монтекатини Терме, там жили два дня, на поезде ездили во Флоренцию (10 евро), там очень просто купить билет на поезд прямо на станции, городок маленький и там всё близко. Бесплатная парковка в Монтекатини на выезде из города
    .Отель, осторожно, не все говорят по английски Smiling face with smiling eyes http://www.booking.com/hotel/it/savoia-campana.en-gb.html?sid=38ea3f5e30b3a0743c9546118c2d1539;dcid=2
  4. Во Флоренции рекомендуем креативное пространство на втором этаже крытого рынка, мы случайно туда попали но там есть вся местная кухня и вино, готовят прямо при тебе. Местный деликатес - лампредотта - на любителя :)
  5. Из Флоренции обратно в Монтекатини, покупались в термальных бассейнах, спросили ближайший на ресепшене.
  6. Из Монтекатини на машине в Пиза, там оставили машину на улице, было воскресенье, по этому бесплатно и пошли пешком смотреть на башню, там сейчас пускают наверх, билет лучше купить сразу, там пускают по расписанию.
  7. Из Пиза в чинкве терре, там можно на машине доехать только до Леванто или Монтероссо, машину можно оставить у вокзала в Леванто, в Монтероссо прямо на пляже и на поезде поехать в Вернацца - это самый красивый городок из 4х. Только нужно очень чётко проверить расписание поездов - не все останавливаются
  8. Потом мы поехали в городок между Миланом и Бергамо - Моццо, вот отель, он очень хороший и по цене и качеству, особенно если на машине http://www.booking.com/hotel/it/bes-hotel-bergamo-west.en-gb.html?sid=38ea3f5e30b3a0743c9546118c2d1539;dcid=2
  9. Отсюда ездили в Милан и на шоппинг в бутики, самый удобный и выгодный шоппинг в serravalle, правда это немного вдалеке от самого Милана. http://www.mcarthurglen.com/it/serravalle-designer-outlet/it

вторник, 10 декабря 2013 г.

Talking to Arduino in PHP via USB in Linux

I'm really proud of myself. I was able to comeup with the solution for the problem which is being discussed in the internet a lot - how to properly talk to arduino from a PHP script, actually from any kind of script. The problem is that Arduino resets itself when you open a connection, this is not OK and most of people just apply some harware hacking to disable this behaviour. I wanted a software solution.

Also for some reasons I cannot read arduino output using "php_serial.class" code. SO, here is my alternative solution:


  • I've created a deamon which redirects arduino serial output to a log file. This daemon can be started and stopped, on re-start it will re-write the logfile. I've done this for maintenance purposes - the intention is to clean the log file periodically, so that it doesn't grow to Gigabytes which ultimately could affect the performance of the overall solution(so, not because I don't have enough storage - I'm doing this on Netgear STORA after all :)). I've created a daemon script and an init script for this daemon. The code for the daemon script is easy "cat /dev/ttyUSB0 > /home/com_log.txt &" and that's it. Init script is more complex - you have to properly remove the log file and kill the cat process. You can download the code here
  • Once I have a daemon - reading Arduino from any places without resetting it - is super easy. But you have to read last lines if you want latest output. I've created a script which sends to Arduino a command to print the updated information about temperature and humidity sensors, then the script reads new values from the log file and saves them into the MySQL database. Here is the code
  • The script above is added to the crontab to collect temperature/humidity samples every 10 minutes
  • Then I've created a page using Google's Charts JSAPI examples with chart for each counter. Code is here.
This is how it looks like (there is still some work to do with date picker, correct dates on axis, etc.)

Now my Stora is a temperature station :) and since I have relay connected to the Arduino I can adjust temperature by switching heating on or off, but this part is later... stay tuned.

BTW, here is an Arduino scetch - it's a modified version of arduino code from UberFridge project by some awesome guy.

P.S. Please forgive me for code quality - I'm doing this for myself rather than for opensource community :) If someone want to polish the code and make it available on some communities - you are absolutely free to do this, I would appreciate a link to my blog though.


понедельник, 2 декабря 2013 г.

Talking to Arduino from Netgear Stora via USB

Weeks of investigations and code compiling and finally I found that the answer is quite simple and elegant.

  • Download original(or whatever is installed in your Stora) Kernel source. Original one can be found here http://www.openstora.com/wiki/index.php?title=Source_Code
  • Extract kernel sources from stora sources.
  • (Optional - depends on compiler that you have) I had gcc from optware ipkg installation, so I had to change the Makefile - otherwise 'make menuconfig' will tell you that mixed explicit and implicit rules.
    • Locate all places where you see something like this "$somthing: something:"
    • Split each variable before colon into the separate line and duplicate code from one into the empty one.
    • Run 'make menuconfig' if there is still "mixed implicit...bla-bla-bla" error - check the line number and do the separation trick above again
  • Run 'make menuconfig'. Do no uncheck anything(you need the kernel in it original configuration) - you need to enable experimental drivers/code (because ftdi_sio is expiremental in Stora code) and then go to drivers > USB > USB serial, enable generic and core usbserial drivers as well as FTDI driver (ftdi_sio), close and save the config
  • Run 'make modules ARCH=arm'
  • Copy usbserial.ko and ftdi_sio.ko where you store other drivers.
  • I think I also added both drivers into modules.conf or whatever is the procedure for device drivers, 'depmod -a', you know... :) this kind of stuff
  • Also I did the trick with udev rules (http://playground.arduino.cc/Linux/All), but I'm not sure it was necessary.
  • Plugin the arduino board - do modprobe usbserial, ftdi_sio if necessary (if they are not loaded already) and here you go... you can talk to arduino(it was /ttyUSB0 in my case)
P.S. After everything worked I was using screen command to test everything - it works very well with my ardu. But you can find other examples(http://playground.arduino.cc/Interfacing/LinuxTTY)

суббота, 23 ноября 2013 г.

error expected '=', ',', ';', 'asm' or '__attribute__' before

Compiling avrdude on ARM Netgear Stora to be able to work with and program Arduino board.

Solved a lot of other quite complicated dependency issues, had to compile some of dependencies myself and then stuck with this error in the subject for almost half a day.

error expected '=', ',', ';', 'asm' or '__attribute__' before

WTF!
I had 'OD' symbos in the beginning of the .c file which had includes to the .h files which failed with the error. OMG, how the hell on earth did it get there?

Anyway, for those who find my post - check the source file which has includes to the header files which are failing, then check preceeding code - something is already wrong when compiler goes into the header files.