Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр
Поднимайтесь как можно выше по дереву, собирайте цветы и дарите их близким.
Вас ждут уникальные награды и 22 выгодных промокода!

Пикаджамп

Аркады, Казуальные, На ловкость

Играть

Топ прошлой недели

  • AlexKud AlexKud 38 постов
  • SergeyKorsun SergeyKorsun 12 постов
  • SupportHuaport SupportHuaport 5 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня

Arduino + Esp8266

С этим тегом используют

Электроника Ardublock Самоделки YouTube Своими руками Вертикальное видео Видео ВК Умный дом Все
156 постов сначала свежее
839
Buterbrott
1 год назад
Arduino & Pi

Новогодняя звезда - 180 адресных светодиодов!⁠⁠

Мой долгострой. Проект далек от завершения. Но промежуточные результаты уже не стыдно показать.
Плата моей разработки, заказана у китайцев. 180 диодов ws2812b-mini, wemos d1 mini в качестве контроллера.
Эксперименты с генерацией палитр и нестандартными таблицами мэппинга.

[моё] Arduino Esp8266 Led Своими руками Видео
80
5
mega.animeshnik
mega.animeshnik
1 год назад

Народный измеритель пульсации света⁠⁠

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

Для понимания принципа работы измерителя, читайте оригинальную статью, уважаемого ammo1.

Немного вступления

В оригинале, используется дисплей TFT 1.77, который стоит от 165рублей на текущий день, а я использовал oled 0.96 4 pin, что стоит аж 110 рублей. Вы сейчас посмеётесь, дескать 55 рублей, того не стоят, но это цены на али, в наших магазинах, может быть совсем другая разница.

Кроме того, я поменял NodeMCU из оригинала на WeMos d1 mini, т.к. wemos дешевле и компактнее, но сам мк esp8266 тот же. К сожалению, в отличие от NodeMCU, питать WeMos d1 mini 9 вольтовой батарейкой, не выйдет, потому что, максимальное напряжение 6В, об этом ниже.

Питание

На оригинальном WeMos d1 mini должен быть стабилизатор ME6211C33, но, похоже, на али, дешёвыми, продаются именно клоны, на которых установлен стабилизатор с маркировкой 4b2k, которой обозначается XC6204B332. Оригинальный wemos d1 mini можно питать напряжением до 6В, клоны так же придерживаются этого. У меня есть аккумуляторы 18650, извлечённые из мёртвой батарейки ноутбука, один из них и питает самоделку. Можно использовать пальчиковые батарейки, а ещё проще от внешней батареи(power bank), которая, я думаю, есть у многих. Прибор для измерения пульсация света, нужен далеко не всегда, и я не вижу особых проблем, попользоваться им с помощью внешнего питания, если уж совсем нет других вариантов.

Ближе к делу

А тут всё просто, подключаем oled дисплей, по i2c к мк это D2(sda) D1(scl), по умолчанию или другие пины, если хотите. Temt6000 подключается к единственному, аналоговому входу(A0 к S). Не вижу смысла рисовать, что и как подключается, потому что соединить 3.3 с VDD и V, а G с GND и G, не составляет никаких проблем.

Библиотеку я использовал GyverOLED, она есть в репозитории arduino ide. Сам "измеритель пульсаций" требует библиотеку GyverFilters, которая так же, есть в репозитории.

Я убрал всю графику и на экран выводятся только kp1, kp2, Emax, Emin, Eenv, что лично мне, хватает. В оригинальном скетче были переменные, которые никак не использовались, я их все удалил.

Сам скетч https://disk.yandex.ru/d/GaGxQ53fsn1T2w

Тестирование

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

Для себя я собрал прибор, сочетающий в себе: датчик температуры(htu21d); датчик света(bh1750); измеритель пульсаций(temt6000).

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

Народный измеритель пульсации света Самоделки, Arduino, Esp8266, Длиннопост

белый, максимальная(3/3) яркость

Народный измеритель пульсации света Самоделки, Arduino, Esp8266, Длиннопост

белый, минимальная(1/3) яркость

Народный измеритель пульсации света Самоделки, Arduino, Esp8266, Длиннопост

синий, максимальная яркость

Народный измеритель пульсации света Самоделки, Arduino, Esp8266, Длиннопост

зелёный, максимальная яркость

Народный измеритель пульсации света Самоделки, Arduino, Esp8266, Длиннопост

красный, максимальная яркость

Народный измеритель пульсации света Самоделки, Arduino, Esp8266, Длиннопост

оранжевый? максимальная яркость

Показать полностью 6
[моё] Самоделки Arduino Esp8266 Длиннопост
0
128
monobogdan
monobogdan
1 год назад
TECHNO BROTHER

Выполняем сторонние программы на микроконтроллерах с Гарвардской архитектурой: как загружать программы без знания ABI?⁠⁠

Выполняем сторонние программы на микроконтроллерах с Гарвардской архитектурой: как загружать программы без знания ABI? Опрос, Гаджеты, Программирование, C++, Avr, Arduino, Esp32, Embedded, Своими руками, Самоделки, Esp8266, Assembler, Железо, Микроконтроллеры, Длиннопост

