8-900-374-94-44
[email protected]
Slide Image
Меню

Python stm32: MicroPython — Python for microcontrollers

Python для микроконтроллера — CircuitPython

Python — один из самых популярных языков в мире, и если вы его ещё не знаете, обязательно следует с ним познакомиться. А уж если вы заглянули на RobotClass, то изучение python правильно будет совместить с изучением электроники.

Сам по себе язык Python невозможно заставить работать на таком слабом вычислительном устройстве, как микроконтроллер. Одна из причин — мало памяти для хранения инфраструктуры языка. Чтобы решить эту задачу была разработана специальная версия языка — MicroPython.

MicroPython позволяет запускать Python-скрипты на микроконтроллерах esp8266, esp32, stm32, nRF и пр. А вот на Arduino с микроконтроллером atmega328 этот язык уже не заработает.

CircuitPython

Специально для образовательных целей компания Adafruit доработала язык MicroPython и выпустила свою версию его под названием CircuitPython. Главной ценностью этой версии является наличие огромного количества совместимых библиотек, которые позволяют работать с привычными нам датчиками, дисплеями, драйверами и прочими радостями.

Так же как и свой прародитель CircuitPython может работать на множестве разных микроконтроллеров. Далее мы будем ориентироваться именно на язык CircuitPython.

Для экспериментов на этом уроке мы будем использовать отладочную плату Графит-S2, разработанную в RobotClass. Эту плату или её аналоги можно купить у нас в интернет-магазине.

В корзину

Микроконтроллер с CircuitPython

Чтобы микроконтроллер умел работать с CircuitPython на нём уже должна быть установлена специальная инфраструктура (прошивка). Для примера, подключим отладочную плату Графит-S2 к компьютеру через USB кабель и посмотрим на реакцию. Работать будем в ОС Windows.

После подключения в списке доступных дисков появится новый накопитель с именем CIRCUITPY.

Зайдём в этот накопитель и увидим такую структуру папок.

Самое важно здесь — это папка lib и файл скрипта code.py (в Python программы часто называют скриптами). В папке хранятся дополнительные библиотеки, которые необходимы для работы программы. Файл code.py хранит скрипт на языке Python, который запускается каждый раз когда мы его сохраняем на накопитель, или когда подаём питание на отладочную плату, или нажимаем кнопку сброса.

Кроме того, в списке устройств появится новый COM порт. С помощью этого виртуального порта можно будет работать с интерпретатором языка Python. Об этом чуть позже.

Среда разработки Mu

Итак у нас есть доступ к программе на Python, скорее бы уже что-нибудь написать. Но пока ещё одна остановка.

Редактировать программу можно и в обычном текстовом редакторе, однако удобнее для этого использовать так называемые IDE (это как Arduino IDE для Arduino). Помимо текстового редактора IDE имеют набор полезных функций: систему проверки кода, функцию загрузки на контроллер, терминал для связи с контроллером. А для Python будет ещё важным иметь возможность работать с интерпретатором языка (REPL).

Для CircuitPython (и для MicroPython тоже) имеется удобная среда Mu.

https://codewith.mu/

В Mu есть всё самое необходимое для успешного начала работы с CircuitPython. Теперь приступим к программированию.

REPL — интерпретатор языка Python

Если отладочная плата подключена к компьютеру, редактор 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). Вот что у нас получилось:

Посмотрите на светодиод, он горит!

Мигаем светодиодом на CircuitPython

Что ж, с интерпретатором познакомились. Это удобный инструмент, если нужно быстро что-нибудь проверить. В реальной задаче, конечно, программисты сначала пишут полный код программы, а потом его запускают целиком.

Напишем программу для мигания светодиодом. Прямо как на старой доброй Ардуино (урок про светодиод).

Жмём кнопку Загрузить и выбираем файл 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/

Резюме Разработчик Java (Spring, JavaFx, Backend), Python STM32, AVR, Nuvoton, Stellaris АСУ ТП, КИПиА, Иннополис, 80 000 руб. в месяц

Резюме № 24758139


Обновлено 8 января

Разработчик Java (Spring, JavaFx, Backend), Python STM32, AVR, Nuvoton, Stellaris АСУ ТП, КИПиАБыл больше месяца назад

80 000 ₽

Соискатель скрыл дату рождения, не состоит в браке, есть дети

Иннополис, удаленная работа, готов к командировкам

Занятость

полная занятость

Гражданство

Россия

Добавить в избранное

Поделиться

Фото, имя и контакты доступны только авторизованным пользователям

Образование

    • Высшее образование
    • Дневная/Очная
    • 1996

    Туркменский политехнический институт

    Факультет: Технической кибернетики

    Специальность: Инженер электрик

Обо мне

Профессиональные навыки:

Занимаюсь программированием и разработкой в свободное время микропроцессорных систем на базе микропроцессоров 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. Пример проекта выложен на сайте портфолио.

3. Занимаюсь программированием и разработкой в под заказ микропроцессорных систем на базе микропроцессоров Attiny, Atmega, Xmega, STM32, Stellaris. Проект выложен на моем сайте портфолио. 4. Имеются свои разработки (станок для переработки хлопка, электронное управление с помощью мк STM32 вывод и управление с помощью TFT дисплея 7″). Проект выложен на моем сайте портфолио. 5. Аппарат управления доением на мк Atmega1284 с помощью LCD дисплея 16х2 HD74480. Проект выложен на моем сайте портфолио. 6. Имею опыт работы с протоколами Modbus, Profibus DP, LON, RS-485, RS-232, CAN, USB. Проект выложен на моем сайте портфолио 7. Газовые сигнализаторы пропан, метан для автомобилей и домашнего использования с оповещением через сеть GSM. Проект выложен на моем сайте портфолио. 8. Плата модуля GSM для оповещения клиента посредством смс при возникновении утечки. Некоторые проекты запущены в производство и прошли испытания в реальных условиях. Мое портфолио: https://technocom.site123.me

Дополнительные сведения:

Веду здоровый образ жизни

Иностранные языки

  • Английский язык — технический

Добавить в избранное

Поделиться

Фото, имя и контакты доступны только авторизованным пользователям

Похожие резюмеВсе 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, чтобы улучшить сайт для вас. Подробнее

stm32loader · PyPI

Скрипт 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
 

Справочные документы

  • ST AN2606: режим загрузки системной памяти микроконтроллера STM32
  • ST AN3155: протокол USART, используемый в загрузчике STM32
  • ST AN4872: протокол загрузчика BlueNRG-1 и BlueNRG-2 UART

Благодарность

Исходная версия Ивана А-Р (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 может отличаться.

Выполните следующие соединения:

  • Последовательный адаптер GND на MCU GND.
  • Питание последовательного адаптера к питанию MCU или наоборот (либо 3,3, либо 5 Вольт).
  • Обратите внимание, используете ли вы сигнализацию 5 В или 3V3 на последовательном адаптере.
  • Последовательный TX на MCU RX (PA10).
  • Последовательный RX на MCU TX (PA9).
  • Последовательный DTR для СБРОСА MCU.
  • Последовательный RTS на MCU BOOT0 (или BOOT0 на 3,3 В).
  • MCU BOOT1 на GND.

Если на вашем последовательном адаптере недоступны RTS или DTR, вам придется вручную нажимайте кнопки или работайте с перемычками. Когда есть выбор, установите BOOT0 вручную на высокий уровень и выполните сброс диска через последовательный порт. adepter (он должен переключаться, а BOOT0 — нет).

В настоящее время не поддерживается

  • Аргумент командной строки для защиты от считывания
  • Аргумент командной строки для защиты/снятия защиты от записи
  • Устройства STM8 (ST UM0560)
  • Постраничное стирание флэш-памяти для устройств с размером страницы <> 1 КиБ
  • Другие протоколы загрузчика (например, I2C, HEX -> реализованы в stm32flash)

Будущая работа

  • Используйте правильную регистрацию вместо операторов печати
  • Попробуйте конвейеры Azure для CI
  • Поддержка PyPy, PyPy3
  • отказаться от поддержки Python2; начать использовать intenum для команд и ответов
  • Определите размер страницы флэш-памяти или сделайте его настраиваемым

python — при программировании сокетов STM32 не удалось подключиться с кодом ошибки -3012

Я занимаюсь программированием сокетов, используя свою плату STM32L4S5I. Я импортировал программу https://github.com/ARMmbed/mbed-os-example-sockets и сделал следующую модификацию.

  1. Измените mbed_app.json, указав SSID и пароль моего Wi-Fi.
  2. Добавьте указанное ниже в «*» в разделе «target_overrides» в mbed_app.json, чтобы он поддерживал плату L4S5I.
 "target.components_add": ["ism43362"],
            "ism43362.provide-default": правда,
            "target.network-default-interface-type": "WIFI",
            "target.macros_add": ["MBEDTLS_SHA1_C"]
 
  1. Измените хост и порт на такие же, как у моего компьютера (я использовал ipconfig, чтобы проверить это)

А вот мой код Python, который работает как серверная часть на моем компьютере.

 импортный сокет
импортировать json
импортировать numpy как np
импортировать matplotlib.pyplot как сюжет
HOST = '192.168.0.155' # IP-адрес
PORT = 12345 # Порт для прослушивания (используйте порты > 1023)
с socket.socket(socket.AF_INET, socket.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *