На каком языке пишутся программы для автомобилей

Программирование предусматривает разнообразные языки. Все они в той или иной степени имеют преимущества и недостатки, используются для конкретных целей. Многие слышали о LUA. Эта статья как раз и будет посвящена этому языку программирования.

Язык программирования – это…

Язык программирования – некий перечень формальных правил и принципов, используемых при написании контентна. Общий язык помогает коммуникации людей, а упомянутый термин относится к устройствам и программному обеспечению.

Язык программирования – способ «общения»:

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

В зависимости от выбранного варианта можно весьма легко создавать программы, приложения, игры и даже писать веб-страницы.

LUA – что это такое

Луа – язык программирования, в основе которого лежат скрипты. Называется скриптовым. Используется для того, чтобы создавать бизнес-логику утилит.

Десятый шаг в робототехнику. Выбор языка программирования и среды программирования для контроллера.

Относится к мультипарадигменным. Lua обладает неплохой поддержкой декларативного стиля создания программного обеспечения. Написан на C. Язык был представлен миру в 1993 году в качестве самостоятельной разработки.

Немного истории

LUA изначально разработан Роберто Иерусалимши, Вальдемаром Селесом и Луисом Энрике. Изначально «средство» было представлено программным обеспечением, интегрируемым кодификациями на C и иных «традиционных» языках. За счет этого разработчики могли значительно ускорить процесс создания собственных утилит.

Прародителями LUA считаются SOL и DEL. С самых первых дней обладал открытый исходный код. Это значит, что в развитии оного имеет право поучаствовать каждый желающий. Выделился тем, что основан в Бразилии, которая на рынке IT-разработок практически не фигурировала.

Текущая версия языка – 5.4.0. Вышло во второй половине 2020 года. Активно используется в IT-областях и бизнесе.

Преимущества и недостатки

У языка LUA есть сильные и слабые стороны. Изучить оные необходимо перед тем, как приступать к обучению соответствующему способу «общения» с ПО и устройствами.

О сильных сторонах

  1. Портатируемость. Утилиты, написанные на Луа, неплохо переносятся с Windows на Linux и другие операционные системы.
  2. Количество библиотек. Их очень много. Большинство представлены на официальном сайте LUA. Предлагаемые библиотеки подходят для решения основной массы задач, стоящих перед пользователями.
  3. Право на добавление собственных библиотек. Достигается за счет открытого исходного кода. Добавляемые библиотеки должны быть разработаны на C.
  4. Синтаксис. LUA – простой язык, который читается без каких-либо проблем. Осваивается быстро даже новичками в IT-области.
  5. Адаптивность. Программное обеспечение, написанное на Луа, занимает меньше памяти на задействованных устройствах.

Это – компактный мультиплатформенный язык, который легко «настроить под себя».

Что пишут на языке программирования C#

О слабых сторонах

Но, как и любой другой язык, LUA имеет некоторые изъяны:

  1. Выступает в качестве скриптового. Это значит, что часто применяется совместно с другими языками.
  2. Для полноценного применения разработчику необходимо знать дополнительно 2-3 programming languages.
  3. Не всегда быстро работает.

Профессионалы раньше считали, что данный вариант подходит лишь для мелких проектов. Частично данное заверение правильно. Связано это с тем, что LUA относится к модульным языкам. Но посредством их сочетания нередко удается добиться колоссальных результатов.

Перспективы

Сейчас на передовой линии находится разработка игр. Луа для этих целей – не лучшее решение. Индекс Tiobe показывает, что данный вариант находится на позиции под номером 30.

Соответствующее явление связано с тем, что language обычно применяется в сочетании с другими «способами общения» и создания ПО. Луа задействуют преимущественно для того, чтобы решать отдельные задачи. Только через него создать хорошую игру не получится.

При трудоустройстве LUA-разработчики нередко сталкиваются с проблемами. Лишь некоторые компании действительно набирают таких работников. В подобных местах возможна конкуренция.

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

Как можно использовать

Вот несколько направлений, в которых иногда пригодится Луа:

  • разработка игрового контента;
  • создание сценариев для автономного программного обеспечения;
  • интернет-сценарии;
  • расширения и дополнительных софт БД;
  • создание систем безопасности.

