Мое обучение началось, когда я два года назад заинтересовался темой микроконтроллеров и инженер, у которого поинтересовался насчет них, выдал мне плату 300х200мм и сказал, что в ней стоит контроллер STM32F217ZGT6 и на этой плате есть все необходимое для обучения. «В общем, освоишь ее — все остальное покажется фигней» (он, правда, не сказал, что для моргания светодиодом надо настроить SPI, о котором на тот момент я даже не слышал). Спустя три не очень напряженных месяца бесплотных попыток, осознания слабости навыков программирования и огромного количества прочитанных статей пришлось все же раскошелится на STM32VLDISCOVERY и способом копирования программ и экспериментов с ними дело наконец-то пошло, но все равно медленно.
За полтора года успел поработать разработчиком, искал вакансии, где работают с STM32 (так как считаю, что сейчас это наиболее перспективные микроконтроллеры своего класса), нахватался опыта и когда дело дошло до диплома, вспомнил о своих наболевших мозолях. Идея с темой пришла мгновенно: «Отладочная плата на STM32 и (полноценный) обучающий курс (для самых маленьких) к ней».
Да, знаю, знаю, от многих инженеров слышал, что с темой «отладочная плата» «будь я преподавателем, я бы тебя завалил на защите», но все же считаю, любая идея имеет право на жизнь, так что всем, кому интересно, прошу читать далее.
Я в курсе, что существует множество статей, где написано, что, где и как. И как работать с регистрами, как понимать, что они делают и т.д. и т.
Именно по этому захотел написать цельный и законченный курс, чтобы так сказать другие не мучились и самому разобраться. Так что придя в институт и понимая, что для быстрого освоения и понимания нужен стимул (а точнее — хороший такой пинчище), я стал бить себя пяткой в грудь (рыть себе могилу), что не только напишу обучающий курс (в нашем универе пришлось назвать его методическим пособием), но и макет работающий предоставлю. Тему приняли, задание написал (могилу вырыл, надгробие заказал), дело было за малым, все написать и разработать (лечь в могилу, закопаться и поставить надгробие).
Жизнь показала, что времени у меня было отнюдь не полгода, но все же все время, отведенное на диплом, почти закончилось, совсем скоро защита, но как не удивительно все не только готово, но и почти на 100% протестировано (на живых людях в том числе).
На выходе получилось следующее:
Придя на первую работу в качестве разработчика электроники, я столкнулся с одним интересным мнением и, как оказалось, оно весьма распространено. Это мнение звучало примерно так: «Вот я программист и программирую микроконтроллеры, схемотехнику не знаю и знать не хочу, паять, кстати, тоже не умею». Пообщавшись с группой программистов вне фирмы, понял, что человек с моей работы далеко не одинок в своем мнении и хоть я его и не поддерживаю, понять и уважать мнение окружающих стоит, тем более это отлично вписывалось в тогдашнюю концепцию отладочной платы «все на борту». В связи с этим плата получилось достаточно «жирненькая», получила название STM32SB (SB-StudyBoard) V1.0b. Ниже разберем, что в нее вошло.
1. Микроконтроллер
Исходя из того, что я работал с микроконтроллером STM32F103RET6, он и был выбран для проекта.
2. Схема питания и аппаратный USB контроллера
В этом микроконтроллере есть встроенный USB, который было решено вывести на отдельный разъем.
3. Спикер
Было решено ввести для освоения ШИМ модуляции и обучению написанию мелодий.
4. Цифровой индикатор и сдвиговый резистор
Для одновременного освоения динамической индикацией и сдвиговым регистром было решено их совместить.
5. Светодиоды
Светодиоды, что может быть лучше? Только трехцветные светодиоды, на которых можно освоить плавную смену цветов.
6. ЖК-дисплей
Стандартный ЖК-дисплей на 2 строки по 16 символов для освоения параллельного интерфейса.
7. Клавиатура
Матричная клавиатура, это нужно знать и уметь.
8. Расширитель портов ввода-вывода
Много портов ввода-вывода не бывает, а тут еще и I2C освоить можно.
9. Электронный термометр
Датчик температуры по 1-Wire, полезная вещь и ценный опыт работы с ним может пригодиться.
10. Электронный потенциометр
На этой вещице можно освоить полноценный SPI и попробовать сделать замеры изменения напряжения через АЦП.
11. Реле
Хоть это и на уровне поморгать светодиодом, но все же приятно услышать знакомый щелчок, правда?
12. Ключевые транзисторы
Так же на уровне моргания светодиодом, но вдруг кому принцип не понятен.
13. Дублирование свободных пинов на внешних выводах
Ну это естественная конструкция для любой отладочной платы, вдруг все, что в ней есть никому не пригодилось, а подключить, что то свое все же нужно.
14. Преобразователь WIFI-UART(esp8266)
В схеме преобразователь участвует как разъем, также он указан и здесь. Используется уже довольно нашумевший модуль esp8266.
15. Преобразователь USB-UART
USB это всегда круто, сдесь используется чип CP2102.
16. JTAG и SWD
Ну куда же без этих вещей.
Такой широкий набор внешних устройств даст возможность освоить большинство приемов и попробовать поработать с большинством интерфейсов, не заморачиваясь закупкой элементов и не отходя от стола, что согласуется с концепцией не только «все на борту», но и «для самых маленьких» (не умеющих паять).
Конечно, не обошлось без накладок, но, как говорит один знакомый инженер, «мастерство инженера измеряется в количестве перерезанных дорожек на первой итерации платы».
Вот список моих «косяков», того, чего я не заметил, забыл или даже не знал при разработке этой платы:
1. Понял, что пины SWD расположены с странном порядке и хоть работе платы это не мешает. Услышал, на мой взгляд, правильное мнение, что их стоит располагать так, как они расположены на STM32VLDISCOVERY, чтобы избежать недоразумений у нового пользователя.
2. Так подключать одноцветные светодиоды, как на данной плате, не стоит, по причине того, что для моргания ими необходимо отремапить JTAG, но получился неожиданный для меня эффект индикации процесса загрузки прошивки.
3. Я разработал свой логотип для этой платы, который хотел перевести в PCB и разместить на плате, но забыл.
4. Для экономии места во второй ревизии платы я бы разместил некоторые не используемые пользователем SMD компоненты на нижней стороне платы.
5. Понял, что для более удобной разводки цепей с кварцевыми резонаторами было бы удобно заменить их на SMD.
6. Забыл подписать, где JTAG и SWD, так же у них не показано, как их подключать и если для JTAG и его разъемом BH-20 все не так сложно, то с SWD ситуация несколько опасней.
7. При разработке футпринта ЖК-дисплея вышел казус и отверстия оказались слишком малы для болтов М3.
8. У преобразователя CP2102 перепутаны выводы RX и TX. Так как я привык, что в документации приводится пример подключения относительно микроконтроллера, а не внешнего устройства, пришлось перерезать таки 2 дорожки.
9. На данной плате расстояние между гребенками выводов не нормировано по дюймам, в связи с этим есть проблема для подключения к беспаечной макетной плате методом втыкания в нее.
10. Вышла накладка с резисторами ограничения тока в цепи индикации включения реле, номинал оказался слишком большой для того, чтобы реле могло коммутироваться.
11. Ну и, как водится, «хорошая мысля приходит опосля». Так, уже после получения платы я понял, что стоило сделать размер ее подходящий хоть под какой-нибудь корпус — видимо придется доработать во второй ревизии.
12. Изначально был заложен маленький цифровой индикатор, так как занимал не большую площадь и был доступен в магазинах, однако оказалось, что на самом деле он везде доступен при заказе от 520 штук, так что пришлось ваять переходник на стандартный цифровой индикатор.
Напоследок покажу вам 3D модель этой платы:
И для сравнения фотографии ее же, как она получилась «в живую», вид с верху:
И вид с боку, чтоб было видно побольше «костылей»:
Извините, но весь проект до сдачи диплома выкладывать мне бы не хотелось, но после этой работы у меня встал вопрос, а стоит ли данный проект развивать? Меня посетила идея написать цикл статей, посвященных обучению, где был бы представлен такой вот полноценный курс по этой отладочной плате, где все написано простыми словами и объяснено на пальцах.
Спасибо за внимание!
Микроконтроллеры STM32 обратили на себя моё внимание двумя новостями. Первая новость была о выпуске платы STM32F4DISCOVERY, которая оснащена аудио-кодеком и микроконтроллером с ядром ARM Cortex-M4 с набором DSP-команд. Вторая новость была о выпуске платы Olimexino-STM32, представляющую из себя Arduino-совместимую плату на базе микроконтроллера STM32F103RB.
В ожидании появления обеих плат на рынке, я приобрёл себе плату Olimex-h203 и недорогой JTAG-отладчик ARM-USB-OCD, чтобы начать осваивать микроконтроллеры STM32 в операционной системе Linux.
Дело в том, что возможность программировать микроконтроллеры STM32 посредством интерфейса ST-Link/V2 в то время была доступна только в операционной системе Windows, к тому же отладчик OpenOCD можно использовать и для программирования других ARM-микроконтроллеров, например AT91SAM. К тому времени уже полгода у меня пылилась на полке плата Olimex-H64, так что для меня это был хороший повод приобрести JTAG-отладчик, чтобы не мучиться с попытками освоить SAM-BA и TCL.
Успешно освоив 8-битные микроконтроллеры, спаяв несколько плат собственной разработки на их основе, я пришёл к выводу, что 32-битные микроконтроллеры удобнее осваивать, используя готовые отладочные платы, прежде чем пробовать разработать и спаять собственную плату.
В случае микроконтроллеров STM32 выбор платы в первую очередь основывается на выборе интерфейса программирования. Это либо IEEE 1149.1 JTAG, либо SWD-отладчик ST-Link. Лично я как пользователь Linux предпочитаю JTAG, поскольку программирование ARM-микроконтроллеров посредством JTAG в Linux поддерживается на базе открытых технологий, хотя по степени глючности оба варианта пока что не превосходят друг друга.
В качестве стартовых отладочных плат для своих микроконтроллеров компания ST Microelectronics выпускает недорогие платы серии DISCOVERY, оснащные встроенным отладчиком ST-Link/V2.
Для разработки и программирования этих плат в Linux требуется скачать и настроить IDE-среду разработки Eclipse. В принципе, после успешной настройки программисту доступна даже возможность пошаговой отладки программы, но на практике при переходе из режима отладки обратно в режим программирования периодически происходит какой-то сбой, так что повторно войти в режим отладки у меня лично получалось через раз. Так что я предпочитаю программировать микроконтроллер из командной строки с помощью утилиты texane/stlink.
Сторонние разработчики оснащают отладочные платы на базе микроконтроллеров STM32 интерфейсом IEEE 1149.1 JTAG для программирования и отладки. Эти платы стоят немножко дороже, но их можно программировать с помощью GDB-сервера OpenOCD.
Однако стоит учесть и то, что для программирования потребуется приобрести JTAG-программатор, в чём OpenOCD в силу своей универсальности как раз и имеет преимущественно перед встроенным ST-Link в платах серии DISCOVERY.
В целом в программировании микроконтроллеров STM32 нет ничего принципиально сложного благодаря тому, что программирование периферийных устройств микроконтроллера осуществляется на основе стандартной библиотеки микроконтроллеров Cortex CMSIS (Cortex Microcontroller Software Interface Standard).
Скачав и установив Standard Peripheral Library для выбранной линейки микроконтроллеров STM32, можно попробовать скомпилировать примеры из папки StdPeriph_Examples, хотя для среды Eclipse и ARM-GCC скорее всего потребуется использовать один из базовых проектов, скопировав необходимые файлы из папки с примером в папку проекта.
Автономный, низкобюджетный оценочный и отладочный набор от STMicroelectronics раскрывает свойства микроконтроллера и его производительность с помощью [[графического интерфейса]]
6 ноября STMicroelectronics анонсировала STM32 на базе ядра ARM® Cortex-M3. Этот компактный инструмент специально разработан для простого ознакомления с особенностями и возможностями нового микроконтроллера и на практике предложить графическую демонстрацию его характеристик в различных условиях. Примеры приложений и полноценный набор программного обеспечения для разработки от Hitex включены в поставку.
STM32 PerformanceStick полностью автономен, имеет интерфейс USB с ведущим компьютером и даёт инженеру самостоятельно убедиться в характеристиках STM32, включая исключительную производительность, режимы пониженного энергопотребления и плотность кода. Включённый графический интерфейс позволяет пользователям изменять конфигурацию STM32 и видеть эффект от этого во время работы приложения второй процессор от ST на базе ARM ядра на PerformanceStick обеспечивает вывод информации на дисплей в реальном режиме времени на ведущий PC.
STM32 PerformanceStick доступен также как часть стартового набора с платой расширения ввода-вывода, позволяющей подключиться к периферии STM32 — USB, CAN, USART, и IrDA для дальнейшей работы с устройством.
Полный неограниченный набор программного обеспечения от Hitex позволяет пользователю изменять и перекомпилировать исходный код приложения, загружать программное обеспечение в STM32, и отлаживать приложения в то время пока они выполняются на PerformanceStick. Програмные инструменты включают полную версию С/C++ компилятора Tasking для ядра ARM, среду разработки HiTOP5 позволяющую редактировать исходный код, программировать устройство и отлаживать приложения. Файлы с исходным текстом примеров приложений предоставляются бесплатно, и могут использоваться в разрабатываемых приложениях. Дополнительные примеры и документация доступны на специальном Web-сайте www.hitex.com/stm32-stick/
STM32 PerformanceStick единственная система разработки для STM32, которая создана на базе концепции оценки микроконтроллера через непосредственное отображение информации о производительности. При низкой цене она обеспечивает полноценное готовое к использованию решение и является идеальной отправной точной для разработчиков. PerformanceStick включает микроконтроллер STM32 с ядром ARM Cortex-M3 работающем на частоте до 72МГц, 128Кбайт Flash памяти , 20Кбайт RAM. Устройство напрямую подключается к USB порту ведущего PC для программирования и отладки.
STM32 PerformanceStick доступно для заказа с кодом STM3210B-PFSTICK. Набор включает предварительно запрограммированный STM32, кабель USB, программный пакет (HiTop5 IDE, Tasking C/C++ ARM компилятор).
В Таиланде есть относительно небольшое, но активное сообщество производителей плат, о которых вы могли слышать и ранее мы уже рассматривали некоторые платы, сделанные в Таиланде, такие как платы ESP8266 и ESP32, 3G Raspberry Pi HAT, а также платформу KidBright.
Теперь еще таиландская компания MakerAsia разработала свою плату CorgiDude, которая основана на базе модуля Sipeed M1 RISC-V AI со встроенным Wi-Fi. Плату продается в комплекте с камерой и дисплеем, который можно использовать для обучения машинному обучению и искусственному интеллекту с помощью программирования MicroPython или C / C++ Читать далее «Сделанная в Таиланде плата CorgiDude RISC-V предназначена для обучения машинному обучению»
Комплекты Crowbits для STEM-обучения, которые состоят из магнитных модулей, были запущены на Kickstarter пару недель назад. Всего доступно пять комплектов, от самого простого Hello Kit, который не требует программирования, до сложного Crowbits Master Kit на основе модуля ESP32 с батарейным питанием, подходящего для создания вашего собственного телефона, портативной игровой консоли, радиолокационной вышки и так далее.
Сегодня в обзоре будет рассмотрен комплект Crowbits Master Kit. В первой части будет рассмотрено содержимое комплекта, как модули механически сочетаются друг с другом, и руководство пользователя, а во второй части будет показан один или несколько проектов из руководства. Читать далее «Обзор комплекта Crowbits Master Kit – Часть 1: первый взгляд на учебный комплект на базе ESP32»
Большинство встраиваемых систем на основе MCU поставляются с прошивкой, запрограммированной на языке ассемблера, языке программирования C и/или C ++. Но, как указано в опубликованной статье под названием «Точка зрения: Lisp как альтернатива Java», функциональные языки программирования, такие как Lisp или Scheme, могут сократить время разработки по сравнению с C/C ++ или Java.
Читать далее «Использование функционального языка программирования Scheme с платой LambdaChip Alonzo STM32»Язык программирования Arduino и IDE Arduino являются наиболее популярными инструментами разработки программного обеспечения для рынка производителей, но им не хватает некоторых функций, имеющихся в профессиональных инструментах, таких как автозаполнение и возможность добавлять точки останова через отладчик, и именно поэтому, в 2019 году, компания объявила о своей работе над Arduino Pro IDE. В настоящее время работа близится к завершению, и в ближайшее время будет представлен выпуск бета-версии Arduino IDE 2.0 на основе фреймворка Eclipse Theia.
Читать далее «Выпущена бета-версия Arduino IDE 2.0 с живым отладчиком и обновленным пользовательским интерфейсом»Популярность платы Raspberry Pico на базе микроконтроллера RP2040 велика. Поэтому поговорим о программируемых модулях ввода-вывода RP2040 — функции, которая отличает ее от большинства других плат микроконтроллеров.
Читать далее «Рассмотрим поближе программируемые модули ввода-вывода (PIO) Raspberry Pi RP2040»В конце ноября 2020 года было объявлено о выпуске BBC Doctor Who HiFive Inventor Coding Kit, целью которого должно стать обучения детей младшего возраста IoT. Но однажды мы заметили, что почтальон оставил посылку прямо у ворот нашего дома. Мы понятия не имели, что это могло быть, пока не прочитали на упаковке, что это было от SiFive.
Читать далее «BBC Dr Who Обзор HiFive Inventor Coding Kit — визуальное программирование Tynker и MicroPython»Пандемия COVID-19 стала катализатором появления новых онлайн-сервисов. Например, Zoom стал настолько успешным, что в этом месяце обогнал IBM по капитализации. Программные инженеры Promwad были вдохновлены этим успехом и решили пойти еще дальше: как насчет реализации видеоконференцсвязи на Smart TV и STB? Тогда у пользователей такого приложения будет возможность не только общаться на работе, но и наслаждаться удаленными встречами с друзьями, болеть за футбольную команду, вместе смотреть фильм или заниматься спортом с тренером.
Читать далее «Как разработать приложения видеоконференцсвязи на основе Gstreamer для приставок RDK и Linux»Жизнь не стоит на месте, и практически одновременно с публикацией первой части обзора появилась новая версия одной из рассматриваемых нами программ. Это добавило работы и поставило новые вопросы, в результате часть таблицы, представленной в прошлой публикации, теперь выглядит по-другому. Модифицированную таблицу можно увидеть в конце статьи.
Внимание! На сайте www.lab169.ru сделан репост этой публикации с полно-
размерными иллюстрациями и возможностью скачать все файлы проектов:
www.lab169.ru/2018/12/25/обзор-визуальных-средств-программирования-микроконтроллеров-часть-2
В прошлый раз мы обсудили особенности программ MicroBlocks и MakeCode. На повестке дня сегодня следующие визуальные среды.
Прежде чем приступить к рассмотрению этих программ, хотелось бы сказать, что все они дают возможность создавать проекты, в которых происходит интерактивное взаимодействие в реальном времени между микроконтроллером и компьютером, и позволяют задействовать в таких проектах множество объектов: виртуальных исполнителей (спрайты, сцену), несколько микроконтроллеров, а в перспективе и компьютерных исполнителей на другой стороне земного шара.
Трудно переоценить то, насколько важно такое богатство возможностей в контексте решения образовательных задач. Одно из наиболее очевидных применений вышеописанному — разнообразные физические эксперименты, а также создание компьютерных моделей физических объектов, явлений и процессов. Например, моделирование движения свободнолетящего тела, моделирование столкновения двух тел, и прочее моделирование физической реальности, требующееся при создании простых и сложных компьютерных игр.
Но даже если не обращаться к компьютерным играм, интерактивность очень помогает осваивать работу с микроконтроллерами. Достаточно щелкнуть по блоку «digitalWrite» мышкой, и светодиод на плате загорится. А если щелкнуть по блоку «analogRead», мы сразу увидим цифровое значение, возвращаемое аналоговым портом, к которому подключен датчик (датчик освещённости, например).
Подобную интерактивность как раз и обеспечивают описанные ниже программы, а также программа MicroBlocks, которую мы обсуждали в прошлый раз.
Давайте посмотрим, как реализована интерактивность в разных программных средах, протестируем скорость работы и оценим прочие особенности, включая возможную функциональность программ для созданных нами автономных устройств.
www.kittenbot.cc
При описании этого программного продукта мне придётся упомянуть о массе «хитростей», но результат того стоит.
Текущая версия — 1.8.1 (не изменялась с момента прошлой публикации). Однако на web-сайте очень долго лежала лишь версия 1.6.5. Не так давно сайт обновился, на нём пропала информация о «старых» (но для нас более чем интересных и актуальных) продуктах компании KittenBot, зато появился инсталлятор программы KittenBlock версии 1.8.0. И не исключено, что ссылок на новые версии тоже долго не будет.
Чтобы получить самую свежую версию программы, следует установить ту, что есть, а потом запустить обновление, щёлкнув по значку ракеты в правом верхнем углу. Очередная хитрость заключается в том, что подойдя к делу творчески, свежий инсталлятор можно найти в одной из временных папок и сохранить себе на будущее.
KittenBlock базируется на Scratch 3, при этом работает не только в Windows 10, но и в Windows 7, позволяет интерактивно взаимодействовать с некоторыми контроллерами на базе Arduino, а также с Micro:bit. Иными словами, у нас появился инструмент, позволяющий писать игры, в которых Micro:bit либо Arduino Uno с подключенными сенсорами будут играть роль игрового пульта. И писать программы автономной работы для устройств на базе этих контроллеров, само собой.
Следующая хитрость. Щелкнув по списку устройств (изначально отображается как «Нет устройства») и выбрав Arduino Uno, а затем установив соединение с нужным коммуникационным портом (щёлкнув по надписи «Не подключено»), Вы НЕ сумеете добиться того, чтобы Ваша плата управлялась интерактивно.
Но данная возможность всё-таки существует! Нужно лишь выбрать вместо Arduino Uno устройство под названием KittenBot. Собственно, именно для управления этим интересным робототехническим набором среда KittenBlock и была изначально создана. Итак, выбираем «KittenBot», нужный коммуникационный порт (который будет помечен как «UNO» или как «Ch440»), а затем нажимаем кнопку «Обновить прошивку».
Робоплатформа KittenBot базируется на UNO-совместимом контроллере RosBot. На палитре блоков мы видим теперь множество специфических команд, но главное, присутствуют и базовые команды работы с цифровыми и аналоговыми портами.
Реальная скорость чтения и изменения состояния портов при работе в интерактивном режиме в программе KittenBlock не является рекордной, но вполне хороша. Скрипты для тестирования представлены ниже.
При тестировании с платой Arduino Uno скорость чтения состояния двух аналоговых портов составила 151 цикл за 10 секунд. А вот с измерением скорости записи возникли проблемы.
Когда я тестировал одну из старых версий, я получил вполне разумный результат около 150 циклов за 10 секунд. Но среда 1.8.1 демонстрирует 1460 циклов за 10 секунд! Вспоминается старая фантастическая комедия, в которой приборная панель на космическом корабле была промаркирована следующим образом: «Разумная скорость», «Световая скорость», «Безумная скорость».
Число «1460» в данном случае говорит нам лишь об одном: программная среда на самом деле не проверяет, действительно ли плата выполнила отправленную команду, или нет. Реальная скорость выполнения команд много ниже. По результатам других тестов она не превышает 120-160 циклов записи за 10 секунд. Иначе говоря, на практике удаётся мигнуть лампочкой не более, чем 12-16 раз в секунду.
Для оценки реальной интегральной производительности системы «KittenBlock + Arduino Uno» пришлось использовать другой метод, опирающийся на измерение частоты автоколебаний, возникающих при отрицательной обратной связи. Результат — 22 переключения состояния в секунду (11 колебаний в секунду), что вполне годится для неспешной езды по линии, например. Скрипт представлен ниже.
На всякий случай напомню, что при использовании программ автономной работы, загруженных непосредственно в микроконтроллер, достижимы совершенно иные скорости: сотни, тысячи, десятки и сотни тысяч переключений состояния в секунду. И для решения многих практических задач такие скорости действительно нужны.
Но давайте продолжим обзор среды KittenBlock. Что действительно импонирует в этой программе — возможность работы не только с «голым» Micro:bit, но и с массой устройств на его основе, например, с робототехническим контроллером Robotbit, умеющим управлять четырьмя обычными или двумя шаговыми двигателями, а также восемью сервомоторами. Список разнообразных поддерживаемых наборов и периферии непрерывно растёт и включает в себя продукцию разнообразных компаний.
Как уже было сказано, подготовка контроллера к использованию в интерактивном режиме достаточно проста, хоть и необходимо помнить о некоторых тонкостях. И стандартная прошивка, и пользовательские программы на плату Micro:bit грузятся быстро и просто.
Процесс создания собственных расширений для среды KittenBlock еще предстоит освоить. Но уже сейчас это неплохой инструмент для изучения текстового программирования контроллеров Arduino с помощью языка Wire (по сути это диалект языка C). При сборке графического скрипта мы не только сразу видим изменения в тексте создаваемой программы, её можно нажатием мыши загрузить в Arduino IDE для дальнейшего редактирования.
Достаточно важно с точки зрения изучения языка Wire то, что разработчики KittenBlock не стали идти по пути неоправданного упрощения. В своих программах необходимо явно указывать нужный режим работы того или иного порта («Вывод режим INPUT/OUTPUT/INPUT_PULLUP»), а также скорость работы последовательного соединения. Все эти требования обусловлены использованием среды Arduino IDE, об этом мы будем говорить чуть подробнее, когда зайдёт речь о среде mBlock3 с расширением AdvancedArduino.
Программируя плату Micro:bit можно изучать язык Python. Точно так же все изменения в графическом сприпте будут отражаться в текстовом окне с правой стороны. При желании можно сделать изменения непосредственно в тексте, сохранить его, загрузить уже использованный ранее, и лишь после этого нажать на кнопку «Выполнить скрипт Python».
А ещё благодаря разработчикам компании KittenBot у нас есть возможность загрузить дистрибутив MakeCode for Micro:bit, работающий без интернет-соединения под управлением операционной системы MS Windows 7.
kittenbot.cc/software
Кстати, как можно заметить, несмотря на то, что программная среда KittenBlock разработана в Китае, перевод на русский язык уже сделан.
www.mindplus.cc
ОЧЕНЬ китайская программа, продукт компании DFRobot. Этот производитель предлагает массу интересных товаров. И «китайское» в данном случае означает качественное, поскольку это то, что китайцы делают для себя, а не для всего остального мира.
Когда Вы зайдете на сайт MindPlus, не пугайтесь и не ищите кнопку перевода на русский язык, просто скачайте дистрибутив (этот квест будет совсем несложен). После запуска инсталлятора нужно будет выбрать английский язык. После запуска программы тоже, и это будет чуть сложнее (из окна выбора устройств выйти и нажать на значок с шестерёнкой).
Текущая версия программы — 1.5.0, раньше на сайте лежала версия 1.2.1, и результаты замера скорости работы именно этой старой версии вошли в таблицу в первой части обзора. Новая таблица с результатами и новой и старой версии в конце статьи.
MindPlus также базируется на Scratch 3 и позволяет создавать для плат Arduino Uno и Micro:bit программы для работы в интерактивном и в автономном режимах.
После того, как Вы настроили язык, подключить плату Arduino Uno будет совсем несложно. Следует щёлкнуть по значку «Extensions» в левом нижнем углу, выбрать вкладку «Board», затем «Arduino Uno». И как только Вы укажете коммуникационный порт («Connect device», порт, помеченный как UNO или Ch440), Вы увидите, что MindPlus попытается соединиться с платой, и спустя несколько секунд самостоятельно начнёт загрузку собственной прошивки (этот процесс отображается над областью Сцены). Пожалуй, с точки зрения удобства подготовки платы Arduino к использованию, всё реализовано наилучшим образом.
После завершения прошивки Micro:bit придётся ещё повращать плату для калибровки акселерометра, об этом следует помнить (MindPlus не сможет подключиться к Micro:bit до тех пор, пока Вы не завершите этот процесс).
О скорости работы. MindPlus показывает отличные результаты при чтении показаний датчиков, и это позволяет с успехом использовать его для программирования различных игр. За 10 секунд происходит 322 цикла чтения состояния двух аналоговых портов!
Но вот со скоростью записи всё грустно. За 10 секунд удаётся мигнуть светодиодом всего лишь 46 раз. Ужасающе плохой результат. Ни о какой программе езды по линии в интерактивном режиме управления робоплатформой речи не идёт (разве что о программе переползания по линии). Интегральный показатель — 8 переключений состояния в секунду при автоколебаниях. Но даже такой скорости работы более чем достаточно для того, чтобы проверить, загорится ли светодиод, если щелкнуть мышкой по графическому блоку, изменяющему состояние порта.
Предоставляемых разработчиками расширений достаточно много, и хотя все они предназначены для работы с продукцией компании DFRobot, могут использоваться и с товарами других производителей. Например, датчик температуры DHT11/22 работает одинаково, независимо от того, кем именно он произведён.
Возможность изучать языки текстового программирования Wire и Python тут тоже присутствует, хотя на мой взгляд, у MindPlus в этом плане больше шероховатостей, чем у KittenBlock. Кстати, оба программных продукта пока не позволяют запускать несколько параллельных процессов на Micro:bit (надеюсь, Вы помните, что MakeCode и MicroBlocks умеют это делать, и насколько это важно).
Обзор программы MindPlus можно было бы закончить словами: «Несмотря на недостатки, отлично подходит для программирования игр, в остальных случаях лучше всё-таки выбрать что-то иное». Однако существует один дополнительный неожиданный аспект, который нельзя не учитывать, когда мы говорим о MindPlus. Эта программа использует для коммуникации с платой Arduino один из вариантов протокола Firmata, а именно этот протокол требуется для работы уникальному продукту в нашем обзоре — среде Snap4arduino.
snap4arduino.rocks
С точки зрения задачи создания программ автономной работы для микроконтроллеров возможности этой графической среды очень скромны. Да действительно, получается преобразовать графический скрипт в текстовой скетч, а потом найти его на диске и загрузить в Arduino IDE. И только. Никаких проработанных библиотек для подключения разнообразных датчиков и исполнительных устройств, присутствует лишь минимальная функциональность. Даже последовательное соединение использовать нельзя, а как без этого отлаживать программы? По сути, таким образом мы можем создать лишь заготовку будущего проекта, которую потом придётся «дорабатывать напильником».
Однако у среды Snap4arduino есть неоспоримое достоинство: идеальная, скоростная и надежная работа с микроконтроллерами в интерактивном режиме. И при чтении состояния портов, и при их изменении. Для проектов, в которых необходима достаточная скорость работы с большим количеством портов, среда Snap4arduino совершенно незаменимый инструмент.
Есть у программы и огромный недостаток: для подготовки платы необходимо загрузить на нее прошивку StandartFirmata с помощью того же Arduino IDE.
«Хардкорные ардуинщики» лишь снисходительно улыбнутся, прочитав такое. «Вот ведь проблема!» Но это не отменяет того факта, что для большинства начинающих это действительно может оказаться непреодолимым препятствием. И уж тем более для учеников начальной школы. Особенно когда нет возможности прошить плату один раз и навсегда. Ведь достаточно загрузить на нее альтернативную программу, и процедуру прошивки придётся повторять.
Но теперь появился выход: оказывается, после того, как мы прошьём плату Arduino Uno в среде MindPlus, становится возможно работать и в среде Snap4arduino!
Таким образом, программы MindPlus и Snap4arduino представляют собой отличную «связку», хорошо работают вместе, дополняя возможности друг друга.
Среда Snap4arduino работает чрезвычайно быстро с платой, на которую загружена прошивка StandartFirmata, и медленнее (но всё равно очень быстро) с платой, на которую загружена прошивка MindPlus, и в режиме чтения, и в режиме записи. Парадоксальным образом прошивка MindPlus ничуть не ухудшает общую интегральную производительность системы. Конкретные цифры можно посмотреть в таблице.
Нужно сказать, что всё вышеизложенное даёт основания для уверенности в том, что проблемы со скоростью записи в среде MindPlus будут скоро устранены.
www.mblock.cc/mblock-software
Разработка компании MakeBlock, новая версия (5.0.0-RC) легендарной программы mBlock, теперь на базе Scratch 3. Чрезвычайно ожидаемый многими продукт, который этих ожиданий пока так и не оправдал.
В настоящий момент позволяет программировать лишь контроллеры Arduino Uno и Mega2560 (но лишь оригинальные Uno и Mega2560) и Micro:bit, но лишь для работы в автономном режиме. Поддержку интерактивного режима обещают.
Для чего пока действительно подходит mBlock5, это для программирования собственных робототехнических наборов компании MakeBlock: mBot, mBot Ranger, Neuron и особенно, Codey Rocky. Причём последний имеет забавную разъёмную конструкцию из головы (Codey) и шасси (Rocky), базируется на ESP32, и при создании программ есть возможность использовать несколько параллельных процессов.
www.mblock.cc/mblock-software
Текущая версия 3.4.11, и таковой, судя по всему, и останется. Продукт уже достаточно старый, базируется на Scratch 2, и в этом есть как свои недостатки, так и свои достоинства.
Скорость работы маловата, но в большинстве случаев её хватает (чтение — 14,4 цикла в секунду, изменение — тоже 14,4 цикла в секунду). Если проект предполагает исключительно чтение состояния и только лишь одного сенсора — вообще нет проблем.
Интегральная производительность на минимально приемлемом уровне (16 переключений состояния в секунду).
Это ПЕРВАЯ визуальная среда, в которой стало возможно использовать и интерактивный режим, и режим создания программ автономной работы («Arduino mode»). Именно для среды mBlock3 к настоящему моменту написано максимальное количество разнообразных методических материалов, а также разнообразных расширений, некоторые из которых трансформируют продукт до неузнаваемости.
mBlock3 с современными 32-разрядными контроллерами работать (считается, что) неспособен, и в настоящий момент представляет собой реализацию идеи «с минимальными усилиями выжать из Arduino Uno почти максимум». А это значит, что программная среда mBlock3 годится и для знакомства с платформой Arduino, и для того, чтобы создавать на базе Arduino Uno проекты, значительно превышающие по сложности основную массу тех, что наводнили Youtube и руководства по программированию Arduino IDE.
Здесь следует упомянуть об одном принципиально неустранимом недостатке сочетания «Scratch+Arduino». Восьмиразрядные платы Arduino имеют существенно меньшую производительность, чем любой компьютер, на котором «крутится» Scratch, а это значит, что поддержку всех возможностей настолько высокоуровневого языка как Scratch на платформе Arduino обеспечить просто не получится. Мы можем составлять программы с использованием блочного языка Scratch. Но вместо списков нам придется создавать массивы, и придумывать для этого специальные блоки. Вместо универсальной переменной с динамической типизацией, которая может хранить и строку, и целое число, и действительное число, нам придётся использовать специальные придуманные самостоятельно блоки для создания типизированных переменных (byte, int, float).
Единственный способ радикального преодоления вышеописанной проблемы — повышение производительности микроконтроллеров и отказ от языков низкого уровня в пользу таких, которые обладают теми же самыми свойствами, что язык Scratch (например, возможность работы со списками, как в Python). Что мы можем сделать пока? До тех пор, пока жизнь заставляет использовать низкоуровневые языки (в том числе при обучении детей), хотя бы немного попытаться нивелировать их недостатки. Ведь за высокоуровневыми языками будущее! Программирование на языках низкого уровня тоже будет использоваться. Но ОЧЕНЬ редко и лишь ОЧЕНЬ узкими специалистами.
«Плохая» (условно) новость: чтобы перейти к «продвинутому» программированию микроконтроллеров Arduino в среде Scratch язык Wire учить придётся. Хорошая новость заключается в том, что теперь его не требуется зубрить! Требуется просто понимание особенностей языка: чем локальная переменная отличается от статической или глобальной, например. Или что произойдёт, если переменной типа byte присвоить значение 255, а потом увеличить её значение ещё на единицу. Кстати, для ответов на подобные вопросы незачем штудировать толстенные фолианты, достаточно посетить сайт arduino.ru, раздел «Программирование».
arduino.ru/Reference
Именно для нивелирования недостатков низкоуровневого языка Wire было создано расширение для среды mBlock 3, которое называется AdvancedArduino. И до тех пор, пока мы в нашей стране не перейдём поголовно к использованию в процессе обучения контроллеров, подобных Micro:bit, Calliope, Adafruit Circuit PlayGround Express и т.д., это расширение будет позволять детям извлекать из программирования удовольствие и пользу.
Итак, сегодня я хочу рассказать не просто о программе mBlock3, а о связке «mBlock3 + AdvancedArduino Extension».
Процесс установки расширения AdvancedArduino чрезвычайно прост и описание его по ссылке ниже.
www.lab169.ru/mblock/advanced-arduino-extension-v1-0/rus
Но здесь размещено русское описание самой первой версии расширения, которую можно даже скачать в виде ZIP-файла и установить, но это будет ошибкой. Правильнее будет установить свежую версию с англоязычной страницы или прямо с сайта mBlock через менеджер расширений (выбрав из списка расширений, доступных для загрузки).
www.lab169.ru/mblock/advanced-arduino-extension-c-v
Первая версия расширения отличается от всех последующих тем, что в ней отсутствует команда явного переключения режима работы порта из состояния «вход» (INPUT) в состояние «выход» (OUTPUT) или в состояние «вход с подтягиванием к высокому уровню» (INPUT_PULLUP). Опыт показал, что операция переключения режима работы является базовой, критически важной для понимания принципов работы микроконтроллера, и полезно, если дети будут с самого начала использовать эту команду в явном виде, поскольку это требуется средой Arduino IDE. А среда mBlock перестанет ошибаться, когда мы начнём использовать номер порта в качестве параметра.
Кроме того, полезно еще приучиться явным образом задавать скорость работы последовательного соединения.
Самая свежая версия расширения «AdvancedArduino» в настоящий момент — 2.5, и она включает в себя (помимо заголовка) 10 блоков, работающих как в интерактивном режиме, так и в режиме «Arduino mode» (базовые блоки из расширения «Arduino», но исправленные для устранения ошибок), 1 блок, который можно использовать как в одном, так и в другом режиме («pinMode», в интерактивном режиме никак не влияет на работу программы, mBlock сам при необходимости переключает порт в другой режим), и 57 блоков, которые следует использовать лишь в режиме «Arduino mode».
На любой компьютер с выходом в интернет можно буквально за несколько секунд добавить расширение AdvancedArduino при помощи менеджера расширений среды mBlock3 (не забывайте о наличии поля Search, очень помогающего быстро найти то, что нужно). Кроме того, если возникают вопросы с использованием того или иного блока, в любой момент времени можно обратиться к примерам, воспроизвести их по образцу, либо скачать целиком в готовом виде и проверить, как они работают. Для этого не обязательно запоминать названия сайтов, достаточно в том же менеджере расширений выбрать AdvancedArduino (в списке доступных или в списке установленных расширений) и щёлкнуть по ссылке «More Info». Страница с примерами откроется в окне браузера.
Что же становится доступным после установки? Использование переменных различных типов, массивов, произвольных функций, графических блоков, включающих фрагменты текстового кода, процессов, запускаемых в фоновом режиме и по расписанию, создание процедур обработки аппаратных прерываний, и т.д. Всё это вплотную приближает связку «mBlock3+AdvancedArduino» к профессиональным системам программирования по набору предоставляемых возможностей.
В заключение хотелось бы сказать, что выбор наиболее подходящего продукта для занятий с детьми зависит от тех задач, которые ставит перед собой педагог. И я очень надеюсь, что информация, которую я здесь изложил, поможет в осуществлении этого выбора.
Приложение.
Таблица результатов тестирования скорости работы Scratch-подобных программных сред.
Название | Чтение | Запись | Интегральный тест |
KittenBlock 1.8.1 | 15,1 | 146 | 22 |
MindPlus 1. 2.1 | 18 | 4,4 | 7 |
MindPlus 1.5.0 | 32,2 | 4,6 | 8 |
Snap4arduino 1.2.7 | 86 | 28,6 | 41 |
Snap4arduino 1.2.7 | 45,4 | 22 | 42 |
mBlock 3.4.11 | 14,4 | 14,4 | 16 |
Внимание! На сайте www.lab169.ru сделан репост этой публикации с полно-
размерными иллюстрациями и возможностью скачать все файлы проектов:
www.lab169.ru/2018/12/25/обзор-визуальных-средств-программирования-микроконтроллеров-часть-2
Добрый день.
Хочу представить Вам очередной проект на ниве программирования распространенных плат Arduino.
Сначала немного истории. С самого момента появления контроллеров развитие принципов работы с ними идет по пути роста абстракции. Первый этап представлял программирование непосредственно в машинных кодах. Программирование было сложным, долгим и требовало очень специфичного склада ума. Поэтому программистов было очень мало.
Но человек существо ленивое, а лень, как известно двигатель прогресса. Придумали первый уровень абстракции — ассемблер. Писать программы стало проще и веселее. Количество программистов возросло. Но все равно ассемблер не очень сильно отличался от машинных кодов.
Поэтому появился следующий уровень абстракции. Языки высокого уровня. Основной целью этих языков бала возможность объяснить машине, что от нее хотят на языке максимально приближенном к человеческому. Это позволяло заниматься программированием людям с менее специфичным складом. Поэтому с развитием языков высокого уровня количество программистов росло, и соответственно росло количество полезных программ, которые они создавали.
Проект FLProg предлагает новый уровень абстракции с довольно смелым заявлением — «Что бы программировать микроконтроллеры, да и компьютеры не обязательно знать языки программирования».
Заявление может показаться слишком смелым, но это возможно и уже доказано в смежной с компьютерами области. Это область программирования промышленных систем автоматизированного управления. Практически с самого начала производители промышленных контроллеров пошли по этому пути. Сейчас стандартом для сред программирования у основных производителей являются языки FBD и LAD. Собственно говоря, как таковыми языками они не являются. Это скорее графические среды для рисования принципиальных иди логических схем.
Такой подход оказался очень удобным для легкого вхождения в разработку систем АСУ инженеров электриков и электронщиков. Разрабатывая проекты установок, они могли легко привязать работу этих установок к алгоритмам работы контроллера. В обслуживании этих установок на объекте так же лучше когда существующий обслуживающий персонал может легко проверить работу системы АСУ, найти проблему. И при этом нет необходимости вызывать по каждому пустяку программиста из «Центра». И это подход себя оправдал. На сегодняшний день почти все системы промышленной автоматики созданы с помощью таких средств разработки.
Такая среда разработки есть у Siemens, ABB, Schneider, да и практически у всех производителей. Но существует и проблема. Все они привязаны к своим контроллерам. А цены на эти контроллеры очень тяжело назвать демократичными.
И вот появились платы Arduino. Дешёвые, с большим набором периферии и шилдов расширений. С интерфейсами совместимыми с дисплеями, датчиками, и другими устройствами. С возможностью прямого подключения к компьютеру, подключению к сети Ehernet и WiFI.
Эти платы идеально подходят для самодельщиков и кулибиных, на которых наша страна всегда была, есть и будет богата. Но, как всегда есть но. Программируются эти платы на языке C. Для большинства этих умнейших людей, с очень прямыми руками, растущими из положенного места, это китайская азбука. Они могут придумать нарисовать, собрать отладить и запустить сложнейшие схемы, но IF, FOR, Case, Void и т.п. это не для них. Конечно, можно почитать инструкции в интернете, поиграться какое — то время, помигать светодиодом с помощью примера. Но для более серьезного применения необходимо детальное изучение языка. А зачем им это? Они не собираются быть профессиональными программистами. У них другой путь. Они что то придумали. Да это проще и красивее собрать с помощью микроконтроллера, но становится для этого программистом, потратив месяцы на изучение языка? Нет, конечно. Собирают по старинке, попроще конечно, но в своей области.
Идея проекта FLProg в том, что бы совместить принципы промышленного программирования с дешевизной и удобством Arduino. В результате должен получится инструмент, позволяющий создавать свои проекты на ардуино любому, знакомому с электричеством человеку.
Читать полностью »
Ardublock – это графический язык программирования для Ардуино, предназначенный для начинающих. Эта среда достаточно проста в использовании, ее легко установить, она практически полностью переведена на русский язык. Визуально сконструированную программу,напоминающую блоки Scratch, легко конвертировать в код Arduino IDE. Да и писать можно, не отрываясь от Arduino IDE – эта программа встраивается в среду программирования в виде плагина. В этой статьей мы рассмотрим такие вопросы как установка Ardublock, настройка и примеры программирования
Для начала работы с программой необходимо ее установить. Для этого выполним несколько простых действий, алгоритм таков:
При установки на Mac для пользователя user путь будет следующим: “/Users/user/Documents/Arduino/tools/ArduBlockTool/tool/ardublock-all.jar”
При установке на Linux: “/home/user/sketchbook/tools/ArduBlockTool/tool/ardublock-all.jar”
Для начала запускаем сам Arduino, заходим в меню Инструменты и там находим ArduBlock, его и выбираем.
Для начала запускаем сам Arduino, заходим в меню Инструменты и там находим ArduBlock, его и выбираем.Открывается окно ArduBlock дополнительно к окну Arduino.
Открывается окно ArduBlock дополнительно к окну Arduino.Можем начинать программировать.
Настроек в ArduBlock нет, а вот значков для программирования предостаточно и каждый из них несет за собой команду в текстовом формате Arduino IDE. В новых версиях значков еще больше, поэтому разобраться с ArduBlok последней версии сложно и некоторые из значков не переведены на русский.
Блоки ArduBlock разделены на 6 категорий.
В разделе «Управление» мы найдем разнообразные циклы.
В разделе «Порты» мы можем с вами управлять значениями портов, а также подключенными к ним звукоизлучателя, сервомашинки или ультразвукового датчика приближения.
Блоки категорий “Numbers/Constants” это переменные
Эта категория включает в себя логические и математические операторы.
Эти блоки являются функциями, которые обычно используются в скетчах для управления режимом работы с программой.
Каждый блок данной категории изображает тип реального устройства, который вы можете напрямую подключить к вашему скетчу.
Программировать в Ardublock очень просто: нужно только соединять блоки в отдельно выделенном для этого черного поля.
Все очень просто. Для начала сохраним наше решение (кнопка Сохранить) в формате ArduBlock (это позволит потом запускать ее в модульном виде и продолжать работу с блоками).
Далее жмем кнопку Загрузить, система спрашивает, куда сохранить программу в виде скетча Arduino и далее показывает нам код программы уже в окне Arduino, проходит компиляция, после чего скетч грузится на платформу.
Это имеющий юридическую силу контракт (Соглашение) между STMicroelectronics International NV, швейцарским филиалом и / или его дочерними компаниями (STMicroelectronics или ST) и вами от вашего имени , или от имени организации, в которой вы работаете и / или нанимаете (Вы).
Пожалуйста, укажите свое согласие с этим контрактом, выбрав «Я ПРИНИМАЮ», или укажите свой отказ от этого контракта, выбрав «Я НЕ ПРИНИМАЮ», как указано ниже в средствах массовой информации,
И / ИЛИ
ПУТЕМ УСТАНОВКИ КОПИРОВАНИЯ, ЗАГРУЗКИ, ДОСТУП ИЛИ ИНОЕ ИСПОЛЬЗОВАНИЕ ДАННОГО ЛИЦЕНЗИОННОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ (ВКЛЮЧАЯ БЕЗ ОГРАНИЧЕНИЙ ЛЮБУЮ ДОКУМЕНТАЦИЮ И ИХ ДРУГИЕ ЧАСТИ) ВЫ СОГЛАШАЕТЕСЬ С ДАННЫМ ЛИЦЕНЗИОННЫМ СОГЛАШЕНИЕМ НА ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ.
ОПРЕДЕЛЕНИЯ Лицензионное программное обеспечение: означает программное обеспечение / микропрограммное обеспечение, примеры, шаблон проекта и всю сопутствующую документацию и средства проектирования, лицензированные и поставляемые в форме объекта и / или исходного кода, в зависимости от обстоятельств.
Ваш продукт: означает ваш продукт или систему ваших конечных пользователей, а также всю сопутствующую документацию, которая включает или работает в сочетании с исполняемой версией Лицензионного программного обеспечения или производным от Лицензионного программного обеспечения, как это разрешено настоящим Соглашением и предоставляется кроме того, такое Лицензионное программное обеспечение или производное от Лицензионного программного обеспечения, разрешенное настоящим Соглашением, выполняется исключительно и исключительно на микроконтроллерных устройствах, произведенных ST или для ST.
ЛИЦЕНЗИЯSTMicroelectronics предоставляет Вам неисключительную, всемирную, непередаваемую (посредством переуступки или иным образом, если иное прямо не разрешено ST), не подлежащую сублицензированию, отзывную, бесплатную ограниченную лицензию на Лицензионное программное обеспечение по адресу:
(i ) использовать, копировать и подготавливать производные работы от Лицензионного программного обеспечения, поставляемого ST в формате исходного кода, с единственной целью проектирования, разработки и производства Ваших Продуктов;
(ii) использовать, делать копии и готовить производные работы (без обратного проектирования) Лицензионного программного обеспечения, которое поставляется ST в формате объектного кода с единственной целью проектирования, разработки и производства Ваших Продуктов;
(iii) делать копии и готовить производные работы части документации Лицензионного программного обеспечения с единственной целью предоставления документации для Ваших Продуктов и их использования;
(iv) создавать, производить, импортировать, экспортировать и иным образом распространять Лицензионное программное обеспечение или производные от Лицензионного программного обеспечения, как это разрешено настоящим Соглашением, исключительно в формате объектного кода, как это включено в Ваши Продукты, или для исполнения на Ваших Продуктах, при условии, что такое распространение регулируется условиями лицензии для защиты Лицензионного программного обеспечения и прав ST на Лицензионное программное обеспечение, таких как настоящее Соглашение (включая, помимо прочего, отказ от гарантий и ограничение ответственности в качестве защиты ST, как те, которые содержатся в настоящем Соглашении).
СОБСТВЕННОСТЬ И АВТОРСКИЕ ПРАВАПраво собственности на Лицензионное программное обеспечение, сопутствующую документацию и все ее копии остается за ST и / или ее лицензиарами. Вы не можете удалять какие-либо уведомления об авторских правах, отказ от гарантий или другие уведомления о правах собственности из Лицензионного программного обеспечения или любых разрешенных копий Лицензионного программного обеспечения. Вы должны предотвратить любое несанкционированное копирование Лицензионного программного обеспечения, включая, помимо прочего, любые части документации.
ОГРАНИЧЕНИЯЕсли иное прямо не указано в настоящем Соглашении, вы не можете продавать, переуступать, сублицензировать, сдавать в аренду, сдавать в аренду или иным образом распространять Лицензионное программное обеспечение в коммерческих целях, полностью или частично.
Вы признаете и соглашаетесь с тем, что любое использование, адаптационный перевод или транскрипция Лицензионного программного обеспечения или любой его части или производной от него для использования с процессорами, произведенными или для любой организации, кроме ST, является существенным нарушением настоящего Соглашения.
Вы не имеете права декомпилировать объектный код Лицензионного программного обеспечения или иным образом осуществлять реконструирование Лицензионного программного обеспечения. Вы не должны использовать Лицензионное программное обеспечение в качестве основы для создания аналогичного или конкурирующего программного обеспечения или продуктов.
Вы обязуетесь соблюдать все применимые законы и постановления, влияющие на использование Лицензионного программного обеспечения, включая любые применимые законы или постановления об экспортном контроле.
Ни название, ни какой-либо товарный знак STMicroelectronics или других участников Лицензионного программного обеспечения не могут использоваться для поддержки или продвижения программного обеспечения или продуктов, полученных на основе Лицензионного программного обеспечения (включая любую его часть) без специального письменного разрешения.
Запрещается частично или полностью использовать, воспроизводить или распространять это Лицензионное программное обеспечение каким-либо образом, в результате чего на данное Лицензионное программное обеспечение будут распространяться какие-либо Условия с открытым исходным кодом (как определено ниже).
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ С ОТКРЫТЫМ ИСТОЧНИКОМЛицензионное программное обеспечение может содержать программное обеспечение в соответствии с Условиями открытого исходного кода (как определено ниже), применимыми для каждой такой части (Программное обеспечение с открытым исходным кодом), как дополнительно указано в Лицензионном программном обеспечении. Такое программное обеспечение с открытым исходным кодом предоставляется в соответствии с применимыми Условиями использования открытого исходного кода и не регулируется условиями лицензии, приведенной ниже. Устанавливая копирование, загрузку, доступ или иным образом используя Лицензионное программное обеспечение, вы соглашаетесь соблюдать такие Условия с открытым исходным кодом в отношении такого программного обеспечения с открытым исходным кодом.Условия открытого исходного кода: означают любую лицензию с открытым исходным кодом, которая требует в рамках распространения программного обеспечения, чтобы исходный код такого программного обеспечения распространялся вместе с ним или иным образом предоставлялся доступным, или лицензия с открытым исходным кодом, которая в значительной степени соответствует определению открытого исходного кода, указанному на www.opensource. org и любую другую сопоставимую лицензию с открытым исходным кодом, такую как, например, Стандартная общественная лицензия GNU (GPL), Общественная лицензия Eclipse (EPL), Лицензия на программное обеспечение Apache, лицензия BSD и лицензия MIT.
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ СТОРОННИХ СТОРОННекоторые части Лицензионного программного обеспечения могут подпадать под действие условий лицензии третьих сторон, как это явно указано в Лицензионном программном обеспечении. В таком случае эти части поставляются в соответствии с указанными условиями лицензии третьей стороны и не подпадают под условия лицензии по настоящему Соглашению. Устанавливая копирование, загрузку, доступ или иным образом используя Лицензионное программное обеспечение, вы соглашаетесь соблюдать такие условия лицензии третьих лиц в отношении этих частей.
ОТСУТСТВИЕ ДРУГИХ ПРАВ ИЛИ ЛИЦЕНЗИЙВам не предоставляются никакие права или лицензии, за исключением случаев, прямо указанных в настоящем Соглашении. Без ограничения общего характера вышеизложенного, никакие права или лицензии не предоставляются в отношении каких-либо продуктов, технологий или прав интеллектуальной собственности ST, кроме тех, которые воплощены в Лицензионном программном обеспечении.
ОТСУТСТВИЕ ГАРАНТИЙЛицензионное программное обеспечение предоставляется «как есть» и «со всеми ошибками» без каких-либо явных или подразумеваемых гарантий. Компания ST и ее лицензиары прямо отказываются от всех гарантий, явных, подразумеваемых или иных, включая, помимо прочего, гарантии товарной пригодности, пригодности для определенной цели и ненарушения прав интеллектуальной собственности. ST не гарантирует, что использование Лицензионного программного обеспечения полностью или частично будет прервано или безошибочно, будет соответствовать Вашим требованиям или будет работать с выбранной Вами комбинацией аппаратного и программного обеспечения.
Вы несете ответственность за определение того, будет ли Лицензионное программное обеспечение подходить для вашего предполагаемого использования или приложения или будет ли достигать намеченных результатов. ST не несет ответственности перед Вами и / или перед любой третьей стороной за производные работы Лицензионного программного обеспечения, разработанного Вами.
ST не уполномочивает кого-либо делать какие-либо заявления или гарантии в отношении Лицензионного программного обеспечения, и любая техническая информация, информация о приложениях или конструкции или рекомендации, характеристики качества, данные о надежности или другие услуги, предоставляемые ST, не представляют собой никаких заявлений или гарантий со стороны ST или измените этот отказ от ответственности или гарантию, и никаких дополнительных обязательств или обязательств, помимо тех, которые явно указаны в настоящем Соглашении, не возникнет в результате предоставления компанией ST такой информации или услуг. ST не берет на себя и не уполномочивает какое-либо другое лицо брать на себя любую другую ответственность в связи с Лицензионным программным обеспечением.
Ничто, содержащееся в настоящем Соглашении, не будет истолковано как:
(i) гарантия или заверение со стороны ST в отношении поддержки производства любого устройства ST или другого оборудования или программного обеспечения, с которым может использоваться Лицензионное программное обеспечение, или иным образом поддерживать или поддерживать Лицензионное программное обеспечение любым способом; или
(ii) обязательство ST и / или его лицензиаров возбуждать или преследовать в судебном порядке действия или иски против третьих лиц за нарушение любого из прав, лицензированных настоящим, или предоставление любых прав на возбуждение или судебное преследование действий или исков против третьих лиц за нарушение.Однако ST имеет право немедленно прекратить действие настоящего Соглашения после получения уведомления о любых претензиях, исках или судебных разбирательствах, в которых утверждается, что Лицензионное программное обеспечение или использование или распространение вами Лицензионного программного обеспечения нарушает права интеллектуальной собственности третьих лиц.
Все другие гарантии, условия или другие условия, подразумеваемые законом, исключаются в максимальной степени, разрешенной законом.
ОГРАНИЧЕНИЕ ОБЯЗАТЕЛЬСТВНи при каких обстоятельствах ST или ее лицензиары не несут ответственности перед Вами или любой третьей стороной за любые косвенные, особые, побочные, случайные, штрафные или другие убытки (включая, но не ограничиваясь, затраты на рабочую силу, повторные убытки). квалификация, задержка, упущенная выгода, упущенная выгода, потеря данных, затраты на закупку заменяющих товаров или услуг и т. , документацию или настоящее Соглашение, даже если ST было уведомлено о возможности такого ущерба.
Ни при каких обстоятельствах ответственность ST перед Вами или любой третьей стороной по настоящему Соглашению, включая любые претензии в отношении прав интеллектуальной собственности третьих лиц, по любой причине иска, не превышает 100 долларов США. Этот раздел не применяется в случаях, запрещенных законом. Для целей этого раздела любая ответственность ST рассматривается в совокупности.
ПРЕКРАЩЕНИЕST может прекратить действие настоящего Соглашения, включая его лицензии, в любое время, если Вы существенно нарушаете какое-либо из его условий и не устранили такое нарушение в течение 30 (тридцати) дней после получения уведомления от ST о таком нарушении. нарушение.После прекращения действия Вы немедленно уничтожите или вернете все копии Лицензионного программного обеспечения (включая, помимо прочего, любую документацию) компании ST. После расторжения ваше единственное оставшееся право будет заключаться в продолжении использования Лицензионного программного обеспечения исключительно в той степени, в которой оно уже было включено до вашего существенного нарушения настоящего Соглашения в ваши Продукты, которые были проданы вами до даты вашего существенного нарушения.
ПРИМЕНИМОЕ ЗАКОНОДАТЕЛЬСТВО И ЮРИСДИКЦИЯНастоящее Соглашение и вопросы, связанные с его действительностью, толкованием или исполнением, должны регулироваться, толковаться, толковаться и применяться во всех отношениях в соответствии с действующим законодательством Швейцарии без обращения к принципам коллизионного права.Стороны прямо соглашаются с тем, что Конвенция Организации Объединенных Наций о договорах международной купли-продажи товаров не применяется к настоящему Соглашению или к их отношениям.
Разрешение споров. Стороны соглашаются на исключительную юрисдикцию в суде кантона Женева, Швейцария, для целей любых судебных разбирательств, вытекающих из настоящего Соглашения. Во избежание сомнений, ничто в этом разделе не препятствует любой из Сторон добиваться временного судебного запрета в суде или трибунале соответствующей юрисдикции.
РАЗДЕЛЕНИЕЕсли какое-либо положение настоящего соглашения станет или станет в любое время или по любой причине не имеющим исковой силы или недействительным, это не повлияет на другие положения этого соглашения, а остальные положения настоящего соглашения сохранят прежнюю силу и эффект, как если бы такие неисполнимые или недействительные положения не были включены в настоящее Соглашение.
ОТКАЗНеспособность или задержка выполнения любой из сторон какого-либо положения настоящего Соглашения не должно действовать и не истолковываться как отказ от любого другого или последующее нарушение того же или другого положения.
ПЕРЕДАЧАНастоящее Соглашение не может быть передано ни Вами, ни какими-либо из Ваших прав или обязательств по настоящему Соглашению какой-либо третьей стороне без предварительного письменного согласия ST. В случае, если настоящее Соглашение фактически переуступается третьей стороне, настоящее Соглашение имеет обязательную силу для правопреемников и правопреемников сторон.
ВЗАИМООТНОШЕНИЯ СТОРОННичто в настоящем Соглашении не создает или не рассматривается как создающее партнерство или отношения принципала и агента или работодателя и служащего между Сторонами.Ни одна из Сторон не имеет полномочий или полномочий связывать, заключать договоры от имени или создавать ответственность для другой стороны каким-либо образом или для каких-либо целей.
ST Visual Programmer (STVP) — это полнофункциональный программный интерфейс для программирования микроконтроллеров ST Flash. Он обеспечивает простую в использовании и эффективную среду для чтения, записи и проверки памяти устройства и байтов опций.STVP поставляется как часть бесплатного набора инструментов ST MCU, который включает интегрированную среду разработки ST Visual Develop (STVP) и компоновщик ST Assembler.
Кроме того, разработчики могут воспользоваться преимуществами Free Programming Toolkit с исходными кодами C / C ++ для всех функций, необходимых для разработки настраиваемого интерфейса программирования на основе STVP для любого поддерживаемого аппаратного обеспечения программирования ST. Он содержит исходный код для всех функций, которые позволяют программному приложению получать доступ к низкоуровневым DLL STVP и программировать микроконтроллеры с использованием любого поддерживаемого аппаратного обеспечения для программирования и методов программирования (сокет, внутрисхемное программирование или программирование на месте).
技术 特性
| 功能 框图 |
订购 型号 | Товар | 美金 价格 | 数量 | 封装 | 包装 形式 | 温度 范围 | 材料 声明 |
СТВП | Активный | 85″> |
描述 | Версия | 大小 |
STVP: DB1116: ST Visual Programmer | 1 | 48 КБ |
描述 | Версия | 大小 |
RN0011: ST Visual Programmer (STVP), выпуск 3.2,6 | 21 | 248KB |
描述 | Версия | 大小 |
UM0151: Набор инструментов для программирования STVP | 6 | 264 КБ |
Инструмент визуального программирования MakeCode для STM32 Blue Pill на основе libopencm3
Это экспериментальный редактор кода для STM32 Blue Pill — попробуйте его на https: // lupyuen. github.io/pxt-maker
Убедитесь, что вы установили GNU Toolchain для Windows / Mac / Linux: https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads
В Windows используйте оболочку Windows Ubuntu bash: https://docs.microsoft.com/en-us/windows/wsl/about
Установите Node.js 8.9.4 или выше.
Установите ниндзя. Для Ubuntu и Windows Ubuntu запустите sudo apt install ninja-build
Для Mac и Linux: установите Docker.Для Ubuntu (но не для Windows Ubuntu) запустите sudo apt install docker.io
. Не устанавливайте Docker для Windows.
Клонируйте супер-репозиторий stm32bluepill-makecode
, который включает pxt, pxt-common-packages
и pxt-maker
.
git clone --recurse-submodules https://github.com/lupyuen/stm32bluepill-makecode
cd stm32bluepill-makecode
Установите зависимости pxt
и соберите его
cd pxt
npm install
npm запустить сборку
CD ..
Установите репозиторий pxt-common-packages
cd pxt-common-пакеты
npm install
CD ..
Установите зависимости pxt-maker.
cd pxt-maker
npm install
Установить командную строку PXT
npm install -g pxt
Ссылка на pxt-maker обратно на базу pxt-репозитория
npm ссылка ../pxt
ссылка npm../pxt-common-packages
Обратите внимание, что приведенная выше команда предполагает структуру папок
stm32bluepill-makecode
|
----------------------------------
| | |
pxt pxt-common-packages pxt-maker
Выполните эту команду изнутри pxt-maker
, чтобы открыть локальный веб-сервер
pxt serve --localbuild
Если локальный сервер открывается в неправильном браузере, обязательно скопируйте URL-адрес, содержащий локальный токен. В противном случае редактор не сможет загрузить проекты.
При исправлении сборки вы можете заблокировать браузер следующим образом:
pxt serve --localbuild --no-browser
Поскольку Docker не поддерживается в Windows Ubuntu, а сборка выполняется быстрее в macOS без Docker, установите следующие переменные среды, чтобы отключить Docker:
экспорт PXT_DEBUG = 1 # - отображать подробную информацию журнала
export PXT_FORCE_LOCAL = 1 # - компилировать C ++ на локальной машине, а не в облачной службе
export PXT_NODOCKER = 1 # - не использовать образ Docker, а вместо этого использовать arm-none-eabi-gcc хоста (не относится к целям Linux)
export PXT_RUNTIME_DEV = # - ОТКЛЮЧЕНО: всегда перестраивать среду выполнения C ++, позволяя вносить изменения в среду выполнения нижнего уровня, если таковая имеется
export PXT_ASMDEBUG = 1 # - добавить дополнительную информацию в сгенерированный двоичный файл.asm файл
Вы можете найти следующие сценарии сборки и отладки полезными:
https://github.com/lupyuen/pxt-maker/tree/master/scripts
Скрипты сборки также доступны как задачи Visual Studio Code при открытии файлов рабочей области stm32bluepill-makecode / build.code-workspace
(для более быстрых сборок с отключенным Intellisense) или stm32bluepill-makecode / workspace.code-workspace
(для упрощения кодирования с включенным Intllisense):
https: // github.com / lupyuen / stm32bluepill-makecode / blob / master / .vscode / tasks.json
В папке pxt-maker
введите следующие команды:
cd проектов / мигание
./build.sh
CD ../..
Это создает файл ПЗУ projects / blink / built / flash.bin
, который содержит образ ПЗУ исполняемого файла Blink. Вы можете прошить Blue Pill, чтобы запустить его, или запустить с эмулятором qemu_stm32
.
Файл ELF (до связывания с кодом мигания) находится в папке pxt-maker / projects / blink / built / codal / build / STM32_BLUE_PILL
. Чтобы выгрузить содержимое файла:
arm-none-eabi-objdump -t -S projects / blink / built / codal / build / STM32_BLUE_PILL> STM32_BLUE_PILL.dump
Обязательно регулярно извлекайте изменения из всех репозиториев. Дополнительные инструкции находятся на https://github.com/Microsoft/pxt#running-a-target-from-localhost
.Эта цель pxt для STM32 Blue Pill зависит от нескольких других репозиториев. Основные из них:
STM32CubeMX_generated_project / Src
на your_project / src
, кроме system_stm32f4xx.c
STM32CubeMX_generated_project / Incproject
в src_project / Incproject , чтобы добавить ссылку , чтобы включить ваш скрипт , чтобы включить , чтобы включить ваш скрипт , чтобы включить ваш скрипт , чтобы включить _project_project / Incproject , чтобы включить . (XXX_FLASH.ld) CMake-Tools настраивается с помощью cmake-kits.json
и settings.json
в каталоге .vscode
. Измените соответствующий путь или переменные для вашего случая.
cmake-kits.json
Используется для настройки набора инструментов. И мы используем файл инструментальной цепочки (gcc_stm32.cmake), предоставленный ObKo / stm32-cmake.
settings.json
Он используется для установки переменных при настройке проекта cmake.
cmake.configureSettings
, содержащий пар ключ: значение
, которые будут переданы в CMake при настройке.
Выберите CMake-Kit
Перезапустите VS Code, откройте Command Pallette, выберите CMake: выберите набор
> Embedded C / C ++ STM32-CMake-Kit, arm-none-eabi 9.3.1
, затем он должен автоматически настроить .
В VS Code это настраивается с помощью tasks.json
Здесь я определил две задачи для сборки и прошивки.
Задача сборки может быть активирована с помощью Ctrl + Shift + B в Ubuntu.
Flash можно вызвать с помощью палитры команд: «Выполнить задачи».
tasks.json
Cortex-debugОтладчик в VS Code настраивается в launch.json, а Cortex-debug является расширением отладчика, что означает, что он предлагает тип отладчика, называемый cortex-debug.
configFiles
Это файл конфигурации для openocd. Если вы использовали apt для установки openocd, путь должен быть таким же.
svdFile
С помощью файла SVD легче проверять значения на периферийном адресе.
Вы можете загрузить файл SVD с этой страницы (STM32F446)> HW Model, CAD Libraries & SVD.
prelaunchTask
Здесь я вызвал задачу сборки, определенную в task.json
перед отладкой.
launch.json
Он настроен в c_cpp_properties.json
Как видите, в отладчике есть еще две боковые вкладки, которые представляют собой значение периферийных устройств и регистров.
Создавайте и редактируйте встроенные программы на Rust для STM32 Blue Pill и Apache Mynewt… Перетаскивая блоки!
Датчики урожая и температуры томатов на Moon Base One
2029 год.Люди заселяют Луну, начиная с Moon Base One .
У вас одна и только одна обязанность… Следить за тем, чтобы в саду на Moon Base One росли красивые красные помидоры.
Как бы вы создали сенсорные устройства IoT для мониторинга условий выращивания в огороде?
… Нравится периодически считывать температуру и передавать данные на сервер IoT?
Не могли бы вы открыть текстовый редактор и написать программу на языке C для управления сенсорными устройствами?
И устранить проблемы с недействительными указателями C, приводящими к сбою сенсорных устройств?
К счастью, в 2029 году появится лучший способ создания встроенных программ… Visual Embedded Rust!
Создавайте программы для устройств IoT… Просто перетаскивая их!
STM32 Blue Pill, микроконтроллер стоимостью 2 доллара в нашем сенсорном гаджете IoT.Работает от литий-ионного аккумулятора 18650 (розового цвета). Подключено к сети NB-IoT через модуль Quectel BC95-G Global NB-IoT (вверху слева).
Сегодня мы научимся создавать приложение датчика Интернета вещей для микроконтроллера, который является крошечным, доступным (менее 2 долларов США), но при этом обладает мощным потенциалом… STM32 Blue Pill .
Вместо того, чтобы писать код на C, мы сделаем это футуристическим способом — путем нарисуем программу с блоками !
Наша визуальная программа будет преобразована в Rust , современный язык программирования, который хорошо работает на самых маленьких микроконтроллерах.
Rust позволяет нам писать безопасный код, чтобы наши устройства не зависали из-за неправильных указателей.
Если у вас нет Blue Pill ( до 2 долларов на AliExpress ), не беспокойтесь! Вас приглашают в наше путешествие, чтобы узнать и понять, как можно визуально создавать программы Интернета вещей.
Наша первая программа Visual Rust
Для первой части руководства , все, что нам нужно, это компьютер (Windows, macOS или Linux). Мы создадим простую визуальную программу, просто выполните следующие действия…
1. Установите Visual Studio Code (VSCode)
Вы используете Raspberry Pi или Nvidia Jetson Nano?
Получите сборку сообщества Visual Studio Code
Что такое VSCode? Это связано с Visual Studio? Как в этом участвует Microsoft? Прочтите это
2. Запустите VSCode
Щелкните Extensions
3.Найдите «визуально встроенную ржавчину» с кавычками
Нажмите «Установить», чтобы установить расширение Visual Embedded Rust
Или нажмите эту ссылку
4. Нажмите «Файл» → «Открыть», чтобы открыть любую папку
5. В панели Explorer → (Имя папки) вверху слева создайте новый исходный файл Rust, например lib.rs
6. Отредактируйте исходный файл Rust. Щелкните Visual Editor вверху справа
7. Когда будет предложено заполнить визуальную программу в исходный файл Rust, нажмите OK
8.Щелкните исходный файл Rust, чтобы увидеть сгенерированный код Rust. Сохраните файл, чтобы сохранить визуальную программу.
Вы должны увидеть экран ниже. Давайте изучим четыре основных блока (или функции) в программе Visual…
Редактирование программы Visual Embedded Rust с помощью кода Visual Studio
[1] При запуске
При запуске отмечает начало программы . Здесь мы определяем некоторые константы — значения, используемые программой, которые не изменяются во время работы программы…
1.SENSOR_DEVICE — это имя датчика, который программа будет опрашивать (периодически проверять). Мы будем опрашивать внутренний датчик температуры Blue Pill, который называется temp_stm32_0
2. SENSOR_POLL_TIME — временной интервал (в миллисекундах) для опроса датчика. Мы установим это значение на 10 секунд (или 10 000 миллисекунд)
3. TEMP_SENSOR_KEY — это имя поля данных датчика, которое наша программа будет отправлять на сервер. Назовем его t, чтобы сообщить серверу, что мы отправляем значение температуры.
4. TEMP_SENSOR_TYPE — это тип данных датчика, которые будет отправлять наша программа: Исходная температура окружающей среды в целых числах (целые числа от 0 до 4095), следовательно, SENSOR_TYPE_AMBIENT_TEMPERATURE_RAW
Почему мы отправляем температуру в исходном виде вместо обычного десятичного ( с плавающей точкой), например, 28,9 градуса Цельсия? Это потому, что у Blue Pill очень ограниченное ОЗУ и ПЗУ. Отправка необработанной температуры без преобразования избавит нас от резервирования ОЗУ и ПЗУ, которые потребуются для преобразования с плавающей запятой.Вместо этого мы позволим серверу преобразовать.
По соглашению Rust, имена констант пишутся в верхнем регистре. Следовательно, мы называем константы SENSOR_DEVICE вместо sensor_device
Затем мы вызываем функцию start_sensor_listener, чтобы начать опрос датчика температуры каждые 10 секунд. Подробнее об этом в следующем разделе.
Наконец, мы вызываем start_server_transport, который является системной функцией, определенной в библиотеке sensor_network. Эта функция запускает фоновую задачу для установления соединения с сетью NB-IoT .В этом руководстве мы будем передавать данные датчиков по сети NB-IoT, которая доступна по всему миру.
Для завершения может потребоваться несколько секунд, но функция выполняется в фоновом режиме, поэтому другие задачи, например опрос датчика температуры, не задерживаются.
Обратите внимание на соглашение Rust …
sensor_network :: start_server_transport относится к функции start_server_transport, которая находится в библиотеке Rust sensor_network. Библиотеки Rust также известны как «Ящики».
Blocks Bar
Как была создана функция On Start ?
Путем перетаскивания блоков с панели блоков слева от визуальной программы.
Вот как мы создаем Визуальную программу … Расставляя блоки, чтобы составить программу!
Проверьте это…
Создание функции при запуске с помощью Visual Embedded Rust
[2] Запустить Sensor Listener
Для start_sensor_listener With… это способ, которым мы определяем функции в Визуальной программе. Здесь мы определяем start_sensor_listener как функцию, которая принимает 4 параметра (или входных данных), значения которых мы видели в предыдущем разделе…
1. sensor_name: Имя датчика для опроса. Установите значение SENSOR_DEVICE (т.е. temp_stm32_0)
2. sensor_key: Имя поля данных датчика, которое будет отправлено на сервер. Установите значение TEMP_SENSOR_KEY (т.е. t)
3. sensor_type: Тип данных датчика, которые будут отправлены на сервер.Установите значение SENSOR_TYPE_AMBIENT_TEMPERATURE_RAW
4. poll_time: Интервал времени (в миллисекундах) для опроса датчика. Установите значение SENSOR_POLL_TIME (т.е. 10 000 миллисекунд или 10 секунд)
Затем мы вызываем системную функцию set_poll_rate_ms, определенную в библиотеке датчиков. Библиотека датчиков поступает из операционной системы Apache Mynewt , которая управляет всеми датчиками Blue Pill.
Вызывая функцию set_poll_rate_ms с параметром sensor_name, установленным на temp_stm32_0, и poll_time, установленным на 10000 (миллисекунды), мы просим систему опрашивать датчик температуры каждые 10 секунд.И система будет получать значение температуры от нашего имени каждые 10 секунд.
Что делать со значением температуры? Мы определим функцию слушателя для передачи данных. Но сначала…
Мы вызываем функцию mgr_find_next_bydevname (также из библиотеки датчиков), чтобы получить драйвер датчика из системы и сохранить его в переменной sensor_driver. Передавая sensor_name как temp_stm32_0, функция возвращает драйвер, ответственный за управление датчиком температуры. Через некоторое время драйвер будет использоваться для настройки функции прослушивания.
Перед этим проверяем, действительно ли найден драйвер сенсора. Если бы мы неправильно написали имя датчика, драйвер датчика не был бы найден, и ему было бы присвоено значение null, специальное значение Rust, которое означает «ничего». Следовательно, мы проверяем, что sensor_driver не равно нулю.
Мы создаем слушателя датчика (сохраненного как слушатель), вызывая системную функцию new_sensor_listener, передавая sensor_key (установлен в t) и sensor_type (необработанная температура окружающей среды).func — это имя функции прослушивателя, которая будет вызываться после чтения данных датчика: handle_sensor_data. О чем мы поговорим в следующем разделе.
Чтобы зарегистрировать функцию прослушивателя в системе, мы вызываем системную функцию register_listener, передавая sensor_driver и прослушиватель датчика, которые мы только что создали.
После этого операционная система будет автоматически считывать датчик температуры каждые 10 секунд и вызывать нашу функцию handle_sensor_data со значением температуры.
Если вам интересно, как сложная функция start_sensor_listener была создана с нуля, посмотрите это видео…
Создание функции start_sensor_listener с помощью Visual Embedded Rust
[3] Обработка данных датчика
Как следует мы обрабатываем считанные данные о температуре? handle_sensor_data передает данные датчика другой функции send_sensor_data, которая передает данные датчика на сервер. Позже мы узнаем больше о send_sensor_data.
Функция handle_sensor_data, кажется, мало что делает… почему мы так спроектировали программу? Он предназначен для будущего расширения — когда нам понадобится более сложная логика для обработки данных датчиков, мы поместим логику в handle_sensor_data
handle_sensor_data можно расширить для обработки нескольких датчиков, агрегируя данные датчиков перед передачей. Или он может проверить наличие определенных условий и решить, следует ли передавать данные. Эта программная структура дает нам наибольшие возможности для расширения в будущем.
[4] Отправить данные датчика
Последняя функция в нашей программе, send_sensor_data, вызывается handle_sensor_data для передачи данных датчика. Параметр sensor_data содержит имя поля t и значение датчика, например 1715. Помните, что это необработанное значение температуры. Позднее сервер преобразует исходное значение в градусы Цельсия.
Мы вызываем get_device_id из библиотеки sensor_network, чтобы получить идентификатор устройства из системы.Это длинная строка из случайных букв и цифр, например a8b2c7d8e9b2 … Каждый раз, когда мы перезапускаем Blue Pill, мы получаем другой идентификатор устройства. Мы будем использовать этот идентификатор устройства позже, чтобы однозначно идентифицировать нашу Blue Pill и проверить, получил ли сервер данные датчика температуры от нашей Blue Pill.
Затем мы вызываем init_server_post (также из библиотеки sensor_network), чтобы подготовить сообщение с данными датчика, которое будет отправлено на сервер. Поскольку Blue Pill имеет ограниченную оперативную память, эта функция гарантирует, что только одной задаче будет разрешено составлять сообщения в любое время.Остальным задачам придется дождаться своей очереди.
init_server_post возвращает результат «истина / ложь» (известный как логическое значение), который указывает, установлено ли сетевое соединение NB-IoT. Это хранится в переменной network_ready.
Только когда network_ready имеет значение true, что означает, что устройство подключено к сети NB-IoT, мы приступаем к составлению сообщения CoAP.
Что такое сообщение CoAP? Это стандартный формат для передачи данных датчиков через NB-IoT.Здесь мы передаем два значения данных в сообщении CoAP …
1. device_id: случайно сгенерированный идентификатор устройства, который однозначно идентифицирует нашу Blue Pill. Это поле должно быть передано с именем поля device
2. sensor_data: Содержит имя поля t и значение датчика, например 1715
Сообщение CoAP передается только при вызове функции do_server_post. Опять же, эта передача происходит в фоновой задаче, поэтому она не помешает нашей программе опросить датчик.
Обратите внимание, что _payload называется по-другому … он начинается с подчеркивания _. По соглашению Rust переменные, которые установлены, но не читаются, должны быть названы с подчеркиванием _ в качестве первого символа. Потому что компилятор Rust предупредит нас о неиспользуемых переменных.
Это эффективно сообщает компилятору Rust: «Да, я устанавливаю переменную _payload и не использую ее значение… Пожалуйста, не предупреждайте меня, что я мог неправильно написать имя _payload».
В конце функция, мы отображаем URL-адрес в журнале Blue Pill, который содержит идентификатор устройства.URL-адрес выглядит следующим образом: https://blue-pill-geolocate.appspot.com/?device=5cfca8c…
Позже мы щелкнем по этому URL-адресу, чтобы убедиться, что сервер получил данные нашего датчика.
Сообщения CoAP объясняются в этой статье
Визуальная программа
И это полная программа для сенсорного устройства IoT, которое считывает датчик температуры каждые 10 секунд и передает данные на сервер через сеть NB-IoT.
В виде визуальной программы это выглядит так просто и элегантно! Теперь давайте докажем себе, что это действительно работает…
Сгенерированный код Rust представляет собой особый вид кода Rust, известный как «Typeless Rust». См. Разделы « Что не так с Rust? Виды! »и« Typeless Rust ». Чтобы понять сгенерированный код Rust, прочтите эту статью
Компиляция программы Rust
Готовы испытать на себе, как программа на Rust компилируется в прошивку ROM? Вам пока не нужна синяя таблетка, просто выполните следующие действия…
1.Следуйте приведенным здесь инструкциям , чтобы установить Embedded Rust и Apache Mynewt
. Вы можете пропустить разделы « Дополнительно: Установить Rust Language Server » и « Дополнительно: Настройки программы »
2. Скопируйте исходный файл Visual Program в папку stm32bluepill-mynewt-сенсор / ржавчина / приложение / src / lib.rs. Перезаписать существующий файл.
3. Удалите файлы app_network.rs и app_sensor.rs в этой папке
4. Скомпилируйте программу Rust, нажав Терминал → Выполнить задачу → [2] Build bluepill_my_sensor
Когда наша программа Rust была успешно скомпилирована как Прошивка Blue Pill ROM, мы должны это увидеть…
Если вы хотите внести какие-либо изменения в визуальную программу, используйте визуальный редактор для редактирования файла stm32bluepill-mynewt-sensor / rust / app / src / lib.rs
Как код Rust был включен в сборку Mynewt? Проверьте раздел «Расширенная тема: Хостинг Rust на Mynewt»
Blue Pill, подключенный к модулю Quectel BC95-G NB-IoT и ST-Link V2
Flash The Firmware To Blue Pill
Пора использовать нашу Голубую таблетку! Следующим шагом будет прошивка прошивки в ПЗУ Blue Pill. Нам нужно будет подключить Blue Pill к USB-порту нашего компьютера через адаптер ST-Link V2 .
Дополнительно: для передачи данных датчиков по сети NB-IoT нам также понадобится Quectel BC95-G Global NB-IoT Module (коммутационная плата с антенной). И SIM-карта NB-IoT от вашего местного оператора сети NB-IoT.
1. Подключите оборудование с помощью , следуя инструкциям здесь
Blue Pill и ST-Link подключены к USB-порту
2. Убедитесь, что Blue Pill подключен к ST-Link…
И что ST -Ссылка подключена к USB-порту вашего компьютера.
Теперь вернемся к коду Visual Studio…
3. Нажмите «Терминал» → «Выполнить задачу» → [4] Загрузить bluepill_boot
При этом загрузчик будет переведен в Blue Pill, чтобы запустить операционную систему Apache Mynewt при запуске. Если он показывает ошибки, сравните с этот флеш-журнал .
4. Нажмите «Терминал» → «Выполнить задачу» → [5] Загрузить bluepill_my_sensor
При этом прошивка (содержащая нашу визуальную программу) будет записана в Blue Pill. Если он показывает ошибки, сравните с этот флеш-журнал .
Blue Pill был выбран неслучайно… Посмотрите раздел «Почему именно Blue Pill? Мощность против ценового компромисса »
Запуск программы
Теперь мы готовы запустить визуальную программу на нашем устройстве Blue Pill IoT!
1. Нажмите «Отладка» → «Начать отладку»
2. Нажмите «Просмотр» → «Выходные данные»
Выберите «Выход адаптера», чтобы просмотреть журнал Blue Pill.
3. Отладчик приостанавливается на строке с LoopCopyDataInit
Нажмите «Продолжить» или нажмите F5
4.Затем отладчик останавливается на функции main ().
Нажмите «Продолжить» или нажмите F5
Теперь наша Blue Pill должна опрашивать свой внутренний датчик температуры каждые 10 секунд. Он также должен передавать данные о температуре на сервер CoAP, расположенный на thethings.io. Точно так же, как датчик температуры на Moon Base One!
Вот что вы увидите…
Запуск программы Visual Embedded Rust
Журнал Blue Pill должен выглядеть так: .
При нажатии на URL https: // blue-pill-geolocate.appspot.com/?device=5cfca8c…, который отображается в журнале Blue Pill, мы увидим веб-страницу, на которой отображается температура, полученная сервером на thethings.io.
Сервер преобразовал исходную температуру в градусы Цельсия. Помните, что мы преобразуем температуру на сервере, чтобы сохранить RAM и ROM на Blue Pill.
Чтобы понять сообщения в журнале Blue Pill, прочтите раздел « Проверка журнала ». Конфигурация CoAP Server на этом.io объясняется здесь .
Конец…?
Хотите узнать, как был создан Visual Embedded Rust? Ознакомьтесь с этой сопутствующей статьей о Advanced Topics for Visual Embedded Rust Programming …
Примечание. Содержание и изображения в этой статье предоставлены автором. Мнения, выраженные участниками, являются их собственными, а не мнениями PCBWay. Если есть какие-либо нарушения в отношении контента или изображений, свяжитесь с нашим редактором (zoey @ pcbway.com) для удаления.
Написано
Интегральные схемы
Дискретные компоненты
Разъемы и структурные элементы
Монтажный блок Модули и аксессуары
Источники питания и модули питания
Электронные материалы
Набор инструментов и испытаний
Электроинструменты и материалы
Мехатроника
Обработка и настройка
Примечание. В этом незавершенном документе описывается незавершенная реализация визуального программирования STM32 Blue Pill.Документ содержит временные технические детали, предназначенные для людей, желающих внести свой вклад в проект.
Microsoft / pxt
Blockly | Разработчики Google
CODAL
lancaster-university / codal-mbed
lupyuen / Кодал-libopencm3
lupyuen / send_altitude_cocoos