<?xml version="1.0"?>
<rss version="2.0"><channel><title>Latest Files</title><link>https://it4it.club/files/</link><description>Latest Files</description><language>en</language><item><title>[esp8266] &#x411;&#x438;&#x431;&#x43B;&#x438;&#x43E;&#x442;&#x435;&#x43A;&#x430; smartBlink, &#x440;&#x435;&#x430;&#x43B;&#x438;&#x437;&#x443;&#x435;&#x442; &#x443;&#x43C;&#x43D;&#x43E;&#x435; &#x443;&#x43F;&#x440;&#x430;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x435; &#x448;&#x442;&#x430;&#x442;&#x43D;&#x44B;&#x43C; &#x441;&#x432;&#x435;&#x442;&#x43E;&#x434;&#x438;&#x43E;&#x434;&#x43E;&#x43C;, &#x447;&#x442;&#x43E; &#x43F;&#x43E;&#x437;&#x432;&#x43E;&#x43B;&#x44F;&#x435;&#x442; &#x434;&#x43E;&#x431;&#x430;&#x432;&#x438;&#x442;&#x44C; &#x438;&#x43D;&#x434;&#x438;&#x43A;&#x430;&#x446;&#x438;&#x44E; &#x441;&#x43E;&#x441;&#x442;&#x43E;&#x44F;&#x43D;&#x438;&#x44F; &#x432;&#x430;&#x448;&#x435;&#x439; &#x43F;&#x440;&#x43E;&#x433;&#x440;&#x430;&#x43C;&#x43C;&#x44B; &#x438;&#x43B;&#x438; &#x43C;&#x438;&#x43A;&#x440;&#x43E;&#x43A;&#x43E;&#x43D;&#x442;&#x440;&#x43E;&#x43B;&#x43B;&#x435;&#x440;&#x430;.</title><link>https://it4it.club/files/file/11-esp8266-biblioteka-smartblink-realizuet-umnoe-upravlenie-shtatnym-svetodiodom-chto-pozvolyaet-dobavit-indikaciyu-sostoyaniya-vashey-programmy-ili-mikrokontrollera/</link><description><![CDATA[
<p>
	Основная задача библиотеки, это добавление индикации состояния Вашей программы или микроконтроллера. Отображение состояния производится посредством светодиода. Что самое важное, работа библиотеки через прерывание, это позволяет ей поддерживать индикацию даже в то время, когда выполняется длительный код основной программы. Например, Вы можете использовать её для отображения в каком режиме сейчас работает WiFi микроконтроллера, STA или AP и т.д. Или ход выполнения какой-либо операции, например, передача данных на внешний сервер.
</p>

<p>
	Подключение библиотеки
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_5457_9" style="">
<span class="com">#include</span><span class="pln"> </span><span class="str">&lt;smartBlink.h&gt;</span></pre>