Разработка обычно требует применения одного или нескольких иных языков программирования. Иначе контент окажется не слишком функциональным.

Окружающая среда

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

Локальная

Чтобы провести настройку локальной среды, требуется обеспечить наличие на задействованном устройстве:

  • текстового редактора;
  • компилятор;
  • интерпретатор.

Далее все перечисленные компоненты будут рассмотрены более подробно. Информация предназначена преимущественно для новичков.

Редактор текста

Он требуется для того, чтобы осуществлять запись программного кода утилиты. Воспользоваться можно любым известным текстовым редактором. Примеры:

  • «Блокнот» в Windows;
  • команда «Редактирование операционной системы»;
  • VIM;
  • Epsilon.

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

Создаваемые здесь документы – исходные файлы, содержащие непосредственный код приложения. Для рассматриваемого «способа общения» актуально расширение .lua.

Немного об интерпретаторе

Интерпретатор – программное обеспечение небольшого размера, которое позволит набирать команды Lua и сразу же выполнять. Помогает останавливать выполнение файла при обнаружении ошибок.

Подойдет любой доступный интерпретатор Луа.

А что там с компиляторами

Компилятор – специализированное программное обеспечение. Его знают все программисты и разработчики. Так называются утилиты, которые обрабатывают исходный код и преобразовывают его в машинный.

Компиляция позволяет исполнить имеющуюся кодификацию, проверить ее работоспособность и наличие ошибок. Для работы с Луа и его дальнейшим внедрением в другой язык программирования потребуется компилятор, совместимый с интерфейсами оных.

Для Windows

Для того, чтобы работать с Луа в Windows, был создан специальный компилятор – SciTE. Чтобы его «поставить» в Виндовс, потребуется выполнить следующие манипуляции:

  1. Открыть официальный сайт SciTE.
  2. Переключиться в раздел загрузки.
  3. Выбрать желаемый файл и его версию.
  4. Дождаться завершения операции.
  5. Активировать исполняемый файл.
  6. Завершить манипуляции, следуя подсказкам на экране.

В ходе описанных действий пользователь получит LUA IDE. Действия можно проводить через командную строчку. Тогда предварительно осуществляется инициализация MinGW. Там происходит компиляция и установка для Windows.

Для Linux

Linux – операционная система, которая стала пользоваться в последние годы определенным спросом. Хороший бесплатный конкурент коммерческим операционным системам. Но работать с ней «рядовому» пользователю бывает трудно.

Для сбора LUA потребуется открыть командную строку Линукс и выполнить следующую кодификацию:

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

Читайте также:
Когда была создана первая программа для отправки электронной почты по сети
Для MacOS

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

Компилятор Луа здесь собирается при помощи команды такого типа:

Последняя строчка не является обязательной. Пользователь при помощи нее сможет провести тестирование «среды».

IDE

Для Windows SciTE IDE Lua является IDE изначально предусмотренной разработчиками «способа общения». Для других платформ можно использовать альтернативное программное обеспечение от ZeroBrane Studio.

Без установки

Изучение рассматриваемого варианта создания контента – это рассмотрение основных его особенностей и функций. Компилятор здесь стоит далеко не на самом последнем месте.

Если требуется проверить работу небольшой программы, можно не задумываться над установкой компилятора. Подобное ПО находится в свободном доступе в Сети.

Пример — этот и этот сайты. Здесь можно программировать и проверять имеющиеся кодификации в режиме реального времени. Отличительной чертой такого подхода является его компактность и кроссплатформенность.

Синтаксис

Для того, чтобы программировать на LUA, важно изучить его синтаксис. Возможна работа в нескольких режимах:

  • интерактивном;
  • по умолчанию.

Записывать текст допустимо в свободном формате. Команды предусматривают разделение пробелом. Иногда для реализации поставленной задачи ставят точку с запятой (символ).

Лексика

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

Рассматривая лексику, стоит запомнить следующие данные:

  1. Основной алфавит – это английский язык. Люди, хорошо его знающие, быстрее остальных разберутся в командах.
  2. Строковые литералы могут использовать символы из иных ЯП.
  3. Идентификаторы включают в себя: буквы, цифры, подчеркивание. Не могут начинаться с цифр.
  4. Нельзя в качестве идентификатора использовать вариант ключевого слова.
  5. Программеры рекомендуют отказаться от идентификаторов, начинающихся с подчеркивания.

