Webbino - Server web "dinamico" per Arduino

È finalmente giunto il momento di annunciare all'intero pianeta la disponibilità di Webbino. Si tratta di un server web per Arduino, che avevo scritto originariamente per il mio progetto SmartStrip, e che ho successivamente separato e reso indipendente, visto che può avere un utilizzo molto più generico.

Le sue funzionaità principali sono le seguenti:

  • Compatibile con molte interfacce di rete:

  • WizNet W5100: Ethernet Shield

  • WizNet W5500: Ethernet Shield 2

  • ENC28J60: KMTronic DINo (first version)

  • WINC1500 (Wi-Fi): WiFi Shield 101, MKR1000

  • ESP8266 (Wi-Fi): Sia in aggiunta ad Arduino (tipo Shield MLT), sia standalone tipo NodeMCU, WeMos D1/D1 Mini...- Possibilità di salvare le pagine HTML nella flash interna o su una SD.

  • Permette di sostituire facilmente tag tipo #TEMPERATURA# nelle pagine HTML con dati dinamici generati al momento della richiesta della pagina.

  • Possibilità di richiamare una funzione alla richiesta di una pagina, con disponibilità dei parametri passati in GET.

La libreria è corredata da una serie di brevi esempi che mostrano come utilizzare le sue funzionalità. Ad esempio, LedControl mostra la facilità con cui è possibile comandare un led (o un relé) da web.

La libreria è attualmente in fase di beta, e sarà presto rilasciata come stabile. Nel frattempo eventuali test, suggerimenti e richieste sono i benvenuti :). Anche le critiche sono benvenute, purché costruttive. Per tutto ciò, e per qualsiasi domanda potete usare questo thread.

Di seguito qualche progetto che già usa Webbino:

Grande sukko! Serviva sto topic :D Comunque sui link che hai messo ti consiglio di mettere QUESTO che almeno è il progetto completo che lo utilizza ;)

Sistemato!

Rispolvero questo topic perché forse pablos e altri non l'hanno visto. Dovevano porre tanti bei quesiti, di cui onestamente sono curioso. :)

Si l'ho visto ora grazie.

Ed ecco la gradita sorpresa di oggi:

|500x281

Ora provare Webbino è ancora più semplice, non avete più scuse :).

Grande Sukko :)

Grazie @As_Needed! Ne approfitto per raccomandarti, appena puoi, di portare il tuo sketch alla versione 0.9.0 di Webbino. L'API ora dovrebbe rimanere stabile e alcune cose dovrebbero risultare più semplici. Inoltre i futuri sviluppi (file binari? ;)) saranno aggiunti a questa.

A breve cancellerò i branch.

Hai ragione Sukko e ora di aggiornare anche il mio sketch ;)

Cosa? Non pensavo era diventato così semplice :D

EasyReplacementTag (tagMacAddr, NET_MAC, evaluate_mac_addr);
EasyReplacementTag (tagIPAddress, NET_IP, evaluate_ip);
EasyReplacementTag (tagNetmask, NET_MASK, evaluate_netmask);
EasyReplacementTag (tagGateway, NET_GW, evaluate_gw);
EasyReplacementTag (tagNetConfSrc, NET_CONF_SRC, evaluate_ip_src);
EasyReplacementTag (tagWebbinoVer, WEBBINO_VER, evaluate_webbino_version);
EasyReplacementTag (tagUptime, UPTIME, evaluate_uptime);
EasyReplacementTag (tagFreeRAM, FREERAM, evaluate_free_ram);

Un bel lavoro :) Praticamente guardando quello che è tra le parentesi, in mezzo ci va il nome del TAG sulla pagina della SD, poi alla terza posizione il nome della PString e all'inizio quello che prima era

static const var_substitution

Giusto? ;)

Direi di sì, occhio solo che la stringa del tag va senza virgolette.

SukkoPera: occhio solo che la stringa del tag va senza virgolette.