<p>
	Чтобы инициализировать управление светодиодом необходимо создать объект, через который мы буем задавать режимы работы индикации.
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_5457_11" style="">
<span class="pln">smartBlink</span><span class="pun">::</span><span class="pln">smartBlink</span><span class="pun">(</span><span class="pln">byte gpio</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">bool</span><span class="pln"> on </span><span class="pun">=</span><span class="pln"> LOW</span><span class="pun">);</span></pre>

<p>
	Объекту необходимо передать два параметра, первый это номер порта, на котором находится светодиод, а второй это уровень логического сигнала, который заставит светодиод работать. Сигнал может быть низким (<strong>LOW</strong>) или высоким (<strong>HIGH</strong>), это зависит от схемотехники подключения светодиода.
</p>

<p>
	Например, штатный светодиод модуля <strong>ESP12</strong>, использующий <strong>GPIO2</strong> (порт <strong>2</strong>) можно объявить следующим образом.
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_5457_13" style="">
<span class="com">#define</span><span class="pln"> led2_pin </span><span class="lit">2</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> led2_on_signal LOW

smartBlink led2</span><span class="pun">(</span><span class="pln">led2_pin</span><span class="pun">,</span><span class="pln"> led2_on_signal</span><span class="pun">);</span></pre>

<p>
	Теперь можно в основной программе использовать метод устанавливающий какой режим индикации использовать.
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_5457_15" style="">
<span class="pln">smartBlink</span><span class="pun">::</span><span class="pln">setMode</span><span class="pun">(</span><span class="typ">mode_t</span><span class="pln"> mode</span><span class="pun">);</span></pre>

<p>
	Например, зададим режим светодиода <strong>led2</strong> в котором светодиод будет давать одну короткую вспышку раз в секунду.
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_5457_17" style="">
<span class="pln">led2</span><span class="pun">.</span><span class="pln">setMode</span><span class="pun">(</span><span class="pln">smartBlink</span><span class="pun">::</span><span class="pln">mode_flash1</span><span class="pun">);</span></pre>

<p>
	Режимов работы может быть несколько.
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_5457_19" style="">
<span class="pln">led2</span><span class="pun">.</span><span class="pln">setMode</span><span class="pun">(</span><span class="pln">smartBlink</span><span class="pun">::</span><span class="pln">mode_off</span><span class="pun">);</span><span class="pln">
led2</span><span class="pun">.</span><span class="pln">setMode</span><span class="pun">(</span><span class="pln">smartBlink</span><span class="pun">::</span><span class="pln">mode_flash1</span><span class="pun">);</span><span class="pln">
led2</span><span class="pun">.</span><span class="pln">setMode</span><span class="pun">(</span><span class="pln">smartBlink</span><span class="pun">::</span><span class="pln">mode_flash2</span><span class="pun">);</span><span class="pln">
led2</span><span class="pun">.</span><span class="pln">setMode</span><span class="pun">(</span><span class="pln">smartBlink</span><span class="pun">::</span><span class="pln">mode_flash3</span><span class="pun">);</span><span class="pln">
led2</span><span class="pun">.</span><span class="pln">setMode</span><span class="pun">(</span><span class="pln">smartBlink</span><span class="pun">::</span><span class="pln">mode_flash4</span><span class="pun">);</span><span class="pln">
led2</span><span class="pun">.</span><span class="pln">setMode</span><span class="pun">(</span><span class="pln">smartBlink</span><span class="pun">::</span><span class="pln">mode_burn</span><span class="pun">);</span><span class="pln">
led2</span><span class="pun">.</span><span class="pln">setMode</span><span class="pun">(</span><span class="pln">smartBlink</span><span class="pun">::</span><span class="pln">mode_inhalf</span><span class="pun">);</span></pre>

<p>
	Чтобы вернуть предыдущий режим индикации для ранее объявленного светодиода led2 используйте следующий метод
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_4327_5" style="">
<span class="pln">led2</span><span class="pun">.</span><span class="pln">previous</span><span class="pun">();</span></pre>

<p>
	Благодаря работе библиотеки через прерывания по таймеру, индикация будет работать даже в тех случаях, когда выполняется долгий код.
</p>

<p>
	С библиотекой идут несколько примеров.
</p>
]]></description><guid isPermaLink="false">11</guid><pubDate>Mon, 10 Dec 2018 07:28:04 +0000</pubDate></item><item><title>[esp8266] &#x411;&#x438;&#x431;&#x43B;&#x438;&#x43E;&#x442;&#x435;&#x43A;&#x430; Cron, &#x440;&#x435;&#x430;&#x43B;&#x438;&#x437;&#x443;&#x435;&#x442; &#x43F;&#x43B;&#x430;&#x43D;&#x438;&#x440;&#x43E;&#x432;&#x449;&#x438;&#x43A; &#x437;&#x430;&#x434;&#x430;&#x447; &#x434;&#x43B;&#x44F; &#x43F;&#x435;&#x440;&#x438;&#x43E;&#x434;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x43E;&#x433;&#x43E; &#x432;&#x44B;&#x43F;&#x43E;&#x43B;&#x43D;&#x435;&#x43D;&#x438;&#x44F; &#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x441;&#x43A;&#x438;&#x445; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x439;.</title><link>https://it4it.club/files/file/10-esp8266-biblioteka-cron-realizuet-planirovschik-zadach-dlya-periodicheskogo-vypolneniya-polzovatelskih-funkciy/</link><description><![CDATA[
<p>
	Основная задача библиотеки, это вызов пользовательских функций через установленный интервал времени. Библиотека работает по схожему принципу с широко известной программой Cron распространяемой в составе UNIX систем. От этой утилиты библиотека и унаследовала название.
</p>

<p>
	Библиотека работает исходя из принципов однопоточного выполнения кода в микроконтроллере. Когда обработчик библиотеки получает процессорное время, он проверяет список всех пользовательских задач в поиске задач, которые необходимо выполнить, основываясь на установленном интервале времени для каждой задачи.
</p>

<p>
	<strong>Данная библиотека предоставляет следующий функционал</strong>
</p>

<ul>
	<li>
		Позволяет добавлять большое количество пользовательских заданий в виде функций. Количество задач ограничено только их сложностью и свободной памятью микроконтроллера.
	</li>
	<li>
		Предоставляет возможность холодного старта задачи. Дает возможность вызова задачи при старте микроконтроллера с последующим выполнением задачи через установленный интервал времени.
	</li>
	<li>
		Поиск задачи по лексическому идентификатору.
	</li>
	<li>
		Получение время последнего вызова задачи.
	</li>
	<li>
		Обнуление интервала вызова задачи или установку нового интервала в мс.
	</li>
	<li>
		Останавливать задачу на неопределенный срок.
	</li>
	<li>
		Проверять активность задачи.
	</li>
