Nrf24l01+

maksim
Offline
Зарегистрирован: 12.02.2012

Сами почитайте. Нет не получается. Тогда по вашей логике и троллейбус и автобус - одно и тоже.

В первом случае меш-сеть, во втором нет. То что в меш-сети используется маршрутизация (как в z-wave, zigbee), как и во втором случае, не означает что участники сети не общаются между соседними точками. Во втором же случае используется маршрутизация, но общение с соседними точками отсутствует. И да, если добавить смену маршрута, то получится меш-сеть, а без такового это не меш-сеть.

axill
Offline
Зарегистрирован: 05.09.2011

maksim пишет:

Сами почитайте. Нет не получается. Тогда по вашей логике и троллейбус и автобус - одно и тоже.

В первом случае меш-сеть, во втором нет. То что в меш-сети используется маршрутизация (как в z-wave, zigbee), как и во втором случае, не означает что участники сети не "общаются" между соседними точками. Во втором же случае используется маршрутизация, но общение с соседними точками отсутствует. И да, если добавить смену маршрута, то получится меш-сеть, а без такового это не меш-сеть.

перевожу

Цитата:

Mesh networking (topology) is a type of networking where each node must not only capture and disseminate its own data, but also serve as a relay for other nodes, that is, it must collaborate to propagate the data in the network.

здесь написано, что отличительной чертой mesh сети является то, что отдельные устройства этой сети пропускают через себя не только свои данные, но и данные для другиз устройств

под это определение попадают обе сети

смена маршрута (self healing) не обозначена как обязательный атрибут mesh сети

сравнение с трамваями не корректно, давайте быть конструктивными и ссылаться на определения, эмоции здесь не в помощь, а еще главное чтобы спор не стал самоцелью))

собственно зачем нужна mesh сеть? чтобы покрыть пространство значитлеьно больщее чем расстояние устойчивого соединения между двумя устройствами сети. По-моему простой вариант  manicbug с этой целью справляется

но если кто-то из уважаемых форумчан предложит библиотеку с полными аттрибутами mesh сети включая self-healing, то уверен общественность будет весьма благодарна

maksim
Offline
Зарегистрирован: 12.02.2012

Читайте по русски что такое меш http://ru.wikipedia.org/wiki/Mesh-%D1%81%D0%B5%D1%82%D0%B8 под это определение подпадает только первый случай. И еще раз повторяю - сложная топология не есть меш-топология.

axill
Offline
Зарегистрирован: 05.09.2011

maksim пишет:

Читайте по русски что такое меш http://ru.wikipedia.org/wiki/Mesh-%D1%81%D0%B5%D1%82%D0%B8 под это определение подпадает только первый случай. И еще раз повторяю - сложная топология не есть меш-топология.

я предпочитаю читать первоисточники, а они как правило на английском, ваш перевод весьма фривольный - он не соответствует по смыслу оригиналу

но мы вправе осталься каждый при своем

ваши предложение по сути какие?

ну не mesh сеть, допустим, что дальше?

maksim
Offline
Зарегистрирован: 12.02.2012

UPD: Кто успел - тот успел.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

я уже боюсь даже представить как вы будете обсуждать слово КОРАБЛЬ (оно ж сколько разных смыслов и значений, вам на пару лет хватит разбиратся) ... я так понимаю вы нашли друг друга..

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

кстати на буржуйском форуме видел какие то доработки, как разберусь, отчитаюсь...

Bulatovor
Offline
Зарегистрирован: 01.03.2013

кинь ссылочку -вместе удобнее разбираться

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013
axill
Offline
Зарегистрирован: 05.09.2011

пытаюсь написать шлюз из сети nrf24 в ethernet на базе arduino mega2560 + nrf24l01p + arduino ethernet shield

получается, что оба модуля радио и ethernet на железном SPI

как их правильно переключать?

у NRF24 есть CE пин, правильно понимаю, что перед обращением к ethernet туда нужно прописать логический ноль, чтобы NRF24 не мешал общаться с etherne?

а как отключать ethernet? прошерстил библиотеку ethernet и не нашел как выставить CE для wiznet чипа в состояние "выключено"

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

axill пишет:

а как отключать ethernet? прошерстил библиотеку ethernet и не нашел как выставить CE для wiznet чипа в состояние "выключено"

pin 10  ethernet 

pin 4  SD card