Зачастую в процессе разработки собственных устройств или моддинга уже существующих, встаёт задача выполнения стороннего кода: будь то ваши собственные программы с SD-флэшек, или программы, написанные другими пользователями с помощью SDK для вашего устройства. Тема компиляторов и кодогенерации достаточно сложная: чтобы просто загрузить ELF или EXE (PE) программу, вам нужно досконально разбираться в особенностях вашей архитектуры: что такое ABI, релокации, GOT, отличие -fPIE от -fPIC, как писать скрипты для ld и т. п. Недавно я копал SDK для первых версий Symbian и основываясь на решениях из этой ОС понял, каким образом можно сделать крайне «дешевую» загрузку любого нативного кода практически на любом микроконтроллере, совершенно не вникая в особенности кодогенерации под неё! Сегодня мы с вами: узнаем, что происходит в процессе загрузки программы ядром Linux, рассмотрим концепцию, предложенную Symbian Foundation и реализуем её на практике для относительно малоизвестной архитектуры — XTensa (хотя она используется в ESP32, детали её реализации «под капотом» для многих остаются загадкой). Интересно? Тогда добро пожаловать под кат!

❯ Как это работает?


Думаю, для многих моих читателей реализация процесса загрузки exe-программ и dll-библиотек в память процесса оставалась эдаким чёрным ящиком, в детали реализации которого вдаваться не нужно. Отчасти это так и есть: современные ОС разруливают процесс загрузки бинарников в память сами, не требуя от программиста вообще ничего, даже понимания того, куда будет загружена его библиотека или программа.

Выполняем сторонние программы на микроконтроллерах с Гарвардской архитектурой: как загружать программы без знания ABI? Опрос, Гаджеты, Программирование, C++, Avr, Arduino, Esp32, Embedded, Своими руками, Самоделки, Esp8266, Assembler, Железо, Микроконтроллеры, Длиннопост




Давайте для общего понимания вкратце разберемся, как происходит загрузка программ в Windows/Linux:

1. Система создаёт процесс и загружает в память программы секции из ELF/PE. Обычные программы для своей работы используют 3 секции: .text (код), .data (не-инициализированный сегмент памяти для глобальных переменных), .bss (сегмент памяти для инициализированных переменных). Каждому процессу выделяется собственное адресное пространство, называемое виртуальной памятью, которое не позволяет программе испортить память ядра, а также позволяет не зависеть от разметки физической памяти на выполняющей машине. Концепцию виртуальной памяти реализует специальной модуль в процессоре, называемый MMU.

2. Если бы наши программы не использовали никаких зависимостей в виде динамических библиотек, то на этом процесс загрузки можно было бы закончить: каждая программа имеет свой адрес загрузки, относительно которого линкер строит связи между обращениями к коду/данным программы. Фактически, для самых простых программ линкеру остаётся лишь прибавить адрес загрузки программы (например, 0x100) к каждому абсолютному обращению к памяти.
Однако современные программы используют десятки библиотек и для всех предусмотреть собственный адрес загрузки не получится: кто-то где-то всё равно будет пересекаться и вероятно, портить память. Кроме того, современные стандарты безопасности в Linux рекомендуют использовать позиционно-независимый код, дабы использовать преимущества ASLR (Address Space Layout Randomization, или простыми словами возможность загрузить программу в случайное место в памяти, дабы некоторые уязвимости, завязанные на фиксированном адресе загрузки программы перестали работать).

3. Поэтому для решения этой проблемы придуман т. н. динамический линкер, который уже на этапе загрузки программы или библиотеки патчит программу так, чтобы её можно было загрузить в любой участок памяти. Для этого используются данные, полученные от обычного линкера а этапе компиляции программы: помимо .text, .data и .bss, линкер создаёт секции .rel и .rel-plt, которые называются релокациями. Если объяснять совсем условно, то релокации — это просто запись вида «какой абсолютный адрес в коде программы нужно пропатчить» -> «на какое смещение его пропатчить». Самая простая релокация выглядит вот так:

Выполняем сторонние программы на микроконтроллерах с Гарвардской архитектурой: как загружать программы без знания ABI? Опрос, Гаджеты, Программирование, C++, Avr, Arduino, Esp32, Embedded, Своими руками, Самоделки, Esp8266, Assembler, Железо, Микроконтроллеры, Длиннопост

Где по итогу:

Выполняем сторонние программы на микроконтроллерах с Гарвардской архитектурой: как загружать программы без знания ABI? Опрос, Гаджеты, Программирование, C++, Avr, Arduino, Esp32, Embedded, Своими руками, Самоделки, Esp8266, Assembler, Железо, Микроконтроллеры, Длиннопост

.rel-plt же служит для резолвинга вызовов к dll/so: изначально программа ссылается на заранее определенные в процессе компиляции символы, которые уже в процессе загрузки патчатся на физические адреса функций из загруженной библиотеки.

