Close Menu
magazin Mehatronikamagazin Mehatronika
  • English
  • Početna
  • Industrija
  • Recenzije
    • Industrijska oprema
    • SBC računari
    • Razvojni sistemi
    • STEM
    • Mrežna oprema
    • Displeji
    • Dodaci
    • Alati
    • Muzička oprema
    • Pametni uređaji
  • Edukacija
  • Novosti
  • Lifestyle
    • Događaji
    • Intervjui
  • Stručni tekstovi
  • Forum
Facebook X (Twitter) Instagram LinkedIn
Trending
  • Inovativna rešenja za optimizaciju potrošnje energije u industriji
  • magazin Mehatronika: nagradni konkurs #0003
  • Danfoss iC2-Micro
  • Haiwell IoT i Cloud nikada nisu bili dostupniji i jednostavniji
  • P-KUBE Krome sigurnosna ručka
  • Ispitivanje EV punjača
  • Radionica o WSCAD softveru
  • INNOMOTICS elektrifikuje veliki rudarski pogon u Čileu
  • Srpski
    • Srpski
    • English
LinkedIn Facebook X (Twitter) Instagram
magazin Mehatronikamagazin Mehatronika
  • Početna
  • Industrija
  • Recenzije
    • Industrijska oprema
    • SBC računari
    • Razvojni sistemi
    • STEM
    • Mrežna oprema
    • Displeji
    • Dodaci
    • Alati
    • Muzička oprema
    • Pametni uređaji
  • Edukacija
  • Novosti
  • Lifestyle
    • Događaji
    • Intervjui
  • Stručni tekstovi
  • Forum
magazin Mehatronikamagazin Mehatronika
Home»Edukacija»MicroPython na STM32F401RE
Edukacija

MicroPython na STM32F401RE

By Aleksandar Dakić27/01/2023Updated:18/02/20254 Mins Read
bsh

Prva misao je bila „zašto bi“, a već sledeća  “što da ne“ probamo MicroPython na STM32F401RE. Ova ploča je jedna od osnovnih edukacionih alata na elektrotehničkim fakultetima širom sveta, a posebno u Indiji. Ovo joj je veoma velika preporuka.

O STM32F401RE smo već pisali ranije, a sada ćemo u svetlu moderne opsednutosti Python jezikom proći kroz ovu avanturu nazvanu “microPython tamo gde mu mesto i nije”.

Prvo oduševljenje je bilo da uopšte postoji microPython port za ovu platformu i on se može naći na ovoj lokaciji. Instalacija je više nego jednostavna, sve sto treba uraditi je preuzeti DFU/hex fajl i update-ovati firmeware ploče koristeći STSW-LINK004: STM32 ST-LINK utility (ili modernijim alatom pod imenom STM32CubeProgrammer). I to je sve. U par koraka NUCLEO-F401RE je postao MicroPython ploča.

STM32F401RE MicroPython kod

I tada kreću zanimljivosti koje su prava poslatica za one koji obožavaju osećaj da je nešto (što u principu treba da radi out-of-the-box) proradilo. Machine.h biblioteka će proraditi odmah, proradiće i Pin i I2C paketi, ali PWM neće.

STM32F401RE u radu

Dobro, povezali smo SSD1306 ekran i preuzeli odgovarajuću biblioteku, te je uz I2C komunikaciju zasijao za tren. Povezivanje SCL -> SCL/D15 i SDA -> SDA/D14 je odradio posao.

Joystick HW-504 na analognim ulaznim portovima VRx -> A0, VRy -> A1 se očitava kako treba i digitalni ulaz na SW -> D8 radi.

I sada dolazi RGB dioda (R -> D3/PWM, G -> D5/PWM i B -> D7), gde se sa PWM kontroliše sjaj. PWM funkcije ne rade, te je neophodno ručno podesiti tajmer:

p_red = Pin('PB3') # PB3-D3 has TIM2, CH2
tim = Timer(2, freq=4000)
ch = tim.channel(2, Timer.PWM, pin=p_red)
ch.pulse_width_percent(red)

Tajmer 2, na kanalu 2 za pin PB3… čemu onda MicroPython koji liči na C++.

Ideja je bila da se promenom položaja Joystick-a koji ide po HSV krugu, menjaju boje i to prikazuje bojom svetlosti na diodi. Da bi se to uradilo potreban je „import colorsys„, ali on nije implementiran. Nema veze, hteli smo da napišemo neku priručnu varijantu HSV-to-RGB rutine, i za to nam treba malo više matematike. Dakle „import numpy„… ali nema ni njega.

SSD1306 ekran

Rešavamo stvar svodeći se na najjednostavnije opcije, klik za plavu, levo-desno i gore-dole za crvenu i zelenu. Radi, i interesantno je.

Ovo je bilo zanimljivo putovanje u MicroPython, koje nam je pokazalo da je ovaj sistem odlično rešenje za poznavaoce Pythona i njihove prve korake ka STM32 ekosistemu. Da pojedine bitne funkcije nedostaju, nedostaju. Već drugi korak zbog toga mora bit ka Arduino IDE, STM IDE ili Mbed.com-u. Ovaj potonji je posebno interesantan u svojoj on-line verziji.

from machine import I2C, Pin, ADC
from utime import sleep_ms
from ssd1306 import SSD1306_I2C

from pyb import Pin, Timer

blue_on = False

def remap(x, in_min, in_max, out_min, out_max):
    return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min

def handle_interrupt(pin):
    global blue_on
    if (blue_on):
        blue_on = False
    else:
        blue_on = True
    global interrupt_pin
    interrupt_pin = pin
    sleep_ms(20)

xAxis = ADC(Pin('PA1'))
yAxis = ADC(Pin('PA0'))

SW = Pin('PA9', Pin.IN, Pin.PULL_UP)
SW.irq(trigger=Pin.IRQ_FALLING, handler=handle_interrupt)

red = 0
green = 0
blue = 0

p_red = Pin('PB3') # PB3-D3 has TIM2, CH2
tim = Timer(2, freq=4000)
ch = tim.channel(2, Timer.PWM, pin=p_red)
ch.pulse_width_percent(red)

p_green = Pin('PB4') # PB4-D5 has TIM3, CH1
tim = Timer(3, freq=4000)
ch = tim.channel(1, Timer.PWM, pin=p_green)
ch.pulse_width_percent(green)

p_blue = Pin('PA8') # PB10-D6 has TIM1, CH1
tim = Timer(1, freq=4000)
ch = tim.channel(1, Timer.PWM, pin=p_blue)
ch.pulse_width_percent(blue)


i2c = I2C(1)
oled = SSD1306_I2C(128, 64, i2c)

oled.show()
oled.fill(0)
oled.show()
oled.text("RED:   {}".format(red),10,10,1)
oled.text("GREEN: {}".format(green),10,30,1)
oled.text("BLUE:  {}".format(blue),10,50,1)
oled.show()



while True:
    xRef = round (remap (xAxis.read_u16(), 0, 65555, 0, 100))
    yRef = round (remap (yAxis.read_u16(), 0, 65555, 0, 100))
    oled.fill(0)
    oled.text("RED:   {}".format(str(xRef)),10,10,1)
    oled.text("GREEN: {}".format(str(yRef)),10,30,1)
    oled.text("BLUE: {}".format(str(blue)),10,50,1)
    oled.show()
    
    p_red = Pin('PB3') # PB3-D3 has TIM2, CH2
    tim = Timer(2, freq=4000)
    ch = tim.channel(2, Timer.PWM, pin=p_red)
    ch.pulse_width_percent(xRef)
    
    p_green = Pin('PB4') # PB4-D5 has TIM3, CH1
    tim = Timer(3, freq=4000)
    ch = tim.channel(1, Timer.PWM, pin=p_green)
    ch.pulse_width_percent(yRef)
    
    p_blue = Pin('PA8') # PB10-D6 has TIM1, CH1
    tim = Timer(1, freq=4000)
    ch = tim.channel(1, Timer.PWM, pin=p_blue)
    if (blue_on):
        blue = 255
    else:
        blue = 0
    ch.pulse_width_percent(blue)
    
    sleep_ms(100)
    

Nucleo64 STM32F401RE micropython demo – OLED SSD1306 I2C
https://github.com/magazinMehatronika/Nucleo64-STM32F401RE-micropython-demo
0 forks.
0 stars.
0 open issues.

Recent commits:
  • Update README.md, GitHub
  • Update README.md, GitHub
  • Update README.md, GitHub
  • Update README.md, GitHub
  • Add files via upload, GitHub
  • About
  • Latest Posts
Aleksandar Dakić
Follow me
Aleksandar Dakić
Editor-in-chief at magazin Mehatronika
Aleksandar je osnivač magazina Mehatronika.

Sa pozadinom u električnom inženjeringu i dugom istorijom rada u stručnim časopisima, on se fokusira na ključnom sadržaju magazina Mehatronika i stoji iza brojnih inicijativa.
Aleksandar Dakić
Follow me
Latest posts by Aleksandar Dakić (see all)
  • Inovativna rešenja za optimizaciju potrošnje energije u industriji - 26/06/2025
  • magazin Mehatronika: nagradni konkurs #0003 - 25/06/2025
  • Danfoss iC2-Micro - 25/06/2025
STMicroelectronics
Previous ArticleSunFounder Pironman Case recenzija
Next Article Miniware MDP-P906 PSU recenzija

Related posts

Elecfreaks micro:bit Jacdac Smart Exploration Kit recenzija

8.2 15/06/2025

Elecfreaks micro:bit XGO Rider Kit recenzija

9.1 04/06/2025

Elecrow All-in-one Starter Kit for Pico2

7.8 28/05/2025

Elecrow All-in-one Starter Kit for Arduino

7.3 04/05/2025

ICOP 86Duino EduCake recenzija

9.1 03/05/2025

Globalno takmičenje 2025 Schneider Go Green

23/04/2025
Kompanije
ABB akYtec Armsom Auma Automatika Banana Pi Beogradski Sajam Bosch Rexroth CADCAM Data CHIRON Croatia CircuitMess Danfoss DFRobot Digilent Dossis Eaton Elcom Media Elecfreaks Elecrow Electronic Design Elektromont ELESA+GANTER EMP EMT elektro ENEL Valjevo EP-Solutions ePlan Eurocom EXOR ETI Fanuc Faulhaber Festo Fox Electronics Gamax Gomo Design Hennlich Hidraulika HMS ICM Electronics ICOP INEA SR IvDam Process Control Kinco electronics LattePanda Libre Computer Lilygo magazinMehatronika malina314 Mean Well / ASIKO Melco-Buda Metronik Microsoft Mikro Kontrol Milk-V Mitsubishi Electric Momentum National Instruments Neminik Neofyton NVIDIA OM SISTEM Orange Pi PCBWay Pickering Radxa Raspberry Pi Recom Rittal Samsung Schneider Electric Schunk Seeed Studio Servoteh Siemens SM Automation Sobel Soldered staubli STMicroelectronics SunFounder Tectra / Megger teenage engineering Tehnogama TeLa elektrik TI LaunchPad Tipteh TRC pro Trim Triton Engineering UMBRAmatik Unicom Uno-Lux Processing Uno Lux NS URAM System Vesimpex VETS Weidmuller Wurth Elektronik Yaskawa Yokogawa
Distribuciju štampanih izdanja srednjim školama omogućile kompanije
Facebook X (Twitter) Instagram LinkedIn
  • Politika privatnosti
  • Uređivačka politika
  • Kontakt
  • Media kit
  • Slanje jedinica za recenziju
  • Pretplata
  • Elektronska izdanja

magazin Mehatronika - Agencija “Gomo Design”
Stanoja Glavaša 37, 26300 Vršac, Serbia
+381 60 0171 273

© 2025 magazin Mehatronika by Gomo Design.

Type above and press Enter to search. Press Esc to cancel.

Koristimo minimalne kolačiće da bismo obezbedili najbolje iskustvo na sajtu.PrihvatamPolitika privatnosti