Последний момент обоснован тем, что подобные «нестандартные» символы применяются на практике для системных задач.

Выше приведены слова, которые не применяются в процессе присваивания имен.

Типы данных

Язык, который мы изучаем — вариант с неявным динамическим обозначением типов информации. Переменная будет содержать значение того или иного вида. Значение выступает в роли аргумента, если осуществляется вызов функции. После этого оные отправляются на исходные позиции в виде результата.

Предусматриваются следующие типы данных:

  1. Булево. Boolean. Это – истина и ложь.
  2. Nil – постой элемент. Указывает на отсутствие пригодного значения.
  3. Число. Number. Это тип данных, представленный теми или иными числами. В основном вещественными.
  4. Строка – string. Используется для того, чтобы описать символьные массивы. Преимущественно применяются 8-битные символы. Строки являются константами – они не меняются ни при каких обстоятельствах. Функции – полноправные объекты, позволяющие присваивать и передавать в параметрах интересующую информацию.
  5. Thread. Тип, предусматривающий сопрограммы.
  6. Userdata. Требуется для получения внешних сведений, полученных из других programming language.

Углубленное изучение можно провести позже. В качестве «базы» предложенные сведения являются достаточными.

Присваивание

В качестве оператора присваивания выступает символ «равно». Здесь допускается параллельное присваивание, как и в иных ЯП. Можно составлять выражения типа:

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

Табличные дела

Таблицы – это динамические ассоциативные массивы. Представлены парами «ключ-значение» в больших объемах. Единственный составной тип информации. Лежат в основе всех пользовательских БД.

Может наблюдаться следующее:

  • Ключи представлены литералами.
  • В виде ключа допускается применение любого значения, исключая nil.
  • Если nil записывается в элементы, манипуляция будет рассматриваться в качестве удаления соответствующего объекта.
  • Создание – как и массивы, но в виде значений принимаются целые числа компонентов в множестве.
  • Списки – это массивы двухэлементных массивов, хранящий значения и ссылки на иные компоненты.

Также стоит обратить внимание на то, что при многомерных массивах чаще всего встречается реализация по типу «массив массивов». Многогранные и сложные составляющие реализовываются посредством таблиц. Как именно – зависит от поставленной перед разработчиком задачи.

Метатаблицы

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

Важно запомнить следующее:

  1. Метатаблица своими свойствами напоминает обычную таблицу с возможностью соответствия всем правилам и нормам.
  2. Отвечает за хранение разнообразных метаданных типов и объектов. Здесь хранятся сведения, связанные с опциями и параметрами типов/объектов ЯП.
  3. Используемые материалы могут применяться через интерпретатор, расширяя функциональные возможности ПО.
  4. Может быть связана со значениями любого типа.
  5. Допускается применение всех метаметодов для арифметических манипуляций.

Рассматриваемый ЯП позволяет организовывать реализацию арифметики любых имеющихся объектов. Для этого осуществляется работа со стандартными и библиотечными метаметодами (через специальные библиотеки).

Особенности реализации

Изучение любого ЯП – это обучение базовым навыкам и принципам работы выбранного варианта. При должной подготовке и на начальных порах все это не доставит никаких существенных хлопот. Главное значить, с чего начинать.

Реализация Луа предусматривает:

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

Обработка кода происходит так:

  1. Пользователь пишет кодификацию.
  2. Происходит обработка оной компилятором и преобразование в байт-коды.
  3. Виртуальная машина запускает байт-коды.
  4. Последние не выступают в виде команды сетевой машины – они рассматриваются как команды виртуального процессора с разнообразными регистрами.

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

Если есть ошибки

Выучить язык программирования LUA – это не значит, что кодификации будут функционировать без ошибок. Корректировки иногда необходимы даже контенту от опытных разработчиков. Главное вовремя обнаружить проблемное место и внести те или иные изменения.

Если при обработке программной кодификации в процессе компиляции обнаруживается ошибка (или если исполняется ее часть), система передаст управление хосту. Последний сможет увидеть ошибку и предпринять определенные меры. Пример – сообщить об обнаруженной неполадке.

