Зеркало сайта: vivacious-stockings-frog.cyclic.app
ESP8266 может работать в двух режимах: в режиме интерпретатора AT-команд или в режиме самостоятельного микроконтроллера с wifi модулем. Работу ESP8266 в режиме интерпретатора AT-команд я рассматривал в предыдущей статье, эта же статья рассматривает работу ESP8266 в качестве самостоятельного микроконтроллера.
Способов программирования ESP8266 опять же два, первый - это программирование с помощью ESP8266 фреймворка для Arduino IDE, второй - это программирование через esp-open-sdk. В первом случае мы можем использовать готовые библиотеки Arduino, во втором случае вы можем положиться только на функционал SDK и свой собственный код.
В этой статье мне хотелось бы рассмотреть программирование ESP8266 с помощью ESP8266 фреймворка для Arduino IDE. Данная тема решает широкий спектр задач обеспечения радиоканалом разного рода датчиков и простых устройств управления нагрузкой.
В качестве примера в статье рассматривается пошаговое написание прошивки для температурного логера на датчиках DHT11 и DS18B20. Первый датчик используется для определения комнатной температуры и влажности, второй используется для определения уличной температуры. Я статье используется плата ModeMCU ESP8266, т.к. там есть автозагузка прошивки, но в принципе может быть использована любая другая плата на модуле ESP12E/ESP12F. Данные модули оснащены флеш-памятью на 4 мегабайта, что позволяет забыть о жёсткой оптимизации размера прошивки, когда борьба идёт за каждый байт.
При работе с ESP8266 есть выбор: либо использование его совместно с "облаками", либо собственным внешним сайтом, либо собственном сервером расположенным в интросети или автономной работой ESP826, когда веб-сервер запускается на самом ESP8266.
В данном проекте используется веб-сервер uhttpd на роутере с прошивкой OpenWRT. ESP8266 передаёт на него показания датчиков, а роутер их сохраняет и виде обычных файлов, и делает их доступными для просмотра через web-интерфейс. Можно дать новую жизнь старому смартфону или планшету настроив их на отображение таких web-страниц. Web-интерфейс универсален и может отображаться на любых браузерах любых устройств.
Содержание:
I. Начало работы с ESP8266 фреймворком для Arduino IDE
II. Работа с библиотекой ESP8266WIFI
III. Добавлено позже
Появившись четыре года назад, модули на базе чипа ESP8266 наделали много шума, прежде всего своей ценой. Производителем чипов была на тот момент никому неизвестная китайская фирма "Espressif Systems", зарегистрированная в Шанхае. Спустя некоторое время, многие фирмы представили на рынок аналогичные модули собственного изготовления, но по цене они были (и есть) в два - пять раз дороже модулей на ESP8266.
В 2016-ом году, фирма "Espressif Systems" представила на рынок ESP32, который существенно превосходил по своим возможностям ESP8266, и интерес к ESP8266 начал сходить на нет.
ESP32 это двухядерный микроконтроллер, или SoC если угодно, работающий на частоте 240MHz и снабженный радио-интерфейсами: WIFI стандарта 802.11 n (2.4 GHz), с пропускной способностью до 150 Mbps, и Bluetooth Low Energy стандарта 4.2, который был принят четыре года назад. ЦПУ имеет архитектуру Xtensa, есть аппаратная поддержка чисел с плавающей запятой, 7-уровневый конвейер, 520 кБ(!) ОЗУ, и многое другое (см. документацию: ESP32 Datasheet).
Если конкурентов ESP8266 изготавливают все кому не лень, то у ESP32 конкурентов с сопоставимой ценой фактически нет.
Модули на ESP8266 послужили основой для огромного количества "умных розеток" и им подобных устройств. Если говорить о ESP12 модулях, то здесь имеется около 50 Кбайт ОЗУ, 4 Мбайт флеш-памяти, частота ЦПУ 80МГц, встроенный WiFi контроллер. При этом цена за все это добро - около двух долларов. К сожалению, фирма производитель не предоставляет документацию на чип. Модули поставляются как готовые устройства с AT-интерфейсом и с возможностью программирования через Arduino IDE, используя для этого официальный SDK. Поэтому все изыскания относительно устройства аппаратной части ESP8266 являются результатом исследования энтузиастов.
В статье разбирается подключение, прошивка, и работа с AT командами ESP8266. Изначально статья была целиком посвящена только ESP8266, но впоследствии я решил добавить главу о перепрошивке модуля с ESP32. AT команды в ESP32 практически все те же, что и в ESP8266, так что, все сказанное относительно работы с AT-командам ESP8266 можно отнести и к ESP32.
Большая часть материала статьи посвящена режиму работы ESP8266, когда он работает в режиме WIFI модема с AT-интерфейсом. Разбираются типовые вопросы: как настроить, что-то скачать, переслать свои данные на сервер, и т.д. Предполагается, что уровень знаний читателя о сетях нулевой. Поэтому я постарался расписать всё максимально доходчиво. Для наглядности, показана работа с программами tcpdump и Wireshark для анализа трафика ESP8266. В качестве вспомогательного оборудования используется WiFi роутер с прошивкой OpenWRT, но вместо него можно использовать любой компьютер с Linux.
Содержание:
Когда пару лет назад я писал вводную статью по STM32, то больше всего мне тогда запомнилось, что прошивки даже с самыми простыми алгоритмами (например Blink) - имеют огромный размер: от одного килобайта и больше. Поэтому целью этой статьи стала попытка написания прошивок для STM32 в стиле 8-битных микроконтроллеров, когда ты полностью контролируешь процесс компиляции, используя лишь: компилятор, флешер и текстовый редактор. Соответственно в статье рассматриваются типовые на мой взгляд вопросы при переходе с 8-битников на 32-разрядную архитектуру: как помигать светодиодом, как настроить тактирование, как завести SPI и поднять I2C.
Данная статья не рассчитана на новичков, я часто буду сравнивать STM32 c STM8, и по ходу повествования буду опускать многие элементарные, на мой взгляд, вещи. Статья предполагает, что вы уже знаете Cи, имеете опыт работы в консоли Linux или CYGWIN Windows. Также будет весьма кстати, если у вас уже есть опыт программирования в "Bare Metal" хотя бы на уровне микроконтроллеров STM8.
Если вам чего-то из этого не хватает, то вы легко сможете подтянуть "матчасть" по статьям на хабре: STM32F4: GNU AS: Программирование на ассемблере в семи частях, по методичке "Народная электроника" выпуск 2. А.В. Немоляев. GCC Cortex-M3. PDF, или по книге "Джозеф Ю. Ядро Cortex - МЗ компании ARM. Полное руководство". Также, в какой-то мере, могут быть полезны материалы данного сайта.
Оборудование. В статье я буду использовать популярную плату "Blue Pill" на микроконтроллере STM32F103C8T6, программатор ST-LINK v2 (китайская реплика), USB-UART преобразователь FT232RL, 4-x разрядный семисегментный индикатор, на SPI интерфейсе и RTC DS3231 на I2C интерфейсе.
Содержание:
Посмотреть исходники, сборочные файлы, скачать скомпилированные прошивки, можно с портала GITLAB https://gitlab.com/flank1er/stm32_bare_metal
Когда я писал драйвер FM-модуля RDA5807, то у меня возникла необходимость сохранять куда-то найденные станции, чтобы потом можно было переключиться на них одной кнопкой, минуя поиск. Но когда я полез в документацию STM8, чтобы поискать, как это можно было бы осуществить, то понял, что EEPROM и FLASH в STM8 - это отдельная подсистема микроконтроллера, и изучать ее надо всю.
Один из режимов записи в EEPROM/FLASH требует выполнения из ОЗУ. Вопрос копирования кода в ОЗУ и выполнения его оттуда я затрагивал в предыдущей статье, однако там вся реализация была на ассемблере. Сейчас же мне захотелось показать как это делается в Си.
В качестве компилятора я выбрал COSMIC, по которому уже как-то писал быстрый старт. Но тогда я писал об использованию COSMIC совместно с SPL библиотекой. На этот раз мне хочется раскрыть тему программирования в COSMIC, используя "чистый" Си в связке с ассемблером. Правда должен оговориться, что несколько отредактированные загловочные файлы из SPL в этой статье я все-таки использовать буду, т.к. нужны будут именновые константы масок периферийных регистров.
В итоге статья получилось составленной из двух взаимосвязанных тем: сначала рассматривается вопрос использования компилятора COSMIC, а затем, как с его помощью сохранять данные в EEPROM/FLASH памяти микроконтроллера.
В качестве Develop Board я буду использовать собственную плату с чипом STM8S105C4T6. Это Medium-Density чип с 16 КБ флеш-памяти, 2 КБ ОЗУ и 1 КБ ЭСППЗУ(EEPROM). Он более интересен чем STM8S103-й чип, т.к. в 105-ом имеется встроенный загрузчик(bootloader), механизм read-while-write (RWW), а размер блока составляет 128 байт вместо 64 байт на 103-м чипе. Вы в свою очередь можете использовать фирменную отладочную плату STM8S-DISCOVERY с чипом STM8S105C6T6. Там флеш-памяти будет побольше - 32 КБ. На худой конец, можно воспользоваться ещё одной китайской платой на 105-м чипе. Также как в STM8S-DISCOVERY в ней установлен кварц на 8 МГц. Сама плата выполнена в форм-факторе удобном для установки в беспаячную макету.
Cosmic у меня работает в связке с STVD, обе программы установлены на виртуалку, которая в свою очередь установлена в Linux. Гостевой ОС в виртуалке служит Windows XP SP3. О превратностях установки Cosmic я уже писал в вышеупомянутой статье два года назад. К сожалению, я тогда я не упомянул, что получить регистрационный ключ можно онлайн. Т.е. не надо ждать несколько дней чтобы ключ скинули на e-mail, как было в моем случае. Если не ошибаюсь, ключ действует один год, и по истечении регистрационного периода, его нужно получать заново. Кроме того, ключ "слетает" при копировании виртуальной машины. В этом случае его также следует получать по новой. В последнем случае я просто удалял Cosmic и затем ставил его заново, получая свежий ключ. Сейчас у меня следующая версия компилятора:
COSMIC Software STM8 C Cross Compiler (Special Edition) V4.4.7
Так же как и в предыдущей статье, для контроля кода прошивки я буду использовать дизассемблер из комплекта утилит stm8-binutils.
Содержание статьи:
Скачать исходники, workspace с проектами и скомпилированными прошивками к статье можно можно будет по ссылке в конце статьи.
Вновь возвращаюсь к фирменной среде разработки - ST Visual Develop, для чего есть две причины. Во-первых, оказалось, что писать на ассемблере сколь-либо сложные прошивки без отладчика невозможно, у меня по крайней мере не получилось, т.к. программа все-равно так или иначе отлаживается с помощью светодиода или по UART, через отладочный интерфейс это просто делается быстрее. Во-вторых, мне показалось, что изучать архитектуру только лишь руководствуясь datasheet'ом не совсем правильно. Что-то может быть неправильно понято, что-то может быть упущено. С такими штуками как DMA, встроенный RTC или выполнение кода из ОЗУ, будет проще разобраться с помощью отладчика, не забывая при этом посматривать в datasheet.
STVD - довольно простая среда разработки, я ее освоил за вечер. В этой статье я хочу рассказать, как "с нуля" начать писать и отлаживать прошивки на ассемблере STM8, используя ST Visual Develop.
STVD - работает в ОС семейства Windows, начиная с XP и выше. При этом она прекрасно работает из-под виртуальной машины в Linux. В этой статье я использую STVD 4.3.12, последнюю доступную версию на этот момент, и Windows XP SP3 в качестве гостевой ОС. В качестве микроконтроллера я буду использовать 20-пиновый STM8S103F3P6.
В качестве дизассемблера я буду использовать комплект утилит stm8-binutils. Бинарные файлы этого комплекта для Windows скомпилированы для работы в CYGWIN, т.е. они понимают unix'овский формат пути файла с прямым слешем в качестве разделителя. CYGWIN для Windows 7 и выше ставится без проблем следуя инструкциям на сайте https://cygwin.com/install.html, для Windows XP нужно следовать инструкциям в этом HowTo: windows xp - cygwin 2.5.2 mirror -- getting the last XP release - Stack Overflow.
В качестве альтернативы связке binutils+cygwin, можно использовать naken_util из комплекта naken_asm.
I. Создание минимального проекта Blink
II. Язык ассемблера STVD
III. Процесс отладки
IV. Макроассемблер
Пару лет назад я публиковал "героический эпос" о пайке STM8L-чипов в адаптеры TSSOP/QFN48 - DIP. Насколько помню, тогда это был мой первый опыт пайки SMD компонентов. Сейчас конечно та статья кажется наивной, за пару прошедших лет много чего изменилось. Вошли в обиход сервисы изготовления печатных плат и сейчас каждый может заказать десяток плат заводского качества по весьма умеренным ценам. Можно открыть Service Manual какого либо устройства и заказать набор плат для его изготовления. Звучит как фантастика, и я не смог удержаться, чтобы не сделать свою STM8 Develop Board. Благо за два года ковыряния различных отладочных плат, идей у меня накопилось достаточно. Загвоздка была только в том, я никогда этим не занимался.
Т.к. за один заказ можно было разместить только один дизайн платы, моя задача была одним выстрелом убить три зайца, т.е. реализовать в одном проекте решение следующих задач:
Во-первых, я хотел попрактиковаться в пайке SMD компонентов, т.к. я не так часто этим занимаюсь. Поэтому в качестве микроконтроллера я выбрал 48-пиновый чип с расстоянием между ножками 0.5 мм. Чипы в 44-пиновом корпусе имеют практически тот же функционал, но при этом у них расстояние между ножками 0.8 мм. Пайка таких чипов В РАЗЫ легче. Также я хотел попробовать свои силы в пайке микросхем в безвыводном корпусе и поэтому добавил опциональный USB-UART преобразователь CP2102. Есть разные мнения о сложности пайки чипов в таком корпусе, кто-то умудряется даже паять их без фена, но я бы не советовал.
Во-вторых, я хотел сделать универсальный дизайн печатной платы пригодный как для отладочных, так и для плат конкретных устройств.
Ну и в третьих, я хотел поработать с чипами 200-й серии, которые являются самыми производительными среди 8-битных микроконтроллеров STM.
Вроде желаний немного, а во что все это вылилось, я расскажу далее.
В этот раз разговор пойдёт про аппаратные интерфейсы STM8S: UART, АЦП и I2C. Каждый их этих интерфейсов поддерживает несколько режимов работы, но сейчас мне хотелось бы сфокусироваться на наиболее типовых, на мой взгляд, примерах их использования: а)организация передатчика на UART, б) режим однократного замера АЦП, в) использование I2C в режиме мастера. Напомню, что вариант использования SPI в режиме мастера я приводил на примере драйвера для 4-x разрядного семисегментного индикатора .
Документация которая понадобится для прочтения статьи: Reference Manual STM8S - RM0016, главы: 22 (UART), 24 (АЦП), 21 (I2C). В качестве целевого микроконтроллера я буду использовать 20-пиновый STM8S103F3P6.
Так же как и в прошлый раз, упор будет делаться на "чистом" программировании на Си и Ассемблере без использования сторонних библиотек. В качестве компилятора используется open-source SDCC версии 3.7. Справедливости ради замечу, что я ввёл макросы для прямого доступа к битовым инструкциям, что бы хоть как-то оптимизировать код.
Скачать полные исходники со сборочными файлам и скомпилированными прошивками, можно по ссылке в конце статьи.
В статье используются формулы в формате MathML который поддерживается браузером Firefox, для браузеров Chrome и Opera потребуется установить одноимённое расширение MathML.
Примечание от 01.09.2022г. В SDCC версии 4.2 поменялся формат передачи аргументов функций. Если раньше все аргументы передавались через стек, то теперь они передаются через регистры. Поэтому для совместимости со старым кодом следует добавлять опцию компиляции "--sdcccall 0".
Статья рассматривает вспомогательные таймеры и систему низкочастотного тактирования в микроконтроллерах STM8S. Упор делается на "чистом" программировании на Си и Ассемблере без использования сторонних библиотек.
Несмотря на то, что рассматриваются вспомогательные модули, на мой взгляд тема довольно сложная, в первую очередь из-за огромного количества "подводных камней".
Документация которая понадобится для прочтения статьи: Reference Manual STM8S - RM0016, главы: 12 (AWU), 13 (BEEP), 14 (Independet Watchdog), 15 (Window Watchdog). В качестве целевого микроконтроллера я буду использовать 20-пиновый STM8S103F3P6.
В статье используются формулы в формате MathML который поддерживается браузером Firefox, для браузеров Chrome и Opera потребуется установить одноименное расширение MathML.
Скачать полные исходники со сборочными файлам и скомпилированными прошивками, можно по ссылке в конце статьи.
Примечание от 01.09.2022г. В SDCC версии 4.2 поменялся формат передачи аргументов функций. Если раньше все аргументы передавались через стек, то теперь они передаются через регистры. Поэтому для совместимости со старым кодом следует добавлять опцию компиляции "--sdcccall 0".
Систему тактирования я уже бегло рассматривал в случае использования SPL. Стандартная периферийная библиотека, на мой взгляд, предлагается фирмой STM в качестве инструмента для быстрого освоения семейства микроконтроллеров STM8, программистами ранее не работавшими с ними. Сейчас я считаю, что она совершенно лишняя. Хотя, в примерах я использую именованные константы взятые из заголовочных файлов SPL.
Документация которая понадобится для прочтения статьи: Reference Manual STM8S - RM0016, глава 9. В качестве целевого микроконтроллера я буду использовать 20-пиновый STM8S103F3P6.
Скачать полные исходники со сборочными файлам и скомпилированными прошивками, можно по ссылке в конце статьи.
В данной статье я попытался рассмотреть вопрос использования ассемблера в Си-программах для компилятора SDCC. Данный компилятор часто подвергается критике по качеству кода, однако он является единственным Open Source компилятором для архитектуры STM8, и единственным компилятором доступным в Linux. Поэтому данная статья может рассматриваться как HowTo по выжимании максимума возможного из SDCC.
Когда я пытался в прошлый раз (почти два года назад) подружиться с SDCC у меня оказалось большое количество вопросов к нему, что вылилось в метания между SDCC, IAR и Cosmic. Была даже идея отказаться от STM8 в пользу Cortex-M0. Однако теперь для Linux появился отладочный интерфейс, что побудило меня еще раз взглянуть на SDCC и попытаться найти к нему подход.
Статья построена аналогично предыдущей: ATtiny13a: использование ассемблера GNU-AS в программах на Си с той разницей, что вместо ATtiny13a будет использоваться 20-пиновый STM8S103F3P6, а вместо GCC - SDCC.
В качестве операционки при написании использовался Slackware GNU/Linux (русские физики рекомендуют), но теоретически, все должно работать и в Windows при условии использования CYGWIN.
По ходу изложения, я буду сравнивать систему команд STM8 и AVR. Я делаю это не для того что "уронить" AVR, а потому что считаю эту архитектуру хорошо сбалансированной, удобной в использовании и легкой в освоении. STM8 это более современная архитектура, и по определению обязана быть более лучшей. Однако AVR удобно рассматривать в качестве какой-то базовой системы, этакой точкой отсчета.
Полные исходники, сборочные файлы и скомпилированные прошивки можно будет скачать по ссылке в конце статьи.
Примечание от 01.09.2022г. В SDCC версии 4.2 поменялся формат передачи аргументов функций. Если раньше все аргументы передавались через стек, то теперь они передаются через регистры. Поэтому для совместимости со старым кодом следует добавлять опцию компиляции "--sdcccall 0".