Интерактивный Бейсик для Arduino и STM32

в 6:01, , рубрики: arduino, BASIC, bluetooth, электроника

Этот проект был разработан для занятий со школьниками - чтобы на занятии можно было программировать контроллеры в том числе через Bluetooth с телефона - притом и с интерактивным режимом (ввёл команду - светодиод загорелся). В состав входят простенький самодельный интерпретатор BASIC с версиями прошивок для AtMega328 (arduino) и STM32F103, эмулятор чтобы можно было попробовать/попрактиковаться онлайн - и Bluetooth терминал для Android (на случай программирования с телефона а не по кабелю).

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

Бэкграунд

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

  • занятия проходят в обычном классе, не оснащённом компьютерами - и вариант "пусть каждый принесёт ноутбук" тоже сомнителен - поэтому хотелось задействовать мобильные телефоны

  • ребят не учат Си (некоторые классы изучают программирование на Python, другие на Java) - поэтому хотя базовые примеры они в состоянии набрать и модифицировать, но чуть более сложные непременно сталкиваются с кучей проблем (на уроках же время на доскональное изложение языка тратить не хочется)

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

Итак - проект Miskatino

Название, пожалуй, немного дурацкое - я на его счёт не заморачивался, просто читал в тот момент сказочки Лавкрафта - ну и навеяло по названию вымышленного университета.

Интерактивный Бейсик для Arduino и STM32 - 1

Вот проект на гитхабе https://github.com/Miskatino/miskatino-basic - там есть достаточно подробное описание команд - есть и эмулятор, так что те кто читают эту статью с компьютера, могут тут же попробовать - откройте его и введите команду

PIN 2; 1

и, о чудо, увидите что светодиод нарисованный на ноге 2 "загорелся". Попробуйте набрать "программу" - для этого вводим команды с номерами строк:

10 PIN 2; 1
20 DELAY 300
30 PIN 2; 0
40 DELAY 700
50 GOTO 10
RUN

Обратите внимание - последняя команда без номера строки. Она не добавляется в программу а запускает её на выполнение. Светодиод будет мигать.

Если вы возьмёте ардуино - то можете собрать и залить проект - и программировать его с обычной консоли по кабелю (например с того же Arduino Serial Monitor - окошка в составе Arduino IDE). В качестве базовой модели я использовал те что с контроллерами на AtMega328 - но в общем годится почти любая, хотя поскольку программа живёт в оперативке, то чем оперативки больше тем лучше.

Для программирования через блютус я закупил горстку модулей типа HC-05 и припаял к ним и к ардуинам подходящие разъёмы чтобы втыкать одно в другое. Но оказалось что удобного для интерактивной работы "терминала" для телефона не так легко найти - так что вскоре я написал собственный (в частности чтобы отправлял символы сразу а не накапливал по строкам). Он доступен там же рядом на гитхабе, но т.к. уже несколько лет не обновлялся, вряд ли запустится на современном телефоне - и вам понадобится выбрать что-то другое.

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

Заключение

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

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

  2. Технологическая - в данной реализации в память Ардуино влезают только небольшие сравнительно программы - ну и возможности их конечно ограничены теми функциями которые в интерпретаторе предусмотрены. Быстродействие достаточное для регулятора температуры или скажем простого робота - но в целом понятно что интерпретатор на порядок медленнее чем скомпилированный код. На ARM-ах всё конечно гораздо веселее - но сделать и распаять 20 плат с STM32 для класса мне уж как-то казалось трудозатратно.

  3. Идеологическая - как я жаловался выше, Си для ребят сложноват - а Бейсик конечно наоборот простоват. Ну не считая процесса освоения с интерактивным набором программы. Это не уровень для 9-11 класса. Все следующие годы я пробую уже детищ мучать ассемблером для AVR - от этого у них немного вытекает мозг, но это кажется более полезно в смысле расширения их кругозора. Ардуиновский Си всё же они в этом возрасте в состоянии изучить и без меня (ну, я помогаю тем кто берется за него в рамках индивидуальных проектов, по инструкциям справляются несложно).

Автор: RodionGork

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js