axill
Offline
Зарегистрирован: 05.09.2011

Я правильно понимаю, что перед тем как запустить код для радиомодуля мне нужно выставить нули на 4м и 10м пинах?

а еще вопрос. В примерах для радиомодуля есть только отдельно скетч для трансивера и отдельно для ресивера. Мне в одном скетче нужно и то и то. Есть какая то логика переключения с приема на передачу и обратно? Например нужно ли закрывать все pipes на чтение перед передачей? В примере трансивера они закрываются в процедуре setup

mihart
Offline
Зарегистрирован: 14.05.2013

Когда гляну код библиотеки скажу точно, но думаю, что pipes закрывать нужно.

А вот то, что в примере они закрываются в setup это ничего, ведь по сути arduino setup() и loop() при компиляции кода преобразовывает в такой:

void main() {

setup();

do {

loop();

} while (1);

}

 

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

axill пишет:

Я правильно понимаю, что перед тем как запустить код для радиомодуля мне нужно выставить нули на 4м и 10м пинах?

а еще вопрос. В примерах для радиомодуля есть только отдельно скетч для трансивера и отдельно для ресивера. Мне в одном скетче нужно и то и то. Есть какая то логика переключения с приема на передачу и обратно? Например нужно ли закрывать все pipes на чтение перед передачей? В примере трансивера они закрываются в процедуре setup

В примерах есть пинговый сервер.

там же есть еще пинговый клиент

/**
 * An Mirf example which copies back the data it recives.
 *
 * Pins:
 * Hardware SPI:
 * MISO -> 12
 * MOSI -> 11
 * SCK -> 13
 *
 * Configurable:
 * CE -> 8
 * CSN -> 7
 *
 */

#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>

void setup(){
  Serial.begin(9600);
  
  /*
   * Set the SPI Driver.
   */

  Mirf.spi = &MirfHardwareSpi;
  
  /*
   * Setup pins / SPI.
   */
   
  Mirf.init();
  
  /*
   * Configure reciving address.
   */
   
  Mirf.setRADDR((byte *)"serv1");
  
  /*
   * Set the payload length to sizeof(unsigned long) the
   * return type of millis().
   *
   * NB: payload on client and server must be the same.
   */
   
  Mirf.payload = sizeof(unsigned long);
  
  /*
   * Write channel and payload config then power up reciver.
   */
   
  Mirf.config();
  
  Serial.println("Listening..."); 
}

void loop(){
  /*
   * A buffer to store the data.
   */
   
  byte data[Mirf.payload];
  
  /*
   * If a packet has been recived.
   *
   * isSending also restores listening mode when it 
   * transitions from true to false.
   */
   
  if(!Mirf.isSending() && Mirf.dataReady()){
    Serial.println("Got packet");
    
    /*
     * Get load the packet into the buffer.
     */
     
    Mirf.getData(data);
    
    /*
     * Set the send address.
     */
     
     
    Mirf.setTADDR((byte *)"clie1");
    
    /*
     * Send the data back to the client.
     */
     
    Mirf.send(data);
    
    /*
     * Wait untill sending has finished
     *
     * NB: isSending returns the chip to receving after returning true.
     */
      
    Serial.println("Reply sent.");
  }
}

 

axill
Offline
Зарегистрирован: 05.09.2011

библиотека Mirf возможно маскирует все эти детали. Я пытаюсь писать на nrf24l01p библиотеке, которая сделана на базе application note с сайта производителя чипа. Пока придерживаюсь ее, потому, что она работает как с ардуино, таки и с atmelstudio и еще может работать с любым STM.

есть два скетча - один отсылает посылки, второй принимает.

по отдельности работает, но не получается скомбинировать. Правда сверху накладывается еще ethernet shield который тоже работает через железный SPI. все это у меня на ардуино 2560. второй мк - голый 328 на STK600.

так вот код на atmega2560 как ни странно даже без отключения/включения nrf24/wiznet работает одновременно и прием сообщений по сети nrf24 и прием запросов по сети из браузера в виде http запросов - я могу видеть как в перемешку в Serial сыпятся сообщения как о приеме nrf24 так и об обработке HTTP

