ahhx3m

На Пикабу
поставил 148 плюсов и 272 минуса
отредактировал 0 постов
проголосовал за 0 редактирований
Награды:
10 лет на Пикабу
1978 рейтинг 30 подписчиков 18 подписок 39 постов 5 в горячем

Обращение к россиянам

россияне, я не могу понять какого хуя вы до сих пор дома? как вы будете жить дальше?

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

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

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

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

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

это была ваша последняя Олимпиада. больше вы не будете гордиться своими победами и медалями.

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

хватит жить как рабы! разве таким вы видели свое будущее? вы же понимаете, что когда вы распорите наволочку и достанет оттуда последние рубли, вас будет грызть совесть, что именно вы виноваты в этом! в том, что не встали с дивана и теперь в нищете и под тотальным прессингом власти ничего не можете себе позволить. или не будет? или все нормальные человеческие качества уже на столько атрофировалась, что будете агриться на "хохлов-фашистов" и в равной майке пиздеть на телевизор как Светлаков?

умойтесь, попейте воды, и подумайте в каком тотальном пиздеце вы оказались. и о том, что будет только хуже!

потом заварите чай, наделайте бутербродов, оденьтесь потеплее и ПИЗДУЙТЕ НА МИТИНГ!!! отстаивать СВОЕ будущее! раз так похуй на войну в Украине.

Показать полностью

STM32F429I Discovery + SDRAM + LTDC под Arduino IDE

Сижу на карантине и придумываю себе сложности. Дома валяется STM32F429I Discovery, вот и решил проверить возможности Arduino IDE для программирования STM32 и данной платки в частности.


Для начала нужно поставить STM32 Cores под Arduino IDE. Детально этот процесс расписан тут https://github.com/stm32duino/wiki/wiki/Getting-Started так что не буду повторяться, тут ничего сложного.


Мне немного не повезло, так как именно этой платки нет в этой сборке, но это не проблема. Можно добавить практически любую стандартную отладочную STM32 вручную, так как драйвера есть в комплекте под большое количество чипов. Вот тут лежит инструкция по добавлению новой платы https://github.com/stm32duino/wiki/wiki/Add-a-new-variant-(board) Но я напишу вкратце со своими конфигами:


1) добавить плату в файл boards.txt (у меня он находится тут ...\AppData\Local\Arduino15\packages\STM32\hardware\stm32\1.8.0\boards.txt) - тут нужные строки  - https://github.com/levkovigor/stm32f429i-disk1_sdram_ltdc/bl...

2) добавить настройки пинов для платы - в папку ...\AppData\Local\Arduino15\packages\STM32\hardware\stm32\1.8.0\variants добавить папку https://github.com/levkovigor/stm32f429i-disk1_sdram_ltdc/tr...


Теперь в меню выбора плат в Arduino IDE в разделе Discovery появится наша платка.


После добавления платы я проверил все стандартные возможности:

цифровые входы/выходы, аналог, шим, уарт, SPI, I2C, прерывания, freertos и т.д.

В большинстве случаев все отлично работает, но некоторые вещи с дополнительными костылями под stm32


Также отлично завелся гироскоп, который есть на плате через библиотеку Adafruit_L3GD20 (только старую, в которой есть SPI, а не I2C)


После этого всего я дошел до экрана и тут началось веселье. Контроллер экрана здесь стоит ILI9341, поэтому для начала я попробовал завести его через SPI и библиотеку Adafruit_ILI9341. С небольшими допилами это получилось - нужно было добавить вручную инициализацию пинов под SPI:


__GPIOC_CLK_ENABLE();

__GPIOD_CLK_ENABLE();

__GPIOF_CLK_ENABLE();

GPIO_InitTypeDef GPIO_InitStruct;

GPIO_InitStruct.Pin = GPIO_PIN_2;

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

GPIO_InitStruct.Pull = GPIO_NOPULL;

GPIO_InitStruct.Speed = GPIO_SPEED_LOW;

HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

GPIO_InitStruct.Pin = GPIO_PIN_13;

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

GPIO_InitStruct.Pull = GPIO_NOPULL;

GPIO_InitStruct.Speed = GPIO_SPEED_LOW;

HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);

GPIO_InitStruct.Pin = GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9;

GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;

GPIO_InitStruct.Pull = GPIO_NOPULL;

GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;

GPIO_InitStruct.Alternate = GPIO_AF5_SPI5;

HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);


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