Как получить образование и лучше разбираться в ЯП

Выучить ЯП можно несколькими способами. Все зависит от того, чего именно хочет добиться пользователь:

  1. Обращение в ВУЗ. Вариант для тех, кто выпустился из школы и хочет полноценно работать программистом. Отнимает много средств, времени и сил. По выпуску выдается диплом государственного образца. Здесь затрагиваются самые известные ЯП.
  2. Поступление в техникум. Отличное начало для старта в мире разработки. Обучение длиться меньше, чем в ВУЗе. По выпуску студент получит диплом о среднем профессиональном образовании. Этот документ поможет при поступлении в ВУЗ. Здесь достаточно много практики, но большинство ЯП не затрагиваются.
  3. Самообразование. Никаких документов, подтверждающих знания, не будет. Человек полностью самостоятельно старается познать ЯП. Зато такой подход может не требовать вообще никаких вложений – в Сети полно необходимой информации и туториалов. Часто самообразование используется людьми с хорошим самоконтролем. Позволяет больше практиковаться и полностью собственными силами контролировать процедуру обучения.

Но самым современным, простым и эффективным вариантом является обучение на специализированных курсах для новичков и продвинутых разработчиков. Там объяснят, что такое for i, как работать с компиляторами и многое другое. Обучение длится до года. В конце выдается электронный сертификат.

Читайте также:
Программа для создания и обработки электронных таблиц имеет название

Хотите освоить современную IT-специальность? Огромный выбор курсов по востребованным IT-направлениям есть в Otus!

Источник: otus.ru

Понимание языков программирования IEC61131-3

Понимание языков программирования IEC61131-3

Сложность программного обеспечения, возможности PLC/PAC и возможность портировать программный код являются ключевыми факторами при выборе языка программирования контроллера. Около 120 лет назад Марк Твен сказал «есть несколько способов снять шкуру с кошки». Это клише все еще актуально в мире программирования контроллеров.

Благодаря IEC (International Electrotechnical Commission, МЭК — Международная Электротехническая Комиссия) появились пять наиболее часто используемых стандартных языков программирования, которые в настоящее время используются для разработки программного обеспечения контроллеров. IEC – это организация, которая разрабатывает и публикует международные стандарты для всех технологий, связанных с электрикой и электроникой, включая контроллеры.

Долго считавшиеся чисто европейским феноменом, языки программирования контроллеров IEC получают распространение в Соединенных Штатах. IEC разработала данные стандарты программирования, реагируя на увеличивающееся количество разработчиков систем автоматизации, возрастающую сложность приложений, и множество методов реализации функций управления.

Многие инженеры в области АСУ ТП интересуются возможностями каждого языка программирования. В каких случаях предпочесть тот или иной язык? Какие преимущества и недостатки каждого? В данной статье содержится краткий обзор и сравнение каждого из пяти основных языков программирования контроллеров.

Язык релейно-контактных схем (LD)

Этот язык программирования, изобретенный в США десятилетия назад, получил наиболее широкое распространение. Изначально изобретенный для замены логических схем, выполненных на релейной технике, язык релейно-контактных схем является базовым в США на сегодняшний день, и применяется в 95% всех приложений. Визуально этот язык напоминает последовательность цепей управления, в которой все входы должны быть установлены в значение «истина» для активации одного или нескольких выходов.

Язык релейно-контактных схем получил такое широкое распространение, потому что на нем могут писать практически все программисты в любой стране.

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

Этот язык напоминает последовательность цепей управления, в которой все входы должны быть установлены в значение «истина» для активации одного или нескольких выходов.

Рис. 1. Этот язык напоминает последовательность цепей управления, в которой все входы должны быть установлены
в значение «истина» для активации одного или нескольких выходов.

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

На языке релейно-контактных схем затруднительно реализовывать более сложный функционал ПЛК (программируемый логический контроллер, англ.: PLC), сохраняя парадигму легкой визуализации и понимания. Такие функции как ПИД-регулирование, тригонометрия и анализ данных в приложении реализовать трудно. Другой сложностью является то, что по мере роста объема программы, ее становится сложно читать и интерпретировать, если нет подробнейшей документации. Наконец, реализация полного процесса управления на языке релейно-контактных схем может быть чрезвычайно трудным.

