<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-8944086625767573647</atom:id><lastBuildDate>Tue, 27 Jan 2026 20:33:16 +0000</lastBuildDate><category>Hardware</category><category>Arduino</category><category>Software</category><category>ArduinoCompatible</category><category>ArduinoIDE</category><category>MK-90</category><category>Новости</category><category>Arduino Shield</category><category>ThisBlogRelated</category><category>Шилд-платы</category><category>Freeduino</category><category>AVR</category><category>Ethernet</category><category>Начинающим</category><category>Инструменты</category><category>Программатор</category><category>СМП</category><category>Tools</category><category>V-USB</category><category>ArduinoMega</category><category>Freeduino 32u4</category><category>Kits</category><category>Датчики</category><category>проекты в Eagle</category><category>Tutorials</category><category>lol</category><category>Arduino 1.0 libs</category><category>Arduino Uno</category><category>LCD</category><category>Книги</category><category>Температура</category><category>FT232RL</category><category>Freeduino One</category><category>Android</category><category>Angelino</category><category>HNYduino</category><category>Processing</category><category>Калькуляторы</category><category>ЛУТ</category><category>Печатные платы</category><category>Проекты Arduino</category><category>пресса</category><category>ARM</category><category>Arduino Due</category><category>Linuxcenter.ru</category><category>MKBoard</category><category>ATmegaU</category><category>DS18B20</category><category>Freeduino Mega2560</category><category>LaunchPad</category><category>Microsoft</category><category>optiboot</category><category>1-wire</category><category>ChipTester</category><category>DFU</category><category>Eagle</category><category>Galileo</category><category>Netduino</category><category>Palm</category><category>Servo</category><category>Shell</category><category>jtag</category><category>plc</category><category>raspberry pi</category><category>ИМ-03</category><category>МК-85</category><category>РК-86</category><title>Arduino, MK-90 и другие</title><description>Программирование Arduino, оживление микроэвм Электроника МК-90, аппаратный хакинг.</description><link>http://mk90.blogspot.com/</link><managingEditor>noreply@blogger.com (id)</managingEditor><generator>Blogger</generator><openSearch:totalResults>291</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8944086625767573647.post-1713054855323625273</guid><pubDate>Mon, 01 Mar 2021 08:52:00 +0000</pubDate><atom:updated>2021-03-01T14:02:31.369+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Arduino</category><category domain="http://www.blogger.com/atom/ns#">Arduino 1.0 libs</category><category domain="http://www.blogger.com/atom/ns#">LCD</category><title>LiquidCrystalRus - небольшое обновление</title><description>&lt;div style=&quot;text-align: justify;&quot;&gt;Недавно в проект &lt;a href=&quot;https://github.com/mk90/LiquidCrystalRus&quot; target=&quot;_blank&quot;&gt;LiquidCrystalRus&lt;/a&gt; на GitHub пришло issue по поводу того, что функция &lt;span style=&quot;font-family: courier;&quot;&gt;print&lt;/span&gt;&amp;nbsp;при попытке выводить некоторые неалфавитно-цифровые символы из знакогенератора дисплеев на основе HD44780U, несправедливо их калечит. И я решил скорректировать алгоритм трансляции - чтобы он применялся строго к символам русского алфавита. Чуть больше кода из-за проверок, но зато можно так:&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;lcd.print(&quot;Дисковод 5\xf0&quot;);&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;На экране мы увидим:&amp;nbsp; &lt;b&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Дисковод 5¼&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Плюс добавил пример &lt;span style=&quot;font-family: courier;&quot;&gt;DumpCharacters&lt;/span&gt;, выводящий построчно весь знакогенератор дисплея, что снимает вопросы по поводу того, есть ли там кириллица в принципе.&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Надеюсь, кому-то пригодится )&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br /&gt;Материал опубликован на сайте mk90.blogspot.com под лицензией Creative Commons Share Alike 3.0&lt;/div&gt;</description><link>http://mk90.blogspot.com/2021/03/liquidcrystalrus.html</link><author>noreply@blogger.com (id)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8944086625767573647.post-379831927625784000</guid><pubDate>Mon, 30 Mar 2015 12:37:00 +0000</pubDate><atom:updated>2015-03-30T16:10:06.009+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Arduino</category><category domain="http://www.blogger.com/atom/ns#">LCD</category><category domain="http://www.blogger.com/atom/ns#">Software</category><title>LiquidCrystalRus для 1.6.1</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Недавно вышла очередная ArduinoIDE 1.6.1, одним из новшеств которой выступил новый gcc версии 3.4.5. И поскольку с каждой версией gcc синтаксис становится всё строже и строже - без неприятностей не обошлось.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
В частности, перестала компилироваться библиотека поддержки вывода русского языка &lt;b&gt;LiquidCrystalRus&lt;/b&gt;, из-за неверного (с точки зрения gcc) использования директивы &lt;a href=&quot;http://mk90.org/wiki/index.php/PROGMEM&quot;&gt;PROGMEM&lt;/a&gt;, о чем ко мне посыпались сообщения от уважаемых пользователей (за что им хочу выразить особую благодарность).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Изменения там совсем крошечные, но если после установки новой ArduinoIDE ваш проект с &lt;b&gt;LiquidCrystalRus&lt;/b&gt; в составе перестал компилироваться, не паникуйте, а скачайте и установите&amp;nbsp;&lt;a href=&quot;http://mk90.ru/files/source/LiquidCrystalRus-1.6.0.zip&quot; style=&quot;text-align: justify;&quot;&gt;LiquidCrystalRus-1.6.0.zip&lt;/a&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Напоминаю, что проект также доступен на GitHub:&amp;nbsp;&lt;a href=&quot;https://github.com/mk90/LiquidCrystalRus&quot;&gt;https://github.com/mk90/LiquidCrystalRus&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;UPDATE&lt;/b&gt;: подобно оригинальному LiquidCrystal, LiquidCrystalRus не умеет работать с дисплеями, подключенными как-то иначе, чем к пинам Arduino (например, по I2C), но зато и не требует для работы дополнительных библиотек: и в результате поддержка русского языка обходится дополнительно в 500 байт flash и 7 байт SRAM.&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br /&gt;Материал опубликован на сайте mk90.blogspot.com под лицензией Creative Commons Share Alike 3.0&lt;/div&gt;</description><link>http://mk90.blogspot.com/2015/03/liquidcrystalrus-161.html</link><author>noreply@blogger.com (id)</author><thr:total>9</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8944086625767573647.post-4266066358902708533</guid><pubDate>Fri, 09 May 2014 08:18:00 +0000</pubDate><atom:updated>2014-05-09T12:18:53.795+04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Arduino</category><category domain="http://www.blogger.com/atom/ns#">Книги</category><category domain="http://www.blogger.com/atom/ns#">Начинающим</category><category domain="http://www.blogger.com/atom/ns#">пресса</category><title>Книжная полка</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Недавно издательство &lt;a href=&quot;http://bhv.ru/&quot; target=&quot;_blank&quot;&gt;БХВ&lt;/a&gt; порадовало нас книгой &lt;b&gt;Виктора Петина &quot;Проекты с использованием контроллера Arduino&quot;&lt;/b&gt;.&amp;nbsp;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://goo.gl/mW2Eky&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguJvV1V46CbMQzojlpNuUUouJlDdFPNTTTF0Z36ZRmAnpQgSJqbb9guntl8aEOyhFLY5Vj4fMtx-Qvey9IJVZiomovLa-MVFNLYycAIjXf5niRpNglA2tkpoqqaSZYSYQeMrpNhpVVG9ri/s1600/1009496685.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
К сожалению, полноценной рецензии выдать не могу, доступно только оглавление:&lt;/div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;краткий обзор плат Arduino;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;a href=&quot;http://mk90.ru/wiki/index.php/ArduinoReference&quot;&gt;описание всех операторов языка Wiring&lt;/a&gt;;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;a href=&quot;http://mk90.ru/wiki/index.php/Serial&quot;&gt;описание встроенной библиотеки Serial&lt;/a&gt;;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;описание встроенной библиотеки &lt;a href=&quot;https://www.google.ru/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;cad=rja&amp;amp;uact=8&amp;amp;ved=0CCwQFjAA&amp;amp;url=http%3A%2F%2Farduino.cc%2Fen%2FReference%2FLiquidCrystal&amp;amp;ei=WpJrU5PGFsTNygPK44LgAg&amp;amp;usg=AFQjCNF-cPABcpM458bTwBK7guwCKTWlmA&amp;amp;sig2=V37kPG9p74mazaoPr-bQSQ&amp;amp;bvm=bv.66330100,d.bGQ&quot; target=&quot;_blank&quot;&gt;LiquidCrystal&lt;/a&gt; и даже пара слов про &lt;a href=&quot;https://github.com/mk90/LiquidCrystalRus&quot;&gt;LiquidCrystalRus&lt;/a&gt;;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;описание встроенных библиотек &lt;a href=&quot;http://mk90.ru/wiki/index.php/LibraryEEPROM&quot;&gt;EEPROM&lt;/a&gt;, &lt;a href=&quot;http://mk90.ru/wiki/index.php/LibraryEthernet&quot;&gt;Ethernet&lt;/a&gt;, OneWire, SD, Stepper;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;разбор подключения мыши и клавиатуры PS/2 - библиотека &lt;a href=&quot;http://playground.arduino.cc/ComponentLib/Ps2mouse&quot; target=&quot;_blank&quot;&gt;ps2dev&lt;/a&gt;;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;работа с датчиками iButton, &lt;a href=&quot;http://mk90.blogspot.ru/2010/08/arduino.html&quot;&gt;DS18B20&lt;/a&gt;, &lt;a href=&quot;http://mk90.blogspot.ru/2012/12/blog-post.html&quot;&gt;DHT11&lt;/a&gt; и &lt;a href=&quot;http://mk90.blogspot.ru/2013/04/2.html&quot;&gt;DHT12&lt;/a&gt;;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;подключение к светодиодным матрицам;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;примеры стыковки с RFID-приемниками, купюроприемниками, датчиками расстояния HC-SR04;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;освещается вопрос &lt;a href=&quot;http://mk90.blogspot.ru/2012/12/ir-arduino.html&quot;&gt;обмена данными с помощью ИК&lt;/a&gt;, в том числе различные типы кодирования;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;работа с ходовой частью робота через микросхему &lt;a href=&quot;http://mk90.blogspot.ru/2009/03/motorshield-adafruit.html&quot;&gt;L293D&lt;/a&gt;;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;использование приемопередатчика Bluetooth HC-05, а также &lt;a href=&quot;http://mk90.blogspot.ru/2013/12/freeduino-wireless-2.html&quot;&gt;NRF24L01&lt;/a&gt; с помощью библиотеки &lt;a href=&quot;http://playground.arduino.cc/InterfacingWithHardware/Nrf24L01&quot; target=&quot;_blank&quot;&gt;Mirf&lt;/a&gt;;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;вывод на экран телевизора с помощью библиотеки &lt;a href=&quot;http://playground.arduino.cc/Main/TVout&quot; target=&quot;_blank&quot;&gt;TVOut&lt;/a&gt;, с примерами игровых программ;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;работа с USB через USB Host Shield;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;немного про &lt;a href=&quot;http://wiki.ros.org/rosserial_arduino/Tutorials/Arduino%20IDE%20Setup&quot; target=&quot;_blank&quot;&gt;ROS&lt;/a&gt; (распределенная операционная система для роботов) и &lt;a href=&quot;http://arduino.cc/en/Tutorial/x10&quot; target=&quot;_blank&quot;&gt;X10&lt;/a&gt; (умный дом).&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Приятно, что книги про Arduino на русском все-таки выходят - даже оглавление само по себе указывает путь к практическим решениям. Я специально сопроводил его ссылками на соответствующие статьи (в первую очередь на русском языке).&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Будет ли достаточно этой книги именно для вашего проекта? Лично я ожидал хоть что-то про использование Arduino &lt;a href=&quot;http://arduino.cc/en/Main/ArduinoBoardDue&quot; target=&quot;_blank&quot;&gt;Due&lt;/a&gt; и &lt;a href=&quot;http://arduino.cc/en/Main/ArduinoBoardLeonardo&quot; target=&quot;_blank&quot;&gt;Leonardo&lt;/a&gt; (они упоминаются в обзоре),&amp;nbsp;&lt;a href=&quot;http://mk90.blogspot.ru/2011/06/dfu.html&quot;&gt;изменение прошивок ATmega16u2&lt;/a&gt; (на последних Uno и Mega), про использование программатора - в реальности рано или поздно этот вопрос возникает (хотя на тему программирования ATMEL недостатка в литературе нет, например книга &lt;a href=&quot;http://goo.gl/HC8pBJ&quot; target=&quot;_blank&quot;&gt;Ревича&lt;/a&gt;). Стоило бы посвятить больше места шилд-платам.... Хотя, стоп! Надо сказать автору &quot;большое спасибо&quot; уже за это издание (лучшее &quot;спасибо&quot; - это легально купленный экземпляр книги, особенно если хотите продолжения ;).&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Если кто-то прочел и хочет оставить отзыв - милости прошу в комменты, расскажите ;) Еще лучше, если будет сравнение с предыдущей книгой &lt;a href=&quot;http://mk90.blogspot.ru/2011/11/arduino_25.html&quot; target=&quot;&quot;&gt;Соммера&lt;/a&gt;.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
А примеры из книги можно скачать &lt;a href=&quot;ftp://ftp.bhv.ru/9785977533379.zip&quot; target=&quot;_blank&quot;&gt;здесь&lt;/a&gt;.&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br /&gt;Материал опубликован на сайте mk90.blogspot.com под лицензией Creative Commons Share Alike 3.0&lt;/div&gt;</description><link>http://mk90.blogspot.com/2014/05/blog-post.html</link><author>noreply@blogger.com (id)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguJvV1V46CbMQzojlpNuUUouJlDdFPNTTTF0Z36ZRmAnpQgSJqbb9guntl8aEOyhFLY5Vj4fMtx-Qvey9IJVZiomovLa-MVFNLYycAIjXf5niRpNglA2tkpoqqaSZYSYQeMrpNhpVVG9ri/s72-c/1009496685.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8944086625767573647.post-2039927946287452535</guid><pubDate>Tue, 29 Apr 2014 20:28:00 +0000</pubDate><atom:updated>2014-11-05T22:10:06.048+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">raspberry pi</category><title>Raspberry PI. С чего начать?</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Феномен Raspberry Pi трудно отрицать. Тем круче было мое удивление, когда коллеги проявили о нем практически нулевую осведомленность. На мой невинный вопрос &quot;а не пора ли открывать ветку совместимости с Debian 7, а то на ней даже Raspberry Pi бегает&quot; получил в ответ &quot;а что это за разберри такой?&quot;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqUALBPY9ZdawQQj5Fs1jtxrj08wXN1RmRdODKtxESnn9yXaatr-QBDtvNwtOuJdD4g90tnsznpFOfwp4E0wMRvpDS4M7HUI4Atn-9AwdjjoEzihNaYnKw7x5tN_YeWUgbcZfX0K4nDkw6/s1600/rpilogo.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqUALBPY9ZdawQQj5Fs1jtxrj08wXN1RmRdODKtxESnn9yXaatr-QBDtvNwtOuJdD4g90tnsznpFOfwp4E0wMRvpDS4M7HUI4Atn-9AwdjjoEzihNaYnKw7x5tN_YeWUgbcZfX0K4nDkw6/s1600/rpilogo.png&quot; height=&quot;180&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Честно говоря, стало немного досадно. Я бегло просмотрел поисковый вывод и понял, что сейчас материалов на русском по Raspberry Pi на порядок меньше, чем про тот же Arduino. Традиционно, впереди всех выступает &lt;a href=&quot;http://goo.gl/Swr0ih&quot; target=&quot;_blank&quot;&gt;LinuxFormat&lt;/a&gt;, подписка платная (доступна и &lt;a href=&quot;http://goo.gl/9F6LB0&quot; target=&quot;_blank&quot;&gt;электронная версия&lt;/a&gt;, но все равно - она стоит денег), материалы выкладываются у них на wiki, с задержкой на один год.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
И тогда я подумал, что стоит сделать пару статей - тем более, что последнее время мне крайне интересна связка Arduino+RaspberryPi.&lt;/div&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;
Немного истории&lt;/h4&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Однажды, в далеком 2006&amp;nbsp;&lt;a href=&quot;http://en.wikipedia.org/wiki/Eben_Upton&quot; target=&quot;_blank&quot;&gt;Эбен Аптон&lt;/a&gt;, тогдашний руководитель компьютерной лаборатории &lt;a href=&quot;http://en.wikipedia.org/wiki/University_of_Cambridge&quot; target=&quot;_blank&quot;&gt;Кэмбриджского Университета&lt;/a&gt;, бился над идеей создания дешевого учебного микрокомпьютера, который бы мог использоваться в равной степени и компьютерными энтузиастами, и студентами, и даже детьми. В конечном итоге он надеялся достичь такого же образовательного эффекта, что сыграли домашние компьютеры 80-х в бурном развитии компьютерных технологий 90-х годов.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Однако, задача оказалась непростой. За пару лет сменилось несколько концепций, это первый прототип:&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiB0Gcc91YNw-w4mTcj_WgVzmotFQrSkLS5kX_ONFjnUH5X6-ErSySzLIsENQ1aI5swECESZc5NOcMcuslJGkBHeI5pKiWYC1btCsCaM9o3rUoM736W7AyK9aAlROaXQ5kx0qmI5g-v2yn9/s1600/atmel2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiB0Gcc91YNw-w4mTcj_WgVzmotFQrSkLS5kX_ONFjnUH5X6-ErSySzLIsENQ1aI5swECESZc5NOcMcuslJGkBHeI5pKiWYC1btCsCaM9o3rUoM736W7AyK9aAlROaXQ5kx0qmI5g-v2yn9/s600/atmel2.jpg&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
О да, зрение вас не обманывает - он собран на ATmega644, у которого 19 из 32 пинов использовано для подключения микросхемы SDRAM размером 512K, хранящей буфер экрана и данные. Собственно вывод на экран происходил путем последовательного выставления на адресной шине адресов ячеек памяти, содержимое которых через микросхему логики серии 74HC и DAC формировало композитный видеосигнал 320x400. Какой-то другой работой, кроме формирования видеосигнала, разогнанный до 22,1 МГц MCU мог заниматься в межстрочных и межкадровых паузах.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Как уже можно догадаться, этот &lt;strike&gt;хардкор&lt;/strike&gt; прототип в серию запущен не был, хотя схема и печатные платы были&amp;nbsp;&lt;a href=&quot;http://www.raspberrypi.org/archives/264&quot; target=&quot;_blank&quot;&gt;опубликованы&lt;/a&gt;. К 2008 году стало понятно, что бурный рост числа мобильных телефонов с мультимедийными возможностями в недалеком будущем сделает доступным и переносной компьютер аналогичного размера. Заметим, что к этому моменту более 96% мобильников имели внутри ARM, что и заставило в конечном итоге остановиться на этой технологии (в Raspberry Pi работает ядро &lt;a href=&quot;http://en.wikipedia.org/wiki/ARM11&quot; target=&quot;_blank&quot;&gt;ARM1176JZF-S&lt;/a&gt;).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Наконец, в августе 2011 разработка добралась до альфа-прототипов, и желающие получили возможность оценить будущее устройство. Были представлены LXDE на Debian, Quake III Arena и проигрывание FullHD видео 1080p. Одновременно стало понятно с ценой - на выбор было предложено два варианта:&lt;/div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;b&gt;А&lt;/b&gt; за $25 - 1 x USB, 256 RAM;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;B&lt;/b&gt; за $35 - 2 x USB, 1 x Ethernet 10/100, 256 RAM (полгода спустя - уже 512MB).&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7ApmuO8gCYXRyuKA5XVwC7gFgx19221gncYrzQ1JHq-AF730rBWa7qSydpEQuwxDLdcuEP9W_oSiqSOO3wMQWwIcB_fJK1OxyJY6gzfVMbfPB5B38iL35v0ZbxeDJ89eqYXQwkzljFkwy/s1600/rpi_a_vs_b.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7ApmuO8gCYXRyuKA5XVwC7gFgx19221gncYrzQ1JHq-AF730rBWa7qSydpEQuwxDLdcuEP9W_oSiqSOO3wMQWwIcB_fJK1OxyJY6gzfVMbfPB5B38iL35v0ZbxeDJ89eqYXQwkzljFkwy/s1600/rpi_a_vs_b.png&quot; height=&quot;203&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Соотношение цены и возможностей произвело неизгладимое впечатление на общественность и 200 000 желающих &quot;построились в очередь&quot; на получение первых Raspberry Pi варианта B. Но количество устройств в первой партии все равно осталось 10 000 штук, и лишь 10 из них были реализованы раньше срока: азартные покупатели на e-bay выложили за них в сумме £16000. Дальше - больше, за первые 6 месяцев было продано полмиллиона штук.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
В тот момент запросто можно было встать перед дилеммой: &quot;на что лучше потратить 32 USD - на оригинальную Arduino Mega или на Raspberry Pi?&quot;. С одной стороны, за Arduino стояло весьма внушительное коммьюнити, готовые библиотеки, масса шилд-плат и простота программирования, с другой - за Raspberry Pi - Linux и возможности ARM, низкая цена.&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Сам Линус Торвальдсон, кстати, высказывался на эту тему тоже двояко (из интервью в октябрьском номере LinuxFormat): &amp;nbsp;&lt;i&gt;&quot;Она (Raspberry Pi - прим. автора блога) слишком медлительна для того, что мне надо делать. Она на самом деле может выводить что-то на настоящий монитор, а потом вдруг не воспроизводит You­Tube, а если она не может нормально делать такие вещи, значит, она слишком медлительна ... мне очень нравится идея такого дешевого оборудования, что его можно дать детям ... подозреваю, что следующее поколение будет значительно лучше...&quot;.&amp;nbsp;&lt;/i&gt;Не осталась без внимания и &quot;устаревшая, а потому и такая дешевая SoC&quot;, на которой построено устройство. Впрочем, всё это не остановило энтузиастов, пожелавших собственноручно испытать Raspberry Pi в действии.&lt;/div&gt;
&lt;br /&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;
Что придется добавить&lt;/h4&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Итак, мы встали в очередь и приобрели себе &quot;малинки&quot;. Что потребуется добавить для получения некоторого полезного устройства (ну или чтобы просто &quot;побаловаться&quot; на досуге)? Ниже перечень, необходимый минимум состоит из первых двух пунктов:&lt;/div&gt;
&lt;br /&gt;
1. Блок питания 5VDC с кабелем microUSB.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Для устойчивой работы Raspberry Pi достаточно иметь источник 700 мА. Потребности нашей &quot;малинки&quot; напрямую зависят от двух факторов: количества питаемых через USB устройств и степени разгона системы (да-да, его можно разгонять!). Если ничего не подключать, то уложитесь и в 500..600 мА. Но если, например, подключить WiFi-донгл и флешку - уже нет. Кстати, в &amp;nbsp;качестве источника вполне подойдет зарядное устройство от современного смартфона, выдающего на microUSB ток 1.5...2А.&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivuOqk32jGX1DKcs1p0l_L1cDQDrioThnwX2ZCazb0011wzSYQt4BgjAdwftj6eNE4ore1WmdATNpZHtyhSXDD3TwJB93Sto2bvW0X5qhN3wjH1DHBGHrKL9jU8hkQA0NB3R_Mf1_ZZkSk/s1600/power.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivuOqk32jGX1DKcs1p0l_L1cDQDrioThnwX2ZCazb0011wzSYQt4BgjAdwftj6eNE4ore1WmdATNpZHtyhSXDD3TwJB93Sto2bvW0X5qhN3wjH1DHBGHrKL9jU8hkQA0NB3R_Mf1_ZZkSk/s1600/power.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
2. SD-карточка&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Начальная загрузка происходит с SD-карты, но в комплекте она, как правило, не идет. Нужна любая полноразмерная SD, емкостью от 2 Гб. Для комфортной работы практически всех дистрибутивов рекомендуется емкость 4 Гб и скорость class 6 (нередко встречаются рекомендации &quot;от 8Гб и class 10&quot;).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Есть особенность установки полноразмерной карты в Raspberry Pi - она наполовину выступает за край:&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiG9OUShTKiyPFSaeuUzcpe_lEYg4nq0nQdp3-Z5sSFt2miOfVd220vY1-m3Bm8CXnu5GwrmAZR8DvEoQy_pahMX7_MAGup2v_RIzIQHBr3QGIIjxuQ201D8mIUfCO6zvKiurhHGgAIVpd2/s1600/sd1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiG9OUShTKiyPFSaeuUzcpe_lEYg4nq0nQdp3-Z5sSFt2miOfVd220vY1-m3Bm8CXnu5GwrmAZR8DvEoQy_pahMX7_MAGup2v_RIzIQHBr3QGIIjxuQ201D8mIUfCO6zvKiurhHGgAIVpd2/s1600/sd1.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Избежать такого позволяет специальный переходник и microSD:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFv-wezr3-nKJBI0DwDphyphenhyphenoLLDhmwM21ZVAldcU5Sm9iMDi-raG7wUhHapwSZ0WeaWzycZh5m5QKOlVjoqgxYfbBetQfUQVyKDDXkcfZba92B2Nx1_YtY7IttOA-OtJnuj5tvOR48IJtmA/s1600/sd2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFv-wezr3-nKJBI0DwDphyphenhyphenoLLDhmwM21ZVAldcU5Sm9iMDi-raG7wUhHapwSZ0WeaWzycZh5m5QKOlVjoqgxYfbBetQfUQVyKDDXkcfZba92B2Nx1_YtY7IttOA-OtJnuj5tvOR48IJtmA/s1600/sd2.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Разумеется, потребуется устройство, которое запишет скачанный из интернета образ на эту SD-карту. Подойдет любой компьютер с кард-ридером и операционной системой Windows/Linux/MacOS.&lt;/div&gt;
&lt;br /&gt;
&lt;span style=&quot;text-align: justify;&quot;&gt;В зависимости от того, что предполагается сотворить в итоге, могут также пригодиться:&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
3. Монитор и кабель к нему&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
К сожалению, установка дистрибутива часто протекает интерактивно, и приходится поглядывать на монитор, подойдет со входом HDMI или с видео-входом RCA (колокольчик). Качество картинки на HDMI, конечно же, будет лучше (не забудьте запастись соответствующим кабелем!)&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Монитор с DVI-входом тоже подойдет, только купите переходник HDMI-DVI:&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxaX1sv-cMHuZ1RfCBY7VWeCYOpGCz35IQhMc7gSh0CrxUBOGpFgIwK6ZHU8u32_BPZtvqxjKdl9KMY2s4RrfueXH0kDNxP2zk5VbVXfZfYMbITKMUZMLi1dhIOLarz4Gg9_jmdLUXzXKP/s1600/hdmi.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxaX1sv-cMHuZ1RfCBY7VWeCYOpGCz35IQhMc7gSh0CrxUBOGpFgIwK6ZHU8u32_BPZtvqxjKdl9KMY2s4RrfueXH0kDNxP2zk5VbVXfZfYMbITKMUZMLi1dhIOLarz4Gg9_jmdLUXzXKP/s1600/hdmi.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
4. Клавиатура и мышь&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Да, без них тоже сложно. Поскольку на Raspberry нет PS/2 - разъемов, подойдут только USB-устройства.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
5. USB-хаб&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Поскольку USB-портов на Raspberry Pi всего два (на модели А и того меньше), может оказаться нелишним. Обратите внимание на энергопотребление подключаемых устройств: чем их больше, тем мощнее должен быть блок питания у Raspberry. В противном случае, можно выбрать USB-хаб с собственным источником питания.&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Я практически сразу стал использовать хаб - мой экземпляр Raspberry перезагружался каждый раз, когда в USB вообще что-то вставляли. Вот он:&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJy8sXnbRvzjEhNeD7Cws-hSWYPLc-sbO8NWgVVwVw6vdflSDW5LN1J5-oGIAkb_B-mP4BDHtEpGjfJuEfB0Y7C6nw1eK1fWaPfbVt_W3WmrxLS6Qo2y-RNXw0IkiB3MfnhOii6dtyJ5ds/s1600/usbhub.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJy8sXnbRvzjEhNeD7Cws-hSWYPLc-sbO8NWgVVwVw6vdflSDW5LN1J5-oGIAkb_B-mP4BDHtEpGjfJuEfB0Y7C6nw1eK1fWaPfbVt_W3WmrxLS6Qo2y-RNXw0IkiB3MfnhOii6dtyJ5ds/s1600/usbhub.jpg&quot; height=&quot;187&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
6. Internet-подключение&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Для проводного потребуется сетевой Ethernet-кабель и свободный порт на коммутаторе, для беспроводного - USB-донгл. При установке дистрибутива довольно часто приходится наблюдать, как что-то докачивается или обновляется. С другой стороны, после завершения установки на устройство можно &quot;заходить&quot; удаленно (и, таким образом, монитор, клавиатура и мышь оказываются ненужными - при условии, что вы знаете ip-адрес, который получило устройство).&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
7. Кабель для вывода звука.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
На Raspberry Pi есть стерео-гнездо 3,5 мм. Если вы подключили монитор при помощи RCA-кабеля, для вывода звука может потребоваться аудио-кабель со стерео-джеком 3,5 мм с одной стороны и с другой - как у вас на звуковой системе или TV (наушники тоже заработают).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
В случае подключения по HDMI голову особо ломать не надо - звук пойдет там.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
А вот микрофонного гнезда, к сожалению, нет. Придется прикупить USB-гарнитуру или USB-микрофон.&lt;/div&gt;
&lt;br /&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;
Медиацентр на Raspberry Pi&lt;/h4&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Часто люди задаются вопросом, насколько высок &quot;порог входа&quot; в мир RaspberryPi: что надо знать, чтобы там работать&lt;strike&gt;, там же ужасный и непонятный Linux&lt;/strike&gt;? Всё зависит от дистрибутива, который будет выбран. Для тех, кто не хочет лишний раз пошевелить пальцем, предлагается &lt;b&gt;Raspbmc&lt;/b&gt;, который основан на &lt;a href=&quot;http://www.xbmc.org/&quot; target=&quot;_blank&quot;&gt;XBMC&lt;/a&gt; и прост в установке до предела. Ошибиться сложно, и если проделаете все правильно - получите на выходе готовый медиацентр.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Необходимое условие - наличие сетевого подключения у Raspberry (с сервером dhcp в придачу, от него Raspberry Pi получит сетевой адрес автоматически, вместе с выходом в Internet). Тогда клавиатура и мышь для установки вообще не нужны. Правда, для последующего управления медиацентром мышь все-таки потребуется.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Итак, отправляемся на&amp;nbsp;&lt;a href=&quot;http://www.raspbmc.com/download&quot;&gt;http://www.raspbmc.com/download&lt;/a&gt;&amp;nbsp;и получаем инсталятор для своей ОС вместе с подробными инструкциями по установке.&lt;/div&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Вставляем SD-карточку, распаковываем &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;raspbmc-win32.zip&lt;/span&gt; и запускаем &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;setup.exe&lt;/span&gt; (сопровождается запросом UAC, если установлена Vista и выше):&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuaCC86zIPJYPRh3eJNQklE47qpX5qwoMsJwDFMg68ItxFB1LhTNAUgdMoVl8kNy72E-jZoKebBEz5q0IaeWkPjUGFVhX_rJivZ0s4hPQicOx1rmu3JoZn9YuVGOh9PB-OYthq3-jXVVe-/s1600/ins.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuaCC86zIPJYPRh3eJNQklE47qpX5qwoMsJwDFMg68ItxFB1LhTNAUgdMoVl8kNy72E-jZoKebBEz5q0IaeWkPjUGFVhX_rJivZ0s4hPQicOx1rmu3JoZn9YuVGOh9PB-OYthq3-jXVVe-/s1600/ins.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Все данные на карточке погибнут, поэтому будьте внимательны! Выбирайте из списка именно ту карточку, на которую собираетесь использовать для установки Raspbian.&lt;/div&gt;
&lt;br /&gt;
Linux&lt;br /&gt;
&lt;br /&gt;
Вставьте SD-карточку в ридер, затем скачайте и запустите скрипт:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #dbdbdb; border: 0px; font-family: Monaco, monospace; font-size: 11px; line-height: 1.5; margin-bottom: 1.5em; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;wget http://svn.stmlabs.com/svn/raspbmc/release/installers/python/install.py
chmod +x install.py
&lt;span style=&quot;line-height: 1.5;&quot;&gt;sudo python install.py&lt;/span&gt;&lt;/pre&gt;
Появится &quot;дружественный интерфейс&quot;:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmiinImtoyWeyFWHFaKDLFDuXtFwWjXXgehKKpFftWvRB5ttqKOgJuBxG5C53ATPrM02KG12ER4-DNAGAqE0uRDhFU1IT86LHq7aOMnoVHxNCjRwWV7LO34cr9YJa2gckR1AdPMcC09jDW/s1600/installPython.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmiinImtoyWeyFWHFaKDLFDuXtFwWjXXgehKKpFftWvRB5ttqKOgJuBxG5C53ATPrM02KG12ER4-DNAGAqE0uRDhFU1IT86LHq7aOMnoVHxNCjRwWV7LO34cr9YJa2gckR1AdPMcC09jDW/s600/installPython.png&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Тут тоже важно не промахнуться мимо целевого диска (и не отформатировать случайно свой основной).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Всё, образ готов, теперь вставляем SD-карту в Raspberry Pi, подключаем его к монитору и к LAN, затем подаем питание и наслаждаемся радугой (заранее прошу прощения за муар - делал фото с экрана телевизора):&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbpJDunS8KEU1otLap-tYS4ijga28DL0sSZcSjyQGBkxlfD7J2CUbCCA3GXi-lrLaEu5yJr4pfwzRIo-tOngGOquk7IHtBBuE7PiAblpKYml6gAVNoSzo8Q_7sEJpnuLuWgNkX2c3bB6V5/s1600/step01.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbpJDunS8KEU1otLap-tYS4ijga28DL0sSZcSjyQGBkxlfD7J2CUbCCA3GXi-lrLaEu5yJr4pfwzRIo-tOngGOquk7IHtBBuE7PiAblpKYml6gAVNoSzo8Q_7sEJpnuLuWgNkX2c3bB6V5/s1600/step01.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
После Linux-оводы наслаждаются логами загрузки ядра:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6N3MUrG_nY-M0LOCKgGjqVVLHmsO-5q43mdYJ7zxV2yQZ_zSS4AWybUCrKDNIYr3GeeGLUzZCdjMv6igp0shS-lnq7nlv9itovGzIAkikYtUvDTt-67dBDQ7EwJ5-rvhNJNROzMZiJfjw/s1600/step02.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6N3MUrG_nY-M0LOCKgGjqVVLHmsO-5q43mdYJ7zxV2yQZ_zSS4AWybUCrKDNIYr3GeeGLUzZCdjMv6igp0shS-lnq7nlv9itovGzIAkikYtUvDTt-67dBDQ7EwJ5-rvhNJNROzMZiJfjw/s1600/step02.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее стартует интерфейс в стиле &lt;a href=&quot;http://ru.wikipedia.org/wiki/Ncurses&quot; target=&quot;_blank&quot;&gt;ncurses&lt;/a&gt; и сообщает, что он коннектится куда надо:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpRSWpCkVn65d9nNc772HFhUjQEa9k5iyRf-sKYeDebRtAcuoPQg9gF4D_xB1aVo4TnGD7O1AYSp8DjdnWMZ05l0028ACEgAx0xtyST_8i9I8GurKxO1ri0ehRzfBp8Dwf7oqqM_8DN7YH/s1600/step03.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpRSWpCkVn65d9nNc772HFhUjQEa9k5iyRf-sKYeDebRtAcuoPQg9gF4D_xB1aVo4TnGD7O1AYSp8DjdnWMZ05l0028ACEgAx0xtyST_8i9I8GurKxO1ri0ehRzfBp8Dwf7oqqM_8DN7YH/s1600/step03.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Если соединение прошло успешно, скачивается самый свежий образ:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhA6cTMwT_0utNU0JH6loHAeeDuviQcUQBzAZFG4PA0r7qQb6DaU__b6fGJXhFNlLJdNG2paPESaQxSHUWRDaAUzwSPXBkIK5rE936gR70cjHh8oZOAuzSHmu7cYjwHopViVD2fXrY8HPMF/s1600/step04.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhA6cTMwT_0utNU0JH6loHAeeDuviQcUQBzAZFG4PA0r7qQb6DaU__b6fGJXhFNlLJdNG2paPESaQxSHUWRDaAUzwSPXBkIK5rE936gR70cjHh8oZOAuzSHmu7cYjwHopViVD2fXrY8HPMF/s600/step04.jpg&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
(про кофе - истинная правда, а в действительности можно еще и супчик успеть навернуть...)&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGI0W_Uob0Y3uNQ-4BE3rFo9e3rExCSy8uZWcXUNBruwFdz0QrbQ9uWaZfpwd2msJOFI_EnX_8xYywrodCz5kfti5E6iOPgoeZlbZ_-4jCaKrF1PGXZ4PFiHT6hjpqJG1mL2sCGxSQ_B8P/s1600/step05.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGI0W_Uob0Y3uNQ-4BE3rFo9e3rExCSy8uZWcXUNBruwFdz0QrbQ9uWaZfpwd2msJOFI_EnX_8xYywrodCz5kfti5E6iOPgoeZlbZ_-4jCaKrF1PGXZ4PFiHT6hjpqJG1mL2sCGxSQ_B8P/s600/step05.jpg&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
И вот, наконец-то видим, что устройство пошло перезагружаться с таким лого:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjB8R0b3K7wAeU2BWdkg728AyncfDhow_ulzrzP4TOvBtDt90IzqafyEHolUxg0__75nTRv6kwt9vwcaGLstsY8xkraYvA97Jlv2Dq9Wut3PWPvytfVHNJ1qdLT_lA7luKCC7UOexLYgkmZ/s1600/step06.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjB8R0b3K7wAeU2BWdkg728AyncfDhow_ulzrzP4TOvBtDt90IzqafyEHolUxg0__75nTRv6kwt9vwcaGLstsY8xkraYvA97Jlv2Dq9Wut3PWPvytfVHNJ1qdLT_lA7luKCC7UOexLYgkmZ/s600/step06.jpg&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Ну, значит всё в порядке - через некоторое время попадаем в основной интерфейс Raspbmc:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigoDLehWBYlDX88xFI9xjPz3CcCzuweng2sDwOZ0NTRbe4OmN9JLAlWjwOBf01yDFcp94ZstkAi5z5bFSsqp8e8y2JBlFG2MQUWIIIrQH2jJwC2l9iO4LM2SEXQBoppVr81ADkWTgRE90K/s1600/raspbmc_start.jpeg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigoDLehWBYlDX88xFI9xjPz3CcCzuweng2sDwOZ0NTRbe4OmN9JLAlWjwOBf01yDFcp94ZstkAi5z5bFSsqp8e8y2JBlFG2MQUWIIIrQH2jJwC2l9iO4LM2SEXQBoppVr81ADkWTgRE90K/s1600/raspbmc_start.jpeg&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Описание GUI выходит за пределы нашей статьи - единственное, что отмечу - в настройках можно переключиться на русский язык.&lt;/div&gt;
&lt;br /&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;
Виртуальный Raspberry Pi&lt;/h4&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Чтобы экспериментировать с программным обеспечением Raspberry Pi, покупать его не обязательно. Можно воспользоваться &lt;a href=&quot;http://ru.wikipedia.org/wiki/QEMU&quot; target=&quot;_blank&quot;&gt;QEMU&lt;/a&gt;, и хоть это и не будет стопроцентным аналогом (чип BCM2835 не эмулируется), но довольно хорошим приближением к устройству с точки зрения архитектуры ARM. Для установки в Linux надо выполнить (в зависимости от типа дистрибутива):&lt;/div&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;yum install qemu&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
или&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;apt-get install qemu-system-arm&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Создайте рабочий каталог и скачайте туда два файла: &lt;a href=&quot;http://xecdesign.com/downloads/linux-qemu/kernel-qemu&quot;&gt;http://xecdesign.com/downloads/linux-qemu/kernel-qemu&lt;/a&gt;&amp;nbsp;и какой-нибудь образ ОС для Raspberry Pi &lt;a href=&quot;http://www.raspberrypi.org/downloads/&quot; target=&quot;_blank&quot;&gt;отсюда&lt;/a&gt; (я взял тот, что на основе Fedora, с интригующим названием &quot;PiDora&quot;) - распакуйте его, если он был запакован.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Есть вероятность, что для запуска в qemu этот имидж требуется немного подправить, для этого выясните параметры самого имиджа при помощи file:&lt;/div&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;$ file Pidora-2014-R1.img&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;Pidora-2014-R1.img: x86 boot sector; partition 1: ID=0xc, active, starthead 32, startsector 2048, 102400 sectors; partition 2: ID=0x83, starthead 127, &lt;b&gt;startsector 104448&lt;/b&gt;, 4355793 sectors, code offset 0xb8&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Умножьте число в startsrector для &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;partition 2&lt;/span&gt; на 512 (выделено жирным выше, в вашем варианте может отличаться) и полученный результат подставьте в параметре &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;offset&lt;/span&gt; при монтировании:&lt;/div&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;$ mkdir pidora&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;$ sudo mount&amp;nbsp;Pidora-2014-R1.img -o offset=53477376 ./pidora&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Открываем в любом текстовом редакторе файл &lt;/span&gt;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;./pidora/etc/ld.so.preload&lt;/span&gt;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;и комментируем единственную строку, добавляя впереди символ &lt;/span&gt;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt; Может статься, что такого файла не существует - в этом случае вообще ничего делать не нужно.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
После этого надо отмонтировать образ:&lt;/div&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;$ sudo umount ./pidora&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
И запустить QEMU следующей строкой:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;$ qemu-system-arm -kernel kernel-qemu -cpu arm1176 -m 256 -M versatilepb -&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;serial stdio -append &quot;root=/dev/sda2 panic=1&quot; -hda&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;Pidora-2014-R1.img&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Если все сделано правильно, увидим процесс загрузки и выйдем на начало графической установки:&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgI54ipk45nOEhKM5d3sC08EvkCaZaTMMKXIdTCOx5zDYty0GWRa75S1yfiGUEKexh_59fvVlQwyqPTeNYwzPTFKrUviM2sYibLi4jbU_pldQA378dB052W3F6hoMfpJE5FQAcQjcUVJ5oB/s600/pidora.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgI54ipk45nOEhKM5d3sC08EvkCaZaTMMKXIdTCOx5zDYty0GWRa75S1yfiGUEKexh_59fvVlQwyqPTeNYwzPTFKrUviM2sYibLi4jbU_pldQA378dB052W3F6hoMfpJE5FQAcQjcUVJ5oB/s1600/pidora.png&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
В следующей серии попробуем все-таки собраться с силами и что-то сделать своими руками, а пока можете исследовать дистрибутивы для RaspberryPi ;) &lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br /&gt;Материал опубликован на сайте mk90.blogspot.com под лицензией Creative Commons Share Alike 3.0&lt;/div&gt;</description><link>http://mk90.blogspot.com/2014/04/raspberry-pi.html</link><author>noreply@blogger.com (id)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqUALBPY9ZdawQQj5Fs1jtxrj08wXN1RmRdODKtxESnn9yXaatr-QBDtvNwtOuJdD4g90tnsznpFOfwp4E0wMRvpDS4M7HUI4Atn-9AwdjjoEzihNaYnKw7x5tN_YeWUgbcZfX0K4nDkw6/s72-c/rpilogo.png" height="72" width="72"/><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8944086625767573647.post-7344423753077088091</guid><pubDate>Sun, 30 Mar 2014 14:48:00 +0000</pubDate><atom:updated>2014-04-10T18:48:56.593+04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Arduino</category><category domain="http://www.blogger.com/atom/ns#">Arduino Shield</category><category domain="http://www.blogger.com/atom/ns#">ArduinoCompatible</category><category domain="http://www.blogger.com/atom/ns#">ArduinoIDE</category><category domain="http://www.blogger.com/atom/ns#">Ethernet</category><category domain="http://www.blogger.com/atom/ns#">Galileo</category><title>А все-таки она вертится!</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Мельком прочитав проскочившую в октябре прошлого года новость по поводу выхода очередной Arduino-совместимой платы &lt;a href=&quot;http://hothardware.com/News/Intel-Launches-Galileo-Arduino-Compatible-Board-With-New-Quark-X1000-SoC/&quot; target=&quot;_blank&quot;&gt;Intel Galileo&lt;/a&gt;, я почему-то не особенно и удивился. Но когда узнал, что она получила официальную поддержку от Arduino, не смог удержаться и заказал.&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtYV7vj5oV87l5B8NVMpMNUjC1RYJTY9UdIoU_o5zzDGqj7lGWO1YQBVy4oi7RwNU1flURg1QJVkqOEm2TzIFs7TdAPo2rS2V4acA69VaBNc51k2XJrpeY0n0c1hST_Xj9xQGe8b2Fcl2A/s600/galileo01.jpg&quot; width=&quot;600&quot; /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;
Прежде всего, надо осознать, что перед нами плата с Linux внутри, при этом ее программирование осуществляется самым привычным способом, через ArduinoIDE 1.5.3. Можно сказать, что мы получили продвинутый Arduino UNO R3 - на плате расположены колодки в формате Arduino pinout 1.0, к ней можно подключать стандартные шилды.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;* * *&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Приехавшая коробка интриговала - Галилея на ней можно признать с трудом, но зато мы видим отражение далеких звезд в стеклах очков незнакомца. Наверное, это современный ученый, который делает нечто космического масштаба (быть может, он и сам еще пока не знает что именно, не даром ниже мы читаем вопрос &quot;Что вы собираетесь сделать?&quot;) .&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3MCdmViQkroGR8JmfNYnkhEYtiA6_IaT0WO3OMyFwaHfBv92RwA4WHawIOlJVxRS076KFUR4UvobDohYa-ZwsFsg5_McnqhZ99dhhAWxLbOUWshsLBiklHJqr-L_2eEHOeF0Tcf04ngNU/s1600/unbox01.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3MCdmViQkroGR8JmfNYnkhEYtiA6_IaT0WO3OMyFwaHfBv92RwA4WHawIOlJVxRS076KFUR4UvobDohYa-ZwsFsg5_McnqhZ99dhhAWxLbOUWshsLBiklHJqr-L_2eEHOeF0Tcf04ngNU/s600/unbox01.jpg&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Сбоку, однако, мы видим, что внутри продукт Galileo1, сделан в Китае:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBPBLb7Bmvm2k6WqX6EgjsN9JVOHgh1H2PriZHibdoAdIaRNhlkZBXZU0GGwnlEn0q4WSR2vrXoTrm9n19xqrMfKYp6m2UANverk6B5IbkYeYwtEmgFx797EGCiXJdkiKvlBFugTvHuoAy/s1600/unbox02.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBPBLb7Bmvm2k6WqX6EgjsN9JVOHgh1H2PriZHibdoAdIaRNhlkZBXZU0GGwnlEn0q4WSR2vrXoTrm9n19xqrMfKYp6m2UANverk6B5IbkYeYwtEmgFx797EGCiXJdkiKvlBFugTvHuoAy/s600/unbox02.jpg&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Ну и донышко коробки, чтобы не пропадало, тоже использовано для схематического изображения содержимого:&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVLLf-SEAm9Kf9za7MIIp7J-hmeq13nnxD96kHyrgN2Zx14Uiwjlqgs6mL_wjTL0KGCG3F9sec__ZjuHqaRVXXWEapsxreLP7zIQ0h_MXj-MufT4GYMJoYMhdzRR8dl-BXyTFuHHN4I2HZ/s1600/unbox03.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVLLf-SEAm9Kf9za7MIIp7J-hmeq13nnxD96kHyrgN2Zx14Uiwjlqgs6mL_wjTL0KGCG3F9sec__ZjuHqaRVXXWEapsxreLP7zIQ0h_MXj-MufT4GYMJoYMhdzRR8dl-BXyTFuHHN4I2HZ/s600/unbox03.jpg&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Устав вертеть коробочку в руках, разрезаем две прозрачные пломбы-липучки и снимаем крышку:&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6PBlmZj-nDkLIF3lW4yvgh6axop4BFsVT9bD8GnzfvQMTCbvqmpvdbmBGiMcniJbAGrelhNcCraztWj5o8DDlIRE6DpK_uEZH6upvOFuliSE1SAIIyHDtn4swkAZwyA_k5Bgl3TM3s3gS/s1600/unbox04.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6PBlmZj-nDkLIF3lW4yvgh6axop4BFsVT9bD8GnzfvQMTCbvqmpvdbmBGiMcniJbAGrelhNcCraztWj5o8DDlIRE6DpK_uEZH6upvOFuliSE1SAIIyHDtn4swkAZwyA_k5Bgl3TM3s3gS/s600/unbox04.jpg&quot;  width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Сама плата хоть и ненамного, но превышает размеры Arduino Uno - получается где-то 7 на 10 см. Это навязчивое &quot;What will you make?&quot; уже наводит на мысль, что с этим надо было давным-давно определиться, ещё до вскрытия коробки. На внутренней стороне крышки опять схема:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-7F3wNLm1YXyOphS8xoRJfeGLfXQZw3y17gSy96ld-ao53kd5Dl6fmBreeG8n3iLrxJSNVFY2DZLPFSxiCqeHSIJaH_Fb8OaIGm8XGYKNV-LtM6zqCHJYbn-bmEV8qAz1M1xBzlvkCawK/s1600/unbox05.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-7F3wNLm1YXyOphS8xoRJfeGLfXQZw3y17gSy96ld-ao53kd5Dl6fmBreeG8n3iLrxJSNVFY2DZLPFSxiCqeHSIJaH_Fb8OaIGm8XGYKNV-LtM6zqCHJYbn-bmEV8qAz1M1xBzlvkCawK/s600/unbox05.jpg&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Стало быть, без блока питания она не заведется...&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRUhPgSkCBSdIlXXvyxeSkojr-tIVoiIZEEGJRJip16FVngT5do95UJ7GBxUPNJTxrDToNbLB6OAY8nGmV8KeYGPRoHiaDXPbzmk9HARXp0T2G6aJHWm3sOUSZAQIeC4G2sz6Za7Se6FiK/s1600/unbox06.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRUhPgSkCBSdIlXXvyxeSkojr-tIVoiIZEEGJRJip16FVngT5do95UJ7GBxUPNJTxrDToNbLB6OAY8nGmV8KeYGPRoHiaDXPbzmk9HARXp0T2G6aJHWm3sOUSZAQIeC4G2sz6Za7Se6FiK/s600/unbox06.jpg&quot;  width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Ах, какой приятный сюрприз: блок питания в комплекте! Наверное, стоило бы и шнурок microUSB вложить... Ну или хотя бы кабель microUSB OTG. Из всех насадок выбираем европейскую, зачитываем Safety Instruction на русском:&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrU-t6SE4Aniz0stVXvAxjmUELYYwi8gLdm5sBqS3ULn5_i4nlUoBtOxHQFxGtIaGj_QfS_yJ-D4wq9mgSjE9o-q_4tM1cBARkahUZME-n6MQK9kW-VgZ9xRlIJU9ScXS4kveoJsIOoh8A/s1600/unbox07.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrU-t6SE4Aniz0stVXvAxjmUELYYwi8gLdm5sBqS3ULn5_i4nlUoBtOxHQFxGtIaGj_QfS_yJ-D4wq9mgSjE9o-q_4tM1cBARkahUZME-n6MQK9kW-VgZ9xRlIJU9ScXS4kveoJsIOoh8A/s1600/unbox07.jpg&quot; height=&quot;640&quot; width=&quot;496&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Из этой инструкции мы узнаем, что на плату можно прикрепить батарейку часов реального времени, а также, что блок питания &lt;b&gt;Phihong&lt;/b&gt; одобрен уважаемой фирмой Intel как сертифицированный аксессуар.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Теперь самое время присмотреться к компонентам:&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhZMML-l3onbQjkJZ1_uI95uBeWOY-jhvVy_3MLTTN97-zgeqWjUX9jYp5dC7LKuYpirV168sMRd51a0suTgVabfjV95dv2KUihFgO6K1QkK7K2_OP03IhjNlmL1up1C11jlT9Rv_KLX5R/s1600/galileo02.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhZMML-l3onbQjkJZ1_uI95uBeWOY-jhvVy_3MLTTN97-zgeqWjUX9jYp5dC7LKuYpirV168sMRd51a0suTgVabfjV95dv2KUihFgO6K1QkK7K2_OP03IhjNlmL1up1C11jlT9Rv_KLX5R/s1600/galileo02.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
1. Эта зелененькая BGA-микруха и есть &lt;b&gt;ЦП&lt;/b&gt;, Intel® Quark SoC X1000, работающая на тактовой частоте 400 МГц. Мы получили почти Pentium ;) (строго говоря - Intel Pentium Instruction set Architecture):&lt;/div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;32-битный;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;L1 кэш 16 Кбайт;&amp;nbsp;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;внутренняя память 512 Кбайт;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;одно ядро, один тред, постоянная скорость выполнения;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;поддержка ACPI-состояний для засыпания;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;часы RTC, сохраняют данные при питании от внешней литиевой батарейки 3В.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Стоит он 13..16 USD, но приобретать его вам навряд ли придется - BGA-корпус не располагает к DIY-творчеству.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
2. Внешняя &lt;b&gt;память&lt;/b&gt;, в сумме имеем 256 Мбайт DDR3. В нем хранятся и данные, и программы - после выключения питания они, разумеется, теряются.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
3. &lt;b&gt;Флешка&lt;/b&gt;. Загрузка Linux идет прямо оттуда, остальная память может быть использована для хранения каких-то данных, суммарный объем 8 Мегабайт. &amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
4. Это не звук! Это разъем последовательного порта &lt;b&gt;RS232&lt;/b&gt; (микросхема MAX3232 находится справа). Через этот порт можно &amp;nbsp;получить доступ к консоли Linux, параметры 115200-8-N-1&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
5. Сетевой порт &lt;b&gt;Ethernet&lt;/b&gt; 10/100. Можно использовать в скетчах.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
6. Разъем &lt;b&gt;USB device&lt;/b&gt;. Сюда подключается компьютер, через этот порт загружаются скетчи. Разработчики почему-то советуют сначала подключить к плате источник питания, а уже потом этот порт - к компьютеру.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
7. Разъем &lt;b&gt;USB host&lt;/b&gt;. К нему можно подключать разнообразную периферию - флешки, камеры, аудио-карты и тому подобное.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
8. &lt;b&gt;microSD&lt;/b&gt;, поддерживаются SDHC до 32 Гиговые. С карточки придется загрузиться, если требуется работа с WiFi - драйвера не смогли уместиться 8 Мб флешки (3). С другой стороны, она тоже доступна для скетчей.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
9. &lt;b&gt;Внешнее питание&lt;/b&gt; +5VDC. Разъем такой же в точности, как на платах Arduino. Блок питания в комплекте на 2А, в документации нашел упоминания и про 3А. Конечно, для шилд-плат +5В не может быть полноценным &lt;b&gt;VIN&lt;/b&gt;-ом, и Galileo позволяет соединять их по желанию.&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
10. &lt;b&gt;Розетки для подключения шилд-плат&lt;/b&gt;, всё как на UNO R3. Есть пара моментов, о которых стоит помнить:&lt;/div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;цифровой пин в режиме выхода способен на ток до &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;10 мА&lt;/span&gt;&lt;/b&gt;, в режиме входа - принять ток до 25 мА. Не вздумайте подключать обычный светодиод напрямую, без токоограничительного резистора 330 Ом;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;i&gt;суммарный&lt;/i&gt; ток, который могут отдать цифровые пины не должен превышать 80 мА;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;пин AREF на Galileo - декоративный, изменить опорное напряжение АЦП нельзя - не только с помощью этого входа, но и с помощью &lt;a href=&quot;http://mk90.ru/wiki/index.php/AnalogReference&quot; target=&quot;_blank&quot;&gt;analogReference()&lt;/a&gt;;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;аналоговые пины можно при желании переключить на разрешающую способность 12 бит (0..4095), измерение по умолчанию идет в диапазоне 0..+5В и по стандартной 10-битной шкале;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;питающий пин +3,3V способен на ток до 800 мА;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;значение напряжения на пине VIN зависит от установленного рядом джампера.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
11. Гребенка &lt;b&gt;ICSP&lt;/b&gt;. Загружать через нее бутлоадер не придется, скорее подключаться к шилд-платам с поддержкой аппаратного SPI.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
12. &lt;b&gt;Кнопка сброса скетча&lt;/b&gt;. Скетч сбрасывается, остальная система продолжает работать.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
13. &lt;b&gt;Кнопка сброса SoC&lt;/b&gt;. По ее нажатию происходит перезагрузка всей системы, и скетча за компанию.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
14. Вилочка для подключения внешней батарейки &lt;b&gt;RTC&lt;/b&gt;. Полезно, если Galileo должен вспоминать время при включении питания.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Кроме всего прочего, есть несколько джамперов, довольно важных:&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhr_Augk7QlEZZut5OZJ2qWlPCKzYriSLPqOLDrVHd-YyInXfBW542xPsAoLqN47tIpjlKPIBanw2IOb5F4z2EUoA6ti6Ff47z5i9gfoMPOemPkKmX_MvkO77db1NKWINQYU6LTOd8xYJHD/s1600/galileo03.jpg&quot; width=&quot;600&quot; /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;IOREF&lt;/b&gt;: выбирает напряжение логической единицы - +5В или +3,3В. Переключением напряжений сейчас никого не удивишь, хотя для клонов классических плат Arduino существует извечная проблема - ATmega упорно запитывают от +3,3В, но в даташите тактовая частота 16 МГц на таком питании внятно не гарантируется. Здесь, конечно же, с напряжением питания SoC это никак не связано ;)&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;VIN&lt;/b&gt;: этот джампер соединяет пин VIN с питанием +5В. Если шилд такое питание не устраивает, можно разомкнуть этот джампер и подать на шилд +9В. Только будьте аккуратней - не замкните этот джампер при поданном напряжении &amp;gt;5В, иначе с вашим Galileo произойдет то, что в свое время грозила с ним сделать святая католическая церковь.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;I2C&lt;/b&gt;: Служит для изменения адресов устройств I2C на плате. Поскольку на двухпроводной шине I2C все устройства обязаны иметь собственный адрес, то теоретически имеется ситуация, когда адреса двух устройств, оказавшихся волей судеб на одной шине, совпадут. На Galileo таковыми являются флешка 8 Мб и расширитель GPIO (именно через него реализован PWM для пинов Arduino). По умолчанию это адреса&amp;nbsp;0100000 &amp;nbsp;и&amp;nbsp;1010000, но если переставить этот джампер на первый пин (помечен белым треугольничком), то к адресам добавится единица - будет 0100001 &amp;nbsp;и&amp;nbsp;1010001.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Наконец, с обратной стороны платы есть разъем &lt;b&gt;Full PCI Express&lt;/b&gt;, который поддерживает PCIe 2.0. Можно подключать платы половинного размера через специальный переходник, а на коннекторе есть USB 2.0 хост.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Подводя итог по поводу начинки, полезно закрепить, помедитировав на блок-схему (кликабельно):&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXnVv-jrGFJqbwfoH3CnhLzbecBNQ-3Bn2poPoNounPhQwfhASK9FAsfrzJoLQkepbmNO7lylReswKBOeXTeKb43nuGjy2d-tRYF2tdzMxUkgUm3lfHOftmpOpVFsaPivq_OmfUDTYnF3M/s1600/galileo04.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXnVv-jrGFJqbwfoH3CnhLzbecBNQ-3Bn2poPoNounPhQwfhASK9FAsfrzJoLQkepbmNO7lylReswKBOeXTeKb43nuGjy2d-tRYF2tdzMxUkgUm3lfHOftmpOpVFsaPivq_OmfUDTYnF3M/s600/galileo04.png&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
На плате есть светодиоды &quot;USB&quot;, &quot;SD&quot;, &quot;ON&quot; и &quot;GP&quot;. &amp;nbsp;Последний соответствует светодиоду L, подключенному к D13 на платах Arduino. Чтобы исполнить Blink (убедиться, что плата работает), идем на &lt;a href=&quot;http://www.intel.com/support/galileo/&quot; target=&quot;_blank&quot;&gt;страничку Galileo&lt;/a&gt; и качаем оттуда версию ArduinoIDE 1.5.3. Файл находится в разделе загрузок и начинается с &quot;Intel_Galileo_Arduino_SW_on&quot;. После распаковки и запуска выберите порт подключения (в Windows подключенная плата представится как &quot;Gadget Serial V2.4&quot;, для нее потребуется &quot;обновить драйвера&quot;; в Linux - как /dev/ttyACMXXX и никаких драйверов не понадобится), выберите из примеров &lt;b&gt;Blink&lt;/b&gt;, нажмите Ctrl-U и подождите, пока закончится загрузка.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Полюбовавшись на мигающий огонек, можно попробовать проделать с этой платой манипуляции, выходящие за возможности Arduino UNO. Например, достучаться до внутреннего Linux-а, с помощью такого скетча:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre&gt;&lt;span style=&quot;color: #cc6600;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;setup&lt;/b&gt;&lt;/span&gt;() { 
&amp;nbsp;&amp;nbsp;system(&lt;span style=&quot;color: #006699;&quot;&gt;&quot;telnetd -l /bin/sh&quot;&lt;/span&gt;);
}
&lt;span style=&quot;color: #cc6600;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;loop&lt;/b&gt;&lt;/span&gt;() {
&amp;nbsp;&amp;nbsp;system&amp;nbsp;(&amp;nbsp;&lt;span style=&quot;color: #006699;&quot;&gt;&quot;ifconfig eth0 &amp;gt; /dev/ttyGS0&quot;&lt;/span&gt; ); &lt;span style=&quot;color: #7e7e7e;&quot;&gt;// &lt;/span&gt;
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;delay&lt;/span&gt; ( 5000 ); 
}&amp;nbsp;

&lt;/pre&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Никаких хитростей -&amp;nbsp;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;system&lt;/span&gt; делает тоже самое, что и команда с тем же названием на UNIX-подобных системах: запускает какую-либо команду во внешнем shell. В данном случае она в &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;setup&lt;/span&gt; запускает сервер Telnet, а далее в цикле выводит текущую информацию о сетевом интерфейсе в порт Serial Monitor. Если адрес выдан, мы должны увидеть что-то типа:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;eth0 &amp;nbsp; &amp;nbsp; Link encap:Ethernet &amp;nbsp;HWaddr 00:23:14:09:15:24 &amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; inet addr:192.168.100.20 &amp;nbsp;Bcast:192.168.100.255 &amp;nbsp;Mask:255.255.255.0&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; inet6 addr: fe80::223:14ff:fe09:1524/64 Scope:Link&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; UP BROADCAST RUNNING MULTICAST &amp;nbsp;MTU:1500 &amp;nbsp;Metric:1&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; RX packets:31852 errors:0 dropped:0 overruns:0 frame:0&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TX packets:23743 errors:0 dropped:0 overruns:0 carrier:0&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; collisions:0 txqueuelen:1000&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; RX bytes:28794897 (28.7 MB) &amp;nbsp;TX bytes:4941927 (4.9 MB)&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Берем из второй строки ip-адрес, запускаем telnet, передавая его в качестве аргумента, получаем приглашение от рута:&lt;/div&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;Poky 9.0.2 (Yocto Project 1.4 Reference Distro) 1.4.2 clanton&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;sh-4.2#&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Если по каким-то причинам плата не получает адрес (например, просто нет сервера dhcp), можно изменить &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;setup&lt;/span&gt; таким образом, чтобы перед запуском &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;telnet&lt;/span&gt; нужный адрес присваивался вручную:&lt;/div&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;color: #cc6600;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;setup&lt;/b&gt;&lt;/span&gt;() { 
&amp;nbsp;&amp;nbsp;system(&lt;span style=&quot;color: #006699;&quot;&gt;&quot;ifconfig eth0 192.168.100.101&quot;&lt;/span&gt;);
&amp;nbsp;&amp;nbsp;system(&lt;span style=&quot;color: #006699;&quot;&gt;&quot;telnetd -l /bin/sh&quot;&lt;/span&gt;);
}

&lt;/pre&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Что можно делать в командной строке? Да всё, что угодно - с рутовыми-то привилегиями ;) Однако будьте предельно осторожны, доступ к файловой системе идет в режиме rw и необдуманные действия могут повлечь необходимость ее восстановления.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
В качестве примера, обратимся к портам ввода-вывода, для этого:&lt;/div&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;/ # &lt;b&gt;login root&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;root@clanton:~# &lt;b&gt;cd /sys/class/gpio/&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;root@clanton:/sys/class/gpio# &lt;b&gt;ls&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;export &amp;nbsp; &amp;nbsp; &amp;nbsp;gpio20 &amp;nbsp; &amp;nbsp; &amp;nbsp;gpio29 &amp;nbsp; &amp;nbsp; &amp;nbsp;gpio4 &amp;nbsp; &amp;nbsp; &amp;nbsp; gpio48 &amp;nbsp; &amp;nbsp; &amp;nbsp;gpiochip16&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;gpio0 &amp;nbsp; &amp;nbsp; &amp;nbsp; gpio21 &amp;nbsp; &amp;nbsp; &amp;nbsp;gpio3 &amp;nbsp; &amp;nbsp; &amp;nbsp; gpio40 &amp;nbsp; &amp;nbsp; &amp;nbsp;gpio49 &amp;nbsp; &amp;nbsp; &amp;nbsp;gpiochip2&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;gpio1 &amp;nbsp; &amp;nbsp; &amp;nbsp; gpio22 &amp;nbsp; &amp;nbsp; &amp;nbsp;gpio30 &amp;nbsp; &amp;nbsp; &amp;nbsp;gpio41 &amp;nbsp; &amp;nbsp; &amp;nbsp;gpio50 &amp;nbsp; &amp;nbsp; &amp;nbsp;gpiochip8&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;gpio14 &amp;nbsp; &amp;nbsp; &amp;nbsp;gpio23 &amp;nbsp; &amp;nbsp; &amp;nbsp;gpio31 &amp;nbsp; &amp;nbsp; &amp;nbsp;gpio42 &amp;nbsp; &amp;nbsp; &amp;nbsp;gpio51 &amp;nbsp; &amp;nbsp; &amp;nbsp;unexport&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;gpio15 &amp;nbsp; &amp;nbsp; &amp;nbsp;gpio24 &amp;nbsp; &amp;nbsp; &amp;nbsp;gpio32 &amp;nbsp; &amp;nbsp; &amp;nbsp;gpio43 &amp;nbsp; &amp;nbsp; &amp;nbsp;gpio52&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;gpio16 &amp;nbsp; &amp;nbsp; &amp;nbsp;gpio25 &amp;nbsp; &amp;nbsp; &amp;nbsp;gpio36 &amp;nbsp; &amp;nbsp; &amp;nbsp;gpio44 &amp;nbsp; &amp;nbsp; &amp;nbsp;gpio53&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;gpio17 &amp;nbsp; &amp;nbsp; &amp;nbsp;gpio26 &amp;nbsp; &amp;nbsp; &amp;nbsp;gpio37 &amp;nbsp; &amp;nbsp; &amp;nbsp;gpio45 &amp;nbsp; &amp;nbsp; &amp;nbsp;gpio54&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;gpio18 &amp;nbsp; &amp;nbsp; &amp;nbsp;gpio27 &amp;nbsp; &amp;nbsp; &amp;nbsp;gpio38 &amp;nbsp; &amp;nbsp; &amp;nbsp;gpio46 &amp;nbsp; &amp;nbsp; &amp;nbsp;gpio55&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;gpio19 &amp;nbsp; &amp;nbsp; &amp;nbsp;gpio28 &amp;nbsp; &amp;nbsp; &amp;nbsp;gpio39 &amp;nbsp; &amp;nbsp; &amp;nbsp;gpio47 &amp;nbsp; &amp;nbsp; &amp;nbsp;gpiochip0&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Первый строкой мы логинимся (правильно устанавливаются переменные окружения, тот же prompt), второй переходим в каталог в &lt;a href=&quot;http://ru.wikipedia.org/wiki/Sysfs&quot; target=&quot;_blank&quot;&gt;sysfs&lt;/a&gt;, где представлены все GPIO нашей платы - в виде набора каталогов с управляющими файлами.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;Как связаны номера GPIO и пинов Arduino в Galileo?&lt;/b&gt;&amp;nbsp;А вот так:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table border=&quot;1&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;th&gt;Пин Arduino&lt;/th&gt;&lt;th&gt;GPIO Linux&amp;nbsp;&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;50&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;51&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;14&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;15&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;28&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;17&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;24&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;27&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;26&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;19&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;25&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;38&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;13&lt;/td&gt;&lt;td&gt;39&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;14&lt;/td&gt;&lt;td&gt;44&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;15&lt;/td&gt;&lt;td&gt;45&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;46&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;17&lt;/td&gt;&lt;td&gt;47&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;18&lt;/td&gt;&lt;td&gt;48&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;19&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Таким образом, например, чтобы изменить состояние пина D13, мы должны манипулировать файлами в каталоге &lt;b&gt;gpio39&lt;/b&gt;. Но допустим, нам надо просто поморгать светодиодом &lt;b&gt;GP&lt;/b&gt;. Он подключен к аппаратно независимому пину &lt;b&gt;gpio3&lt;/b&gt; (звучит странно, но это правда - для скетча это один пин, аппаратно - два). Проделаем следующее:&lt;/div&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;root@clanton:/sys/class/gpio# cd gpio3&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;root@clanton:/sys/devices/pci0000:00/0000:00:1f.0/sch_gpio.2398/gpio/gpio3# ls&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;active_low &amp;nbsp;device &amp;nbsp; direction &amp;nbsp; drive &amp;nbsp; power &amp;nbsp; subsystem &amp;nbsp; uevent &amp;nbsp; &amp;nbsp; &amp;nbsp;value&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Первой командой мы переходим в каталог с управляюще-информационными файлами для пина, второй - распечатываем их список. Файл &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;direction&lt;/span&gt; отвечает за направление пина - ввод или вывод. А файл &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;value&lt;/span&gt; - за значение. Такая последовательность команд включает светодиод:&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;# echo out &amp;gt; direction&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;# echo 1 &amp;gt; value&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
А такая - гасит:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;# echo 0 &amp;gt; value&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Снова переходя к аппаратной части, хочу обратить внимание на один важный момент.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
На плате есть некоторое количество периферии, которое доступно скетчам Arduino в режиме совместимости. Это, например, означает, что у вас есть виртуальный Ethernet Shield, для использования которого надо всего-то подключить стандартную библиотеку Ethernet.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Таким же образом можно получить и виртуальный WiFi Shield, но для этого надо не только подключить стандартную библиотеку WiFi, но и установить сам модуль WiFi в разъем Mini PCIe, загрузиться с SD-карточки и убедиться, что драйвер распознал карточку.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
И к самой SD-карточке тоже можно получить доступ через стандартную библиотеку SD.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Во всех перечисленных случаях явное преимущество состоит в возможности использования ранее написанных скетчей - с минимальными модификациями.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Подводя промежуточный итог, скажу что не обошлось и без косяков:&lt;/div&gt;
&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;я долго не мог понять, как сбрасывать скетч - нажатие на кнопку reset, казалось, не давало эффекта. Это оказалось наполовину правдой - сброс производится по &lt;i&gt;отпусканию&lt;/i&gt; кнопки, а до этого момента скетч продолжал работать (на обычном Arduino он на время нажатия останавливается).&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;сетевой карте не выдавался ip-адрес через dhcp. Пришлось обновить firmware - ура, помогло! Но при этом перестала нормально работать кнопка reboot :(&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;при загрузке с SD-карты, старая карточка WiFi, оставшаяся на память от погибшего лаптопа, работать не захотела. То ли драйвера в сборке нет, то ли она тоже приказала долго жить, надо разбираться :(&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Поскольку ядро Arduino эмулируется аппаратно, то новые косяки должны всплывать постоянно, и вопрос только в том, насколько оперативно их будут фиксить. И тут есть некоторые сомнения - хотя разработка Intel действительно полностью открыта (как всегда - схемы, чертежи и софт с исходниками доступны для изучения), сколько еще она будет уделять ей времени? Год или два, а потом что-то новенькое выпустят, например &lt;a href=&quot;http://www.intel.com/content/www/us/en/do-it-yourself/edison.html&quot; target=&quot;_blank&quot;&gt;Edison&lt;/a&gt;? Очень похоже, это devboard для Intel Quark X1000, который раскручивают при помощи Arduino.&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
С другой стороны, за 80 USD вы получаете аналоги &lt;a href=&quot;http://arduino.cc/en/Main/ArduinoBoardUno&quot; target=&quot;_blank&quot;&gt;Arduino UNO R3&lt;/a&gt; и &lt;a href=&quot;http://arduino.cc/en/Main/ArduinoEthernetShield&quot; target=&quot;_blank&quot;&gt;Ethernet Shield&lt;/a&gt;, оригиналы которых стоят 30 и 40 USD соответственно, но с более широкими возможностями внутреннего Linux. Правда, однажды такое уже cделали - выпустив&amp;nbsp;&lt;a href=&quot;http://arduino.cc/en/Main/ArduinoBoardYun&quot; target=&quot;_blank&quot;&gt;Arduino  Yún&lt;/a&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Так или иначе, Galileo с нами. Будет время - попробую покопаться в его внутреннем устройстве чуть глубже.&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br /&gt;Материал опубликован на сайте mk90.blogspot.com под лицензией Creative Commons Share Alike 3.0&lt;/div&gt;</description><link>http://mk90.blogspot.com/2014/03/blog-post.html</link><author>noreply@blogger.com (id)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtYV7vj5oV87l5B8NVMpMNUjC1RYJTY9UdIoU_o5zzDGqj7lGWO1YQBVy4oi7RwNU1flURg1QJVkqOEm2TzIFs7TdAPo2rS2V4acA69VaBNc51k2XJrpeY0n0c1hST_Xj9xQGe8b2Fcl2A/s72-c/galileo01.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8944086625767573647.post-3584939041369292868</guid><pubDate>Thu, 30 Jan 2014 14:38:00 +0000</pubDate><atom:updated>2014-01-30T18:38:31.035+04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Freeduino</category><category domain="http://www.blogger.com/atom/ns#">Freeduino 32u4</category><category domain="http://www.blogger.com/atom/ns#">Hardware</category><category domain="http://www.blogger.com/atom/ns#">Новости</category><title>Freeduino 32u4 R6</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Вышла очередная ревизия нашей платы на &lt;b&gt;ATmega32u4&lt;/b&gt;, уже шестая по счету.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiynnTk7cvROceZYk9a5_cEqVaZQlEh_upJDAhiv8GtOwiF0c9ktwYoHiRO6RNOrdqCyIrzZ_7rVZCZbns-aQDU_ESwTN-X2JXDV1eFB7GWX_e7WhSpKAGFTTm-EzmQBnWXuxwznIkKM00O/s1600/new_freeduino_32u4.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiynnTk7cvROceZYk9a5_cEqVaZQlEh_upJDAhiv8GtOwiF0c9ktwYoHiRO6RNOrdqCyIrzZ_7rVZCZbns-aQDU_ESwTN-X2JXDV1eFB7GWX_e7WhSpKAGFTTm-EzmQBnWXuxwznIkKM00O/s600/new_freeduino_32u4.jpg&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
(слева направо - Freeduino 32u4 R4, Freeduino 324u4 R6, Freeduino Nano)&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Основная борьба шла за &lt;b&gt;уменьшение размеров&lt;/b&gt;, поскольку плата в первую очередь предназначена для беспаечной макетки. Ура, теперь будет закрыт на один ряд отверстий меньше (и по вертикали, и по горизонтали). Разъем USB тоже уменьшился (mini -&amp;gt; micro).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
К сожалению, продолжать уменьшать размеры мешает осознанная необходимость размещать удобочитаемую шелкографию с названиями пинов (без нее придется подглядывать в картинку с обозначениями). Не исключаю, что в будущем перейдем на QFN-корпус и получится что-то наподобие &lt;a href=&quot;http://arduino.cc/en/Main/ArduinoBoardMicro&quot; target=&quot;_blank&quot;&gt;Arduino Micro&lt;/a&gt;. Напоминаю, что&amp;nbsp;&amp;nbsp;сейчас на плате отсутствует вход VIN, и питать её можно &lt;i&gt;только&lt;/i&gt; от USB или источника +5В.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Немного модифицирован бутлоадер. Нам пришлась по душе идея SparkFun: &lt;i&gt;одиночное&lt;/i&gt; нажатие на сброс теперь перезапускает скетч, а вот для активизации бутлоадера надо нажать на сброс дважды:&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTmIG7Yo96lIum0MvnmLr5D9ZC_ACYjHtD7SsGpRObk2SCNkeXXoT3_P0V666lriNAuT8RyCE62iF9XwZzTppc0JdNY4GDsYDPoYMNFOP0CPN7a8jEj806xUQctebvjIn660tiPgyFLjm_/s1600/newboot.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTmIG7Yo96lIum0MvnmLr5D9ZC_ACYjHtD7SsGpRObk2SCNkeXXoT3_P0V666lriNAuT8RyCE62iF9XwZzTppc0JdNY4GDsYDPoYMNFOP0CPN7a8jEj806xUQctebvjIn660tiPgyFLjm_/s1600/newboot.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Это удобно, если надо быстро перезапустить скетч, не теряя 8 секунд на ожидание завершения бутлоадера.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Для владельцев предыдущих ревизий платы, желающих прошить &lt;a href=&quot;http://mk90.ru/files/source/freeduino-r6-bootloader.zip&quot;&gt;новый бутлоадер Freeduino32u4&lt;/a&gt;: это можно сделать через ArduinoIDE или через avrdude:&lt;/div&gt;
&lt;br /&gt;
a&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;vrdude -c stk500v2 -P avrdoper -B 3 -p atmega32u4 -F -e -u -U lock:w:0x3f:m -U efuse:w:0xcb:m -U hfuse:w:0xd8:m -U lfuse:w:0xff:m&lt;br /&gt;&lt;br /&gt;avrdude -c stk500v2 -P avrdoper -B 3 -B 1.1 -p atmega32u4 -F -U flash:w:file.hex -U lock:w:0x2f:m&lt;/span&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Конечно, для этого потребуется программатор (строки программирования приведены для &lt;a href=&quot;http://mk90.ru/store/ru/search?orderway=desc&amp;amp;search_query=avrdoper&quot;&gt;AVRDoper&lt;/a&gt;).&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br /&gt;Материал опубликован на сайте mk90.blogspot.com под лицензией Creative Commons Share Alike 3.0&lt;/div&gt;</description><link>http://mk90.blogspot.com/2014/01/freeduino-32u4-r6.html</link><author>noreply@blogger.com (id)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiynnTk7cvROceZYk9a5_cEqVaZQlEh_upJDAhiv8GtOwiF0c9ktwYoHiRO6RNOrdqCyIrzZ_7rVZCZbns-aQDU_ESwTN-X2JXDV1eFB7GWX_e7WhSpKAGFTTm-EzmQBnWXuxwznIkKM00O/s72-c/new_freeduino_32u4.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8944086625767573647.post-7938075296234073099</guid><pubDate>Mon, 30 Dec 2013 08:00:00 +0000</pubDate><atom:updated>2014-01-04T02:39:26.500+04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Arduino</category><category domain="http://www.blogger.com/atom/ns#">Arduino 1.0 libs</category><category domain="http://www.blogger.com/atom/ns#">Hardware</category><category domain="http://www.blogger.com/atom/ns#">Software</category><title>Freeduino wireless (2)</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Сегодня я хочу описать очередной способ беспроводного общения для Arduino. В &lt;a href=&quot;http://mk90.blogspot.ru/2012/04/freeduino-wireless-1.html&quot;&gt;предыдущий статье&lt;/a&gt; я рассказывал о простейших аналоговых модулях с амплитудной (ASK) модуляцией и библиотеке VirtualWire. Из плюсов - спартанская простота, из минусов - необходимость добавления антенн для устойчивой работы &lt;i&gt;даже в пределах комнаты&lt;/i&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Довольно давно на рынке существует микросхема &lt;b&gt;nRF24L01+&lt;/b&gt;, выпускаемая фирмой &lt;a href=&quot;http://www.nordicsemi.com/&quot; target=&quot;_blank&quot;&gt;Nordic&amp;nbsp;Semiconductors&lt;/a&gt;. Она обеспечивает возможность приема или передачи информации на несущей 2,4 ГГц (полоса ISM), методом частотной манипуляции &lt;a href=&quot;http://ru.wikipedia.org/wiki/GFSK&quot; target=&quot;_blank&quot;&gt;GFSK&lt;/a&gt;. Для Arduino это решение удобно не только в силу низкой стоимости чипа, но и по причине подключения через SPI.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Для экспериментов нам понадобится какой-либо беспроводной модуль на основе nRF24L01+, например такой:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjh41dTKtzgYILBQ5w63Pl57CoRkEBxVKTmVJhynjKeQ4hb_k1sEjMnVwlDoOc1v0tXPplZTSsy67wsD09btKqTbFJ-d-TZOtNrY2St33WbR7ji83_OCDr463LwVPrbTQj_9OpvSAhQgQxv/s1600/nRF24L01.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjh41dTKtzgYILBQ5w63Pl57CoRkEBxVKTmVJhynjKeQ4hb_k1sEjMnVwlDoOc1v0tXPplZTSsy67wsD09btKqTbFJ-d-TZOtNrY2St33WbR7ji83_OCDr463LwVPrbTQj_9OpvSAhQgQxv/s600/nRF24L01.jpg&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Его можно &lt;a href=&quot;http://mk90.ru/store/ru/radiomoduli/462-nrf24l01-module.html&quot;&gt;купить&lt;/a&gt; практически где угодно, стоить больше 160 рублей он не должен. Следует заметить, что 90% таких модулей ничем друг от друга не отличаются - схема скопирована из реф-дизайна evolution-кита к nRF24L01+, &lt;a href=&quot;http://www.nordicsemi.com/eng/Products/2.4GHz-RF/nRF24L01-Evaluation-Kit&quot; target=&quot;_blank&quot;&gt;опубликованному&lt;/a&gt; производителем. Антенна расположена прямо на печатной плате, что при такой длине волны вполне допустимо и обещает максимальное расстояние до 100 метров (разумеется, с оговоркой про &quot;идеальные условия&quot;, в реальности оно будет меньше - сколько именно, придется проверять экспериментально). К слову, существует две версии чипа - nRF24L01 и nRF24L01+, отличающиеся совсем ненамного и совместимые друг с другом (просто имейте ввиду, что если ваш модуль с nRF24L01 - к нему эта статья применима в полном объеме).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Назначение контактов на вилке должно быть следующим (вид сверху):&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyT2WrOH2RzYtLNKVlYgl8X8QJemqzL94j1eLSJy3n0WtKfWzlqUrNu2ChltpHm6Kv7Mqzz6AjV-EryKTFW_Ei77swZnJIDrJy8lUIxZsY6kBpOiorUu89TZVogO84lgPKWNsdyYSNSgfh/s1600/24L01Pinout-800.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyT2WrOH2RzYtLNKVlYgl8X8QJemqzL94j1eLSJy3n0WtKfWzlqUrNu2ChltpHm6Kv7Mqzz6AjV-EryKTFW_Ei77swZnJIDrJy8lUIxZsY6kBpOiorUu89TZVogO84lgPKWNsdyYSNSgfh/s600/24L01Pinout-800.jpg&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
У модулей с вилкой 2x4 есть одно существенное неудобство - невозможно воткнуть в беспаечную макетку: расположенные в два ряда контакты, увы, будут закорочены попарно. Остается только позавидовать счастливым обладателям &lt;a href=&quot;https://www.sparkfun.com/products/691&quot; target=&quot;_blank&quot;&gt;модуля от SparkFun&lt;/a&gt;, не поскупившимся отдать за это чудо 19.95 USD:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJnKLss7W4lfpqBdSOP1IxJIQInPXKzDq7W78alfLuvTtvspGQYkh9h72sLEgzXAdHXdVymXAqDK3SXPcvM5i1Z2xC8CGKkafGxPtiElSNCMp7ZVmRoipKvr6eZ0gWQIvdeWrQVn91BvNn/s1600/00691-02.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJnKLss7W4lfpqBdSOP1IxJIQInPXKzDq7W78alfLuvTtvspGQYkh9h72sLEgzXAdHXdVymXAqDK3SXPcvM5i1Z2xC8CGKkafGxPtiElSNCMp7ZVmRoipKvr6eZ0gWQIvdeWrQVn91BvNn/s320/00691-02.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Посмотрим, какие выводы и куда подключать:&lt;/div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;GND&lt;/b&gt; - земля, соединяем с одним из пинов GND на Arduino;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;VCC&lt;/b&gt; - питание модуля, &amp;nbsp;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;в&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;нимательно&lt;/span&gt; &lt;/b&gt;- соединяем с пином &lt;b&gt;3.3В&lt;/b&gt; - модуль питается от напряжений 1,9..3,6В, хотя при этом отлично умеет работать с логическими уровнями +5В;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;CE&lt;/b&gt; - расшифровывается как &lt;i&gt;Chip Enable&lt;/i&gt;, но речь не про работу всего чипа, а лишь про его радиоинтерфейс - в режиме приема заставляет модуль &quot;прослушивать&quot; эфир в поисках предназначенного ему пакета, в режиме передачи кратковременный импульс CE передает в эфир содержимое буфера FIFO. &amp;nbsp;Подключим его к пину &lt;b&gt;D8&lt;/b&gt;;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;CSN&lt;/b&gt; - SPI: &lt;i&gt;Chip select not&lt;/i&gt;, выбор Slave-устройства на шине SPI &lt;i&gt;низким&lt;/i&gt; уровнем, подключаем к пину &lt;b&gt;D7&lt;/b&gt;;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;SCK&lt;/b&gt; - SPI: Clock, подключаем к пину &lt;b&gt;D13&lt;/b&gt;;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;MOSI&lt;/b&gt; - SPI: Master Out, Slave In - подключаем к пину &lt;b&gt;D11&lt;/b&gt;;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;MISO&lt;/b&gt; - SPI: Master In, Slave Out - подключаем к пину &lt;b&gt;D12&lt;/b&gt;;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;IRQ&lt;/b&gt; - прерывание, пока никуда не подключаем :(&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Пины с аппаратной поддержкой SPI (SCK, MOSI, MISO)&amp;nbsp;&lt;i&gt;гарантированно&lt;/i&gt; можно найти на шестиконтактной ISP-вилке Arduino:&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmerih2QgPfb0kA-9KaTlDnAR0dn52E0cPMKSySyCWm46pXCbNKAwy1dSsfKIzjdTkUzgp8-_v5ZxmPar5dcEZJiWLzvxMhXFOU5uD9EE_IDjPInxoVYsV9RlquqnW8o8ENNIXNA6f0Q2z/s1600/freeduino.one.3.1.0.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmerih2QgPfb0kA-9KaTlDnAR0dn52E0cPMKSySyCWm46pXCbNKAwy1dSsfKIzjdTkUzgp8-_v5ZxmPar5dcEZJiWLzvxMhXFOU5uD9EE_IDjPInxoVYsV9RlquqnW8o8ENNIXNA6f0Q2z/s600/freeduino.one.3.1.0.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span id=&quot;goog_565418625&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Если же будете подключаться к боковым гребенкам, учитывайте, что аппаратная поддержка SPI у Mega находится на пинах 50 (MISO), 51 (MOSI), 52 (SCK) и 53 (SS).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Переходник для установки в беспаечную макетку можно соорудить из разъемов PBD08 и PLS8, на кусочке обрезка обычной макетной платы (под пайку):&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6N5gH8D7pV0WUEfrlIYfuC3vNF8yegXCfdQ14XLktoNkgerdlBeKkifG1oXpegzANf2HAs8L3waTVYYONKn4642JVrdtbV4ryk2p8MwI5sLsp_scDwyabX_MVmevTQaOv2inEz_dWZ3tr/s1600/nrf24l01-solderless-breadboard-connector.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6N5gH8D7pV0WUEfrlIYfuC3vNF8yegXCfdQ14XLktoNkgerdlBeKkifG1oXpegzANf2HAs8L3waTVYYONKn4642JVrdtbV4ryk2p8MwI5sLsp_scDwyabX_MVmevTQaOv2inEz_dWZ3tr/s1600/nrf24l01-solderless-breadboard-connector.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoQsbZ-BAMFHH17m-LaGIdzSwgvLbMZZGDalxW9pagwdHLPNvcFPgiDibeLHKyfxT_ilvdT4TLoPuEzDGdK_GVJSum3jkAUP24rmr1g0Sqy90IIIUM18IfCDx5Yd4lDZWBCtJHeE0F0oOq/s1600/nrf24l01-solderless-in-breadboard.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoQsbZ-BAMFHH17m-LaGIdzSwgvLbMZZGDalxW9pagwdHLPNvcFPgiDibeLHKyfxT_ilvdT4TLoPuEzDGdK_GVJSum3jkAUP24rmr1g0Sqy90IIIUM18IfCDx5Yd4lDZWBCtJHeE0F0oOq/s1600/nrf24l01-solderless-in-breadboard.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Итак, паяльник можно откладывать в сторону. Однако прежде чем приступать к написанию скетчей, познакомимся с документацией на чип и поподробней разберемся в том, что он умеет (и что не умеет - разумеется, тоже).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;nRF24L01+&lt;/b&gt; способен работать приемником или передатчиком на частотах 2400..2525 МГц, конкретная частота определяется &lt;b&gt;номером&lt;/b&gt; &lt;a href=&quot;http://ru.wikipedia.org/wiki/%D0%A7%D0%B0%D1%81%D1%82%D0%BE%D1%82%D0%BD%D0%BE%D0%B5_%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%B0%D0%BD%D0%B0%D0%BB%D0%BE%D0%B2&quot;&gt;частотного канала&lt;/a&gt; от 1 до 126, задаваемым через регистр RF_CH. Чтобы приемник и передатчик смогли обмениваться между собой, они обязательно должны быть сконфигурированы для одного и того же канала. Скорость обмена по умолчанию - 2 Мбит/с, но при необходимости ее можно снизить до 1 Мбит/с - в основном это делается для совместимости с ранними версиями чипов Nordec (вот одно из отличий nRF24L01 от nRF24L01+: последний умеет работать еще и на пониженной скорости 250 Кбит/с).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Данные передаются пакетами. Пользовательская часть (в документации называется &quot;Payload&quot;) может занимать до 32 байт, остальные поля - служебные:&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZm0bOsds1ALSQPVrVKgM2R2lhMSj6cOHaN5ey3TBTVfMTeS1sx3h6we7ckUDPaPcFlsUeYhP7DgwCFpL_pwNhERsJlMz7TZK3oQVjPZn0qCxiA2T9Ao7-5UIz8cQRHFaH_tgxeou-rQZP/s1600/NRF24L01+frame.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZm0bOsds1ALSQPVrVKgM2R2lhMSj6cOHaN5ey3TBTVfMTeS1sx3h6we7ckUDPaPcFlsUeYhP7DgwCFpL_pwNhERsJlMz7TZK3oQVjPZn0qCxiA2T9Ao7-5UIz8cQRHFaH_tgxeou-rQZP/s600/NRF24L01+frame.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
В одном частотном канале могут обмениваться довольно много устройств - для их идентификации предусмотрено поле адреса (от 3 до 5 байт). Таким образом, каждый передатчик отправляет сообщение конкретному приемнику, указывая адрес получателя; приемник, в свою очередь, прослушивает эфир и отбрасывает все сообщения, адрес которых не совпадает с его собственным.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
В какой-то конкретный момент времени чип может быть либо передатчиком, либо приемником - либо передавать, либо принимать: по-очереди, но не одновременно. Для контроля можно организовать смену режимов - одной стороне даете команду передать сообщение и перейти в режим приема, другой - принять сообщение, проверить его корректность с помощью поля CRC, затем перейти в режим передачи и &quot;отстучать&quot; передавшему подтверждение.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Но, к счастью, существует специальный встроенный протокол &lt;b&gt;Enhanced Shockburst (tm)&lt;/b&gt;, который берет на себя все заботы о гарантированной доставке сообщения между двумя nRF24L01+. Это включает в себя не только прием, проверку правильности и отсылку подтверждающего пакета приемником, но и повторную перепосылку пакета передатчиком. Не правда ли, инженеры Nordic Semiconductors поработали на славу? ;) Для работы протокол использует поле управления пакетом.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
В довершение существует специальный режим &lt;b&gt;Multiceiver&lt;/b&gt;, в котором приемник может быть настроен на получение данных от шести передатчиков, и опять же, с возможностью работы по Enhanced Shockburst. Иными словами - один приемник может &quot;тянуть&quot; данные из шести передатчиков с аппаратным подтверждением и перепосылкой. Правда, есть некоторые ограничения - все устройства надо сконфигурировать на работу в одном частотном канале, с одинаковой скоростью, &amp;nbsp;длиной адреса и способом формирования CRC. Один адрес передатчика можно выбрать произвольно, а вот остальные пять должны совпадать во всех байтах адреса, кроме последнего (например, 0x12345678&lt;b&gt;01&lt;/b&gt;, 0x12345678&lt;b&gt;D5&lt;/b&gt;, 0x12345678&lt;b&gt;AA&lt;/b&gt;, 0x12345678&lt;b&gt;55&lt;/b&gt;, и так далее).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Адрес задает пользователь, и, строго говоря, он может быть произвольным. Но располагается он в самом начале пакета, сразу после преамбулы, которая выглядит в двоичном представлении как &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;01010101&lt;/span&gt; или &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;10101010&lt;/span&gt; - такая комбинация не случайна и нужна для правильного пробуждения приемника и его подстройки к частоте передатчика. Чтобы было меньше ложных &quot;отбраковываний&quot; пакетов приемной частью, надо стараться избегать как адресов, похожих на преамбулу (например - &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;0xAAAAAA&lt;/span&gt; или &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;0x555555&lt;/span&gt;), так и адресов, состоящих из вообще одних нулей и единиц (еще два плохих примера -&amp;nbsp;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;0xFFFFFF&lt;/span&gt; или &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;0x000000&lt;/span&gt;).&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Пример схемы (допустим, Freeduino Nano):&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUR9tvd6n62NPR4jk1ktJxV0rqtX1F712a9Y-Xg53xhppkwz-o_vsH4na64Ze1fzxRrS4RGVs4BiSG2dk1iOLFfDF6_-7WAXCUYvDXDw80iz1TKQQCv_MfnpZJ9GyTzZm1ViG1ufvB6KCH/s1600/nrf24l01.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUR9tvd6n62NPR4jk1ktJxV0rqtX1F712a9Y-Xg53xhppkwz-o_vsH4na64Ze1fzxRrS4RGVs4BiSG2dk1iOLFfDF6_-7WAXCUYvDXDw80iz1TKQQCv_MfnpZJ9GyTzZm1ViG1ufvB6KCH/s1600/nrf24l01.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;
Какие библиотеки &amp;nbsp;для Arduino существуют для работы с nRF24L01+?&lt;/h4&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Самый простой вариант - библиотека &lt;b&gt;Mirf&lt;/b&gt;, которая предоставляет минимальную обвязку (её даже&amp;nbsp;&lt;a href=&quot;https://github.com/stanleyseow/arduino-nrf24l01&quot; target=&quot;_blank&quot;&gt;адаптировали для ATtiny&lt;/a&gt;). Скачайте последнюю версию библиотеки:&lt;/div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;на странице &lt;a href=&quot;http://www.arduino.cc/playground/InterfacingWithHardware/Nrf24L01&quot; target=&quot;_blank&quot;&gt;Arduino playground&lt;/a&gt;, посвященной nRF24L01+;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;непосредственно из &lt;a href=&quot;https://github.com/aaronds/arduino-nrf24l01&quot; target=&quot;_blank&quot;&gt;gitHub&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Перед началом работы надо задать пины, к которым подключены CE и CSN, собственный адрес как приемника, длину пользовательской части (payload) и вызывать пару функций. По умолчанию предполагается, что CE подключен к D8, CSN - к D7 (ровно так мы уже и сделали), работа будет идти по каналу 1, длина пакета - 16 байт. Если что-то из перечисленного не совпадает с вашими потребностями, необходимо установить соответствующие значения полей до вызова &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;init()&lt;/span&gt; и &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;config()&lt;/span&gt;, например: &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;Mirf.cePIN = 10&lt;/span&gt;; &amp;nbsp;в случае, если CE подключен к D10.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
В основном, последовательность инициализации выглядит так:&lt;/div&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;span class=&quot;n&quot; style=&quot;color: #333333; font-family: Consolas, &#39;Liberation Mono&#39;, Courier, monospace; font-size: 12px; line-height: 18px; white-space: pre;&quot;&gt;Mirf&lt;/span&gt;&lt;span class=&quot;o&quot; style=&quot;color: #333333; font-family: Consolas, &#39;Liberation Mono&#39;, Courier, monospace; font-size: 12px; font-weight: bold; line-height: 18px; white-space: pre;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot; style=&quot;color: teal; font-family: Consolas, &#39;Liberation Mono&#39;, Courier, monospace; font-size: 12px; line-height: 18px; white-space: pre;&quot;&gt;spi&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: Consolas, &#39;Liberation Mono&#39;, Courier, monospace; font-size: 12px; line-height: 18px; white-space: pre;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot; style=&quot;color: #333333; font-family: Consolas, &#39;Liberation Mono&#39;, Courier, monospace; font-size: 12px; font-weight: bold; line-height: 18px; white-space: pre;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: Consolas, &#39;Liberation Mono&#39;, Courier, monospace; font-size: 12px; line-height: 18px; white-space: pre;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot; style=&quot;color: #333333; font-family: Consolas, &#39;Liberation Mono&#39;, Courier, monospace; font-size: 12px; font-weight: bold; line-height: 18px; white-space: pre;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot; style=&quot;color: #333333; font-family: Consolas, &#39;Liberation Mono&#39;, Courier, monospace; font-size: 12px; line-height: 18px; white-space: pre;&quot;&gt;MirfHardwareSpi&lt;/span&gt;&lt;span class=&quot;o&quot; style=&quot;color: #333333; font-family: Consolas, &#39;Liberation Mono&#39;, Courier, monospace; font-size: 12px; font-weight: bold; line-height: 18px; white-space: pre;&quot;&gt;;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;o&quot; style=&quot;color: #333333; font-family: Consolas, &#39;Liberation Mono&#39;, Courier, monospace; font-size: 12px; font-weight: bold; line-height: 18px; white-space: pre;&quot;&gt;&lt;span class=&quot;n&quot; style=&quot;font-weight: normal;&quot;&gt;Mirf&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot; style=&quot;color: teal; font-weight: normal;&quot;&gt;init&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;o&quot; style=&quot;color: #333333; font-family: Consolas, &#39;Liberation Mono&#39;, Courier, monospace; font-size: 12px; font-weight: bold; line-height: 18px; white-space: pre;&quot;&gt;&lt;span class=&quot;o&quot;&gt;&lt;span class=&quot;n&quot; style=&quot;font-weight: normal;&quot;&gt;Mirf&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot; style=&quot;color: teal; font-weight: normal;&quot;&gt;setRADDR&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;kt&quot; style=&quot;color: #445588;&quot;&gt;byte&lt;/span&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;*)&lt;/span&gt;&lt;span class=&quot;s&quot; style=&quot;color: #dd1144; font-weight: normal;&quot;&gt;&quot;12345&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;o&quot; style=&quot;color: #333333; font-family: Consolas, &#39;Liberation Mono&#39;, Courier, monospace; font-size: 12px; font-weight: bold; line-height: 18px; white-space: pre;&quot;&gt;&lt;span class=&quot;o&quot;&gt;&lt;span class=&quot;o&quot;&gt;&lt;span class=&quot;n&quot; style=&quot;font-weight: normal;&quot;&gt;Mirf&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot; style=&quot;color: teal; font-weight: normal;&quot;&gt;payload&lt;/span&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt; 4;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;o&quot; style=&quot;color: #333333; font-family: Consolas, &#39;Liberation Mono&#39;, Courier, monospace; font-size: 12px; font-weight: bold; line-height: 18px; white-space: pre;&quot;&gt;&lt;span class=&quot;o&quot;&gt;&lt;span class=&quot;o&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span class=&quot;n&quot;&gt;Mirf&lt;/span&gt;&lt;span class=&quot;o&quot; style=&quot;font-weight: bold;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot; style=&quot;color: teal;&quot;&gt;config&lt;/span&gt;&lt;span class=&quot;o&quot; style=&quot;font-weight: bold;&quot;&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Первая строчка - установление &quot;правильного&quot; алгоритма работы с SPI, носит скорее исторический характер. Сейчас всё равно вся работа осуществляется через встроенную в ArduinoIDE библиотку SPI, но ведь не всегда было так ;) Второй строчкой происходит инициализация пинов и SPI, в третьей мы устанавливаем собственный адрес приемника, длиной 5 байт (символьная строка &quot;12345&quot; дана исключительно для наглядности, на самом деле это &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;0x3132333435&lt;/span&gt; ;) В четвертой - мы устанавливаем длину пакета 4 байта, и, наконец-то, в пятой конфигурируем чип NRF24L01 и переводим его в режим приема.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Дальше можно принимать и передавать данные.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
Прием:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;color: #333333; font-family: Consolas, &#39;Liberation Mono&#39;, Courier, monospace; font-size: 12px; line-height: 18px;&quot;&gt;&lt;div class=&quot;line&quot; id=&quot;LC85&quot; style=&quot;padding-left: 10px;&quot;&gt;
&amp;nbsp;&lt;span class=&quot;k&quot; style=&quot;font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;o&quot; style=&quot;font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Mirf&lt;/span&gt;&lt;span class=&quot;o&quot; style=&quot;font-weight: bold;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot; style=&quot;color: teal;&quot;&gt;dataReady&lt;/span&gt;&lt;span class=&quot;o&quot; style=&quot;font-weight: bold;&quot;&gt;()){&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;line&quot; id=&quot;LC86&quot; style=&quot;padding-left: 10px;&quot;&gt;
&amp;nbsp; &lt;span class=&quot;n&quot;&gt;Mirf&lt;/span&gt;&lt;span class=&quot;o&quot; style=&quot;font-weight: bold;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot; style=&quot;color: teal;&quot;&gt;getData&lt;/span&gt;&lt;span class=&quot;o&quot; style=&quot;font-weight: bold;&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;kt&quot; style=&quot;color: #445588; font-weight: bold;&quot;&gt;byte&lt;/span&gt; &lt;span class=&quot;o&quot; style=&quot;font-weight: bold;&quot;&gt;*)&lt;/span&gt; &lt;span class=&quot;o&quot; style=&quot;font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;packet&lt;/span&gt;&lt;span class=&quot;o&quot; style=&quot;font-weight: bold;&quot;&gt;);&lt;/span&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;line&quot; id=&quot;LC86&quot; style=&quot;padding-left: 10px;&quot;&gt;
&lt;span class=&quot;o&quot; style=&quot;font-weight: bold;&quot;&gt; }&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;line&quot; id=&quot;LC93&quot; style=&quot;padding-left: 10px;&quot;&gt;
&lt;/div&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Сначала дожидаемся прихода пакета в буфер, затем считываем его в переменную &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;packet&lt;/span&gt; (ее размер должен соответствовать текущей длине payload).&lt;/div&gt;
&lt;br /&gt;
Передача:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;color: #333333; font-family: Consolas, &#39;Liberation Mono&#39;, Courier, monospace; font-size: 12px; line-height: 18px;&quot;&gt;&lt;div class=&quot;line&quot; id=&quot;LC77&quot; style=&quot;padding-left: 10px;&quot;&gt;
&lt;span class=&quot;n&quot;&gt;Mirf&lt;/span&gt;&lt;span class=&quot;o&quot; style=&quot;font-weight: bold;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot; style=&quot;color: teal;&quot;&gt;setTADDR&lt;/span&gt;&lt;span class=&quot;o&quot; style=&quot;font-weight: bold;&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;kt&quot; style=&quot;color: #445588; font-weight: bold;&quot;&gt;byte&lt;/span&gt; &lt;span class=&quot;o&quot; style=&quot;font-weight: bold;&quot;&gt;*)&lt;/span&gt;&lt;span class=&quot;s&quot; style=&quot;color: #dd1144;&quot;&gt;&quot;12345&quot;&lt;/span&gt;&lt;span class=&quot;o&quot; style=&quot;font-weight: bold;&quot;&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;line&quot; id=&quot;LC79&quot; style=&quot;padding-left: 10px;&quot;&gt;
&lt;span class=&quot;n&quot;&gt;Mirf&lt;/span&gt;&lt;span class=&quot;o&quot; style=&quot;font-weight: bold;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot; style=&quot;color: teal;&quot;&gt;send&lt;/span&gt;&lt;span class=&quot;o&quot; style=&quot;font-weight: bold;&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;kt&quot; style=&quot;color: #445588; font-weight: bold;&quot;&gt;byte&lt;/span&gt; &lt;span class=&quot;o&quot; style=&quot;font-weight: bold;&quot;&gt;*)&amp;amp;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;packet&lt;/span&gt;&lt;span class=&quot;o&quot; style=&quot;font-weight: bold;&quot;&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;line&quot; id=&quot;LC81&quot; style=&quot;padding-left: 10px;&quot;&gt;
&lt;span class=&quot;k&quot; style=&quot;font-weight: bold;&quot;&gt;while&lt;/span&gt;&lt;span class=&quot;o&quot; style=&quot;font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Mirf&lt;/span&gt;&lt;span class=&quot;o&quot; style=&quot;font-weight: bold;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot; style=&quot;color: teal;&quot;&gt;isSending&lt;/span&gt;&lt;span class=&quot;o&quot; style=&quot;font-weight: bold;&quot;&gt;()){&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;line&quot; id=&quot;LC82&quot; style=&quot;padding-left: 10px;&quot;&gt;
&lt;span class=&quot;o&quot; style=&quot;font-weight: bold;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Устанавливаем адрес получателя, затем отсылаем packet и при помощи &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;isSending&lt;/span&gt; дожидаемся завершения отправки. &lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
К библиотеке прилагаются примеры &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;ping_client&lt;/span&gt; и&amp;nbsp;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;ping_server&lt;/span&gt;, которые обмениваются пакетами друг с другом. Чуть интереснее изучить пример &amp;nbsp;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;ping_server_interrupt&lt;/span&gt;, демонстрирующий работу по прерыванию в режиме энергосбережения: пока нет данных, Arduino пребывает в режиме сна. Однако, как только фиксируется прием нового пакета, он просыпается, принимает пакет из nRF24L01+, отсылает ответный пакет и снова &quot;засыпает&quot;. Для корректной работы потребуется подключить ранее неиспользованный пин &lt;b&gt;IRQ&lt;/b&gt; на плате радиомодуля - к пину &lt;b&gt;D2&lt;/b&gt; Arduino.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;
В каких случаях генерируется прерывание от nRF24L01+?&lt;/h4&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Это происходит в трех ситуациях и отображается в регистре &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;STATUS&lt;/span&gt; при помощи соответствующих битовых полей:&lt;/div&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;TX_DS&lt;/b&gt; - передающая сторона получила от встречной стороны информацию (ACK-пакет), подтверждающую успешный прием;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;RX_DR&lt;/b&gt; - приемная сторона получила &lt;i&gt;новый&lt;/i&gt; пакет данных (и с правильным CRC, и не дубль уже полученного ранее пакета);&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;MAX_RT&lt;/b&gt; - передающая сторона попыталась передать пакет максимально разрешенное количество раз, но так и не получила подтверждения о приеме. &amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
И, самое важное - после того, как любой из перечисленных битов был установлен, для дальнейшей работы его необходимо сбросить - записать единицу. Обычно, об этом заботится библиотека ;)&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Функция &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;Mirf.isSending()&lt;/span&gt; как раз и проверяет факт завершения передачи по установке &lt;b&gt;TX_DS&lt;/b&gt; или &lt;b&gt;MAX_RT&lt;/b&gt;. Но имейте ввиду, что она не отвечает на вопрос о том, был ли пакет &lt;i&gt;благополучно принят&lt;/i&gt; на противоположной стороне. После того, как &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;Mirf.isSending()&lt;/span&gt; вернет &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;true&lt;/span&gt;, чтение регистра &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;STATUS&lt;/span&gt;&amp;nbsp;становится бессмысленным - перед выходом функция сбрасывает биты TX_DS и MAX_RT. К счастью, при каждом возникновении &lt;b&gt;MAX_RT&lt;/b&gt; увеличивается счетчик &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;PLOS_CNT&lt;/span&gt; в специальном регистре &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;OBSERVE_TX&lt;/span&gt;, поэтому проверку благополучной доставки можно организовать так:&lt;/div&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;color: #cc6600;&quot;&gt;int&lt;/span&gt; readPLOS_CNT() {
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;byte&lt;/span&gt; reg;
&amp;nbsp;&amp;nbsp;Mirf.readRegister(OBSERVE_TX,&amp;amp;reg,1);
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;return&lt;/span&gt; (reg &amp;gt;&amp;gt; PLOS_CNT) &amp;amp; B1111;
}

&lt;span style=&quot;color: #cc6600;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;loop&lt;/b&gt;&lt;/span&gt;() {
&amp;nbsp;&amp;nbsp;
&lt;span style=&quot;color: #cc6600;&quot;&gt;  int&lt;/span&gt; prev_plos_cnt = readPLOS_CNT();

&lt;span style=&quot;color: #7e7e7e;&quot;&gt;  /*&amp;nbsp;...&amp;nbsp;*/&lt;/span&gt;
  Mirf.&lt;span style=&quot;color: #b45f06;&quot;&gt;send&lt;/span&gt;((byte *)&amp;amp;packet);
&lt;span style=&quot;color: #cc6600;&quot;&gt;  while&lt;/span&gt;(Mirf.isSending()){
  }

&lt;span style=&quot;color: #cc6600;&quot;&gt;  if&lt;/span&gt; (readPLOS_CNT() != prev_plos_cnt) {
&amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: #7e7e7e;&quot;&gt;/* failed :( */&lt;/span&gt;
  }&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;else&lt;/span&gt; {
&amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: #7e7e7e;&quot;&gt;/* success! */&lt;/span&gt;
  }
}

&lt;/pre&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Еще можно вообще отказаться от использования &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;Mirf.isSending()&lt;/span&gt;, и проверять биты TX_DS и MSX_RT непосредственно чтением регистра &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;STATUS&lt;/span&gt;. Но тогда не забывайте сбрасывать их после установки, иначе процесс передачи встанет после первого же пакета.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Как я уже упоминал в самом начале - библиотека реализует действительно минимально необходимый набор функционала. За это приходится расплатиться следующим:&lt;/div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;длина адресного поля - всегда 5 байт;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;CRC всегда однобайтовый;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;длина payload всегда фиксирована;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;нет поддержки режима multiceiver (прием данных от шести передатчиков).&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Что-то решается простейшим исправлением кода библиотеки, что-то можно сделать через запись и чтение управляющих регистров nRF24L01+, что-то (multiceiver или динамическая длина payload) добавить уже и вовсе непросто.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Однако, если у вас возникает слишком много претензий к функционалу Mirf, можно попробовать альтернативу -&amp;nbsp;&lt;a href=&quot;https://github.com/maniacbug/RF24/&quot; target=&quot;_blank&quot;&gt;RF24&lt;/a&gt;. В ней конфигурируется буквально всё, в том числе автоматически учитываются различия между nRF24L01 и nRF24L01+. Идеологически библиотека ближе к стандартам Arduino и интуитивно понятнее, особенно начинающим. Например, по аналогии с Mirf есть функция &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;RF24::startWrite&lt;/span&gt;, а в дополнение к ней - &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;RF24::send&lt;/span&gt;, которая блокирует ход скетча до завершения процесса передачи, чтобы стало понятно - передан пакет успешно или нет, что и сообщается в возвращаемом значении типа &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;bool&lt;/span&gt; (прямая замена вышеприведенному коду, который пришлось добавлять для аналогичного контроля в Mirf).&amp;nbsp;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
В комплекте с библиотекой RF24 много полезных примеров, которые демонстрируют использование irq, отправку пользовательских данных в ACK-пакете и прочее. Есть даже примитивный сканер эфира ;)&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;
Куда двигаться дальше?&amp;nbsp;&lt;/h4&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Например, по каким-то причинам не устраивает дальность приема: то ли расстояние велико, то ли стен многовато. В этом случае надо брать модуль nRF24L01+ с PA/LNA (Power Amplifier и Low Noise Amplifier):&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDOJ6L0UoywrQ4Aj2mCEHioxrLsTs0eyjqvC9qpUyFDkvn21byZ49yMfuaUoj6tj3JeXbAYXqiz23Uk46W-teDwux1pyCUpf70IILDHugETPkkLhUN2_MKVMxJuKUANKf1UgYQiI8twdXl/s1600/NRF24L01-PA-2.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDOJ6L0UoywrQ4Aj2mCEHioxrLsTs0eyjqvC9qpUyFDkvn21byZ49yMfuaUoj6tj3JeXbAYXqiz23Uk46W-teDwux1pyCUpf70IILDHugETPkkLhUN2_MKVMxJuKUANKf1UgYQiI8twdXl/s600/NRF24L01-PA-2.JPG&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;
Этот модуль будет стоить чуть дороже, около 10 USD. В его основе nRF24L01+ с точно такой же вилкой, но у него непосредственно к выходным каскадам вместо антенны подключен усилитель, повышающий мощность передатчика и чувствительность приемника. К SMA-коннектору необходимо подключить стандартную антенну для диапазона 2,4 ГГц (можно скрутить с нерабочего WiFi роутера) и правильно сориентировать - получите диапазон до 1000 метров. Правда, сразу вырастут запросы по питанию: модулю потребуются не десятки, а сотни mA, напряжение питания должно быть в диапазоне 3,0..3,6В. В этом случае может уже не получиться питать его от Arduino - если не помогает конденсатор 10 мкФ между 3,3В и землей, просто подключите модуль к отдельному источнику питания.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Да, и еще одно: не исключено пересечение по частотным каналам с другими беспроводными устройствами. Если у вас есть беспроводная клавиатура или мышь на 2,4 ГГц, с очень большой долей вероятности есть шанс разобрав ее увидеть нашего старого знакомого ;)&amp;nbsp;&lt;/div&gt;
&lt;br /&gt;
Ссылки по теме:&lt;br /&gt;
&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;a href=&quot;http://playground.arduino.cc/InterfacingWithHardware/Nrf24L01&quot; target=&quot;_blank&quot;&gt;Страница nRF24L01 на Arduino playground&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://github.com/aaronds/arduino-nrf24l01&quot; target=&quot;_blank&quot;&gt;Репозиторий Mirf на github&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/stanleyseow/arduino-nrf24l01&quot; target=&quot;_blank&quot;&gt;Адаптация Mirf для ATtiny&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/maniacbug/RF24&quot; target=&quot;_blank&quot;&gt;Репозиторий RF24 на github&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.electrodragon.com/w/index.php?title=NRF24l01&quot; target=&quot;_blank&quot;&gt;Ссылка на wiki по работе с Mirf&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://mk90.ru/store/ru/23-radiomoduli&quot;&gt;Беспроводные модули в mk90.ru store&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br /&gt;Материал опубликован на сайте mk90.blogspot.com под лицензией Creative Commons Share Alike 3.0&lt;/div&gt;</description><link>http://mk90.blogspot.com/2013/12/freeduino-wireless-2.html</link><author>noreply@blogger.com (id)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjh41dTKtzgYILBQ5w63Pl57CoRkEBxVKTmVJhynjKeQ4hb_k1sEjMnVwlDoOc1v0tXPplZTSsy67wsD09btKqTbFJ-d-TZOtNrY2St33WbR7ji83_OCDr463LwVPrbTQj_9OpvSAhQgQxv/s72-c/nRF24L01.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8944086625767573647.post-6811058089784402683</guid><pubDate>Sun, 24 Nov 2013 08:51:00 +0000</pubDate><atom:updated>2013-11-24T13:33:12.476+04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Hardware</category><category domain="http://www.blogger.com/atom/ns#">V-USB</category><title>ARCAdaptor или Игра в Продукт</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;i&gt;Сегодня будет не совсем обычная статья - уважаемый &lt;a href=&quot;http://znoxx.me/&quot; target=&quot;_blank&quot;&gt;znoxx&lt;/a&gt; поделится опытом о том, как проделать путь от макета железки до полноценного коммерческого продукта. Быть может, он найдет единомышленников, или, что будет еще круче, вдохновит кого-то по его примеру поделиться с общественностью своей разработкой. Приятного чтения! -- ведущий блога MK90 - id.&amp;nbsp;&lt;/i&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSvgmSZHrT7TcNyZh7zrzqUjBjTW2PV4y9MXBpTMG1ultOHkv36cypCIaerTN3Rw3l2QJEgQI8z6qxGDMQXH2rZs5voD2VMHdAWIZ5X-htZVuyM6r02XLvbImoIdoxvHTo8d7JhaBz1cIq/s1600/1211949f37e27eaba5f1e414dc84ba31.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSvgmSZHrT7TcNyZh7zrzqUjBjTW2PV4y9MXBpTMG1ultOHkv36cypCIaerTN3Rw3l2QJEgQI8z6qxGDMQXH2rZs5voD2VMHdAWIZ5X-htZVuyM6r02XLvbImoIdoxvHTo8d7JhaBz1cIq/s600/1211949f37e27eaba5f1e414dc84ba31.jpg&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Наверное, каждый, кто увлекается разработкой различных железок на микроконтроллерах, задавался подобными вопросами:&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;А что дальше?&amp;nbsp;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Как сделать из прототипа законченный продукт?&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Смогут ли им пользоваться другие люди?&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Зачем мне вообще всё это?&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;Будем считать, что вы уже вышли из стадии &quot;because we can&quot; (&quot;потому что можем&quot;) &amp;nbsp;и вам хочется немного большего. В этой статье я хочу рассказать о проекте &lt;a href=&quot;http://adapto.rs/&quot; target=&quot;_blank&quot;&gt;ARCAdaptor&lt;/a&gt; и поделиться опытом выпуска &quot;почти-продукта&quot;. Что это такое и почему продукт все-таки &quot;почти&quot; — читайте ниже.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
И да, здесь будут схемы, прошивки, микроконтроллеры и даже платы. И ещё некоторое количество материала, который, Вы, возможно найдете полезным или хотя бы занимательным. Итак, приступим.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h3 style=&quot;text-align: justify;&quot;&gt;
Устройство&lt;/h3&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Сейчас уже тяжело вспомнить, с чего все началось. Но будем считать, что очень хотелось сделать адаптер для подключения панели MAME — &lt;a href=&quot;http://ru.wikipedia.org/wiki/MAME&quot;&gt;Multy Machine Arcade Emulator&lt;/a&gt;. В один из праздничных &quot;зимних&quot; дней я наткнулся проект&amp;nbsp;&lt;a href=&quot;http://vusb.wikidot.com/project:mamepanel&quot;&gt;V-USB MAME Panel&lt;/a&gt;. Возможность использования &lt;b&gt;ATmega8&lt;/b&gt; в качестве &quot;сердца&quot; устройства грело душу.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
И вот, нулевой прототип:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9s0rd5YKkSp6ejbSjwgoa1Q8MPA8lYvk8mKcmZJrxe_Uf6S1fJ0vQa-BcuJkZzcOascDzKGNWEQrL3gPO5YkrTsfxR2ar-9ZmPiCaTDCAs8hnNFgtVC2V_Itf3VUgLe2DNb1nzHCm4QML/s1600/3BmRT7oepnq1t1sBJR8QJNH2siDRbhNl_2wzh3FO9NCG3MfC4C8aJX_S3i2MoAxm5w%253Ds2000.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9s0rd5YKkSp6ejbSjwgoa1Q8MPA8lYvk8mKcmZJrxe_Uf6S1fJ0vQa-BcuJkZzcOascDzKGNWEQrL3gPO5YkrTsfxR2ar-9ZmPiCaTDCAs8hnNFgtVC2V_Itf3VUgLe2DNb1nzHCm4QML/s600/3BmRT7oepnq1t1sBJR8QJNH2siDRbhNl_2wzh3FO9NCG3MfC4C8aJX_S3i2MoAxm5w%253Ds2000.jpg&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Breadboard, кусок USB-провода, в общем, всё как всегда.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Как многие могли догадаться, проект базируется на библиотеке&amp;nbsp;&lt;a href=&quot;http://www.obdev.at/products/vusb/index.html&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;V-USB&lt;/a&gt; — программной реализации протокола USB для микроконтроллеров AVR. Набор поддерживаемых микросхем очень широкий, есть даже микроконтроллеры семейства ATtiny.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Для реализации устройства достаточно собрать простую цепь из двух стабилитронов, трех резисторов, ну и конечно правильно запрограммированного МК. При этом возможности по &quot;тонкой настройке&quot; контроллера тоже имеются в наличии. Библиотека использует хорошо оптимизированный ассемблерный код, последние реализации очень стабильны.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
При подключении к компьютеру Windows бодро рапортует о том, что у нас аж 2 джойстика и одна клавиатура. Замыкаем провода и видим, что всё отзывается, как надо.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Что дальше ? &amp;nbsp;Чего, так сказать, не хватает ?&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Для этого рассмотрим принцип действия чуть подробнее:&lt;/div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;К пинам ATmega8 подключены размыкаемые контакты - наши &quot;кнопки&quot; и &quot;джойстики&quot; (на самом деле - обычные 4-х контактные манипуляторы, хорошо знакомые всем по ZX-Spectrum, Atari и прочим MSX);&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Контроллер считывает состояние пинов и формирует пакет для USB, который симулирует нажатие клавиатуры и/или джойстика;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Компьютер-хост (планшет, телефон или Raspberry Pi :-)) честно считает это сооружение клавиатурой-джойстиком-HID-устройством и реагирует соответственно.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Однако, чтобы поменять назначение кнопок (&quot;маппинг&quot;), требуется правка исходных текстов, перекомпиляция прошивки и перепрограммирование микроконтроллера.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
С другой стороны, ATmega8 имеет специальную энергонезависимую область данных EEPROM, которая может быть прочитана и записана независимо от основной программы. Почему бы нам не использовать ее ? Всего-то требуется &amp;nbsp;— жалких 17 байт или около того.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Решительно меняем алгоритм работы! Было так:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;В RAM формируется табличка в виде массива, куда прописаны коды клавиш и управляющие последовательности джойстика;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Каждая ячейка соответствует либо кнопке, либо позиции джойстика (или кнопки).&lt;/li&gt;
&lt;/ol&gt;
Заменяем на такое:&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;Копия массива хранится в EEPROM;&lt;/li&gt;
&lt;li&gt;Последовательность копируется в RAM при инициализации устройства;&lt;/li&gt;
&lt;li&gt;Заставим компилятор генерировать отдельный .eep-файл с содержимым EEPROM для загрузки в устройство.&lt;/li&gt;
&lt;/ol&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Чтобы сделать совсем хорошо — ещё и разнесем код, формирующий и обрабатывающий содержимое EEPROM в отдельные файлы, дабы было удобно править.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Пробуем, учим теорию, опять пробуем… Наконец-то видим желаемый результат.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Маленькая победа. Функциональность значительно расширилась. Воодушевленные результатом движемся дальше. Пора освободить bredboard для других амбициозных целей, да и место на столе не резиновое.&amp;nbsp;&lt;/div&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;
Прототип 1&lt;/h4&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Про ЛУТ написано много статей, &lt;a href=&quot;http://mk90.blogspot.fr/search/label/%D0%9B%D0%A3%D0%A2&quot; target=&quot;_blank&quot;&gt;хороших, подробных и разных&lt;/a&gt;. Останавливаться на этом не буду, отмечу лишь, что травилось всё в &quot;экологически безопасном&quot; растворе, на основе перекиси водорода, лимонной кислоты и соли. Причем перекись была в таблетках. Подробнее можно посмотреть &lt;a href=&quot;http://znoxx.me/2013/03/usbtinyisp-ili-opyat--programmator.html&quot; target=&quot;_blank&quot;&gt;тут&lt;/a&gt;, правда речь о другой плате, ну суть от этого не меняется.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Итак, вот что на выходе:&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitLca7F8x5866rduJqUiAOM64V1mZvj591SjE0eABVtmcQBl7Iq-twIVnL47DzIryChvv56mUiKbyFO8Mmrt3WtPmUv-T74vxjOhEgxGKLj8Lp7LIEoTRwAibjGobNFMJ9vtp0fazMS7Ak/s1600/utC15owPAy2kpIbtH6pRtSC4fTNiDF3Y6KcQAAaNq9qn3d_sphQgMorV-Jnrbal2ZA%253Ds2000.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitLca7F8x5866rduJqUiAOM64V1mZvj591SjE0eABVtmcQBl7Iq-twIVnL47DzIryChvv56mUiKbyFO8Mmrt3WtPmUv-T74vxjOhEgxGKLj8Lp7LIEoTRwAibjGobNFMJ9vtp0fazMS7Ak/s600/utC15owPAy2kpIbtH6pRtSC4fTNiDF3Y6KcQAAaNq9qn3d_sphQgMorV-Jnrbal2ZA%253Ds2000.jpg&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Плата разводилась в черновом варианте, лишь бы влезло на один слой. Коннекторы с другой стороны, кварц там же. Кстати, для разводки лично я использую&amp;nbsp;&lt;a href=&quot;http://www.freerouting.net/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;FreeRouting&lt;/a&gt;. Писан на java, работает с Eagle через скрипт-костыль, но работает. И результаты лучше, чем в Eagle, на мой неискушенный взгляд.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Итак, наш прототип уже не развалится при переносе со стола на стол. Однако на плате есть разъем&amp;nbsp;USB, а для обновления EEPROM по-прежнему требуется программатор. Вот ведь незадача.&lt;/div&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;
Bootloader&lt;/h4&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Bootloader - это микропрограмма, работающая в строго отведенной области и защищенная от перезаписи. В нашем случае она позволит загружать содержимое Flash и EEPROM без выделенного программатора, прямо как в &lt;a href=&quot;http://arduino.cc/&quot;&gt;Arduino&lt;/a&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
К сожалению, наличие бутлоадера сокращает доступный размер памяти для основной программы, и в ATmega8 остается 8192-2048 = 6144 байт. Но поверьте, 6 Килобайт — вполне достаточная емкость для написания огромного числа программ. Например, наш проект занимает значительно меньше&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Из всех готовых бутлоадеров мне приглянулся тот, который позволял записывать EEPROM отдельно - им оказался &lt;a href=&quot;http://www.obdev.at/products/vusb/usbasploader.html&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;USBAspLoader&lt;/a&gt;. После входа в бутлоадер (в исходном тексте настраивается условие - определенный пин замкнут на землю), программа &lt;a href=&quot;http://www.nongnu.org/avrdude/&quot; target=&quot;_blank&quot;&gt;avrdude&lt;/a&gt; &quot;понимает&quot; его, как программатор &lt;a href=&quot;http://mk90.ru/store/ru/programmatory/82-programmator-usbasp.html&quot; target=&quot;_blank&quot;&gt;usbasp&lt;/a&gt; и ключи для записи EERPOM в командной строке прекрасно работают.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Мало того, мы получили возможность обновлять не только конфигурацию в EEPROM, но &amp;nbsp;и саму прошивку.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Можно даже сказать, что мы получили Arduino-совместимую плату, по примеру проекта&amp;nbsp;&lt;a href=&quot;http://mk90.ru/wiki/index.php/Metaboard&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Metaboard&lt;/a&gt;. Правда, пара пинов недоступна (на них работает USB), а один из пинов нужно использовать с осторожностью, ибо он работает как триггер для бутлоадера (просто об этом нужно помнить).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Знаю, что можно было бы клонировать Metaboard, но хотелось осилить &quot;свой путь&quot;, не замыкаться на Arduino, как конечном изделии. У нас будет своя плата - &quot;с шахматами и поэтессами&quot;.&lt;/div&gt;
&lt;h4 style=&quot;text-align: justify;&quot;&gt;
Схема и прошивка&lt;/h4&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZGzJKlG7nQ-3sqqAicsqwXi_kT3SKX-HBoX7F1Q2I9NZ3ARfNHTAGeQ48rjbON-mW7DT16avxHVI0D22sYZ_Ti18L2xGEcxkFae1vn_GT2KUiC83BvyhgIMIc7H-q6E8EybHy2YzB8nXd/s1600/image01.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZGzJKlG7nQ-3sqqAicsqwXi_kT3SKX-HBoX7F1Q2I9NZ3ARfNHTAGeQ48rjbON-mW7DT16avxHVI0D22sYZ_Ti18L2xGEcxkFae1vn_GT2KUiC83BvyhgIMIc7H-q6E8EybHy2YzB8nXd/s600/image01.png&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;i&gt;(кликабельно для увеличения)&lt;/i&gt;&lt;/div&gt;
&lt;br /&gt;
Основные отличия от оригинального проекта &lt;a href=&quot;http://vusb.wikidot.com/project:mamepanel&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;V-USB MamePanel&lt;/a&gt;:&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;схема&amp;nbsp;работает от +5В — убран преобразователь в +3.3В;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;в связи с этим установлено 2 стабилитрона на D+ и &amp;nbsp;D- согласно рекомендациям/требованием авторов V-USB;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;резистор-подтяжка для D- заменен на 1.5 кОм, опять-таки согласно &lt;a href=&quot;http://vusb.wikidot.com/hardware&quot; target=&quot;_blank&quot;&gt;референсной схеме V-USB&lt;/a&gt;. Кстати, резистор-подтяжка нужен для определения устройства, как low speed usb device. Если повесить на D+ — Windows, в частности, может пожаловаться, что это устройство &quot;может работать быстрее&quot;, но стабильности это не добавляет.&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;разъем X3 имеет 8 контактов. Во-первых оттуда можно брать или подавать питание, во-вторых туда вынесены служебные контакты;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;наименование контактов осталось прежним и соответствует &quot;дефолтному&quot; маппингу кнопок.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Архив с исходным кодом содержит как бутлоадер, так и непосредственно дефолтную прошивку. Почему она &quot;дефолтная&quot;, а также значения lock и fuse битов можно посмотреть в &quot;&lt;a href=&quot;http://adapto.rs/arc/doc/&quot; target=&quot;_blank&quot;&gt;Руководстве по эксплуатации ARCAdaptor&lt;/a&gt;&quot;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Схема в формате EagleCAD входит в состав документации на ARCAdaptor (ссылка в конце &lt;a href=&quot;http://adapto.rs/arc/site/arcadaptor/&quot; target=&quot;_blank&quot;&gt;страницы проекта&lt;/a&gt;). Плату придется развести самому или изготовить на макетке. Если нет возможности заниматься травлением, готовую плату, набор для сборки или пустую плату&amp;nbsp;&lt;a href=&quot;http://adapto.rs/arc/site/buyit/&quot; target=&quot;_blank&quot;&gt;можно купить&amp;nbsp;здесь.&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Подведем промежуточный итог: мы получили &lt;i&gt;устройство&lt;/i&gt;, которое совмещает в себе следующие возможности:&lt;/div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Адаптер для создания &quot;кастомных&quot; клавиатур и джойстиков для компьютера;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Отладочная плата на ATmega8;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Arduino-совместимая плата;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Радиоконструктор :-)&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Что же, будем считать, что с прототипом мы закончили. Ничто не мешает собрать такое устройство самому в домашних условиях — хоть на макетной плате. Однако, чтобы довести ее до продукта, надо пройти еще несколько шагов ;-)&amp;nbsp;&lt;/div&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
Путь к Продукту&lt;/h3&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Что нам мешает поделиться работающей &quot;железкой&quot; с единомышленниками?&lt;/div&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Не все умеют/желают копаться в исходных текстах. Перекомпиляция проекта — несложный процесс, но все равно требует определенных навыков;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Далеко не все имеют возможность вытравить плату дома. И пусть этот процесс описан в тысячах источников, повторяю, такая возможность есть не у всех.&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Человек хочет получить готовый к употреблению продукт, а не нечто из мира &lt;a href=&quot;http://ru.wikipedia.org/wiki/%D0%9E%D1%82%D0%BA%D1%80%D1%8B%D1%82%D0%BE%D0%B5_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D0%B5%D1%81%D0%BF%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&quot; target=&quot;_blank&quot;&gt;Open Hardware&lt;/a&gt;, требующее доработки напильником и сборки по кусочкам.&lt;/li&gt;
&lt;/ol&gt;
Какие есть пути решения?&lt;br /&gt;
&lt;br /&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Изначально &lt;b&gt;ARCAdaptor&lt;/b&gt; позиционируется, как устройство, позволяющее подключить самодельный джойстик или клавиатуру к компьютеру - обычному ПК или планшету с USB портом. &amp;nbsp;Возможность конфигурировать прошивки есть - можете назначать контакты на конкретные действия — кнопка X будет вызывать нажатие &quot;пробела&quot;, а кнопка Y будет, например, изображать движение джойстика &quot;вверх&quot;. Однако надо составить правильный образ EEPROM, и для этого мы создадим удобный и наглядный редактор, разместив его прямо на сайте, чтобы пользователь мог самостоятельно составить и скачать образ, не покидая любимого браузера;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Сделаем симпатичные платы на заводе;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Документация решает всё. Распишем доступным русским языком и опубликуем на веб-сайте.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;
Онлайн-редактор&lt;/h4&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Появление HTML5 и продвинутых средств разработки, таких как jquery привело к тому, что наша жизнь потихоньку переползает в онлайн. Смартфоны сразу загружают фотки в &quot;облако&quot; — ни тебе проводов, подключений и поиска по устройству. Эта статья пишется в Google Docs.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Так почему бы нам не сделать редактор конфигурации прямо в браузере? От него потребуется:&lt;/div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Назначать клавиши, а также &amp;nbsp;кнопки и контакты джойстика на конкретные контакты &lt;b&gt;ARCAdaptor&lt;/b&gt;;&lt;/li&gt;
&lt;li&gt;Сохранять свое состояние;&lt;/li&gt;
&lt;li&gt;Выдавать пользователю образ EEPROM прямо в .hex файле, который готов к употреблению — заливке в устройство.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgNvwjQh9KJjHbCIekcef-QBIPDgX7TG5x3hDT1qJ_6UjPdc5A3nFB6eODAwdqE1gwZPSz0mwDw9q7_qIFziCFnAPp2SYgfN_3B6LE3jGfpl6BFhuJRgNtRquIhco0orxrnSjoIZO77V1T/s1600/w2TCJOFn1D3-Vq-778kvTgdNcusnbwbfdkl6V48i91Gxarn60TEHalhzhczUnCMxEA%253Ds2000.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgNvwjQh9KJjHbCIekcef-QBIPDgX7TG5x3hDT1qJ_6UjPdc5A3nFB6eODAwdqE1gwZPSz0mwDw9q7_qIFziCFnAPp2SYgfN_3B6LE3jGfpl6BFhuJRgNtRquIhco0orxrnSjoIZO77V1T/s600/w2TCJOFn1D3-Vq-778kvTgdNcusnbwbfdkl6V48i91Gxarn60TEHalhzhczUnCMxEA%253Ds2000.jpg&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
Рабочая область редактора состоит из схематичного шаблонного изображения клавиатуры, двух джойстиков и набора контактов &lt;b&gt;ARCAdaptor&lt;/b&gt; (X1, X2 X3).&lt;br /&gt;
&lt;br /&gt;
Взаимодействие протекает предельно просто: цепляете кнопку с экранной клавиатуры или джойстика и тащите на желаемый контакт, который принимает новое значение и подсвечивается. Как только всё переназначено, можно кликнуть по ссылке Get EEPROM Image, чтобы скачать файл конфигурации.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Интересно, что механизм Drag&#39;n&#39;Drop в HTML5 был полностью перенесен из модели, используемой в Internet Explorer. Но, по иронии судьбы — Internet Explorer как раз и не работает с редактором. Ну или редактор с IE, как кому удобнее думать :-).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
При нажатии на ссылку &quot;Get EERPOM Image&quot; назначение контактов отсылается на сервер, который в ответ формирует .hex файл. К сожалению, все тонкости реализации, слова &quot;json&quot; и &quot;ajax&quot; лежат совсем за рамками данной статьи. Но если у кому-то интересно — в конце есть способы связи со мной. &lt;a href=&quot;http://adapto.rs/arc/editor/&quot; target=&quot;_blank&quot;&gt;Попробовать редактор в деле можно незамедлительно&lt;/a&gt;.&lt;/div&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;
Заводские платы&lt;/h4&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Так уж вышло, что я по образованию больше программист, чем разработчик железа. Хотя в жизни удалось поучаствовать во многих проектах, но вот как схема превращается в плату — узнал не так давно. То, что я &quot;ваяю&quot; в Eagle, далеко от совершенства: оно одностороннее, не имеет эстетической ценности и, наконец, делается для себя. Тут нужна была консультация специалиста.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Опытным путем выяснилось, что китайские изготовители делают относительно дешево, но на &quot;вход&quot; принимают в основном Gerber-файлы. Их генерация из Eagle предусмотрена, но я, честно говоря, страшился этого шага, так как не знаю, как и что должно там быть. А чувствовать себя неподготовленным студентом в общении с изготовителем не очень хотелось.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Короче, схема была отдана сведущему коллеге, который развел ее в PCAD за пару часов. Была заказана опытная партия, найдена ошибка (не моя :-)), исправлена, и вот заветная партия в руках.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhP3TbsoWj-bawW33TTy2i9r_xx4C8lSc3Stl-IwZTb-y4opSc125e7n48iIvb1c78-fHC7Gg7qeVyljTLsRt0cD5i1LVPehEmjtOZsk29J62SSyzyx_kijU8KXCnLp3f_MM4r87tHK8S0m/s1600/_UIdMB9kJF6Y6AgkY0QQcHj_JNN7Ia5_gSm6VZlZNQo4e6Tp3ka6z-J33vKNjsMRhw%253Ds2000.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhP3TbsoWj-bawW33TTy2i9r_xx4C8lSc3Stl-IwZTb-y4opSc125e7n48iIvb1c78-fHC7Gg7qeVyljTLsRt0cD5i1LVPehEmjtOZsk29J62SSyzyx_kijU8KXCnLp3f_MM4r87tHK8S0m/s600/_UIdMB9kJF6Y6AgkY0QQcHj_JNN7Ia5_gSm6VZlZNQo4e6Tp3ka6z-J33vKNjsMRhw%253Ds2000.jpg&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
Изготовитель &amp;nbsp;— отечественный, поэтому не пришлось ждать милости у почты РФ. Из плюсов — принимают документацию в формате этого самого PCAD.&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
Часто спрашивают: сколько это стоит. Первоначальный заказ обошелся в сумму около &lt;b&gt;80 долларов США&lt;/b&gt;. Когда фотошаблон готов — стоимость изготовления ниже стоимости доставки. А сколько времени и нервов экономится при &quot;неиспользовании&quot; утюга — и не сосчитаешь.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;
Документация&lt;/h4&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
При написании документации важно понимать три момента: &lt;i&gt;для кого&lt;/i&gt;, &lt;i&gt;как&lt;/i&gt; и &lt;i&gt;сколько&lt;/i&gt;.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
&lt;i&gt;&lt;b&gt;Для кого:&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
&lt;i&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
Помните, что вы пишите для людей, поэтому пишите так, чтобы мог понять ваш близкий друг, далекий от электроники. Совсем опускаться до людей с &quot;гуманитарным складом ума&quot; не стоит, но и заумствовать/нагонять тоску противопоказано. Помните, ваша задача — сделать так, чтобы человек дочитал до конца. Желательно по доброй воле, а не от безысходности.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
&lt;i&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
&lt;i&gt;&lt;b&gt;Как:&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
&lt;i&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
Вдумчиво. Представьте, что вы открыли коробку со сложным прибором. И не получится им воспользоваться без прочтения фолианта, именуемого &quot;руководство по эксплуатации&quot;. Всегда помните о Вашем пользователе. Расшифровывайте термины, сделайте оглавление, сохраняйте логику повествования. Вначале базовые вещи, потом уровень advanced.&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
Обязательно найдите &quot;жертву&quot; — пусть это будет Ваш товарищ, друг, коллега, которому интересно то, что вы делаете. Дайте ему на &quot;вычитку&quot; документ. Если хотите максимально использовать &quot;эффект первого прочтения&quot; — пользуйтесь онлайн средствами для совместной работы. Google Docs позволяет оставлять комментарии, не требуют гонять версии по почте или на &quot;флешке&quot;.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
Используйте стили. Не &quot;жЫрный текст в заголовке&quot;, а стиль. Когда вы будете выгружать это на свой веб-сайт или текстовый процессор, они сохранятся и сослужат хорошую службу, ну и оглавление родится почти само.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
Не стесняйтесь использовать ссылки — например &quot;подробнее о том, что такое ATmega8 можно почитать &lt;u&gt;тут&lt;/u&gt; или &lt;u&gt;тут&lt;/u&gt;&quot;.&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
На самом деле, эффект &quot;первого прочтения&quot; очень важен. Вам сообщат о массе недочетов. Постарайтесь использовать это преимущество. К сожалению, повторить этот эффект можно не раньше, чем через 3 месяца — это свойство человеческой памяти и восприятия.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
&lt;i&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
&lt;i&gt;&lt;b&gt;Сколько:&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
Столько, сколько нужно. Ориентир один — все связанные с продуктом, устройством или &quot;сервисом&quot; вопросы должны решаться с помощью документации. Вы сэкономите свое время и время Ваших пользователей.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
Из личного опыта — &amp;nbsp;мне задавали совершенно разные вопросы по проекту. На 95% из них я отвечал, просто отсылая к нужному разделу документации.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
Вообще, стоит почитать руководства по использованию сложных бытовых приборов &quot;старого образца&quot; из времен СССР. Во многих случаях это отличный пример инженерного мышления.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
И напоследок — помните, что в русском языке букву &quot;Ё&quot; никто не отменял. А также, &quot;-&quot; — это &quot;минус&quot;, а &quot;—&quot; — это тире. И это хорошие привычки.&amp;nbsp;&lt;/div&gt;
&lt;h4 style=&quot;text-align: justify;&quot;&gt;
Продвижение&lt;/h4&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
Вебсайт, онлайновый магазин, you name it… Здесь потребуются навыки и дизайнера, и SEO, и разработчика, но не электроники, а www. Говорить об этом можно бесконечно, и для этого есть более другие ресурсы. Главное здесь — &amp;nbsp;не умножать сущности без необходимости. Помните о том, что Ваше время есть главная ценность. Не стоит его тратить на то, что не принесёт никакого эффекта.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
Стоит завести wiki, наполнять faq, узнавать впечатления от использования. Вобщем, поддержать Вашего клиента информационно. Что НЕ стоит делать — Вы поймете сами. Например, участвовать в перепалках на форумах, если речь идет о Вашем продукте. Хейтеры и тролли будут всегда, особенно если продукт хоть чего-то стоит.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
Ну и название. &lt;b&gt;ARCAdaptor&lt;/b&gt;. Arcade Adaptor. А домен &amp;nbsp;— &amp;nbsp;adapto.rs. Вдруг будут ещё какие-нибудь адаптОры :-)&lt;/div&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;
Оргвыводы и планы&lt;/h4&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
Итак, ARCAdaptor оформился от &quot;просто платы&quot; до практически готового продукта. Это был долгий путь. В какой-то момент хотелось бросить всё, а когда-то сидеть всю ночь и думать над очередной формулировкой.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
Вот некоторые выводы, которые я лично сделал в процессе работы:&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Создание конечного продукта — трудный и довольно ресурсоёмкий процесс;&lt;/li&gt;
&lt;li&gt;&quot;Железо&quot; и &quot;Софт&quot; — это всего лишь 20% от усилий. Остальные 80% — это документация;&lt;/li&gt;
&lt;li&gt;Для себя вы делаете прототип. Продукт вы делаете для людей;&lt;/li&gt;
&lt;li&gt;Найдите хотя бы одного из Ваших знакомых, которому интересно то же, что и Вам. Взгляд со стороны — бесценен;&lt;/li&gt;
&lt;li&gt;Сделайте людям удобно. Это самое главное. По крайней мере, сейчас.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
В ближайших планах — &amp;nbsp;перевод всего, чего можно на &lt;a href=&quot;https://github.com/&quot; target=&quot;_blank&quot;&gt;GitHub&lt;/a&gt;. Это просто нужно сделать :-).&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
Далее, сделать поддержку V-USB из среды Arduino (ну не всё же лампочками моргать), тем более это уже частично реализовано с помощью проекта &lt;a href=&quot;http://code.rancidbacon.com/ProjectLogArduinoUSB&quot; target=&quot;_blank&quot;&gt;ArduinoUSB&lt;/a&gt;.&amp;nbsp;Есть &lt;a href=&quot;https://code.google.com/p/vusb-for-arduino/&quot; target=&quot;_blank&quot;&gt;библиотека&lt;/a&gt;,&amp;nbsp;&amp;nbsp;позволяющая&amp;nbsp;полноценно работать из Arduino IDE с устройствами libusb, а также включает в себя пример реализации USB-клавиатуры, как HID устройства. &amp;nbsp;Сайт проекта не обновлялся довольно давно, но библиотека вполне работающая, хоть и требует некоторого &quot;вмешательства&quot;.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
Задача - сделать так, чтобы библиотека работала в актуальных версиях Arduino IDE, не требовала усилий по установке (сейчас документация говорит о том, что часть проекта нужно предварительно скомпилировать в объектные файлы - согласитесь, задача не совсем тривиальная, тем более для совсем юных падаванов), ну и конечно же, работала c &lt;b&gt;ARCAdaptor&lt;/b&gt;.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
Что сделано для этого проекта сейчас:&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Немного подправлен код;&lt;/li&gt;
&lt;li&gt;Произведено обновление до последней версии V-USB;&lt;/li&gt;
&lt;li&gt;Установка может быть выполнена без специальных средств - как для обычной библиотеки (хотя это заслуга нового Arduino IDE, если честно - сборка работает более гуманно);&lt;/li&gt;
&lt;li&gt;Работают все тестовые примеры (проверялось на &amp;nbsp;Mac/Linux).&lt;/li&gt;
&lt;/ul&gt;
Что будет сделано (когда будет свободная минута):&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Будет написано краткое руководство по установке;&lt;/li&gt;
&lt;li&gt;Примеры на Python будут хотя бы задокументированы;&lt;/li&gt;
&lt;li&gt;Всё это будет опубликовано.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
Ну и, конечно, нужно продолжать наполнять базу &lt;a href=&quot;http://adapto.rs/arc/wiki/index.php?page=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D1%8B&quot; target=&quot;_blank&quot;&gt;существующих проектов&lt;/a&gt;.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
Ниже по ссылкам отзывы пользователей (точнее одного, который был достаточно смел, чтобы рассказать о своем опыте :-) :&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
&lt;a href=&quot;http://a320.emulate.su/2013/07/20/arcadaptor-pervye-testy-i-vpechatleniya/&quot;&gt;http://a320.emulate.su/2013/07/20/arcadaptor-pervye-testy-i-vpechatleniya/&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
&lt;a href=&quot;http://a320.emulate.su/2013/07/21/arcadaptor-prakticheskoe-primenenie-v-windows-i-android/&quot;&gt;http://a320.emulate.su/2013/07/21/arcadaptor-prakticheskoe-primenenie-v-windows-i-android/&lt;/a&gt;&lt;/div&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
Связь&lt;/h3&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
По всем вопросам по поводу проекта &lt;b&gt;ARCAdaptor&lt;/b&gt; можно писать в почту &lt;a href=&quot;mailto:contact@adapto.rs&quot;&gt;contact@adapto.rs&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
Совсем персональный сайт: &lt;a href=&quot;http://znoxx.me/&quot;&gt;http://znoxx.me&lt;/a&gt;.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
Связаться по другим вопросам можно по почте &lt;a href=&quot;mailto:me@znoxx.me&quot;&gt;me@znoxx.me&lt;/a&gt;.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
Спасибо, что дочитали до конца!&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br /&gt;Материал опубликован на сайте mk90.blogspot.com под лицензией Creative Commons Share Alike 3.0&lt;/div&gt;</description><link>http://mk90.blogspot.com/2013/11/arcadaptor_24.html</link><author>noreply@blogger.com (znoxx)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSvgmSZHrT7TcNyZh7zrzqUjBjTW2PV4y9MXBpTMG1ultOHkv36cypCIaerTN3Rw3l2QJEgQI8z6qxGDMQXH2rZs5voD2VMHdAWIZ5X-htZVuyM6r02XLvbImoIdoxvHTo8d7JhaBz1cIq/s72-c/1211949f37e27eaba5f1e414dc84ba31.jpg" height="72" width="72"/><thr:total>3</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8944086625767573647.post-2761404985765684070</guid><pubDate>Thu, 25 Jul 2013 10:53:00 +0000</pubDate><atom:updated>2013-08-03T14:57:26.552+04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ArduinoCompatible</category><category domain="http://www.blogger.com/atom/ns#">Freeduino</category><category domain="http://www.blogger.com/atom/ns#">Freeduino One</category><category domain="http://www.blogger.com/atom/ns#">Hardware</category><category domain="http://www.blogger.com/atom/ns#">Новости</category><title>Freeduino One c microUSB</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Однажды, в комментах мне попеняли на &quot;любовь к большим разъемам USB&quot;. В другой раз услышал в личной беседе пожелание использовать microUSB, потому что &quot;к нему проще найти кабель&quot;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&quot;Ну что же...&quot; - подумал я, и:&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://mk90.ru/store/ru/microcontrollers/1-freeduino-one.html&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYLUSW0SC0sS4-zP1ackZp74DuDeH7KT_78hp31k7D2Ss-TwcyHqkTUqwh49NmX3mWxb4Sd3GQuZps6WDw9msiOBdw6hTbIObV3HBnG7kbsdu8UHDk3iY54sIXTfP3wdM339Zumf_ZgA7H/s600/freeduino.one.3.1.0-top.jpg&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
Старшие товарищи тут же меня обсмеяли, заметив, что &lt;b&gt;microUSB&lt;/b&gt; - крайне ненадежный и хлипкий разъем, который обязательно сломается или сгорит. То ли дело, например, такой:&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZS8-UeByL_I954Alj_Xm9bV6WuuHTzgl7WkYsm7n38ZwaZjmYO_iy6-0bZ-GoFizNFjhY_e6bJvJTvgWM4wc_f0UZ9VBxTuOM5PmLoTvZ17AJwWYcc2kAdshrh-ff90uqyUnoYsK1Ng2z/s1600/connector-old.jpg&quot; /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
Но если серьезно, меня сильно порадовало высвободившееся на плате место, это дает определенный простор для творчества (в прямом и переносном смысле).&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br /&gt;Материал опубликован на сайте mk90.blogspot.com под лицензией Creative Commons Share Alike 3.0&lt;/div&gt;</description><link>http://mk90.blogspot.com/2013/07/freeduino-one-c-microusb.html</link><author>noreply@blogger.com (id)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYLUSW0SC0sS4-zP1ackZp74DuDeH7KT_78hp31k7D2Ss-TwcyHqkTUqwh49NmX3mWxb4Sd3GQuZps6WDw9msiOBdw6hTbIObV3HBnG7kbsdu8UHDk3iY54sIXTfP3wdM339Zumf_ZgA7H/s72-c/freeduino.one.3.1.0-top.jpg" height="72" width="72"/><thr:total>3</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8944086625767573647.post-9000307374087966802</guid><pubDate>Fri, 07 Jun 2013 11:56:00 +0000</pubDate><atom:updated>2013-06-13T16:13:41.325+04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Arduino Shield</category><category domain="http://www.blogger.com/atom/ns#">Freeduino</category><category domain="http://www.blogger.com/atom/ns#">Hardware</category><category domain="http://www.blogger.com/atom/ns#">Kits</category><category domain="http://www.blogger.com/atom/ns#">Software</category><category domain="http://www.blogger.com/atom/ns#">Шилд-платы</category><title>TV-out для Arduino</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Если вы когда-нибудь почувствуете, что вашему Arduino-проекту стало тесно на алфавитно-цифровом дисплее 1602, обязательно обратите&amp;nbsp;внимание&amp;nbsp;на проект&amp;nbsp;&lt;a href=&quot;http://forum.arduino.cc/index.php/topic,7010.0.html&quot; target=&quot;_blank&quot;&gt;TellyMate Shield&lt;/a&gt;. Он позволяет выводить ту же алфавитно-цифровую информацию на обычный телевизор, через видео-вход.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
При определенном везении можно заполучить весьма внушительных размеров дисплей (если телевизор имеет прилично дюймов в диагонали), работающий в режиме &lt;a href=&quot;http://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D0%BB%D0%B5%D1%82%D0%B0%D0%B9%D0%BF&quot; target=&quot;_blank&quot;&gt;телетайпа&lt;/a&gt;&amp;nbsp;&amp;nbsp;38 x 25 знакомест. Впрочем, бросив первый взгляд на схему, ловишь себя на мысли о розыгрыше. В самом деле:&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhm_pPc9qNKTJ2ENEYtkt0sR2dZMUpAnRMGzMMDi6YVp4kYcpBvDsw98TAQ7vbnDqU3yt23fa5Cjsy_0R5896WeRgkMRo6w4czetKm58p9GKVMRlOCucfdZckAAU-bGzvFSn7p3yZusuF_p/s1600/schematic.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhm_pPc9qNKTJ2ENEYtkt0sR2dZMUpAnRMGzMMDi6YVp4kYcpBvDsw98TAQ7vbnDqU3yt23fa5Cjsy_0R5896WeRgkMRo6w4czetKm58p9GKVMRlOCucfdZckAAU-bGzvFSn7p3yZusuF_p/s600/schematic.png&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Обычный ATmega8 на тактовой частоте 16 МГц формирует два компонента видеосигнала, которые смешиваются нехитрой схемой из двух резисторов и двух диодов. Группой переключателей S1 устанавливаются режимы работы; согласующий резистор 75 Ом подключается через перемычку и добавлен, скорее, для универсальности (думаю, в большинстве случаев не понадобится).&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhHdkds3LO764welTHwhIRTEXn-0gH1fw0DFkbFLVF1TMVmG0p9y4Uc8ScOSQeAVjrvrxbxACwOgOyJhICOA88S7CHU5_vxL4EXZsZl1d04dmpdg_QGPx7dG0d2NmWiT2iqdOpX31ySr4l/s1600/tms_11_diagonal_640.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhHdkds3LO764welTHwhIRTEXn-0gH1fw0DFkbFLVF1TMVmG0p9y4Uc8ScOSQeAVjrvrxbxACwOgOyJhICOA88S7CHU5_vxL4EXZsZl1d04dmpdg_QGPx7dG0d2NmWiT2iqdOpX31ySr4l/s600/tms_11_diagonal_640.jpg&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Arduino выводит информацию для отображения через последовательный порт - пины RX/TX. Если вас смущает, что по ним же происходит загузка скетча и во время этого процесса на экране появляется некая &quot;ерунда&quot;, можно уйти на любой пин с помощью библиотеки SoftwareSerial. Поддерживаются разные скорости, а также есть возможность автоопределения. Простейший скетч выглядит так:&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: white; font-size: 12px; margin-left: 20px;&quot;&gt;&lt;span class=&quot;ard_bonuskeyword&quot; style=&quot;color: #996600;&quot;&gt;        Serial&lt;/span&gt;&lt;span class=&quot;ard_operator&quot; style=&quot;font-weight: bold;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;ard_bonuskeyword&quot; style=&quot;color: #996600;&quot;&gt;begin&lt;/span&gt;&lt;span class=&quot;ard_operator&quot; style=&quot;font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;ard_int&quot;&gt;57600&lt;/span&gt;&lt;span class=&quot;ard_operator&quot; style=&quot;font-weight: bold;&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;ard_comment&quot; style=&quot;color: green; font-style: italic;&quot;&gt; //57k6 baud
&lt;/span&gt;&lt;span class=&quot;ard_bonuskeyword&quot; style=&quot;color: #996600;&quot;&gt;        Serial&lt;/span&gt;&lt;span class=&quot;ard_operator&quot; style=&quot;font-weight: bold;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;ard_bonuskeyword&quot; style=&quot;color: #996600;&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;ard_operator&quot; style=&quot;font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;ard_string&quot; style=&quot;color: #cc0000;&quot;&gt;&quot;Hello, world!&quot;&lt;/span&gt;&lt;span class=&quot;ard_operator&quot; style=&quot;font-weight: bold;&quot;&gt;);&lt;/span&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
К сожалению, изображение формируется исключительно черно-белое. Зато внутри имеем полноценный знакогенератор кодовой страницы 437, в котором есть псевдографика:&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1fg42b8B82nRrTSHVx9vA9pLevh8GwpVT8XLb-ceR0CtUZfC7IBZtCu_1P1pu5kf727VxU-Ds9hK0Rb1Y0bTb84b-VFEbHm79HKeaiRzau7f65YSjPVJdQcXLTmGIo51YuADaDgKuU2GP/s1600/tms_sampler01_640.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1fg42b8B82nRrTSHVx9vA9pLevh8GwpVT8XLb-ceR0CtUZfC7IBZtCu_1P1pu5kf727VxU-Ds9hK0Rb1Y0bTb84b-VFEbHm79HKeaiRzau7f65YSjPVJdQcXLTmGIo51YuADaDgKuU2GP/s600/tms_sampler01_640.jpg&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdlFAjv_mGa7S_t1jJfw6LN7JYmmLu2m10QxtsteoYXlG7JP4QpMPmRDU0ru-LrKmuSPEXvTLXIH1ufzoQy3WhlNSe2BwU3Xmdv3n-gYu_V3X6p488Bq_MM-wOpnpVmIAinBqU-k2XDwyo/s1600/tms_11_end_640.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Вы, наверное, заметили, что для вывода видео использован аудио-разъем 3,5мм. На самом деле, это не казус, а вполне осознанный выбор, ограничивающий высоту элементов и делающий возможным стекирование шилдов:&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdlFAjv_mGa7S_t1jJfw6LN7JYmmLu2m10QxtsteoYXlG7JP4QpMPmRDU0ru-LrKmuSPEXvTLXIH1ufzoQy3WhlNSe2BwU3Xmdv3n-gYu_V3X6p488Bq_MM-wOpnpVmIAinBqU-k2XDwyo/s1600/tms_11_end_640.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdlFAjv_mGa7S_t1jJfw6LN7JYmmLu2m10QxtsteoYXlG7JP4QpMPmRDU0ru-LrKmuSPEXvTLXIH1ufzoQy3WhlNSe2BwU3Xmdv3n-gYu_V3X6p488Bq_MM-wOpnpVmIAinBqU-k2XDwyo/s640/tms_11_end_600.jpg&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Кроме вывода обычных символов, поддерживаются так называемые ESCAPE-последовательности, которые управляют курсором, удваивавают высоту и/или ширину символов и даже переключают банки шрифтов и переопределяют символы (что, впрочем, возможно только на ATmega328P, где памяти гораздо больше, чем у ATmega8). Таким же образом можно получить версию прошивки и прочую диагностическую информацию.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Чем-то все это напоминает &lt;a href=&quot;http://mk90.blogspot.ru/search/label/lol&quot;&gt;LoL-Shield&lt;/a&gt;, особенно приложениями - взгляните на &lt;a href=&quot;http://www.batsocks.co.uk/products/Shields/TellyMate%20Shield_Examples.htm&quot;&gt;список доступных .ino&lt;/a&gt;. Здесь найдется не только классика&amp;nbsp;&lt;a href=&quot;http://ru.wikipedia.org/wiki/%D0%96%D0%B8%D0%B7%D0%BD%D1%8C_(%D0%B8%D0%B3%D1%80%D0%B0)&quot; target=&quot;_blank&quot;&gt;Life&lt;/a&gt;&amp;nbsp;и &lt;a href=&quot;http://ru.wikipedia.org/wiki/Snake_(%D0%B8%D0%B3%D1%80%D0%B0)&quot; target=&quot;_blank&quot;&gt;Snake&lt;/a&gt;, но и более изощренные - Maze и даже простейший &quot;графический редактор&quot;!&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Поскольку все материалы доступны и открыты для доработки, мы решили немного поэкспериментировать и создать на базе этого шилда русифицированный вариант. Имя &quot;TellyMate&quot;, подобно Arduino, является торговой маркой - поэтому пришлось назвать наш вариант&amp;nbsp;&lt;b&gt;Freeduino Teleсhat&lt;/b&gt;:&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBYBWNKRbKp4ZKuJpSHN-mjsa8EF1I4zHJd7jEsYm7AHCjiTwydLwpTOPMCcQh1i_XYo38s8OEXOs8jjMt2WwrqnWCY4BFZk4WxBhwuih2pzcp0uPc3hYZVhgNd8uULh96oaRP14nRufc/s1600/pic-1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBYBWNKRbKp4ZKuJpSHN-mjsa8EF1I4zHJd7jEsYm7AHCjiTwydLwpTOPMCcQh1i_XYo38s8OEXOs8jjMt2WwrqnWCY4BFZk4WxBhwuih2pzcp0uPc3hYZVhgNd8uULh96oaRP14nRufc/s600/pic-1.jpg&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
Все детали - PTH, поскольку шилд задумывался изначально в формате кита для самостоятельной сборки - и что может быть лучше, чем собрать всё самостоятельно? ;) Пины RX/TX имеют перемычки под пайку с обратной стороны платы, так что при желании их можно перерезать и подпаять к любым другим пинам. Аналогичным способом &amp;nbsp;отключается и кнопка сброса - если не хотите, чтобы МК шилда сбрасывался синхронно со &amp;nbsp;скетчем Arduino.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
Краткое руководство по сборке шилда:&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidvUxuECCvqpB7fJQficQKVYyIdGi9o9HVokZKkBIOFIkUOmo-Db137XQh8DEugY-2W14_WE172_GgX9TbI9tT-Opr_75zY4kndi7K5q-Goq5zeJ02K2pWDfwm_2ezDa6JyZ_xXFjjMoiZ/s1600/step01-MOTION.gif&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;365&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidvUxuECCvqpB7fJQficQKVYyIdGi9o9HVokZKkBIOFIkUOmo-Db137XQh8DEugY-2W14_WE172_GgX9TbI9tT-Opr_75zY4kndi7K5q-Goq5zeJ02K2pWDfwm_2ezDa6JyZ_xXFjjMoiZ/s400/step01-MOTION.gif&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
Шутка, конечно ;) просто там действительно все элементарно. На&amp;nbsp;&lt;a href=&quot;http://howtomakekit.blogspot.ru/&quot;&gt;howtomakekit.blogspot.ru&lt;/a&gt;,&amp;nbsp;как всегда, выложена подробная &lt;a href=&quot;http://howtomakekit.blogspot.ru/2013/06/freeduino-telechat-v110.html&quot; target=&quot;_blank&quot;&gt;пошаговая инструкция&lt;/a&gt;.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
Русифицированный шрифт мы разместили точно таким же способом, что и автор - в виде &lt;a href=&quot;https://docs.google.com/spreadsheet/ccc?key=0AuCyhLm6dsjtdFZGdDlMUklQXzN1djlxbkVhdUlLdXc&amp;amp;usp=sharing&quot; target=&quot;_blank&quot;&gt;ссылки&lt;/a&gt; на документ в GDocs, копию которого при необходимости можно сохранить у себя. В открытом документе надо зайти на последнюю закладку, генерирующую hex, и скопировать ее содержимое в файл &amp;nbsp;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;fontbank0.c&lt;/span&gt;, подменив его в исходниках (можно скачать &lt;a href=&quot;http://www.batsocks.co.uk/downloads/index_downloads.htm&quot; target=&quot;_blank&quot;&gt;со страницы проекта&lt;/a&gt;).&amp;nbsp;После компиляции&amp;nbsp;получите прошивку c поддержкой кодовой страницы 866. Именно она и зашивается в ATmega8, входящие в комплект наборов Freeduino TeleChat.&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
Для вывода русского текста потребуется еще кое-что сделать. Как известно, ArduinoIDE хранит все символы в кодировке UTF-8, и для нормальной работы потребуется их транслировать в кодировку 866. Делать это в оригинальной прошивке нам показалось святотатством - авторы очень скрупулезно рассчитали все задержки в коде. Предлагаем самый простой вариант перекодирующей функции:&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;&lt;span style=&quot;color: #cc6600;&quot;&gt;byte&lt;/span&gt; c1 = 0;

&lt;span style=&quot;color: #cc6600;&quot;&gt;void&lt;/span&gt; tele_print_char(&lt;span style=&quot;color: #cc6600;&quot;&gt;char&lt;/span&gt; cd) {
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;byte&lt;/span&gt; c = cd;
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;if&lt;/span&gt; (  c &amp;gt;= 0x80) { &lt;span style=&quot;color: #7e7e7e;&quot;&gt;// UTF-8 handling&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;if&lt;/span&gt; (!c1) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;c1&amp;nbsp;=&amp;nbsp;c;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;else&lt;/span&gt; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;if&lt;/span&gt; (c1 == 0xd0) { 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;if&lt;/span&gt; (c == 0x81) &lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #cc6600;&quot;&gt;char&lt;/span&gt;(0xf0)); &lt;span style=&quot;color: #7e7e7e;&quot;&gt;// Ё&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;print&lt;/span&gt;( (&lt;span style=&quot;color: #cc6600;&quot;&gt;char&lt;/span&gt;) (c - 0x10));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;if&lt;/span&gt; (c1 == 0xd1) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;if&lt;/span&gt; (c == 0x91) &lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #cc6600;&quot;&gt;char&lt;/span&gt;(0xf1)); &lt;span style=&quot;color: #7e7e7e;&quot;&gt;// ё&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;print&lt;/span&gt;( (&lt;span style=&quot;color: #cc6600;&quot;&gt;char&lt;/span&gt;) (c + 0x60));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;c1&amp;nbsp;=&amp;nbsp;0;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;print&lt;/span&gt;(cd);
}&amp;nbsp;

&lt;span style=&quot;color: #cc6600;&quot;&gt;void&lt;/span&gt; tele_print_str(&lt;span style=&quot;color: #cc6600;&quot;&gt;char&lt;/span&gt; *s) {
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;for&lt;/span&gt;(&lt;span style=&quot;color: #cc6600;&quot;&gt;int&lt;/span&gt; i=0;i&amp;lt;strlen(s);i++) tele_print_char(s[i]);
}

&lt;span style=&quot;color: #cc6600;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;setup&lt;/b&gt;&lt;/span&gt;()
{
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;char&lt;/span&gt; letter[]=&lt;span style=&quot;color: #006699;&quot;&gt;&quot;АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ&quot;&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;begin&lt;/span&gt;( 57600 ) ;
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;println&lt;/span&gt;( &lt;span style=&quot;color: #006699;&quot;&gt;&quot;Hello World!&quot;&lt;/span&gt; ) ;
&amp;nbsp;&amp;nbsp;tele_print_str(&amp;nbsp;&lt;span style=&quot;color: #006699;&quot;&gt;&quot;Привет, мир!\n\r&quot;&lt;/span&gt; ) ;
&amp;nbsp;&amp;nbsp;tele_print_str(&amp;nbsp;letter&amp;nbsp;);
}

&lt;span style=&quot;color: #cc6600;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;loop&lt;/b&gt;&lt;/span&gt;()
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #7e7e7e;&quot;&gt;// do nothing!&lt;/span&gt;
}
&lt;/pre&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiT6_uyt3aT79Dlofd2xVeYFxiQGI3Mbey_hpSYZwk4HNW_OqcK4cXOd5ds9o8qISuXODP5syOWeoBGK3tqlRz3HUNrTcEFYOgPnZ1547fyYTfpqhXopbJiVPQ1a5AdzXu5R_Tz3nJJya3D/s1600/result.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiT6_uyt3aT79Dlofd2xVeYFxiQGI3Mbey_hpSYZwk4HNW_OqcK4cXOd5ds9o8qISuXODP5syOWeoBGK3tqlRz3HUNrTcEFYOgPnZ1547fyYTfpqhXopbJiVPQ1a5AdzXu5R_Tz3nJJya3D/s600/result.jpg&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Купить шилд в собранном виде или в виде комплекта деталей можно &lt;a href=&quot;http://mk90.ru/store/ru/shields/408-freeduino-telechat-tv-out-shield.html&quot;&gt;здесь&lt;/a&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Для тех, кто любит почитать оффлайн - про &lt;b&gt;TellyMate&lt;/b&gt; упоминается в книге &lt;a href=&quot;http://goo.gl/syUEC&quot; target=&quot;_blank&quot;&gt;У.&amp;nbsp;Соммера&amp;nbsp;&quot;Программирование&amp;nbsp;микроконтроллерных плат Arduino/Freeduino&quot;.&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br /&gt;Материал опубликован на сайте mk90.blogspot.com под лицензией Creative Commons Share Alike 3.0&lt;/div&gt;</description><link>http://mk90.blogspot.com/2013/06/tv-out-arduino.html</link><author>noreply@blogger.com (id)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhm_pPc9qNKTJ2ENEYtkt0sR2dZMUpAnRMGzMMDi6YVp4kYcpBvDsw98TAQ7vbnDqU3yt23fa5Cjsy_0R5896WeRgkMRo6w4czetKm58p9GKVMRlOCucfdZckAAU-bGzvFSn7p3yZusuF_p/s72-c/schematic.png" height="72" width="72"/><thr:total>3</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8944086625767573647.post-1329997425090781607</guid><pubDate>Tue, 07 May 2013 13:36:00 +0000</pubDate><atom:updated>2013-05-20T18:49:17.616+04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Angelino</category><category domain="http://www.blogger.com/atom/ns#">Arduino Shield</category><category domain="http://www.blogger.com/atom/ns#">ArduinoCompatible</category><category domain="http://www.blogger.com/atom/ns#">DS18B20</category><category domain="http://www.blogger.com/atom/ns#">Ethernet</category><category domain="http://www.blogger.com/atom/ns#">Hardware</category><category domain="http://www.blogger.com/atom/ns#">Kits</category><category domain="http://www.blogger.com/atom/ns#">Software</category><category domain="http://www.blogger.com/atom/ns#">Tutorials</category><category domain="http://www.blogger.com/atom/ns#">Датчики</category><category domain="http://www.blogger.com/atom/ns#">Проекты Arduino</category><category domain="http://www.blogger.com/atom/ns#">Температура</category><category domain="http://www.blogger.com/atom/ns#">Шилд-платы</category><title>Web-термометр</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&quot;Погодная станция своими руками&quot; - вот как можно было бы назвать статью, но я решил пока просто рассказать о том, как соорудить web-термометр, подключить его к домашней LAN &amp;nbsp;и наблюдать показания через браузер ;)&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Для этого нам потребуется Arduino-совместимая плата, поддержка Ethernet и несколько температурных датчиков.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; height=&quot;317&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOadRIdv82Q2cCd3Ja1t_1rgZsh4PLex3NdJfAtbXHqUa5-E1DXo9nZ5kD5nWwjUcLRkCLvFzR0cFcvli8QswmPLlM1_jP-MxxrzjAFD8vdwIzGx6PsFjzcv628FLXGKLdIHk-7Iam0Z7S/s400/freeduinoethercardr1_1.jpg&quot; width=&quot;400&quot; /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;По традиции, я использовал то, что оказалось под руками:&lt;br /&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;Arduino-совместимая&lt;/b&gt; плата: &lt;a href=&quot;http://mk90.ru/store/ru/microcontrollers/200-angelino-r3.html&quot;&gt;Angelino с ATmega328P&lt;/a&gt;. Конечно, начать отлаживаться можно на любой Arduino-совместимой плате, с USB. Но в конечном итоге устройство будет жить где-то в кладовке, где ему уже не потребуется USB. Тоже самое относится и к схеме автоматического выбора питания, и к красивым перемигивающимся светодиодам на пинах RX/TX (их тоже никто не увидит). Памяти процессора ATmega328P как раз хватит и для управления Ethernet, и для считывания информации с датчиков;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;В качестве &lt;b&gt;Ethernet-контроллера&lt;/b&gt; -&amp;nbsp;&lt;a href=&quot;http://mk90.ru/store/ru/shields/375-freeduino-ethercard-r1.html&quot;&gt;Freeduino EtherCard R1&lt;/a&gt;. Если нет необходимости в SD и скорости в 100Мб, вполне подойдет. Стоит&amp;nbsp;он дешевле классического Ethernet+SD шилда, а поддержку SD-карт при необходимости можно добавить с помощью &lt;a href=&quot;http://mk90.ru/store/ru/shields/344-microsd-shield.html&quot;&gt;microSD shield&lt;/a&gt;;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;Датчики температуры -&lt;/b&gt;&amp;nbsp;цифровые&amp;nbsp;&lt;a href=&quot;http://mk90.ru/store/ru/sensors/43-datchik-temperatury-ds18b20.html&quot;&gt;DS18B20&lt;/a&gt;. Работать с ними удобно, все датчики имеют уникальный идентификатор. Могут висеть на одном проводке, поэтому сколько их там будет - один, два или десять, можно практически не задумываться.&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Сразу же хочу еще раз повторить - конкретные наборы деталей я выбирал из того, что оказалось под руками. И мало того, что существует масса Arduino-совместимых плат и Ethernet-шилдов от других производителей, но особо упорные все детали могут приобрести по-отдельности и самостоятельно собрать в единое устройство - в основном, благодаря тому, что контроллер Ethernet &lt;a href=&quot;http://mk90.ru/store/ru/mikroshemy/335-enc28j60-i-sp.html&quot;&gt;ENC28J60&lt;/a&gt; выпускается в DIP-корпусе.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Как выглядит процесс прототипизации на базе Arduino? Примерно так:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Сначала набросаем схему.&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSz146UCVdo2w67jS4I1faLOq3K6rPbeOgb1zC4uMv-vF_cryHt-XAb5lzs_-uGuDwhC4eqp0HGmoNKCLz_EkemTYIICColMyNwebJEn_rcbxCut9OyZS56Blj9ZMv3MIMRM9GSpngWuf9/s1600/webthermo_schema.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSz146UCVdo2w67jS4I1faLOq3K6rPbeOgb1zC4uMv-vF_cryHt-XAb5lzs_-uGuDwhC4eqp0HGmoNKCLz_EkemTYIICColMyNwebJEn_rcbxCut9OyZS56Blj9ZMv3MIMRM9GSpngWuf9/s600/webthermo_schema.png&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Пока всё просто - Arduino соединен с Ethernet-шилдом, обмен идет по шине &lt;b&gt;SPI&lt;/b&gt;. Выбор устройства (он же - сигнал &lt;b&gt;SS&lt;/b&gt;) для EtherCard находится на пине &lt;b&gt;D10&lt;/b&gt;. Для коммуникации с сетью датчиков DS18B20 используется свободный пин &lt;b&gt;D9&lt;/b&gt;, который в соответствии с требованиями однопроводной шины подтянут к VCC через резистор 4K7. Для питания датчиков отказываемся он паразитного режима, чтобы не усложнять себе отладку.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Настало время набросать первый скетч, в основном для проверки работы нашей схемы. Берем библиотеки &lt;a href=&quot;https://github.com/jcw/ethercard&quot; target=&quot;_blank&quot;&gt;EtherCard&lt;/a&gt;, &lt;a href=&quot;http://www.pjrc.com/teensy/td_libs_OneWire.html&quot; target=&quot;_blank&quot;&gt;OneWire&lt;/a&gt; - распаковываем их в &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;sketchook/libraries&lt;/span&gt;. Если у нас изначально &lt;b&gt;Angelino&lt;/b&gt;, на время экспериментов потребуется &lt;a href=&quot;http://mk90.ru/store/ru/konvertery/303-ftdi-breakout-r1.html&quot;&gt;USB-TTL переходник&lt;/a&gt; (для заливки скетчей и получения отладочной информации через Serial Monitor).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Для начала определимся с сетевыми адресами нашего будущего устройства - нам нужно придумать шестибайтный &lt;a href=&quot;http://ru.wikipedia.org/wiki/MAC-%D0%B0%D0%B4%D1%80%D0%B5%D1%81&quot; target=&quot;_blank&quot;&gt;MAC-адрес&lt;/a&gt;, он&amp;nbsp;должен быть уникален в пределах сети до ближайшего роутера и его можно выбрать практически &quot;наугад&quot;. Если все-таки есть сомнения, попробуйте понаблюдать за адресами с помощью &lt;a href=&quot;http://wireshark.org/&quot; target=&quot;_blank&quot;&gt;Wireshark&lt;/a&gt; - отличный инструмент, чтобы покопаться в сетевых пакетах, бегающих в вашей локалке.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Далее, нам потребуется IP-адрес: на случай, если в сети не окажется сервера &lt;a href=&quot;https://www.google.ru/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;cad=rja&amp;amp;ved=0CCwQFjAA&amp;amp;url=http%3A%2F%2Fru.wikipedia.org%2Fwiki%2FDHCP&amp;amp;ei=6UKTUe6LCe_V4QSWk4C4AQ&amp;amp;usg=AFQjCNG2flt6UzKZgp0GWGuLb9gvUdhZ5Q&amp;amp;sig2=O5-ta_lSKmj44KDHRmjdew&amp;amp;bvm=bv.46471029,d.bGE&quot; target=&quot;_blank&quot;&gt;DHCP&lt;/a&gt;, прописываем статический адрес прямо в скетче. Следите, чтобы он&amp;nbsp;&amp;nbsp;тоже был уникальным и &lt;i&gt;желательно&lt;/i&gt; в одной подсети с целевым компьютером (например, если у компьютера, с которого вы будете подключаться к Arduino, IP = 192.168.0.2 с маской 255.255.255.0, можно выбрать для Arduino 192.168.0.3 или 192.168.0.222). Если же Arduino получит динамический IP-адрес, потребуется каким-то образом его узнать - по логам DHCP-сервера или, что гораздо проще, через Serial Monitor.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Второй момент - это опрос температурного датчика и вывод результатов. По счастью, &lt;a href=&quot;http://www.maxim-ic.com/company/dallas/&quot; target=&quot;_blank&quot;&gt;Dallas Semiconductors&lt;/a&gt; (ныне является подразделением Maxim Integrated Products) снабжает все датчики уникальным ROM-кодом, нам остается только последовательно получить все их адреса на шине, а затем вывести полученные значения в тексте HTML-странички, которую будет генерировать на лету, при каждом обращении к web-серверу Arduino.&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
Тестовый скетч выглядит так:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre&gt;#include&amp;nbsp;&amp;lt;&lt;span style=&quot;color: #cc6600;&quot;&gt;OneWire&lt;/span&gt;.h&amp;gt;
#include&amp;nbsp;&amp;lt;EtherCard.h&amp;gt;

&lt;span style=&quot;color: #7e7e7e;&quot;&gt;//&amp;nbsp;настройки&amp;nbsp;Ethernet&lt;/span&gt;

#define&amp;nbsp;BUF_SIZE&amp;nbsp;512

&lt;span style=&quot;color: #cc6600;&quot;&gt;byte&lt;/span&gt; mac[] = { 0x00, 0x04, 0xA3, 0x21, 0xCA, 0x38 }; &lt;span style=&quot;color: #7e7e7e;&quot;&gt;// MAC-адрес&lt;/span&gt;

&lt;span style=&quot;color: #cc6600;&quot;&gt;byte&lt;/span&gt; fixed = &lt;span style=&quot;color: #cc6600;&quot;&gt;false&lt;/span&gt;; &lt;span style=&quot;color: #7e7e7e;&quot;&gt;// =false: пробовать получить адрес по DHCP, &lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: #7e7e7e;&quot;&gt;//         в случае неудачи использовать статический; &lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: #7e7e7e;&quot;&gt;// =true:  сразу использовать статический&lt;/span&gt;

uint8_t&amp;nbsp;ip[]&amp;nbsp;=&amp;nbsp;{&amp;nbsp;169,&amp;nbsp;254,&amp;nbsp;8,&amp;nbsp;200&amp;nbsp;};&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #7e7e7e;&quot;&gt;// Статический IP-адрес&lt;/span&gt;
uint8_t&amp;nbsp;subnet[]&amp;nbsp;=&amp;nbsp;{&amp;nbsp;255,&amp;nbsp;255,&amp;nbsp;0,&amp;nbsp;0&amp;nbsp;};&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #7e7e7e;&quot;&gt;// Маска подсети&lt;/span&gt;
uint8_t&amp;nbsp;gateway[]&amp;nbsp;=&amp;nbsp;{&amp;nbsp;192,&amp;nbsp;168,&amp;nbsp;1,&amp;nbsp;20&amp;nbsp;};&amp;nbsp;&lt;span style=&quot;color: #7e7e7e;&quot;&gt;// Адрес шлюза &lt;/span&gt;
uint8_t&amp;nbsp;dns[]&amp;nbsp;=&amp;nbsp;{&amp;nbsp;192,&amp;nbsp;168,&amp;nbsp;1,&amp;nbsp;20&amp;nbsp;};&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #7e7e7e;&quot;&gt;// Адрес DNS-сервера (необязателен)&lt;/span&gt;

&lt;span style=&quot;color: #cc6600;&quot;&gt;byte&lt;/span&gt; &lt;span style=&quot;color: #cc6600;&quot;&gt;Ethernet&lt;/span&gt;::buffer[BUF_SIZE];
&lt;span style=&quot;color: #cc6600;&quot;&gt;static&lt;/span&gt; BufferFiller bfill; 

&lt;span style=&quot;color: #7e7e7e;&quot;&gt;//&amp;nbsp;настройки&amp;nbsp;OneWire&lt;/span&gt;

#define&amp;nbsp;DS18B20PIN&amp;nbsp;&amp;nbsp;9
&lt;span style=&quot;color: #cc6600;&quot;&gt;OneWire&lt;/span&gt; ds(DS18B20PIN);

&lt;span style=&quot;color: #cc6600;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;setup&lt;/b&gt;&lt;/span&gt;(&lt;span style=&quot;color: #cc6600;&quot;&gt;void&lt;/span&gt;)
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;begin&lt;/span&gt;(57600);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;delay&lt;/span&gt;(2000);

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #7e7e7e;&quot;&gt;// Проверяем, что контроллер Ethernet доступен для работы&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;println&lt;/span&gt;(&lt;span style=&quot;color: #006699;&quot;&gt;&quot;Initialising the Ethernet controller&quot;&lt;/span&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;if&lt;/span&gt; (ether.&lt;span style=&quot;color: #cc6600;&quot;&gt;begin&lt;/span&gt;(sizeof &lt;span style=&quot;color: #cc6600;&quot;&gt;Ethernet&lt;/span&gt;::buffer, mac, 10) == 0) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;println&lt;/span&gt;( &lt;span style=&quot;color: #006699;&quot;&gt;&quot;Ethernet controller NOT initialised&quot;&lt;/span&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;while&lt;/span&gt; (&lt;span style=&quot;color: #cc6600;&quot;&gt;true&lt;/span&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #7e7e7e;&quot;&gt;// Пытаемся получить адрес динамически &lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;println&lt;/span&gt;(&lt;span style=&quot;color: #006699;&quot;&gt;&quot;Attempting to get an IP address using DHCP&quot;&lt;/span&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;if&lt;/span&gt; (ether.dhcpSetup()) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ether.printIp(&lt;span style=&quot;color: #006699;&quot;&gt;&quot;Got an IP address using DHCP: &quot;&lt;/span&gt;, ether.myip);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;else&lt;/span&gt; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #7e7e7e;&quot;&gt;// Если DHCP не доступен, используем статический ip-адрес&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ether.staticSetup(ip,&amp;nbsp;gateway,&amp;nbsp;dns);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ether.printIp(&lt;span style=&quot;color: #006699;&quot;&gt;&quot;DHCP FAILED, using fixed address: &quot;&lt;/span&gt;, ether.myip);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fixed&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;true&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}

&lt;span style=&quot;color: #cc6600;&quot;&gt;char&lt;/span&gt; okHeader[] PROGMEM =
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #006699;&quot;&gt;&quot;HTTP/1.0 200 OK\r\n&quot;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #006699;&quot;&gt;&quot;Content-Type: text/html\r\n&quot;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #006699;&quot;&gt;&quot;Pragma: no-cache\r\n&quot;&lt;/span&gt;
;

&lt;span style=&quot;color: #cc6600;&quot;&gt;char&lt;/span&gt; authorLink[] PROGMEM =
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #006699;&quot;&gt;&quot;&amp;lt;/pre&amp;gt;&amp;lt;hr&amp;gt;Read about me &amp;lt;a href=\&quot;http://mk90.blogspot.com\&quot; target=\&quot;_blank\&quot;&amp;gt;here&amp;lt;/a&amp;gt;&quot;&lt;/span&gt;
;

&lt;span style=&quot;color: #cc6600;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #cc6600;&quot;&gt;void&lt;/span&gt; homePage (BufferFiller&amp;amp; buf) {
&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;buf.emit_p(PSTR(&lt;span style=&quot;color: #006699;&quot;&gt;&quot;$F\r\n&quot;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #006699;&quot;&gt;&quot;&amp;lt;title&amp;gt;Arduino web-thermometr&amp;lt;/title&amp;gt;&quot;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #006699;&quot;&gt;&quot;&amp;lt;h2&amp;gt;DS18B20 Network:&amp;lt;/h2&amp;gt;&quot;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #006699;&quot;&gt;&quot;&amp;lt;pre&amp;gt;&quot;&lt;/span&gt;), okHeader);
&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;byte&lt;/span&gt; counter = 0; 
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;byte&lt;/span&gt; addr[8]; 
&amp;nbsp;&amp;nbsp;ds.&lt;span style=&quot;color: #cc6600;&quot;&gt;reset_search&lt;/span&gt;();
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;delay&lt;/span&gt;(250);
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;while&lt;/span&gt; (ds.&lt;span style=&quot;color: #cc6600;&quot;&gt;search&lt;/span&gt;(addr)) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;buf.emit_p(PSTR(&lt;span style=&quot;color: #006699;&quot;&gt;&quot;$D: &quot;&lt;/span&gt;),++counter);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;for&lt;/span&gt; (&lt;span style=&quot;color: #cc6600;&quot;&gt;byte&lt;/span&gt; i=0; i&amp;lt;8; i++) {  &lt;span style=&quot;color: #7e7e7e;&quot;&gt;// считываем и выводим 9-байтный код&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;buf.emit_p(PSTR(&lt;span style=&quot;color: #006699;&quot;&gt;&quot;$H &quot;&lt;/span&gt;), addr[i]);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;if&lt;/span&gt; ( &lt;span style=&quot;color: #cc6600;&quot;&gt;OneWire&lt;/span&gt;::&lt;span style=&quot;color: #cc6600;&quot;&gt;crc8&lt;/span&gt;(addr, 7) != addr[7]) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;buf.emit_p(PSTR(&lt;span style=&quot;color: #006699;&quot;&gt;&quot;- CRC is not valid!&quot;&lt;/span&gt;));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #cc6600;&quot;&gt;if&lt;/span&gt; (addr[0] != 0x28) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;buf.emit_p(PSTR(&lt;span style=&quot;color: #006699;&quot;&gt;&quot;- is not a DS18B20 family device!&quot;&lt;/span&gt;));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;buf.emit_p(PSTR(&lt;span style=&quot;color: #006699;&quot;&gt;&quot;\n&quot;&lt;/span&gt;));
&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;buf.emit_p(PSTR(&lt;span style=&quot;color: #006699;&quot;&gt;&quot;\nTotal: $D devices.&quot;&lt;/span&gt;), counter);
&amp;nbsp;&amp;nbsp;buf.emit_p(authorLink);
}


&lt;span style=&quot;color: #cc6600;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;loop&lt;/b&gt;&lt;/span&gt;(&lt;span style=&quot;color: #cc6600;&quot;&gt;void&lt;/span&gt;)
{
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;word&lt;/span&gt; len = ether.packetReceive();
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;word&lt;/span&gt; pos = ether.packetLoop(len);
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;if&lt;/span&gt; (pos) { 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bfill&amp;nbsp;=&amp;nbsp;ether.tcpOffset();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;char&lt;/span&gt;* data = (&lt;span style=&quot;color: #cc6600;&quot;&gt;char&lt;/span&gt; *) &lt;span style=&quot;color: #cc6600;&quot;&gt;Ethernet&lt;/span&gt;::buffer + pos;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;println&lt;/span&gt;(data); &lt;span style=&quot;color: #7e7e7e;&quot;&gt;// распечатываем запрос для отладки&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;if&lt;/span&gt; (strncmp(&lt;span style=&quot;color: #006699;&quot;&gt;&quot;GET / &quot;&lt;/span&gt;, data, 6) == 0) 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;homePage(bfill);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;else&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bfill.emit_p(PSTR(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #006699;&quot;&gt;&quot;HTTP/1.0 401 Unauthorized\r\n&quot;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #006699;&quot;&gt;&quot;Content-Type: text/html\r\n&quot;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #006699;&quot;&gt;&quot;\r\n&quot;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #006699;&quot;&gt;&quot;&amp;lt;h1&amp;gt;401 Unauthorized&amp;lt;/h1&amp;gt;&quot;&lt;/span&gt;));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #7e7e7e;&quot;&gt;// отправить ответ клиенту&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ether.httpServerReply(bfill.&lt;span style=&quot;color: #cc6600;&quot;&gt;position&lt;/span&gt;());
&amp;nbsp;&amp;nbsp;}
}

&lt;/pre&gt;
&lt;div&gt;
Скачать скетч &lt;a href=&quot;http://mk90.ru/files/blog/wt/ecard_webthermo_1.zip&quot;&gt;ecard_webthermo_1&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
После направления&amp;nbsp;браузера на http://ip-адрес-arduino&lt;ip- rduino=&quot;&quot;&gt;, мы должны увидеть ROM-номера всех найденных датчиков, например:&lt;/ip-&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj14hD3IBoreO2Ho9A2X9TLpMZAacm1NlfDK8dVuHLHwtqBe727eDYKnJztEAozU2CT7hjbHvx1JPcFFgCGOi70L9Oh4eUWW5AX9k8r8TMXvNJYuCGJ3XmoyQCiozff-sC9x48jST7HNbXD/s1600/webthermo1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj14hD3IBoreO2Ho9A2X9TLpMZAacm1NlfDK8dVuHLHwtqBe727eDYKnJztEAozU2CT7hjbHvx1JPcFFgCGOi70L9Oh4eUWW5AX9k8r8TMXvNJYuCGJ3XmoyQCiozff-sC9x48jST7HNbXD/s1600/webthermo1.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Возможны следующие варианты ошибок:&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;Браузер &quot;долго думает&quot; и в итоге ничего не показывает&lt;/b&gt;. Загляните в вывод Serial Monitor-а, еще раз уточнив правильность набираемого в строке браузера адреса. Проверьте правильность подключения Ethernet Card R1 к сети. Из командной строки это можно &amp;nbsp;сделать командой ping &amp;lt;адрес Arduino&amp;gt;, визуально - по наличию зеленого и помигиванию желтого светодиода на разъеме Ethernet Card R1;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;В окне браузера мы видим, что &lt;b&gt;датчиков не обнаружено&lt;/b&gt;. Увы, &quot;наука о контактах&quot; весьма часто сопровождает инженеров-практиков ;) Проверьте еще раз, что датчик правильно питается (верный признак ошибки - если вы обжигаетесь, прикасаясь к корпусу датчика), его DATA-пин подключен именно к тому пину, который указан в скетче (ну и ничего другого, разумеется, не подключено) и он не соединен по чистой случайности с GND или VCC;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;В окне браузера напротив идентификатора датчика отображается &lt;b&gt;ошибка CRC&lt;/b&gt;. Это разновидность предыдущей ошибки подключения датчика - только ошибка может быть не только в неустойчивом контакте, но и в наводках на кабель. Еще раз проверьте контакты, в крайнем случае замените кабель небольшим кусочком провода - после завершения отладки можете экспериментировать с его длиной сколько угодно, а лучше загляните в &lt;a href=&quot;http://mk90.blogspot.com/2011/04/1-wire.html&quot;&gt;эту статью&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Разобравшись со всеми ошибками, можно продолжить совершенствовать скетч.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Первым делом, надо добавить считывание и вывод значений температуры, путем нехитрых манипуляций, благо они подробно расписаны в документации на DS18B20.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Перед поиском датчиков даем команду &amp;nbsp;&quot;Conversion&quot;- преобразование показаний температуры в цифровой код. Чем точнее выполняется преобразование, тем больше требуется времени, зато команду можно дать сразу всем устройствам на шине. В цикле поиска датчиков заменяем распечатывание их адресов на команду считывания содержимого &quot;Scratchpad&quot; и полученный результат преобразуем в символьную строку для отображения.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Для удобства добавим функции&amp;nbsp;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;setConversionTime&lt;/span&gt; и&amp;nbsp;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;startConversionAll&lt;/span&gt;, а затем перепишем&amp;nbsp;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;homePage&lt;/span&gt; - вместо вывода адреса, пустим его &quot;в дело&quot; - то есть в вычисление температуры.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre&gt;&lt;span style=&quot;color: #7e7e7e;&quot;&gt;//&amp;nbsp;команды&amp;nbsp;DS18B20&lt;/span&gt;

&lt;span style=&quot;color: #cc6600;&quot;&gt;void&lt;/span&gt; setConversionTime(&lt;span style=&quot;color: #cc6600;&quot;&gt;byte&lt;/span&gt; conf) {
&amp;nbsp;&amp;nbsp;ds.&lt;span style=&quot;color: #cc6600;&quot;&gt;reset&lt;/span&gt;();
&amp;nbsp;&amp;nbsp;ds.&lt;span style=&quot;color: #cc6600;&quot;&gt;skip&lt;/span&gt;(); &lt;span style=&quot;color: #7e7e7e;&quot;&gt;// skip ROM&lt;/span&gt;
&amp;nbsp;&amp;nbsp;ds.&lt;span style=&quot;color: #cc6600;&quot;&gt;write&lt;/span&gt;(0x4E); &lt;span style=&quot;color: #7e7e7e;&quot;&gt;// write scratchpad&lt;/span&gt;
&amp;nbsp;&amp;nbsp;ds.&lt;span style=&quot;color: #cc6600;&quot;&gt;write&lt;/span&gt;(0); &lt;span style=&quot;color: #7e7e7e;&quot;&gt;// Th&lt;/span&gt;
&amp;nbsp;&amp;nbsp;ds.&lt;span style=&quot;color: #cc6600;&quot;&gt;write&lt;/span&gt;(0); &lt;span style=&quot;color: #7e7e7e;&quot;&gt;// Tl&lt;/span&gt;
&amp;nbsp;&amp;nbsp;ds.&lt;span style=&quot;color: #cc6600;&quot;&gt;write&lt;/span&gt;(conf); &lt;span style=&quot;color: #7e7e7e;&quot;&gt;// configuration&lt;/span&gt;
}

&lt;span style=&quot;color: #cc6600;&quot;&gt;void&lt;/span&gt; startConversionAll() {
&amp;nbsp;&amp;nbsp;ds.&lt;span style=&quot;color: #cc6600;&quot;&gt;reset&lt;/span&gt;();
&amp;nbsp;&amp;nbsp;ds.&lt;span style=&quot;color: #cc6600;&quot;&gt;skip&lt;/span&gt;(); &lt;span style=&quot;color: #7e7e7e;&quot;&gt;// skip ROM&lt;/span&gt;
&amp;nbsp;&amp;nbsp;ds.&lt;span style=&quot;color: #cc6600;&quot;&gt;write&lt;/span&gt;(0x44,0); &lt;span style=&quot;color: #7e7e7e;&quot;&gt;// start conversion&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;delay&lt;/span&gt;(10);
}

&lt;span style=&quot;color: #cc6600;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #cc6600;&quot;&gt;void&lt;/span&gt; homePage (BufferFiller&amp;amp; buf) {
&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;buf.emit_p(PSTR(&lt;span style=&quot;color: #006699;&quot;&gt;&quot;$F\r\n&quot;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #006699;&quot;&gt;&quot;&amp;lt;title&amp;gt;Arduino web-thermometr&amp;lt;/title&amp;gt;&quot;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #006699;&quot;&gt;&quot;&amp;lt;h2&amp;gt;DS18B20 Network:&amp;lt;/h2&amp;gt;&quot;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #006699;&quot;&gt;&quot;&amp;lt;pre&amp;gt;&quot;&lt;/span&gt;), okHeader);
&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;byte&lt;/span&gt; counter = 0; 
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;byte&lt;/span&gt; addr[8]; 
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;byte&lt;/span&gt; data[12];
&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;setConversionTime(0x7F);&amp;nbsp;&lt;span style=&quot;color: #7e7e7e;&quot;&gt;// установить 9-битное разрешение &lt;/span&gt;
&amp;nbsp;&amp;nbsp;startConversionAll();&amp;nbsp;&lt;span style=&quot;color: #7e7e7e;&quot;&gt;// запустить конвертацию температуры&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;delay&lt;/span&gt;(100); &lt;span style=&quot;color: #7e7e7e;&quot;&gt;// на конвертацию 9-битного значения требуется 93,75 мс&lt;/span&gt;
&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #7e7e7e;&quot;&gt;// ищем устройства и выводим результаты&lt;/span&gt;
&amp;nbsp;&amp;nbsp;ds.&lt;span style=&quot;color: #cc6600;&quot;&gt;reset_search&lt;/span&gt;();
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;delay&lt;/span&gt;(250);
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;while&lt;/span&gt; (ds.&lt;span style=&quot;color: #cc6600;&quot;&gt;search&lt;/span&gt;(addr)) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;buf.emit_p(PSTR(&lt;span style=&quot;color: #006699;&quot;&gt;&quot;$D: &quot;&lt;/span&gt;),++counter);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;if&lt;/span&gt; ( &lt;span style=&quot;color: #cc6600;&quot;&gt;OneWire&lt;/span&gt;::&lt;span style=&quot;color: #cc6600;&quot;&gt;crc8&lt;/span&gt;(addr, 7) != addr[7]) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;buf.emit_p(PSTR(&lt;span style=&quot;color: #006699;&quot;&gt;&quot;- address CRC is not valid!\n&quot;&lt;/span&gt;));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;continue&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #cc6600;&quot;&gt;if&lt;/span&gt; (addr[0] != 0x28) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;buf.emit_p(PSTR(&lt;span style=&quot;color: #006699;&quot;&gt;&quot;- is not a DS18B20 family device!\n&quot;&lt;/span&gt;));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;continue&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ds.&lt;span style=&quot;color: #cc6600;&quot;&gt;reset&lt;/span&gt;();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ds.&lt;span style=&quot;color: #cc6600;&quot;&gt;select&lt;/span&gt;(addr);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ds.&lt;span style=&quot;color: #cc6600;&quot;&gt;write&lt;/span&gt;(0xBE); &lt;span style=&quot;color: #7e7e7e;&quot;&gt;// читать scratchpad&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;for&lt;/span&gt; (&lt;span style=&quot;color: #cc6600;&quot;&gt;byte&lt;/span&gt; k=0; k&amp;lt;9; k++) {  &lt;span style=&quot;color: #7e7e7e;&quot;&gt;// нам потребуется 9 байт&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;data[k]&amp;nbsp;=&amp;nbsp;ds.&lt;span style=&quot;color: #cc6600;&quot;&gt;read&lt;/span&gt;();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;if&lt;/span&gt; ( &lt;span style=&quot;color: #cc6600;&quot;&gt;OneWire&lt;/span&gt;::&lt;span style=&quot;color: #cc6600;&quot;&gt;crc8&lt;/span&gt;( data, 8) != data[8]) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;buf.emit_p(PSTR(&lt;span style=&quot;color: #006699;&quot;&gt;&quot;- value CRC is not valid!\n&quot;&lt;/span&gt;));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;continue&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;buf.emit_p(PSTR(&lt;span style=&quot;color: #006699;&quot;&gt;&quot; $D.$D °C\n&quot;&lt;/span&gt;), *(&lt;span style=&quot;color: #cc6600;&quot;&gt;int&lt;/span&gt; *)data/16, (&lt;span style=&quot;color: #cc6600;&quot;&gt;int&lt;/span&gt;) (&lt;span style=&quot;color: #cc6600;&quot;&gt;abs&lt;/span&gt;(*(&lt;span style=&quot;color: #cc6600;&quot;&gt;int&lt;/span&gt; *)data % 16) * 0.625));
&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;buf.emit_p(PSTR(&lt;span style=&quot;color: #006699;&quot;&gt;&quot;\nTotal: $D devices.&quot;&lt;/span&gt;), counter);
&amp;nbsp;&amp;nbsp;buf.emit_p(authorLink);
}

&lt;/pre&gt;
&lt;div&gt;
Скачать скетч&amp;nbsp;&lt;a href=&quot;http://mk90.ru/files/blog/wt/ecard_webthermo_2.zip&quot;&gt;ecard_webthermo_2&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Ну вот, теперь наш скетч стал вполне рабочим:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBo58fKuj34FEo8ba6AK4t6k1FsfBOIREl1dyMFpEgBUJmaJXTImLr_EycB49Ml80V4bj4In5Zj8jnWj3GfnaVJy5ObTe_bhJhsJLwxWJ-4uL10IGbY0uGmUDnoabclHKaYEhNiDrtHqnS/s1600/webthermo2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBo58fKuj34FEo8ba6AK4t6k1FsfBOIREl1dyMFpEgBUJmaJXTImLr_EycB49Ml80V4bj4In5Zj8jnWj3GfnaVJy5ObTe_bhJhsJLwxWJ-4uL10IGbY0uGmUDnoabclHKaYEhNiDrtHqnS/s1600/webthermo2.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
(полные тексты всех скетчей можно скачать по ссылке в конце статьи)&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Отлично, но что делать, если хочется вместо порядкового номера видеть осмысленные местоположения проведения измерений? Допустим, &quot;гостиная&quot; или &quot;балкон&quot;?..&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Тут, наверное, будет уместным заметить, что из алгоритма поиска на однопроводной шине однозначно вытекает гарантия, что для одного и того же набора датчиков последовательность их нахождения будет всегда одной и той же. Иными словами - если уж вы развесили конкретные датчики по конкретным помещениям, то - при условии, что они все работают - в процессе поиска первым всегда будет найдено одно помещение, вторым - другое, и т.д. Остается жестко прописать названия в скетче, и потом выводить&amp;nbsp;их вместо номера. Например, через объявляемый в памяти программ массив &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;locations&lt;/span&gt;:&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre&gt;&lt;span style=&quot;color: #7e7e7e;&quot;&gt;//&amp;nbsp;локации&lt;/span&gt;

prog_char&amp;nbsp;string_0[]&amp;nbsp;PROGMEM&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #006699;&quot;&gt;&quot;Комната&quot;&lt;/span&gt;;   
prog_char&amp;nbsp;string_1[]&amp;nbsp;PROGMEM&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #006699;&quot;&gt;&quot;Кухня&quot;&lt;/span&gt;;
prog_char&amp;nbsp;string_2[]&amp;nbsp;PROGMEM&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #006699;&quot;&gt;&quot;Балкон&quot;&lt;/span&gt;;

PROGMEM&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #cc6600;&quot;&gt;char&lt;/span&gt; *locations[] = 
{&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;string_0,
&amp;nbsp;&amp;nbsp;string_1,
&amp;nbsp;&amp;nbsp;string_2
};

&lt;/pre&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Директива PROGMEM предписывает компилятору размещать строковые константы в памяти программ, что одновременно обязывает использовать для обращения к ним специальные процедуры. Вот как это выглядит в замененном в &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;homePage&lt;/span&gt; фрагменте, где выводится строка с названием локации:&lt;/div&gt;
&lt;br /&gt;
&lt;pre&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;while&lt;/span&gt; (ds.&lt;span style=&quot;color: #cc6600;&quot;&gt;search&lt;/span&gt;(addr)) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #7e7e7e;&quot;&gt;//buf.emit_p(PSTR(&quot;$D: &quot;),++counter);&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;buf.emit_p(&amp;nbsp;(&lt;span style=&quot;color: #cc6600;&quot;&gt;char&lt;/span&gt;*)pgm_read_word(&amp;amp;(locations[counter++])) );
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;buf.emit_p(PSTR(&lt;span style=&quot;color: #006699;&quot;&gt;&quot;: &quot;&lt;/span&gt;));

&lt;/pre&gt;
&lt;br /&gt;
Результат в окне браузера:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxu8hemI_6kU-AQbiXpVeJhEFTyufAKBPXQQKGOH5x8hBOGSWy5mbZiSe5tog_KkEzm6s92ieVJY5IAf8UNlBWYljM-yYh2S6NvB_3-YCRO7Z6dNjcWyRikYmWLl2u3ESQIrsoxYaC0Zjw/s1600/webthermo3.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxu8hemI_6kU-AQbiXpVeJhEFTyufAKBPXQQKGOH5x8hBOGSWy5mbZiSe5tog_KkEzm6s92ieVJY5IAf8UNlBWYljM-yYh2S6NvB_3-YCRO7Z6dNjcWyRikYmWLl2u3ESQIrsoxYaC0Zjw/s1600/webthermo3.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Кстати - русский язык существует в ArduinoIDE в виде &lt;a href=&quot;http://ru.wikipedia.org/wiki/UTF-8&quot; target=&quot;_blank&quot;&gt;UTF-8&lt;/a&gt;, поэтому для корректного отображения на платформах, для которых эта кодировка &lt;i&gt;не является системной&lt;/i&gt; (например, Windows XP), требуется уточнить ее в &amp;nbsp;HTTP-ответе OK, изменив строки в массиве okHeader следующим образом:&lt;/div&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;color: #cc6600;&quot;&gt;char&lt;/span&gt; okHeader[] PROGMEM =
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #006699;&quot;&gt;&quot;HTTP/1.0 200 OK\r\n&quot;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #006699;&quot;&gt;&quot;Content-Type: text/html; charset=utf-8\r\n&quot;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #006699;&quot;&gt;&quot;Pragma: no-cache\r\n&quot;&lt;/span&gt;
;

&lt;/pre&gt;
&lt;div&gt;
Скачать скетч&amp;nbsp;&lt;a href=&quot;http://mk90.ru/files/blog/wt/ecard_webthermo_3.zip&quot;&gt;ecard_webthermo_3&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Сокрушительно слабое место такого подхода - изъятие, замена или добавление датчика в сеть. Тут же изменяется порядок поиска и надо заново выяснять, как последовательность поиска сопоставлена с названиями локаций. Для этого, а также для изменения имени локации &amp;nbsp;надо перекомпилировать скетч и залить его в Arduino, что не всегда возможно/удобно.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Следовательно, наиболее надежно - запоминать соответствия индентификаторов датчиков и локаций. Хотя можно возложить это на специальную программу и пользоваться ей вместо браузера, но выглядит это как-то неуклюже. Гораздо проще все поручить Arduino, задействовав &lt;b&gt;EEPROM&lt;/b&gt; - энергонезависимую память нашего MCU, которую можно перезаписывать прямо из скетча. Снабдив нашу HTML-страничку ссылками, можно по клику предлагать форму ввода нового имени, которое будет запоминаться в EEPROM. Быть может, &amp;nbsp;на первый взгляд это кажется сложным, но не забывайте - у нас в распоряжении остаются еще свыше 10К свободной памяти программ!&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Для начала определим формат хранения в EEPROM - в нулевой ячейке будем хранить размер списка, а дальше - записи, состоящие из адреса (8 байт) и собственно названия (17 байт). Для удобства доступа определим макросы через &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;#define&lt;/span&gt;:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre&gt;&lt;span style=&quot;color: #7e7e7e;&quot;&gt;//&amp;nbsp;константы&amp;nbsp;для&amp;nbsp;EEPROM&lt;/span&gt;

#define&amp;nbsp;EEFIRSTENTRY&amp;nbsp;&amp;nbsp;1
#define&amp;nbsp;EEADDRLEN&amp;nbsp;&amp;nbsp;8
#define&amp;nbsp;EENAMELEN&amp;nbsp;&amp;nbsp;17

&lt;span style=&quot;color: #7e7e7e;&quot;&gt;//&amp;nbsp;макросы&amp;nbsp;для&amp;nbsp;доступа&amp;nbsp;в&amp;nbsp;EEPROM&lt;/span&gt;

#define&amp;nbsp;LOCADDR(n)&amp;nbsp;(EEFIRSTENTRY+((n)*(EEADDRLEN+EENAMELEN)))
#define&amp;nbsp;LOCNAME(n)&amp;nbsp;(EEFIRSTENTRY+EEADDRLEN+((n)*(EEADDRLEN+EENAMELEN)))

&lt;/pre&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
В самом начале EEPROM вообще ничего не хранит, и скорее всего из нулевого байта мы прочтем первый раз&amp;nbsp;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;0xff&lt;/span&gt;. Это как минимум наводит на мысль, что в &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;setup&lt;/span&gt; нелишне было бы проверить, что этот байт хранит какое-то реальное значение, не &quot;убегающее&quot; за пределы доступного EEPROM, размер которого у ATmega328P равняется 1024 байтам:&lt;/div&gt;
&lt;br /&gt;
&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #7e7e7e;&quot;&gt;// считываем и анализируем EEPROM&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;if&lt;/span&gt; ( ((&lt;span style=&quot;color: #cc6600;&quot;&gt;EEPROM&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;read&lt;/span&gt;(0)+1)*(EEADDRLEN+EENAMELEN)+EEFIRSTENTRY) &amp;gt; E2END) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;EEPROM&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;write&lt;/span&gt;(0,0); &lt;span style=&quot;color: #7e7e7e;&quot;&gt;// инициализируем число записей&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&lt;/pre&gt;
&lt;span style=&quot;text-align: justify;&quot;&gt;Теперь надо добавить новую функцию searchLocationByAddress, которая будет 1) по ROM-идентификатору датчика возвращать порядковый номер&amp;nbsp;найденной записи и 2) если записи не найдено, создавать такую запись и присваивать локации стандартное имя &quot;?&quot;.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;color: #cc6600;&quot;&gt;byte&lt;/span&gt; searchLocationByAddr(&lt;span style=&quot;color: #cc6600;&quot;&gt;byte&lt;/span&gt; *addr) {
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;byte&lt;/span&gt; total = &lt;span style=&quot;color: #cc6600;&quot;&gt;EEPROM&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;read&lt;/span&gt;(0);
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;for&lt;/span&gt; (&lt;span style=&quot;color: #cc6600;&quot;&gt;byte&lt;/span&gt; i=0;i&amp;lt;total;i++) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;byte&lt;/span&gt; equial = 0;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;for&lt;/span&gt; (&lt;span style=&quot;color: #cc6600;&quot;&gt;byte&lt;/span&gt; k=0;k&amp;lt;EEADDRLEN;k++) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;if&lt;/span&gt; (addr[k] == &lt;span style=&quot;color: #cc6600;&quot;&gt;EEPROM&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;read&lt;/span&gt;(LOCADDR(i)+k)) equial++;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;if&lt;/span&gt; (equial == EEADDRLEN) &lt;span style=&quot;color: #cc6600;&quot;&gt;return&lt;/span&gt; i;
&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #7e7e7e;&quot;&gt;// записи не найдено, создаем еще одну - в конце&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;for&lt;/span&gt; (&lt;span style=&quot;color: #cc6600;&quot;&gt;byte&lt;/span&gt; k=0;k&amp;lt;EEADDRLEN;k++) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;EEPROM&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;write&lt;/span&gt;(LOCADDR(total)+k,addr[k]);
&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;EEPROM&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;write&lt;/span&gt;(LOCNAME(total),&lt;span style=&quot;color: #006699;&quot;&gt;&#39;?&#39;&lt;/span&gt;);
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;EEPROM&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;write&lt;/span&gt;(LOCNAME(total)+1,0);
&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;EEPROM&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;write&lt;/span&gt;(0,total+1);
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;return&lt;/span&gt; total;
}

&lt;/pre&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiK24a1h4sx8-V-ZdpwNShTonHIeOy73JtLhoUbLxatxGYHo7Mez2PAhT7tlBHyfzQd6q4DsOfIkI_6QNYYDlVlNr2pbeNtGVSG5KVxJjTJm_A1xop0Lv8f3_FUKreZC1D0nyS7UqiovwFF/s1600/webthermo4_1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiK24a1h4sx8-V-ZdpwNShTonHIeOy73JtLhoUbLxatxGYHo7Mez2PAhT7tlBHyfzQd6q4DsOfIkI_6QNYYDlVlNr2pbeNtGVSG5KVxJjTJm_A1xop0Lv8f3_FUKreZC1D0nyS7UqiovwFF/s1600/webthermo4_1.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;pre&gt;&lt;/pre&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Теперь настало время подумать о дополнительном CGI-скрипте для редактирования названия локации. Пусть он будет называться &quot;e&quot; - для краткости. Добавим в &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;loop&lt;/span&gt; лишний оператор &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;if&lt;/span&gt;, проверяющий URL в запросе:&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;if&lt;/span&gt; (strncmp(&lt;span style=&quot;color: #006699;&quot;&gt;&quot;GET / &quot;&lt;/span&gt;, data, 6) == 0) 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;homePage(bfill);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #cc6600;&quot;&gt;if&lt;/span&gt; (strncmp(&lt;span style=&quot;color: #006699;&quot;&gt;&quot;GET /e&quot;&lt;/span&gt;, data, 6) == 0)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;editPage(data,&amp;nbsp;bfill);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;else&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bfill.emit_p(PSTR(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #006699;&quot;&gt;&quot;HTTP/1.0 401 Unauthorized\r\n&quot;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #006699;&quot;&gt;&quot;Content-Type: text/html\r\n&quot;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #006699;&quot;&gt;&quot;\r\n&quot;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #006699;&quot;&gt;&quot;&amp;lt;h1&amp;gt;401 Unauthorized&amp;lt;/h1&amp;gt;&quot;&lt;/span&gt;));

&lt;/pre&gt;
&lt;div&gt;
Теперь добавим ссылку в вывод на основной странице - в функции &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;homePage&lt;/span&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;counter++;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;byte&lt;/span&gt; idx = searchLocationByAddr(addr); &lt;span style=&quot;color: #7e7e7e;&quot;&gt;// возвращает номер локации в eeprom&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;buf.emit_p(PSTR(&lt;span style=&quot;color: #006699;&quot;&gt;&quot;&amp;lt;a href=\&quot;/e?n=$D\&quot;&amp;gt;$E&amp;lt;/a&amp;gt;: &quot;&lt;/span&gt;), 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;idx,&amp;nbsp;LOCNAME(idx));

&lt;/pre&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Тут надо немного пояснить&amp;nbsp;аргументы&amp;nbsp;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;buf.emit_p&lt;/span&gt;: подобно функциям семейства &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;printf&lt;/span&gt;, она формирует строку по шаблону (первый параметр), подставляя в него все последующие (второй параметр и далее). В шаблоне можно указывать следующие типы данных:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;$D - числовая константа;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;$S - строковая константа;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;$F - строковая константа, расположенная в PROGMEM (т.е в памяти программ);&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;$E - строковая константа, расположенная в EEPROM (что мы и использовали).&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Наконец, сама функция редактирования. Манера ее написания покажется до боли знакома web-программистам: генерация формы или запоминание значения, переданного через GET:&lt;/div&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;color: #cc6600;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #cc6600;&quot;&gt;void&lt;/span&gt; editPage (&lt;span style=&quot;color: #cc6600;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #cc6600;&quot;&gt;char&lt;/span&gt;* data, BufferFiller&amp;amp; buf) {
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;if&lt;/span&gt; (data[6] == &lt;span style=&quot;color: #006699;&quot;&gt;&#39;?&#39;&lt;/span&gt;) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;char&lt;/span&gt; buf2[96];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;if&lt;/span&gt; (EtherCard::findKeyVal(data+6, buf2, sizeof(buf2)-1, &lt;span style=&quot;color: #006699;&quot;&gt;&quot;n&quot;&lt;/span&gt;)) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;byte&lt;/span&gt; n = atoi(buf2);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;if&lt;/span&gt; (!EtherCard::findKeyVal(data+6, buf2, sizeof(buf2)-1, &lt;span style=&quot;color: #006699;&quot;&gt;&quot;s&quot;&lt;/span&gt;)) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #7e7e7e;&quot;&gt;// генерировать форму&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;buf.emit_p(PSTR(&lt;span style=&quot;color: #006699;&quot;&gt;&quot;$F\r\n&quot;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #006699;&quot;&gt;&quot;&amp;lt;h3&amp;gt;Edit location name&amp;lt;/h3&amp;gt;&quot;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #006699;&quot;&gt;&quot;&amp;lt;form&amp;gt;&quot;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #006699;&quot;&gt;&quot;&amp;lt;p&amp;gt;&quot;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #006699;&quot;&gt;&quot;Change name: &amp;lt;input type=text name=b value=&#39;$E&#39; size=8&amp;gt;&quot;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #006699;&quot;&gt;&quot;&amp;lt;input type=hidden name=n value=$D&amp;gt;&quot;&lt;/span&gt;         
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #006699;&quot;&gt;&quot;&amp;lt;input type=submit name=s value=set&amp;gt;&quot;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #006699;&quot;&gt;&quot;&amp;lt;/p&amp;gt;&quot;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #006699;&quot;&gt;&quot;&amp;lt;/form&amp;gt;&quot;&lt;/span&gt;), okHeader, LOCNAME(n), n); 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;return&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;else&lt;/span&gt; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #7e7e7e;&quot;&gt;// cохранить новое название локации&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;byte&lt;/span&gt; len = EtherCard::findKeyVal(data+6, buf2, sizeof(buf2)-1, &lt;span style=&quot;color: #006699;&quot;&gt;&quot;b&quot;&lt;/span&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;if&lt;/span&gt; (len) { 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;EtherCard::urlDecode(buf2);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;for&lt;/span&gt; (&lt;span style=&quot;color: #cc6600;&quot;&gt;byte&lt;/span&gt; i=0;i&amp;lt;(strlen(buf2)+1);i++) 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;EEPROM&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;write&lt;/span&gt;(LOCNAME(n)+i,buf2[i]);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;buf.emit_p(PSTR(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #006699;&quot;&gt;&quot;HTTP/1.0 302 found\r\n&quot;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #006699;&quot;&gt;&quot;Location: /\r\n&quot;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #006699;&quot;&gt;&quot;\r\n&quot;&lt;/span&gt;));  
}

&lt;/pre&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Другая вспомогательная функция &amp;nbsp;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;EtherCard::findKeyVal&lt;/span&gt; служит для поиска параметра в строке GET. Она анализирует цепочку символов запроса в поисках названия параметра, а затем копирует в буфер значение после знака равенства. Функция &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;EtherCard::urlDecode&lt;/span&gt; приводит кодированные для передачи через URL символы типа %20 к нормальному виду.&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-B3rGBZaidgGHNawyCmSOXsAppvic4wteO1-DY1nvyjTehCoLoy-iKW4Sxmb3tpSZ6HTjOzoaunZlH2gTtTIrGlaAgoCiPNndYEPn0yfdqCTPCeXUbwAxCV8iyuNHpmIoPYVGYP-xAll5/s1600/webthermo4_2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-B3rGBZaidgGHNawyCmSOXsAppvic4wteO1-DY1nvyjTehCoLoy-iKW4Sxmb3tpSZ6HTjOzoaunZlH2gTtTIrGlaAgoCiPNndYEPn0yfdqCTPCeXUbwAxCV8iyuNHpmIoPYVGYP-xAll5/s1600/webthermo4_2.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
Скачать скетч&amp;nbsp;&lt;a href=&quot;http://mk90.ru/files/blog/wt/ecard_webthermo_4.zip&quot;&gt;ecard_webthermo_4&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Скачать код примеров всех четырех скетчей одним архивом, вместе с библиотеками можно &lt;a href=&quot;http://mk90.ru/files/blog/wt/ecard_webthermo_all.zip&quot;&gt;здесь&lt;/a&gt;. Разумеется, это всего лишь учебный пример, который перед использованием в реальной жизни (а уж тем более, на для извлечения коммерческой выгоды), должен быть доработан. Надо не только исправить ошибки (которые всегда есть), но и обратить внимание на ряд моментов:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Внимательнее манипулировать EEPROM - например, добавить проверки при исчерпании свободного места и подумать о возможности удаления из таблицы названий локаций неиспользуемых записей;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Возможно, стоит отказаться от хранения числа записей в нулевой ячейке EEPROM - производитель предупреждает, что в случае сбоев она пострадает первой;&amp;nbsp;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Для любителей русских названий может вызвать, например, удивление тот факт, что при максимальной длине в 17 символов, ввести можно только 8. Повторно обращаю внимание на использование UTF-8 - каждая русская буква в этом наборе занимает 2 байта, поэтому либо пишите по-английски, либо рассмотрите переход на однобайтовое кодирование - например, с помощью KOI8-R или CP1251;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Ограничением библиотеки EtherCard является необходимость умещать страничку в одном пакете tcp. Если размер html-кода будет расти, это может вызвать проблемы. Поэтому, старайтесь соблюдать минимализм в записи HTML - даже если это не соответствует стандартам. Разумеется, можно доработать код библиотеки ;)&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Что можно было бы еще сделать? Можно добавить новые типы датчиков. Можно добавить внешнюю flash-память (например, подключаемую по i2c) и читать оттуда предварительно записанные favicon или css-стили, чтобы украсить страничку. Можно добавить базовую авторизацию, чтобы кто попало не имел доступ к информации или не мог редактировать названия локаций.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Будем считать это домашним заданием для тех, кто хочет довести свою конструкцию до совершенства - которое, конечно же, недостижимо ;)&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Кстати, уже почти после написания статьи наткнулся на замечательный блог &lt;a href=&quot;http://lucadentella.it/&quot; target=&quot;_blank&quot;&gt;lucadentella.it&lt;/a&gt;, который ведет Luca Dentella, разбирая разные приемы работы с EtherCard под тегом &lt;a href=&quot;http://www.lucadentella.it/en/category/enc28j60-arduino/&quot; target=&quot;_blank&quot;&gt;ENC28J60&lt;/a&gt;.&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br /&gt;Материал опубликован на сайте mk90.blogspot.com под лицензией Creative Commons Share Alike 3.0&lt;/div&gt;</description><link>http://mk90.blogspot.com/2013/05/web.html</link><author>noreply@blogger.com (id)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOadRIdv82Q2cCd3Ja1t_1rgZsh4PLex3NdJfAtbXHqUa5-E1DXo9nZ5kD5nWwjUcLRkCLvFzR0cFcvli8QswmPLlM1_jP-MxxrzjAFD8vdwIzGx6PsFjzcv628FLXGKLdIHk-7Iam0Z7S/s72-c/freeduinoethercardr1_1.jpg" height="72" width="72"/><thr:total>9</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8944086625767573647.post-7494480910031842138</guid><pubDate>Wed, 17 Apr 2013 13:06:00 +0000</pubDate><atom:updated>2013-05-14T16:14:00.669+04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ArduinoIDE</category><category domain="http://www.blogger.com/atom/ns#">Software</category><category domain="http://www.blogger.com/atom/ns#">Новости</category><title>ArduinoIDE 1.0.4</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Новая ArduinoIDE 1.0.4 вышла 11.03.2013, и почти весь ее смысл - исправление ошибок.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Лично мне видится три главных момента:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Добавлена новая библиотека &lt;b&gt;GSM&lt;/b&gt;, для работы с &lt;a href=&quot;http://arduino.cc/en/Main/ArduinoGSMShield&quot; target=&quot;_blank&quot;&gt;Arduino GSM Shield&lt;/a&gt;. С ее помощью можно не только передавать данные с использованием конструкции Client/Server по аналогии с Ethernet, но и отправлять/получать SMS-сообщения, а также голосовые вызовы;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Все &lt;b&gt;драйверы собраны в один пакет&lt;/b&gt;, с цифровой подписью для Windows 8. По идее, это упрощает процесс установки, избавляя вас от лишних вопросов и подозрений со стороны операционной системы;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Официально исправлены накопившиеся (видимо, за все время) ошибки в бутлоадере Mega2560. Ошибки это были знаменитые, ко многим давно существовали патчи - взять, например, ошибку с незагрузкой скетча, в котором встречается комбинация &quot;!!!&quot;. Разумеется, аналогичные изменения войдут и в бутлоадер, прошитый во &lt;a href=&quot;http://mk90.ru/store/ru/microcontrollers/50-freeduino-mega-2560.html&quot;&gt;Freeduino Mega2560&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Впереди - слияние ветки 1.5.x и 1.0.x, но когда именно оно произойдет, пока сказать трудно...&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br /&gt;Материал опубликован на сайте mk90.blogspot.com под лицензией Creative Commons Share Alike 3.0&lt;/div&gt;</description><link>http://mk90.blogspot.com/2013/04/arduinoide-104.html</link><author>noreply@blogger.com (id)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8944086625767573647.post-3724912870583702636</guid><pubDate>Wed, 03 Apr 2013 17:40:00 +0000</pubDate><atom:updated>2020-09-20T21:12:25.613+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Arduino</category><category domain="http://www.blogger.com/atom/ns#">Hardware</category><category domain="http://www.blogger.com/atom/ns#">Датчики</category><category domain="http://www.blogger.com/atom/ns#">Температура</category><title>Температура и влажность (2)</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
У датчика измерения температуры и влажности DHT-11 (о его возможностях и стыковке с Arduino я подробно писал в &lt;a href=&quot;http://mk90.blogspot.ru/2012/12/blog-post.html&quot;&gt;предыдущей статье&lt;/a&gt;) есть &quot;старший брат&quot;, сенсор &lt;b&gt;DHT-22&lt;/b&gt; (часто под этим названием фигурирует &lt;b&gt;AM2302&lt;/b&gt;, производимый фирмой &lt;a href=&quot;http://aosong.com/en/home/index.asp&quot; target=&quot;_blank&quot;&gt;AOSONG&lt;/a&gt;):&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2d3SOYX8sN69DCVp07YFJCHQEgUGt3t3dU2b4c6U8XCMWYT47FMSXt1JPqMQSUH-xs5FGyfRtm0FoM6puUCc4zIWhwihLKf5Yz4po0CyEEmC4HkoFVcx98a9LLb8jjzoPF-UIGOV0y9gk/s1600/dht22.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2d3SOYX8sN69DCVp07YFJCHQEgUGt3t3dU2b4c6U8XCMWYT47FMSXt1JPqMQSUH-xs5FGyfRtm0FoM6puUCc4zIWhwihLKf5Yz4po0CyEEmC4HkoFVcx98a9LLb8jjzoPF-UIGOV0y9gk/s320/dht22.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Несколько проигрывая DHT11 по габаритам, этот датчик имеет более широкий диапазон измеряемых величин и обладает б&lt;i&gt;о&lt;/i&gt;льшей точностью. Ранние версии даташитов объясняют, что измерением температуры занимается встроенный &lt;a href=&quot;http://mk90.ru/store/ru/sensors/43-datchik-temperatury-ds18b20.html&quot; target=&quot;_blank&quot;&gt;DS18B20&lt;/a&gt;, однако в последних вариантах его заменили на термистор.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Сравнительная таблица из &lt;a href=&quot;http://mk90.blogspot.ru/2012/12/blog-post.html&quot;&gt;предыдущей статьи&lt;/a&gt; должна быть дополнена так:&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;table border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;th&gt;Показатель&lt;/th&gt;&lt;th&gt;DS18B20&lt;/th&gt;&lt;th&gt;DHT11&lt;/th&gt;&lt;th&gt;DHT22&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Допустимый диапазон t,°C&lt;/td&gt;&lt;td&gt;-55..+125&lt;/td&gt;&lt;td&gt;0..+50&lt;/td&gt;&lt;td&gt;-40..+80&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Погрешность измерения t, min&lt;/td&gt;&lt;td&gt;±0.5°C@-10..+85°C&lt;/td&gt;&lt;td&gt;±2°C@0..+50°C&lt;/td&gt;&lt;td&gt;±0.5°C@+15..+55°C&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Погрешность измерения t, max&lt;/td&gt;&lt;td&gt;±2°C&lt;/td&gt;&lt;td&gt;±2°C&lt;/td&gt;&lt;td&gt;±1°C&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Разрешение шкалы t,°C&lt;/td&gt;&lt;td&gt;0.5/0.25/0.125,/0.0625&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Допустимый диапазон RH, %&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;20..95&lt;/td&gt;&lt;td&gt;0..99.9&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Погрешность измерения RH, min&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;±4% +25°C&lt;/td&gt;&lt;td&gt;±2% +25°C&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Погрешность измерения RH, max&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;±5%&lt;/td&gt;&lt;td&gt;±4%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Разрешение шкалы RH, %&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Точность измерения относительной влажности возрастает для значений меньших 12% и больших 90%, а также имеет некоторый гистерезис. Считывание очередного значения возможно не чаще, чем &lt;b&gt;один раз в 2 секунды&lt;/b&gt;. Более подробно можно прочесть в документации: &lt;a href=&quot;http://mk90.ru/files/datasheets/AM2302.pdf&quot;&gt;AM2302.pdf&lt;/a&gt;.&lt;!--12--&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;Подключение DHT22 к Arduino выглядит аналогично DHT11.&lt;/b&gt;&amp;nbsp;Пины имеют идентичное назначение, схема подключения не отличается, да и протокол общения с датчиком, по сути, тот же.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipPKahxRPDUBnr1BrH2y61dbbC2Vi6SfDuwZ6GXMPzRw9gH3nFSsoxlYgOVxz_TZCdoQ1ftVfmyIKC9hcG2fmjvrYncIWgVu1sgzfki77IJwruUpgzOv6yBiVDf_zXLehlHnNHDeSgsGme/s1600/dht22-pins.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipPKahxRPDUBnr1BrH2y61dbbC2Vi6SfDuwZ6GXMPzRw9gH3nFSsoxlYgOVxz_TZCdoQ1ftVfmyIKC9hcG2fmjvrYncIWgVu1sgzfki77IJwruUpgzOv6yBiVDf_zXLehlHnNHDeSgsGme/s400/dht22-pins.jpg&quot; width=&quot;245&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEis8oKfTlBqmp71S2hITS51oVhYK17i6s-U_523fv4CgHT1s1_F4il58EGkT77M8v3czexXJ6jDTR-dBobXGeMFbkNtqe7uSyYg4h0XnYH38SliE6ZaEtt3bE_yHZYOe_I7j4x4Uw8xs5SS/s1600/dht22-schema.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEis8oKfTlBqmp71S2hITS51oVhYK17i6s-U_523fv4CgHT1s1_F4il58EGkT77M8v3czexXJ6jDTR-dBobXGeMFbkNtqe7uSyYg4h0XnYH38SliE6ZaEtt3bE_yHZYOe_I7j4x4Uw8xs5SS/s1600/dht22-schema.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
Отличия начинаются в трактовке считываемых значений. Мы по-прежнему получаем от сенсора по&amp;nbsp;40 бит:&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;ol&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Старшая часть значения влажности;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Младшая часть значения влажности;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Старшая часть значения температуры;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Младшая часть значения температуры;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Контрольная сумма.&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div&gt;
Значение относительной влажности и температуры выдаются в десятых долях, например: если прочитано 010Dh, то эту цифру надо перевести в десятичный формат (269), а затем разделить на 10 - получится 26,9. И, кстати, отрицательные значения температуры кодируются единицей в старшем разряде считываемого 16-битного значения: &lt;b&gt;1000 0000 0110 0101&lt;/b&gt; означает &lt;b&gt;-10,1&amp;nbsp;&lt;/b&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&lt;b&gt;°C&lt;/b&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgay7LoQ2wUX78mNB9wnxL2QN1v0ew1LEPbUG1J_cYtYqIoan5BzTa4FkCMH53ipGWHhSZJZOoS-Pgx_ecWSI7B1x4eWzbs4gAOvQTXfFdN5yWH_ThRHeezJuYWUlJS8qqqYrbLgiWrrqL7/s1600/dht22-maketka.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgay7LoQ2wUX78mNB9wnxL2QN1v0ew1LEPbUG1J_cYtYqIoan5BzTa4FkCMH53ipGWHhSZJZOoS-Pgx_ecWSI7B1x4eWzbs4gAOvQTXfFdN5yWH_ThRHeezJuYWUlJS8qqqYrbLgiWrrqL7/s600/dht22-maketka.jpg&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Существует несколько вариантов библиотек для Arduino (и вы можете написать свой собственный!), вот наиболее известные:&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;a href=&quot;https://github.com/ringerc/Arduino-DHT22&quot;&gt;https://github.com/ringerc/Arduino-DHT22&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;a href=&quot;https://github.com/adafruit/DHT-sensor-library&quot;&gt;https://github.com/adafruit/DHT-sensor-library&lt;/a&gt;&amp;nbsp;(работает на Arduino с тактовой частотой, отличной от 16 МГц)&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;a href=&quot;http://playground.arduino.cc/Main/DHTLib&quot;&gt;http://playground.arduino.cc/Main/DHTLib&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
В примере ниже я использую именно последний вариант, он простой и универсальный (работает не только с DHT22, но и с DHT11). &amp;nbsp;&lt;a href=&quot;http://mk90.ru/files/source/arduino-dht.zip&quot;&gt;Архив&lt;/a&gt; с библиотекой надо распаковать в каталог &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;sketchbook/libraries&lt;/span&gt; и перед загрузкой скетча в Arduino не забыть исправить значение константы &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;DHT22_PIN&lt;/span&gt; на номер пина, к которому подключен вывод DATA датчика:&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;#include&amp;nbsp;&amp;lt;dht.h&amp;gt;

dht&amp;nbsp;DHT;

#define&amp;nbsp;DHT22_PIN&amp;nbsp;6

&lt;span style=&quot;color: #cc6600;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;setup&lt;/b&gt;&lt;/span&gt;()
{
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;begin&lt;/span&gt;(115200);
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;println&lt;/span&gt;(&lt;span style=&quot;color: #006699;&quot;&gt;&quot;DHT TEST PROGRAM &quot;&lt;/span&gt;);
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #006699;&quot;&gt;&quot;LIBRARY VERSION: &quot;&lt;/span&gt;);
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;println&lt;/span&gt;(DHT_LIB_VERSION);
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;println&lt;/span&gt;();
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;println&lt;/span&gt;(&lt;span style=&quot;color: #006699;&quot;&gt;&quot;Type,\tstatus,\tHumidity (%),\tTemperature (C)&quot;&lt;/span&gt;);
}

&lt;span style=&quot;color: #cc6600;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;loop&lt;/b&gt;&lt;/span&gt;()
{
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #7e7e7e;&quot;&gt;// READ DATA&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #006699;&quot;&gt;&quot;DHT22, \t&quot;&lt;/span&gt;);
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;int&lt;/span&gt; chk = DHT.read22(DHT22_PIN);
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;switch&lt;/span&gt; (chk)
&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;case&lt;/span&gt; DHTLIB_OK:  
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #006699;&quot;&gt;&quot;OK,\t&quot;&lt;/span&gt;); 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;break&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;case&lt;/span&gt; DHTLIB_ERROR_CHECKSUM: 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #006699;&quot;&gt;&quot;Checksum error,\t&quot;&lt;/span&gt;); 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;break&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;case&lt;/span&gt; DHTLIB_ERROR_TIMEOUT: 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #006699;&quot;&gt;&quot;Time out error,\t&quot;&lt;/span&gt;); 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;break&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;default&lt;/span&gt;: 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #006699;&quot;&gt;&quot;Unknown error,\t&quot;&lt;/span&gt;); 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;break&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #7e7e7e;&quot;&gt;// DISPLAY DATA&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;print&lt;/span&gt;(DHT.humidity, 1);
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #006699;&quot;&gt;&quot;,\t\t&quot;&lt;/span&gt;);
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;println&lt;/span&gt;(DHT.temperature, 1);

&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;delay&lt;/span&gt;(2000);
}
&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
После старта программы надо вызвать окно Serial Monitor-а (Ctrl+Shift+M):&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiI85zLVMc_C92yNINIqVWBUfa_Fmr4qWx2eBND-lUUccKdA_c4RqqnKmNFEM2v3mRXdSL2nA7FKMuvwfk8vqB4sffUB9Qmx0K-ZfkFA-hKmgTzr1vNTd8Em1Rri-DV3MpU5UzhMv4Z8fVA/s1600/serialmon.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiI85zLVMc_C92yNINIqVWBUfa_Fmr4qWx2eBND-lUUccKdA_c4RqqnKmNFEM2v3mRXdSL2nA7FKMuvwfk8vqB4sffUB9Qmx0K-ZfkFA-hKmgTzr1vNTd8Em1Rri-DV3MpU5UzhMv4Z8fVA/s1600/serialmon.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Датчик можно применять в системах вентиляции и кондиционирования, осушителях, климатических камерах, автомобильных поделках, даталоггерах, регуляторах влажности, метеорологических станциях и тому подобном - тут уж как подскажет ваша фантазия.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Диапазон питания датчика составляет +3.3...+5.5В, поэтому его можно с успехом использовать с трехвольтовыми Arduino и конструировать довольно компактные и малопотребляющие конструкции - например, при помощи &lt;a href=&quot;http://mk90.ru/store/ru/microcontrollers/320-freeduino-pro-mini.html&quot;&gt;Freeduino Pro Mini&lt;/a&gt;. &amp;nbsp;Рекомендуемая длина кабеля, соединяющего DHT22 с MCU при питании от 3.3В&amp;nbsp;&lt;i&gt;не должна превышать 100 см&lt;/i&gt;.&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
Ссылки по теме:&lt;br /&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://playground.arduino.cc/Main/DHTLib&quot; target=&quot;_blank&quot;&gt;библиотека для Arduino на playground;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://mk90.ru/files/source/arduino-dht.zip&quot;&gt;библиотека+примеры из статьи&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br /&gt;Материал опубликован на сайте mk90.blogspot.com под лицензией Creative Commons Share Alike 3.0&lt;/div&gt;</description><link>http://mk90.blogspot.com/2013/04/2.html</link><author>noreply@blogger.com (id)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2d3SOYX8sN69DCVp07YFJCHQEgUGt3t3dU2b4c6U8XCMWYT47FMSXt1JPqMQSUH-xs5FGyfRtm0FoM6puUCc4zIWhwihLKf5Yz4po0CyEEmC4HkoFVcx98a9LLb8jjzoPF-UIGOV0y9gk/s72-c/dht22.jpg" height="72" width="72"/><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8944086625767573647.post-6085271409381942244</guid><pubDate>Fri, 01 Feb 2013 16:27:00 +0000</pubDate><atom:updated>2013-02-05T17:56:41.529+04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Arduino Shield</category><category domain="http://www.blogger.com/atom/ns#">Hardware</category><category domain="http://www.blogger.com/atom/ns#">Software</category><category domain="http://www.blogger.com/atom/ns#">Шилд-платы</category><title>Ethernet Shield своими руками</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Классический &lt;b&gt;Ethernet Shield&lt;/b&gt; от Arduino на микросхеме Wiznet &lt;b&gt;W5100&lt;/b&gt; появился одним из первых, перенес уже как минимум три существенных ревизии, а также интегрирован в плату Arduino Ethernet.&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRkLGUEToMLY0RPuunYu0JWpqJwLlNrfQ8ZuUzpMdcwsEBxkt6fPwZiFRUaGjdwIgrYW_Uzbzj4gYwErjEofDl2QF9upZmVL_q-Rcpmuggkvnn3Kn5rBtpEq3vRyjc_yrqsQM58wWH1TOt/s1600/arduino_ethernet.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRkLGUEToMLY0RPuunYu0JWpqJwLlNrfQ8ZuUzpMdcwsEBxkt6fPwZiFRUaGjdwIgrYW_Uzbzj4gYwErjEofDl2QF9upZmVL_q-Rcpmuggkvnn3Kn5rBtpEq3vRyjc_yrqsQM58wWH1TOt/s1600/arduino_ethernet.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Тем не менее, использование W5100 - вовсе не единственный способ добавить немного LAN в ваше устройство на основе Arduino. Давным-давно фирма &lt;a href=&quot;http://www.microchip.com/&quot; target=&quot;_blank&quot;&gt;Microchip&lt;/a&gt; выпустила Ethernet-контроллер &lt;a href=&quot;http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en022889&quot; target=&quot;_blank&quot;&gt;ENC28J60&lt;/a&gt;, который&amp;nbsp;изготавливается&amp;nbsp;не только в SMD-исполнении, но и в&amp;nbsp;&lt;a href=&quot;http://mk90.ru/store/ru/mikroshemy/335-enc28j60-i-sp.html&quot;&gt;DIP-корпусе&lt;/a&gt;, что сделало его незаменимым для DIY-любителей. От себя замечу, что это единственный Ethernet-контроллер в DIP-е, который вообще попадал мне в руки.&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh68d2QP53ujt-CLRNWMnidwbkDcW9fZoTsyNQXly5GXnAfb16I_IRYtqXgDPJM7cCVS47lU7tbktZL4QBt5qaPGKwdAopQ8MfdTauU0hosbxk9Go_TlHUXzoATEr8k85DW8-2WkOC8AQ3J/s1600/ENC28J60SP.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;300&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh68d2QP53ujt-CLRNWMnidwbkDcW9fZoTsyNQXly5GXnAfb16I_IRYtqXgDPJM7cCVS47lU7tbktZL4QBt5qaPGKwdAopQ8MfdTauU0hosbxk9Go_TlHUXzoATEr8k85DW8-2WkOC8AQ3J/s400/ENC28J60SP.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Если сравнивать W5100 и ENC28J60, сразу же выяснится, что их основная общая черта - способность работать по шине SPI и тем самым экономить пины микроконтроллера для других задач. Но по техническим характеристикам ENC28J60 уступает - он не может пощеголять ни аппаратной поддержкой TCP, ни скоростью 100 Мбит.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Но, быть может, вашему проекту оно и не надо?&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Когда говорят о скорости 100 Мбит/с, подразумевают скорость работы &lt;i&gt;физического&lt;/i&gt; интерфейса (а не скорость поступления полезных данных, которая всегда меньше). К сожалению, Arduino UNO/Mega работает на тактовой частоте 16 МГц и способен выполнять только 16 000 000 операций в секунду (одна инструкция за такт - на то он и RISC ;). Вероятно, он не справится со сложным потоком медиаданных, зато на обмен небольшими порциями управляющей информации - вполне способен. Скорее всего, вы не почувствуете разницу между 10 и 100 Мбит/с, если будете считывать состояние датчиков или давать управляющие команды.&amp;nbsp;Сетевые интерфейсы, способные работать на 100 Мбит/с, как правило, поддерживают и 10 Мбит/с - если только эта скорость не будет запрещена в конфигурации сетевого устройства принудительно &lt;strike&gt;каким-то злым маньяком&lt;/strike&gt; системным администратором.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Что касается аппаратной поддержки TCP, который обеспечивает гарантированную доставку данных для многих протоколов, включая http, то здесь тоже все относительно просто: микросхема W5100 работает с четырьмя соединениями одновременно, обрабатывая перезапросы; в микросхеме ENC28J60 такой возможности нет (хотя она и поддерживает подсчет контрольной суммы, а также имеет буфер на 8 килобайт). То, что не делается аппаратно - приходится реализовывать программно, хоть и нагружая МК Arduino. Для программиста прикладного уровня (читаем - для рядового Arduino-пользователя типа нас с вами) это решается использованием соответствующей библиотеки, с оглядкой на свободную память микроконтроллера. Опытным путем я установил, что разница по объему скетчей хоть и есть, но не такая драматически большая, как мне показалось с первого взгляда.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Что нужно для того, чтобы состыковать ENC28J60 с Arduino? Да практически тоже самое, что и W5100:&lt;/div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;схема тактирования (кварц 25 МГц + емкости);&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;питание +3,3В;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;шина SPI c согласованием уровней логических сигналов &amp;nbsp;(+5В у Arduino и +3,3В у контроллера Ethernet);&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;развязка с линией (трансформатор, разрядник и резисторы - желательно 1%-ые);&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;внешний &quot;точный&quot; (1%-ый) резистор для работы опорного источника напряжения.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Собственно, все эти компоненты вполне реально&amp;nbsp;существуют&amp;nbsp;в выводном исполнении - так почему бы не воспользоваться? Схемы можно найти в изобилие в интернете, например - вот вариант из &lt;a href=&quot;http://www.instructables.com/id/A-credit-card-sized-Ethernet-Arduino-compatable-co/&quot; target=&quot;_blank&quot;&gt;Instructables&lt;/a&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPzzu9uFO0JsM2e80KCvxN-3BsrEWlBIevXdYU-7DWKaF-8CztBN7hsfSXXd6XS9IcX9Xf2hlze6KEFJU5s2LqdGF_J8iTdW25nxUzxC6GKaJn4UwVopxWTnq_skobEuVmdXmv0uDQ70-Q/s1600/instuctables_ethernet.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPzzu9uFO0JsM2e80KCvxN-3BsrEWlBIevXdYU-7DWKaF-8CztBN7hsfSXXd6XS9IcX9Xf2hlze6KEFJU5s2LqdGF_J8iTdW25nxUzxC6GKaJn4UwVopxWTnq_skobEuVmdXmv0uDQ70-Q/s1600/instuctables_ethernet.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Автономные модули и шилд-платы с ENC28J60 в SMD-исполнении давно доступны на EBay и у &amp;nbsp;прочих интернет-магазинов (в особенности, конечно же, в китайских) - но это всего лишь железо, реализация одной и той же, по сути, схемы. Программная часть наиболее грамотно разрабатывается &lt;a href=&quot;http://jeelabs.org/&quot; target=&quot;_blank&quot;&gt;JeeLabs&lt;/a&gt;, можно даже найти инструкции по &lt;a href=&quot;http://blog.thiseldo.co.uk/?p=623&quot; target=&quot;_blank&quot;&gt;миграции с EthernetShield на EtherCard&lt;/a&gt; (так называется их вариант &lt;a href=&quot;http://jeelabs.com/products/ether-card&quot; target=&quot;_blank&quot;&gt;кита&lt;/a&gt; для самостоятельной сборки). Идея же представить набор для самостоятельной сборки по праву принадлежит &lt;a href=&quot;http://www.open-electronics.org/low-cost-ethernet-shield-with-enc28j60/&quot; target=&quot;_blank&quot;&gt;Open Electronics&lt;/a&gt;, а&amp;nbsp;&lt;a href=&quot;https://github.com/jcw/ethercard&quot; target=&quot;_blank&quot;&gt;библиотеку&lt;/a&gt; можно скачать на GitHub.&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2qYT-LKoZ851jjlpAXl4q4UYGtRXCBxK_sLOu165QTN5tC5yJYP6hrT9cchxv6ffQo72cJBM9e0aBOKz1MUJVwRSdhtQ1imNO9rAmZlKZ8HOnlfMTApFGe1XP4nGuRFjTytcRE4X9iPlY/s1600/openelectronics.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2qYT-LKoZ851jjlpAXl4q4UYGtRXCBxK_sLOu165QTN5tC5yJYP6hrT9cchxv6ffQo72cJBM9e0aBOKz1MUJVwRSdhtQ1imNO9rAmZlKZ8HOnlfMTApFGe1XP4nGuRFjTytcRE4X9iPlY/s1600/openelectronics.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglhumdlsffE3zW1hpSuzgzw7LRj61dcwpcc1f3q3GmiMnXXv_zzrpYjqii2-cJIsYK5zhLf3VulywEUSKG_-liauVoXL5r5WLZWu-gOZx2guFoTmb6tYoFY6gyGYg3QtssKzmg1Yscvw4G/s1600/openelectronics2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglhumdlsffE3zW1hpSuzgzw7LRj61dcwpcc1f3q3GmiMnXXv_zzrpYjqii2-cJIsYK5zhLf3VulywEUSKG_-liauVoXL5r5WLZWu-gOZx2guFoTmb6tYoFY6gyGYg3QtssKzmg1Yscvw4G/s1600/openelectronics2.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgr2Y3Ur_JD4aqlHW0cXzxxjA69yfqwJ523Wpml4oRaHBVE5ZG2BV1zoMOqPkpD8iKPrXEWnIDqnUcR-F0rVwGTienaYZkdjAoydZeFNov2fkwmVCQ9fZOGVCbF4unil6WyL8BZIGurUn6x/s1600/openelectronics_schematic.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgr2Y3Ur_JD4aqlHW0cXzxxjA69yfqwJ523Wpml4oRaHBVE5ZG2BV1zoMOqPkpD8iKPrXEWnIDqnUcR-F0rVwGTienaYZkdjAoydZeFNov2fkwmVCQ9fZOGVCbF4unil6WyL8BZIGurUn6x/s1600/openelectronics_schematic.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Основываясь на этой разработке, свет увидела &lt;b&gt;Freeduino EtherCard R1&lt;/b&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisAeKhkM8A2ozxjsHBkyAfz23BBBrRUNr9lN_uD-upAId168sfMqxHeRhXvYBhWrBFlDF49EPMzCgZZjoa_8ivTVkFxV0djhb4nXaeGOLVotLFI5zo7dnGqge_JrITzdAwAMh9FkQWU9g/s1600/freeduinoethercardr1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisAeKhkM8A2ozxjsHBkyAfz23BBBrRUNr9lN_uD-upAId168sfMqxHeRhXvYBhWrBFlDF49EPMzCgZZjoa_8ivTVkFxV0djhb4nXaeGOLVotLFI5zo7dnGqge_JrITzdAwAMh9FkQWU9g/s600/freeduinoethercardr1.jpg&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOadRIdv82Q2cCd3Ja1t_1rgZsh4PLex3NdJfAtbXHqUa5-E1DXo9nZ5kD5nWwjUcLRkCLvFzR0cFcvli8QswmPLlM1_jP-MxxrzjAFD8vdwIzGx6PsFjzcv628FLXGKLdIHk-7Iam0Z7S/s1600/freeduinoethercardr1_1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOadRIdv82Q2cCd3Ja1t_1rgZsh4PLex3NdJfAtbXHqUa5-E1DXo9nZ5kD5nWwjUcLRkCLvFzR0cFcvli8QswmPLlM1_jP-MxxrzjAFD8vdwIzGx6PsFjzcv628FLXGKLdIHk-7Iam0Z7S/s600/freeduinoethercardr1_1.jpg&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Схема оставлена практически без изменений. Вот несколько моментов, которые их отличают:&lt;/div&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Шилд подключается по SPI, но через &lt;i&gt;проходную&lt;/i&gt; вилку - таким образом, к нему можно подключить еще один SPI-шилд, например &lt;a href=&quot;http://mk90.ru/store/ru/shields/344-microsd-shield.html&quot; target=&quot;&quot;&gt;MicroSD shield&lt;/a&gt;;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Все резисторы, которые требуют повышенной точности, взяты действительно 1%-ые;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Шилд стыкуется с платой максимально компактно - обратите внимание, что в отличие от оригинала, он полностью &quot;сел&quot; на плату (обратите внимание на разъем USB и край печатной платы шилда, чтобы понять, о чем я говорю);&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Бочкообразные электролиты несоразмерной емкости 470 мкФ заменены на низкопрофильные.&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Купить шилд в собранном виде или в виде kit-а можно &lt;a href=&quot;http://mk90.ru/store/ru/shields/375-freeduino-ethercard-r1.html&quot;&gt;здесь&lt;/a&gt;, пошаговая инструкция по сборке доступна &lt;a href=&quot;http://howtomakekit.blogspot.ru/2013/02/freeduino-ethercard-r1.html&quot;&gt;здесь&lt;/a&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
При использовании &lt;a href=&quot;https://github.com/jcw/ethercard&quot;&gt;библиотеки&lt;/a&gt;, не забывайте в инициализации &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;ether.begin&lt;/span&gt; дописывать третий параметр - номер пина, к которому подключено разрешение работы. Библиотека по умолчанию предполагает D8, но в этом шилде - &lt;b&gt;D10&lt;/b&gt;.&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
Возьмите прилагающийся к библиотеке пример &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;testDHCP&lt;/span&gt; и найдите строчки:&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;if&lt;/span&gt; (ether.&lt;span style=&quot;color: #cc6600;&quot;&gt;begin&lt;/span&gt;(sizeof &lt;span style=&quot;color: #cc6600;&quot;&gt;Ethernet&lt;/span&gt;::buffer, mymac) == 0) 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;println&lt;/span&gt;( &lt;span style=&quot;color: #006699;&quot;&gt;&quot;Failed to access Ethernet controller&quot;&lt;/span&gt;);
&lt;/pre&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
Впишите номер пина в конце следующим образом:&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;if&lt;/span&gt; (ether.&lt;span style=&quot;color: #cc6600;&quot;&gt;begin&lt;/span&gt;(sizeof &lt;span style=&quot;color: #cc6600;&quot;&gt;Ethernet&lt;/span&gt;::buffer, mymac, &lt;b&gt;10&lt;/b&gt;) == 0) 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;println&lt;/span&gt;( &lt;span style=&quot;color: #006699;&quot;&gt;&quot;Failed to access Ethernet controller&quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
И все тут же заработает (при наличии подключенной сетки с DHCP-сервером, конечно же ;)&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br /&gt;Материал опубликован на сайте mk90.blogspot.com под лицензией Creative Commons Share Alike 3.0&lt;/div&gt;</description><link>http://mk90.blogspot.com/2013/02/ethernet-shield.html</link><author>noreply@blogger.com (id)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRkLGUEToMLY0RPuunYu0JWpqJwLlNrfQ8ZuUzpMdcwsEBxkt6fPwZiFRUaGjdwIgrYW_Uzbzj4gYwErjEofDl2QF9upZmVL_q-Rcpmuggkvnn3Kn5rBtpEq3vRyjc_yrqsQM58wWH1TOt/s72-c/arduino_ethernet.jpg" height="72" width="72"/><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8944086625767573647.post-4618958938746260321</guid><pubDate>Mon, 21 Jan 2013 11:48:00 +0000</pubDate><atom:updated>2013-01-26T17:27:39.167+04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ArduinoCompatible</category><category domain="http://www.blogger.com/atom/ns#">HNYduino</category><category domain="http://www.blogger.com/atom/ns#">Проекты Arduino</category><title>Используем HNYDuino R2</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Новогодние праздники давно окончились, а после крещения многие уже избавились от своих новогодних деревьев. Конечно, если только это не &lt;b&gt;HNYDuino R2&lt;/b&gt; - с ней можно развлекаться хоть круглый год. Рассмотрим более подробно, как именно это делается ;)&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzERaO9BWmV54BfioRKroMTsgeRDDH-ajerHT2AgvVAloVnN99DXuHtE1NYI81QJlK2C_zciP_Q52z1ZIQjruPW-C5M8Ik0cBBRHcfPm1MbZaRpTltoqHdgu83JNcTrMKf9MiPap6nW-Nk/s1600/hnyduino2_top.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzERaO9BWmV54BfioRKroMTsgeRDDH-ajerHT2AgvVAloVnN99DXuHtE1NYI81QJlK2C_zciP_Q52z1ZIQjruPW-C5M8Ik0cBBRHcfPm1MbZaRpTltoqHdgu83JNcTrMKf9MiPap6nW-Nk/s640/hnyduino2_top.png&quot; width=&quot;527&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Первым делом, подключим HNYDuino R2 к компьютеру через прилагающийся к ней mini-USB кабель. Следите, чтобы движок переключателя питания (слева) был установлен в нижнее положение (USB). В ArduinoIDE надо выбрать плату &lt;b&gt;Arduino Leonardo&lt;/b&gt;:&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcPvT7_7PNqBPol6oBtl6LzAKuDT3RYZ3PajpoUIsLa4kZfu4esYFXinbISvfxejl5x_S-LqhDtWAbdo8cDZRgeNaSyPaNsDhFab5rmJR3Rday_f3xjPCqJP5BxNf89NeZP0vxM22TXXJL/s1600/leomenu.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcPvT7_7PNqBPol6oBtl6LzAKuDT3RYZ3PajpoUIsLa4kZfu4esYFXinbISvfxejl5x_S-LqhDtWAbdo8cDZRgeNaSyPaNsDhFab5rmJR3Rday_f3xjPCqJP5BxNf89NeZP0vxM22TXXJL/s600/leomenu.png&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
Если все ОК, в системе появится новое устройство на шине USB, а после нажатия на сброс центральный светодиод начнет плавно переливаться красным. Установите драйверы - бутлоадера (&lt;a href=&quot;http://mk90.ru/files/driver/HNYDuino_R2.inf&quot;&gt;отсюда&lt;/a&gt;) и Leonardo (из папки ArduinoIDE). Откройте скетч-пример &lt;b&gt;Blink&lt;/b&gt; (Примеры -&amp;gt; 01. Basics -&amp;gt; Blink) и загрузите его в по Ctrl-U в устройство. После загрузки центральный светодиод начнет мигать красным (уже без плавного переливания).&lt;br /&gt;
&lt;br /&gt;
Все получилось? Тогда двигаемся дальше!&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
Елка снабжена шестнадцатью одноцветными светодиодами и одним - трехцветным, а также датчиком звука:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAMaDYAsVf-Gg6e5wIyKkHT0B5sVfdiwegw4ZgSGVs4uxbCcEfha-7XxjMzIGDHD7gN6Rfx1BNhgtYr47sQvqrmdtIwEmBeqmTikYdkEn5lgEoAJOLQ_Frm2ZKf0NePhwYa7-16LtS_Owk/s1600/hnyduino2_lamps.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAMaDYAsVf-Gg6e5wIyKkHT0B5sVfdiwegw4ZgSGVs4uxbCcEfha-7XxjMzIGDHD7gN6Rfx1BNhgtYr47sQvqrmdtIwEmBeqmTikYdkEn5lgEoAJOLQ_Frm2ZKf0NePhwYa7-16LtS_Owk/s640/hnyduino2_lamps.png&quot; width=&quot;512&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Расположенный в центре трехцветный светодиод подключен к пинам с аппаратной поддержкой ШИМ, поэтому есть возможность плавно мигать и переливаться каждым из трех цветов через&amp;nbsp;&lt;a href=&quot;http://mk90.ru/wiki/index.php/AnalogWrite&quot; style=&quot;text-align: justify;&quot;&gt;analogWrite()&lt;/a&gt;:&lt;/div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;красный&lt;/span&gt; - пин &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;D13&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;color: lime;&quot;&gt;зеленый&lt;/span&gt; - пин &lt;b&gt;&lt;span style=&quot;color: lime;&quot;&gt;D10&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;синий&lt;/span&gt; - пин &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;D5&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Через гребенку на подставку дополнительно выведены:&lt;/div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;VCC&lt;/b&gt; - напряжение питания MCU, в нашем случае +5В. Переключатель питания коммутирует туда напряжение питания с USB или выход микросхемы-стабилизатора&amp;nbsp;7805;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;VIN&lt;/b&gt; - входное напряжение от разъема питания на подставке (плюс в центре). Рекомендуется подавать +7..+12В, от переполюсовки спасет расположенный на той же подставке диод 1N4007;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;A4&lt;/b&gt; - аналоговый вход, и он же - цифровой пин &lt;b&gt;D22&lt;/b&gt;;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;A5&lt;/b&gt; - аналоговый вход, и он же - цифровой пин &lt;b&gt;D23&lt;/b&gt;;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;D17&lt;/b&gt; - цифровой пин, аппаратно это PB0 - сигнал SS или PCINT0;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;D7&lt;/b&gt; - цифровой пин, аппаратно это PE6 - сигнал INT6/AIN0.&lt;/li&gt;
&lt;/ul&gt;
&lt;span style=&quot;text-align: justify;&quot;&gt;Светодиоды&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;R1..R8&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;и&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;G1..G8&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;подключены к двум закаскадированным микросхемам&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;text-align: justify;&quot;&gt;74HC595&lt;/b&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;, принцип работы с которыми я уже подробно разбирал в статье&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://mk90.blogspot.com/2009/12/arduino-1.html&quot; style=&quot;text-align: justify;&quot;&gt;Удвоение пинов Arduino&lt;/a&gt;, а также в аналогичной статье про HNYDuino R1 (только подключены они к другим пинам).&lt;span style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;В общем случае всё сводится к выполнению двух последовательных команд&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://mk90.ru/wiki/index.php/ShiftOut&quot; style=&quot;text-align: justify;&quot;&gt;shiftOut&lt;/a&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;с использованием известных пинов (LATCH = 12,&amp;nbsp;CLK = 8 и&amp;nbsp;DATA = 16).&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Вывод осуществляется при помощи функции&amp;nbsp;&lt;b&gt;setState&lt;/b&gt;(byte&amp;nbsp;&lt;span style=&quot;color: #38761d;&quot;&gt;greenDataOut&lt;/span&gt;, byte&amp;nbsp;&lt;span style=&quot;color: red;&quot;&gt;redDataOut&lt;/span&gt;), где надо указать два байта, для&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;G1..G8&lt;/span&gt;&lt;/b&gt;&amp;nbsp;и&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;R1..R8&lt;/span&gt;&lt;/b&gt;&amp;nbsp;соответственно. Если мысленно выстроить образуемый ими контур в линию, могло бы получиться следующее:&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiY1PYQn-6RkGiaCzeL3VYzEaTlaD1goYtYq8RQGVDA7ddRe8CK7q2S_pVhfLVB3biHlSPF5HCDG_bHngo9-B_7ZEVfsmhUfZcIjpB2At-I24qY4NMrcGDqNaf0QRLEQbNZzI4p3_IWPAZz/s1600/hnyduino_lamps_1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiY1PYQn-6RkGiaCzeL3VYzEaTlaD1goYtYq8RQGVDA7ddRe8CK7q2S_pVhfLVB3biHlSPF5HCDG_bHngo9-B_7ZEVfsmhUfZcIjpB2At-I24qY4NMrcGDqNaf0QRLEQbNZzI4p3_IWPAZz/s600/hnyduino_lamps_1.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
Чтобы отобразить произвольный орнамент, надо сформировать два байта в двоичном виде и передать их функции&amp;nbsp;&lt;b&gt;setState&lt;/b&gt;. Например, чтобы зажечь линейку из четырех самых нижних светодиодов (&lt;span style=&quot;color: #38761d;&quot;&gt;&lt;b&gt;G1&lt;/b&gt;&lt;/span&gt;,&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;R1&lt;/span&gt;&lt;/b&gt;,&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;G8&lt;/span&gt;&lt;/b&gt;&amp;nbsp;и&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;R8&lt;/span&gt;&lt;/b&gt;), подставим на их места единицы, получится:&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;span style=&quot;color: #38761d; font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-large;&quot;&gt;&lt;b&gt;1 0 0 0 0 0 0 1&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-large;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;1 0 0 0 0 0 0 1&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Теперь можно отдавать команду&amp;nbsp;&lt;b&gt;setState&lt;/b&gt;(&lt;span style=&quot;color: #38761d;&quot;&gt;B10000001&lt;/span&gt;,&lt;span style=&quot;color: red;&quot;&gt;B10000001&lt;/span&gt;) - префикс &#39;B&#39; предваряет число в двоичной записи. Если кому-то по душе шестнадцатеричная запись, тоже самое &amp;nbsp; будет по&amp;nbsp;&lt;b&gt;setState&lt;/b&gt;(&lt;span style=&quot;color: #38761d;&quot;&gt;0x81&lt;/span&gt;,&lt;span style=&quot;color: red;&quot;&gt;0x81&lt;/span&gt;).&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Если и после этого останутся вопросы, загрузите пример, который прилагается к &amp;nbsp;библиотеке - зацикленное случайное переключение простейших эффектов (обычно прошито в елку по умолчанию).&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRXr3bF1spzzOgZqeufND3-vhv44FLdtIdwiimcDmTHPePW7FWO0RZ9BHQtqwMcnoWgwDW-2piuW8JTkovR_psOwuudU9o4WQruTj-svwxkAA8wTTWJWYsAaY0CZyLh85cLwzaBFLLbHfh/s1600/hnyduino2_mic.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRXr3bF1spzzOgZqeufND3-vhv44FLdtIdwiimcDmTHPePW7FWO0RZ9BHQtqwMcnoWgwDW-2piuW8JTkovR_psOwuudU9o4WQruTj-svwxkAA8wTTWJWYsAaY0CZyLh85cLwzaBFLLbHfh/s1600/hnyduino2_mic.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Датчик звука собран в виде узла с электретным &lt;a href=&quot;http://mk90.ru/store/ru/sensors/371--microphone.html&quot;&gt;микрофоном&lt;/a&gt; (такие обычно можно встретить в телефонных аппаратах) и операционного усилителя &lt;b&gt;LM386&lt;/b&gt;, выход которого подключен к аналоговому пину &lt;b&gt;A0&lt;/b&gt;:&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfgzUrCeFxKJungtTfeW-Q8-iWFmn3QAFy-m1RlBviM_Q_fHErggnbs5kaEu3e9SF3ttvdqpP4_FQMmSVjuAGYscP64jeEZe1zV7FLLe9MJRnQObZAfRnzqTdM1TJMEUVXijxGhT0f5Tr3/s1600/lm386.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfgzUrCeFxKJungtTfeW-Q8-iWFmn3QAFy-m1RlBviM_Q_fHErggnbs5kaEu3e9SF3ttvdqpP4_FQMmSVjuAGYscP64jeEZe1zV7FLLe9MJRnQObZAfRnzqTdM1TJMEUVXijxGhT0f5Tr3/s1600/lm386.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Усиленное звуковое колебание с выхода усилителя попадает на RC-цепочку C10 и R25, причем резистор - &lt;i&gt;переменный&lt;/i&gt;, что дает возможность регулировки чувствительности (резистор расположен с противоположной стороны):&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIrcjsUFwCMig8SjVEIOro9XztdDGVrN1R0QrE9DkHw_ZeyYu80NaX5AsKrqupgTsa1wFepQlgQ2bYrEeAYcDlmNPswl8EocI15ImN2TUM1Xx7fkaAG358XNap6es8IqdUx2QNmdkRaZ90/s1600/hnyduino2_res.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIrcjsUFwCMig8SjVEIOro9XztdDGVrN1R0QrE9DkHw_ZeyYu80NaX5AsKrqupgTsa1wFepQlgQ2bYrEeAYcDlmNPswl8EocI15ImN2TUM1Xx7fkaAG358XNap6es8IqdUx2QNmdkRaZ90/s1600/hnyduino2_res.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Таким образом, регулировать можно и аппаратно, и программно. Вот примерный скетч, демонстрирующий работу датчика:&amp;nbsp;&lt;/div&gt;
&lt;br /&gt;
&lt;pre&gt;#define&amp;nbsp;BLUE&amp;nbsp;&amp;nbsp;&amp;nbsp;5

&lt;span style=&quot;color: #cc6600;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #cc6600;&quot;&gt;int&lt;/span&gt; thresholdvalue=400;&lt;span style=&quot;color: #7e7e7e;&quot;&gt;//The threshold to turn the led on&lt;/span&gt;

&lt;span style=&quot;color: #cc6600;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;setup&lt;/b&gt;&lt;/span&gt;() {
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;pinMode&lt;/span&gt;(BLUE,&lt;span style=&quot;color: #006699;&quot;&gt;OUTPUT&lt;/span&gt;);
}
&amp;nbsp;
&lt;span style=&quot;color: #cc6600;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;loop&lt;/b&gt;&lt;/span&gt;() {
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;int&lt;/span&gt; sensorValue = &lt;span style=&quot;color: #cc6600;&quot;&gt;analogRead&lt;/span&gt;(A0);&lt;span style=&quot;color: #7e7e7e;&quot;&gt;//use A0 to read the electrical signal&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;if&lt;/span&gt;(sensorValue&amp;gt;thresholdvalue) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;digitalWrite&lt;/span&gt;(BLUE,&lt;span style=&quot;color: #006699;&quot;&gt;HIGH&lt;/span&gt;);&lt;span style=&quot;color: #7e7e7e;&quot;&gt;//if the value read from A0 is larger than 400,then light the LED&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;delay&lt;/span&gt;(200);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;digitalWrite&lt;/span&gt;(BLUE,&lt;span style=&quot;color: #006699;&quot;&gt;LOW&lt;/span&gt;);
&amp;nbsp;&amp;nbsp;}
}

&lt;/pre&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
В цикле постоянно проверяется значение, считываемое с &lt;b&gt;A0&lt;/b&gt;, и если оно превысило константу thresholdvalue, трехцветный светодиод вспыхивает на 0,2 секунды &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;синим&lt;/span&gt;&lt;/b&gt; цветом. Если после загрузки вы уже отбили себе хлопками все руки, а реакции все нет - не забудьте покрутить переменный резистор.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Более подробную информацию можно найти в нашем &lt;a href=&quot;http://mk90.ru/wiki/index.php/HNYDuinoR2&quot;&gt;wiki&lt;/a&gt;.&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br /&gt;Материал опубликован на сайте mk90.blogspot.com под лицензией Creative Commons Share Alike 3.0&lt;/div&gt;</description><link>http://mk90.blogspot.com/2013/01/hnyduino-r2.html</link><author>noreply@blogger.com (id)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzERaO9BWmV54BfioRKroMTsgeRDDH-ajerHT2AgvVAloVnN99DXuHtE1NYI81QJlK2C_zciP_Q52z1ZIQjruPW-C5M8Ik0cBBRHcfPm1MbZaRpTltoqHdgu83JNcTrMKf9MiPap6nW-Nk/s72-c/hnyduino2_top.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8944086625767573647.post-4959997038087866720</guid><pubDate>Fri, 11 Jan 2013 16:08:00 +0000</pubDate><atom:updated>2013-01-13T20:23:31.580+04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Arduino Shield</category><category domain="http://www.blogger.com/atom/ns#">Hardware</category><category domain="http://www.blogger.com/atom/ns#">Новости</category><category domain="http://www.blogger.com/atom/ns#">Шилд-платы</category><title>RelayShield HighPower</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
С момента выпуска &lt;b&gt;RelayShield&lt;/b&gt; прошло &lt;a href=&quot;http://mk90.blogspot.ru/2012/01/relayshield.html&quot;&gt;около года&lt;/a&gt;. По традиции, мы проанализировали &amp;nbsp;отзывы пользователей и создали новую версию:&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEwcaqglBCirIVsrj10C8GLjzOmrDq0T2f4QEplpooU5gRV9nF_3MRU766qSUi58C5bBOcuAYQ3_NDT38LQNZldTPbsXevuGS5lkSZ-GKNogVvvAQPF5SjwcnLe3x8Hqw2Jv_JZTSBpoaj/s1600/HighPowerRelayShield_4.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEwcaqglBCirIVsrj10C8GLjzOmrDq0T2f4QEplpooU5gRV9nF_3MRU766qSUi58C5bBOcuAYQ3_NDT38LQNZldTPbsXevuGS5lkSZ-GKNogVvvAQPF5SjwcnLe3x8Hqw2Jv_JZTSBpoaj/s600/HighPowerRelayShield_4.jpg&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;
Основная идея - реализовать возможность переключения б&lt;i&gt;о&lt;/i&gt;льших токов. Соответственно, место шести реле заняли четыре, зато более мощных (&lt;b&gt;10А&lt;/b&gt;, &amp;nbsp;&lt;b&gt;250VAC&lt;/b&gt; или &lt;b&gt;30VDC&lt;/b&gt;). Как и предыдущий вариант, этот тоже никак не соприкасается с Arduino-совместимой платой при стыковке:&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimz40hBidhOJ0qexcbYQAgsq2mGDl7RXRAaHjXKi7hV2C6stinWK0yMuaEEGn9bIylXTcVV7Gw0NM7X17WEqKoOWYALTbddGC1ACkaDv6x2Y2OuhP4uozLIMhrNF8gB_jmjK_tGXjEKbJX/s1600/HighPowerRelayShield_6.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimz40hBidhOJ0qexcbYQAgsq2mGDl7RXRAaHjXKi7hV2C6stinWK0yMuaEEGn9bIylXTcVV7Gw0NM7X17WEqKoOWYALTbddGC1ACkaDv6x2Y2OuhP4uozLIMhrNF8gB_jmjK_tGXjEKbJX/s600/HighPowerRelayShield_6.jpg&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Для тех, кто хочет пользоваться модулем &lt;i&gt;отдельно&lt;/i&gt; от Arduino-совместимой платы, пригодится опция &quot;Вилки отсутствуют&quot; - в этом варианте &lt;b&gt;вилки для стыковки не напаиваются&lt;/b&gt;. Кроме того, если требуется освободить или переместить управление на другие выходы Arduino, это можно сделать перерезав соответствующую дорожку на solder-джампере с обратной стороны платы:&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6Wekvd-q0lL2B6jsRN3_hYxnRQQdAyHsB3U-GL1q8Lft1dqsYzuG0nWWpoTTZ7otJ45mXagLo7Z36QYcWIcBomX3f-pf-l6lmcu-fnPXX_3vlfaI_lGEOcJp8qZ7oRYjT3OBgKP6KweVY/s1600/HighPowerRelayShield_3.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6Wekvd-q0lL2B6jsRN3_hYxnRQQdAyHsB3U-GL1q8Lft1dqsYzuG0nWWpoTTZ7otJ45mXagLo7Z36QYcWIcBomX3f-pf-l6lmcu-fnPXX_3vlfaI_lGEOcJp8qZ7oRYjT3OBgKP6KweVY/s600/HighPowerRelayShield_3.jpg&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Управляющие выходы реле находятся на пинах &lt;b&gt;D7&lt;/b&gt;, &lt;b&gt;D6&lt;/b&gt;, &lt;b&gt;D3&lt;/b&gt; и &lt;b&gt;D4&lt;/b&gt; соответственно. Контактные группы каждого реле обозначены как:&lt;/div&gt;
&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;NO&lt;/b&gt;x - Normal Open, разомкнутый в исходном состоянии контакт;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;NC&lt;/b&gt;x - Normal Close, замкнутый в исходном состоянии контакт;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;COM&lt;/b&gt;x - Common, общий.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Управление несложное - надо перевести пин в режим цифрового выхода при помощи &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&lt;a href=&quot;http://mk90.ru/wiki/index.php/PinMode&quot;&gt;pinMode&lt;/a&gt;&lt;/span&gt;(N, OUTPUT), затем записать в него соответствующее значение (HIGH или LOW) через &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&lt;a href=&quot;http://mk90.ru/wiki/index.php/DigitalWrite&quot;&gt;digitalWrite&lt;/a&gt;&lt;/span&gt;:&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;LOW (исходное состояние): замкнуты NCx и COMx, NO ни с чем не соединен;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;HIGH: замкнуты NOx и COMx, NC ни с чем не соединен.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;br /&gt;
Купить RelayShield HighPower можно &lt;a href=&quot;http://mk90.ru/store/ru/shields/369-relayshield-highpower.html&quot;&gt;здесь&lt;/a&gt;.&lt;/div&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br /&gt;Материал опубликован на сайте mk90.blogspot.com под лицензией Creative Commons Share Alike 3.0&lt;/div&gt;</description><link>http://mk90.blogspot.com/2013/01/relayshield-highpower.html</link><author>noreply@blogger.com (id)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEwcaqglBCirIVsrj10C8GLjzOmrDq0T2f4QEplpooU5gRV9nF_3MRU766qSUi58C5bBOcuAYQ3_NDT38LQNZldTPbsXevuGS5lkSZ-GKNogVvvAQPF5SjwcnLe3x8Hqw2Jv_JZTSBpoaj/s72-c/HighPowerRelayShield_4.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8944086625767573647.post-8711692525990863548</guid><pubDate>Tue, 08 Jan 2013 15:52:00 +0000</pubDate><atom:updated>2013-01-10T12:04:22.121+04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Arduino Shield</category><category domain="http://www.blogger.com/atom/ns#">ArduinoCompatible</category><category domain="http://www.blogger.com/atom/ns#">Kits</category><category domain="http://www.blogger.com/atom/ns#">Новости</category><category domain="http://www.blogger.com/atom/ns#">Шилд-платы</category><title>Как подключить шилд к Nano</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Все, кто потратил на сравнение Arduino-совместимых плат хотя бы минут десять, успели усвоить простые истины:&lt;/div&gt;
&lt;div&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Полноразмерные платы типа &lt;a href=&quot;http://arduino.cc/en/Main/ArduinoBoardUno&quot; target=&quot;_blank&quot;&gt;Arduino UNO&lt;/a&gt; удобны для пристыковывания &lt;a href=&quot;http://shieldlist.org/&quot; target=&quot;_blank&quot;&gt;шилдов&lt;/a&gt;;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Миниатюрные платы типа &lt;a href=&quot;http://arduino.cc/en/Main/ArduinoBoardNano&quot; target=&quot;_blank&quot;&gt;Arduino Nano&lt;/a&gt;&amp;nbsp;чудо как хороши в комплекте с &lt;a href=&quot;http://mk90.ru/store/ru/prototipizatsija/106-bespaechnaja-maketka-300100.html&quot;&gt;беспаечной макеткой&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Но что, если требуется ровно наоборот?...&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Существуют полноразмерные Arduino-совместимые платы, на которые не напаяны колодки - вместо них можно впаять штыри и воткнуть таким образом в макетку (как правило, на них даже два ряда отверстий - одно для стандартного arduino pinout, второе - на сетке 2,54 мм), хотя по смыслу такое подходит скорее для обычной макетной платы - к которой без паяльника лучше не подходить.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Nano-совместимые платы можно соединить с шилдом либо проводами на той же беспаечной макетке, либо непосредственно (без участия макетки), но, в любом случае, получится не самого приятного вида колтун.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Так или иначе, отныне у нас есть вариант шилда-переходника, который быстро и непринужденно &lt;strike&gt;превращаются брюки&lt;/strike&gt; позволяет &lt;b&gt;состыковать Nano с шилд-платами&lt;/b&gt; для полноразмерных старших братьев:&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbALRxCT8bfSq0EwVy-pLTLIynahyphenhyphenchfFAtweFfD7_q45q7PrxClHgx3uj9ShnUVj5eTNtmhS3FU6uxWdAWHJ2Ji35id1vAWNWBElcCGTQK15x-7V6nI9lwZy1mUbJoLfVRRPjBovAypzX/s1600/nano_adapter_r1_1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbALRxCT8bfSq0EwVy-pLTLIynahyphenhyphenchfFAtweFfD7_q45q7PrxClHgx3uj9ShnUVj5eTNtmhS3FU6uxWdAWHJ2Ji35id1vAWNWBElcCGTQK15x-7V6nI9lwZy1mUbJoLfVRRPjBovAypzX/s600/nano_adapter_r1_1.jpg&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Вот что она умеет:&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;изображать &lt;b&gt;arduino pinout 1.0&lt;/b&gt;, включая ICSP-вилку для стыковки с последними Ethernet-платами (и прочими вариантами, которые используют для коммуникаций пины с аппаратной поддержкой SPI);&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;разъем питания&lt;/b&gt; с защитным диодом и опциональной возможностью запитывания от стабилизированного источника +5В;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;посадочные места для пинов &lt;b&gt;A6&lt;/b&gt; и &lt;b&gt;A7&lt;/b&gt; - если они все-таки используются в конструируемом вами устройстве;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;посадочные места для резисторов-подтяжек &lt;b&gt;I2C&lt;/b&gt;, если вдруг понадобится;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;кнопку &lt;b&gt;сброса&lt;/b&gt; (хотя она и кажется бесполезной на первый взгляд).&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Когда я разводил этот вариант, то довольно скоро сообразил, что поместить Nano &lt;i&gt;сверху&lt;/i&gt; не получится из-за недопустимой высоты - она просто не даст возможность нахлобучить шилды , при стандартной высоте колодок в 8 мм.&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
И хотя вопрос решался увеличением высоты колодок, я решил отказаться от этой затратной со всех точек зрения идеи (стоимость этих экзотических высоких колодок и результирующая высота и прочность конструкции) и поместил Nano с противоположной стороны ;) Иными словами - &amp;nbsp;колодки для шилдов и для Nano смотрят в разные стороны:&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsl26Y7HOmYHFP7vBWfjSSAzURPIJfmjRMJMwcFrdwDWp5At8fdp7-fc_0mp7bjZG-BSq09N6hKOMz1M4I85tbcjX882dngWwFKYrKagxhiZ1K8wdU0HEqmOTeHkNzdYwTAUM3SfnBuu0/s1600/step_09.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsl26Y7HOmYHFP7vBWfjSSAzURPIJfmjRMJMwcFrdwDWp5At8fdp7-fc_0mp7bjZG-BSq09N6hKOMz1M4I85tbcjX882dngWwFKYrKagxhiZ1K8wdU0HEqmOTeHkNzdYwTAUM3SfnBuu0/s600/step_09.jpg&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Я, конечно, понимаю - истинный фанат платформы Arduino просто &lt;i&gt;обязан&lt;/i&gt; иметь в своем арсенале как минимум Nano, UNO, и Mega, а следовательно - в таком переходнике не нуждается. Тем не менее, по себе знаю, что прототипизация происходит очень спонтанно и результат качественно зависит от того, что оказалось под руками в конкретный момент времени. В результате это может выглядеть так:&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6hwxwfG6gKWvU6wVJJcChkOz67eoeJ-9Nm1R42pmC3AP_GkLWNG9d3QRbJBOL6FxKCi7cCEOG7WWMqENlb1pBbnKBTvUryiuawdquE9tC5ya334RlrhRlssA7WNkkSiKIJToRzpKtMxw/s1600/step_14.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6hwxwfG6gKWvU6wVJJcChkOz67eoeJ-9Nm1R42pmC3AP_GkLWNG9d3QRbJBOL6FxKCi7cCEOG7WWMqENlb1pBbnKBTvUryiuawdquE9tC5ya334RlrhRlssA7WNkkSiKIJToRzpKtMxw/s600/step_14.jpg&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVUUdrvJY0hmBkgkQjrzLJjjeU_xErT5pV3u1_9cy50dmyVeVizZwRIaEMCH-aJBh_F89UDB8FjujcE6YIFiJ-avBts6wdeiNa442leFOXP1jF1GZ3k7DPGYnVo40UY0SSeTm6sVUf7uE/s1600/step_15.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVUUdrvJY0hmBkgkQjrzLJjjeU_xErT5pV3u1_9cy50dmyVeVizZwRIaEMCH-aJBh_F89UDB8FjujcE6YIFiJ-avBts6wdeiNa442leFOXP1jF1GZ3k7DPGYnVo40UY0SSeTm6sVUf7uE/s600/step_15.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Что до меня лично - я, наконец, получил возможность питать и Nano, и UNO от одного блока питания - быть может, эта идея еще кому-то понравится ;)&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Купить кит или собранную плату можно &lt;a href=&quot;http://mk90.ru/store/ru/shields/366-nano-adapter-shield-r1.html&quot;&gt;здесь&lt;/a&gt;.&amp;nbsp;А руководство по сборе кита (поясняющее отдельные моменты конструкции) - прочитать &lt;a href=&quot;http://howtomakekit.blogspot.ru/2013/01/nano-adapter-shield-r1.html&quot;&gt;здесь&lt;/a&gt;.&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br /&gt;Материал опубликован на сайте mk90.blogspot.com под лицензией Creative Commons Share Alike 3.0&lt;/div&gt;</description><link>http://mk90.blogspot.com/2013/01/nano.html</link><author>noreply@blogger.com (id)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbALRxCT8bfSq0EwVy-pLTLIynahyphenhyphenchfFAtweFfD7_q45q7PrxClHgx3uj9ShnUVj5eTNtmhS3FU6uxWdAWHJ2Ji35id1vAWNWBElcCGTQK15x-7V6nI9lwZy1mUbJoLfVRRPjBovAypzX/s72-c/nano_adapter_r1_1.jpg" height="72" width="72"/><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8944086625767573647.post-235529872753628218</guid><pubDate>Tue, 25 Dec 2012 15:06:00 +0000</pubDate><atom:updated>2012-12-30T19:11:45.339+04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Arduino 1.0 libs</category><category domain="http://www.blogger.com/atom/ns#">Hardware</category><category domain="http://www.blogger.com/atom/ns#">Датчики</category><category domain="http://www.blogger.com/atom/ns#">Начинающим</category><title>IR-приемник на Arduino</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Когда ваше устройство на основе Arduino переходит из фазы прототипизации в реальную жизнь, часто возникают вопросы типа &quot;надо делать корпус&quot; - и все из-за того, что отлично работающие под уютной настольной лампой, от лабораторного источника питания устройства могут не пережить и одной попытки использования в руках ребенка или &quot;отчаянной&quot; домохозяйки. Да я уж и не говорю о рассеянных авторах! ;)&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Один из таких аспектов - дистанционный пульт для исполнительного устройства на основе Arduino. Изготавливать его самостоятельно может оказаться довольно муторным делом - во времена первых советских бытовых компьютеров, например, можно было изготовить самостоятельно &lt;a href=&quot;http://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D0%BC%D0%B1%D1%80%D0%B0%D0%BD%D0%BD%D0%B0%D1%8F_%D0%BA%D0%BB%D0%B0%D0%B2%D0%B8%D0%B0%D1%82%D1%83%D1%80%D0%B0&quot; target=&quot;_blank&quot;&gt;пленочную клавиатуру&lt;/a&gt; или разобрать калькулятор с шикарными герконовыми клавишами. Но теперь, стоит нам оглянуться по сторонам - и на глаза обязательно должен попасться ИК-пульт от какой-то бытовой техники (телевизора, музыкального центра, кондиционера). Если управляемое устройство находится в прямой видимости управляющего - это определенно &lt;strike&gt;возможность схалявить&lt;/strike&gt; наш вариант:&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://mk90.ru/store/ru/sensors/365-ir-.html&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjifoUU2Hc7ksuAnoJmwN0C66nvCn0g3CNlnJmmyGlLMtrdbpVtU0vK2HvafydZHonJNxG6D2tGIwT6z5GJC1Q-_ocFT_qK0uXv9SCozgxUFzNU2jLfICZhr1ERt2EKisplXptUCFcdtBX/s1600/carmp3_1.jpg&quot; height=&quot;336&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;Как грамотно построить схему ИК-приемника?&lt;/b&gt; Начнем с краткой справки по структуре сигнала: обычно, это серия световых импульсов определенной частоты - что-то около 38 кГц. Импульсы по специальным правилам образуют посылки, в которых кодируются команды (проще говоря - каждой кнопке соответствует свой код). Для передачи используется инфракрасный светодиод, для получения - инфракрасный приемник.&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWYCypWLf8HHUx14BWN-J129C1myTkQgE_XcUBEQmEwAIFrMjkgE9aAJBDEsMWRDBAcTr4M5BgJn3Jj53i5cOksdnl00ErpbwCFupRZahi1og-vUgB0VldLrqno6erfl3y1tEh6kpYizsH/s1600/rc5modulation.gif&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWYCypWLf8HHUx14BWN-J129C1myTkQgE_XcUBEQmEwAIFrMjkgE9aAJBDEsMWRDBAcTr4M5BgJn3Jj53i5cOksdnl00ErpbwCFupRZahi1og-vUgB0VldLrqno6erfl3y1tEh6kpYizsH/s1600/rc5modulation.gif&quot; title=&quot;Фрагмент посылки кодом RC5&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
В основе приемника обязательно лежит &lt;i&gt;&lt;b&gt;фотодиод&lt;/b&gt;&lt;/i&gt;: полупроводниковое устройство, реагирующее на свет небольшой ЭДС. Для использования получаемый сигнал надо немного усилить, очистить от помех и демодулировать. Стоит ли говорить, что намного практичнее использовать готовую схему -&amp;nbsp;&lt;b style=&quot;font-style: italic;&quot;&gt;фотоприемник&lt;/b&gt;, который уже&amp;nbsp;включает в себя перечисленные узлы:&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsL0dGmKzccuVpOuTxGSH-eWXSL3pWBtR-9PmgHFGIBgC9g8eVbQEBcU6748C0awINNPdhsjiAmnGsij4gP6S3poVZNAeinYDdiwYK9A_aD3DZ2SD_2C774NPmU6vuaMhj1yhnhU_4fwLz/s1600/shema_ir.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsL0dGmKzccuVpOuTxGSH-eWXSL3pWBtR-9PmgHFGIBgC9g8eVbQEBcU6748C0awINNPdhsjiAmnGsij4gP6S3poVZNAeinYDdiwYK9A_aD3DZ2SD_2C774NPmU6vuaMhj1yhnhU_4fwLz/s1600/shema_ir.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Стоит запомнить, пожалуй, единственный принципиальный момент - от того, насколько соответствуют частоты пульта и приемника, зависит &lt;i&gt;дальность приема&lt;/i&gt;. Иными словами, если излучение модулировано частотой 38 кГц, а фотоприемник по спецификации рассчитан на 36 кГц - все равно &lt;b&gt;будет работать&lt;/b&gt;, только придется ближе подходить ;) Выглядят подобные устройства, например, так:&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://mk90.ru/store/ru/sensors/342-fotopriemnik-tsop4836.html&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNcfW9x6OU5VtK_4qq0c7KBbNUnpgdOyrtBkwsiWCpwYIKaN3aMlB7JDsglqQ_RO1UWZnF8Fxgl-JdTDhWOe1Q1CcrEy2ZrlCOukpL8PCOQ82ngHT2HGDRLQ8M7OmaalMeugtd023xJv1b/s1600/tsop1836_4.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Подключить фотоприемник к Arduino можно с минимальным комплектом деталей:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYVunjd8K9iFufFL3M7SEO834jsvg7lNpeoioaivp32tK4OgKqftTxvfZ7k5DJuQeJjlNMBzWSq50nIT3Cm9IhdfuP89fCLmWH5rg7LWEKVBVuYsqeijUuNmpNTUgVZY7utN9TbZu0pMJL/s1600/shema_ir2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYVunjd8K9iFufFL3M7SEO834jsvg7lNpeoioaivp32tK4OgKqftTxvfZ7k5DJuQeJjlNMBzWSq50nIT3Cm9IhdfuP89fCLmWH5rg7LWEKVBVuYsqeijUuNmpNTUgVZY7utN9TbZu0pMJL/s1600/shema_ir2.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Резистор R1 и емкость C1 нужны для стабилизации питания, подтягивающий резистор опционален (хотя, как вы понимаете, подтягивающий резистор уже есть в Arduino и использовать можно его).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
В качестве библиотеки можно взять вариант от &lt;a href=&quot;http://www.arcfn.com/2009/08/multi-protocol-infrared-remote-library.html&quot; target=&quot;_blank&quot;&gt;Ken Shirriff&lt;/a&gt;, &amp;nbsp;который не только поддерживает форматы NEC, SIRC, RC5, RC6, но и может принимать вообще &quot;сырые&quot; посылки, ни к одному известному коду не относящиеся (и умеет еще много другого, конечно же ;)&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Первым делом надо загрузить в Arduino тестовый скетч IRecvDemo и решительно испытать на нем все необходимые кнопки вашего ИК-пульта, просматривая результат в окне Serial Monitor-а:&lt;/div&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;color: #7e7e7e;&quot;&gt;/*&lt;/span&gt;
&lt;span style=&quot;color: #7e7e7e;&quot;&gt;&amp;nbsp;*&amp;nbsp;IRremote:&amp;nbsp;IRrecvDemo&amp;nbsp;-&amp;nbsp;demonstrates&amp;nbsp;receiving&amp;nbsp;IR&amp;nbsp;codes&amp;nbsp;with&amp;nbsp;IRrecv&lt;/span&gt;
&lt;span style=&quot;color: #7e7e7e;&quot;&gt;&amp;nbsp;*&amp;nbsp;An&amp;nbsp;IR&amp;nbsp;detector/demodulator&amp;nbsp;must&amp;nbsp;be&amp;nbsp;connected&amp;nbsp;to&amp;nbsp;the&amp;nbsp;input&amp;nbsp;RECV_PIN.&lt;/span&gt;
&lt;span style=&quot;color: #7e7e7e;&quot;&gt;&amp;nbsp;*&amp;nbsp;Version&amp;nbsp;0.1&amp;nbsp;July,&amp;nbsp;2009&lt;/span&gt;
&lt;span style=&quot;color: #7e7e7e;&quot;&gt;&amp;nbsp;*&amp;nbsp;Copyright&amp;nbsp;2009&amp;nbsp;Ken&amp;nbsp;Shirriff&lt;/span&gt;
&lt;span style=&quot;color: #7e7e7e;&quot;&gt;&amp;nbsp;*&amp;nbsp;http://arcfn.com&lt;/span&gt;
&lt;span style=&quot;color: #7e7e7e;&quot;&gt;&amp;nbsp;*/&lt;/span&gt;

#include&amp;nbsp;&amp;lt;IRremote.h&amp;gt;

&lt;span style=&quot;color: #cc6600;&quot;&gt;int&lt;/span&gt; RECV_PIN = 11;

&lt;span style=&quot;color: #cc6600;&quot;&gt;IRrecv&lt;/span&gt; irrecv(RECV_PIN);

&lt;span style=&quot;color: #cc6600;&quot;&gt;decode_results&lt;/span&gt; results;

&lt;span style=&quot;color: #cc6600;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;setup&lt;/b&gt;&lt;/span&gt;()
{
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;begin&lt;/span&gt;(9600);
&amp;nbsp;&amp;nbsp;irrecv.&lt;span style=&quot;color: #cc6600;&quot;&gt;enableIRIn&lt;/span&gt;(); &lt;span style=&quot;color: #7e7e7e;&quot;&gt;// Start the receiver&lt;/span&gt;
}

&lt;span style=&quot;color: #cc6600;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;loop&lt;/b&gt;&lt;/span&gt;() {
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;if&lt;/span&gt; (irrecv.&lt;span style=&quot;color: #cc6600;&quot;&gt;decode&lt;/span&gt;(&amp;amp;results)) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;println&lt;/span&gt;(results.value, &lt;span style=&quot;color: #006699;&quot;&gt;HEX&lt;/span&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;irrecv.&lt;span style=&quot;color: #cc6600;&quot;&gt;resume&lt;/span&gt;(); &lt;span style=&quot;color: #7e7e7e;&quot;&gt;// Receive the next value&lt;/span&gt;
&amp;nbsp;&amp;nbsp;}
}

&lt;/pre&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
В результате вы получите некоторую таблицу значений, которую можно использовать уже в скетче исполнительного устройства.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
И, кстати, вызов &lt;b&gt;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;decode&lt;/span&gt;&lt;/b&gt; &amp;nbsp;неблокирующийся. После его вызова управление сразу же возвращается и, таким образом, скетч может работать и &quot;заниматься своими делами&quot;, принимая команды от пульта в фоновом режиме.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Не забудьте также посмотреть самое лучшее в инете описание IR-кодов на страницах &lt;a href=&quot;http://www.sbprojects.com/knowledge/ir/ir.htm&quot; target=&quot;_blank&quot;&gt;SB Projects&lt;/a&gt;.&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br /&gt;Материал опубликован на сайте mk90.blogspot.com под лицензией Creative Commons Share Alike 3.0&lt;/div&gt;</description><link>http://mk90.blogspot.com/2012/12/ir-arduino.html</link><author>noreply@blogger.com (id)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjifoUU2Hc7ksuAnoJmwN0C66nvCn0g3CNlnJmmyGlLMtrdbpVtU0vK2HvafydZHonJNxG6D2tGIwT6z5GJC1Q-_ocFT_qK0uXv9SCozgxUFzNU2jLfICZhr1ERt2EKisplXptUCFcdtBX/s72-c/carmp3_1.jpg" height="72" width="72"/><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8944086625767573647.post-749746366634002868</guid><pubDate>Fri, 21 Dec 2012 16:44:00 +0000</pubDate><atom:updated>2012-12-25T20:46:21.425+04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ArduinoCompatible</category><category domain="http://www.blogger.com/atom/ns#">ArduinoIDE</category><category domain="http://www.blogger.com/atom/ns#">Freeduino</category><category domain="http://www.blogger.com/atom/ns#">Freeduino 32u4</category><category domain="http://www.blogger.com/atom/ns#">Hardware</category><category domain="http://www.blogger.com/atom/ns#">Новости</category><title>ArduinoIDE 1.0.3</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Вышла очередная версия &lt;b&gt;ArduinoIDE 1.0.3&lt;/b&gt;. Самым значимым в списке изменений идет новая плата - &lt;b&gt;Arduino Esplora&lt;/b&gt; (Leonardo-совместимая, на основе ATmega32u4):&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhm0dNvaASnPvq1OWpFYUYxo12aerKhJ9VyJT2wzSuO49fBCexQN6i1T-dlzObxuBS_W0dbEfo8z8Z9dBOy1w_3VgGmOSFax3nYSB37w3OOeQ7m6fp6EnviadFjN-stIM8BbRWF8ulg-RDB/s1600/esplora_top.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhm0dNvaASnPvq1OWpFYUYxo12aerKhJ9VyJT2wzSuO49fBCexQN6i1T-dlzObxuBS_W0dbEfo8z8Z9dBOy1w_3VgGmOSFax3nYSB37w3OOeQ7m6fp6EnviadFjN-stIM8BbRWF8ulg-RDB/s600/esplora_top.jpg&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
В отличие от предыдущих плат, на этой есть &lt;b&gt;сенсоры&lt;/b&gt;: фоторезистор, акселерометр, датчик температуры. Также есть четыре кнопки, аналоговый джойстик, пьезоизлучатель, трехцветный светодиод и линейный потенциометр. Разъемы для стыковки с LCD и несколько входов / выходов тоже присутствуют:&amp;nbsp;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4-73CcYe1_uah4t6J0n4kM25MMsd2w5P4ysqOPX6yYfdRYWxO_SuUAlCbXdfszKaFkZTkJ61N22fagEt8fI_8EvFbXHCNvkA33Mtq09ieCsDhNzEKrGQ-Dcfv6kW7jUEJ_QB5yCICbHMD/s1600/esplora2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4-73CcYe1_uah4t6J0n4kM25MMsd2w5P4ysqOPX6yYfdRYWxO_SuUAlCbXdfszKaFkZTkJ61N22fagEt8fI_8EvFbXHCNvkA33Mtq09ieCsDhNzEKrGQ-Dcfv6kW7jUEJ_QB5yCICbHMD/s600/esplora2.jpg&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Рулить всем этим многообразием помогает &lt;a href=&quot;http://arduino.cc/en/Reference/EsploraLibrary&quot;&gt;Esplora Library&lt;/a&gt;. Вообще, конечно же - это просто &lt;i&gt;мечта&lt;/i&gt; для гаджетоманов-ардуинокопателей, которым не жалко потратить &lt;b&gt;65 USD&lt;/b&gt;. Но перед покупкой все-таки рекомендую пробежаться по &lt;a href=&quot;http://arduino.cc/en/Guide/ArduinoEsplora&quot;&gt;Getting Started With Esplora&lt;/a&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Но вернемся к новой версии ArduinoIDE: нас ожидает пара незначительных&amp;nbsp;фиксов, связанных с Leonardo-совместимыми платами. Один касается бутлоадера, другой - массива digital_pin_to_timer_PGM, описанного в variant-файле.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Первый фикс реализует запуска скетча &lt;i&gt;сразу&lt;/i&gt; после подачи питания (точнее, теперь-то это наконец работает). Что до variant-файла, то там банально восстановили кусок массива, пропавший где-то между версиями 1.0.1 и 1.0.2 - потенциально это могло вызывать фатальные неприятности при попытке включить аппаратный ШИМ на тех пинах, которые такой возможности не имели.&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://mk90.ru/store/ru/microcontrollers/145-freeduino-32u4.html&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;293&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZJr5XblLu3oo6dRloWznSWLuMceGFrScIpffoi6S7QW7IwtfvvPWot9o91ykmHX2S0LWEWrRtFkv77jlth3DTJQTl_jw7Zo8JMd49LroVmnFO4mvQvyv8GFRW7Mazml_DS1QVbCtOm2zQ/s400/freeduino32u4.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Исправления хоть и мелкие, но вполне разумные, поэтому рекомендую владельцам &lt;a href=&quot;http://mk90.ru/store/ru/microcontrollers/145-freeduino-32u4.html&quot;&gt;Freeduino&amp;nbsp;32u4&lt;/a&gt;&amp;nbsp;а)&amp;nbsp;провести обновление&amp;nbsp;поддержки своей платы в ArduinoIDE с помощью нового variant-файла и б) при наличии программатора, прошить новый бутлоадер. Со &lt;a href=&quot;http://mk90.blogspot.ru/2012/06/leonardo.html&quot;&gt;старым бутлоадером Caterina&lt;/a&gt;, естественно, тоже будет работать, но начиная с этого момента во все Leonardo-совместимые контроллеры в нашем магазине по умолчанию будет прошит новый вариант.&amp;nbsp;Так что смело качайте и распаковывайте&amp;nbsp;&lt;a href=&quot;http://mk90.ru/files/source/freeduino32u4-arduino1.0.3.zip&quot;&gt;этот файл&lt;/a&gt; в каталог с установленной ArduinoIDE 1.0.3 (не забудьте ее перезапустить, чтобы изменения актуализировались).&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
В новостях также сообщается и про обновление кода для бутлоадера ATmega8, а также про поддержку скорости 600 бод библиотекой SoftwareSerial.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Словом, типичный релиз под новую плату, в который число случайно вошли несколько изменений.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
И, судя по всему, число клонов &lt;b&gt;Leonardo&lt;/b&gt; будет расти. Взять, например, новую &quot;женскую&quot; плату от Seeedstudio:&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-Sbx921snEqaTdp1NeuhFoEk6lafALLeX4dJFYh6L8H3-Zk8rFfHm1qNSdb9c_JCfASgohtqn7MtfhxtNIa5JsXSEqjIoNgHVPOLvrvyv7s5F0kSCIlQT5nReAaxXdkFsmVC1cnaKIhLT/s1600/fem_seeeduino.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-Sbx921snEqaTdp1NeuhFoEk6lafALLeX4dJFYh6L8H3-Zk8rFfHm1qNSdb9c_JCfASgohtqn7MtfhxtNIa5JsXSEqjIoNgHVPOLvrvyv7s5F0kSCIlQT5nReAaxXdkFsmVC1cnaKIhLT/s600/fem_seeeduino.jpg&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Если &lt;a href=&quot;http://www.seeedstudio.com/blog/2012/12/14/yeahfemale-version-seeeduino/&quot; target=&quot;_blank&quot;&gt;присмотреться&lt;/a&gt;, то видно несколько моментов:&lt;/div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;есть колодки пинов и вилка программирования, так что скорее всего предполагается стыковка с шилд-платами;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;присутствует холдер с батарейкой и переключателем питания - следовательно, возможна автономная работа и трехвольтовое питание платы/схемы;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;на плате - ATmega328P и FT232RL (авторы утверждают, что в продажу пойдет плата &amp;nbsp;именно с ATmega32u4);&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;присутствует пара SMD-светодиодов ;)&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Плата все еще не имеет названия, и если на языке вертится что-то подходящее - напишите им немедленно! ;)&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br /&gt;Материал опубликован на сайте mk90.blogspot.com под лицензией Creative Commons Share Alike 3.0&lt;/div&gt;</description><link>http://mk90.blogspot.com/2012/12/arduinoide-103.html</link><author>noreply@blogger.com (id)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhm0dNvaASnPvq1OWpFYUYxo12aerKhJ9VyJT2wzSuO49fBCexQN6i1T-dlzObxuBS_W0dbEfo8z8Z9dBOy1w_3VgGmOSFax3nYSB37w3OOeQ7m6fp6EnviadFjN-stIM8BbRWF8ulg-RDB/s72-c/esplora_top.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8944086625767573647.post-958644722628629081</guid><pubDate>Sat, 15 Dec 2012 11:32:00 +0000</pubDate><atom:updated>2013-04-14T09:02:43.474+04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Arduino</category><category domain="http://www.blogger.com/atom/ns#">Hardware</category><category domain="http://www.blogger.com/atom/ns#">Software</category><category domain="http://www.blogger.com/atom/ns#">Датчики</category><category domain="http://www.blogger.com/atom/ns#">Температура</category><title>Температура и Влажность</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Из серии статей про &lt;a href=&quot;http://mk90.blogspot.ru/search/label/%D0%A2%D0%B5%D0%BC%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D1%83%D1%80%D0%B0&quot;&gt;измерения температуры&lt;/a&gt;&amp;nbsp;незаслуженно выпал сенсор&amp;nbsp;&lt;b&gt;DHT11&lt;/b&gt;, представляющий собой недорогой цифровой датчик температуры и влажности в одном корпусе:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKH-fPW1C1Mk3Z7Ydj86h-QO1xHYLyhPLHAGmCtsCH5Ej2cdDVOCQ4WnUb1iCpBAsUATjnDlghsZFilXLMLrhROYg965_sQE_iYCmSWse7ymSztNf83Ec7Lu5d-DDWgNkGrNGBf9AnvbfP/s1600/Humidity-and-Temperature-Sensor-DHT11.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKH-fPW1C1Mk3Z7Ydj86h-QO1xHYLyhPLHAGmCtsCH5Ej2cdDVOCQ4WnUb1iCpBAsUATjnDlghsZFilXLMLrhROYg965_sQE_iYCmSWse7ymSztNf83Ec7Lu5d-DDWgNkGrNGBf9AnvbfP/s400/Humidity-and-Temperature-Sensor-DHT11.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
В принципе - &amp;nbsp;одновременно&amp;nbsp;измерять температуру и относительную влажность выглядит логично, поскольку второе напрямую зависит от первого. Стоит только начать работать батареям центрального отопления, как температура в квартире повышается, а вот количество влаги в воздухе - нет, оттого и говорят, что, мол, &quot;батареи сушат воздух&quot;. Правильнее - &quot;нагревают&quot; и, таким образом, понижают относительную влажность.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Насколько важна влажность в помещении? Считается, что &lt;b&gt;оптимум лежит около 50%&lt;/b&gt; - именно при такой влажности растения, люди и животные будут чувствовать себя комфортно. В частности - люди меньше болеют вирусными заболеваниями, а растения не рискуют превратиться в экибану.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Вот так устроен этот датчик внутри (а ведь он заменяет собой целый&amp;nbsp;&lt;a href=&quot;http://ru.wikipedia.org/wiki/%D0%9F%D1%81%D0%B8%D1%85%D1%80%D0%BE%D0%BC%D0%B5%D1%82%D1%80&quot; target=&quot;_blank&quot;&gt;психрометр&lt;/a&gt;):&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_hJdj3gbm_jR4xpHiQ4J80pPybS_hZC05ZrATzdnjyCLkcEYSaVQjFKao3dpQulcROHH2meMZ9wPzr_offdgbLwddH2SEBjdKW1joS66iFadrLuA-F1WVvYWVyr7seRlNATFCvgRT24bZ/s1600/DHT-11_inside_1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_hJdj3gbm_jR4xpHiQ4J80pPybS_hZC05ZrATzdnjyCLkcEYSaVQjFKao3dpQulcROHH2meMZ9wPzr_offdgbLwddH2SEBjdKW1joS66iFadrLuA-F1WVvYWVyr7seRlNATFCvgRT24bZ/s1600/DHT-11_inside_1.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioaNSUCFHseUjho4tAwWlJHClvPObqn82q68zitmQMHTssF8cV35f-dKEB7qasSsg8pYq_5osOjL17wPIJPqRFoEdtT0J5cImiisaRgdxa6vwuWzGfQz-iqVjSFvxTxHFriOBK6u2ZchXB/s1600/DHT-11_inside_2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;203&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioaNSUCFHseUjho4tAwWlJHClvPObqn82q68zitmQMHTssF8cV35f-dKEB7qasSsg8pYq_5osOjL17wPIJPqRFoEdtT0J5cImiisaRgdxa6vwuWzGfQz-iqVjSFvxTxHFriOBK6u2ZchXB/s320/DHT-11_inside_2.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
С одной стороны микроплатки - аналоговый сенсор, с другой - микросхема, оцифровывающая измерения и реализующая интерфейс с MCU.&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Протокол обмена - &lt;i&gt;однопроводный&lt;/i&gt;, по структуре сильно похож на&amp;nbsp;&lt;a href=&quot;http://mk90.ru/store/ru/sensors/43-datchik-temperatury-ds18b20.html&quot; target=&quot;_blank&quot;&gt;DS18B20&lt;/a&gt;, но с важными оговорками:&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;DHT11&lt;/b&gt; не умеет работать в &quot;паразитном&quot; режиме (питание по линии данных);&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;каждый &lt;b&gt;DS18B20&lt;/b&gt; имеет персональный идентификатор, что дает возможность подключения нескольких таких датчиков к одному пину Arduino - у &lt;b&gt;DHT11&lt;/b&gt; такой возможности нет - один датчик будет использовать строго один цифровой пин.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;DHT11&lt;/b&gt; медленнее конвертирует измеренные значения - считывать их можно не чаще, чем раз в секунду. Погрешность у него тоже больше:&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;table border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;th&gt;Показатель&lt;/th&gt;&lt;th&gt;DS18B20&lt;/th&gt;&lt;th&gt;DHT11&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Допустимый диапазон t,°C&lt;/td&gt;&lt;td&gt;-55..+125&lt;/td&gt;&lt;td&gt;0..+50&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Погрешность измерения t, min&lt;/td&gt;&lt;td&gt;±0.5°C@-10..+85°C&lt;/td&gt;&lt;td&gt;±2°C@0..+50°C&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Погрешность измерения t, max&lt;/td&gt;&lt;td&gt;±2°C&lt;/td&gt;&lt;td&gt;±2°C&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Разрешение шкалы t,°C&lt;/td&gt;&lt;td&gt;0.5/0.25/0.125,/0.0625&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Допустимый диапазон RH, %&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;20..95&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Погрешность измерения RH, min&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;±4% +25°C&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Погрешность измерения RH, max&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;±5%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Разрешение шкалы RH, %&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;(для тех, кто склонен путать разрешающую способность и точность: хотя DS18B20 можно настроить таким образом, чтобы он отдавал 12-битные значения с разрешением 0,0625 градуса, его точность не станет лучше 0.5С. Но можно сделать &quot;более живой&quot; дисплей с отображением двух знаков после запятой ;)&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Из характеристик видно невооруженным глазом, что &lt;b&gt;DHT11&lt;/b&gt; практически идеально подходит для жилых помещений и комнатных температур. Если датчик попадает в условия, выходящие за допустимые пределы, он начинает врать (попутно ускорится процесс старения аналогового сенсора), после чего требуется несложный процесс восстановления. Более подробно про это можно прочесть в описании: &lt;a href=&quot;http://mk90.ru/files/datasheets/dht11.pdf&quot; target=&quot;_blank&quot;&gt;DHT11.pdf&lt;/a&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;Как подключить DHT11 к Arduino?&lt;/b&gt;&amp;nbsp;Начнем с расположения его пинов:&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3veDE8Grq3iR87Ai39jESoGyYfAxL4HqvUX7ISdVHJpFIKV-OSXIy2tUEO1D9fvx9AXKLybaQQOKCn42tNMamRnBeMjtMExzxKiqZioZ5KTfhWMroRlrerbWs40dZvVk6J3nHWsGwt66h/s1600/dht11_pins.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;316&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3veDE8Grq3iR87Ai39jESoGyYfAxL4HqvUX7ISdVHJpFIKV-OSXIy2tUEO1D9fvx9AXKLybaQQOKCn42tNMamRnBeMjtMExzxKiqZioZ5KTfhWMroRlrerbWs40dZvVk6J3nHWsGwt66h/s400/dht11_pins.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;i&gt;(третий пин не надо никуда подключать)&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Рекомендуемая схема подключения содержит обязательный для однопроводных линий резистор-подтяжку к VCC и, в качестве опции, рекомендуется конденсатор (фильтр по питанию между VCC и GND):&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDVzR5vQAe3KIElJO9x0Eqp74NlNYMLSI4jlwWd-yY9uXh7_r5kIyJ-AUypUZ75rHrP_wCCQEyVlN7Luk4-tDg3LS9P__hqIcswUklMR22EU1EbFmnG8ALBmgHr6J1WP4OeisEwNqRDLSG/s1600/dht11_mcu.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDVzR5vQAe3KIElJO9x0Eqp74NlNYMLSI4jlwWd-yY9uXh7_r5kIyJ-AUypUZ75rHrP_wCCQEyVlN7Luk4-tDg3LS9P__hqIcswUklMR22EU1EbFmnG8ALBmgHr6J1WP4OeisEwNqRDLSG/s1600/dht11_mcu.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
На макетке это выглядит так (сенсор подключен к цифровому пину D8 платы &lt;a href=&quot;http://mk90.ru/store/ru/microcontrollers/81-freeduino-nano.html&quot;&gt;Freeduino Nano&lt;/a&gt;):&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpWiwkm92FACadgI9xIcNeqOpzbgFljRrWaOjA8R4EjeZWBKUXMBWsoV1DXMaiVwUJVbu8-vFblzwmK6kwPATEiroddZWDHyY3ya4mQCmdAGSHfJ-n0nqNbCHXwHc7dMtJbGdgA71LT0Zn/s1600/freeduino_nano5_dht11.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpWiwkm92FACadgI9xIcNeqOpzbgFljRrWaOjA8R4EjeZWBKUXMBWsoV1DXMaiVwUJVbu8-vFblzwmK6kwPATEiroddZWDHyY3ya4mQCmdAGSHfJ-n0nqNbCHXwHc7dMtJbGdgA71LT0Zn/s1600/freeduino_nano5_dht11.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Кстати, если вам в руки попал &lt;b&gt;DHT11&lt;/b&gt; на небольшой платке, можно подключать его напрямую к Arduino - скорее всего, резистор и конденсатор там уже и так есть:&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMXvYIwyKCvsOn4ogGstsiFIDn3cH1Fgrf04eBO2NKtHKfKl3uGQp6czqDVoMDDiwRA8u-Gr3pAZVr_d8m9XeKkSGsnJo8nvB42l1xoMrCuY0JxYkoQsRpnc7JaEUuCLy4ER2_neEu3vi1/s1600/DHT11_1.600.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMXvYIwyKCvsOn4ogGstsiFIDn3cH1Fgrf04eBO2NKtHKfKl3uGQp6czqDVoMDDiwRA8u-Gr3pAZVr_d8m9XeKkSGsnJo8nvB42l1xoMrCuY0JxYkoQsRpnc7JaEUuCLy4ER2_neEu3vi1/s1600/DHT11_1.600.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Разберемся, как происходит &lt;b&gt;обмен DHT11 с Arduino&lt;/b&gt;. Логически, это представляется такой последовательностью:&lt;/div&gt;
&lt;ol&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;Arduino&lt;/b&gt; запускает считывание показаний, переводя свой пин в режим выхода - как минимум на 18 миллисекунд переводит его в &lt;a href=&quot;http://mk90.ru/wiki/index.php/Constants&quot; target=&quot;_blank&quot;&gt;LOW&lt;/a&gt;, затем на 40 мкс в &lt;a href=&quot;http://mk90.ru/wiki/index.php/Constants&quot; target=&quot;_blank&quot;&gt;HIGH&lt;/a&gt;&amp;nbsp;- и, после этого, переключает его в режим входа;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Через 20..40 мкс &lt;b&gt;DHT11&lt;/b&gt; отвечает подтверждением, также сначала переводя шину в LOW на 80 мкс, а затем в HIGH на 80 мкс;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;DHT11&lt;/b&gt; начинает побитную передачу информации, каждый бит начинается с уровня LOW в течение 50 мкс, и затем HIGH разной продолжительности: если 26-28 мкс, то это ноль, если же 70 мкс - единица;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;По окончании передачи 40 бит информации &lt;b&gt;DHT11&lt;/b&gt; &quot;на прощание&quot; еще раз переводит шину в LOW на 50 мкс и освобождает ее.&lt;/li&gt;
&lt;/ol&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Полученная от &lt;b&gt;DHT11&lt;/b&gt; пачка из 40 бит представляется в виде последовательности из 5 байт следующего содержания:&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Целая часть значения влажности;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Дробная часть значения влажности;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Целая часть значения температуры;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Дробная часть значения температуры;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Контрольная сумма.&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Как всегда, можно воспользоваться готовой &lt;a href=&quot;http://mk90.ru/files/source/arduino_dht11.zip&quot;&gt;библиотекой&lt;/a&gt;, которая считывает показания и вычисляет контрольную сумму для проверки.&amp;nbsp;Что характерно, байты с дробной частью приходят всегда &lt;i&gt;нулевые&lt;/i&gt; - пусть вас это не смущает, так и задумано ;)&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;Примеры использования DHT11 с Arduino&lt;/b&gt;: во-первых, данные можно выводить в последовательный порт и наблюдать на Serial Monitor:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre&gt;#include&amp;nbsp;&amp;lt;dht11.h&amp;gt;

dht11&amp;nbsp;sensor;

#define&amp;nbsp;DHT11PIN&amp;nbsp;8

&lt;span style=&quot;color: #cc6600;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;setup&lt;/b&gt;&lt;/span&gt;()
{
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;begin&lt;/span&gt;(115200);
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;println&lt;/span&gt;(&lt;span style=&quot;color: #006699;&quot;&gt;&quot;DHT11 TEST PROGRAM &quot;&lt;/span&gt;);
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #006699;&quot;&gt;&quot;LIBRARY VERSION: &quot;&lt;/span&gt;);
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;println&lt;/span&gt;(DHT11LIB_VERSION);
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;println&lt;/span&gt;();
}

&lt;span style=&quot;color: #cc6600;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;loop&lt;/b&gt;&lt;/span&gt;()
{
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;println&lt;/span&gt;(&lt;span style=&quot;color: #006699;&quot;&gt;&quot;\n&quot;&lt;/span&gt;);

&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;int&lt;/span&gt; chk = sensor.&lt;span style=&quot;color: #cc6600;&quot;&gt;read&lt;/span&gt;(DHT11PIN);

&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #006699;&quot;&gt;&quot;Read sensor: &quot;&lt;/span&gt;);
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;switch&lt;/span&gt; (chk)
&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;case&lt;/span&gt; DHTLIB_OK: 
         &lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;println&lt;/span&gt;(&lt;span style=&quot;color: #006699;&quot;&gt;&quot;OK&quot;&lt;/span&gt;); 
         &lt;span style=&quot;color: #cc6600;&quot;&gt;break&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;case&lt;/span&gt; DHTLIB_ERROR_CHECKSUM: 
         &lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;println&lt;/span&gt;(&lt;span style=&quot;color: #006699;&quot;&gt;&quot;Checksum error&quot;&lt;/span&gt;); 
         &lt;span style=&quot;color: #cc6600;&quot;&gt;break&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;case&lt;/span&gt; DHTLIB_ERROR_TIMEOUT: 
         &lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;println&lt;/span&gt;(&lt;span style=&quot;color: #006699;&quot;&gt;&quot;Time out error&quot;&lt;/span&gt;); 
         &lt;span style=&quot;color: #cc6600;&quot;&gt;break&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;default&lt;/span&gt;: 
         &lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;println&lt;/span&gt;(&lt;span style=&quot;color: #006699;&quot;&gt;&quot;Unknown error&quot;&lt;/span&gt;); 
         &lt;span style=&quot;color: #cc6600;&quot;&gt;break&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #006699;&quot;&gt;&quot;Humidity (%): &quot;&lt;/span&gt;);
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;println&lt;/span&gt;(sensor.humidity);

&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #006699;&quot;&gt;&quot;Temperature (oC): &quot;&lt;/span&gt;);
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;Serial&lt;/b&gt;&lt;/span&gt;.&lt;span style=&quot;color: #cc6600;&quot;&gt;println&lt;/span&gt;(sensor.temperature);
&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;delay&lt;/span&gt;(2000);
}

&lt;/pre&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLGCd-B06nt8TuxGmx2XABt8njqg-J6oRjqgtHhervkzuzugJq8ztd88pZt0tWpndHk1U4MWswY0WkvLEI4vWf9EZ-Xsd3BE2METz2xwJr2FGPeKkbRKn8iZVf72MqIAhyphenhyphen_irc12IXzSAg/s1600/serial_monitor_dht11.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLGCd-B06nt8TuxGmx2XABt8njqg-J6oRjqgtHhervkzuzugJq8ztd88pZt0tWpndHk1U4MWswY0WkvLEI4vWf9EZ-Xsd3BE2METz2xwJr2FGPeKkbRKn8iZVf72MqIAhyphenhyphen_irc12IXzSAg/s1600/serial_monitor_dht11.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Во-вторых, немного усложнив схему, можно выводить данные на LCD-дисплей:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSxXYHpdCrt2Ws8WAGq9gQhlRvWKjQaOEeMie5XYusHTfzfCELIMoTQUzFTZkQWnTGwEiDR6YIo9rmM0wUNobaAoTqW3Wv0MR7kM8xrkySvQCe8ZRfmS8bh2xdzTvTwjo-9Pqbjj9ql8Nd/s1600/schema.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSxXYHpdCrt2Ws8WAGq9gQhlRvWKjQaOEeMie5XYusHTfzfCELIMoTQUzFTZkQWnTGwEiDR6YIo9rmM0wUNobaAoTqW3Wv0MR7kM8xrkySvQCe8ZRfmS8bh2xdzTvTwjo-9Pqbjj9ql8Nd/s600/schema.png&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGxMjcuNTcY9_dtWjTFosDyOroopa01MBIQp_hpi84H5xdoHaLDrS030WUsLRgtwRahxR5OSrNbtRPe2nankUCt2ordJoXuDs9Ko_zrSo1N1HU9Mef-EkQIBD8hGZMgVYO_0viGI5nlPJg/s1600/wh1602_dht_freeduino.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGxMjcuNTcY9_dtWjTFosDyOroopa01MBIQp_hpi84H5xdoHaLDrS030WUsLRgtwRahxR5OSrNbtRPe2nankUCt2ordJoXuDs9Ko_zrSo1N1HU9Mef-EkQIBD8hGZMgVYO_0viGI5nlPJg/s600/wh1602_dht_freeduino.jpg&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre&gt;#include&amp;nbsp;&amp;lt;&lt;span style=&quot;color: #cc6600;&quot;&gt;LiquidCrystalRus&lt;/span&gt;.h&amp;gt;
#include&amp;nbsp;&amp;lt;dht11.h&amp;gt;

&lt;span style=&quot;color: #cc6600;&quot;&gt;LiquidCrystalRus&lt;/span&gt; lcd(12, 11, 5, 4, 3, 2);
dht11&amp;nbsp;sensor;

#define&amp;nbsp;DHT11PIN&amp;nbsp;8

&lt;span style=&quot;color: #cc6600;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;setup&lt;/b&gt;&lt;/span&gt;() {
&amp;nbsp;&amp;nbsp;lcd.&lt;span style=&quot;color: #cc6600;&quot;&gt;begin&lt;/span&gt;(16, 2);
&amp;nbsp;&amp;nbsp;lcd.&lt;span style=&quot;color: #cc6600;&quot;&gt;clear&lt;/span&gt;();
}

&lt;span style=&quot;color: #cc6600;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #cc6600;&quot;&gt;&lt;b&gt;loop&lt;/b&gt;&lt;/span&gt;() {
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;switch&lt;/span&gt; (sensor.&lt;span style=&quot;color: #cc6600;&quot;&gt;read&lt;/span&gt;(DHT11PIN)) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;case&lt;/span&gt; DHTLIB_OK: 
                &lt;span style=&quot;color: #cc6600;&quot;&gt;break&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;case&lt;/span&gt; DHTLIB_ERROR_CHECKSUM: 
                lcd.&lt;span style=&quot;color: #cc6600;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #006699;&quot;&gt;&quot;Checksum error&quot;&lt;/span&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;delay&lt;/span&gt;(2000);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;return&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;case&lt;/span&gt; DHTLIB_ERROR_TIMEOUT: 
                lcd.&lt;span style=&quot;color: #cc6600;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #006699;&quot;&gt;&quot;Time out error&quot;&lt;/span&gt;); 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;delay&lt;/span&gt;(2000);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;return&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;default&lt;/span&gt;: 
                lcd.&lt;span style=&quot;color: #cc6600;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #006699;&quot;&gt;&quot;Unknown error&quot;&lt;/span&gt;); 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;delay&lt;/span&gt;(2000);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;return&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;lcd.&lt;span style=&quot;color: #cc6600;&quot;&gt;setCursor&lt;/span&gt;(0, 0);
&amp;nbsp;&amp;nbsp;lcd.&lt;span style=&quot;color: #cc6600;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #006699;&quot;&gt;&quot;Влажность,%:&quot;&lt;/span&gt;);
&amp;nbsp;&amp;nbsp;lcd.&lt;span style=&quot;color: #cc6600;&quot;&gt;print&lt;/span&gt;(sensor.humidity);
&amp;nbsp;&amp;nbsp;lcd.&lt;span style=&quot;color: #cc6600;&quot;&gt;setCursor&lt;/span&gt;(0, 1);
&amp;nbsp;&amp;nbsp;lcd.&lt;span style=&quot;color: #cc6600;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #006699;&quot;&gt;&quot;Температура,C:&quot;&lt;/span&gt;);
&amp;nbsp;&amp;nbsp;lcd.&lt;span style=&quot;color: #cc6600;&quot;&gt;print&lt;/span&gt;(sensor.temperature);
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #cc6600;&quot;&gt;delay&lt;/span&gt;(2000);
&amp;nbsp;&amp;nbsp;
}

&lt;/pre&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Куда двигаться дальше?&lt;/b&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
Если стремиться к увеличению точности, можно найти достаточное количество датчиков, наиболее близкие по исполнению -&amp;nbsp;DHT21/22. Они же, соответственно, и более дороги.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Купить &lt;b&gt;DHT11&lt;/b&gt; можно, например, &lt;a href=&quot;http://mk90.ru/store/ru/sensors/362--dht11.html&quot; target=&quot;_blank&quot;&gt;здесь&lt;/a&gt;.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
Ссылки по теме:&lt;br /&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://playground.arduino.cc/Main/DHT11Lib&quot; target=&quot;_blank&quot;&gt;библиотека для Arduino на playground;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/adafruit/DHT-sensor-library&quot; target=&quot;_blank&quot;&gt;альтернативная библиотека от ladyada&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.radiolocman.com/shem/schematics.html?di=112850&quot; target=&quot;_blank&quot;&gt;погодная станция на ATmega8+DHT11&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://mk90.ru/files/source/arduino_dht11.zip&quot;&gt;библиотека+примеры из статьи&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
UPD: &lt;a href=&quot;http://mk90.blogspot.com/2013/04/2.html&quot;&gt;Статья про DHT22&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br /&gt;Материал опубликован на сайте mk90.blogspot.com под лицензией Creative Commons Share Alike 3.0&lt;/div&gt;</description><link>http://mk90.blogspot.com/2012/12/blog-post.html</link><author>noreply@blogger.com (id)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKH-fPW1C1Mk3Z7Ydj86h-QO1xHYLyhPLHAGmCtsCH5Ej2cdDVOCQ4WnUb1iCpBAsUATjnDlghsZFilXLMLrhROYg965_sQE_iYCmSWse7ymSztNf83Ec7Lu5d-DDWgNkGrNGBf9AnvbfP/s72-c/Humidity-and-Temperature-Sensor-DHT11.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8944086625767573647.post-1089824329337864496</guid><pubDate>Tue, 11 Dec 2012 20:35:00 +0000</pubDate><atom:updated>2012-12-12T00:35:14.766+04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ArduinoCompatible</category><category domain="http://www.blogger.com/atom/ns#">Hardware</category><category domain="http://www.blogger.com/atom/ns#">HNYduino</category><category domain="http://www.blogger.com/atom/ns#">Новости</category><category domain="http://www.blogger.com/atom/ns#">Проекты Arduino</category><category domain="http://www.blogger.com/atom/ns#">проекты в Eagle</category><title>Ёлкадуино R2</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Опять наступает декабрь, и снова хочется чего-то новогоднего. Если уважаемый читатель еще не забыл - в прошлом году был &lt;a href=&quot;http://mk90.blogspot.com/2011/12/blog-post.html&quot;&gt;представлен&lt;/a&gt; проект новогоднего Arduino-совместимого дерева &lt;b&gt;HNYduino&lt;/b&gt;. Практически сразу появились замечания и дополнения, и через год родилась версия R2:&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjO4e3YD5bAKJgrtwo_u5x25sP8NQqdlJ8nypAZ6k9GUnbqIbaKs5uG-6vI53LrTsSGTq3KBCNjCRKgigEtqhPWe_tQjj1gEEJByF9nYCgnndlTo_7am3s4770IX1AXoTiD8WxBmcCN8Kly/s1600/hnyduino2_1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjO4e3YD5bAKJgrtwo_u5x25sP8NQqdlJ8nypAZ6k9GUnbqIbaKs5uG-6vI53LrTsSGTq3KBCNjCRKgigEtqhPWe_tQjj1gEEJByF9nYCgnndlTo_7am3s4770IX1AXoTiD8WxBmcCN8Kly/s640/hnyduino2_1.jpg&quot; width=&quot;510&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Из предыдущей версии были унаследованы две &lt;b&gt;74HC595&lt;/b&gt;, к которым подключены по 8 &lt;b&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;зеленых&lt;/span&gt;&lt;/b&gt; и &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;красных&lt;/span&gt;&lt;/b&gt; светодиодов (более подробно об увеличении числа пинов Arduino этим способом я уже &lt;a href=&quot;http://mk90.blogspot.com/2009/12/arduino-1.html&quot;&gt;писал&lt;/a&gt;).&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Но кое-что, конечно же, было изменено.&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEih7ITRxrrERLr0JQ8yCyQyxr1BE_lXXO1tuhz6L-9eSwZnvgwsBer5tYOb5BcjpbTwys7nk_ZeqUNS41SIitrIxWv5pI1KjONHj-5-ns-tttJw1nAM1VFqEluCX9nESioHETXWRBJ73606/s1600/hnyduino2_32u4usb.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEih7ITRxrrERLr0JQ8yCyQyxr1BE_lXXO1tuhz6L-9eSwZnvgwsBer5tYOb5BcjpbTwys7nk_ZeqUNS41SIitrIxWv5pI1KjONHj-5-ns-tttJw1nAM1VFqEluCX9nESioHETXWRBJ73606/s1600/hnyduino2_32u4usb.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Первым делом ATmega328P была заменена на &lt;b&gt;ATmega32u4&lt;/b&gt;, так что можно было бы сразу гордо писать &lt;b&gt;Leonardo-compatible&lt;/b&gt;. Это сразу же добавило возможность и питать, и программировать ёлку напрямую от miniUSB (никаких дополнительных переходников USB-TTL &lt;i&gt;&lt;u&gt;не требуется&lt;/u&gt;&lt;/i&gt;). Возможность батарейного питания по-прежнему сохранена, переключение выполняется при помощи механического переключателя.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXsfcFt53_1iBstCPePVuKW7DoMQu7fBxHI4uEzpO5zMb4dqrmg_QqRHsvfB162RwZjN_-_73CMGF9KxcfQ6xIpp90fY7YcCHs8AftqvGhTwo3-iIlUI_og_v0FOUBygcMoe-18qYoIQSY/s1600/hnyduino2_rgb.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXsfcFt53_1iBstCPePVuKW7DoMQu7fBxHI4uEzpO5zMb4dqrmg_QqRHsvfB162RwZjN_-_73CMGF9KxcfQ6xIpp90fY7YcCHs8AftqvGhTwo3-iIlUI_og_v0FOUBygcMoe-18qYoIQSY/s1600/hnyduino2_rgb.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Расположенные в прежней версии по центру светодиоды убраны, а их место занял &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;трех&lt;/span&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;цвет&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;ный&lt;/span&gt;&lt;/b&gt; пятимиллиметровый светодиод, подключенный к выводам, поддерживающим аппаратный ШИМ - таким образом можно подбирать практически любое сочетание цветов, плавно управляя яркостью через &lt;a href=&quot;http://mk90.ru/wiki/index.php/AnalogWrite&quot;&gt;analogWrite()&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRXr3bF1spzzOgZqeufND3-vhv44FLdtIdwiimcDmTHPePW7FWO0RZ9BHQtqwMcnoWgwDW-2piuW8JTkovR_psOwuudU9o4WQruTj-svwxkAA8wTTWJWYsAaY0CZyLh85cLwzaBFLLbHfh/s1600/hnyduino2_mic.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRXr3bF1spzzOgZqeufND3-vhv44FLdtIdwiimcDmTHPePW7FWO0RZ9BHQtqwMcnoWgwDW-2piuW8JTkovR_psOwuudU9o4WQruTj-svwxkAA8wTTWJWYsAaY0CZyLh85cLwzaBFLLbHfh/s1600/hnyduino2_mic.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Ближе к вершине располагается электретный микрофон, играющий роль &lt;b&gt;датчика звука&lt;/b&gt; (чувствительность настраивается с помощью потенциометра, расположенного с противоположной стороны).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIrcjsUFwCMig8SjVEIOro9XztdDGVrN1R0QrE9DkHw_ZeyYu80NaX5AsKrqupgTsa1wFepQlgQ2bYrEeAYcDlmNPswl8EocI15ImN2TUM1Xx7fkaAG358XNap6es8IqdUx2QNmdkRaZ90/s1600/hnyduino2_res.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIrcjsUFwCMig8SjVEIOro9XztdDGVrN1R0QrE9DkHw_ZeyYu80NaX5AsKrqupgTsa1wFepQlgQ2bYrEeAYcDlmNPswl8EocI15ImN2TUM1Xx7fkaAG358XNap6es8IqdUx2QNmdkRaZ90/s1600/hnyduino2_res.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Выход датчика, кстати, подключен к аналоговому входу &lt;b&gt;A0&lt;/b&gt;.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;text-align: left;&quot;&gt;Количество выводов, которые выведены на подставку сокращено до четырех - оставлены два аналоговых и два цифровых. Кроме них в вашем распоряжении вилка программирования &lt;b&gt;ISP6&lt;/b&gt; и отдельно выведенный &lt;b&gt;UART&lt;/b&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNyRp3pt5k9cnN8hl2Kx5UOSnfPIK1PX2CsgAbreBOS90Rp-duEfU-yvRHTloDJxAYLI_oJsn6R_Lb4FSMA7ViGn9NN3iwvXXMKiuvmry-ob8KOR4_UyLfEtM139rBba789PURz5Ku3wlX/s1600/hnyduino2_uart.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNyRp3pt5k9cnN8hl2Kx5UOSnfPIK1PX2CsgAbreBOS90Rp-duEfU-yvRHTloDJxAYLI_oJsn6R_Lb4FSMA7ViGn9NN3iwvXXMKiuvmry-ob8KOR4_UyLfEtM139rBba789PURz5Ku3wlX/s1600/hnyduino2_uart.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Ну что, скажете &quot;опять ерунда какая-то&quot;? ;)&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Возможно, да. Но при помощи смекалки и навыков программирования Arduino с ее помощью можно сделать что-то забавное, красивое и даже полезное. Важно, в чьих руках она окажется ;)&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Чертежи, схема, библиотека и примеры появятся в самое ближайшее время здесь и в wiki, купить готовый экземпляр можно &lt;a href=&quot;http://mk90.ru/store/ru/microcontrollers/359-hnyduino-r2.html&quot;&gt;здесь&lt;/a&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br /&gt;Материал опубликован на сайте mk90.blogspot.com под лицензией Creative Commons Share Alike 3.0&lt;/div&gt;</description><link>http://mk90.blogspot.com/2012/12/r2.html</link><author>noreply@blogger.com (id)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjO4e3YD5bAKJgrtwo_u5x25sP8NQqdlJ8nypAZ6k9GUnbqIbaKs5uG-6vI53LrTsSGTq3KBCNjCRKgigEtqhPWe_tQjj1gEEJByF9nYCgnndlTo_7am3s4770IX1AXoTiD8WxBmcCN8Kly/s72-c/hnyduino2_1.jpg" height="72" width="72"/><thr:total>5</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8944086625767573647.post-1381189337269611176</guid><pubDate>Sat, 01 Dec 2012 08:15:00 +0000</pubDate><atom:updated>2012-12-08T18:04:39.000+04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Arduino</category><category domain="http://www.blogger.com/atom/ns#">Arduino Due</category><category domain="http://www.blogger.com/atom/ns#">ArduinoIDE</category><category domain="http://www.blogger.com/atom/ns#">Freeduino 32u4</category><category domain="http://www.blogger.com/atom/ns#">Software</category><category domain="http://www.blogger.com/atom/ns#">Новости</category><title>ArduinoIDE 1.0.2</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
В конце октября - начале ноября произошло сразу несколько событий: была официально выпущена в продажу и почти сразу же распродана &lt;b&gt;Arduino Due&lt;/b&gt;, вышла &lt;b&gt;ArduinoIDE 1.5&lt;/b&gt;&amp;nbsp;специально для поддержки этой самой Due, затем вышла &lt;b&gt;ArduinoIDE 1.0.2&lt;/b&gt; - &lt;i&gt;не&lt;/i&gt; поддерживающая Due, но содержащая много полезных фиксов для платы Leonardo.&lt;/div&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;
В октябре David Mellis (один из членов команды Arduino) &lt;a href=&quot;http://arduino.cc/pipermail/developers_arduino.cc/2012-October/007202.html&quot; target=&quot;_blank&quot;&gt;заявил&lt;/a&gt;, что уходит с позиции лидера, уступая ее Cristian Maglie из Торино. Причина банальна - Дэвид хочет сосредоточиться на аспирантуре в MIT Tech Labs, потому что, дескать, четвертый курс уже заканчивается ;) Тем не менее, он продолжает оставаться членом команды и будет принимать участие в подготовке выпуска ArduinoIDE 1.0.2, а вот управлять миграцией на новую 1.5 уже предстоит Кристиану (тем более, что он и так уже довольно много труда положил на поддержку Due).&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Про версию 1.5 было отдельно&amp;nbsp;&lt;a href=&quot;http://arduino.cc/blog/2012/10/22/arduino-1-5-support-for-the-due-and-other-processors-easier-library-installation-simplified-board-menu-etc/&quot; style=&quot;text-align: left; white-space: pre-wrap;&quot; target=&quot;_blank&quot;&gt;написано в блоге Arduino&lt;/a&gt;, и если кратко, то нас ждет:&lt;/div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Поддержка любых микроконтроллеров и тулчейнов. Сейчас есть только Due - Atmel SAM3X, однако в скором времени туда будут добавлены все существующие AVR-платы, а на перспективу - можно будет добавлять вообще любые платы;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Автоматизация установки библиотек - их по-прежнему можно добавлять вручную, но теперь можно просто указать zip-файл, который ArduinoIDE послушно распакует и запихнет в то место, которое ему и предназначается (sketchbook/libraries), а затем добавит в список поддерживаемых библиотек;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Пересмотрено распухшее меню выбора платы, в итоге оно будет двухуровневым. Первый уровень - тип платы, второй - установленный на ней микроконтроллер.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Скачать и попробовать в действии новую версию (на момент написания статьи она уже добралась до 1.5.1) можно здесь - &lt;a href=&quot;http://arduino.cc/en/Main/SoftwareDue&quot;&gt;arduino.cc/en/Main/SoftwareDue&lt;/a&gt;.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Релиз ArduinoIDE 1.0.2 получился в каком-то смысле эпохальным - завершена работа над добавлением Leonardo, все недочеты поддержки&amp;nbsp;ATmega32u4&amp;nbsp;в ядре&amp;nbsp;наконец-то вылечены:&lt;/div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;теперь функция &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;tone()&lt;/span&gt; работает (а не вешает MCU, как это было раньше);&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;заработали прерывания;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;исправлена работа входящего буфера данных, получаемых от USB (через CDC);&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;вылечено некорректное поведение функции &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;write()&lt;/span&gt;;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;починен неработающий обмен с SD-картой во встроенной библиотеке SD.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Поэтому, рекомендую всем владельцам &lt;a href=&quot;http://mk90.ru/store/ru/microcontrollers/145-freeduino-32u4.html&quot;&gt;Freeduino 32u4&lt;/a&gt; обновить ArduinoIDE до 1.0.2 в &lt;i&gt;обязательном&lt;/i&gt; порядке.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Кстати, вышла новая официальная плата на ATmega32u4, разработанная совместно с ladyada -&amp;nbsp;&lt;b&gt;Arduino Micro&lt;/b&gt;:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXIujHrumM4EqBzeuu3kE9Ryr4xvSSKAv-banE77T8jvaSuxmsUN4MoNl_J29Vqnogb-S7dMls41CweIaICYPl5FuulouRHHyha_eINFu6Z0APA4j34Vr3L3EyHqm7ZuSzFkdZFpNpykgG/s1600/1086_LRG.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXIujHrumM4EqBzeuu3kE9Ryr4xvSSKAv-banE77T8jvaSuxmsUN4MoNl_J29Vqnogb-S7dMls41CweIaICYPl5FuulouRHHyha_eINFu6Z0APA4j34Vr3L3EyHqm7ZuSzFkdZFpNpykgG/s600/1086_LRG.jpg&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiaVFF3QeHzRWBRwF35fUJl0xlwDcVcCBkWV9tkpeom0xfu5yjLrL8SmsdHbd6VOiP6k1HDJEMAAk8Gjl4JEGJhUiZ2yv_5-MjWPASNb6hqwZg7zVCT9-xEh7FJBaSqANbGjJjxhFy0n6Bb/s1600/1086back_LRG.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiaVFF3QeHzRWBRwF35fUJl0xlwDcVcCBkWV9tkpeom0xfu5yjLrL8SmsdHbd6VOiP6k1HDJEMAAk8Gjl4JEGJhUiZ2yv_5-MjWPASNb6hqwZg7zVCT9-xEh7FJBaSqANbGjJjxhFy0n6Bb/s600/1086back_LRG.jpg&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Кроме нее, в списке можно обнаружить LilyPad с USB, но это не новая плата ;) а лишь обозначение &amp;nbsp;для LilyPad, к которому подключили USB-TTL конвертер.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Об остальных изменениях можно прочитать &lt;a href=&quot;http://arduino.cc/en/Main/ReleaseNotes&quot; target=&quot;_blank&quot;&gt;здесь&lt;/a&gt;. Есть такие нововведения как, например, автоматическое обнаружение и вывод в &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;print()&lt;/span&gt; ситуаций переполнения (ovf), бесконечности (inf) и неопределенности (nan). &amp;nbsp;Но, к счастью, нет ничего такого, что заставило бы править существующие скетчи, поэтому можно пока перевести дух ;)&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br /&gt;Материал опубликован на сайте mk90.blogspot.com под лицензией Creative Commons Share Alike 3.0&lt;/div&gt;</description><link>http://mk90.blogspot.com/2012/12/arduinoide-102.html</link><author>noreply@blogger.com (id)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXIujHrumM4EqBzeuu3kE9Ryr4xvSSKAv-banE77T8jvaSuxmsUN4MoNl_J29Vqnogb-S7dMls41CweIaICYPl5FuulouRHHyha_eINFu6Z0APA4j34Vr3L3EyHqm7ZuSzFkdZFpNpykgG/s72-c/1086_LRG.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8944086625767573647.post-3224138460596503408</guid><pubDate>Mon, 12 Nov 2012 07:27:00 +0000</pubDate><atom:updated>2012-11-12T11:27:35.780+04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ARM</category><category domain="http://www.blogger.com/atom/ns#">Hardware</category><category domain="http://www.blogger.com/atom/ns#">Netduino</category><category domain="http://www.blogger.com/atom/ns#">Tutorials</category><title>Апгрейдим Netduino</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Перед тем, как пройти процедуру апгрейда прошивки в Netduino, несколько слов о структуре firmware, надо которым мы собираемся надругаться.&lt;br /&gt;
&lt;br /&gt;
Оно состоит из двух фрагментов:&lt;br /&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;b&gt;TinyBooter&lt;/b&gt; -&amp;nbsp;бутлоадер;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;TinyCLR&lt;/b&gt; -&amp;nbsp;.NET Micro Framework runtime.&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Бутлоадер запускается сразу после включения питания, грузит TinyCLR, который, в свою очередь - запускает ваше приложение из flash-памяти.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Итак, сначала надо найти интересующую прошивку, например в &lt;a href=&quot;http://wiki.netduino.com/Firmware.ashx&quot; target=&quot;_blank&quot;&gt;wiki&lt;/a&gt;. Важно скачать именно тот вариант, который относится к вашему типу платы (т.е. прошивки для Netduino и Netduino Plus отличаются).&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Если требуется апдейтить &lt;i&gt;&lt;u&gt;только&lt;/u&gt;&lt;/i&gt; TinyCLR (еще это называют minor-апдейтом, то есть незначительными исправлениями), используют утилиту &lt;b&gt;MFDeploy&lt;/b&gt; (ее можно найти через меню &quot;Пуск&quot;: .Net Micro Framework SDK | Tools). После запуска установите в боке &lt;b&gt;Device&lt;/b&gt; USB и Netduino_netduino и нажмите &lt;b&gt;Ping&lt;/b&gt;:&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjoLmEF8nAxXkzwkJtCBORDtJvgAX663XIuh-jsijmxBIU9d8V2diczRLecksrInwfPdPYbGN-FkbCMJ1cLYzpJ2vstQAPwAjpbNTG8_GCzVsOi6BX2sPzhS-0yCBYdB4G112xCuX8Feve/s600/mfdeploy_1.jpg&quot; width=&quot;600&quot; /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Как видите, если устройство подключено, оно должно откликнуться и хоть что-то сообщить. Чтобы получить более подробную информацию о выбранном устройстве, используйте команду &lt;b&gt;Device Capabilities&lt;/b&gt; (Ctrl+Shift+C), там можно разглядеть текущую прошитую версию TinyCLR:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiR7jJzHsT6XwtzskpDTqJJsrbyKTAYU53RZPW83flsYSxcEW_FpQhx10hAxYfWOR8WbI5uJAFMdrIp67U08VkyK_9CaIyJuyWgzkQJpZ9x1laGsbR0th8MSA_mB7_csemYepG0B7iO1uQL/s600/mfdeploy_2.png&quot; width=&quot;600&quot; /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;div&gt;
Если Netduino все-таки не отзывается, нажмите расположенную на нем кнопку сброса, и, не отпуская, переподключите плату к шине (отключите, а потом снова воткните в USB - после 20 секунд плата войдет в специальный failsafe-режим), при этом на Ping она будет отвечать &quot;TinyBoot&quot;.&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Теперь в боксе &lt;b&gt;Image File&lt;/b&gt; надо выбрать файлы для прошивания. Обычно их два - ER_CONFIG и ER_FLASH. Можете добавить сразу оба, после этого можно нажать &lt;b&gt;Deploy&lt;/b&gt;.&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_q3crKVW2fotCT57YoyfzZ-z9XrUSDW9evNSVNy8PtqoN9ev6-xFYqHdbQEwOSbYMoiDgl12wMZ-Mio87OvFSkoDizRF2rO4nnny70ilWW041Bes9ri70s4wJqzCfZL80HbdpW6qvh2s5/s600/mfdeploy_4.png&quot; width=&quot;600&quot; /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Дождитесь завершения процесса и еще раз нажмите&amp;nbsp;Ctrl+Shift+C - &amp;nbsp;информация с номерами прошивок должна измениться.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Для более значимых апгрейдов (например, с 4.1 до 4.2) требуется замена &lt;b&gt;TinyBooter&lt;/b&gt;. В этом случае надо прибегнуть к фирменной атмеловской утилите &quot;SAM-BA CDC&quot; (можно &lt;a href=&quot;http://www.atmel.com/tools/ATMELSAM-BAIN-SYSTEMPROGRAMMER.aspx&quot; target=&quot;_blank&quot;&gt;скачать бесплатно&lt;/a&gt; с сайта ATMEL, правда придется заполнить несложную регистрационную форму), но для начала надо полностью похерить содержимое флеш-памяти:&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOa90951o6vDmFCwDX0qxFfwSIZG0cHF06sI0F2Cl7IR5Y7Cux1CAHWKItII1ceuT199mKc8vRnzld5lDbHJHhfIQnVhVouijiCZWLS3a4KjnAVQLmE7u1kbTS-PwbKrILUIsjqL1R-692/s1600/erasepad.jpg&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Подключите Netduino к источнику питания, затем соедините &lt;b&gt;Erase Pad&lt;/b&gt; (небольшая токопроводящая площадочка рядом с пином D0) с питанием +3.3В на более чем полсекунды. Готово! Если и было там какое-то firmware, то теперь оно стерто.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Переподключите плату - теперь вы увидите в списке устройств неизвестное устройство &amp;nbsp;c VID=03EB и PID=6124. Если указать мастеру установки поискать драйвера в папке инсталлированной атмеловской утилиты, должен установиться виртуальный последовательный порт (запомните его номер!):&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjclB_54IBV_57WTnPUl93EOa8oB2_OWTfsZQ8SKOxV3BoBsczq3sNL_AodVFx8vie32iaFes-lJa_XGeUwbois3RP3NIBT5u5ZCi2Y685xUbdfxeRj4STbskphQ-rvOPtaCcZNMLESgw0q/s1600/dev_man_91sam.png&quot; /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Самое время запустить SAM-BA-CDC Tool, выбрать номер свежеустановленного последовательного порта, тип платы &quot;at91sam7x512-ek&quot; и нажать Connect:&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUgJaqB9nEPENgkKBTsOmi6aNYgt616odSoqRya8tt9fgu23jCP-XQeiFmxLFPToGgD-6bCM6FtDjTvvfw4rluIlINX4DvqnuMzoHCxzpK2Kljv4bTNK7aq5ZrvqVzBUeF3ZEwd6UKQT3O/s600/sam-ba-1.12-util.png&quot; width=&quot;600&quot; /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Теперь последовательно проделаем следующие действия:&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Выберите в выпадающем списке &lt;b&gt;Scripts&lt;/b&gt; &quot;Boot from Flash (GPNVM2)&quot;, затем нажмите кнопку Execute;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Выберите там же &quot;Enable Flash Access&quot;, затем опять нажмите Execute;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Выберите файл для зашивания (кнопка рядом с полем &lt;b&gt;Send File Name&lt;/b&gt;), выберите файл TinyBooterDecompressor.bin;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Нажмите &lt;b&gt;Send File&lt;/b&gt; и подождите завершения (всего пара секунд);&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;В окне с вопросом о залочивании областей (lock regions) откажитесь - ответьте No;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;По желанию, можно проверить записанный файл - поправьте размер файла в поле size (receivedfile) путем добавления 2-3 нулей в конце и нажмите &quot;Compare sent file with memory&quot;. Должно появиться &quot;match&quot;.&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
После этого можно закрыть&amp;nbsp;&amp;nbsp;SAM-BA-CDC Tool и переподключить Netduino к источнику питания - новый TinyBooter будет ожидать загрузки нового TinyCLR, как это делать - см. выше.&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
От себя добавлю - после обновления до .Net Micro Framework 4.2 все мои нарекания по работе с Visual Studio исчезли. Только не забудьте после апгрейда выбрать в свойствах проекта .Net целевую версию 4.2, иначе Deploy вашего приложения из студии будет завершаться неуспехом:&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLBtRJT3ajvE0AUkFUklPbGow0th3viLRfJVyVqpGzfnwZU6GFURikH-OVNP_UuVbOVwKJw2P8IoSM4mUIuXP6ZMM9EIYc1GzqV7wE5-wEFMwjtEKaH-R6S0vcw3ThMjntKFBesQNkPKt7/s600/properties.png&quot; width=&quot;600&quot; /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Ну и вот ради чего все это было проделано ;) Пошаговая отладка великолепно работает в виртуальной машине:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; height=&quot;414&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8cZOiqDkFBhlah4z6ahRAqKTyMcm5oD-XdPW9iVVlqUwRrjboS26oaGzwi6Ud60cyBuw-FhHgnfQAmeO1tqBuVeG07hrx-lMUkKiyt0yFdeLEenHujaSHY7gZEV3zWNlZU-CEsHBXmqJ9/s600/debugging.png&quot; width=&quot;600&quot; /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br /&gt;Материал опубликован на сайте mk90.blogspot.com под лицензией Creative Commons Share Alike 3.0&lt;/div&gt;</description><link>http://mk90.blogspot.com/2012/11/netduino.html</link><author>noreply@blogger.com (id)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjoLmEF8nAxXkzwkJtCBORDtJvgAX663XIuh-jsijmxBIU9d8V2diczRLecksrInwfPdPYbGN-FkbCMJ1cLYzpJ2vstQAPwAjpbNTG8_GCzVsOi6BX2sPzhS-0yCBYdB4G112xCuX8Feve/s72-c/mfdeploy_1.jpg" height="72" width="72"/><thr:total>3</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8944086625767573647.post-904109196589388054</guid><pubDate>Fri, 05 Oct 2012 11:18:00 +0000</pubDate><atom:updated>2012-10-05T15:18:34.452+04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Arduino</category><category domain="http://www.blogger.com/atom/ns#">Arduino Due</category><category domain="http://www.blogger.com/atom/ns#">Hardware</category><category domain="http://www.blogger.com/atom/ns#">Новости</category><title>Скоро Due!</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Вот и прошел очередной &lt;a href=&quot;http://www.engadget.com/tag/maker+faire&quot; target=&quot;_blank&quot;&gt;Maker Faire&lt;/a&gt; в Нью-Йорке, и появились первые слухи по поводу даты входа Arduino Due. Вот что &lt;a href=&quot;http://www.engadget.com/2011/09/19/arduino-brings-the-new-goods-to-maker-faire-new-york-welcomes/&quot; target=&quot;_blank&quot;&gt;пишет Engadget&lt;/a&gt;:&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;background-color: white; color: #444444; font-family: georgia; font-size: 14px; line-height: 19px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;i&gt;&lt;span style=&quot;font-family: georgia; line-height: 19px;&quot;&gt;The Due is roughly the size of the Mega 2560, but swaps the 16MHz, 8-bit processor found in your standard issue Arduino for a 96MHz Cortex-M3. Predictably, the Due is a much more capable development platform, and could easily replace multiple AVR-based Arduinos in products like&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://www.engadget.com/tag/diydrones&quot; style=&quot;color: #00bdf6; font-family: georgia; line-height: 19px; outline: none; text-decoration: none;&quot;&gt;DIY Drones&lt;/a&gt;&lt;span style=&quot;font-family: georgia; line-height: 19px;&quot;&gt;&#39; UAVs. The Due isn&#39;t expected ship till at least November in large quantities, but preview boards are currently being handed out to select developers.&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
То есть, в народ она пойдет где-то &lt;b&gt;после ноября&lt;/b&gt;, есть и спецификации (взято &lt;a href=&quot;http://hackadaycom.files.wordpress.com/2012/10/due.pdf&quot;&gt;отсюда&lt;/a&gt;):&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFaJqPCzkFWAiH6vGSA6ZcTZkbePhLeZOxThfzGJoCbrjYB2hFQrBFRne3Wh4kZ8GVPfcyBu_uOzE9Qf_wO29o67hQkq8ywa45U36gJpnTlMO10XvK9U6pi8cpeMJmIWRmj6pVrynguIjT/s1600/due.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFaJqPCzkFWAiH6vGSA6ZcTZkbePhLeZOxThfzGJoCbrjYB2hFQrBFRne3Wh4kZ8GVPfcyBu_uOzE9Qf_wO29o67hQkq8ywa45U36gJpnTlMO10XvK9U6pi8cpeMJmIWRmj6pVrynguIjT/s600/due.jpg&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br /&gt;Материал опубликован на сайте mk90.blogspot.com под лицензией Creative Commons Share Alike 3.0&lt;/div&gt;</description><link>http://mk90.blogspot.com/2012/10/due.html</link><author>noreply@blogger.com (id)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFaJqPCzkFWAiH6vGSA6ZcTZkbePhLeZOxThfzGJoCbrjYB2hFQrBFRne3Wh4kZ8GVPfcyBu_uOzE9Qf_wO29o67hQkq8ywa45U36gJpnTlMO10XvK9U6pi8cpeMJmIWRmj6pVrynguIjT/s72-c/due.jpg" height="72" width="72"/><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8944086625767573647.post-1593445842866676200</guid><pubDate>Mon, 24 Sep 2012 08:52:00 +0000</pubDate><atom:updated>2012-09-25T12:54:41.345+04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ArduinoCompatible</category><category domain="http://www.blogger.com/atom/ns#">Hardware</category><title>TinyDuino</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Казалось бы, куда еще развивать тему с &lt;a href=&quot;http://arduino.cc/en/Main/ArduinoBoardLilyPad&quot; target=&quot;_blank&quot;&gt;LilyPad&lt;/a&gt;, но попытки улучшить идею продолжаются. На этот раз - в сторону еще большей миниатюризации в проекте &lt;a href=&quot;http://tiny-circuits.com/products/tinyduino/&quot; target=&quot;_blank&quot;&gt;TinyDuino&lt;/a&gt;.&lt;/div&gt;
&lt;br /&gt;
&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyXNiMbVuFIuex5YmJPFUGZO_KnjBww41OasBHixmohEAg9SjnzLQGenim9kXyQdDD4QlsnlilgnAvnEI77iXn1PA_FRBg6TD1g0Cy-44x1BCaXsSgwTmGi6D1Cw5qBs2QhmREKq2uSWKb/s1600/ASM2001_Sq_Top.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyXNiMbVuFIuex5YmJPFUGZO_KnjBww41OasBHixmohEAg9SjnzLQGenim9kXyQdDD4QlsnlilgnAvnEI77iXn1PA_FRBg6TD1g0Cy-44x1BCaXsSgwTmGi6D1Cw5qBs2QhmREKq2uSWKb/s320/ASM2001_Sq_Top.png&quot; width=&quot;280&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSVTxAaMNxtv2m7ctxj7iT6hwT8nGxvmhrFmpF-kIKHBgyjFJl58X5qyYTc78Hi_rvCjslzQqcSuuht-89YIRHPw8UyNI4SYOi1j6CxtN49hnDZS73GTfgLjHSdHyWu6A1PGBU-YEGoO3-/s1600/ASM2001_Sq_Bottom.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSVTxAaMNxtv2m7ctxj7iT6hwT8nGxvmhrFmpF-kIKHBgyjFJl58X5qyYTc78Hi_rvCjslzQqcSuuht-89YIRHPw8UyNI4SYOi1j6CxtN49hnDZS73GTfgLjHSdHyWu6A1PGBU-YEGoO3-/s320/ASM2001_Sq_Bottom.png&quot; width=&quot;280&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
Название: &lt;b&gt;TinyDuino&lt;/b&gt;&lt;br /&gt;
Процессор: &lt;b&gt;ATmega328P-MU&lt;/b&gt;&lt;br /&gt;
Тактовая частота: &lt;b&gt;8 МГц&lt;/b&gt;&lt;br /&gt;
Совместимость с ArduinoIDE: &lt;b&gt;&lt;span style=&quot;color: lime;&quot;&gt;да&lt;/span&gt;&lt;/b&gt;, требуется USB-TTL&lt;br /&gt;
Совместимость с Shield-платами: &lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;собственный стандарт шилдов&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
Авторы: &lt;a href=&quot;http://tiny-circuits.com/&quot; target=&quot;_blank&quot;&gt;TinyCircuits&lt;/a&gt;&lt;br /&gt;
Страница проекта: &lt;a href=&quot;http://tiny-circuits.com/products/tinyduino/&quot;&gt;http://tiny-circuits.com/products/tinyduino/&lt;/a&gt;&lt;br /&gt;
Дата первого упоминания: &lt;b&gt;22.08.2012&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
На фото - основная плата &lt;b&gt;TinyDuino Processor Board&lt;/b&gt;.&amp;nbsp;Из интересных особенностей я бы отметил возможность питания от литиевой батареи, с автовыбором источника (можно припаять на тыльную сторону разъем-холдер):&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE5sVdR98ME8VmQvmDoUijIyhREwpgZNH82RrnFCG2IQbHOg9J0hnSsttng-gFn7NlC7LcfOoMiQIwj8p9OZVGumarXjYcLLiB16oM4ERqssbHRU3uBa03h8ZNGZNiibtU92bISmhX6kKL/s1600/coin_cell.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE5sVdR98ME8VmQvmDoUijIyhREwpgZNH82RrnFCG2IQbHOg9J0hnSsttng-gFn7NlC7LcfOoMiQIwj8p9OZVGumarXjYcLLiB16oM4ERqssbHRU3uBa03h8ZNGZNiibtU92bISmhX6kKL/s400/coin_cell.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Если на плату подано внешнее напряжение питания +5В, питание будет осуществляться от него, и только при его пропадании - от батарейки.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgma3z7g8CfGMNbWRssT8Qipdmy4X7Il8hRT_GSZ62JOIJAfRu8xOceBf79OjwOliWI2ZRH7v7CBdKb0theO_yrZ0TNa3d22jnAihNmO-UWlEyvX-lxZb9pZCb8EkIEbH4ukoUkkVRXu1z6/s1600/ASM2001_schematic.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgma3z7g8CfGMNbWRssT8Qipdmy4X7Il8hRT_GSZ62JOIJAfRu8xOceBf79OjwOliWI2ZRH7v7CBdKb0theO_yrZ0TNa3d22jnAihNmO-UWlEyvX-lxZb9pZCb8EkIEbH4ukoUkkVRXu1z6/s1600/ASM2001_schematic.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Другая особенность - все пины ATmega выведены на миниатюрную двурядную колодку:&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfdtX0uTQ7bjyqvDI5NkgZoDCiML4a9jvsfoz2XQ-SCB9ujjfdlLSYuprJnCh-7u0p72NyiM6ix3qI9zLDq5Ia2oX5WwiUFH7370LBlPKiaHScGOakySYrBOfnLfdlTJbi3S7E3Y0SUHtk/s1600/ASM2001_expansion.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfdtX0uTQ7bjyqvDI5NkgZoDCiML4a9jvsfoz2XQ-SCB9ujjfdlLSYuprJnCh-7u0p72NyiM6ix3qI9zLDq5Ia2oX5WwiUFH7370LBlPKiaHScGOakySYrBOfnLfdlTJbi3S7E3Y0SUHtk/s1600/ASM2001_expansion.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Что характерно, есть и три неиспользуемых контакта (для организации схем между шилдами - RSV0..2).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
И, конечно же, для TinyDuino есть свои TinyShield-ы. Например, для подключения USB и программирования есть &lt;b&gt;TinyShield USB &amp;amp; ICP&lt;/b&gt;:&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiqxwGYOJKmThUnPKIvrav6cA9tXw9NqTUgMzbeXvB9rd_LrkuyZePHzb9rqIgWOsgO_uzzHI7uSb6nISPuRSP43LuclQZMrSF9ybRWVX9VTvoEwGgPcyXOOq9oBjBHl5E4zV4DZf3HH3U/s1600/ASD2101_top.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiqxwGYOJKmThUnPKIvrav6cA9tXw9NqTUgMzbeXvB9rd_LrkuyZePHzb9rqIgWOsgO_uzzHI7uSb6nISPuRSP43LuclQZMrSF9ybRWVX9VTvoEwGgPcyXOOq9oBjBHl5E4zV4DZf3HH3U/s320/ASD2101_top.png&quot; width=&quot;280&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGO9TvA2rMVf3RBiXZ7i8cFGi2mk1BkiRrs2YGIks3le8c_PX1OaI4IygOnOtLrt0oizNVFZ9ac1ZKuQzjdrwucZHJiB2K8yQyR05MR9rtO2h6ykuNlwwZK3l8OCJR7fBO1M25PKcPEadx/s1600/asd2101_bottom.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGO9TvA2rMVf3RBiXZ7i8cFGi2mk1BkiRrs2YGIks3le8c_PX1OaI4IygOnOtLrt0oizNVFZ9ac1ZKuQzjdrwucZHJiB2K8yQyR05MR9rtO2h6ykuNlwwZK3l8OCJR7fBO1M25PKcPEadx/s320/asd2101_bottom.png&quot; width=&quot;280&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Идея &lt;a href=&quot;http://mk90.blogspot.com/search/label/lol&quot;&gt;LoL-shield&lt;/a&gt;, реализованная для полноразмерных Arduino, существует и здесь, в виде &lt;b&gt;TinyShield 16 Edge LEDs&lt;/b&gt; (с помощью пяти пинов управляем 16-ю светодиодами):&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSpKXuExoL8gvfwjhjZskGfnbp1IX0_jjrdZY6A9iubq6RQ113I458FpbTkUrfFLCmSjsW-45awznE-9GhmC9hekW3UlX78f7DfaXTDSJGHvFeOc2sKkwsw8lSNnXSdZwuNuoSg0qukpT7/s1600/asd2411_top.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSpKXuExoL8gvfwjhjZskGfnbp1IX0_jjrdZY6A9iubq6RQ113I458FpbTkUrfFLCmSjsW-45awznE-9GhmC9hekW3UlX78f7DfaXTDSJGHvFeOc2sKkwsw8lSNnXSdZwuNuoSg0qukpT7/s400/asd2411_top.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
Если размер 20x20 мм все-таки великоват, есть и &lt;b&gt;TinyLily&lt;/b&gt; - совсем миниатюрная LilyPad:&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Ее диаметр - всего &lt;b&gt;14 мм&lt;/b&gt;, и именно поэтому наружу по краю выведено только по четыре цифровых и аналоговых пина (зато уже не так страшно стирать! Все-таки она в 12 раз меньше оригинального LilyPad ;) В спецификациях процессорной платы указано, что она по умолчанию сконфигурирована на &lt;b&gt;8 МГц&lt;/b&gt;, однако внешнего резонатора ни на фото, ни по схеме не видно. Следовательно, используется внутренняя RC-цепочка, которая хоть и доступна для калибровки, однако сильно зависит от напряжения питания и температуры окружающей среды (не очень удачное решение для носимых на одежде устройств).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj90nhRlmXMKn4mzISEBqMj9Ac0RtEUKRHMOPBUy1yxzhOfM_6NNfgisaX7_aWXJTXl0fn28BXv2_msMfA-BtsZPsh8O_i829LZzwOdSGQV6FPZGL8-Tm6C9cQ-4e7qPAz13OZix_TfwaPJ/s1600/asm2101.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj90nhRlmXMKn4mzISEBqMj9Ac0RtEUKRHMOPBUy1yxzhOfM_6NNfgisaX7_aWXJTXl0fn28BXv2_msMfA-BtsZPsh8O_i829LZzwOdSGQV6FPZGL8-Tm6C9cQ-4e7qPAz13OZix_TfwaPJ/s320/asm2101.png&quot; width=&quot;280&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxngVvfF9zmTNmpgI23NIFztLpjMND4o_hM2oMZ60HhEqNI76k-AK87HSdz-I6x4IFz7xCw087Mtc3V6Q6wRL_oH1kndvyjW-T8yghR9KdpJTWMZMWzaYX06_LOQOGFCmyt9_TemYmElpK/s1600/asm2101_top.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxngVvfF9zmTNmpgI23NIFztLpjMND4o_hM2oMZ60HhEqNI76k-AK87HSdz-I6x4IFz7xCw087Mtc3V6Q6wRL_oH1kndvyjW-T8yghR9KdpJTWMZMWzaYX06_LOQOGFCmyt9_TemYmElpK/s320/asm2101_top.png&quot; width=&quot;280&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;
Проект TinyDuino чем-то напомнил&amp;nbsp;&amp;nbsp;мне&amp;nbsp;советские &lt;i&gt;микромодули&lt;/i&gt; - в те времена уже начали задумываться о миниатюризации схемы и была предпринята попытка делать их на типовых элементах в виде модулей на пластинке размером примерно 10x10 мм. Это позволяло достигнуть плотности монтажа аж до 20 элементов в 1 см3, но как таковое не прижилось - к концу 60-х годов их вытеснили более надежные и технологичные интегральные схемы, а затем добили микросхемы ;)&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiT4-Zsg5Qx45jelHfM2hemk1CZhEqQ5s1YJpnJbcyHPcwhF0e7K7J9Ua3hnmjUJ7sV_yJRTUcB5kOGzhrg9pDB9J6KGil6hjB9YkWAzVOI270TsSuH1Cn-SSBNyBnrxyv-a-bJ1Fh_8bNm/s1600/1303-26.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiT4-Zsg5Qx45jelHfM2hemk1CZhEqQ5s1YJpnJbcyHPcwhF0e7K7J9Ua3hnmjUJ7sV_yJRTUcB5kOGzhrg9pDB9J6KGil6hjB9YkWAzVOI270TsSuH1Cn-SSBNyBnrxyv-a-bJ1Fh_8bNm/s320/1303-26.jpg&quot; width=&quot;117&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJJ-yfeUbd-3Aje28ppWh9PYHW-z-glCwVLIpOM61csGs1N1WfAWs7FHJkC6hqZLRuLNZQO6c9pkOByOfHcqdXvnc5Q1yxf7ogFGbl9rvC-KQWLwSCCqZvS0FBwxeWSSsFOuutevJdy6En/s1600/stacked_tinyduino.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJJ-yfeUbd-3Aje28ppWh9PYHW-z-glCwVLIpOM61csGs1N1WfAWs7FHJkC6hqZLRuLNZQO6c9pkOByOfHcqdXvnc5Q1yxf7ogFGbl9rvC-KQWLwSCCqZvS0FBwxeWSSsFOuutevJdy6En/s1600/stacked_tinyduino.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Тем не менее, радиолюбители со стажем могут гордо продемонстрировать внукам эдакую диковину - усилитель или триггер по размеру и форме напоминающий палец ;) Станет ли такой же диковиной TinyDuino через несколько лет? Время покажет, а пока ребята собирают через &lt;a href=&quot;http://www.kickstarter.com/projects/kenburns/tinyduino-the-tiny-arduino-compatible-platform-w-s&quot; target=&quot;_blank&quot;&gt;kickstarter&lt;/a&gt; деньги на начало массового производства. Если идея нравится - помогите &amp;nbsp;им осуществить задуманное материально, они в долгу не останутся ;)&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br /&gt;Материал опубликован на сайте mk90.blogspot.com под лицензией Creative Commons Share Alike 3.0&lt;/div&gt;</description><link>http://mk90.blogspot.com/2012/09/tinyduino.html</link><author>noreply@blogger.com (id)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyXNiMbVuFIuex5YmJPFUGZO_KnjBww41OasBHixmohEAg9SjnzLQGenim9kXyQdDD4QlsnlilgnAvnEI77iXn1PA_FRBg6TD1g0Cy-44x1BCaXsSgwTmGi6D1Cw5qBs2QhmREKq2uSWKb/s72-c/ASM2001_Sq_Top.png" height="72" width="72"/><thr:total>0</thr:total></item></channel></rss>