Сначала прикрутил SDRAM  https://github.com/levkovigor/stm32f429i-disk1_sdram_ltdc/bl...

командами SDRAM_Read8 и SDRAM_Write8 можно записывать/считывать значение в памяти по адресу.


После этого прикрутил LTDC - для работы экрана через память - https://github.com/levkovigor/stm32f429i-disk1_sdram_ltdc/bl...

команда PutPixel меняет цвет пикселя по координатам x, y


Осталось только перевести экран в соответствующий режим работы, для этого нужно задать набор команда по SPI конроллеру ILI9341 - для этого я использовал все ту же библиотеку Adafruit_ILI9341, в которую дописал функцию begin_ltdc() - доработанные файлы библиотеки также лежат в репозитории.


Ну и видео на котором можно оценить разницу в скорости работы двумя методами: заливка экрана черным > синим > красным с задержкой в одну секунду через SPI и LTDC.

Кстати тачскрин тоже работает, для этого нужна библиотека Adafruit_STMPE610, тут только пини для I2C надо правильные задать.


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

Показать полностью 1

ESP32: Прошивка по воздуху через GSM

В продолжение к предыдущему посту https://pikabu.ru/story/gsm_ppp_protokol_dlya_esp32_pod_ardu...


Добавил пример обновление прошивки через GSM: https://github.com/levkovigor/pppos_client/blob/master/gsm_u...


Сначала переводим GSM в PPP режим, подключаем PPP на ESP32, скачиваем файл с сервера (в примере - обычная Blink прошивка на GPIO2 http://factorial-group.com.ua/upload.bin) обычным GET запросом. При закачке файла Header отсекается (из него я только взял размер файла, чтоб выводить процент закачки) и все остальное записывается в файл update.bin в SPIFFS (файловая система памяти SPI Flash, которая обычно уже есть на стандартных разведенных esp32 модулях). После того, как файл скачивается, запускается стандартная функция обновления прошивки с файла из памяти, взятая из готового примера.


При заливки примера нужно выбрать подходящий вариант схемы разделов. Я выбрал стандартный Default 4MB with spiffs.


А вот попытки прикрутить PPP к WiFi точке доступа, чтоб сделать WiFi GSM роутер, пока не увенчались успехом. Если у кого-то есть идеи по этому поводу, можем скооперироваться.

GSM PPP протокол для ESP32 под Arduino IDE

Общая информация:

Большинство GSM модулей могут работать с интернетом не только через AT команды, а и через PPP (Point-to-Point Protocol).  Стандартные GSM модемы для компьютеров работают именно по PPP. Когда вы поключаете модем к компьютеру, то он стандартными AT командами переходит в режим PPP и потом вешается на сетевой протокол через PPPOS (PPP over serial) и таким образом может использоваться как нормальное подключение к интернету (как WiFi или Ethernet). Но библиотеки для работы с PPP довольно большие и перенести их так просто на любой контроллер  типа Arduino, STM не получится. Поэтому на контроллерах обычно используют AT команды.


Для чего он мне понадобился:

Когда я захотел добавить возможность на ESP32 обновлять прошивку с сервера через GSM, то столкнулся с тем, что загрузить файлы больше десятков килобайт через AT команды просто не удается. Тогда я сделал закачку файла по кусочкам с проверкой целостности каждого пакета. Таким образом конечно можно закачивать прошивку, но очень медленно это происходит (на загрузку 700кБ у меня уходило от 40 минут до несколько часов) и очень часто происходи сбой работы AT команд, а если еще в этот момент будет кто-то звонить или придет SMS, то вобще все плохо.


Порывшись в интернете я нашел очень мало примеров реализаций PPP под контроллеры, вот ссылки:

для ESP32 под esp-idf:

https://github.com/espressif/esp-idf/tree/master/examples/pr...

и на базе стандартного примера https://github.com/loboris/ESP32-PPPOS-EXAMPLE

для STM32F4:

https://habr.com/ru/post/419037/


Получается, что в ESP32 есть готовые библиотеки для работы с PPP,  но все примеры под esp-idf. Конечно же я проверил эти примеры, но я привык в Arduino IDE работать.  Поэтому я просто взял эти исходники и адаптировал под Arduino IDE. Я использовал версию arduino-esp32 1.02. Не все функции с esp-idf работали так как надо в arduino, но все получилось. Я специально убрал автоматическую обработку и отправку AT команд для входа в PPP и сделал ручной ввод, чтоб потом можно было добавить свой стэк AT команд или прикрутить библиотеку TinyGSM


Ссылка на код  - https://github.com/levkovigor/pppos_client


Что еще можно сделать:

1) Для обновления прошивки нужно при скачивание файла (отрезав Header) записывать его в SPIFFS и по окончании скачивание делать обновление (в Arduino IDE есть такой пример)