И казалось бы — всё очень просто, пока в дело не вступают GOT (Global Offset Table — глобальная таблица смещений) и особенности реализации конкретного ABI. И ладно бы x86 или ARM, там всё разжевано и понятно, однако на других архитектурах начинаются проблемы и не всегда очевидно что и где за что отвечает.

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

  1. Писать полноценный загрузчик ELF-бинарников. ELF может оказаться громоздким для некоторых окружений и его реализация может оказаться тривиальной не для всех.

  2. Зарезервировать определенный сегмент в памяти (пусть с 0xFFF по 0xFFFF) и скомпилировать нашу программу с адресом загрузки 0xFFF с параметром -fno-pic. В таком случае, линкер сгенерирует обращения к памяти по абсолютным адресам — если переменная лежит по адресу 0xFFF, то программа будет обращаться сразу к этому адресу памяти, без необходимости что либо динамически линковать. Именно такой подход использовался во времена ZX Spectrum, Commodore 64 и MS-DOS (однако там роль «виртуальной памяти» выполняла такая особенность 8086, как сегменты). У такого подхода есть и минусы: относительная невозможность загрузки сразу нескольких программ одновременно, зарезервированное пространство линейно отъест небольшой кусок памяти у основной прошивки, нет возможности динамической аллокации секций. Зато такой код теоретически будет работать быстрее, чем PIC.

    Проблемы реализации такого способа: иногда нужно лезть в систему сборки основной прошивки и патчить скрипт линкера так, чтобы он не трогал определенный регион памяти. В случае esp32, например, это требует патча в сам SDK и возможного «откола» от мейнлайн дистрибутива.

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


Недавно мы сидели в чате ELF-сцены (разработка нативных программ под телефоны Siemens, Sony Ericsson, Motorola и LG с помощью хаков) и думали, как же можно реализовать загрузчик сторонних программ на практически неизвестных платформах. Кто-то предлагал взять ELF под основу — однако с его реализацией под некоторые платформы есть трудности, а кто-то предлагал писать «бинлоадер» — самопальный формат бинарников, который получается из, например, тех же эльфов.

Выполняем сторонние программы на микроконтроллерах с Гарвардской архитектурой: как загружать программы без знания ABI? Опрос, Гаджеты, Программирование, C++, Avr, Arduino, Esp32, Embedded, Своими руками, Самоделки, Esp8266, Assembler, Железо, Микроконтроллеры, Длиннопост

В это же время я копал SDK для Symbian и хорошо помнил, что в прикладных приложениях для этой ОС нет поддержки глобальных переменных вообще. Да, сегмент .data и .bss полностью отсутствует — переменные предлагается хранить в структурах. Почему так сделано? Всё дело в том, что каждая программа в Symbian — это dll-библиотека, которую загружает EKA и создаёт экземпляр CApaApplication. И дабы была возможность загрузить dll один раз для всех программ (что справедливо для системных библиотек), ребята полностью выкинули возможность использования любых глобальных переменных. А ведь идея интересная!

Однако в таком подходе есть несколько серьезных ограничений:

  • Отсутствие глобальных переменных может стать проблемой при портированиии уже существующего софта, хотя вашим программам ничего не мешает передавать в каждую функцию структуру с глобальным стейтом, который можно при необходимости изменять. Кроме того, нет ограничений на использование C++ (за исключением необходимости ручной реализации new/delete и отсутствием исключений).

  • Отсутствие преинициализированных данных. Вот это уже может стать относительно серьёзной проблемой, у которой, тем не менее, есть свои обходные решения. Например если вы храните команды для инициализации дисплея в таблице, или какие-либо калибровочные данные — вы не сможете их объявить, просто используя инициализаторы в C. Тоже самое касается и строковых литерал. Тут есть два варианта: часть таблиц можно вынести на стек (если эти самые таблицы достаточно маленькие), либо подгружать необходимые данные из бинарника с помощью основной прошивки (например, LoadString и т. п.).


Давайте же на практике посмотрим, имеет ли право на жизнь такой подход!

❯ Практическая реализация


Формат нашего бинарника будет до безобразия прост: небольшой заголовок в начале файла и просто сырой дамп сегмента .text, который можно экспортировать из полученного elf даже без необходимости писать скрипт для линкера. При этом нужно учесть, что ESP32 — это микроконтроллер частично Гарвардской архитектуры, т. е. шина данных и кода у него расположены отдельно. Однако у чипа есть полноценный MMU, который позволяет маппить регионы физической памяти в виртуальную память, чем мы и воспользуемся в итоге!

Заголовок нашего бинарника будет выглядеть вот так:

Выполняем сторонние программы на микроконтроллерах с Гарвардской архитектурой: как загружать программы без знания ABI? Опрос, Гаджеты, Программирование, C++, Avr, Arduino, Esp32, Embedded, Своими руками, Самоделки, Esp8266, Assembler, Железо, Микроконтроллеры, Длиннопост

Программа общается с основной прошивкой посредством псевдо-syscall'ов: функции, которая в качестве первого аргумента ожидает номер нужной службы и один 32х-битный указатель для описания структуры с параметрами. Реализация syscall'ов — одна из самых простых и неприхотливых с точки зрения обратной совместимости с будущими прошивками.