</ul>

<p>
	Подключение библиотеки
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_3559_9" style="">
<span class="com">#include</span><span class="pln"> </span><span class="str">&lt;cron.h&gt;</span></pre>

<p>
	Пример добавление задачи, которая вызывает функцию <strong>blink_f</strong> каждую секунду
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_3559_11" style="">
<span class="pln">cron</span><span class="pun">.</span><span class="pln">add</span><span class="pun">(</span><span class="lit">1000</span><span class="pun">,</span><span class="pln"> blink_f</span><span class="pun">);</span></pre>

<p>
	Добавление этой же задачи в режиме холодного старта
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_3559_13" style="">
<span class="pln">cron</span><span class="pun">.</span><span class="pln">add</span><span class="pun">(</span><span class="lit">1000</span><span class="pun">,</span><span class="pln"> blink_f</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">);</span></pre>

<p>
	Добавление задачи и присвоение ей человек понятного идентификатора
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_3559_15" style="">
<span class="pln">cron</span><span class="pun">.</span><span class="pln">add</span><span class="pun">(</span><span class="lit">1000</span><span class="pun">,</span><span class="pln"> blink_f</span><span class="pun">,</span><span class="pln"> </span><span class="str">"Blink"</span><span class="pun">);</span></pre>

<p>
	Добавление задачи с холодным стартом и присвоением ей человек понятного идентификатора
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_3559_18" style="">
<span class="pln">cron</span><span class="pun">.</span><span class="pln">add</span><span class="pun">(</span><span class="lit">1000</span><span class="pun">,</span><span class="pln"> blink_f</span><span class="pun">,</span><span class="pln"> </span><span class="str">"Blink"</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">);</span></pre>

<p>
	В качестве временного интервала вызова задачи необходимо указывать количество миллисекунд. Но можно воспользоваться готовыми константами.
</p>

<p>
	Фундаментальные константы
</p>

<ul>
	<li>
		cron::second
	</li>
	<li>
		cron::minute
	</li>
	<li>
		cron::hour
	</li>
	<li>
		cron::day
	</li>
</ul>

<p>
	Самые распространенные значения
</p>

<ul>
	<li>
		cron::time_1s
	</li>
	<li>
		cron::time_5s
	</li>
	<li>
		cron::time_10s
	</li>
	<li>
		cron::time_15s
	</li>
	<li>
		cron::time_30s
	</li>
	<li>
		cron::time_1m
	</li>
	<li>
		cron::time_5m
	</li>
	<li>
		cron::time_10m
	</li>
	<li>
		cron::time_15m
	</li>
	<li>
		cron::time_30m
	</li>
	<li>
		cron::time_1h
	</li>
	<li>
		cron::time_5h
	</li>
	<li>
		cron::time_10h
	</li>
	<li>
		cron::time_12h
	</li>
	<li>
		cron::time_1d
	</li>
</ul>

<p>
	С константами можно производить арифметические операции чтобы получить необходимые временные интервалы.
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_3559_21" style="">
<span class="pln">cron</span><span class="pun">.</span><span class="pln">update</span><span class="pun">(</span><span class="str">"Blink"</span><span class="pun">,</span><span class="pln"> cron</span><span class="pun">::</span><span class="pln">time_1s</span><span class="pun">);</span><span class="pln">
cron</span><span class="pun">.</span><span class="pln">update</span><span class="pun">(</span><span class="str">"Blink"</span><span class="pun">,</span><span class="pln"> cron</span><span class="pun">::</span><span class="pln">time_1s </span><span class="pun">*</span><span class="pln"> </span><span class="lit">12</span><span class="pun">);</span><span class="pln">
cron</span><span class="pun">.</span><span class="pln">update</span><span class="pun">(</span><span class="str">"Blink"</span><span class="pun">,</span><span class="pln"> cron</span><span class="pun">::</span><span class="pln">time_30s </span><span class="pun">+</span><span class="pln"> </span><span class="lit">500</span><span class="pun">);</span></pre>

<p>
	и т.д
</p>

<p>
	В функции <strong>loop</strong> должна находится команда вызова обработчика.
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_3559_39" style="">
<span class="kwd">void</span><span class="pln"> loop</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  cron</span><span class="pun">.</span><span class="pln">handleEvents</span><span class="pun">();</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	Поиск задачи по установленному ранее идентификатору
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_3559_23" style="">
<span class="pln">cron</span><span class="pun">.</span><span class="pln">find</span><span class="pun">(</span><span class="str">"Blink"</span><span class="pun">);</span></pre>

<p>
	В ответ возвращается объект типа <strong>cronEvent</strong> который содержит все данные задачи или <strong>0</strong> если задача не была найдена. Можно использовать в качестве простой проверки.
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_3559_27" style="">
<span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">cron</span><span class="pun">.</span><span class="pln">find</span><span class="pun">(</span><span class="str">"Blink"</span><span class="pun">))</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="com">/* … */</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	Следующий метод позволяет получить время последнего вызова задачи
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_3559_29" style="">
<span class="typ">uint32_t</span><span class="pln"> time </span><span class="pun">=</span><span class="pln"> cron</span><span class="pun">.</span><span class="pln">lastRun</span><span class="pun">(</span><span class="str">"Blink"</span><span class="pun">);</span></pre>

<p>
	В качестве параметра можно передать идентификатор с типом <strong>cronEvent</strong> полученный с помощью метода поиска задачи.
</p>

<p>
	Перезапуск таймера задачи производится следующим образом
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_3559_31" style="">
<span class="pln">cron</span><span class="pun">.</span><span class="pln">update</span><span class="pun">(</span><span class="str">"Blink"</span><span class="pun">);</span></pre>

<p>
	А так можно установить новый интервал вызова задачи
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_3559_33" style="">
<span class="pln">cron</span><span class="pun">.</span><span class="pln">update</span><span class="pun">(</span><span class="str">"Blink"</span><span class="pun">,</span><span class="pln"> cron</span><span class="pun">::</span><span class="pln">time_10m</span><span class="pun">);</span></pre>

<p>
	Остановка выполнения задачи
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_3559_35" style="">
<span class="pln">cron</span><span class="pun">.</span><span class="pln">stop</span><span class="pun">(</span><span class="str">"Blink"</span><span class="pun">);</span></pre>

<p>
	Проверка активности задачи
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_3559_37" style="">
<span class="kwd">bool</span><span class="pln"> active </span><span class="pun">=</span><span class="pln"> cron</span><span class="pun">.</span><span class="pln">isActive</span><span class="pun">(</span><span class="str">"Blink"</span><span class="pun">);</span></pre>

<p>
	С библиотекой идут несколько примеров.
</p>
]]></description><guid isPermaLink="false">10</guid><pubDate>Mon, 10 Dec 2018 06:42:26 +0000</pubDate></item><item><title>[esp8266] &#x411;&#x438;&#x431;&#x43B;&#x438;&#x43E;&#x442;&#x435;&#x43A;&#x430; CMD, &#x440;&#x435;&#x430;&#x43B;&#x438;&#x437;&#x443;&#x435;&#x442; &#x43D;&#x430;&#x441;&#x442;&#x440;&#x43E;&#x439;&#x43A;&#x443; &#x43C;&#x438;&#x43A;&#x440;&#x43E;&#x43A;&#x43E;&#x43D;&#x442;&#x440;&#x43E;&#x43B;&#x43B;&#x435;&#x440;&#x430; &#x438; &#x443;&#x43F;&#x440;&#x430;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x435; &#x432;&#x430;&#x448;&#x435;&#x439; &#x43F;&#x440;&#x43E;&#x433;&#x440;&#x430;&#x43C;&#x43C;&#x43E;&#x439; &#x447;&#x435;&#x440;&#x435;&#x437; &#x442;&#x435;&#x440;&#x43C;&#x438;&#x43D;&#x430;&#x43B;.</title><link>https://it4it.club/files/file/9-esp8266-biblioteka-cmd-realizuet-nastroyku-mikrokontrollera-i-upravlenie-vashey-programmoy-cherez-terminal/</link><description><![CDATA[
<p>
	Основная задача библиотеки, это прием пользовательских команд через UART интерфейс, их обработка и выполнение пользовательского кода, связанного с той или иной командой.