Источник: www.proasutp.com

ESP8266. Начало работы, особенности

В этом уроке поговорим о микроконтроллере ESP8266 и платах на его основе. Как с ними работать и чем они отличаются от Arduino на базе МК AVR. ESP8266 – китайский микроконтроллер за 2 доллара с большим объемом памяти и WiFi связью на борту. Официальная документация:

  • https://github.com/esp8266/Arduino/blob/master/doc/reference.rst
  • https://arduino-esp8266.readthedocs.io/en/latest/

Купить на Aliexpress

Дёшево купить Wemos Mini можно тут: ссылка, ссылка, ссылка. Рекомендуется брать версию как слева на картинке выше, на базе полного чипа ESP-12.

Уроки по работе с esp8266

Конкретные уроки по работе с платой и WiFi библиотеками публикуются на сайте набора GyverKIT, так как уроки на этом сайте являются общими по программированию Arduino, без углубления в сторонние библиотеки.

Характеристики

  • Напряжение питания: 3.3V (2.5-3.6V)
  • Ток потребления: 300 мА при запуске и передаче данных, 35 мА во время работы, 80 мА в режиме точки доступа
  • Максимальный ток пина – 12 мА.
  • Flash память (память программы): 1 МБ
  • Flash память (файловое хранилище): 1-16 МБ в зависимости от модификации
  • EEPROM память: до 4 кБ
  • SRAM память: 82 кБ
  • Частота ядра: 80/160 МГц
  • GPIO: 11 пинов
  • ШИМ: 10 пинов
  • Прерывания: 10 пинов
  • АЦП: 1 пин
  • I2C: 1 штука (программный, пины можно назначить любые)
  • I2S: 1 штука
  • SPI: 1 штука
  • UART: 1.5 штуки
  • WiFi связь

Начало работы

Для работы с платами на основе esp8266 нужно установить ядро и драйвер.

  • Идём в Файл/Настройки/Дополнительные ссылки для менеджера плат. Вставляем ссылку https://arduino.esp8266.com/stable/package_esp8266com_index.json.
  • Инструменты/Плата/Менеджер плат…, ищем в поиске esp8266 и устанавливаем. В списке плат появится семейство плат на базе esp8266.
  • На большинстве плат стоит USB конвертер CH340, как на всех китайских Ардуинах. Если вы ещё не устанавливали драйвер – читать здесь.

Настройки платы

Для работы с любой платой (даже самодельной) можно выбрать пункт Generic esp8266, будет доступен полный набор настроек. Для работы с Wemos Mini выбираем LOLIN Wemos D1 R2 mini. Настроек станет меньше, а к пинам платы можно будет обращаться в программе по их подписям на плате (Dn). Основные настройки:

  • Upload speed: скорость загрузки прошивки. Можно смело поднимать до 921600.
  • CPU Frequency: частота тактирования процессора. Для большинства задач хватит стандартных 80 МГц. На 160 МГц будет работать шустрее, но могут быть сбои.
  • Flash Size: распределение памяти, настройка имеет вид xMB (FS:xMB OTA:~xKB). Размер памяти под программу не меняется – это всегда 1 МБ.
  • Первое число: полный объём микросхемы памяти (в основном 4MB, на Wemos и NodeMCU стоят такие).
  • Второе число: объём под файловое хранилище.
  • Третье число: объём под OTA (обновление по воздуху) – всегда меньше 1 МБ.
  • Что выбрать? У Wemos самый ходовой – первый вариант: 4MB (FS:2MB OTA:~1019KB).
  • DOUT: медленный, но совместим со всеми модификациями esp8266.
  • QIO: более быстрый, но будет работать не на всех чипах.
  • Only Sketch: стереть только программу.
  • Sketch + WiFi Settings: стереть программу и настройки WiFi (логин-пароль последнего подключения и т.д.).
  • All Flash Contents: полностью очистить память.

Нумерация пинов