Выполняем сторонние программы на микроконтроллерах с Гарвардской архитектурой: как загружать программы без знания ABI? Опрос, Гаджеты, Программирование, C++, Avr, Arduino, Esp32, Embedded, Своими руками, Самоделки, Esp8266, Assembler, Железо, Микроконтроллеры, Длиннопост

Концептуально всё очень просто: GetGlobalStateSize сообщает нашему загрузчику размер структуры для хранения глобального стейта, в то время как Start уже фактически заменяет main() в нашей программе. Необходимости в crt0 нет, поскольку весь необходимый инит выполняет бутлоадер ESP32. Впрочем, при желании вы можете выделить отдельный стек для вашей программы — это повысит надежность, если выполняемая программа удумает испортить стек.

Выполняем сторонние программы на микроконтроллерах с Гарвардской архитектурой: как загружать программы без знания ABI? Опрос, Гаджеты, Программирование, C++, Avr, Arduino, Esp32, Embedded, Своими руками, Самоделки, Esp8266, Assembler, Железо, Микроконтроллеры, Длиннопост

Собираем нашу программу:

xtensa-esp32-elf-cc.exe test.c -fno-pic -nostdlib -nostartfiles -Wl,--section-start=.text=0x0

xtensa-esp32-elf-objcopy.exe --only-section=.text --output-target binary a.out run.bin

-fno-pic отключает генерацию кода, зависимого от GOT, -nostdlib и -nostartfiles убирает из билда crt0 и stdlib, благодаря чему мы получаем только необходимый код. --section-start задает смещение для загрузки секции .text на 0x0 (в идеале это делать необходимо из скрипта для ld).
objcopy скопирует из полученного ELF только необходимую нам секцию .text.

Как же это работает на практике? Давайте дизассемблируем выходной бинарник и посмотрим, что у нас дает на выхлопе cc:

Выполняем сторонние программы на микроконтроллерах с Гарвардской архитектурой: как загружать программы без знания ABI? Опрос, Гаджеты, Программирование, C++, Avr, Arduino, Esp32, Embedded, Своими руками, Самоделки, Esp8266, Assembler, Железо, Микроконтроллеры, Длиннопост

Обратите внимание, что Start вызывает подфункции с помощью инструкции CALLX8, которая в отличии от обычного Immediate-версии CALL8, выполняет переход относительно текущего адреса в PC, благодаря чему переход полностью независим от адреса загрузки программы в памяти. А благодаря тому, что все данные, в том числе и указатель на глобальный стейт передаются через стек, нет необходимости релокейтить сегменты данных.

По итогу всё, что нужно от загрузчика бинарников — это загрузить программу в память для инструкций, выделить память для структуры с стейтом программы и передать управление Start. Всё!
Конкретно в случае ESP32, у нас есть два возможных решения задачи загрузки программы в память:

  1. Загрузить программу в IRAM. Такая возможность теоретически есть, однако на практике загрузчик ESP32 устанавливает права только на чтение и выполнение на данный регион памяти. Попытка что-то скопировать туда закончится исключением SIGSEGV. Кроме того, сегмент IRAM относительно небольшой — всего около 200Кб.

  2. Самопрограммирование. Для этого, в esp32 есть два механизма — Partition API и SPI Flash API. Я выбрал Partition API для простоты реализации.


Для нашей прошивки необходимо будет переразметить флэш-память. Для этого запускаем idf.py menuconfig, идём в Partition Table -> Custom partition table CSV. Создаём в папке проекта partitions.csv, куда пишем:

# ESP-IDF Partition Table
# Name, Type, SubType, Offset, Size, Flags
nvs, data, nvs, 0x9000, 0x6000,
phy_init, data, phy, 0xf000, 0x1000,
factory, app, factory, 0x10000, 1M,
executable, data, undefined, 0x110000, 0x10000

Для заливки программы можно использовать соответствующее Partition API, либо parttool.py:

parttool.py --port "COM41" write_partition --partition-name=executable --input "run.bin"

Переходим к загрузчику программы:

Выполняем сторонние программы на микроконтроллерах с Гарвардской архитектурой: как загружать программы без знания ABI? Опрос, Гаджеты, Программирование, C++, Avr, Arduino, Esp32, Embedded, Своими руками, Самоделки, Esp8266, Assembler, Железо, Микроконтроллеры, Длиннопост

Прошиваем ESP32:

idf.py build

idf.py flash

idf.py monitor

И смотрим результат:

SysCall 25

SysCall 35

SysCall 15

Всё работает!

❯ Заключение


Как видите, ничего сложного в выполнении сторонних программ при условии соблюдении некоторых ограничений нет. Да, в таком подходе есть как серьезные плюсы, так и минусы, однако он делает своё дело и позволяет реализовать запуск игр на кастомных игровых консолях, или сторонних программ на самодельных компьютерах. Ну и конечно же не стоит забывать про плагины! Авось в вашем решении нужна возможность расширения функционала устройства, однако предоставлять исходный код или даже объектные файлы нет возможности — тогда вам может пригодится и такая методика.