2) Можно попробовать соединить WiFi точку доступа с PPPOS - получится что-то вроде WiFi GSM роутера.

Пишите ваши идеи

Показать полностью

7-дюймового экрана с тачскрином (Waveshare) - видео пример работы

Видео к посту https://pikabu.ru/story/podklyuchenie_7dyuymovogo_yekrana_s_...


@Nosoropoped напомнил, что я обещал выложить видео с примером работы дисплея. Вот собственно сегодня записал. Устройства делались под квест-комнату. Пользователь должен ввести нужные значения и тогда откроются замки (реле). 


PS.: знаю что оформлено криво, но это не к нам. Мы делали только платы и корпуса, а раскрашивали их дизайнеры, которые оформляют квест-комнату, так что это заказчик будет с ними разбираться.

Показать полностью

Подключение 7-дюймового экрана с тачскрином (Waveshare) к Arduino

Появилась у меня задача сделать один проект с экраном 7 дюймов с тачскрином. До этого я работал только со стандартными экранчиками под ардуинку не более 4.5 дюймов, которых много есть различных моделей в магазинах. А вот с экранами побольше выбора почти нет, да и информации мало. После долгих изучений я нашел 3 варианта:

1) делать проект на Raspberry, но выйдет намного дороже по комплектующим

2) использовать дисплей Nextion, но он тоже не дешевый и я хочу сделать проект на ESP32 с возможностью удаленной прошивки контроллера по воздуху, а с Nextion такое, как я понял, не получится.

3) с использованием контроллера RA8875


Первые два варианта я оставил как запасные, если не удастся с третим. По поводу RA8875 - есть отдельно готовый модуль от Adafruit https://www.adafruit.com/product/1590, но стоит он тоже многовато, а с учетом того, что нужно еще и экран покупать, то выйдет дороговато. А есть уже готовые модули с этим контроллером и экраном с тачскрином (резистивным или емкостным). Я остановился на таком варианте https://www.waveshare.com/7inch-capacitive-touch-lcd-c.htm

Подключение 7-дюймового экрана с тачскрином (Waveshare) к Arduino Arduino, Esp32, Tft, Тачскрин, Gt811, Тег, Длиннопост

И вот приехал мне этот дисплей с алишки за 47$ как раз перед Новым годом. Сразу же запаял штырьки в правый нижний блок (2х7), так как подключать я его собирался по SPI, а слева выводы под паралельный интерфейс. Библиотеку взял https://github.com/adafruit/Adafruit_RA8875 Но сразу ничего не получилось. Пришлось изучать даташити на этот контроллер и искать информацию в интернете. И вот я наткнулся на одну статью (https://github.com/sumotoy/RA8875/wiki/Various-RA8875-based-...), где написано, что на этом дисплее не выведен SPI и подключить его не получится. Я уже расстроился и подумал, что придется пилить на Raspberry, но продолжил изучать даташиты. Сравнив схемы этого модуля и модуля Adafruit я увидел, что все сходится и SPI там выведен. Но тут выведены еще контакты PS, SIFS0,1, I2CA0,1. Изначально я их не подключил, но в даташите написано, что есть несколько режимов работы контроллера RA8875 - паралельный интерфейс, SPI 3-wire, SPI 4-wire, I2C. И в зависимости от того, какой режим используется надо эти контакты завести на VCC или GND.


И так в случае SPI 4-wire схема подключения такая:

PS - VCC

SIFS0 - GND

SIFS1 - VCC

IICA0 - GND

IICA1 - GND

SDO - MISO

SDI - MOSI

SCL - SCL

CS - любой цифровой выход

LCD_RST - любой цифровой выход

RS_INT - любой цифровой вход


После такого подключения экран заработал:

Подключение 7-дюймового экрана с тачскрином (Waveshare) к Arduino Arduino, Esp32, Tft, Тачскрин, Gt811, Тег, Длиннопост

