Этот проект был разработан в 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 что не очень удобно) - и после перезапуска если контроллер не получает каких-то команд она стартует сама. То есть эту штуку можно применять в несложных поделках чтобы перепрограммировать и тестировать их "на ходу".

Заключение

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

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

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

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

Комментарии (37)


  1. tonyk_av
    06.10.2024 08:16

    Даже китайцы осознали, что лапша "Досирак" и электроника брэнда "Хуёво" вряд ли будут иметь успех в России, поэтому сейчас мы знаем их как "Доширак" и "Хуавей". Вы это, того, с названиями поаккуратней, а то "Мискатино" как-то уж очень созвучно с "МыСкатино".


    1. red_dragon
      06.10.2024 08:16
      +1

      Доширак, это корейский бренд. Но если китайцы что-то там поняли, то это, видимо, хорошо.


  1. randomsimplenumber
    06.10.2024 08:16
    +3

    Бейсик с номерами строк, прямо из 80-х, аж олдскулы свело ;). Есть же lua и micro python.


    1. RodionGork Автор
      06.10.2024 08:16

      не думаю что любой из них на 8битных контроллерах поддерживается


      1. kuzzdra
        06.10.2024 08:16
        +2

        STM32 (из заголовка) он четырежды восьмибитный ;)
        ESP8266 вроде 8-битный, на нем поддерживается и lua и pythoh.
        https://github.com/deemess/uLua

        Но у бейсика (да еще и хитро подпиленного) есть фатальное достоинство: готовую программу в интернетах не найдешь, все ручками ;)


      1. randomsimplenumber
        06.10.2024 08:16
        +1

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


        1. RodionGork Автор
          06.10.2024 08:16
          +1

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


          1. kuzzdra
            06.10.2024 08:16
            +2

            Ну просто странно. Обычно стараются, чтобы результаты обучения на ранних стадиях можно было использовать дальше. А тут сразу тупик.


            1. RodionGork Автор
              06.10.2024 08:16

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


              1. kuzzdra
                06.10.2024 08:16

                человек же плохо представляет почему по этому поводу какой-то ажиотаж

                Боюсь, понимание получится приблизительно такое:

                - Не понимаю почему все так восхищаются этим Карузо? Слуха у него нет, голоса нет, картавит, шепелявит, пришептывает. - Ооо! А вы слышали Карузо? - Да нет. Мне Рабинович его вчера напел.

                Arduino как обучающая платформа почти прекрасна. Хочешь мигать лампочкой - вот тебе blink, крути как хочешь. Хочешь лезть в потроха - лезь, вот рядом исходники. Был бы еще и эмулятор и внутрисхемный отладчик - было бы идеально. А бейсик.. Ну помигал лампочкой. Что дальше?


                1. RodionGork Автор
                  06.10.2024 08:16
                  +1

                  Ну там статья начинается с того почему не ардуино :) в теории рассуждать всем хорошо - на практике когда у тебя 20 человек без знания языка и довольно плохо программирующие вообще - и полное отсутствие компов - это ситуация другая.

                  Ардуино всё-таки это тоже довольно детский лепет. Человеку который на нём "научился" потом на более адекватные контроллеры перейти и научиться читать доки - весьма сложно.


                  1. randomsimplenumber
                    06.10.2024 08:16
                    +2

                    полное отсутствие компов

                    Вспомнилось босоногое детство, молодая Пугачева, урок информатики с нарисованной клавиатурой, заклинания на Бейсике, которые нужно переписывать в тетрадку А тут 21 век.. Вы же шутите? Шутите, правда?


                    1. Grey83
                      06.10.2024 08:16

                      Эти люди до сих пор ассемблер юзают, а Вы за бейсик переживаете.
                      Бейсик аж 60 лет назад появился, а питон - всего 33.


                      1. randomsimplenumber
                        06.10.2024 08:16

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


                      1. Grey83
                        06.10.2024 08:16

                        Я в первой половине 90-х его на спектруме учил, а потом у меня информатика в школе началась.
                        А вот без компа я паскаль учил в начале 00-х, в ДИИИ (который после первого семестра и забросил, потому что ПК не было). И проги на бумажке пейсал.


                      1. RodionGork Автор
                        06.10.2024 08:16

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


                      1. Grey83
                        06.10.2024 08:16

                        И книжка у меня была по ассемблеру (x86, название и автора не вспомню и хз жива ли она, если и жива, то скоро скорей всего не будет). Т.к. работать было не на чем (на спектруме я с ассемблером не работал, хотя можно было бы, но мне в те времена бейсика хватало), то и не пробовал нго юзать даже.


                    1. RodionGork Автор
                      06.10.2024 08:16

                      вы голову включите вместо пугачёвой :) спецкурс по электронике раз в неделю - ради 2 часов раз в неделю кто-то будет в класс натаскивать гору компов? или требовать под занятия электроники компьютерный класс? проблема в общем не в компах а в том что болтунов много


                      1. randomsimplenumber
                        06.10.2024 08:16
                        +1

                        требовать под занятия электроники компьютерный класс

                        Было бы логично. Если для занятий нужен компьютер - нужно организовать чтобы он был.

                        Скрытый текс

                        Сегодня идем нырять в
                        бассейн, а если будете хорошо себя вести - завтра воды туда нальем


                      1. RodionGork Автор
                        06.10.2024 08:16

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


                      1. randomsimplenumber
                        06.10.2024 08:16

                        на шесть занятий в год мне нужны компьютеры

                        Э.. ну 21 век же.. В школе же есть компуктерный класс. 6 занятий в год можно же организовать? Или компуктеры не включают чтобы дети там не сломали ничего?

                        Раньше всё было как то проще и доступнее. Спаял Спектрум - и можно развлекаться хоть с бейсиком хоть с ассемблером А тут.. Комп не дали, программировай на телефоне, никакого праздника ;)


                      1. RodionGork Автор
                        06.10.2024 08:16

                        А много вы в школе спектрумов спаяли-то :)

                        Компьютерные классы есть, но есть и 4-5 конкурирующих спецкурсов по программированию, все же такие программисты теперь - так что обычно там всё занято плотно :)

                        Ну и главное, как я сказал, учить ребят ардуинам в 9-11 классе мне реально скучно (я им даю в таких случаях написанную мной инструкцию и говорю "разберись дома" - это работает). Последние 2 года экспериментируем с AVR-ассемблером, телефона для того чтобы вбить пару десятков команд вполне достаточно - тут больше голова нужна. Но эт я отдельно расскажу.


                      1. Grey83
                        06.10.2024 08:16

                        Раньше всё было как то проще и доступнее. Спаял Спектрум - и можно развлекаться хоть с бейсиком хоть с ассемблером

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


                      1. kuzzdra
                        06.10.2024 08:16

                        Интересное приключение - перешивать TV box без компа, с помощью одного лишь телефона. Но зачем, Холмс? Возможно, в природе существуют школьники, которым родители смартфон купили, а комп для учебы не догадались купить. А если есть комп, пригодный для учебы - зачем хотеть корячиться с телефоном?


                      1. Grey83
                        06.10.2024 08:16

                        Для чего без компа?
                        Я говорил про то, чтобы подготовить оборудование взамен ПК. Его подготовит сама школа, а не ученики.
                        Ученики же винду/линух сами в школе не накатывают в компьютерных классах (ну кроме тех случаев, ко7да это предусмотрено планом занятий или возникла необходимость в этом и преподаватель разрешил).

                        Ученики же платку не прошивают и не паяют, а только вводят программу на бейсике.


                      1. RodionGork Автор
                        06.10.2024 08:16

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


                  1. kuzzdra
                    06.10.2024 08:16
                    +2

                    на практике когда у тебя 20 человек без знания языка и довольно плохо программирующие вообще

                    Си для ребят сложноват

                    пробую уже детищ мучать ассемблером для AVR

                    C сложное, будем учить ассемблер, 6 занятий в год достаточно. Но без компьютера.

                    что_здесь_вообще_происходит_мем.жпг


                    1. RodionGork Автор
                      06.10.2024 08:16

                      Вы возможно не очень в теме, извините :) Си значительно сложнее ассемблера. Ассемблер-то для AVR на одной страничке умещается. Просто большие программы на нём писать гораздо менее удобно.


                      1. kuzzdra
                        06.10.2024 08:16
                        +1

                        brainfuck еще проще.

                        Просто большие программы на нём писать гораздо менее удобно.

                        Что может быть проще helloworld blink? Код из интернетов, комментарии урезаны, чтобы остались только занчащие строки.

                        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 занятий в год и без компьютера.


                      1. RodionGork Автор
                        06.10.2024 08:16

                        На моём сайте есть задачки и на брейнфак, так что я немного в курсе. И на ассемблер для intel-4004 например для развлечения.

                        Да, строчек больше. Но когда очередное ардуино-дитя приходит с вопросом как запустить таймер (с копипастом из стековерфлоу) или "пачиму я массив не могу из функции вот так передать" и так далее - сразу становится ясно что нет. На си не легче.

                        Но разделим обязанности - я школьников учу, а вы занимайтесь рассуждениями в комментах на хабре :)


                      1. kuzzdra
                        06.10.2024 08:16

                        очередное ардуино-дитя приходит с вопросом как запустить таймер

                        А пафосу то.. Человек сам пытался что-то сделать, но у него не вышло. Ну как бы учитель затем и нужен, чтобы на вопросы отвечать и ошибки помогать исправить. Знания о всех тонкостях конфигурирования таймеров они с ассемблером воще не связаны.

                        пачиму я массив не могу из функции вот так передать

                        На ассемблере самостоятельно он до этой задачи и не дойдет никогда.


  1. Luboff_sky
    06.10.2024 08:16
    +1

    Преподаватель электроники в школе, да ещё и как хобби. +100500 вам в карму.