но как только я пытаюсь отправить сообщение NRF24 - оно не уходит, все зависает на этом цикле во второй строке после отправки сообщения:

      nrf24l01p_write_tx_payload((uint8_t*)&nrf24net_message_tobesent, sizeof(nrf24net_message_tobesent));
      do {} while (!(nrf24l01p_get_irq_flags() & (1 << NRF24L01P_IRQ_TX_DS)));
      nrf24l01p_clear_irq_flag(NRF24L01P_IRQ_TX_DS);      

 

axill
Offline
Зарегистрирован: 05.09.2011

1. пока не удалось мне победить

толи с модулем nrf24 не правильно общаюсь толи ethernet мешает

посмотрел описание etehrnet shield. там сказано, что SS использован не железный, а софтверный, но чтобы SPI работал жеденый SS (53 пин на меге) надо просто настроить на OUTPUT. В то же время SS модуля NRF24 я подключил именно к 53 пину. Так нормально? CE модуля nrf24 у меня поключег к 9-му пину

все-таки как правильно переключать платы? нужно ли заботиться о 10-м пине (SS для ethernet shield) или стандартная библиотека ардуины сделает это за меня?

как быть с пинами SS и CE nrf24? на них прописывать LOW  пока работаю с Ethernet shield?

2. совсем не зависимый от этого вопрос. я правильно понимаю, что максимальный размер payload при отправке сообщения через nrf24 это 32 байта? т.е. если мне нужно отправлять пакеты большего размера - я должен их бить по 32 байта?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

axill пишет:

 В то же время SS модуля NRF24 я подключил именно к 53 пину. Так нормально? CE модуля nrf24 у меня поключег к 9-му пину

если вы почитаете еще раз, то на 53 пине сидит SD карточка... и его вообще не рекомендуют использовать..

у вас WebServer работает нормально? 

вообще лучше будет если вы распишете распиновку... 

вообще впечатление что не хватает питания.. радио на передаче есть его с дикой силой... кстати у передатчика есть ограничение по времени работы, иначе он накрывается большой медной посудиной...

проверить не могу, ибо не придумал откуда взять 3.3 вольта, заказал запчасти, жду когда привезут.

Nixoid
Nixoid аватар
Offline
Зарегистрирован: 16.09.2011

Puhlyaviy пишет:

проверить не могу, ибо не придумал откуда взять 3.3 вольта, заказал запчасти, жду когда привезут.

 

Cd/DVD привод разбери старый - там AMS117 на 3,3 вольта как минимум пара есть.

Прошу прощения за оффтоп.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Nixoid пишет:

Cd/DVD привод разбери старый - там AMS117 на 3,3 вольта как минимум пара есть.

Прошу прощения за оффтоп.

спасибо за подсказку, старого привода не нет :( ... уже и так разобрал все что можно...

просто все ведет к тому что проблема с питанием. ибо вебсервер и карта памяти функционируют нормально...

завтра буду думать откуда ковырнуть AMS117

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

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

там вроде бы народ пришел к вводу

So, effectively it's just saving the content of the two SPI registers (SPCR and SPSR) after the initialization of each library and resetting them to that value before every call to one of the library's functions.

как то так вот...иначе получается последний проинициализировавшийся перехватывает канал и сидит на нем...

axill
Offline
Зарегистрирован: 05.09.2011

Puhlyaviy пишет:

если вы почитаете еще раз, то на 53 пине сидит SD карточка... и его вообще не рекомендуют использовать..

ничего удивительного, что там сидит и SD - 53-1 пин это 4-й провод железного SPI mega2560. Они все втроем сидят еще и на MISO, MOSI, SCK - именно к этим пинам меги у меня подклбчел радиомодуль, так что с подключением все однозначно вроде как

Цитата:

у вас WebServer работает нормально? 

да, работает без проблем

Цитата:

вообще лучше будет если вы распишете распиновку... 

MOSI, MISO, SCK, SS пины радиомодуля подключены к таким же выводам atmega2560.

CE пин радиомодуля подключен к 9-му пину ардуины

Цитата:

вообще впечатление что не хватает питания.. радио на передаче есть его с дикой силой... кстати у передатчика есть ограничение по времени работы, иначе он накрывается большой медной посудиной...

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

Цитата:

проверить не могу, ибо не придумал откуда взять 3.3 вольта, заказал запчасти, жду когда привезут.

поставьте 3-4 диода 4148 от 5 вольт - получите 3-3,6в

axill
Offline
Зарегистрирован: 05.09.2011

Puhlyaviy пишет:

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

важно не путать старую версию arduino ethernet с новой

если почитать даташит на wiznet5100 то можно обнаружить, что у этого чипа есть баг - не достаточно снять HIGH с chip select, нужно еще явным образом отключать wiznet подачей сигнала на другой пин чипа. Иначе wiznet не будет давать МК общаться с другими устройствами на SPI

В последней версии arduino shield сделана примочка, рекомендованная в даташите - установлен инвертор между CS и тем самым специальным пином, поэтому когда мы подаем LOW на CS wiznet гарантированно отключается от SPI. Maniacbug кстати тое пишет, что у него ethernet и nrf24 работают без проблем на одном SPI, но правда примеров такого скетча у него на сайте нет

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Ну что я тогда могу вам предложить :)