</p>

<p>
	<strong>Данная библиотека позволяет реализовать:</strong>
</p>

<ul>
	<li>
		Управление микроконтроллером
	</li>
	<li>
		Любую настройку, будь то WiFi, другие библиотеки или часть Вашей программы
	</li>
	<li>
		Вызывать Ваши задачи (функции) из терминала по команде и передавать им требуемые параметры
	</li>
	<li>
		Использовать контроллер в качестве шлюза между датчиками и программами на PC
	</li>
</ul>

<p>
	<span style="color:#e74c3c;"><strong>Внимание:</strong></span> любая команда, передаваемая в терминал обязана заканчиваться символом перевода строки "<strong>\n</strong>".
</p>

<p>
	Подключение библиотеки
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_9039_9" style="">
<span class="com">#include</span><span class="pln"> </span><span class="str">&lt;cmd.h&gt;</span></pre>

<p>
	Инициализация объекта, к которому мы будем обращаться для добавления команд. В качестве параметра объекту необходимо передать указатель на объект <strong>Serial </strong>или любой другой схожий по типу интерфейс.
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_9039_12" style="">
<span class="pln">cmd command</span><span class="pun">(&amp;</span><span class="typ">Serial</span><span class="pun">);</span></pre>

<p>
	В функции Setup описываем какие команды требуется обрабатывать. Например, по команде "<strong>test</strong>" вызывать пользовательскую функцию с именем "<strong>myFunctionName</strong>". Имя пользовательской функции может быть абсолютно любым.
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_9039_36" style="">
<span class="kwd">void</span><span class="pln"> </span><span class="typ">Setup</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="typ">Serial</span><span class="pun">.</span><span class="pln">begin</span><span class="pun">(</span><span class="lit">115200</span><span class="pun">);</span><span class="pln">
  
  command</span><span class="pun">.</span><span class="pln">add</span><span class="pun">(</span><span class="str">"test"</span><span class="pun">,</span><span class="pln"> myFunctionName</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	Пользовательская функция будет вызываться каждый раз, когда по интерфейсу <strong>Serial </strong>поступит команда "<strong>test</strong>". Если команда будет передана с параметрами, то эти параметры будут переданы в качестве аргументов пользовательской функции.
</p>

<p>
	В функции <strong>loop</strong> должна находится команда вызова обработчика.
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_3390_5" style="">
<span class="kwd">void</span><span class="pln"> loop</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  command</span><span class="pun">.</span><span class="pln">handleEvents</span><span class="pun">();</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	Пользовательская функция обязана соответствовать ряду требований:
</p>

<ul>
	<li>
		Не возвращать никакого результата (быть объявленной с типом <strong>void</strong>)
	</li>
	<li>
		Принимать в качестве первого аргумента переменную с типом <strong>byte</strong> в которой будет храниться число равное количеству переданных параметров
	</li>
	<li>
		Принимать в качестве второго параметра переменную с типом <strong>char**</strong> в которой будет храниться указатель на массив со всеми указателями (<strong>char*</strong>) на переданные параметры
	</li>
</ul>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_9039_20" style="">
<span class="kwd">void</span><span class="pln"> myFunctionName</span><span class="pun">(</span><span class="pln">byte argc</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">char</span><span class="pun">**</span><span class="pln"> argv</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
	</span><span class="com">/* ... */</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	Функция всегда должна иметь такой вид, даже если не подразумевается, что ей будут передаваться какие-либо параметры.
</p>

<p>
	Чтобы перебрать все переданные параметры и вывести их в консоль, можно воспользоваться следующим примером
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_9039_22" style="">
<span class="kwd">void</span><span class="pln"> myFunctionName</span><span class="pun">(</span><span class="pln">byte argc</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">char</span><span class="pun">**</span><span class="pln"> argv</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="lit">0</span><span class="pln"> </span><span class="pun">&lt;</span><span class="pln"> argc</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">for</span><span class="pln"> </span><span class="pun">(</span><span class="typ">uint8_t</span><span class="pln"> i </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln"> i </span><span class="pun">&lt;</span><span class="pln"> argc</span><span class="pun">;</span><span class="pln"> i</span><span class="pun">++)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
      </span><span class="typ">Serial</span><span class="pun">.</span><span class="pln">printf</span><span class="pun">(</span><span class="str">"%i. %s\n"</span><span class="pun">,</span><span class="pln"> i</span><span class="pun">,</span><span class="pln"> argv</span><span class="pun">[</span><span class="pln">i</span><span class="pun">]);</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	Пример вызова пользовательской функции без параметров и с ними
</p>

<pre class="ipsCode" id="ips_uid_9039_24">
# test
No parameter was passed
# test p1 p2 p3 p4 p5
0. p1
1. p2
2. p3
3. p4
4. p5</pre>

<p>
	Помните, что параметры представлены в виде указателей и работать с ними нужно как с обычными переменными не получится т.к указатель содержит не значение переменной (переданный параметр), а указатель на ту область памяти микроконтроллера в которой это значение находится.
</p>

<p>
	Чтобы сравнить два значения, например, параметр под индексом <strong>0</strong> (идет первым в списке) с каким-либо значением в программе, воспользуйтесь функцией <strong>strcmp</strong>, которая возвращает целочисленное значение, указывающее на лексическое расхождение строк. Если строки равны, то возвращаемое значение равно <strong>0</strong>.
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_9039_26" style="">
<span class="kwd">if</span><span class="pln"> </span><span class="pun">(!</span><span class="pln">strcmp</span><span class="pun">(</span><span class="pln">argv</span><span class="pun">[</span><span class="lit">0</span><span class="pun">],</span><span class="pln"> </span><span class="str">"wifi"</span><span class="pun">))</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="typ">Serial</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="pln">F</span><span class="pun">(</span><span class="str">"Первый аргумент WiFi"</span><span class="pun">));</span><span class="pln">
</span><span class="pun">}</span><span class="pln"> </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="typ">Serial</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="pln">F</span><span class="pun">(</span><span class="str">"Первый аргумент НЕ WiFi!!!"</span><span class="pun">));</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	Для копирования значения указателя в другую переменную с типом <strong>char</strong> можно воспользоваться функцией <strong>strcpy</strong>
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_9039_28" style="">
<span class="kwd">char</span><span class="pln"> myVar</span><span class="pun">[</span><span class="lit">20</span><span class="pun">];</span><span class="pln">
strcpy</span><span class="pun">(</span><span class="pln">myVar</span><span class="pun">,</span><span class="pln"> argv</span><span class="pun">[</span><span class="lit">0</span><span class="pun">]);</span><span class="pln">

</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">myVar </span><span class="pun">==</span><span class="pln"> </span><span class="str">"123456"</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="typ">Serial</span><span class="pun">.</span><span class="pln">prinln</span><span class="pun">(</span><span class="pln">F</span><span class="pun">(</span><span class="str">"ok"</span><span class="pun">));</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	Также можно обернуть указатель объектом <strong>String</strong> и получить весь функционал этого объекта, который будет содержать значение параметра
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_9039_32" style="">
<span class="typ">String</span><span class="pln"> param1</span><span class="pun">(</span><span class="pln">argv</span><span class="pun">[</span><span class="lit">0</span><span class="pun">]);</span><span class="pln"> </span><span class="com">// String param1 = argv[0];</span><span class="pln">

</span><span class="typ">Serial</span><span class="pun">.</span><span class="pln">printf</span><span class="pun">(</span><span class="str">"argv[0] length: %i\n"</span><span class="pun">,</span><span class="pln"> param1</span><span class="pun">.</span><span class="pln">length</span><span class="pun">());</span><span class="pln">
</span><span class="typ">Serial</span><span class="pun">.</span><span class="pln">printf</span><span class="pun">(</span><span class="str">"argv[0] is integer?: %s\n"</span><span class="pun">,</span><span class="pln"> param1</span><span class="pun">.</span><span class="pln">toInt</span><span class="pun">()</span><span class="pln"> </span><span class="pun">?</span><span class="pln"> </span><span class="str">"YES"</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> </span><span class="str">"NO"</span><span class="pun">);</span><span class="pln">

</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">param1 </span><span class="pun">==</span><span class="pln"> </span><span class="str">"qwerty"</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="typ">Serial</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="pln">F</span><span class="pun">(</span><span class="str">"Hello QWERTY!"</span><span class="pun">));</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	С библиотекой идут несколько примеров, в том числе и пример конфигурации <strong>WiFi</strong> в режиме <strong>STA</strong>.
</p>
]]></description><guid isPermaLink="false">9</guid><pubDate>Fri, 14 Dec 2018 07:33:15 +0000</pubDate></item><item><title>&#x41F;&#x440;&#x43E;&#x441;&#x442;&#x43E;&#x439; &#x434;&#x432;&#x443;&#x445;&#x43A;&#x430;&#x43D;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x439; &#x441;&#x447;&#x435;&#x442;&#x447;&#x438;&#x43A; &#x432;&#x43E;&#x434;&#x44B; &#x43D;&#x430; ESP8266</title><link>https://it4it.club/files/file/8-prostoy-dvuhkanalnyy-schetchik-vody-na-esp8266/</link><description><![CDATA[
<p>
	Это просто вариант программы на микроконтроллере ESP8266 для учета расхода воды. Программа для среды разработки Arduino IDE. Цель программы – протестировать концепцию и выявить подводные камни.