У самого чипа esp8266 все выводы пронумерованы цифрами. На распиновке они подписаны как GPIOn, где n – номер. На плате (NodeMCU, Wemos Mini) пины подписаны как Dn и эти номера не совпадают с номерами GPIO! При работе например с Wemos можно использовать как нумерацию выводов GPIO ( digitalWrite(5, LOW) ), так и D-нумерацию пинов на плате ( digitalWrite(D1, LOW) ) – если выбрана плата Wemos. Новички очень часто в этом путаются, будьте внимательны. Также GPIO1 и GPIO3 подписаны на плате как TX и RX, по этим названиям к ним тоже можно обращаться ( digitalWrite(TX, LOW) ).

Читайте также:
Экземпляр программы установка Mac OS поврежден

Особенности пинов

У esp8266 много системных пинов, с которыми нужно быть очень внимательным.

  • К целому ряду пинов подключена внешняя Flash память, в общем случае их использовать нельзя (если очень нужно – ищите информацию). На плате NodeMCU визуально гораздо больше пинов, чем на Wemos Mini, но по факту “безопасных” для использования пинов там ровно столько же.
  • С оставшимися пинами тоже не всё гладко: некоторые из них требуют наличия определенного логического уровня на момент включения микроконтроллера (подача питания, перезагрузка). Если к этим пинам подключить что-то, дающее противоположный сигнал – esp не запустится. Вот распиновка с нужным уровнем сигнала при запуске:
  • На плате (NodeMCU, Wemos и других) эти пины уже подтянуты резисторами к нужному напряжению, поэтому нужно несколько раз подумать, что вы к ним подключаете и как оно повлияет на напряжение на пине. Например, можно подключить энкодер, он прижмёт системный пин к GND и esp не запустится.
  • На GPIO16/D0 нельзя подключать прерывания ( attachInterrupt() ) и включать ШИМ сигнал ( analogWrite() ).
  • Максимальный ток с GPIO – 12 мА.
  • Светодиод LED_BUILTIN находится на пине GPIO2 и его поведение инвертировано: при подаче LOW он включается и наоборот.
  • При старте контроллера почти все пины делают скачок до высокого уровня, подробнее – в этой статье. Единственными “спокойными” пинами являются D1 (GPIO5) и D2 (GPIO4). Если контроллер управляет напрямую какими-то железками (реле, транзистор, или является “кнопкой” для другого устройства), то лучше использовать именно эти пины!
  • На этих же пинах сидит I2C, но шину можно переназначить на любые другие пины через Wire.begin(sda, scl) .

Особенности работы WiFi

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

  • Автоматически в конце каждой итерации loop()
  • Внутри любого delay()
  • Внутри функции yield()

Если у вас есть участки программы, которые долго выполняются, то нужно разместить вызовы yield() до и после тяжёлых блоков кода. Также в чужих скетчах можно встретить delay(0) , по сути это и есть yield() .

По тем же причинам не рекомендуется использовать задержку delayMicroseconds() более чем на 20’000 мкс.

Отличия от AVR Arduino

Деление на 0

В отличие от AVR, деление на 0 приводит к критической ошибке и перезагрузке микроконтроллера. Стараемся этого избегать.

min() и max()

В ядре esp8266 функции min() и max() реализованы как функции, а не как макросы, поэтому должны использоваться с данными одного типа. Использование переменных разного типа приведёт к ошибке компиляции.

map()

В функции map(val, min, max, to min, to max) нет защиты от деления на 0, поэтому если min равен max – микроконтроллер зависнет и перезагрузится. Если min и max задаются какими-то внешними условиями – проверяйте их равенство вручную и исключайте вызов map() с такими аргументами.

Типы данных

  • Тип int является синонимом long ( int32_t ) и занимает 4 байта. В AVR int это int16_t , то есть 2 байта.
  • Тип char является синонимом byte – принимает значения 0.. 255 в отличие от -128.. 127 в AVR.
  • Тип double имеет полную двойную точность – 8 байт. В AVR это 4 байта.
  • Указатель занимает 4 байта, так как область памяти тут 32-битная. В AVR – 2 байта.

Функция analogRead()