Попробуйте не инициализировать ethernet.. а просто запустить радио и посмотреть будет ли оно работать само по себе.. с утановленым но не инициализированым ethernet :)

axill
Offline
Зарегистрирован: 05.09.2011

Puhlyaviy пишет:

Ну что я тогда могу вам предложить :)

Попробуйте не инициализировать ethernet.. а просто запустить радио и посмотреть будет ли оно работать само по себе.. с утановленым но не инициализированым ethernet :)

спасибо, так и планирую - отладить скетч на ардуинке без ethernet

буду признателен если поясните роль выводов модуля SS и CE. Какой за что отвечает?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

http://www.nordicsemi.com/kor/Products/2.4GHz-RF/nRF24L01P

тут вот кстати валяется KIT, внутри есть даже исходники прошивки... чип то довольно старый.. если есть желание выжать с него все соки то наверно нужно начинать с прошивки...

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

CE слушаем или не слушаем эфир.. причем когда слушаем то LOW

CSN включаем и выключаем SPI 

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

axill
Offline
Зарегистрирован: 05.09.2011

Puhlyaviy пишет:

CE слушаем или не слушаем эфир.. причем когда слушаем то LOW

CSN включаем и выключаем SPI 

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

вот тут может собака и зарылась. в моец библиотеке CE управляется скетчем. наверно надо rf24 взять и адаптировать под голый avr. не хочу привязываться к ардуино

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

не думаю что сабака рылась в этом...собака рылась в ethernet шильде... причем выглядит так что его библиотека под себя подгребла все.

axill
Offline
Зарегистрирован: 05.09.2011

Puhlyaviy пишет:

не думаю что сабака рылась в этом...собака рылась в ethernet шильде... причем выглядит так что его библиотека под себя подгребла все.

было бы так RX бы тоже не работало

хотя с другой стороны посмотрел примеры RX TX к моей библиотеке - в обоих CE выставляется в HIGH в setup() и большее не меняется, как-то не логично

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Как продвигается решение проблемы?

axill
Offline
Зарегистрирован: 05.09.2011

Puhlyaviy пишет:

Как продвигается решение проблемы?

нашел неплохую независимую библиотеку для AVR https://github.com/kehribar/nrf24L01_plus и порт RF24 на AVR https://github.com/jaseg/RF24/tree/avrlibc

но что-то устал топтаться на месте, сделаю паузу - сейчас доделываю проект который уже разработан, делал сегодня плату, сейчас паяю - будет автоматизация старта измельчителя на кухне с автоматической подачей воды и контролем заклинивания. Хотел было заменить attiny13  и поставить mega8 чтобы на будущее сразу припаять nrf24 но решил пока от этого отказаться )) а то еще два дня улетят. После этого вернусь и думаю доделаю шлюз и можно будет делать устройства, решил сделать часы у которых не будет кнопок управления и не будет бакапа по питанию - они будут тупо синхронизироваться через nrf24 с часами из интернет, а на будущее думаю сделать рассылку broadcast сообщение скажем ежедневно на синхронихацию часов по всему дому

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

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

axill
Offline
Зарегистрирован: 05.09.2011

с интересом побежал смотреть апдейт, но не нашел изменений - последние более года назад. откуда информация об изменениях?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

axill пишет:

с интересом побежал смотреть апдейт, но не нашел изменений - последние более года назад. откуда информация об изменениях?

из информации о последних изменениях файлов и плюс оно все нормально работает теперь :)

axill
Offline
Зарегистрирован: 05.09.2011

мы в разные места смотрим? здесь ничего не менялось больше года https://github.com/maniacbug/RF24/

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