Пожалуй, стоит упомянуть ещё один… очень своеобразный метод, который я иногда встречаю при реализации самодельных компьютеров. Люди пишут… эмуляторы 6502/Z80 :)
И если такой подход ещё +- применим к ESP32, то в AVR просадки производительности будут слишком серьезными. Так зачем, если можно использовать все возможности ядра на максимум?

Полезный материал?
Всего голосов:
Приходилось ли загружать сторонний код в ваших устройствах?
Всего голосов:
Показать полностью 9 2
[моё] Опрос Гаджеты Программирование C++ Avr Arduino Esp32 Embedded Своими руками Самоделки Esp8266 Assembler Железо Микроконтроллеры Длиннопост
12
21
mega.animeshnik
mega.animeshnik
1 год назад

Уличный датчик температуры и влажности⁠⁠

По сути, это должен быть не первый пост, потому что описываемый датчик полностью несамостоятельный и без базы от него нет пользы. Это не урок или статья "сделай сам", это просто описание моего датчика, вдруг, кого то вдохновит и/или поможет.
База представляет собой микроконтроллер esp32, со всякими датчиками и радиоприёмником на частоте 433мГц. О ней, может быть, как-нибудь в следующий раз, или нет, хз.

Решил значит я замутить себе метеостанцию, дабы в любой момент, со смартфона видеть актуальную температуру, да и вообще, набирать статистику. Под рукой была nodemcu v3 на базе микроконтроллера esp8266.

Уличный датчик температуры и влажности Arduino, Esp8266, Метеостанция, Самоделки, Длиннопост

nodemcu v3

Первая проблема, это питание. Я выбрал батарейки типа AA. На батарейках пишут 1.5В, но это не типа среднее напряжение или как там правильно, новая батарейка без проблем может выдавать 1.6 и чуть больше. 2 батарейки могут выдать 1.6*2=3.2, что допустимо для esp8266, но это пик, а я планирую высаживать батарейки по максимуму т.е. до 1В и ниже, а это уже 2В и ниже. Минимальное напряжение esp8266 2.5В(согласно датащиту https://www.espressif.com/sites/default/files/documentation/...). Плюс, я живу в Сибири и у нас бывают морозы, значит, напряжение надо бы повыше, с запасом.

3 батарейки AA это максимум 1.6*3=4.8, можно округлить до 5В. Для esp8266 5В это много, но в nodemcu v3 есть стабилизатор ams1117, который позволяет подавать до 15В, а на выходе у него те самые 3.3В. Но, не всё так гладко, т.к. у этого стабилизатора ток потребления 5 мА, а это значит, даже если вообще исключить потребитель, стабилизатор всё равно будет кушать 5мА. Согласно batterytest.ru, у батарейки GP Super ёмкость 2451, а это значит, её хватит всего на 2451/5=490,2ч или 20 дней при условие, что в цепи один лишь стабилизатор.

Я выпаял стабилизатор ams1117 и использовал MCP1700-3302E. У MCP1700-3302E ток потребления всего 1.6мкА, хотя, в комментариях, на али писали, что стабилизатор подделка и его потребление выше, но честно, я не замерял, решил довериться. Его максимальное, входное напряжение 6В, но это всё ещё выше 5В. Падение напряжения так же низкое, это я уже замерял, и даже при входе менее 3В, на выходе было лишь на несколько десятых ниже входа, а это значит, что 3 разряженные батарейки смогут выдать 1*3=3В, что будет хватать для питания esp8266.

Уличный датчик температуры и влажности Arduino, Esp8266, Метеостанция, Самоделки, Длиннопост

Вот тут https://itooktheredpill.irgendwo.org/2017/reducing-nodemcu-p... ещё предлагают отключить чип CH340, но я не стал этого делать, т.к. не настолько виртуозно владею паяльником и боялся сломать чип, а на тот момент, обойтись без него не мог.

Далее, была другая проблема, даже если не использовать wi-fi, при включение esp8266 инициализирует его, из за чего краткосрочно вырастает потребление, а экономить надо каждый мАч. Решение нашлось в примере LowPowerDemo, где в readme есть ссылка на https://github.com/esp8266/Arduino/issues/6642#issuecomment-... таким образом, можно отключить wi-fi с контроллер сразу будет загружаться в режиме модемного сна.

Если нет wi-fi, то как передавать данные? С помощью 433мГц и передатчика SYN115. Изначально, я просто подключил его на gpio 14. Но оказалось, что в глубоком сне esp8266 не сохраняет состояние пинов, т.е. даже если я даю команду LOW, 14 пин все равно станет HIGH, когда esp8266 уйдёт в deep sleep. Таким образом, SYN115 не только не перестаёт работать и засоряет эфир(моя китайская метеостанция, теряла связь со своим датчиком, в этот момент), но у нас так же повышенное потребление.

Уличный датчик температуры и влажности Arduino, Esp8266, Метеостанция, Самоделки, Длиннопост

Есть вот такая интересная пикча, на ней видно, что gpio 15, единственный пин, который должен быть притянут к земле, чтобы esp8266 нормально запустилась. По логике, раз там должен быть низкий уровень для старта, значит и в глубоком сне, там будет сохраняться низкий уровень. Я точно не помню, с SYN115 или с другим передатчиком, но ESP8266 отказывалась запускаться, будто я подаю на 15 пин высокий уровень. Так, я решил использовать mosfet 2N7000, его управление на GPIO 15, SYN115 на GPIO 14, таким образом, неважно, какое состояние gpio 14, если gpio 15 LOW.

Датчик температуры и влажности, я решил использовать AHT20, хотя, обычно, в инструкциях про метеостанции, этот датчик не упоминается. Работает по i2c, потребление от 250-980мкА. Можно было, его тоже посадить на тот же mosfet, что и SYN115, но мне было лень.

Всё это запихал в корпус с ali, верхние отверстия заклеил, по боком насверлил отверстий. Чтобы избежать попадания влаги внутрь, сделал небольшие крылья, вырезанные из пластиковой бутылки. Испытания весной прошли успешно, какой бы дождь не лил, а ветер не дул, всё продолжало работать.

Уличный датчик температуры и влажности Arduino, Esp8266, Метеостанция, Самоделки, Длиннопост

корпус

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

Уличный датчик температуры и влажности Arduino, Esp8266, Метеостанция, Самоделки, Длиннопост

От 2 батареек к аналоговому пину А0 провод подключён для контроля заряда батареи.

Теперь об реальном опыте, а он есть.

Несколько дней назад, у нас были морозы, показатель датчика немного завышали, относительно прогноза из интернета, примерно на +1градус. Хотя, смотря какому прогнозу верить, ведь если я смотрю в 4 источниках(яндекс,гисметео,пр5,yr.no), то вижу несколько отличающиеся цифры.

Вот такие данные получены моим датчиком.

Уличный датчик температуры и влажности Arduino, Esp8266, Метеостанция, Самоделки, Длиннопост

усреднённые по времени суток данные

Уличный датчик температуры и влажности Arduino, Esp8266, Метеостанция, Самоделки, Длиннопост

суточный график

Результаты меня порадовали, датчик не замёрз, батарейки выжили. Специально для зимы, покупал в dns батарейки Nanfu AA, т.к. согласно тестам https://batterytest.ru/1120 очень даже ничего.

Уличный датчик температуры и влажности Arduino, Esp8266, Метеостанция, Самоделки, Длиннопост

У меня нет данных, сколько может проработать датчик от батареек, т.к. я впервые занимаюсь всем этим, и делал много ошибок, прежде чем прийти к описанному выше, батарейки высаживались достаточно активно. Первые батарейки проработали с 26.05 по 3.07 и напряжение 2 батареек было 1.98В, следовательно, каждая разрядилась, примерно до 1.98/2=0.99В. Потом были поставлены батарейки под брендом КОСМОС, но я их поменял на Nanfu AA т.к. боялся, что всю зиму те не проживут. КОСМОС проработали с 3.07 по 18.11 и 2 батарейки выдавали 2.44В т.е. батарейки ещё, вполне, были живы.

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

Спасибо всем, кто дочитал :)