Сразу хочу уточнить, что ESP32 работает на 3.3В, но если вы захотите подключить экран к Arduino , которая работает на 5В, то нужно согласование уровней, а то можете спалить дисплей (http://we.easyelectronics.ru/Shematech/soglasovanie-logiches...)


После этого начал разбираться с тачскрином. В этой же библиотеке Adafruit_RA8875 есть возможность работы с тачскрином, а на контроллер RA8875 должны быть заведены контакты тачскрина Y+, Y-, X+, X- Но это сработает только в случае резистивного тача. А у меня модуль с емкостным и контакты его заведены на контроллер GT811. И тут опять возникла проблема: нет ни одной библиотеки для подключения этого контроллера к ардуино. Подключается он по I2C  - 4 нижних контакта на этой же колодке (2х7):


SDA - I2C_SDA

SCL - I2C_SCL

СT_RST - любой цифровой выход

CT_INT - любой цифровой вход


Пришлось опять читать даташиты и искать в интернете информацию. Была найдена библиотека на GT811 для контроллера GD32 - аналог STM32 (https://github.com/pysco68/waveshare-hid/blob/master/src/gt8...) Детально ее изучив, переписал на простую библиотеку под ардуино https://github.com/levkovigor/GT811

На данном тачскрине можно отслеживать до 5 одновременных касаний.


Теперь остается только откалибровать координаты тачскрина относительно координат экрана и можно пилить проект.

Показать полностью 2

Баг на Pikabu

Захожу я на пикабу, а у меня вход под админа. У вас что-то поломалось или первоапрельская шутка?

Баг на Pikabu Права администратора, Баг

Выход ардуинки из сна по таймеру

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


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

Детальнее о прерываниях и о том, какие входа можно использовать под прерывания можно прочитать здесь  https://www.arduino.cc/en/Reference/AttachInterrupt

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


Следующая возможность ардуинки - уходить в сон для сбережения энергопотребления. Детальнее о режимах сна и потреблениях тока в разных режимах можно прочитать здесь https://www.gammon.com.au/forum/?id=11497


Самый экономный режим - это SLEEP_MODE_PWR_DOWN : 0.36 mA

Теперь рассмотрим каким образом можно выйти из сна.

Выход из может осуществлятся двумя методами:

1) WatchDog Timer - грубо говоря внутренний таймер. Максимальное время сна от 7-9 секунд. Можно использовать и его, как таймер. Например если вам надо, чтобы ардуинка выполняла какое-то деуствие каждый час, а между этим спала, то можно просыпаться каждые 7-9 секунд, суммировать время сна и если набежал час, то выполнять действие. Недостатком этого метода является то, что нужно часто просыпаться и время сна 7-9 секунд не является константой, а колебается постоянно в этих пределах, соответственно на большом отрезке времени будет большая ошибка суммарного времени.

2) по внешнему прерыванию (нажатие кнопки, геркон и т.д.)

Об этих методах вы также можете прочитать здесь https://www.gammon.com.au/forum/?id=11497


В методе рассмотреном  в данном посте мы будем использовать внешнее прерывания и модуль часов (RTC DS3231), который будет выполнять функцию будильника.


Собираем схемку как показано на картинке

Выход ардуинки из сна по таймеру Arduino, Sleep Mode, Rtc, Interrupt, Длиннопост

Модуль RTC DS3231 работает по I2C и на нем можно запрограммировать будильники (возможно установить 2 будильника). В обычном режиме на выходе SQW сигнал HIGH, при срабатывании будильника сигнал будет LOW - это мы и будем использовать на прерывании.


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


Для работы с будильниками нужно скачать библиотеку https://github.com/jarzebski/Arduino-DS3231


И пример моего кода я выложил тут http://paste.ofcode.org/7DPT3ZmdjEe5NjqS2jrEX2


Вот то, что вы должны видеть в мониторе последовательного порта


21-02-2000 00:58:52 - Wednesday

Sleep

Wake UP

21-02-2000 00:59:52 - Wednesday

Sleep


таймер выставляется в минутах тут

setSleepTimer(1); - в данном случае стоит 1 минута


также, если вам нужно, чтобы платка перезагружалась после выхода из сна и заново выполнялся бы setup(), вы можете раскомментировать строку resetFunc();


В данном посте я не рассматривал примеры работы с модулем RTC DS3231, для этого есть примеры в библиотеке. Но если нужно, могу ответить на вопросы или сделать пост.


В следующем посте собираюсь описать возможности прошивки WiFi модуля ESP8266

Показать полностью 1
Отличная работа, все прочитано!