ESP8266 имеет крайне убогий одноканальный АЦП.

  • Сам АЦП в esp8266 может измерять напряжение в диапазоне 0.. 1.0V. На платах (NodeMCU, Wemos Mini) стоит делитель напряжения, который расширяет диапазон до более удобных 3.3V.
  • Разрешение – 10 бит, т. е. значения 0.. 1023 как на Arduino
  • Частый вызов analogRead() замедляет работу WiFi. При вызовах чаще нескольких миллисекунд WiFi полностью перестаёт работать.
  • Результат analogRead() имеет кеширование до 5 мс, то есть полученные данные могут запаздывать на это время.
  • АЦП может использоваться для измерения напряжения питания МК: для этого нужно вызвать ADC_MODE(ADC_VCC); до void setup() , а само напряжение питания можно получить из ESP.getVcc() .

Функция analogWrite()

  • Работает на всех пинах, кроме GPIO16.
  • Разрядность ШИМ по умолчанию 8 бит (0.. 255) на версиях ядра 3.x. На ранних версиях – 10 бит (0.. 1023). Скажем спасибо индусам за совместимость.
  • Разрядность можно настроить в analogWriteResolution(4. 16 бит) .
  • Частоту можно настроить в analogWriteFreq(100.. 40000 Гц) .

Аппаратные прерывания

  • Настраиваются точно так же, через attachInterrupt() .
  • Работают на всех пинах, кроме GPIO16.
  • Функция-обработчик должна быть объявлена с атрибутом IRAM_ATTR :

void setup() < attachInterrupt(1, myIsr, RISING); >IRAM_ATTR void myIsr()
Либо с ICACHE_RAM_ATTR (на старых версиях ядра), вот так:
void ICACHE_RAM_ATTR myIsr() < >void setup()

Функция yield()

В реализации esp8266 функция yield() выполняет другую задачу и использовать её как на AVR не получится. Скажем спасибо индусам за совместимость

EEPROM

EEPROM в esp8266 является эмуляцией из Flash памяти, поэтому мы можем выбрать нужный размер.

  • Перед началом работы нужно вызвать EEPROM.begin(4.. 4096) с указанием размера области памяти в байтах.
  • Для применения изменений в памяти нужно вызвать EEPROM.commit() .
  • В некоторых версиях SDK отсутствует EEPROM.update() и EEPROM.length() .
  • У Flash памяти небольшой ресурс – всего около 10’000 перезаписей. У фирменной памяти Winbond (можно найти на некоторых моделях ESP-12 и прочих) – около 50’000 перезаписей.

В остальном работа с библиотекой EEPROM.h ничем не отличается.

Важно: EEPROM реализован следующим образом: после запуска EEPROM.begin(4.. 4096) содержимое EEPROM указанного размера дублируется в оперативной памяти. После любого изменения и вызова EEPROM.commit() стирается весь блок Flash памяти (4 кБ) и записывается заново. Таким образом ресурс “EEPROM” памяти у ESP вырабатывается довольно быстро и весь сразу, а не по ячейкам.

Serial (UART)

  • В отличие от реализации для AVR, можно изменить размер буфера на приём: Serial.setRxBufferSize(размер) в байтах. Вызывать перед Serial.begin() , по умолчанию 256 байт.
  • Можно настроить работу только на приём или только на отправку для освобождения пина: Serial.begin(скорость, SERIAL_8N1, режим) , где режим:
  • SERIAL_TX_ONLY – только отправка
  • SERIAL_RX_ONLY – только приём
  • SERIAL_FULL – приём и отправка (по умолчанию)

Полезные страницы

  • Набор GyverKIT – большой стартовый набор Arduino моей разработки, продаётся в России
  • Каталог ссылок на дешёвые Ардуины, датчики, модули и прочие железки с Aliexpress у проверенных продавцов
  • Подборка библиотек для Arduino, самых интересных и полезных, официальных и не очень
  • Полная документация по языку Ардуино, все встроенные функции и макросы, все доступные типы данных
  • Сборник полезных алгоритмов для написания скетчей: структура кода, таймеры, фильтры, парсинг данных
  • Видео уроки по программированию Arduino с канала “Заметки Ардуинщика” – одни из самых подробных в рунете
  • Поддержать автора за работу над уроками
  • Обратная связь – сообщить об ошибке в уроке или предложить дополнение по тексту ([email protected])

Источник: alexgyver.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru