Python — один из самых популярных языков в мире, и если вы его ещё не знаете, обязательно следует с ним познакомиться. А уж если вы заглянули на RobotClass, то изучение python правильно будет совместить с изучением электроники.
Сам по себе язык Python невозможно заставить работать на таком слабом вычислительном устройстве, как микроконтроллер. Одна из причин — мало памяти для хранения инфраструктуры языка. Чтобы решить эту задачу была разработана специальная версия языка — MicroPython.
MicroPython позволяет запускать Python-скрипты на микроконтроллерах esp8266, esp32, stm32, nRF и пр. А вот на Arduino с микроконтроллером atmega328 этот язык уже не заработает.
Специально для образовательных целей компания Adafruit доработала язык MicroPython и выпустила свою версию его под названием CircuitPython. Главной ценностью этой версии является наличие огромного количества совместимых библиотек, которые позволяют работать с привычными нам датчиками, дисплеями, драйверами и прочими радостями.
Так же как и свой прародитель CircuitPython может работать на множестве разных микроконтроллеров. Далее мы будем ориентироваться именно на язык CircuitPython.
Для экспериментов на этом уроке мы будем использовать отладочную плату Графит-S2, разработанную в RobotClass. Эту плату или её аналоги можно купить у нас в интернет-магазине.
В корзину
Чтобы микроконтроллер умел работать с CircuitPython на нём уже должна быть установлена специальная инфраструктура (прошивка). Для примера, подключим отладочную плату Графит-S2 к компьютеру через USB кабель и посмотрим на реакцию. Работать будем в ОС Windows.
После подключения в списке доступных дисков появится новый накопитель с именем CIRCUITPY.
Зайдём в этот накопитель и увидим такую структуру папок.
Самое важно здесь — это папка lib и файл скрипта code.py (в Python программы часто называют скриптами). В папке хранятся дополнительные библиотеки, которые необходимы для работы программы. Файл code.py хранит скрипт на языке Python, который запускается каждый раз когда мы его сохраняем на накопитель, или когда подаём питание на отладочную плату, или нажимаем кнопку сброса.
Кроме того, в списке устройств появится новый COM порт. С помощью этого виртуального порта можно будет работать с интерпретатором языка Python. Об этом чуть позже.
Итак у нас есть доступ к программе на Python, скорее бы уже что-нибудь написать. Но пока ещё одна остановка.
Редактировать программу можно и в обычном текстовом редакторе, однако удобнее для этого использовать так называемые IDE (это как Arduino IDE для Arduino). Помимо текстового редактора IDE имеют набор полезных функций: систему проверки кода, функцию загрузки на контроллер, терминал для связи с контроллером. А для Python будет ещё важным иметь возможность работать с интерпретатором языка (REPL).
Для CircuitPython (и для MicroPython тоже) имеется удобная среда Mu.
https://codewith.mu/
В Mu есть всё самое необходимое для успешного начала работы с CircuitPython. Теперь приступим к программированию.
Если отладочная плата подключена к компьютеру, редактор Mu автоматически её увидит и в нижнем правом углу окна появится иконка микросхемы без красного крестика. Если так, то значит всё хорошо и можно работать дальше.
Запустим интерпретатор и будем выполнять программу по шагам. Это станет необычным опытом, если до этого вы работали только с Arduino и программировали исключительно на компилируемых языках.
Жмём кнопку Последовательный. В нижней части редактора откроется консоль интерпретатора. Если на плате уже работает какая-то программа, нам следует прервать её выполнение комбинацией Ctrl+С. В результате появится приглашение нажать любую кнопку для активации командной строки REPL (Press any key to enter REPL). Жмём любую кнопку. Результат:
Итак, теперь интерпретатор языка готов принимать наши команды. Чтобы убедиться в этом, напишем простую программу по сложению двух чисел.
Вводим команды друг за другом, каждый раз нажимая Enter. Сначала присваиваем число 5 переменной a. Затем число 6 для b. Затем складываем их и результат присваиваем переменной c. Наконец, выводим результат функцией print.
Работает! Ну а теперь будем управлять светодиодом. Для этого нам потребуется подключить библиотеку board, которая специфична для каждой отладочной платы. Именно эта библиотека знает как пронумерованы контакты на плате, и какие у них есть синонимы.
Чтобы посмотреть все доступные контакты, используем функцию dir.
Над понимать, что это все возможные имена контактов вместе с синонимами. Физических контактов меньше. Например, D13, LED и L — это одно и то же.
Следующий шаг — настройка контакта. Так же как и при работе с Arduino нам следует определить, в каком направлении будет работать контакт: на ввод или на вывод. Для этого подключим из библиотеки digitalio два класса: функцию DigitalInOut и Direction:
from digitalio import DigitalInOut, Direction
Создаём объект класса DigitalInOut, указывая за какой контакт он будет отвечать. Мы будем работать со светодиодом на контакта D13. Его и пишем, вернее его синоним.
led = DigitalInOut(board.LED)
Устанавливаем направление. В нашем случае это OUTPUT.
led.direction = Direction.OUTPUT
Наконец, зажигаем светодиод присваивая led.value значение True (истина, как HIGH на Arduino). Вот что у нас получилось:
Посмотрите на светодиод, он горит!
Что ж, с интерпретатором познакомились. Это удобный инструмент, если нужно быстро что-нибудь проверить. В реальной задаче, конечно, программисты сначала пишут полный код программы, а потом его запускают целиком.
Напишем программу для мигания светодиодом. Прямо как на старой доброй Ардуино (урок про светодиод).
Жмём кнопку Загрузить и выбираем файл code.py на накопителе CIRCUITPY. Пишем код.
import time
import board
from digitalio import DigitalInOut, Direction
led = DigitalInOut(board.D13)
led.direction = Direction.OUTPUT
while True:
led.value = True
time.sleep(0.1)
led.value = False
time.sleep(1.0)
Добавилась библиотека time, из которой мы используем функцию sleep для организации паузы. Это аналог delay в Arduino IDE, только в sleep указываются секунды, а в delay — миллисекунды.
Сразу после настройки контакта, мы запускаем бесконечный цикл. В Arduino IDE таким циклом была функция loop().
while True:
Обратите внимание, всё что внутри цикла имеет отступ слева на равно число пробелов. Это одна из особенностей языка Python, в нём нет привычных фигурных скобок.
О тонкостях языка Python поговорим в других уроках. А теперь жмём в редакторе кнопку Сохранить и программа сразу начинает выполняться на микроконтроллере — светодиод начинает мигать!
Официальный сайт MicroPython: https://micropython. org
Среда разработки Mu: https://codewith.mu/
Резюме № 24758139
Разработчик Java (Spring, JavaFx, Backend), Python STM32, AVR, Nuvoton, Stellaris АСУ ТП, КИПиАБыл больше месяца назад
80 000 ₽
Соискатель скрыл дату рождения, не состоит в браке, есть дети
Иннополис, удаленная работа, готов к командировкам
Занятость
полная занятость
Гражданство
Россия
Добавить в избранное
Поделиться
Фото, имя и контакты доступны только авторизованным пользователям
Факультет: Технической кибернетики
Специальность: Инженер электрик
Занимаюсь программированием и разработкой в свободное время микропроцессорных систем на базе микропроцессоров Attiny, Atmega, Xmega, STM32, Stellaris. Имеются свои разработки (станок для переработки хлопка, электронное управление с помощью мк STM32 вывод и управление с помощью TFT дисплея 7″) и аппарат управления доением на мк Atmega1284 с помощью LCD дисплея 16х2 HD74480. Имею опыт работы с протоколами Modbus, Profibus DP, LON, RS-485, RS-232, CAN, USB. Газовые сигнализаторы пропан, метан для автомобилей и домашнего использования с оповещением через сеть GSM. Мое портфолио: 1. По заказу частного заказчика был выполнен проект на ПЛК «Овен» модель PLC160 и контроллера ТРМ двухканального с Modbus RTU, управлением машины приготовления воздуза (климат контроля), также на компьютере была спроектирован проект на скада «Simple scada». Программа для плк была написана в среде Codesys v2. Проект выложен на моем сайте портфолио. 2. По заказу министерства нефти были спроектированы щиты управления станцией перегонки нефти на базе ПЛК «Jumo», с дисплеем и скада системой на компьютере. Программа для плк была написана а среде Codesys v2. Пример проекта выложен на сайте портфолио.
Веду здоровый образ жизни
Добавить в избранное
Поделиться
Фото, имя и контакты доступны только авторизованным пользователям
Похожие резюмеВсе 14 похожих резюме
Обновлено 31 марта
Разработчик Javaз/п не указана
Последнее место
работы
(
8 лет и 3 мес.
)Разработчик JavaФевраль 2015 – работает сейчас
Показать контакты
Добавить в избранное
Обновлено 12 ноября 2022
Java-разработчикз/п не указана
Последнее место
работы
(
2 года
)Инженер по разработке (SberData)Май 2021 – работает сейчас
Показать контакты
Добавить в избранное
Обновлено 21 апреля
Инженер — программист, системный администратор70 000 ₽
Последнее место
работы
(
11 лет и 6 мес.
)Старший специалист по информатизации и информационной безопасностиНоябрь 2011 – работает сейчас
Показать контакты
Добавить в избранное
Обновлено 14 сентября 2022
Java-разработчикз/п не указана
Последнее место
работы
(
1 год и 5 мес.
)Java-разработчикДекабрь 2021 – работает сейчас
Показать контакты
Добавить в избранное
Обновлено 4 июля 2020
Java (Junior) разработчик, Программист Javaз/п не указана
Последнее место
работы
(
6 мес.
)Торговый представительИюнь 2019 – декабрь 2019
Показать контакты
Добавить в избранное
Обновлено 4 апреля 2019
Junior JAVA Developerз/п не указана
Последнее место
работы
(
4 года и 8 мес.
)Junior JAVA Developer / StudentСентябрь 2018 – работает сейчас
Показать контакты
Добавить в избранное
Обновлено 13 февраля 2019
Android junior developer / java junior developerз/п не указана
Последнее место
работы
(
6 лет и 1 мес.
)Оператор ДГУАпрель 2017 – работает сейчас
Показать контакты
Добавить в избранное
Обновлено 24 октября 2018
Программист Javaз/п не указана
Последнее место
работы
(
1 год и 2 мес.
)Программист J2EEНоябрь 2016 – январь 2018
Показать контакты
Добавить в избранное
Обновлено 26 февраля 2017
Intern / Junior Java Developerз/п не указана
Последнее место
работы
(
8 лет и 2 мес.
)Инженер по КИПиАМарт 2015 – работает сейчас
Показать контакты
Добавить в избранное
Обновлено 12 июля 2016
Junior Java программистз/п не указана
Последнее место
работы
(
8 лет и 5 мес.
)Программист backendДекабрь 2014 – работает сейчас
Показать контакты
Добавить в избранное
Работа в Васильево / Резюме / IT, Интернет, связь, телеком / Разработка, программирование / Backend-разработчик (Python)
Разработка, программирование
Мы используем cookies, чтобы улучшить сайт для вас. Подробнее
Скрипт Python для загрузки или скачивания прошивки в/из Микроконтроллеры ST Microelectronics STM32 через UART.
Также поддерживает устройства ST BlueNRG и загрузчик SweetPeas для Wiznet W7500.
Совместимость с Python версии 3.4–3.8 или 2.7.
./stm32loader.py [-hqVewvrsRB] [-l длина] [-p порт] [-b скорость передачи] [-P четность] [-a адрес] [-g адрес] [-f семейство] [ файл.bin] -e Стереть (примечание: это требуется для ранее записанной памяти) -u Считывание снять защиту -w Записать содержимое файла во флэш-память -v Проверять содержимое флэш-памяти по сравнению с локальным файлом (рекомендуется) -r Прочитать из флэш-памяти и сохранить в локальном файле -l длина Длина чтения -p port Последовательный порт (по умолчанию: /dev/tty. usbserial-ftCYPMYJ) -b baud Скорость передачи (по умолчанию: 115200) -a address Целевой адрес (по умолчанию: 0x08000000) -g адрес Начать выполнение с адреса (обычно 0x08000000) -f family Семейство устройств для считывания UID устройства и размера флэш-памяти; например F1 для STM32F1xx -h Напечатать этот текст справки -q Тихий режим -V Подробный режим -s Поменять местами RTS и DTR: использовать RTS для сброса и DTR для загрузки0 -R Сделать сброс активным высоким -B Сделать boot0 активным на низком уровне -u Считывание снять защиту -n Нет прогресса: не показывать индикатор выполнения -P паритет Четность: «четный» для STM32 (по умолчанию), «нет» для BlueNRG
stm32loader.py -p /dev/tty.usbserial-ftCYPMYJ -e -w -v somefile.bin
Это предварительно сотрет флэш-память, запишет somefile.bin
во флэш-память на устройстве, а затем
выполнить проверку после завершения записи.
Вы можете пропустить параметр -p
STM32LOADER_SERIAL_PORT
. Аналогично, -f
может быть передано через STM32LOADER_FAMILY
.Чтобы прочитать прошивку и сохранить ее в файл:
stm32loader.py -r -p /dev/cu.usbserial-A5XK3RJT -f F1 -l 0x10000 -a 0x08000000 dump.bin
Исходная версия Ивана А-Р (tuxotronic.org). Вклады Домена Пансера, Джеймса Снайдера, Флориса Ламбрехтса, Атокулус, Сэм-Бристоу, NINI1988, Омер Килич, Шимон Шантула, рдафорно, Николай Стависки, Тайлер Кой, Алекс Климай, Ондрей Микле.
Вдохновение для функций от:
Настраиваемый RTS/DTR и полярность, расширенное стирание со страницами: https://github.com/pazzarpj/stm32loader
Память снять защиту https://github. com/3drobotics/stm32loader
Правильный расчет контрольной суммы для постраничного стирания: https://github.com/jsnyder/stm32loader/pull/4
ST BlueNRG https://github.com/lchish/stm32loader
Wiznet W7500 / поддержка пользовательского загрузчика SweetPeas https://github.com/Sweet-Peas/WiznetLoader
Ниже предполагается, что вы подключаете STM32F10x. Для других чипов последовательные контакты и/или значения BOOT0/BOOT1 может отличаться.
Выполните следующие соединения:
Если на вашем последовательном адаптере недоступны RTS или DTR, вам придется вручную нажимайте кнопки или работайте с перемычками. Когда есть выбор, установите BOOT0 вручную на высокий уровень и выполните сброс диска через последовательный порт. adepter (он должен переключаться, а BOOT0 — нет).
Я занимаюсь программированием сокетов, используя свою плату STM32L4S5I. Я импортировал программу https://github.com/ARMmbed/mbed-os-example-sockets и сделал следующую модификацию.
"target.components_add": ["ism43362"], "ism43362.provide-default": правда, "target.network-default-interface-type": "WIFI", "target.macros_add": ["MBEDTLS_SHA1_C"]
А вот мой код Python, который работает как серверная часть на моем компьютере.
импортный сокет импортировать json импортировать numpy как np импортировать matplotlib.pyplot как сюжет HOST = '192.168.0.155' # IP-адрес PORT = 12345 # Порт для прослушивания (используйте порты > 1023) с socket.socket(socket.AF_INET, socket.