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

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

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

Бэкграунд

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

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

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

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

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

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

f6a804967992fd288d8a10deb376c29b.jpg

Вот проект на гитхабе 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 — от этого у них немного вытекает мозг, но это кажется более полезно в смысле расширения их кругозора. Ардуиновский Си всё же они в этом возрасте в состоянии изучить и без меня (ну, я помогаю тем кто берется за него в рамках индивидуальных проектов, по инструкциям справляются несложно).

© Habrahabr.ru