</p>

<p>
	Обсудить идеи и предложить свои варианты можно в следующей теме.
</p>
<iframe allowfullscreen="" class="ipsEmbed_finishedLoading" data-controller="core.front.core.autosizeiframe" data-embedcontent="" data-embedid="embed109970533" scrolling="no" src="https://it4it.club/topic/50-schetchik-vodyi-esp8266/?do=embed" style="overflow: hidden; height: 339px; max-width: 502px;"></iframe>

<p>
	 
</p>
]]></description><guid isPermaLink="false">8</guid><pubDate>Wed, 28 Nov 2018 10:43:40 +0000</pubDate></item><item><title>&#x41C;&#x430;&#x440;&#x448;&#x440;&#x443;&#x442;&#x438;&#x437;&#x430;&#x442;&#x43E;&#x440;&#x44B; Cisco Systems</title><link>https://it4it.club/files/file/7-marshrutizatory-cisco-systems/</link><description><![CDATA[
<p>
	Шаблон и список преобразований значений для мониторинга маршрутизаторов и свичей фирмы Cisco (должен подходить для оборудования Allied Telesis).
</p>

<p>
	<span style="background-color:#ffffff; color:#353c41; font-size:14px; text-align:start">Подробное описание можно посмотреть в следующей теме.</span>
