Usare Text to Chip
Text to Chip è un IDE nel browser dove scrivi piccoli programmi BASIC MISSION (Sakura BASIC). Il browser li compila in una lista lineare di istruzioni bytecode; una piccola macchina virtuale a tick esegue quel bytecode — sia nel simulatore nel browser sia su un microcontrollore reale tramite Web Serial. Lo stesso bytecode gira in entrambi i contesti.
https://textochip.com fornisce. Firefox/Safari e i dispositivi mobili possono comunque usare il Simulatore.Dove gira il tuo programma
Gira interamente nel browser. Funziona per tutti, su qualsiasi sistema operativo. Il punto migliore da cui partire.
La scheda di riferimento. Flasha il firmware Zephyr una volta, poi carica ed esegui via USB.
Il firmware è Zephyr, quindi lo stesso codice gira su nuovi chip — cambia solo un piccolo file HAL. Prossima: Nordic nRF54L.
Il flusso di lavoro (uguale per ogni backend)
- Descrivi cosa vuoi nell'input del nastro, oppure scegli un programma pronto dai menu Esempi / Mission nell'header. Il programma prende forma come blocco nel nastro.
- Scegli dove eseguirlo con l'interruttore Simulatore / Scheda reale.
- Compila — la console mostra il risultato (numero di istruzioni ed eventuali avvisi).
- Carica ed esegui — invia il programma e avvia la VM (con Auto-run attivo avviene a ogni modifica).
- Stop la ferma; scrivi un comando
OVERRIDE:nello stesso input (es.OVERRIDE: STOPoOVERRIDE: SET 4 0) per iniettare una singola istruzione in tempo reale, senza ricaricare.
1 · Simulatore (nessun hardware)
- Apri
https://textochip.comin un browser qualsiasi. - Lascia l'interruttore su Simulatore (si connette automaticamente).
- Clicca Carica ed esegui. I LED a schermo, l'indicatore del buzzer e il pulsante riproducono esattamente ciò che farebbe una scheda reale.
- Per i programmi che leggono il pulsante, clicca il pulsante a schermo per pilotare il pin di ingresso.
Il simulatore è una VM in TypeScript con lo stesso set di istruzioni e modello a tick del firmware, così un programma che funziona qui si comporta in modo identico sulla scheda.
Il nastro — descrivilo a parole tue
La colonna sinistra è un unico nastro dove la conversazione e il programma vivono insieme. Scrivi ciò che vuoi a parole tue nell'input in basso — l'assistente scrive il Sakura BASIC per te e compare proprio lì come blocco di programma, con una breve risposta sopra. Nessun editor separato da gestire (ma puoi aprire il .bas completo quando vuoi con mostra .bas intero).
Continua a chattare per affinarlo: “rendilo più veloce”, “aggiungi un bip”, “usa il giallo” — ogni nuova versione compare nel nastro con le parti modificate evidenziate, e il compilatore del browser la controlla in automatico. Dallo stesso input puoi anche scrivere una riga BASIC numerata per modificare il programma direttamente, o un comando OVERRIDE: per agire sulla scheda in esecuzione.
La spiegazione e la risposta arrivano nella lingua del sito — cambiala con l<b>icona della lingua</b> (la bandiera) nellheader.
Esecuzione automatica
Sotto il nastro c'è un interruttore Auto-run, attivo per impostazione predefinita. Quando il programma cambia e compila senza errori, viene caricato ed eseguito automaticamente sul backend attivo — così vedi il risultato dal vivo senza dover cliccare tu Carica ed esegui.
Mission che puoi regolare
Una mission racchiude un intero comportamento in una sola riga. MISSION "SEMAFORO" esegue un semaforo per attraversamento pedonale completo — l'intero ciclo delle luci, il bip per i pedoni sul rosso e un vero pulsante di attraversamento — da una singola istruzione. Una seconda mission, MISSION "PIANOLA", trasforma la stessa scheda in una tastiera suonabile a un pulsante (ogni nota suona sul buzzer e accende un LED).
È parametrizzabile. Aggiungi una clausola WITH per regolare i tempi, il bip e il pulsante:
MISSION "SEMAFORO" WITH green=6s yellow=1s red=4s beep=off|slow|fast button=on|off minGreen=2s
Intervalli: green 2–15s, yellow 0.5–3s, red 2–15s, minGreen 2–10s. beep è off, slow o fast; button è on o off. Le durate accettano decimali o millisecondi (0.5s, 1500ms). Imposta solo i parametri che ti interessano, ad es. MISSION "SEMAFORO" WITH green=4s beep=fast.
Il pulsante pedonale
Con button=on, premere il pulsante è una richiesta di attraversamento: il LED verde lampeggia subito per confermarla, poi la luce passa al rosso appena il verde è durato almeno minGreen (così una pressione non ferma il traffico all'istante). Nel simulatore clicca il pulsante a schermo; sull'hardware collegalo a GPIO 6 (attivo-basso, a GND).
Vincoli di sicurezza fissi
Alcune cose non si possono cambiare — sono vincoli di sicurezza: le luci seguono sempre il ciclo verde → giallo → rosso, una luce alla volta, il bip per i pedoni suona solo sul rosso e una pressione del pulsante non può mai ridurre il verde sotto minGreen.
2 · ESP32-S3 (consigliata, verificata)
Scheda di riferimento: Freenove ESP32-S3-WROOM (USB-C, due porte USB). Flashi il firmware generico Zephyr della VM una volta; dopodiché carichi il bytecode dall'IDE tutte le volte che vuoi — nessun re-flash per cambiare programma.
Ottieni il firmware
La scheda esegue un piccolo firmware generico per la VM costruito con Zephyr. Lo compili e lo flashi una volta dalla cartella firmware-zephyr/ del repo, poi carichi i programmi dal browser. I passaggi completi, copia-e-incolla, sono in firmware-zephyr/README.md.
Cosa ti serve
- Scheda ESP32-S3 + cavo USB-C (la Freenove espone due porte USB — si usano entrambe)
- Breadboard, 3 LED (rosso/giallo/verde) + resistori da ~220–330 Ω
- Un buzzer piezo passivo e un pulsante (opzionali)
- La toolchain Zephyr: un workspace
west+ la Zephyr SDK (vedi la guida Getting Started di Zephyr)
Cablaggio
| Componente | Pin | Cablaggio |
|---|---|---|
| LED verde | GPIO 1 | → resistore → GND |
| LED giallo | GPIO 2 | → resistore → GND |
| LED rosso | GPIO 4 | → resistore → GND |
| Buzzer (passivo) | GPIO 5 | → GND |
| Pulsante A | GPIO 6 | → GND (pull-up interno; attivo-basso) |
Questi pin provengono dal profilo della scheda (lib/boardProfile.ts); il compilatore li integra nel bytecode. GPIO 1/2/4/5/6 sono I/O digitali sicuri sull'ESP32-S3.
Compila e flasha il firmware (una volta sola)
- Prepara la toolchain Zephyr — un workspace
weste la Zephyr SDK (la guida Getting Started di Zephyr). I sorgenti del firmware sono infirmware-zephyr/. - Da
firmware-zephyr/, compila per l'ESP32-S3:west build -b esp32s3_devkitc/esp32s3/procpu zephyr
Eseguiwest packages pip --installuna volta cosìesptool ≥ 5.0.2è nelPATHal momento del flash. - Collega la porta “USB UART” della scheda (il chip CH343) e flasha con
west flash— su questa porta l'auto-reset di esptool in modalità download funziona. - Se un flash non riesce ad auto-resettare (ad es. il firmware è già in esecuzione): tieni premuto BOOT, premi RST, rilascia BOOT, poi di nuovo
west flash. - Due porte, due compiti: flashi dalla porta “USB UART”, ma connetti l'IDE dalla porta “USB OTG” (USB nativo) — non scambiarle.
Connetti ed esegui dall'IDE
- Apri
https://textochip.comin Chrome/Edge/Brave. - Sposta l'interruttore su Scheda reale.
- Clicca Connetti scheda e scegli la porta “USB OTG” (USB nativo) della scheda — appare come
CDC_ACM_serial_backend. (Non la porta “USB UART” da cui hai flashato.) - Clicca Carica ed esegui. Usa Stop e Override durante l'esecuzione.
west flash; aprirla nel browser resetterebbe il chip (vedresti WARN: no PONG).3 · Altre schede (Zephyr)
Poiché il firmware è Zephyr, la stessa identica VM, ISA e mission girano su qualsiasi scheda supportata da Zephyr — cambia solo un piccolo file HAL. Il compilatore nel browser, il protocollo seriale e i tuoi programmi .bas restano identici, quindi l'intero flusso dell'IDE è invariato da scheda a scheda.
Cosa cambia per ogni scheda
Solo due cose: i numeri delle GPIO in lib/boardProfile.ts (il compilatore li integra nel bytecode) e una implementazione della HAL — circa 9 funzioni che mappano pin/PWM/clock su quel chip. Poi compili per il target con west build -b <board> zephyr.
Nordic nRF54L (in arrivo)
Il prossimo target è il nRF54LM20 DK. Lo compili con l<b>nRF Connect SDK</b> (lo Zephyr di Nordic): <code>west build -b nrf54lm20dk/nrf54lm20a/cpuapp zephyr</code>, poi <code>west flash</code>. Stesso flusso dellIDE via Web Serial; OVERRIDE via BLE e mission edge-AI sull'NPU Axon verranno dopo.
Il linguaggio, in breve
Un primo programma — un semaforo in loop (Progetto 01):
10 LED red, on 20 WAIT 5s 30 LED red, off 40 LED yellow, on 50 WAIT 1s 60 LED yellow, off 70 LED green, on 80 WAIT 5s 90 LED green, off 100 GOTO 10
Il sottoinsieme eseguibile compila in bytecode: LED, WAIT, GOTO, GOSUB/RETURN, IF … THEN, LET, aritmetica e confronti, SOUND/PLAY (bip e melodie), BUTTON("A") e MISSION "SEMAFORO" (un attraversamento pedonale completo). Le istruzioni che richiedono hardware assente (motori, fotocamera, GPS…) compilano comunque — generano un no-op e un avviso in console invece di fallire.
Risoluzione dei problemi
- Nessun pulsante “Connetti scheda” / non fa nulla: non sei su un browser desktop Chromium, oppure non sei su HTTPS. Usa Chrome/Edge/Brave su
https://textochip.com. - “no PONG” alla connessione: probabilmente hai aperto la porta “USB UART” (che resetta il chip). Scegli invece la porta “USB OTG” (
CDC_ACM_serial_backend); se non funziona ancora, premi RST, attendi ~3 s, riconnetti. - Porta mancante su Linux: aggiungiti al gruppo
dialout(sudo usermod -a -G dialout $USER) ed esci/rientra. - Non si accende nulla: controlla la polarità dei LED e che i pin cablati corrispondano al profilo della scheda.