MicroPython – taky Python

Tak jako máš na počítači nainstalovaný operační systém, na vývojové desce je takzvaný firmware, program, který ovládá všechny ty drátky, čipy a světýlka, co v ní jsou. My používáme firmware zvaný MicroPython, který navíc rozumí jazyku Python a umí provádět pythonní příkazy. Zkus si to! Tři zobáčky, které vyskočí když se k destičce připojíš (příp. když pak zmáčkneš Enter), přišly ze zařízení, které teď netrpělivě čeká na příkaz.

>>> 1+1
2
>>> print('Hello World')
Hello World

Téměř vše, co používáš v Pythonu na počítači, umí MicroPython taky: čísla, řetězce, seznamy, třídy, výjimky, moduly a tak dál. Některé detaily ale jsou trochu osekané, aby se všechno vešlo do extrémně malého prostoru. Zkus si, jak se liší efekt následujících příkazů od „velkého” Pythonu:

>>> print
>>> import math
>>> math.pi

Nejdůležitější věc, která je osekaná, je standardní knihovna – většina modulů, které na počítači můžeš naimportovat, v MicroPythonu chybí. U modulů jako turtle je to pochopitelné, ale v rámci šetření místem chybí i moduly jako random. Většinou to příliš nevadí – malá zařízení se používají na jiné věci než ta velká – ale je potřeba si na to dát pozor.

Některé věci ze standardní knihovny se dají najít ve zjednodušené formě na jiných místech. Například ačkoliv modul random chybí, náhodné číslo od 0 do 255 se dá získat pomocí:

>>> from os import urandom
>>> urandom(1)[0]
61

Ovládání konzole

Při psaní složitějšího kódu si všimneš, že konzole MicroPythonu automaticky odsazuje. To je pro malé programy pohodlné, ale umí to i znepříjemnit život – hlavně když chceš kód do konzole zkopírovat odjinud.

Proto má konzole MicroPythonu speciální vkládací mód, který automatické odsazování vypíná. Aktivuje se pomocí Ctrl+E a ukončuje se pomocí Ctrl+D.