Показать полностью 8
[моё] Arduino Esp8266 Метеостанция Самоделки Длиннопост
23
6
Gogogosya
1 год назад
Сообщество Ремонтёров - Помощь

Помогите опознать сгоревший компонент на плате⁠⁠

Плата Arduino compatible based esp8266 (WeMos D1)

Помогите опознать сгоревший компонент на плате Электроника, Помощь, Arduino, Esp8266, Радиолюбители, Длиннопост
Помогите опознать сгоревший компонент на плате Электроника, Помощь, Arduino, Esp8266, Радиолюбители, Длиннопост
Помогите опознать сгоревший компонент на плате Электроника, Помощь, Arduino, Esp8266, Радиолюбители, Длиннопост

Питал по micru usb от 5В, загорелся суровый шестиногий светодиод, сигнализирующий о перегрузке
(плохой контакт...)
А так же вышел волшебный дымок на котором как известно и работает электроника

Помогите опознать сгоревший компонент на плате Электроника, Помощь, Arduino, Esp8266, Радиолюбители, Длиннопост

Я так понимаю это какой-то генератор импульсов, или что-то нужное для понижения напряжения (не особо шарю).
Но думаю, если питать от 5В, то мне эта микруха то и не нужна (?)
Выдрать её, минус на gnd, плюс на vin или прям на стабилизатор – и должно запуститься (?)

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

UPD:
Микруха нашлась

Помогите опознать сгоревший компонент на плате Электроника, Помощь, Arduino, Esp8266, Радиолюбители, Длиннопост
Помогите опознать сгоревший компонент на плате Электроника, Помощь, Arduino, Esp8266, Радиолюбители, Длиннопост
Показать полностью 6
[моё] Электроника Помощь Arduino Esp8266 Радиолюбители Длиннопост
16
139
lisolog
lisolog
1 год назад
Arduino & Pi

Плата WiFi Мониторинга UPS типа smart APC⁠⁠