Sì. Poi per i file binari questo significa che potrò mettere la mia favicon :)

Non so se vale la pena postare qui, però ho un problema. Praticamente ho aggiornato tutto il mio codice con la nuova libreria, ovviamente con IDE 1.6.12 compilato e tutto e nessun errore ovviamente. Poi dopo quando cerco di accedere all'IP impostato da me non visualizzo niente, come mai?

Queste le definizioni

//SD ED ETHETNET SHIELD///////////////
#define SD_SS 4
WebServer webserver;
#include 
NetworkInterfaceWIZ5x00 netint;
//EthernetServer server(80);

// Configurazione Network
#define IP_ADDRESS 192,168,1,51 //l'ip usato dalla scheda ethernet 
//#define DNS_ADDRESS 208,67,222,222
#define GW_ADDRESS 192,168,1,1 //l'ip del vostro modem
#define NETMASK  255,255,255,0 //la netmask della vostra rete

E nel setup

Serial.println (F("Using Webbino " WEBBINO_VERSION));

  IPAddress ip (IP_ADDRESS);
  //IPAddress dns (DNS_ADDRESS);
  IPAddress gw (GW_ADDRESS);
  IPAddress mask (NETMASK);

    Serial.println (F("Configuring static IP address"));
  byte mac[6] = {0x00, 0x11, 0x22, 0x33, 0x44, 0x55};
  bool ok = netint.begin (mac, ip, dns, gw, mask);


  if (!ok) {
    Serial.println (F("Failed to configure static IP address"));
    while (42)
      ;
  } else {
    Serial.println (F("Static IP configuration done:"));
    Serial.print (F("- IP: "));
    Serial.println (netint.getIP ());
    Serial.print (F("- Netmask: "));
    Serial.println (netint.getNetmask ());
    Serial.print (F("- Default Gateway: "));
    Serial.println (netint.getGateway ());

    Serial.print (F("Initializing SD card..."));
    if (!webserver.begin (netint, NULL, tags, SD_SS)) {
      Serial.println (F(" failed"));
      while (42)
        ;
    }
    Serial.println (F(" done"));
  }

Sicuramente sbaglio qualcosa nel setup. Poi con la seriale mi scrive che tutto è stato configurato, sia ip che scheda SD, insomma tutto "done".

Beh, questo thread serve proprio per queste cose, hai fatto benissimo a postare qui. Cosa ti scrive nel monitor seriale? Hai provato ad abilitare il debug?

Capito ;) Comunque no ancora non ho provato, comunque esce esattamente questo sulla seriale:

Using Webbino 0.9.0
Configuring static IP address
Static IP configuration done:
- IP: 192.168.1.51
- Netmask: 255.255.255.0
- Default Gateway: 192.168.1.1
Initializing SD card... done

Uhm ok, apparentemente sembra tutto a posto allora. Prova a pingarlo.

SukkoPera: Ed ecco la gradita sorpresa di oggi:

|500x281

Ora provare Webbino è ancora più semplice, non avete più scuse :).

Grande Sukko!

Grazie 1000 per il tuo lavoro condiviso

SukkoPera: Uhm ok, apparentemente sembra tutto a posto allora. Prova a pingarlo.

Già, infatti ho pingato sulla cmd e risponde... strano

Non è che sul config devo mettere porta 80 qui ?

define SERVER_PORT 8000

Ah erm, credo proprio di sì, ho lasciato quel default? Prova a contattarlo sulla porta 8000 allora!

SukkoPera: Ah erm, credo proprio di sì, ho lasciato quel default? Prova a contattarlo sulla porta 8000 allora!

Contattandolo alla porta 8000 funziona tutto correttamente, svelato il mistero :) :) Comunque sì, era di default 8000

Cambia qualcosa di pratico da porta 80 a 8000?

Comunque oltre a essere più semplice e più efficiente a come posso notare ho risparmiato pure circa 4/5kb di memoria flash ;)