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

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

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
-----------------------------------------------------------------------
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

-------------------------------------------------------------------------------
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" *


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);