Основной используемый принцип  -запросы и обработка ответов по смарт-протоколу APC
За исключением того, что плату мониторинга/управления собираем на основе WemosD1mini.

Дешевизна решения очевидна, с учетом того, что самая дешевая сетевая плата AP9640 (без внешних датчиков)  стоит более 500$

Плата собрана по традиции в коробочке из под Тик-Така.

Плата WiFi Мониторинга UPS типа smart APC Arduino, Esp8266, Wemos, Apc, Электроника, Самоделки, Длиннопост

Цель реализации:

  • мониторинг основных параметров UPS на WEB странице, а также в представлении XML и JSON

  • доступ к плате по WiFi. Сохранение параметров подключения

  • сигнализация аварии - отправка сообщения на PHP скрипт по ссылке

  • сбор информации о окружающей температуре и влажности

  • сохранение настроек в EEPROM  FLASH

Детали

  • Wemos D1 mini

  • max3232 module без DB9 разъема

  • разъем DB9 папа

  • DHT-21 датчик температуры и влажности (опционально)

Схема простого подключения APC smart к RS232 COM порту ПК:

Плата WiFi Мониторинга UPS типа smart APC Arduino, Esp8266, Wemos, Apc, Электроника, Самоделки, Длиннопост

Схема микроконтроллера в связке с UPS

Плата WiFi Мониторинга UPS типа smart APC Arduino, Esp8266, Wemos, Apc, Электроника, Самоделки, Длиннопост

Код программы

В коде применены нестандартные библиотеки.

Помимо основной esp8266, ESP_EEPROM и WiFiManager

ups_alarm_script_url - ссылка на скрипт, для передачи алерта пропадания/появления питания, на email или телеграмм, в формате http://server/mail=  или похожем.

Основные Команды

Y        Enter smart mode    SM

R        Exit smart mode    SM

^A        Model string        SMART-UPS 700

^N 1,5s ^N        Turn on UPS

K 1,5s K    Turn off      

L        Input line voltage 

P        Power load %        000.0

Q        Status flags        08

    08 = on line, battery OK

    10 = on battery, battery OK

    50 = on battery, battery low

Z        Shutdown immediately    n/a

f        Battery level        099.0

Сообщения

!!!        нет входного напряжения

$        появление входного напряжения

Скетч для Arduino IDE

Пользуясь случаем, хотел бы передать привет все любителям esp

Показать полностью 3
[моё] Arduino Esp8266 Wemos Apc Электроника Самоделки Длиннопост
76
22
miamornik
miamornik
1 год назад
Серия ESP для Новичков

ESP для Новичков. Часть 3⁠⁠

ДИСКЛЕЙМЕР. Я не гуру программирования, я чуть больше чем новичок. Цель данных постов - популяризация и только. Если вы считаете, что мне надо было начать с другого, писать о другом или писать по-другому, просьба к вам сделать свою серию постов.

Также хочу выразить благодарность @AlexGyver, за его неоценимую работу в популяризации микроэлектроники, а так же за создание отличных и понятных библиотек.

Итак. В прошлом посте мы настроили ArduinoIDE, так же подключили ESP к компу и загрузили в нее тестовую программу. Сегодня мы разберем проэкт умного реле на ESP с управлением через телеграм бота. Для работы мы используем библиотеку все того же AlexGyver - FastBot, как одну из самых простых и понятных в работе.

Для начала разберемся с физической частью. Так как реле у нас 5VDC а сам микроконтроллер 3.3 VDC, в финальном варианте у нас будет дополнительно установлена AMS1117, но на момент отладки она будет не нужна, так как на макетке есть вывод 5V. Подключение будет выглядеть так. Не обращайте внимания что модуль на 2 реле, он отличается только количеством реле.
GND -> GND
5V -> VCC
IO5 -> In1

ESP для Новичков. Часть 3 Arduino, Электроника, Самоделки, Конструктор, Esp8266, Длиннопост

Далее думаю нужно немного отойти от темы и вернуться к ней после создания своего ТГ бота. По ссылке вы найдете подробный гайд по его созданию. Обязательно сохраните токен бота, он будет необходим, так же желательно узнать свой ID, по ссылке выше это также есть. По этой ссылке есть описание библиотеки, которую мы будем использовать.

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

Качаем нужные библиотеки:

ESP для Новичков. Часть 3 Arduino, Электроника, Самоделки, Конструктор, Esp8266, Длиннопост

В поиск вписываем "FastBot"

ESP для Новичков. Часть 3 Arduino, Электроника, Самоделки, Конструктор, Esp8266, Длиннопост

Устанавливаем. Далее перейдем к коду. Код состоит из нескольких основных "этапов", в первой части мы указываем библиотеки и переменные, которые будем использовать в программе, вторая часть это функция при запуске микроконтроллера, обозначается как
void setup( ) { } - Все, что будет указано между фигурных скобок, будет относиться к этой функции. Эта функция запускается один раз при запуске.
Третья часть это функция которая работает по кругу, то есть постоянно исполняется на микроконтроллере и обозначается как
void loop() { } - Все, что будет указано между фигурных скобок, будет относиться к этой функции. Эта функция запускается по кругу до бесконечности.
Так же есть отдельные функции под определенные задачи, они отрабатывают только когда мы их вызываем.

