Этот проект был разработан в 2018 году для занятий со школьниками - чтобы на занятии можно было программировать контроллеры в том числе через Bluetooth с телефона - притом и с интерактивным режимом (ввёл команду - светодиод загорелся). В состав входят простенький самодельный интерпретатор BASIC с версиями прошивок для AtMega328 (arduino) и STM32F103, эмулятор чтобы можно было попробовать/попрактиковаться онлайн - и Bluetooth терминал для Android (на случай программирования с телефона а не по кабелю).
Вещь более менее рабочая - семестр мы с ней поигрались - но всё же результатом я не очень доволен (поясню почему) - и в следующие годы пробовал уже другие затеи в этом направлении (тоже довольно дикие).
Бэкграунд
Преподавая в качестве хобби электронику в местной школе, я конечно каждый год стремился включить несколько занятий с микроконтроллерами. Казалось бы чего там - ардуины всем раздай и погнали - но этот вариант сталкивается с проблемами:
занятия проходят в обычном классе, не оснащённом компьютерами - и вариант "пусть каждый принесёт ноутбук" тоже сомнителен - поэтому хотелось задействовать мобильные телефоны
ребят не учат Си (некоторые классы изучают программирование на Python, другие на Java) - поэтому хотя базовые примеры они в состоянии набрать и модифицировать, но чуть более сложные непременно сталкиваются с кучей проблем (на уроках же время на доскональное изложение языка тратить не хочется)
Вообще вариантов как устроить взаимодействие телефона с контроллером немало, особенно сейчас - есть и среды для ардуин, и более витиеватые штуки (и я о паре своих потом ещё расскажу) - все они, впрочем, оказываются чем-нибудь неудобны когда не сам-один развлекаешься а пытаешься организовать работу класса из 20 человек.
Итак - проект Miskatino
Название, пожалуй, немного дурацкое - я на его счёт не заморачивался, просто читал в тот момент сказочки Лавкрафта - ну и навеяло по названию вымышленного университета.
Вот проект на гитхабе 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 что не очень удобно) - и после перезапуска если контроллер не получает каких-то команд она стартует сама. То есть эту штуку можно применять в несложных поделках чтобы перепрограммировать и тестировать их "на ходу".
Заключение
Как сказано в начале, по результатам занятий со школьниками я остался не очень доволен. Мы пробовали зажигать светодиоды, получать значение напряжения с движка переменного резистора, работать с семисегментным индикатором. Ниже перечислены впечатления по которым я решил двигаться дальше и пробовать другие варианты.
Техническая - два десятка плохоньких блютусных модулей в одном помещении, с не очень надёжным питанием - всё это делает связь не очень надёжной в масштабе на 20 человек - то и дело у кого-нибудь контроллер ребутнётся или что-то ещё. Впрочем в масштабе на целый класс с любыми поделками всегда всё негладко, даже с обычными ардуинами ("а у меня порт пропал" и т.п.)
Технологическая - в данной реализации в память Ардуино влезают только небольшие сравнительно программы - ну и возможности их конечно ограничены теми функциями которые в интерпретаторе предусмотрены. Быстродействие достаточное для регулятора температуры или скажем простого робота - но в целом понятно что интерпретатор на порядок медленнее чем скомпилированный код. На ARM-ах всё конечно гораздо веселее - но сделать и распаять 20 плат с STM32 для класса мне уж как-то казалось трудозатратно.
Идеологическая - как я жаловался выше, Си для ребят сложноват - а Бейсик конечно наоборот простоват. Ну не считая процесса освоения с интерактивным набором программы. Это не уровень для 9-11 класса. Все следующие годы я пробую уже детищ мучать ассемблером для AVR - от этого у них немного вытекает мозг, но это кажется более полезно в смысле расширения их кругозора. Ардуиновский Си всё же они в этом возрасте в состоянии изучить и без меня (ну, я помогаю тем кто берется за него в рамках индивидуальных проектов, по инструкциям справляются несложно).
Комментарии (37)
randomsimplenumber
06.10.2024 08:16+3Бейсик с номерами строк, прямо из 80-х, аж олдскулы свело ;). Есть же lua и micro python.
RodionGork Автор
06.10.2024 08:16не думаю что любой из них на 8битных контроллерах поддерживается
kuzzdra
06.10.2024 08:16+2STM32 (из заголовка) он четырежды восьмибитный ;)
ESP8266 вроде 8-битный, на нем поддерживается и lua и pythoh.
https://github.com/deemess/uLuaНо у бейсика (да еще и хитро подпиленного) есть фатальное достоинство: готовую программу в интернетах не найдешь, все ручками ;)
randomsimplenumber
06.10.2024 08:16+1Что в Arduino хорошо, так это наличие библиотек под что угодно. Сервоприводы, часы, дисплеи.. На Бейсик, как я понимаю, все надо писать заново.
RodionGork Автор
06.10.2024 08:16+1Ну что вы :) это исключительно ля учебных целей - чтобы вот именно интерактивно сегменты на индикаторе позажигать - а потом завернуть это в цикл и т.п. Для профессионального применения я считаю кроме Си и ассемблера в контроллерах ничего другого не надо.
kuzzdra
06.10.2024 08:16+2Ну просто странно. Обычно стараются, чтобы результаты обучения на ранних стадиях можно было использовать дальше. А тут сразу тупик.
RodionGork Автор
06.10.2024 08:16Там ребята смышлёные, нужно им просто возможности показать. 10-классник без проблем освоит ардуино сам - но просто пока не дашь в руках все эти контроллеры-светодиодики подержать - человек же плохо представляет почему по этому поводу какой-то ажиотаж
kuzzdra
06.10.2024 08:16человек же плохо представляет почему по этому поводу какой-то ажиотаж
Боюсь, понимание получится приблизительно такое:
- Не понимаю почему все так восхищаются этим Карузо? Слуха у него нет, голоса нет, картавит, шепелявит, пришептывает. - Ооо! А вы слышали Карузо? - Да нет. Мне Рабинович его вчера напел.
Arduino как обучающая платформа почти прекрасна. Хочешь мигать лампочкой - вот тебе blink, крути как хочешь. Хочешь лезть в потроха - лезь, вот рядом исходники. Был бы еще и эмулятор и внутрисхемный отладчик - было бы идеально. А бейсик.. Ну помигал лампочкой. Что дальше?
RodionGork Автор
06.10.2024 08:16+1Ну там статья начинается с того почему не ардуино :) в теории рассуждать всем хорошо - на практике когда у тебя 20 человек без знания языка и довольно плохо программирующие вообще - и полное отсутствие компов - это ситуация другая.
Ардуино всё-таки это тоже довольно детский лепет. Человеку который на нём "научился" потом на более адекватные контроллеры перейти и научиться читать доки - весьма сложно.randomsimplenumber
06.10.2024 08:16+2полное отсутствие компов
Вспомнилось босоногое детство,
молодая Пугачева, урок информатики с нарисованной клавиатурой, заклинания на Бейсике, которые нужно переписывать в тетрадку А тут 21 век.. Вы же шутите? Шутите, правда?Grey83
06.10.2024 08:16Эти люди до сих пор ассемблер юзают, а Вы за бейсик переживаете.
Бейсик аж 60 лет назад появился, а питон - всего 33.randomsimplenumber
06.10.2024 08:16Что за тот Бейсик переживать? Деды его учили без компа, теперь внуки без компа учат. Ничего в этой школе не меняется.
Grey83
06.10.2024 08:16Я в первой половине 90-х его на спектруме учил, а потом у меня информатика в школе началась.
А вот без компа я паскаль учил в начале 00-х, в ДИИИ (который после первого семестра и забросил, потому что ПК не было). И проги на бумажке пейсал.
RodionGork Автор
06.10.2024 08:16вы так смешно про ассемблер говорите как будто это что-то из рук вон необычное. в мире реальных контроллеров (не детских ардуин) мы всё равно настолько близко к железу часто находимся что писать на си или на ассемблере - не столь принципиально. где нужно больше контроля над таймингом - там вставку и сделаешь.
Grey83
06.10.2024 08:16И книжка у меня была по ассемблеру (x86, название и автора не вспомню и хз жива ли она, если и жива, то скоро скорей всего не будет). Т.к. работать было не на чем (на спектруме я с ассемблером не работал, хотя можно было бы, но мне в те времена бейсика хватало), то и не пробовал нго юзать даже.
RodionGork Автор
06.10.2024 08:16вы голову включите вместо пугачёвой :) спецкурс по электронике раз в неделю - ради 2 часов раз в неделю кто-то будет в класс натаскивать гору компов? или требовать под занятия электроники компьютерный класс? проблема в общем не в компах а в том что болтунов много
randomsimplenumber
06.10.2024 08:16+1требовать под занятия электроники компьютерный класс
Было бы логично. Если для занятий нужен компьютер - нужно организовать чтобы он был.
Скрытый текс
Сегодня идем нырять в
бассейн, а если будете хорошо себя вести - завтра воды туда нальем
RodionGork Автор
06.10.2024 08:16ну у вас представление видимо что ресурсы резиновые - на шесть занятий в год мне нужны компьютеры - махнул волшебной палочкой - и они появились. на другие осциллографы понадобятся - махнул - появились осциллографы. и класс отдельный конечно где все это будет стоять. я чо, я согласен - хорошо бы ещё чтобы мне за это платили столько сколько платят на основной работе и можно было сосредоточиться на школе вместо тупого энтерпрайза. мечтать это не мешки ворочать конечно :)
randomsimplenumber
06.10.2024 08:16на шесть занятий в год мне нужны компьютеры
Э.. ну 21 век же.. В школе же есть компуктерный класс. 6 занятий в год можно же организовать? Или компуктеры не включают чтобы дети там не сломали ничего?
Раньше всё было как то проще и доступнее. Спаял Спектрум - и можно развлекаться хоть с бейсиком хоть с ассемблером А тут.. Комп не дали, программировай на телефоне, никакого праздника ;)
RodionGork Автор
06.10.2024 08:16А много вы в школе спектрумов спаяли-то :)
Компьютерные классы есть, но есть и 4-5 конкурирующих спецкурсов по программированию, все же такие программисты теперь - так что обычно там всё занято плотно :)
Ну и главное, как я сказал, учить ребят ардуинам в 9-11 классе мне реально скучно (я им даю в таких случаях написанную мной инструкцию и говорю "разберись дома" - это работает). Последние 2 года экспериментируем с AVR-ассемблером, телефона для того чтобы вбить пару десятков команд вполне достаточно - тут больше голова нужна. Но эт я отдельно расскажу.
Grey83
06.10.2024 08:16Раньше всё было как то проще и доступнее. Спаял Спектрум - и можно развлекаться хоть с бейсиком хоть с ассемблером
И сейчас можно спаять (или купить готовый) аналог спектрума (разной степени паршивости и с програмной либо железной эмуляцией спектрума).
Правда купить какой-нибудь не самый свежий TVBox (на самые свежие линух не накатить, вроде бы, а только с флешки запускать) и поставить на него линух выйдет нередко дешевле. Ну и к боксу (как и спектруму) нужны будут моники/телики с клавомышью.
Вот только платка из статьи обойдётся дешевле. Тем более, что смарт у школьника чаще всего уже имеется.
kuzzdra
06.10.2024 08:16Интересное приключение - перешивать TV box без компа, с помощью одного лишь телефона. Но зачем, Холмс? Возможно, в природе существуют школьники, которым родители смартфон купили, а комп для учебы не догадались купить. А если есть комп, пригодный для учебы - зачем хотеть корячиться с телефоном?
Grey83
06.10.2024 08:16Для чего без компа?
Я говорил про то, чтобы подготовить оборудование взамен ПК. Его подготовит сама школа, а не ученики.
Ученики же винду/линух сами в школе не накатывают в компьютерных классах (ну кроме тех случаев, ко7да это предусмотрено планом занятий или возникла необходимость в этом и преподаватель разрешил).Ученики же платку не прошивают и не паяют, а только вводят программу на бейсике.
RodionGork Автор
06.10.2024 08:16как я сказал там проблема в основном в том что наши занятия электроникой в рамках школы пока не являются масштабным явлением - ради двух часов в неделю обставлять класс компьютерами не очень выгодно. ну и больше проблема что с классами напряженка. если купить 20 ноутбуков - это очевидно в пределах миллиона уложится (да меньше) - и держать их в шкафу доставая для занятия - понятно что в принципе это можно, но хорошо бы чтобы кто-то занимался этим больше чем 2 часа в неделю. энтузиастов пока не находится. я в какой-то год ездил ещё по субботам учить, но всё же это довольно геморно с учетом основной работы и т.п.
kuzzdra
06.10.2024 08:16+2на практике когда у тебя 20 человек без знания языка и довольно плохо программирующие вообще
Си для ребят сложноват
пробую уже детищ мучать ассемблером для AVR
C сложное, будем учить ассемблер, 6 занятий в год достаточно. Но без компьютера.
что_здесь_вообще_происходит_мем.жпг
RodionGork Автор
06.10.2024 08:16Вы возможно не очень в теме, извините :) Си значительно сложнее ассемблера. Ассемблер-то для AVR на одной страничке умещается. Просто большие программы на нём писать гораздо менее удобно.
kuzzdra
06.10.2024 08:16+1brainfuck еще проще.
Просто большие программы на нём писать гораздо менее удобно.
Что может быть проще
helloworldblink? Код из интернетов, комментарии урезаны, чтобы остались только занчащие строки.void setup() { pinMode(LED_BUILTIN, OUTPUT); } void loop() { digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW delay(1000); // wait for a second }
#define __SFR_OFFSET 0 #include "avr/io.h" .global main main: sbi DDRB, 5 ; Set PB5 as output blink: sbi PINB, 5 ; Toggle PINB ldi r25, hi8(1000) ldi r24, lo8(1000) call delay_ms jmp blink delay_ms: ldi r31, hi8(4000) ldi r30, lo8(4000) 1: sbiw r30, 1 brne 1b sbiw r24, 1 brne delay_ms ret
Ассемблерный код более громоздкий. 100500 способов допустить ошибку и не понять что воще происходит. Для тех, кто в программировании не силен - самое то что надо, ага.
В ардуине с отладкой никак, только через print. Добавить в С Serial.print() - просто, спасибо авторам фреймворка. 2 строчки дописать. Добавить print в ассемблерный код.. ну-ну. Не то чтобы это запредельно сложное, регистры читать да флаги проверять, но все вручную. И математику, да. Умножение с делением, да.
И все это за 6 занятий в год и без компьютера.
RodionGork Автор
06.10.2024 08:16На моём сайте есть задачки и на брейнфак, так что я немного в курсе. И на ассемблер для intel-4004 например для развлечения.
Да, строчек больше. Но когда очередное ардуино-дитя приходит с вопросом как запустить таймер (с копипастом из стековерфлоу) или "пачиму я массив не могу из функции вот так передать" и так далее - сразу становится ясно что нет. На си не легче.
Но разделим обязанности - я школьников учу, а вы занимайтесь рассуждениями в комментах на хабре :)
kuzzdra
06.10.2024 08:16очередное ардуино-дитя приходит с вопросом как запустить таймер
А пафосу то.. Человек сам пытался что-то сделать, но у него не вышло. Ну как бы учитель затем и нужен, чтобы на вопросы отвечать и ошибки помогать исправить. Знания о всех тонкостях конфигурирования таймеров они с ассемблером воще не связаны.
пачиму я массив не могу из функции вот так передать
На ассемблере самостоятельно он до этой задачи и не дойдет никогда.
Luboff_sky
06.10.2024 08:16+1Преподаватель электроники в школе, да ещё и как хобби. +100500 вам в карму.
tonyk_av
Даже китайцы осознали, что лапша "Досирак" и электроника брэнда "Хуёво" вряд ли будут иметь успех в России, поэтому сейчас мы знаем их как "Доширак" и "Хуавей". Вы это, того, с названиями поаккуратней, а то "Мискатино" как-то уж очень созвучно с "МыСкатино".
red_dragon
Доширак, это корейский бренд. Но если китайцы что-то там поняли, то это, видимо, хорошо.