axill пишет:

мы в разные места смотрим? здесь ничего не менялось больше года https://github.com/maniacbug/RF24/

https://github.com/stanleyseow/RF24

:)

и в догонку

https://github.com/RWSDev/RF24Network

axill
Offline
Зарегистрирован: 05.09.2011

ясно, но это клон и кстати менялся он уже 4 месяца назад

клонов много, я другой выше приводил

так уж получилось, что maniacbug сделал самую грамотную библиотеку

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

axill пишет:

ясно, но это клон и кстати менялся он уже 4 месяца назад

клонов много, я другой выше приводил

так уж получилось, что maniacbug сделал самую грамотную библиотеку

ну если так, то конечно продолжайте изыскания почему же оно не работает.. :)

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

я там ниже добавил КЛОН меш нетворка :), но вы конечно можете пользоватся грамотным оригиналом :) хозяин как говорится барин 

axill
Offline
Зарегистрирован: 05.09.2011

да нет я не привередничаю, правда )) спасибо за ссылки

если посмотрите мои посты выше то увидите, что я RF24 не пользовался еще вообще )

а склонами сложность в том, что их много - запутаться можно, как вы в них разбираетесь?)

улучшенный mesh пробовали?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

axill пишет:

улучшенный mesh пробовали?

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

Меш пока  пробовал между 2 юнитами.. ибо что то сразу не подумал и заказал всего 2 меги, сейчас жду еще парочку... 

пока это все выглядит  как мечта пьяного электрика

axill
Offline
Зарегистрирован: 05.09.2011

А где карту проектов посмотреть? Я этим ресурсом раньше не пользовался

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

axill пишет:

А где карту проектов посмотреть? Я этим ресурсом раньше не пользовался

в каждом проекте есть закладка NETWORK это и есть карта

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

ну что колега, как далеко продвинулись ваши изыскания?

axill
Offline
Зарегистрирован: 05.09.2011

Дайте время - заканчиваю проект автоматизации измельчителя. Столкнулся со сложной логикой измерения переменного тока на acs712. Но точно хочу иметь возможность отлаживать проекты с радиомодулями в atmel studio. Надо еще научиться скетчи ардуино в ней отлаживать. Отладка это сказка - вчера прямо из студии менял состояние портов МК, очень помогает разбираться

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

axill пишет:

Дайте время - заканчиваю проект автоматизации измельчителя. 

А вы знаете толк в извращениях...

Кстати самая последняя версия меш сети работает вполне себе нормально в плане автоматического построения маршрутов...

axill
Offline
Зарегистрирован: 05.09.2011

Puhlyaviy пишет:

А вы знаете толк в извращениях...

Кстати самая последняя версия меш сети работает вполне себе нормально в плане автоматического построения маршрутов...

это не то, о чем вы подумали ))

хорошо что работает. а адресация изменилась или осталась в логике maniacbug?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

ну в той версии что есть у меня.. адресация проста до безумия... присваиваете номер  каждому юниту... и просто в заголовке указываете кому сообщение... и теоретически оно сам прыгает до адресата... пока не проверял как оно прыгает..

VLADONix
Offline
Зарегистрирован: 11.06.2013

Всем привет. Пожалуйста помогите написать код (если не сложно с очень подробными пояснениями) для отправки показаний несколких потенциометров с одного arduino на другой через nrf24l01. Буду очень признателен.

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

Нашол несколько библиотек для nRF24L01+

RF24

+ NRF24E расширеный класс для RF24

MiRF с офицального сайта

rf24HQ работа с потоками

Хочется узнать какой лучше? Кто с какими работал и на какие "грабли" наступал?

Купил в китае 4 модуля с трансивером(усилитель) до 1000м+внешняя антена(как на роутерах) и 2 простых с антеной на плате.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

видимо 4 страницу дописываем, а народу оно нафиг не нада читать.. можно еще раз спросить..прям как в том старом анекдоте

чукча не читатель, чукча писатель, аднака!

Casper17
Offline
Зарегистрирован: 21.06.2013

Подскажите пожалуйста какие библиотеки лучше и проще использовать для этого модуля, что бы организовать сбор информации с нескольких устройств, а так же отправлять на них команды. Планируется организовать один главный блог на Меге и 2-3 устройства с дачиками. Если подскажите уже готовый код с хорошими пояснениями буду очень благодарен вам.