Oxoscript se transforme en NanoPy - plus d'infos

Pourquoi faut-il un nouveau langage de programmation ?

Aujourd’hui, la programmation de microcontrôleurs se fait généralement en C/C++. Ce langage permet certes de tout réaliser, mais la programmation est laborieuse et sujette à erreurs. Avant de pouvoir programmer quelque chose, il faut en outre installer et configurer une chaîne d’outils. Selon le matériel, même la configuration de l’environnement de développement est déjà un obstacle. Selon les réglages, on peut même détruire définitivement son microcontrôleur (flasher).

Il existe certes depuis un certain temps des alternatives, par exemple Micropython ou Circuitpython. Tous deux sont des interpréteurs spécialement conçus pour les microcontrôleurs et basés sur le célèbre langage de programmation Python. Python a toutefois le grand inconvénient d’être un langage dynamiquement typé qui utilise beaucoup de mémoire et présente un comportement d’exécution moins bon. La puissance de calcul et la mémoire sont disponibles en grande quantité sur les PC normaux, mais pas sur les microcontrôleurs. C’est pourquoi on ne peut aujourd’hui que choisir entre un travail efficace mais coûteux avec C/C++ et un travail rapide et compact avec Micropython, mais lent et avec de grandes limites de mémoire.

NanoPy comble cette lacune. Le langage est typé statiquement avec une gestion statique de la mémoire. Il peut ainsi gérer très efficacement les ressources limitées d’un microcontrôleur. Mais il est également facile à utiliser, car il reprend des concepts de langage connus du populaire langage Python. Cela est possible grâce à une technique de compilation moderne qui peut, dans une certaine mesure, imiter les pratiques de programmation dynamique. Lors de l’exécution, NanoPy génère un bytecode compact qui est exécuté sur la machine cible via un interpréteur efficace. Comme il n’utilise pas de mémoire dynamique, NanoPy est très robuste et fonctionne de manière stable, même à long terme.

image

exemple :

background(0,0,0)

for i in 100:
  x = random(0,240)
  y = random(0,240)
  r = random(0,20)

  drawCircle(x,y,r)

update()

Il existe de nombreux outils pour NanoPy, qui manquent généralement aux microcontrôleurs, sans qu’il soit nécessaire d’installer et de gérer quoi que ce soit en local. Tout se passe confortablement dans le navigateur. Dans l’environnement de développement intégré, nous trouvons des outils de débogage en direct, des fonctions d’autocomplétion, une documentation interactive complète, ainsi que de nombreux exemples déjà programmés que l’on peut utiliser immédiatement pour ses propres projets.

image

À quoi ressemble NanoPy ?

NanoPy combine des concepts linguistiques existants avec de nouveaux procédés techniques.

Cela permet même souvent d’exécuter du code Python simple avec peu de modifications sur les microcontrôleurs.

image

NanoPy peut utiliser de nombreuses constructions linguistiques de Python. Le langage utilise entre autres l’indentation des blocs. Les deux points et les parenthèses autour des appels de procédure, qui sont obligatoires en Python, ne le sont pas en NanoPy. Les débutants ont souvent du mal avec ces constructions, c’est pourquoi il est possible de les omettre dans NanoPy.

Comment programmer dans NanoPy?

Dans NanoPy, les microcontrôleurs peuvent être programmés en fonction d’événements.

Le système NanoPy pour microcontrôleurs définit un certain nombre de procédures d’événements qui sont automatiquement appelées par le système lorsqu’une situation particulière se produit.

Actuellement, les événements suivants sont disponibles :

Événement Déclencheur
onClick est déclenché lorsqu’un bouton de l’appareil est pressé.
onTimer Si une minuterie est configurée, onTimer est appelé à l’arrivée de l’événement. Le timer peut être défini soit une fois (setTimer), soit comme un intervalle récurrent (setInterval).
onDraw Déclenché toutes les 20 ms environ, lorsque le contrôleur n’est pas occupé par des tâches de priorité supérieure. Cela permet d’afficher des animations d’écran fluides sur l’écran TFT des Oxocards.

Exemple 1 : événement de la minuterie

Lorsque le bouton est appuyé vers le bas, l’intervalle est défini et démarré. Un événement onTimer est ainsi déclenché toutes les 100 ms. Si le bouton est encore enfoncé vers le haut, l’intervalle s’arrête.

Style Python

def onTimer():
    print("timer")

def onClick():
    b = getButtons()
    if b.down:
        setInterval(100)
        print("start interval")
    if b.up:
        stopInterval()
        print("stop interval")


Style compact

def onTimer
    print "timer"

def onClick
    b = getButtons()
    if b.down
        setInterval 100
        print "start interval"
    if b.up
        stopInterval
        print  "stop interval"

Beispiel 2: onDraw-Ereignis

En cliquant sur le bouton, la variable globale on passe de true à false. L’événement onDraw est appelé 30 à 50 fois par seconde. Dans ces fonctions, nous vérifions l’état de la variable et dessinons un cercle si on est true.

Python-Style

on=false

def onDraw():
  clear()
  if on:
    drawCircle(120,120,80)
  update()

def onClick():
  on = not on
  delay(500)

Compact-Style

on=false

def onDraw
  clear
  if on
    drawCircle 120,120,80
  update

def onClick
  on = not on
  delay 500

Différences avec Micropython et C/C++ (Arduino et autres)

Micropython C/C++ / Arduino NanoPy
Ensemble complet de langages Python Ensemble complet de langages C/C++ Langage optimisé pour les microcontrôleurs
Typage dynamique Typé statiquement Typé statiquement
Gestion dynamique de la mémoire Gestion statique et dynamique de la mémoire Gestion statique de la mémoire
Plus lent car typage dynamique / gestion dynamique de la mémoire rapide rapide
Exigences plus élevées en matière de mémoire Faibles besoins en mémoire Faibles besoins en mémoire
Pas de débogage Débogage avec adaptateur Débogage directement via le navigateur
Transfert de scripts utilisateur Seul le micrologiciel complet peut être transféré Transfert de scripts utilisateur
Installation du firmware / mise à jour via flasher Installation du logiciel. Compiler et flasher Programmation via navigateur / App. / Firmware over the air
Interpréte Compilateur Compilateur / interprète de bytecode