martedì 8 ottobre 2019
M5Stack Fire
Per interagire con MicroPython direttamente su M5Stack Fire ci si puo' collegare via USB
Si collega il cavo, si apre un terminale seriale e si preme CTRL+C dopo aver premuto il tasto di reset.
Se si usa Minicom si deve disabilitare il controllo di flusso (altrimenti non viene lanciato CTRL+C)
A questo punto si possono inserire comandi Python mediante REPL
Per interagire con il filesystem si puo' usare ampy
ampy --port /dev/ttyUSB0 rm file.py (cancella file)
ampy --port /dev/ttyUSB0 mkdir test (crea dir)
ampy --port /dev/ttyUSB0 ls (lista)
ampy --port /dev/ttyUSB0 put test.py test/test.py (carica un file dal computer al Fire)
Un altro metodo comodo per programmare e' usare VSCode (anche in Linux) usando il plugin m5stack-mpy (si installa usando le istruzioni a questo link)
Una volta installato il plugin si clicca Add M5Stack nella barra in basso e si seleziona la checkbox della porta seriale. Si apre quindi il menu a tendina M5Stack Device da cui si possono gestire anche la cancellazione e creazione dei file nel filesystem
Il metodo forse piu' potente per programmare M5Stack Fire e' usare la Arduino IDE
Si deve aggiungere tra le board il link
https://dl.espressif.com/dl/package_esp32_index.json
Si aggiunge poi la libreria M5Stack direttamente la library manager di Arduino IDE
giovedì 3 ottobre 2019
Ben C1531 scavato vecchia talpa
In un cumulo di rifiuti in una ditta abbandonata ho adocchiato una sagoma familiare, Commodore Datasette 1531, in condizioni penose anche perche' e' stato esposto alle intemperie non si sa quanto tempo
All'interno era presente una cassetta ma e' stato difficile da estrarre perche' tutti i pulsanti sono bloccati per l'ossido compreso lo Eject
Frugando su Internet ho trovato che la cassetta e' relativa al nr. 3 del maggio 1986 della rivista C16/MSX
All'interno era presente una cassetta ma e' stato difficile da estrarre perche' tutti i pulsanti sono bloccati per l'ossido compreso lo Eject
Frugando su Internet ho trovato che la cassetta e' relativa al nr. 3 del maggio 1986 della rivista C16/MSX
lunedì 30 settembre 2019
Scheda memoria da tornio industriale
Ho recuperato questa scheda accanto al tornio della foto successiva. Mostra un sigla ECS 7T212 (una ditta ECS che fa programmazione elettronica e' ancora rintracciabile su Internet ed e' stata fondata nel 1995 quindi si tratta di hardware "recente") e dovrebbe essere relativa al controllo numerico del tornio stesso
Da un esame degli integrati si dovrebbe trattare di una espansione di memoria da 192 Kb (in word da 8 bit): Di seguito gli integrati presenti...non citata e' presente anche una batteria tampone per la SRAM
TC55257BPL-10 : modulo da 32 Kb da word di 8 bit RAM static CMOS
SN74ALS573BN : Bus Driver, ALS Series, 1-Func, 8-Bit, True Output, TTL, PDIP20
74S74W
74S00N : NAND Gate, S Series, 4-Func, 2-Input, TTL, PDIP14
SN74S32N: OR GATE 4 ch 2 in DIP14
SN74S38N : NAND Gate, 4 Func 2 Inpout
SN74AL580AN
74S38N : NAND gate
SN75140P : bus receiver dual line
201RET2006l : passive delay line
35701301051 : rele'
d4349544
Da un esame degli integrati si dovrebbe trattare di una espansione di memoria da 192 Kb (in word da 8 bit): Di seguito gli integrati presenti...non citata e' presente anche una batteria tampone per la SRAM
TC55257BPL-10 : modulo da 32 Kb da word di 8 bit RAM static CMOS
SN74ALS573BN : Bus Driver, ALS Series, 1-Func, 8-Bit, True Output, TTL, PDIP20
74S74W
74S00N : NAND Gate, S Series, 4-Func, 2-Input, TTL, PDIP14
SN74S32N: OR GATE 4 ch 2 in DIP14
SN74S38N : NAND Gate, 4 Func 2 Inpout
SN74AL580AN
74S38N : NAND gate
SN75140P : bus receiver dual line
201RET2006l : passive delay line
35701301051 : rele'
d4349544
mercoledì 25 settembre 2019
Creazione tweet in automatico su Twitter con Python
Per creare una app per postare in automatico su twitter per prima cosa si deve avere un account developer
Si crea quindi una app (si deve attendere che la app sia autorizzata dopo aver compilato un breve form....necessitano 24 ore per la risposta) e si copiano le chiavi consumer e access_token
per semplicita' si usera' lal libreria tweepy
-----------------------------------------------------------------------
Si crea quindi una app (si deve attendere che la app sia autorizzata dopo aver compilato un breve form....necessitano 24 ore per la risposta) e si copiano le chiavi consumer e access_token
per semplicita' si usera' lal libreria tweepy
-----------------------------------------------------------------------
import tweepy
consumer_key = 'oNexxxxxxxxxxxxxxxxxxxxxx'
consumer_secret = 'ti4xxxxxxxxxxxxxxxxxxxxxxxx' access_token = '4402008xxxxxxxxxxxxxxxxxxxxxxxx' access_token_secret = '59nofxxxxxxxxxxxxxxxxxxxxxxxxxxx' auth = tweepy.OAuthHandler(consumer_key, consumer_secret) auth.set_access_token(access_token, access_token_secret) api = tweepy.API(auth) now = datetime.datetime.now() testo = "Fir " + now.strftime("%d-%m-%Y %H:%M:%S") +"\n" api.update_status(testo)
Scrittura post automatici su pagina Facebook
Per creare dei post automatici su una pagina di Facebook (non il proprio account personale ma una relativa al proprio utente) si installa prima l'SDK in Python di Facebook
A questo punto dal Graph Explorer si devono concedere i permessi di scrittura che devono essere almeno a manage_pages and publish_pages
Si crea quindi una app dal proprio account developer Facebook e per semplicita' si elimina "Richiedi la chiave segreta" per le connesssioni tra server
il codice Python a questo punto e' molto semplice
-------------------------------------------------------------------------------
A questo punto dal Graph Explorer si devono concedere i permessi di scrittura che devono essere almeno a manage_pages and publish_pages
Si crea quindi una app dal proprio account developer Facebook e per semplicita' si elimina "Richiedi la chiave segreta" per le connesssioni tra server
il codice Python a questo punto e' molto semplice
-------------------------------------------------------------------------------
import facebook # facebook-sdk access_token = "xxxxxxxxxxxxxx" # da recuperare nel GraphExplorer graph = facebook.GraphAPI(access_token) facebook_id = "120763xxxxxx" # id della pagina, si trova nelle Informazioni
# o la parte numerica della URL graph.put_object(facebook_id,"feed",message="messaggio")
giovedì 19 settembre 2019
Grep e nomi file
Di solito il comando grep ha come output il testo dove si verifica la stringa richiesta
Per avere solo il nome del file si puo' fare
grep -Ril "stringa" *
Per avere solo il nome del file si puo' fare
grep -Ril "stringa" *
venerdì 13 settembre 2019
Ocatve e MNIST
Volevo visualizzare i dati contenuti nei file di test del database MNIST spesso usati come esempi delle rete neurali (vedi esempi di TensorFlow)
il formato file e' IDX descritto in fondo alla pagina sopra linkata
----------------------------------------------------------------------------------------
clear all;
filename = "C:/Users/l.innocenti/Downloads/train-images.idx3-ubyte";
immagini_id = fopen(filename,"r");
immagini = fread(immagini_id,Inf,"uint8");
numero_immagini = immagini(7,1)*256+immagini(8,1);
righe = immagini(9,1)*16777216+immagini(10,1)*65536+immagini(11,1)*256+immagini(12,1)*1
colonne = immagini(13,1)*16777216+immagini(14,1)*65536+immagini(15,1)*256+immagini(16,1)*1
indice_immagine = 1016;
im1 = immagini(17+(indice_immagine*784):17+((indice_immagine+1)*784)-1);
im1_s = reshape(im1,28,28);
imshow(fliplr(rot90(im1_s,-1)),[]); # mostra a scala di grigi
f2 = "C:/Users/l.innocenti/Downloads/train-labels.idx1-ubyte";
f2_id = fopen(f2,"r");
f2 = fread(f2_id,Inf,"uint8");
valore = f2(indice_immagine+9);
il formato file e' IDX descritto in fondo alla pagina sopra linkata
----------------------------------------------------------------------------------------
clear all;
filename = "C:/Users/l.innocenti/Downloads/train-images.idx3-ubyte";
immagini_id = fopen(filename,"r");
immagini = fread(immagini_id,Inf,"uint8");
numero_immagini = immagini(7,1)*256+immagini(8,1);
righe = immagini(9,1)*16777216+immagini(10,1)*65536+immagini(11,1)*256+immagini(12,1)*1
colonne = immagini(13,1)*16777216+immagini(14,1)*65536+immagini(15,1)*256+immagini(16,1)*1
indice_immagine = 1016;
im1 = immagini(17+(indice_immagine*784):17+((indice_immagine+1)*784)-1);
im1_s = reshape(im1,28,28);
imshow(fliplr(rot90(im1_s,-1)),[]); # mostra a scala di grigi
f2 = "C:/Users/l.innocenti/Downloads/train-labels.idx1-ubyte";
f2_id = fopen(f2,"r");
f2 = fread(f2_id,Inf,"uint8");
valore = f2(indice_immagine+9);
Iscriviti a:
Post (Atom)
Debugger integrato ESP32S3
Aggiornamento In realta' il Jtag USB funziona anche sui moduli cinesi Il problema risiede nell'ID USB della porta Jtag. Nel modulo...
-
In questo post viene indicato come creare uno scatterplot dinamico basato da dati ripresi da un file csv (nel dettaglio il file csv e' c...
-
Questo post e' a seguito di quanto gia' visto nella precedente prova Lo scopo e' sempre il solito: creare un sistema che permet...
-
La scheda ESP32-2432S028R monta un Esp Dev Module con uno schermo TFT a driver ILI9341 di 320x240 pixels 16 bit colore.Il sito di riferiment...