</p>
<iframe allowfullscreen="" class="ipsEmbed_finishedLoading" data-controller="core.front.core.autosizeiframe" data-embedcontent="" data-embedid="embed8351596774" scrolling="no" src="https://it4it.club/topic/7-%D0%BC%D0%B0%D1%80%D1%88%D1%80%D1%83%D1%82%D0%B8%D0%B7%D0%B0%D1%82%D0%BE%D1%80%D1%8B-cisco-systems/?do=embed" style="overflow: hidden; height: 341px; max-width: 502px;"></iframe>

<p>
	 
</p>
]]></description><guid isPermaLink="false">7</guid><pubDate>Mon, 28 May 2018 13:09:56 +0000</pubDate></item><item><title>&#x418;&#x441;&#x442;&#x43E;&#x447;&#x43D;&#x438;&#x43A;&#x438; &#x431;&#x435;&#x441;&#x43F;&#x435;&#x440;&#x435;&#x431;&#x43E;&#x439;&#x43D;&#x43E;&#x433;&#x43E; &#x43F;&#x438;&#x442;&#x430;&#x43D;&#x438;&#x44F; APC (American Power Conversion)</title><link>https://it4it.club/files/file/6-istochniki-bespereboynogo-pitaniya-apc-american-power-conversion/</link><description><![CDATA[
<p>
	Шаблон и список преобразований значений для мониторинга источников бесперебойного питания фирмы APC. 