{
  "data": {
    "sessionMaterial": {
      "id": "session-material:2019/brno-jaro-2019-pondeli:micropython:2",
      "title": "MicroPython – taky Python",
      "html": "\n          \n    \n\n    <h2>MicroPython &#x2013; taky Python</h2>\n<p>Tak jako m&#xE1;&#x161; na po&#x10D;&#xED;ta&#x10D;i nainstalovan&#xFD; opera&#x10D;n&#xED;\nsyst&#xE9;m, na v&#xFD;vojov&#xE9; desce je takzvan&#xFD; <em>firmware</em>,\nprogram, kter&#xFD; ovl&#xE1;d&#xE1; v&#x161;echny ty dr&#xE1;tky,\n&#x10D;ipy a sv&#x11B;t&#xFD;lka, co v&#xA0;n&#xED; jsou.\nMy pou&#x17E;&#xED;v&#xE1;me firmware zvan&#xFD; <em>MicroPython</em>,\nkter&#xFD; nav&#xED;c rozum&#xED; jazyku Python a um&#xED; prov&#xE1;d&#x11B;t pythonn&#xED; p&#x159;&#xED;kazy. Zkus si to!\nT&#x159;i zob&#xE1;&#x10D;ky, kter&#xE9; vysko&#x10D;&#xED; kdy&#x17E; se k&#xA0;desti&#x10D;ce p&#x159;ipoj&#xED;&#x161; (p&#x159;&#xED;p. kdy&#x17E; pak\nzm&#xE1;&#x10D;kne&#x161; Enter), p&#x159;i&#x161;ly\nze za&#x159;&#xED;zen&#xED;, kter&#xE9; te&#x10F; netrp&#x11B;liv&#x11B; &#x10D;ek&#xE1; na p&#x159;&#xED;kaz.</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"mi\">1</span><span class=\"o\">+</span><span class=\"mi\">1</span>\n<span class=\"go\">2</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s1\">&apos;Hello World&apos;</span><span class=\"p\">)</span>\n<span class=\"go\">Hello World</span>\n</pre></div><p>T&#xE9;m&#x11B;&#x159; v&#x161;e, co pou&#x17E;&#xED;v&#xE1;&#x161; v Pythonu na po&#x10D;&#xED;ta&#x10D;i,\num&#xED; MicroPython taky: &#x10D;&#xED;sla, &#x159;et&#x11B;zce, seznamy, t&#x159;&#xED;dy,\nv&#xFD;jimky, moduly a tak d&#xE1;l.\nN&#x11B;kter&#xE9; detaily ale jsou trochu osekan&#xE9;, aby se v&#x161;echno\nve&#x161;lo do extr&#xE9;mn&#x11B; mal&#xE9;ho prostoru.\nZkus si, jak se li&#x161;&#xED; efekt n&#xE1;sleduj&#xED;c&#xED;ch p&#x159;&#xED;kaz&#x16F;\nod &#x201E;velk&#xE9;ho&#x201D; Pythonu:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">print</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">import</span> <span class=\"nn\">math</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">math</span><span class=\"o\">.</span><span class=\"n\">pi</span>\n</pre></div><p>Nejd&#x16F;le&#x17E;it&#x11B;j&#x161;&#xED; v&#x11B;c, kter&#xE1; je osekan&#xE1;, je <em>standardn&#xED;\nknihovna</em> &#x2013; v&#x11B;t&#x161;ina modul&#x16F;, kter&#xE9; na\npo&#x10D;&#xED;ta&#x10D;i m&#x16F;&#x17E;e&#x161; naimportovat, v MicroPythonu chyb&#xED;.\nU modul&#x16F; jako <code>turtle</code> je to pochopiteln&#xE9;,\nale v r&#xE1;mci &#x161;et&#x159;en&#xED; m&#xED;stem chyb&#xED; i moduly jako <code>random</code>.\nV&#x11B;t&#x161;inou to p&#x159;&#xED;li&#x161; nevad&#xED; &#x2013; mal&#xE1; za&#x159;&#xED;zen&#xED; se pou&#x17E;&#xED;vaj&#xED;\nna jin&#xE9; v&#x11B;ci ne&#x17E; ta velk&#xE1; &#x2013; ale je pot&#x159;eba si na to\nd&#xE1;t pozor.</p>\n<p>N&#x11B;kter&#xE9; v&#x11B;ci ze standardn&#xED; knihovny se daj&#xED; naj&#xED;t\nve zjednodu&#x161;en&#xE9; form&#x11B; na jin&#xFD;ch m&#xED;stech.\nNap&#x159;&#xED;klad a&#x10D;koliv modul <code>random</code> chyb&#xED;,\nn&#xE1;hodn&#xE9; &#x10D;&#xED;slo od 0 do 255 se d&#xE1; z&#xED;skat pomoc&#xED;:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">os</span> <span class=\"kn\">import</span> <span class=\"n\">urandom</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">urandom</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n<span class=\"go\">61</span>\n</pre></div><h2>Ovl&#xE1;d&#xE1;n&#xED; konzole</h2>\n<p>P&#x159;i psan&#xED; slo&#x17E;it&#x11B;j&#x161;&#xED;ho k&#xF3;du si v&#x161;imne&#x161;, &#x17E;e konzole MicroPythonu automaticky odsazuje.\nTo je pro mal&#xE9; programy pohodln&#xE9;, ale um&#xED; to i znep&#x159;&#xED;jemnit &#x17E;ivot &#x2013; hlavn&#x11B; kdy&#x17E; chce&#x161;\nk&#xF3;d do konzole zkop&#xED;rovat odjinud.</p>\n<p>Proto m&#xE1; konzole MicroPythonu speci&#xE1;ln&#xED; vkl&#xE1;dac&#xED; m&#xF3;d, kter&#xFD; automatick&#xE9; odsazov&#xE1;n&#xED; vyp&#xED;n&#xE1;.\nAktivuje se pomoc&#xED; <kbd>Ctrl+E</kbd> a ukon&#x10D;uje se pomoc&#xED; <kbd>Ctrl+D</kbd>.</p>\n\n\n        "
    }
  }
}