Picotel : editeur de code et mini-shell
Bonjour à tous,
Le projet PicoTel "Raspberry-Pi Pico + Minitel" avance bien vers son autonomie. Le but du projet étant de créer une machine MicroPython complètement autonome.
Il ne me manquera encore d'autres terminaux pour essayer le projet dans d'autres configuration.
Source: Projet PicoTel |
Quoi de neuf...
Bouton RunApp
Le switch ajouté sur la broche GP16 permet de contrôler le démarrage du Pico afin qu'il active ou pas la réplication du terminal REPL sur l'UART.
Le restant du schéma de câblage est disponible sur GitHub.
Class PicoTelUart
Pour commencer, j'ai relaté un problème concernant un problème d'affichage si le débit d'informations (lignes envoyées) vers le minitel est trop important.
En insérant une pause de 500ms entre chaque print() MicroPython permettait de contourner le problème.
Auto-critique
Insérer des sleep_ms(500) n'est pas une approche très professionnelle.
Elle nécessite aussi la modification de tous les scripts MicroPython à exécuter sur le MiniTel --> pas franchement envisageable.
En premier recours j'ai envisager utilisé le contrôle de flux présent sur la fiche UART... jusqu'au moment où j'ai appris (et vérifié) qu'il n'est pas fonctionnel en mode terminal!
Pas de contrôle de flux? Que faire?
L'autre option est d'insérer un code qui fait en sorte d'insérer une pause automatiquement entre chaque print().
Gros, entre le dupterm() et l'UART utilisés dans le fichier boot.py ... plus précisément quand dupterm() écrit sur la ligne UART.
Nouveau fichier boot.py & classe PicoTelUart
from machine import Pin import os, picotel run_app = Pin( 16, Pin.IN, Pin.PULL_UP ) p = Pin( 25, Pin.OUT ) if run_app.value()==0: # Running PicoTel print( "Running PicoTel") # 1200 bauds or 4800 bauds or 9600 bauds uart = picotel.PicoTelUart( 0, 9600, bits=7, parity=2, stop=1 ) # Minital compatible UART os.dupterm( uart ) # Duplicate terminal over IART p.value(1) else: print( "PicoTel disabled") p.value(0)
D'ailleurs il y a deux petits ajouts:
- Un interrupteur (Switch) permet de neutraliser le démarrage du PicoTel
- La LED du Pico s'allume lorsque PicoTel est initialisé
Voici le contenu de la classe PicoTelUart où il est possible de voir le délai de cinq millisecondes (valeur pas défaut) inséré après chaque écriture de donnée sur l'UART.
from machine import UART import io, time class PicoTelUart(io.IOBase): def __init__(self, *args, **kwargs ): # open UART self.u = UART(*args, **kwargs) self.ms = 5 # default sleep in ms when printout buffer to terminal def read(self, sz=None): return self.u.read( sz ) def readinto(self, buf): return self.u.readinto(buf) def ioctl(self, op, arg): return 0 def write(self, buf): # write buf to terminal self.u.write( buf ) time.sleep_ms( self.ms )
Mini-Shell
Mini-Shell (mshell) est un script minimaliste permettant d'utiliser des commandes type "Linux" depuis REPL. C'est très pratique pour lister / déplacer / effacer / créer des fichiers depuis la session REPL / UART (donc depuis le terminal Minitel).
Mini-Shell est maintenant démarré en même temps que le Pico à partir du script main.py détaillé ci-dessous.
run_app = Pin( 16, Pin.IN, Pin.PULL_UP ) if run_app.value()==0: # Running PicoTel import mshell
La petite nouveauté c'est l'ajout de la commande "edit" pour éditer le contenu d'un fichier à l'aide de MicroPython-Editor (voir point suivant).
Mini-Shell - list de fichiers (ls) et ouverture de tmp36.py désolé pour la qualité de l'image un peu médiocre. |
Voici l'aide actuel de mshell:
$ help
display this help file.
$ append source texte
Append the texte (can be quoted if containing space) to the source file.
$ cat source
Display the content of source file.
$ cp source destin
Binary copy the source file to destin file. Destin file is overwrites if exists.
$ df
$ df path
Show the filesystem size and usage. By default the command target the "/" path.
It show the following content:
FileSystem: 1441792 bytes (1408 KB, 352 Blocks)
Free : 1429504 bytes (1396 KB, 349 Blocks)
Block size: 4096 bytes
$ edit filename
Start the pye editor to edit the file content.
If not present on the file system, install it from
https://github.com/robert-hh/Micropython-Editor/blob/master/pye.py
$ uname
Displays the information enclosed within os.uname() .
It shows the following content:
sysname : rp2
nodename: rp2
release : 1.18.0
version : v1.18 on 2022-01-17 (GNU 11.2.0 MinSizeRel)
machine : Raspberry Pi Pico with RP2040
$ exit
Exists the mini shell
$ ls
list the files
$ mv source destin
Move/rename the source file to destin file. Destin file is overwrites if exists.
$ rm source
remove the source file from file system.
$ touch source
create an empty file (with source name) into the file system.
MicroPython-Editor (pye)
pye est un éditeur VT100 écrit en MicroPython et développé par robert-hh (lien GitHub), l'un des utilisateurs très actifs sur les Forums de MicroPython.org.
pye a été intégré à mshell (commande edit
, version 0.0.3) pour faciliter l'édition de scripts Python dans un éditeur qui ressemble fort à l'utilitaire Nano.
De nombreuses manipulations sont prise en charge à l'aide de raccourcis claviers (eg: Ctrl + Q pour quitter).
La capture ci-dessous reprend l'édition du fichier tmp36.py à l'aide de pye.
Edition d'un script à l'aide de l'éditeur MicroPython "pye" |
La suite
Ceci est une version intermédiaire, il y a quelques problèmes à régler et améliorations à apporter (TODO.md list du projet).
- Pye: tester et documenter les raccourcis claviers
- Terminal: Ctrl + C n'atteind pas MicroPython
- Terminal: comment envoyer un "_" vers REPL? (non disponible sur c to repl?
- mshell -> help : doit aussi ouvrir mshell.txt depuis /lib
- mshell -> ls : multicolonnes et affichage par page
- mshell -> ls : afficher la taille des fichiers ?
- mshell -> more : afficher le contenu d'un fichier avec affichage par page.
- mshell -> reboot
- hexview.py -> voir le contenu d'un fichier en HEX
- accroître PicoTelUart.ms sous pye pour éviter le décrochage du terminal.
- pye -> devrait se souvenir du nom de fichier ouvert pour la sauvegarde.
- mshell -> run : (defaut) pour exécuter/re-executer un script Python
- mshell -> mem : afficher la mémoire disponible (et faire un gc.collect).
- Afficher un graphique (text base) / clear screen
- Instruction d'installations dans la doc.
Écrire un commentaire