</p>

<p>
	<span style="background-color:#ffffff; color:#353c41; font-size:14px; text-align:start">Подробное описание можно посмотреть в следующей теме.</span>
</p>
<iframe allowfullscreen="" class="ipsEmbed_finishedLoading" data-controller="core.front.core.autosizeiframe" data-embedcontent="" data-embedid="embed3102300209" scrolling="no" src="https://it4it.club/topic/8-%D0%B8%D1%81%D1%82%D0%BE%D1%87%D0%BD%D0%B8%D0%BA%D0%B8-%D0%B1%D0%B5%D1%81%D0%BF%D0%B5%D1%80%D0%B5%D0%B1%D0%BE%D0%B9%D0%BD%D0%BE%D0%B3%D0%BE-%D0%BF%D0%B8%D1%82%D0%B0%D0%BD%D0%B8%D1%8F-apc-american-power-conversion/?do=embed" style="overflow: hidden; height: 341px; max-width: 502px;"></iframe>

<p>
	 
</p>
]]></description><guid isPermaLink="false">6</guid><pubDate>Mon, 28 May 2018 12:57:27 +0000</pubDate></item><item><title>Switch Port Mapping</title><link>https://it4it.club/files/file/5-switch-port-mapping/</link><description><![CDATA[
<p>
	Набросок небольшой программы на PHP для облегчения жизни IT отделу. Позволяет просматривать какие хосты располагаются на портах сетевого оборудования (за основу взято оборудование фирмы Cisco). Для связи используется SNMP протокол. Из информации об узле выводятся:
</p>

<ul>
<li>
		MAC
	</li>
	<li>
		IP
	</li>
	<li>
		DNS имя
	</li>
	<li>
		Производитель оборудования
	</li>
</ul>
<p>
	<span style="background-color:#ffffff; color:#353c41; font-size:14px; text-align:start">Подробное описание можно посмотреть в следующей теме.</span>
</p>
<iframe allowfullscreen="" class="ipsEmbed_finishedLoading" data-controller="core.front.core.autosizeiframe" data-embedcontent="" data-embedid="embed2336998343" scrolling="no" src="https://it4it.club/topic/23-switch-port-mapping-stroim-kartu-raspolozheniya-hostov-na-portah-svichey/?do=embed" style="overflow: hidden; height: 221px; max-width: 502px;"></iframe>

<p>
	 