Здесь вы можете найти подробное описание синтаксиса и как пишется код, также у Алекса есть канал на Ютуб где были видеоуроки на эту же тему. (как фанбой ей богу..)

Здесь мы видим часть с объявлением наших переменных и подключением библиотек.
Далее будет код и некоторые пояснения к ниму. Итак.

ESP для Новичков. Часть 3 Arduino, Электроника, Самоделки, Конструктор, Esp8266, Длиннопост

Разберем некоторые положения:
Как видите 15 строка у меня закомменчена, то есть все что идет после "//" не попадает в код и не обрабатывается программой. Закомменченый метод позволяет боту использовать "белый" лист, то есть он будет отвечать только пользователям с ID указанном в скобках-ковычках. В данном случае этот метод исключен.
Строки 26 и 31, в них указано, что при команде Off, положение RELAY(IO5) изменится на ВКЛ, т.е. на этот выход придет логическая единица(иначе говоря придет 3.3 вольта), а на команду On наоборот приходит ВЫКЛ (иначе говоря на выходе будет 0 вольт). Это сделано потому, что сам модуль реле управляется от обратного. Когда на входе модуля реле 0, реле включается и наоборот. Это конечно немного контр-интуитивно, но как есть.
Строка 20, в ней указан метод OTA, что расшифровывается как Over-The-Air. Этот метод позволяет нам прошивать наш контроллер не подключая его к компу, а прямо из ТГ бота. Для этого необходимо экспортировать прошивку как бинарный файл, а затем закинуть ее боту в чат. Делается это так:

ESP для Новичков. Часть 3 Arduino, Электроника, Самоделки, Конструктор, Esp8266, Длиннопост

И собсна сам результат работы контроллера в чате :

ESP для Новичков. Часть 3 Arduino, Электроника, Самоделки, Конструктор, Esp8266, Длиннопост

Если у вас будут вопросы, пишите в комментариях. Я понимаю, что для новичка все это выглядит как набор букв, но без изучения синтаксиса и языка никуда, это нужно просто пройти.. Но спешу заверить, что он не так сложен и не такой объемный как кажется. Так же, могу порекомендовать изучить примеры, что идут в комплекте с ArduinoIDE, найти их можно здесь

ESP для Новичков. Часть 3 Arduino, Электроника, Самоделки, Конструктор, Esp8266, Длиннопост

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

До встречи в следующих постах!

Показать полностью 7
[моё] Arduino Электроника Самоделки Конструктор Esp8266 Длиннопост
13
Партнёрский материал Реклама
specials
specials

Сколько нужно времени, чтобы уложить теплый пол?⁠⁠

Точно не скажем, но в нашем проекте с этим можно справиться буквально за минуту одной левой!

Попробовать

Ремонт Теплый пол Текст
47
miamornik
miamornik
1 год назад
Серия ESP для Новичков

ESP для Новичков. Часть 2⁠⁠

Дисклеймер: Специально для тех 3х людей, что подписались, пишу серию постов про работу с микроконтроллерами. В частности мы будем рассматривать микроконтроллер ESP8266 на примере платы ESP12F. Прошу сразу заметить, я не супер специалист в программировании микроконтроллеров, но за последние пару лет немного в этом поднаторел и считаю что знаю достаточно, чтобы помочь въехать в тему и дальше в ней самостоятельно развиваться. Все ссылки в посте приведены как пример, чтобы понимать цену и как выглядит товар, вы можете найти все это самостоятельно если есть желание на любой другой площадке или другого продавца.

Итак.

ESP для Новичков. Часть 2 Arduino, Электроника, Самоделки, Конструктор, Длиннопост, Esp8266

Платка вставлена в макетку и поджата прищепкой. Далее подключаем к компьютеру через USB и выбираем COM порт. Самый простой способ определить правильный COM порт - это посмотреть какие порты доступны без подключения макетки к компу и после.

ESP для Новичков. Часть 2 Arduino, Электроника, Самоделки, Конструктор, Длиннопост, Esp8266

4ая строка с низу не активна, значит у меня нет активных COM портов. Подключаем макетку

ESP для Новичков. Часть 2 Arduino, Электроника, Самоделки, Конструктор, Длиннопост, Esp8266

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

void setup() {

pinMode(LED_BUILTIN, OUTPUT);

}

void loop() {

digitalWrite(LED_BUILTIN, HIGH);

delay(1000);

digitalWrite(LED_BUILTIN, LOW);

delay(1000);

}

ESP для Новичков. Часть 2 Arduino, Электроника, Самоделки, Конструктор, Длиннопост, Esp8266

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

ESP для Новичков. Часть 2 Arduino, Электроника, Самоделки, Конструктор, Длиннопост, Esp8266

Ждем завершения загрузки и смотрим на ESP12F, на ней должен начать мигать встроенный светодиод синего цвета раз в 1 секунду.

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

Показать полностью 5
[моё] Arduino Электроника Самоделки Конструктор Длиннопост Esp8266
16
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии