воскресенье, 7 июня 2026 г.

w801 wifi http softAP

 На момент написания данной статьи, существует одна интересная альтернатива популярным ESP32 т.е. недорогой производительный микроконтроллер со встроенным wifi модулем w801. Интересен он тем что имеет встроенную оперативную память что существенно упрощает разводку платы для такого микроконтроллера. Несмотря на то что существуют версии ESP32 со встроенной оперативной памятью, W801 всё таки может представлять интерес. Этот микроконтроллер не смог стать настолько же популярным в рунете и обзавестись таким же большим колличеством туториалов для простоты его использования но тем не менее. Помочь с его программированием всё таки довольно неплохо могут нейросети. Особенно хорошо что т.о. получилось создать рабочий код http wifi точки доступа и управлять светодиодом на плате через смартфон, сэкономив при этом большое количество времени. Даже если сгенерированный код не рабочий то делать его не с нуля всё равно получается проще. В общем главное что w801 вполне реально использовать наряду с ESP32 как wifi модуль. О том как скомпилировать и загрузить в микроконтроллер программу (это на самом деле не трудно и даже удобно) есть первые три части серии уроков по w801 поэтому сейчас предлагаю рассмотреть исходный код рабочего примера простого http сервера wifi точки доступа для управления светодиодом на плате get запросами.

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

В начале кода имеются заголовочные файлы:

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


После, задается сама html страница, в массиве символов HTTP_RESPONSE[], на языке разметки html. В ней имеется приветствие и пара кнопок для отправки get запросов включения и выключения светодиода. 

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


Функция создания точки доступа принимает 5 параметров. Это идентификатор точки доступа, пароль для подключения к ней, номер канала, тип шифрования и формат данных.

В теле функции есть комментарий с подсказками того какие можно выбрать типы шифрования, форматы данных. Также там задаются ip адрес и маска подсети. 

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

Ещё есть сгенерированнная нейросетью функция для обработки http трафика. В ней создается сокет для прослушивания очереди клиентов.

Очередь прослушивается в бесконечном цикле. И в ответ на get запрос выдается html страница.

Функция UserMain является стартовой. В ней вызывается функция инициализации точки доступа. Также назначаются идентификатор, пароль, номер канала, шифрование, формат данных и в функцию создания задач передается ранее созданная задача обработки http трафика. Если конечно точка доступа была успешно создана. Тут можно заметить сходство функции tls_os_task_create() с рассмотренной ранее при изучении FreeRTOS функцией xTaskCreate().

Для управления светодиодом можно добавить проверку запроса на наличие параметров перед отправкой HTTP заголовка с HTML страницей. И если например есть параметр с командой включения светодиода то включить светодиод. Если есть параметр с командой выключения светодиода то выключить. Далее, в любом случае, клиенту выдается html страница. Которую также можно немного изменить.

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



В функции UserMain добавлена настройка нужного пина на выход. 

Откомпилировать код можно командой sudo make из корня проекта и загрузить специальной командой

sudo tools/w800/wm_tool -c ttyUSB0 -rs rts -dl bin/w800/w800.fls

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

Введя нужный пароль (который мы указали в функции UserMain). То далее мы сможем зайти в браузер по дефолтному адресу и получить веб страницу от микрокнотроллера w801 а также управлять светодиодом на плате по wifi, нажимая кнопки в web интерфейсе. Успешное тестирование кода и платы можно посмотреть на видео

Я думаю, это есть успешное создание wifi http сервера на w801. Данный код можно взять за основу и использовать для создания более сложных проектов. Можно развивать идею дальше и освоить например post запросы, ajax, другие протоколы помимо http, например mqtt который лучше подходит для умного дома и интернета вещей, udp который лучше подходит для передачи видео или https который как http только зашищенный шифрованием.

Адрес биткоин кошелька для поддержки блога - bc1qlhrmmkh77x2lzhqe4lt9qwkglswj64tsqt2l5g

четверг, 21 мая 2026 г.

Симулятор переходных процессов в электрических цепях

В данном симуляторе можно собрать схему с пассивными элементами (резисторами, катушками, конденсаторами) а также источниками ЭДС, тока и ключами (переключателями) меняющими свое состояние в момент начала расчета схемы и служащими для задания начальных условий. После нажатия кнопки "решить" составляются уравнения модифицированным методом узловых потенциалов и решаются численным методом с заданным шагом и количеством шагов. Данный симулятор можно использовать например для исследования переходных процессов в электрических схемах или их реакций на периодические сигналы т.к. источникам ЭДС или тока, можно задать различные формы сигналов из наиболее распространенных либо задать форму рядом Фурье. Прежде чем провести расчет, симулятор попытается валидировать схему и дать визуальные подсказки в случае ошибок. При создании схемы следует придерживаться правил для схем замещения. Учитывать что элементы идеальные (хотя это не всегда верно и в некоторых случаях вводиться искусственная неидеальность для возможности проведения расчетов) или близки к идеальным. Например не следует "запирать" узел источниками тока т.к. это нарушает первый закон Кирхгофа. Делать контуры из источников ЭДС и катушек, либо контуры из одних конденсаторов. Следует учитывать что сопротивление идеальных источников ЭДС равно нулю и их следует дополнять последовательно соединенными резисторами. Сопротивление идеального источника тока равно бесконечности, поэтому параллельно ему следует ставить резистор. Также бесконечно высоким сопротивлением обладают идеальные конденсаторы а бесконечно малым идеальные катушки индуктивности. Также не следует задавать слишком большое или слишком малое количества шагов рассчета. Если схема составлена корректно, по ней правильно составились уравнения и были произведены расчеты то в результате будут выведены графики потенциалов узлов, относительно нулевого (который можно задать (по умолчанию это потенциал с индексом ноль)) и токов источников ЭДС (результаты расчета методов ММУП) а также будет таблица значений на каждом шаге. Если необходимо узнать напряжение на конкретном элементе то можно посчитать разность потенциалов на нем или, перед началом расчета, поставить землю на одном из его узлов.
шагов рассчета время шага(с)
Элемент не выбран Клик: выбрать/поставить | Drag: переместить | R: вращать выбранный | Ctrl+Z: отмена
Здесь появятся данные ...
Если данный САПР, калькулятор, проектирования схем оказался полезным то есть возможность поддержать автора и способстовать т.о. появлению подобного рода контента. Адрес биткоин кошелька для поддержки блога - bc1qlhrmmkh77x2lzhqe4lt9qwkglswj64tsqt2l5g

суббота, 2 мая 2026 г.

STM32 FreeRTOS blue pill

 Изучим бесплатную операционную ситему для встраиваемых систем FreeRTOS. Это не такая операционная система как те что устанавливаются на персональные компьютеры либо одноплатные вроде Raspberry pi. FreeRTOS это многозадачная операционная система реального времени для микроконтроллеров. В ней нет многого того что есть в обычных операционных системах но зато есть многозадачность. Что может быть полезным для случаев при которых микроконтроллер должен выполнять некоторое количество функций. Естественно микроконтроллер не может реально параллельно выполнять много задач одновременно. Если это конечно не такие задачи возможность выполнения которых предусмотрена на аппаратном уровне например DMA. В общем случае, задачи выполняются последовательно и на каждую выделяется определенное время. FreeRTOS является библиотекой которую можно подключить к проекту. Подключив её, можно будет проще реализовывать многозадачность чем при написании кода с нуля самостоятельно. В интернете есть один интересный проект, хорошо подходящий для изучения данной операционной системы на плате blue pill с микроконтроллером stm32f103. Найти его можно по ссылке https://github.com/sbodd/bluepill/tree/master. На странице проекта есть небольшая инструкция по его запуску:

  1. install the toolchain and libarary.
  2. change the TOOLROOT path in Makefile.common
  3. change arm-none-eabi-objcopy path in mkdump.sh
  4. run bash mkdump.sh (it will compile and flash final binary to bluepill, will ask for root password while flashing)
  5. go to app dir and type make clean to remove generated bins and object files

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

sudo git clone https://github.com/sbodd/bluepill.git

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

https://disk.yandex.ru/d/b14nePpO9Jjo5g

После скачивания, можно разархивировать данный тулчейн например утилитой tar.

sudo tar -xf  gcc-arm-none-eabi-7-2018-q2-update-linux.tar.bz2

Далее понадобиться изменить пару файлов проекта. Это Make файл и скрипт сборки проекта.


В Make файле нужно поменять все пути до тулчейна на корректные

Тоже самое проделать в скрипте сборки проекта + можно убрать загрузку stlink ом если нет stlinkа.
Каждый файл нужно сохранить. В редакторе nano для этого есть комбинация клавиш ctrl+o.
Теперь всё готово для сборки проекта и можно начинать исследовать исходный код.
он содержится по пути корень->Src->FreeRTOS->main.c
В начале, как всегда, подключаются заголовочные файлы библиотек.

Ниже объявляются хэндлеры задач. Задачи у нас будет две, для начала для простоты, поэтому и хандлера всего два.
Ещё ниже объявляются прототипы функций задач.
И ещё есть некоторое колличество прототипов функций инициализации и вспомогательных функций.
В функции main вызывается функция сброса настроек тактирования
и функция обновления тактирования ядра.
Также функция инициализации периферии. В данном случае это инициализация uart1.

В данном проекте микроконтроллер выполняет всего две задачи. Вывод одного текста в uart и вторая задача, вывод другого текста в uart.
Название функции, в которой будет задача, передается первым параметром в функцию xTaskCreate()
Вторым параметром в эту функцию передается просто название задачи кторое нигде больше не используется а служит просто для удобства и понятности.

Далее задается размер стэка задачи. Насколько я понял это то ко
личество оперативной памяти, в словах, которое задача может использовать в стэке.

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

Данный хэндлер впоследствии может быть использован для управления задачей, например для её завершения или приостановки.
Всё тоже самое проделывается теперь для второй задачи.
 После запускается шэдулер который, собственно говоря, и выполняет эти задачи.
В задачах обычно имеются бесконечные циклы и поэтому по идее выполнение программы никогда не должно выходить дальше шедулера но если вдруг это произойдет то дальше есть обычный бесконечный пустой цикл.
Также имеется функция инициализации периферии и пара вспомогательных функций для отправки сообщений в uart.
Теперь можно рассмотреть сами задачи. Функции ывполняюшие задачи должны принимать один указатель на тип void и ничего не возвращать т.е. возвращать void
В этих функциях д.б. бесконечные циклы. В данном случае одна из задач посылает один текст в uart с одной задержкой.
Вторая задача посылает в uart другой текст с другой задержкой между отправками.
Чтобы запустить сборку проекта, нужно зайти в папку со скриптом запуска проекта и запустить его специальной командой.
После, если сборка прошла успешно, можно найти прошивку в формате .bin там же где находиться исходный код. И загрузить её в микроконтроллер например через FlashLoaderDemonstrator или stlink. 


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



Адрес биткоин кошелька для поддержки - bc1qlhrmmkh77x2lzhqe4lt9qwkglswj64tsqt2l5g