</p>
]]></description><guid isPermaLink="false">5</guid><pubDate>Mon, 28 May 2018 12:43:47 +0000</pubDate></item><item><title>&#x414;&#x435;&#x43C;&#x43E;&#x43D; &#x434;&#x43B;&#x44F; &#x442;&#x440;&#x430;&#x43D;&#x437;&#x438;&#x442;&#x430; &#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x445; &#x43E;&#x442; MQTT &#x431;&#x440;&#x43E;&#x43A;&#x435;&#x440;&#x430; &#x432; &#x421;&#x423;&#x411;&#x414; MySQL</title><link>https://it4it.club/files/file/4-demon-dlya-tranzita-dannyh-ot-mqtt-brokera-v-subd-mysql/</link><description><![CDATA[
<p>
	Демон осуществляет транзит данных с MQTT брокера в СУБД MySQL. Можно переправлять как все сообщения, так и конкретные топики. <span style="background-color:#ffffff; color:#353c41; font-size:14px; text-align:start">Подробное описание можно посмотреть в следующей теме.</span>
</p>
<iframe allowfullscreen="" class="ipsEmbed_finishedLoading" data-controller="core.front.core.autosizeiframe" data-embedcontent="" data-embedid="embed763292258" scrolling="no" src="https://it4it.club/topic/72-uchimsya-peresylat-dannye-s-mqtt-brokera-v-bazu-dannyh-mysql/?do=embed" style="overflow: hidden; height: 341px; max-width: 502px;"></iframe>

<p>
	 
</p>
]]></description><guid isPermaLink="false">4</guid><pubDate>Mon, 28 May 2018 12:26:59 +0000</pubDate></item><item><title>&#x41C;&#x43E;&#x434;&#x443;&#x43B;&#x44C; &#x434;&#x43B;&#x44F; &#x440;&#x435;&#x430;&#x43B;&#x438;&#x437;&#x430;&#x446;&#x438;&#x438; &#x43F;&#x43E;&#x434;&#x434;&#x435;&#x440;&#x436;&#x43A;&#x438; MQTT &#x43F;&#x440;&#x43E;&#x442;&#x43E;&#x43A;&#x43E;&#x43B;&#x430;</title><link>https://it4it.club/files/file/3-modul-dlya-realizacii-podderzhki-mqtt-protokola/</link><description><![CDATA[
<p>
	Модуль предназначен для системы мониторинга Zabbix. Работает в качестве отдельного демона и осуществляет транзит сообщений от брокера до хостов в системе мониторинга. Подробное описание модуля можно посмотреть в следующей теме.
</p>
<iframe allowfullscreen="" class="ipsEmbed_finishedLoading" data-controller="core.front.core.autosizeiframe" data-embedcontent="" data-embedid="embed2385796590" scrolling="no" src="https://it4it.club/topic/62-obuchaem-zabbix-rabotat-s-mqtt-protokolom/?do=embed&amp;comment=485&amp;embedComment=485&amp;embedDo=findComment" style="overflow: hidden; height: 292px; max-width: 502px;"></iframe>

<p>
	 
</p>
]]></description><guid isPermaLink="false">3</guid><pubDate>Wed, 05 Dec 2018 11:46:44 +0000</pubDate></item><item><title>&#x41C;&#x435;&#x442;&#x435;&#x43E;&#x441;&#x442;&#x430;&#x43D;&#x446;&#x438;&#x44F; &#x43D;&#x430; ESP8266</title><link>https://it4it.club/files/file/2-meteostanciya-na-esp8266/</link><description><![CDATA[
<p>
	<span style="font-size:18px"><strong>Хотите помочь проекту или спонсировать новый?</strong></span>
</p>

<ul>
	<li>
		<strong><span style="font-size:20px"><a href="https://money.yandex.ru/to/410014941215337" rel="external nofollow">Yandex.Money</a></span></strong>
	</li>
	<li>
		<span style="font-size:20px"><strong><a href="https://www.paypal.me/kitsum" rel="external nofollow">PayPal.me</a></strong></span>
	</li>
</ul>

<p>
	<span style="font-size:18px;"><strong>Тема проекта</strong></span>
</p>
<iframe allowfullscreen="" class="ipsEmbed_finishedLoading" data-controller="core.front.core.autosizeiframe" data-embedcontent="" data-embedid="embed8814611119" scrolling="no" src="https://it4it.club/topic/55-meteostanciya-na-esp8266-ot-it4itclub/?do=embed" style="overflow: hidden; height: 327px; max-width: 502px;"></iframe>

<p>
	Arduino IDE + Project + Libraries + tools: <a href="https://yadi.sk/d/jseefFB50NMhAg" ipsnoembed="true" rel="external nofollow">https://yadi.sk/d/jseefFB50NMhAg</a>
</p>
]]></description><guid isPermaLink="false">2</guid><pubDate>Mon, 27 Jan 2020 19:35:22 +0000</pubDate></item></channel></rss>
